# HG changeset patch # User e155702 # Date 1550130710 -32400 # Node ID 83f997abf3b52f095faa10a5fa06360bf9434365 first commit diff -r 000000000000 -r 83f997abf3b5 final_main/Makefile --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/Makefile Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,89 @@ +# target and root file name +TARGET = main + +# class files +CLASS_FILE = + +# figure pass +FIG_DIR = ./fig + +# ebb or extractbb +EBB = extractbb + +# dependent document files +TEX_FILES = \ + chapter*.tex \ + thanks.tex + +# dependent image files +SVG_FILES = + +# use bibtex or not (yes|no) +BIBTEX_ENABLED = yes + +# commands to compile document +LATEX = platex +BIBTEX = pbibtex +DVIPDF = dvipdfmx +DVIPS = dvips + +# generated files +DVI_FILE = $(TARGET).dvi +PDF_FILE = $(TARGET).pdf +PS_FILE = $(TARGET).ps +TEX_FILES += $(TARGET).tex +EPS_FILES = $(SVG_FILES:%.svg=%.eps) +AUX_FILES = $(TEX_FILES:%.tex=%.aux) +GENERATED_FILE = \ + $(EPS_FILES) \ + $(DVI_FILE) \ + $(PDF_FILE) \ + $(AUX_FILES) \ + $(TARGET).log \ + $(TARGET).toc \ + $(TARGET).bbl \ + $(TARGET).blg \ + $(TARGET).lof \ + $(TARGET).lol \ + texput.log + +.DEFAULT_GOAL = pdf + +.PHONY : pdf +pdf : $(PDF_FILE) + open $(TARGET).pdf +$(PDF_FILE) : $(DVI_FILE) $(TEX_FILES) $(EPS_FILES) $(CLASS_FILE) + $(DVIPDF) $(TARGET) + +.PHONY : ps +ps : $(PS_FILE) +$(PS_FILE) : $(DVI_FILE) $(TEX_FILES) $(EPS_FILES) $(CLASS_FILE) + $(DVIPS) $(TARGET) + +.PHONY : dvi +dvi : $(DVI_FILE) +$(DVI_FILE) : $(TEX_FILES) $(EPS_FILES) $(CLASS_FILE) + $(LATEX) -halt-on-error $(TARGET) +ifeq ($(BIBTEX_ENABLED),yes) + $(BIBTEX) $(TARGET) +endif + $(LATEX) -halt-on-error $(TARGET) + $(LATEX) -halt-on-error $(TARGET) + +%.eps : %.svg + inkscape --export-area-drawing --without-gui --file="$<" --export-eps="$@" + +.PHONY : clean +clean: + rm -f $(GENERATED_FILE) + +.PHONY : help +help: + @echo "make dvi" + @echo " Make DVI file from tex documents." + @echo "make pdf" + @echo " Make PDF file from DVI file." + @echo "make ps" + @echo " Make PS file from DVI file." + @echo "make clean" + @echo " Remove all generated files." diff -r 000000000000 -r 83f997abf3b5 final_main/bibliography.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/bibliography.tex Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,40 @@ +% 参考文献 +\def\line{−\hspace*{-.7zw}−} + +\begin{thebibliography}{99} +%\bibitem{*}内の * は各自わかりやすい名前などをつけて、 +%論文中には \cite{*} のように使用する。 +%これをベースに書き換えた方が楽かも。 +%書籍、論文、URLによって若干書き方が異なる。 +%URLを載せる人は参考にした年月日を最後に記入すること。 + +\bibitem{Verified} +{比嘉健太, 河野真治}: メタ計算を用いた Continuation based C の検証手法 +, 琉球大学工学部情報工学科平成 29 年度学位論文(修士) (2017). + +\bibitem{CbC-meta} +{宮城光希, 河野真治}: CbC 言語による OS 記述 +, 琉球大学工学部情報工学科平成 29 年度学位論文(学士) (2017). + +\bibitem{CbC-llvm} +{徳森海斗, 河野真治}: LLVM Clang 上の Contimuation based C コンパイラの改良 +, 琉球大学工学部情報工学科平成 28 年度学位論文(修士) (2016). + +\bibitem{Agda} +The Agda wiki \\\verb|http://wiki.portal.chalmers.se/agda/pmwiki.php| + +% \bibtem{Agda-Tutorial} +% {Ulf Norell and James Chapman}: Dependently Typed Programming in Agda +% \\\verb|http://www.cse.chalmers.se/~ulfn/papers/afp08/tutorial.pdf| + +% \bibitem{gears} +% {伊波立樹, 東恩納琢偉, 河野真治}: Code Gear、Data Gear に基づく OS のプロトタイプ +% , 情報処理学会システムソフトウェアとオペレーティング・システム研究会(OS) (2016). + +% \bibitem{llvm} +% The LLVM Compiler Infrastructure. \\\verb|http://llvm.org| + +% \bibitem{llvm_ir} +% LLVM Language Reference Manual. \\\verb|http://llvm.org/docs/LangRef.html| + +\end{thebibliography} diff -r 000000000000 -r 83f997abf3b5 final_main/chapter1.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/chapter1.tex Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,36 @@ +\chapter{画面配信ソフトウェアの活用} +\label{chap:introduction} +\pagenumbering{arabic} + +% 序論の目安としては1枚半ぐらい. +% 英語発表者は,最終予稿の「はじめに」の英訳などを載せてもいいかも. + + + + 現代の講義や発表、プレゼンなどは、用意された資料や PC 画面を見ながら進行することが多い。ゼミなどでは発表者を切り替えながら発表を行う場合もある。通常このような場面では、資料やスライドを表示するためにプロジェクタが使用されている。ゼミの際には発表者を切り替えるたびにプロジェクタにケーブルを差し替える必要がある。ケーブルの差し替えの際に発表者の PC によってはアダプターの種類や解像度の設定により、正常に PC 画面を表示できない場合がある。また、参加者もプロジェクタに集中を割く必要があり、手元の PC と交互に参照する場合、負担になる可能性がある。 + +当研究室で開発している画面配信システム TreeVNC は、発表者の画面を参加者の PC に表示するソフトウェアである。そのため TreeVNC を使用することで、参加者は不自由なく手元の PC を使用しながら講義を受ける事が可能になる。更に発表者の切り替えの際も、ケーブルの差し替えを行わずに共有する画面の切替を可能としている。 + +TreeVNC は VNC(Virtual Network Computing) を使用した画面配信を行っている。通常の VNC では配信側の PC に全ての参加者が接続するため、多人数が接続した際処理しきれず、最悪の場合ソフトウェアが落ちてしまう。TreeVNC ではネットワークに接続した参加者をバイナリツリー状に接続し、 配信コストをクライアントに分散させる仕組みをとっている。そのため、講義で発表者の画面を表示する際、多人数の生徒が参加しても処理性能が下がらない。また、ツリーのルートが参照している VNC サーバーを変更することで、共有する画面の切替が可能となっている。 + +しかし、画面共有は送信するデータ量が多いため、現在の TreeVNC では無線 LAN 接続の場合、画面の配信に遅延が生じてしまう場合がある。そこで本研究では、multicast でのデータ通信の実装やデータの分割・圧縮方法の評価を行うことにより、無線 LAN での配信環境の向上を目指し、TreeVNC の有用性を評価することで講義やゼミを円滑に行えることを目標とする。 + + + +%% TreeVNC を 有線・無線接続の両方で快適に使用できるようにしたい + +%% そのため当研究室では無線接続の際、multicast で通信を行う手法を提案する + +%% multicast 接続で、TreeVNC の実用性を向上させたい + +%%% +% やってること、やりたいことは TreeVNC 上で multicast を実装し、無線接続でも問題なく使用できるようにすること +%%% + +% なんで multicast で実装するの ? +% 現在の TreeVNC は無線接続だと多人数での接続や動画配信を行なった際、画面共有が遅くなる場合があるので、multicast でデータの通信を行えば、クライアント側の負担が軽減され、通信速度の改善が見られやすいと考えるから + + +%\section{論文の構成} + +%\section{Introduction} diff -r 000000000000 -r 83f997abf3b5 final_main/chapter2.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/chapter2.tex Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,87 @@ +\chapter{TreeVNC の基本概念} +%% VNCとはなにか?どのようなものか?どのようにしてなりたっているか? + + TreeVNC は当研究室で開発している画面配信ソフトウェアである。 + +本章は TreeVNC の基本概念となっている技術について説明する。 + +%% どういう概念? どうしてそうするの? どうやってつかうの? +\section{ Virtual Network Computing } + +VNC(Virtual Network Computing) は、RFB プロトコルを用いて PC の遠隔操作を行うことを目的としたリモートデスクトップソフトウェアである。 + +サーバー側とクライアント側に分かれており、起動したサーバーにクライアントが接続することで遠隔操作を可能にしている。 + + +\section{ RFB プロトコル} + +RFB(Remote Frame Buffer)プロトコルは、自身の画面をネットワークを通じて送信し他者の画面に表示するプロトコルである。 + +ユーザがいる側と FrameBuffer への更新が行われる側に分かれ、それぞれを RFB クライアント、RFB サーバと呼ぶ。FrameBuffer は、メモリ上に置かれた画像データのことである。 + +RFB プロトコルでは、始めにプロトコルバージョンの確認、認証を行う。その後クライアントに向けて FrameBuffer の大きさやデスクトップに付けられた名前などが含まれている初期メッセージが送信される。RFB サーバ側は FrameBuffer の更新が行われるたびに RFB クライアントに対して FrameBuffer の変更部分だけを送信する。更に、RFB クライアントの FramebufferUpdateRequest が来るとそれに答え返信する。変更部分だけを送信する理由は、更新がある度に全画面を送信していると、送信するデータ面、更新にかかる時間面において効率が悪いからである。 + +RFB プロトコルには、描画データに使われるエンコードが多数用意されており、更に、独自のエンコードを実装することも可能である。 + + +%%ここより上を修正したい +\section{ TreeVNC の基本構造} +TreeVNC は TightVNC を元に作成されている + + +\section{従来の VNC と TreeVNC の相違点} + +従来の VNC は画面配信を行う際、サーバー側に全てのクライアントが同時に接続してしまうため、多人数に配信を行う場合、クライアントに対する全ての処理をサーバー1つで負担することになり、サーバーの処理性能が落ちてしまう問題点が存在する。 + + +%%従来の VNC の接続方式の図 +%%従来の VNC 使用時のパフォーマンスの計測結果 + + +\section{} +CbC で DataGear を扱う際、 Context と呼ばれる接続可能な CodeGear、 DataGear のリ +スト、Temporal DataGear のためのメモリ空間等を持っている Meta DataGearである。 +CbC で必要な CodeGear 、 DataGear を参照する際は Context を通してアクセスする必 +要がある。 + +\section{stub CodeGear} +CodeGear が必要とする DataGear を取り出す際、 Context を通す必要がある。 +しかし、 Context を直接扱えるようにするのは信頼性を損なう。そのため CbC では +Context を通して必要なデータを取り出して次の Code Gear に接続する stub CodeGear +を定義している。CodeGear は stub CodeGear を介してのみ必要な DataGear へアクセス +することができる。 stub CodeGear は CodeGear 毎に生成され、次の CodeGear へと接 +続される。 +stub CodeGear は CodeGear の Meta CodeGear に当たる。 + + +\section{CbCによる Interface の記述と継続} + +CodeGear は通常の関数と比べ、細かく分割されるためメタ計算をより柔軟に記述でき +る。 CodeGear 、 DataGear にはそれぞれメタレベルとして、 Meta CodeGear +、 Meta DataGear が存在する。 + +CbC で実装していくうちに、stub CodeGear の記述が煩雑になることが分かった。 +そのため 既存の実装を モジュールとして扱うため Interface という仕組みを導入した。 + +Interface は DataGear に対して何らかの操作(API)を行う CodeGear とその +CodeGear で使われる DataGear の集合を抽象化した メタレベルの DataGear +として定義されている。 + +% interface は データ構造に record で interface 名を列挙し、実際の動作をする関数と紐付けている。使用する際は、$ DataName->InterfaceFunk $のように使用する。 + +例として CbC による Stack Interface のソースコード\ref{src:interface-define}, +\ref{src:interface}がある。Stack への push 操作に注目して見ると、 +実態は SingleLinkedStack の push であることが\ref{src:interface}で分 +かる。実際の SingleLinkedStack の push では Stack を指定する必要があるが、 +Interface で実装した Stack では push 先の Stack が stackImpl として扱 +われている。この stackImpl は$ Stack->push $で呼ばれた時の Stack と同じになる。 +これにより、 ユーザーは実行時に Stack を指定する必要がなくなる。 +また、ユーザーが誤って異なる Stack を指定することを防ぐこともできる。 + +このように Interface 記述をすることで CbC で通常記述する必要がある一定の部分を省略し呼び出 +しが容易になる。 + +\lstinputlisting[label=src:interface-define, caption=CbCでのStack-Interfaceの定義] {src/interface.cbc} + +\lstinputlisting[label=src:interface, caption=CbCでのStack-Interfaceの実装] {src/singleLinkedStackInterface.cbc} + diff -r 000000000000 -r 83f997abf3b5 final_main/chapter3.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/chapter3.tex Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,487 @@ +\chapter{定理証明支援器 Agda での証明} + +型システムを用いて証明を行うことができる言語として Agda \cite{agda}が存在する。 +Agda は依存型という型システムを持つ。依存型とは型も第一級オブジェクトとする型シ +ステムで、依存型を持っている言語では型を基本的な操作に制限なしに使用できる +。 +型システムは Curry-Howard 同型対応により命題と型付きラムダ計算が一対一で対応する。 + + +本章では Agda で証明をするために必要な要素について説明し、Natural Deduction での証明とそれに対応して Agda 使って証明ができることを示す。 +% 型システムは Curry-Howard 同型対応により命題と型付きラムダ計算が一対一で対応する。 +% 依存型という表現力の高い型を持つ証明支援系 Agda を用いて型システムで証明が行える +% ことを示す。 + +%% ここではAgdaの文法に触るだけにとどめて Agdaと証明のchapを一つ追加。 +% 其処に自然証明とAgdaの証明とかCurry-Howard対応の話とかを入れるときれいになるか +% も +%% 依存型を持っている言語には Agda の他に ATS 、 Coq 、 F* 、 Idris 、 Shen など +%% がある。 + +\section{Agda の文法} + + +Agda はインデントに意味を持つため、きちんと揃える必要がある。 +また、スペースの有無は厳格にチェックされる。 +なお、 \verb/--/ の後はコメントである。 + +Agda のプログラムでは全てモジュール内部に記述されるため、まずはトップレベルにモ +ジュールを定義する必要がある。トップレベルのモジュールはファイル名と同一になる。 + +通常のモジュールをインポートする時は \verb/import/ キーワードを指定する。 +また、インポートを行なう際に名前を別名に変更することもでき、その際は \verb/as/ キーワードを用いる。 +モジュールから特定の関数のみをインポートする場合は \verb/using/ キーワードの後に +関数名を、関数の名前を変える時は \verb/renaming/キーワードを、特定の関数のみを隠 +す場合は \verb/hiding/ キーワードを用いる。 +なお、モジュールに存在する関数をトップレベルで用いる場合は \verb/opestack に対する操作を定義しており、n/ キーワードを使うことで展開できる。 +モジュールをインポートする例をリスト~\ref{src:agda-import}に示す。 + +\lstinputlisting[label=src:agda-import, caption=Agdaにおけるモジュールのインポート] {src/AgdaImport.agda} + +% また、モジュールには値を渡すことができる。 +% そのようなモジュールは Parameterized Module と呼ばれ、渡された値はそのモジュール内部で一貫して扱える。 +% 例えば、要素の型と比較する二項演算子を使って並べ替えをするモジュール\verb/Sort/ を考える。 +% そのモジュールは引数に型Aと二項演算子 \verb// を用いる。 + +例えば引数が型 \verb/A/ で返り値が型 \verb/B/ の関数は \verb/A -> B/ のように書 +ける。 +また、複数の引数を取る関数の型は \verb/A -> A -> B/ のように書ける。この +時の型は \verb/A -> (A -> B)/のように考えられる。 +Bool 変数 \verb/x/ を取って true を返す関数 \verb/f/はリスト~\ref{src:agda-function}のようになる。 + +\lstinputlisting[label=src:agda-function, caption=Agda における関数定義] {src/AgdaFunction.agda} + +引数は変数名で受けることもでき、具体的なコンストラクタを指定することでそのコンストラクタが渡された時の挙動を定義できる。 +これはパターンマッチと呼ばれ、コンストラクタで case 文を行なっているようなもので +例えば Bool 型の値を反転する \verb/not/ 関数を書くとリスト~\ref{src:agda-not}のようになる。 + +\lstinputlisting[label=src:agda-not, caption=Agdaにおける関数 not の定義] {src/AgdaNot.agda} + +パターンマッチでは全てのコンストラクタのパターンを含まなくてはならない。 +例えば、Bool 型を受け取る関数で \verb/true/ の時の挙動のみを書くことはできない。 +なお、コンストラクタをいくつか指定した後に変数で受けると、変数が持ちうる値は指定した以外のコンストラクタとなる。 +例えばリスト~\ref{src:agda-pattern}の not は x には true しか入ることは無い。 +なお、マッチした値以外の挙動をまとめて書く際には \verb/_/ を用いることもできる。 + +\lstinputlisting[label=src:agda-pattern, caption=Agdaにおけるパターンマッチ] {src/AgdaPattern.agda} + +Agda にはラムダ式が存在している。ラムダ式とは関数内で生成できる無名の関数であり、 +\verb/\arg1 arg2 -> function body/ のように書くことができる。 +例えば Bool 型の引数 \verb/b/ を取って not を適用する \verb/not-apply/ をラムダ式で書くとリスト~\ref{src:agda-lambda}のようになる。 +関数 \verb/not-apply/ をラムダ式を使わずに定義すると \verb/not-apply-2/ になるが、この二つの関数は同一の動作をする。 + +\lstinputlisting[label=src:agda-lambda, caption=Agda におけるラムダ式] {src/AgdaLambda.agda} + +Agda では特定の関数内のみで利用できる関数を \verb/where/ 句で記述できる。 +スコープは \verb/where/句が存在する関数内部のみであるため、名前空間が汚染させることも無い。 +例えば自然数3つを取ってそれぞれ3倍して加算する関数 \verb/f/ を定義するとき、 \verb/where/ を使うとリスト~\ref{src:agda-where} のように書ける。 +これは \verb/f'/ と同様の動作をする。 +\verb/where/ 句は利用したい関数の末尾にインデント付きで \verb/where/ キーワードを記述し、改行の後インデントをして関数内部で利用する関数を定義する。 + +\lstinputlisting[label=src:agda-where, caption=Agda における where 句] {src/AgdaWhere.agda} + +データ型のコンストラクタには自分自身の型を引数に取ることもできる(リスト~\ref{src:agda-nat})。 +自然数のコンストラクタは2つあり、片方は自然数ゼロ、片方は自然数を取って後続数を返すものである。 +例えば0 は \verb/zero/ であり、1 は \verb/suc zero/に、3は \verb/suc (suc (suc zero))/ に対応する。 + +\lstinputlisting[label=src:agda-nat, caption=Agdaにおける自然数の定義] {src/AgdaNat.agda} + +自然数に対する演算は再帰関数として定義できる。 +例えば自然数どうしの加算は二項演算子\verb/+/としてリスト~\ref{src:agda-plus}のように書ける。 + +この二項演算子は中置関数として振る舞う。 +前置や後置で定義できる部分を関数名に \verb/_/ として埋め込んでおくと、関数を呼ぶ +時にあたかも前置や後置演算子のように振る舞うことができる。 +例えば \verb/!_/ を定義すると \verb/! true/ のように利用でき、\verb/_~/ を定義すると \verb/false ~/ のように利用できる。 + +また、Agda は再帰関数が停止するかを判別できる。 +この加算の二項演算子は左側がゼロに対しては明らかに停止する。 +左側が1以上の時の再帰時には \verb/suc n/ から \verb/n/へと減っているため、再帰で繰り返し減らすことでいつかは停止する。 +もし \verb/suc n/ のまま自分自身へと再帰した場合、Agda は警告を出す。 + +\lstinputlisting[label=src:agda-plus, caption=Agda における自然数の加算の定義] {src/AgdaPlus.agda} + +次に依存型について見ていく。 +依存型で最も基本的なものは関数型である。 +依存型を利用した関数は引数の型に依存して返す型を決定できる。 +なお、依存型の解決はモジュールのインポート時に行なわれる。 + +Agda で \verb/(x : A) -> B/ と書くと関数は型 A を持つ x を受け取り、Bを返す。 +ここで B の中で x を扱っても良い。 +例えば任意の型に対する恒等関数はリスト~\ref{src:agda-id}のように書ける。 + +\lstinputlisting[label=src:agda-id, caption=依存型を持つ関数の定義] {src/AgdaId.agda} + +この恒等関数 \verb/identitiy/ は任意の型に適用可能である。 +実際に関数 \verb/identitiy/ を Nat へ適用した例が \verb/identitiy-zero/ である。 + +多相の恒等関数では型を明示的に指定せずとも \verb/zero/ に適用した場合の型は自明に \verb/Nat -> Nat/である。 +Agda はこのような推論をサポートしており、推論可能な引数は省略できる。 +推論によって解決される引数を暗黙的な引数(implicit arguments) と言い、変数を +\verb/{}/ でくくることで表す。 + +例えば、\verb/identitiy/ の対象とする型\verb/A/を暗黙的な引数として省略するとリスト~\ref{src:agda-implicit-id}のようになる。 +この恒等関数を利用する際は特定の型に属する値を渡すだけでその型が自動的に推論される。 +よって関数を利用する際は \verb/id-zero/ のように型を省略して良い。 +なお、関数の本体で暗黙的な引数を利用したい場合は \verb/{variableName}/ で束縛することもできる(\verb/id'/ 関数)。 +適用する場合も \verb/{}/でくくり、\verb/id-true/のように使用する。 + +\lstinputlisting[label=src:agda-implicit-id, caption=Agdaにおける暗黙的な引数を持つ関数] {src/AgdaImplicitId.agda} + +Agda のデータには C における構造体に相当するレコード型も存在する。 +定義を行なう際は \verb/record/キーワードの後にレコード名、型、\verb/where/ の後に \verb/field/ キーワードを入れた後、フィールド名と型名を列挙する。 +例えば x と y の二つの自然数からなるレコード \verb/Point/ を定義するとリスト~\ref{src:agda-record}のようになる。 +レコードを構築する際は \verb/record/ キーワードの後の \verb/{}/ の内部に \verb/fieldName = value/ の形で値を列挙していく。 +複数の値を列挙する際は \verb/;/ で区切る。 + +\lstinputlisting[label=src:agda-record, caption=Agdaにおけるレコード型の定義] {src/AgdaRecord.agda} + +構築されたレコードから値を取得する際には \verb/RecordName.fieldName/ という名前の関数を適用する(リスト~\ref{src:agda-record-proj} 内2行目) 。 +なお、レコードにもパターンマッチが利用できる(リスト~\ref{src:agda-record-proj} 内5行目)。 +レコード内の値は \verb/record oldRecord {field = value ; ... }/ という構文を利用し更新することができる。 +Point の中の x の値を5増やす関数 \verb/xPlus5/ はリスト~\ref{src:agda-record-proj}の 7,8行目のように書ける。 + +\lstinputlisting[label=src:agda-record-proj, caption=Agda におけるレコードの射影、パターンマッチ、値の更新] {src/AgdaRecordProj.agda} + +% Agda における部分型のように振る舞う機能として Instance Arguments が存在する。 +% これはとあるデータ型が、ある型と名前を持つ関数を持つことを保証する機能であり、Haskell における型クラスや Java におけるインターフェースに相当する。 +% Agda における部分型の制約は、必要な関数を定義した record に相当し、その制約を保証するにはその record を instance として登録することになる。 +% 例えば、同じ型と比較することができる、という性質を表すとリスト~\ref{src:agda-type-class}のようになる。 +% 具体的にはとある型 A における中置関数 \verb/_==_/ を定義することに相当する。 + +% \lstinputlisting[label=src:agda-type-class, caption=Agdaにおける部分型制約] {src/AgdaTypeClass.agda} + +% ある型 T がこの部分型制約を満たすことを示すには、型 T でこのレコードを作成できることを示し、それを instance 構文で登録する。 +% Nat 型が Eq の上位型であることを記述するとリスト~\ref{src:agda-instance}のようになる。 + +% \lstinputlisting[label=src:agda-instance, caption=Agdaにおける部分型関係の構築] {src/AgdaInstance.agda} + +% これで \verb/Eq/ が要求される関数に対して Nat が適用できるようになる。 +% 例えば型 A の要素を持つ List A から要素を探してくる elem を定義する。 +% 部分型のインスタンスは \verb/{{}}/ 内部に名前と型名で記述する。 +% なお、名前部分は必須である。 +% 仮に変数として受けても利用しない場合は \verb/_/ で捨てると良い。 +% 部分型として登録した record は関数本体において \verb/{{variableName}}/ という構文で変数に束縛できる。 + +% \lstinputlisting[label=src:agda-use-instance, caption=Agdaにおける部分型を使う関数の定義] {src/AgdaElem.agda} + +% この \verb/elem/ 関数はリスト~\ref{src:agda-elem-apply} のように利用できる。 +% Nat型の要素を持つリストの内部に4が含まれるか確認している。 +% この \verb/listHas4/ は \verb/true/ に評価される。 + +% \lstinputlisting[label=src:agda-elem-apply, caption=部分型を持つ関数の適用] {src/AgdaElemApply.agda} + +\section{Natural Deduction} +% Natural Deduction のお話。細かい規則は…書かなきゃいけないよね… +% いらない規則は省略しようと、少なくとも3段論法を証明できるだけ置く。。。? +% とりあえず証明に使えるやつは全部書いて必要あるやつを詳しく。 + +Natural Deduction (自然演繹)は Gentzen によって作られた論理及びその証明システムである。 +% ~\cite{Girard:1989:PT:64805}。 +命題変数と記号を用いた論理式で論理を記述し、推論規則により変形することで求める論理式を導く。 + +Natural Deduction では次のように + +\begin{eqnarray} + \vdots \\ \nonumber + A \\ \nonumber +\end{eqnarray} + +と書いた時、命題Aを証明したことを意味する。証明は木構造で表わされ、葉の命題は仮 +定となる。 + +\begin{eqnarray} + \label{exp:a_implies_b} + A \\ \nonumber + \vdots \\ \nonumber + B \\ \nonumber +\end{eqnarray} + +式\ref{exp:a_implies_b}のように A を仮定して B を導いたとする。 +この時 A は alive な仮定であり、証明された B は A の仮定に依存していることを意味する。 + +ここで、推論規則により記号 $ \Rightarrow $ を導入する。 + +\begin{prooftree} + \AxiomC{[$ A $]} + \noLine + \UnaryInfC{ $ \vdots $} + \noLine + \UnaryInfC{ $ B $ } + \RightLabel{ $ \Rightarrow \mathcal{I} $} + \UnaryInfC{$ A \Rightarrow B $} +\end{prooftree} + +$ \Rightarrow \mathcal{I} $ を適用することで仮定 A は dead となり、新たな命題 $ A \Rightarrow B $ を導くことができる。 +A という仮定に依存して B を導く証明から、「A が存在すれば B が存在する」という証明を導いたこととなる。 +このように、仮定から始めて最終的に全ての仮定を dead とすることで、仮定に依存しない証明を導ける。 +なお、dead な仮定は \verb/[A]/ のように \verb/[]/ で囲んで書く。 + +alive な仮定を dead にすることができるのは $ \Rightarrow \mathcal{I} $ 規則のみである。 +それを踏まえ、 natural deduction には以下のような規則が存在する。 + +\begin{itemize} + \item Hypothesis + + 仮定。葉にある式が仮定となるため、論理式A を仮定する場合に以下のように書く。 + + $ A $ + + \item Introductions + + 導入。証明された論理式に対して記号を導入することで新たな証明を導く。 + + +\begin{prooftree} + \AxiomC{ $ \vdots $} + \noLine + \UnaryInfC{ $ A $ } + \AxiomC{ $ \vdots $} + \noLine + \UnaryInfC{ $ B $ } + \RightLabel{ $ \land \mathcal{I} $} + \BinaryInfC{$ A \land B $} + \end{prooftree} + +\begin{prooftree} + \AxiomC{ $ \vdots $} + \noLine + \UnaryInfC{ $ A $ } + \RightLabel{ $ \lor 1 \mathcal{I} $} + \UnaryInfC{$ A \lor B $} + \end{prooftree} + +\begin{prooftree} + \AxiomC{ $ \vdots $} + \noLine + \UnaryInfC{ $ B $ } + \RightLabel{ $ \lor 2 \mathcal{I} $} + \UnaryInfC{$ A \lor B $} + \end{prooftree} + +\begin{prooftree} + \AxiomC{[$ A $]} + \noLine + \UnaryInfC{ $ \vdots $} + \noLine + \UnaryInfC{ $ B $ } + \RightLabel{ $ \Rightarrow \mathcal{I} $} + \UnaryInfC{$ A \Rightarrow B $} + \end{prooftree} + +\item Eliminations + + 除去。ある論理記号で構成された証明から別の証明を導く。 + +\begin{prooftree} + \AxiomC{ $ \vdots $} + \noLine + \UnaryInfC{ $ A \land B $ } + \RightLabel{ $ \land 1 \mathcal{E} $} + \UnaryInfC{$ A $} + \end{prooftree} + +\begin{prooftree} + \AxiomC{ $ \vdots $} + \noLine + \UnaryInfC{ $ A \land B $ } + \RightLabel{ $ \land 2 \mathcal{E} $} + \UnaryInfC{$ B $} + \end{prooftree} + +\begin{prooftree} + \AxiomC{ $ \vdots $} + \noLine + \UnaryInfC{ $ A \lor B $ } + + \AxiomC{[$A$]} + \noLine + \UnaryInfC{ $ \vdots $} + \noLine + \UnaryInfC{ $ C $ } + + \AxiomC{[$B$]} + \noLine + \UnaryInfC{ $ \vdots $} + \noLine + \UnaryInfC{ $ C $ } + + \RightLabel{ $ \lor \mathcal{E} $} + \TrinaryInfC{ $ C $ } + \end{prooftree} + +\begin{prooftree} + \AxiomC{ $ \vdots $} + \noLine + \UnaryInfC{ $ A $ } + + \AxiomC{ $ \vdots $} + \noLine + \UnaryInfC{ $ A \Rightarrow B $ } + + \RightLabel{ $ \Rightarrow \mathcal{E} $} + \BinaryInfC{$ B $} + \end{prooftree} + +\end{itemize} + +記号 $ \lor, \land, \Rightarrow $ の導入の除去規則について述べた。 +natural deduction には他にも $ \forall, \exists, \bot $ といった記号が存在するが、ここでは解説を省略する。 + +それぞれの記号は以下のような意味を持つ +\begin{itemize} + \item $ \land $ + conjunction。2つの命題が成り立つことを示す。 + $ A \land B $ と記述すると、 A かつ B と考えることができる。 + + \item $ \lor $ + disjunction。2つの命題のうちどちらかが成り立つことを示す。 + $ A \lor B $ と記述すると、 A または B と考えることができる。 + + \item $ \Rightarrow $ + implication。左側の命題が成り立つ時、右側の命題が成り立つことを示す。 + $ A \Rightarrow B $ と記述すると、 A ならば B と考えることができる。 +\end{itemize} + +Natural Deduction では、これまでで説明したような規則を使い証明を行うことができる。 + +例として Natural Deduction で三段論法の証明を行う。 +このとき、「A は B であり、 B は C である。よって A は C である」 が証明するべき +命題である。 + +この命題では 「A は B であり」と 「B は C である」の二つの小さい命題に分けられる。 +この「A は B であり」から、AからBが導出できることが分かり、これは $ A \Rightarrow B $ と表せる。 +また、「B は C である」から、BからCが導出できることが分かる。これも「A は B であ +り」の時と同様に $ B \Rightarrow C $ と表せる。 + + +\begin{prooftree} + \AxiomC{ $ [A] $ $_{(1)}$} + \AxiomC{ [$ (A \Rightarrow B) \land (B \Rightarrow C)$] $_{(2)}$ } + \RightLabel{ $ \land 1 \mathcal{E} $ } + \UnaryInfC{ $ (A \Rightarrow B) $ } + \RightLabel{ $ \Rightarrow \mathcal{E} $} + \BinaryInfC{ $ B $ } + + \AxiomC{ [$ (A \Rightarrow B) \land (B \Rightarrow C)$] $_{(2)}$ } + \RightLabel{ $ \land 2 \mathcal{E} $ } + \UnaryInfC{ $ (B \Rightarrow C) $ } + + \RightLabel{ $ \Rightarrow \mathcal{E} $} + \BinaryInfC{ $ C $ } + \RightLabel{ $ \Rightarrow \mathcal{I} _{(1)}$} + \UnaryInfC{ $ A \Rightarrow C $} + \RightLabel{ $ \Rightarrow \mathcal{I} _{(2)}$} + \UnaryInfC{ $ ((A \Rightarrow B) \land (B \Rightarrow C)) \Rightarrow (A \Rightarrow C) $} +\end{prooftree} + + +Natural Deductionでは次のような証明木になる。 + + +\begin{figure}[htpb] + \begin{center} + \includegraphics{pic/modus-ponens.pdf} + \end{center} + \caption{自然演繹での三段論法の証明} + \label{fig:modus-ponens} +\end{figure} + +これにより自然演繹を使って三段論法が証明できた。 +%%%%%%%%%%%%%%%%%%%%%% + + +\section{Natural Deduction と 型付き $ \lambda $ 計算} + +ここでは、 Natural Deduction と型付き$ \lambda $ 計算の対応を定義する。 +対応は以下の表\ref{table:curry-howard}のようになる。 + +\begin{center} + \begin{table}[h] +% \scalebox{0.75}{ + \begin{tabular}{|c|c|} \hline + Natural Deduction & 型付き $ \lambda $ 計算 \\ \hline \hline + $ A $ & 型 A を持つ変数 x \\ \hline + $ A \Rightarrow B $ & 型 A を取り型 B の変数を返す関数 f \\ \hline + $ \Rightarrow \mathcal{I} $ & ラムダの抽象化 \\ \hline + $ \Rightarrow \mathcal{E} $ & 関数適用 \\ \hline + $ A \land B $ & 型 A と型 B の直積型 を持つ変数 x \\ \hline + $ \land \mathcal{I} $ & 型A,Bを持つ値から直積型へのコンストラクタ \\ \hline + $ \land 1 \mathcal{E} $ & 直積型からの型Aを取り出す射影fst \\ \hline + $ \land 2 \mathcal{E} $ & 直積型からの型Bを取り出す射影snd \\ \hline + \end{tabular} +% } + \caption{natural deuction と 型付き $ \lambda $ 計算との対応(Curry-Howard Isomorphism)} + \label{table:curry-howard} + \end{table} +\end{center} + +この対応をもとに Agda で型付き $\lambda$ 計算による証明を示す。 +% ここでは例として ((A ならば B) かつ (B ならば C)) ならば (A ならば C) が成り立つという三段論法を証明をする。 +ここでも先程 Natural Deduction で証明した三段論法を例とする。 +% この三段論法は自然演繹では\ref{fig:modus-ponens}のようになっていた。 + +% \begin{figure}[htpb] +% \begin{center} +% \includegraphics{pic/modus-ponens.pdf} +% \end{center} +% \caption{自然演繹での三段論法の証明} +% \label{fig:modus-ponens} +% \end{figure} + +%McCこの証明木に対応するAgdaによる証明はリスト\ref{agda-moduse-ponens}のようになる。 + +\begin{lstlisting}[frame=lrbt,label=agda-moduse-ponens,caption={\footnotesize Agda による + 三段論法の定義と証明}] +data _×_ (A B : Set) : Set where + <_,_> : A → B → A × B + +fst : {A B : Set} → A × B → A +fst < a , _ > = a + +snd : {A B : Set} → A × B → B +snd < _ , b > = b + + +f : {A B C : Set} → ((A → B) × (B → C)) → (A → C) +f = λ p x → (snd p) ((fst p) x) +\end{lstlisting} + +自然演繹での三段論法の証明は、1つの仮定から $ \land 1 \mathcal{E} $ と $ \land 2 \mathcal{E} $ を用いて仮定を二つ取り出し、それぞれに $ \Rightarrow \mathcal{E} $ を適用した後に仮定を $ \Rightarrow \mathcal{I}$ して導出していた。 + +ここで $ \Rightarrow \mathcal{I}$ に対応するのは関数適用である。 +よってこの証明は「一つの変数から fst と snd を使って関数を二つ取り出し、それぞれを関数適用する」という形になる。 +これをラムダ式で書くとリスト~\ref{src:agda-modus-ponens}のようになる。 +仮定 $ (A \rightarrow B) \times (B \rightarrow C) $ と仮定 A から A $ \rightarrow $ C を導いている。 + +仮定に相当する変数 p の型は$ (A \rightarrow B) \times (B \rightarrow C) $ であり、p からそれぞれの命題を取り出す操作が fst と snd に相当する。 +fst p の型は $ (A \rightarrow B) $ であり、snd p の型は $ (B \rightarrow C) $ である。 +もう一つの仮定xの型は A なので、fst p を関数適用することで B が導ける。 +得られた B を snd p に適用することで最終的に C が導ける。 + +\lstinputlisting[label=src:agda-modus-ponens, caption=Agda における三段論法の証明] {src/AgdaModusPonens.agda} + +このように Agda でも自然演繹と同様に証明を記述できる。 diff -r 000000000000 -r 83f997abf3b5 final_main/chapter4.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/chapter4.tex Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,199 @@ +%% Natural Deduction の説明をして、 Agda が命題を証明することができることを示す +%% 章? 要る。。。かどうかは微妙な気がする。 「こういう話で Agda では証明ができます。」 +%% で勝手に証明して証明できたね!はありだけど読み手があんまり嬉しくないかも。 +%% ソレだとやっぱり自然演繹の話しして~同型対応でちゃんとつながってるね~じゃあ +%% Agda で表現できるし証明できるねでいい感じかも + +\chapter{Agda における CbC の表現} + +% ツッコミどころさん +% どうするのかは書けるけどなんでAgdaなの?みたいな話が飛んでくる + +前章では Agda の文法について説明した。 +本章では CbC と対応して CodeGear、 DataGear、 継続を Agda で表現する。 +また、 Agda で継続を記述することで得た知見を示す。 + +\section{Agda での CodeGear 、 DataGear 、 継続の表現} + +%% 書くこと +% CodeGearとDataGearのAgda上での定義 + +DataGear はレコード型で表現できるため、 Agda のレコード型をそのまま利用して定義 +してく。 +記述は~\ref{src:agda-ds}のようになる。 + +\lstinputlisting[label=src:agda-ds, caption=Agda における DataGear の定義] +{src/DataSegment.agda.replaced} + +CodeGear は DataGear を受け取って DataGear を返すという定義であるため、 +$ I \rightarrow O $ を内包する CodeGear 型のデータ型(~\ref{src:agda-cs})を定義する。 + +\lstinputlisting[label=src:agda-cs, caption= Agda における CodeGear 型の定義] {src/CodeSegment.agda.replaced} + +CodeGear 型を定義することで、 Agda での CodeGear の本体は Agda での関数そのもの +と対応する。 +% しかし、そのままだと再帰呼び出しの点で CbC との対応が失われてしまう。 +% そのため、 Agda では \verb/goto/を利用できるのは関数の末尾のみという制約を設ける +% 必要がある。 +% この制約さえ満たせば、 + +CodeGear の実行は CodeGear 型から関数本体を取り出し、レコード型を持つ値を適用す +ることに相当する。 + + +CbC での軽量継続は + +\begin{itemize} + \item 次に実行する CodeGear を指定する + \item CodeGear に渡す DataGear を指定する + \item 現在実行している CodeGear から制御を指定された CodeGear へと移す +\end{itemize} + +の機能を持っている。 + +この機能を満たす関数はソースコード\ref{src:agda-goto} として定義されている。 + +\lstinputlisting[label=src:agda-goto, caption=Agdaにおける goto の定義] {src/Goto.agda.replaced} + +goto は CodeGear よりも一つ Level が上の Meta CodeGear にあたり、次に実行する +CodeGear 型を受け取り、Input DataGear、 Output DataGear を返す。型になっている。 + + +\section{Agda での Stack、 Tree の実装} + +ここでは Agda での Stack 、 Tree の実装を示す。 + +Stack の実装を以下のソースコード\ref{src:stack-impl}で示す。 +実装は SingleLinkedStack という名前で定義されている。 +定義されている API は push を例に残りは省略する。残りのの実装は付録に示す。 %~\ + +\lstinputlisting[label=src:stack-impl, caption=Agdaにおける Stack の実装] {src/AgdaStackImpl.agda.replaced} + +Element は SingleLinkedStack で扱われる要素の定義で、現在のデータ datum と次のデー +タを Maybe 型という値の存在が不確かな場合の型で包み、自身で再帰的に定義している。 +Maybe 型では値が存在する場合は Just 、 存在しない場合は Nothing を返す。 + +SingleLinkedStack 型では、この Element の top 部分のみを定義している。 + +Stack に対する push 操作では stack と push する element 型の datum を受け取り、 datum +の next に現在の top を入れ、 stack の top を受け取った datum に切り替え、新しい +stack を返すというような実装をしている。 + +Tree の実装(以下のソースコード\ref{src:tree-impl})は RedBlackTree という名前で定義されている。 +定義されている API は put 以後省略する。残りのの実装は付録に示す。 %~\ + +\lstinputlisting[label=src:tree-impl, caption=Agdaにおける Tree の実装] {src/AgdaTreeImpl.agda.replaced} + +Node 型は key と value 、 Color と Node の rihgt 、 left の情報を持っている。 +Tree を構成する末端の Node は leafNode 型で定義されている。 + +RedBlackTree 型は root の Node 情報と Tree に関する計算をする際に、そこまでの +Node の経路情報を保持するための nodeStack と 比較するための compare を持っている。 + +Tree の put 操作では tree 、 put するノードのキーと値(k1、value)を引数として受け +取り、Tree の root に Node が存在しているかどうかで場合分けしている。 +Nothing が返ってきたときは RedBlackTree 型の tree 内に定義されている root に受け +取ったキーと値を新しいノードとして追加する。 +Just が返ってきたときは root が存在するので、経路情報を積むために nodeStack を初 +期化し、受け取ったキーと値で新たなノードを作成した後、ノードが追加されるべき位置 +までキーの値を比べて新しい Tree を返すというような実装になっている。 + +\section{Agda における Interface の実装} + +%% 書くこと +% stack の Interface部分と redBlackTree の Interface部分。 +% interfaceとは?->cbcのとこに突っ込んでこっちは同様に〜で済ませたい + +Agda 側でも CbC 側と同様に interface を実装した。 +interface は record で列挙し、ソースコード~\ref{src:agda-interface}のように紐付けることができる。 +CbC とは異なり、 Agda では型を明記する必要があるため record 内に型を記述している。 + +例として Agda で実装した Stack 上の interface (ソースコード\ref{src:agda-interface})を見る。 +Stack の実装は SingleLinkedStack(ソースコード\ref{src:agda-single-linked-stack}) として書かれている。それを Stack 側から +interface を通して呼び出している。 + +ここでの interface の型は Stack の record 内にある pushStack や popStack などで、 +実際に使われる Stack の操作は StackMethods にある push や popである。この push +や pop は SingleLinkedStack で実装されている。 + +% \lstinputlisting[label=src:agda-single-linked-stack, caption=Agda における Stack +% の実装] {src/AgdaSingleLinkedStack.agda.replaced} + +\lstinputlisting[label=src:agda-interface, caption=Agda における Interface の定義] {src/AgdaInterface.agda.replaced} + +interface を通すことで、実際には Stack の push では stackImpl と何らかのデータ a を取 +り、 stack を変更し、継続を返す型であったのが、 pushStack では 何らかのデータ a を取り stack を変更 +して継続を返す型に変わっている。 + +また、 Tree でも interface を記述した。 + +\lstinputlisting[label=src:agda-tree, caption=Tree Interface の定義]{src/AgdaTree.agda.replaced} + +interface を記述することによって、データを push する際に予め決まっている引数を省 +略することができた。 +また、 Agda で interface を記述することで CbC 側では意識していなかった型が、明確 +化された。 + +% 元の push では 送り先の stack を関数に書く必要があり、異なる stack に push +% する可能性があったが、 pushStack では紐付けた Stack に push することになり + +\section{継続を使った Agda における Test , Debug} + +Agda ではプログラムのコンパイルが通ると型の整合性が取れていることは保証できるが、必ず +しも期待した動作をするとは限らない。そのため、本研究中に書いたプログラムが正しい動 +作をしているかを確認するために行なった手法を幾つか示す。 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +今回は実験中にソースコード\ref{src:agda-stack-test}のような Test を書いた。 +この Test では Stack をターゲットにしていて、 Stack に1、 2の二つの$ \mathbb{N} $型のデー +タを push した後、 pop2 Interface を使って Stack に入っている 1、 2 が Stack の +定義である First in Last out の通りに 2、 1 の順で取り出せるかを確認するために作成した。 + +\lstinputlisting[label=src:agda-stack-test, caption=Agdaにおけるテスト]{src/AgdaStackTest.agda.replaced} + +上の Test では、02 が 2つのデータを push し、 03 で 二つのデータを pop する pop2 +を行っている。それらをまとめて記述したものが 04 で 2 回 push し、 2つのデータを pop する動 +作が正しく行われていれば 04 は True を返し、 05 で記述された型通りに互いに等しくなる +ため 05 が refl でコンパイルが通るようになる。 +今回は、 pop2 で取れた値を確認するため 03 の後に 031、 032 の二つの作成した。 +032 では 03 で扱っている値が Maybe であるため、 031 のような比較をする前に値が確 +実に存在していることを示す補題である。 032 を通すことで 031 では 2つの値があり、 +かつ$\mathbb{N}$型である事がわかる。 031 では直接取れた値が 2、 1 の順番で入って +いるかを確認している。 + +この Test でエラーが出なかったことから、 Stack に1、2の二つのデータを pushする +と、 push した値が Stack 上から消えることなく push した順番に取り出せることが分 +かる。 + + +また、継続を用いて記述することで関数の Test を書くことで計算途中のデータ内部をチェックするこ +とができた。 + +ここでの \$ は \( \) をまとめる糖衣構文で、 \$ が書かれた一行を\(\)でくくること +ができる。 +% \ref{sintax}のようなコードを +% \begin{lstlisting}[frame=lrbt,label=sintax,caption={\footnotesize 通常の継続の +% コード}] + +% \end{lstlisting} + +% \begin{lstlisting}[frame=lrbt,label=sintax-sugar,caption={\footnotesize 糖衣構文 +% を用いた継続のコード}] + +% \end{lstlisting} + +ソースコード~\ref{src:agda-tree-debug}のように関数本体に記述してデータを返し、C-c C-n +(Compute normal form) で関数を評価すると関数で扱っているデータを見ることができる。 +また、途中の計算で受ける変数名を変更し、 Return 時にその変更した変数名に変えるこ +とで、計算途中のデータの中身を確認することができる。評価結果はソースコード内にコメントで記述した。 + + \lstinputlisting[label=src:agda-tree-debug, caption=Agdaにおけるテスト]{src/AgdaTreeDebug.agda.replaced} + +今回、この手法を用いることで複数の関数を組み合わせた findNode 関数内に異常があるこ +とが分かった。 + + +%getRedBlackTree の関数に + +% \lstinputlisting[label=agda-Debug, caption=Agdaにおけるデバッグ]{src/AgdaTreeDebug.agda.replaced} +% Tree全然載せてないけどどうしよ。。。どこに書こうかは考えておきましょう diff -r 000000000000 -r 83f997abf3b5 final_main/chapter5.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/chapter5.tex Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,139 @@ +\chapter{Agda による CbC の証明} + +前章では Agda で CodeGear や DataGear の定義を示した。また、 CbC のコード +を Agda にマッピングし等価なコードを生成できることを示した。 +本章では前章で生成した Interface の Stack や Tree のコードを使い Agda で +Interface を経由したコードでの証明が可能であることを示す。 + +% Hoare Logic ベースで証明をすすめる〜みたいなとこをどっかにいれたい。 +% ↑ 上は Tree のコードが証明できないことを示して、その次の章に Hoare Logic でこ +% んな感じにするとできるのでは?っていう感じにしよ + +\section{Agda による Interface 部分を含めた Stack の部分的な証明} +\label{src:agda-interface-stack} + +% Stack の仕様記述 +ここでの証明とは Stack の処理が特定の性質を持つことを保証することである。 + +Stack の処理として様々な性質が存在する。例えば、 + +\begin{itemize} + \item Stack に push した値は存在する + \item Stack に push した値は取り出すことができる + \item Stack に push した値を pop した時、その値は Stack から消える + \item どのような状態の Stack に値を push しても中に入っているデータの順序は変わらない + \item どのような状態の Stack でも、値を push した後 pop した値は直前に入れた値と一致する +\end{itemize} + +などの性質がある。 + +本セクションでは「どのような状態の Stack でも、値を push した後 pop した値は直前 +に入れた値と一致する」という性質を証明する。 + + +% この証明では任意の Stack に2回 push したあと2回 pop すると push したものと同じ +% ものが受け取れることを 証明している。 + +まず始めに不定状態の Stack を定義する。ソースコード~\ref{src:agda-in-some-state} +の stackInSomeState 型は中身の分からない抽象的な Stack を表現している。ソースコー +ド~\ref{src:agda-in-some-state}の証明ではこのstackInSomeState に対して、 push を +2回行い、 pop2 をして取れたデータは push したデータと同じものになることを証明してい +る。 + + \lstinputlisting[label=src:agda-in-some-state, caption=抽象的なStackの定義とpush$->$push$->$pop2 の証明]{src/AgdaStackSomeState.agda.replaced} + +% Agda でも継続を使った書き方で Interface 部分の実装を示した。 + +この証明では stackInSomeState 型の s が抽象的な Stack で、そこに x 、 y の2つのデー +タを push している。また、 pop2 で取れたデータは y1 、 x1 となっていて両方が +Just で返ってくるかつ、 x と x1 、 y と y1 がそれぞれ合同であることが仮定として +型に書かれている。 + +% この辺ちょっと怪しい感じ +この関数本体で返ってくる値は$ x \equiv x1 と y \equiv y1$ のため record でまと +めて refl で推論が通る。 +これにより、抽象化した Stack に対して push 、 pop を行うと push したものと同じも +のを受け取れることが証明できた。 + + +% \lstinputlisting[label=src:agda-Test, caption=]{src/AgdaStackTest.agda.replaced} + +\section{Agda による Interface 部分を含めた Binary Tree の部分的な証明と課題} +ここでは Binary Tree の性質の一部に対して証明を行う。 +Binary Tree の性質として挙げられるのは次のようなものである +% 上の2つはデータ構造として最低限守られるべき部分ではあるがとりあえず書いてる + +\begin{itemize} + \item Tree に対して Node を Put することができる。 + \item Tree に Put された Node は Delete されるまでなくならない。 + \item Tree に 存在する Node とその子の関係は必ず「右の子 $>$ Node」かつ「Node $>$ 左の子」の関係になっている。 + \item どのような状態の Tree に値を put しても Node と子の関係は保たれる + \item どのような状態の Tree でも値を Put した後、その値を Get すると値が取れる。 +\end{itemize} + +ここで証明する性質は + +${!!}$ と書かれているところはまだ記述できていない部分で $?$ としている部分である。 + +\lstinputlisting[label=src:agda-tree-proof, caption=Tree Interface の証 +明]{src/AgdaTreeProof.agda.replaced} + +この Tree の証明では、不定状態の Tree を redBlackInSomeState で作成し、その状態の Tree +に一つ Node を Put し、その Node を Get することができるかを証明しようとしたもの +である。 + +しかし、この証明は Node を取得する際に Put した Node が存在するか、 Get した +Node が存在するのか、などの条件や、 Get した Node と Put した Node が合同なのか、 +key の値が等しい場合の eq は合同と同義であるのか等の様々な補題を証明する必要が +あった。今回この証明では Put した Node と Get した +Node が合同であることを記述しようとしていたがそれまでの計算が異なるため完全に合 +同であることを示すことが困難であった。 + +今後の研究では\ref{hoare-logic} で説明する Hoare Logic を元に証明を +行おうと考えている。 + +\section{Hoare Logic} +\label{hoare-logic} + +Hoare Logic \cite{Hoare1969AnAB} とは Tony Hoare によって提案されたプログラム正 +しさを推論する手法である。図\ref{fig:hoare}のように、 P を前状態(Pre Condition) +、C を処理(Command) 、 Q を後状態(Post Condition) とし、$\{P\} \ C \ \{Q\}$ のように考えたとき、 +プログラムの処理を「前状態を満たした後、処理を行い状態が後状態に変化する」といった形で考える事ができる。 + +\begin{figure}[htpb] + \begin{center} + \scalebox{0.6}[0.6]{\includegraphics{fig/hoare-logic.pdf}} + \end{center} + \caption{hoare logicの流れ} + \label{fig:hoare} +\end{figure} + + +このとき、後状態から前状態を推論することができればそのプログラムは部分的に正しい +動きをすることを証明することができる。 + +この Hoare Logic の前状態、処理、後状態を CodeGear、 input/output の DataGear が表 +\ref{fig:cbc-hoare} のように表せるのではないか考えている。 + +\begin{figure}[htpb] + \begin{center} + \scalebox{0.8}[0.8]{\includegraphics{fig/cbc-hoare.pdf}} + \end{center} + \caption{cbc と hoare logic} + \label{fig:cbc-hoare} +\end{figure} + +この状態を当研究室で提案している CodeGear、 DataGear の単位で考えると +Pre Condition が CodeGear に入力として与えられる Input DataGear、Command が +CodeGear、 Post Condition を Output DataGear として当てはめることができると考えて +いる。 + +今後の研究では CodeGear、 DataGear、継続の概念を Hoare Logic に当てはめ Agda に +当てはめ、幾つかの実装を証明していく。 + +% Hoare Logic ではプログラムの動作が部分的に正しいことが証明できる。 +% 最終的な Stack、Tree の証明は Hoare Logic ベースで行う。 +%% +% 部分正当性がプログラムに関する構造機能法によって合成的に証明できるという考えを導 +% 入した。 +%% \ No newline at end of file diff -r 000000000000 -r 83f997abf3b5 final_main/chapter6.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/chapter6.tex Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,16 @@ +\chapter{まとめ} + +本研究では CodeGear、 DataGear を用いたプログラミング手法を使い、Agda で +Interface を用いたプログラムを実装し、証明を記述した。 +これにより、 CbC で記述した時には細かく分かっていなかった Interface の型が明確になった。 +また、 Hoare Logic を CodeGear 、 DataGear と対応させることで Hoare Logic ベース +で証明が進められると考えている。 +今回の研究中に継続を利用することで得られた知見は、今後の研究で大いに役立つと +考える。 + +今後の課題としては、CbC 上での RedBlackTree の実装や、 Agda 上での RedBlackTree +の実装と証明がある。また、 CodeGear、DataGear をベースにした Hoare Logic を Agda で実 +装する。 +Agda 定義した Hoare Logic を使い、いくつかの証明を実際に記述し、書き方を確立するなどが考えられる。 +他にも、タスクスケジューラの実装を Agda に移し、 SynchronizedQueue の同期、非同 +期の検証などが考えられる。 diff -r 000000000000 -r 83f997abf3b5 final_main/fig/cbc-subtype.graffle Binary file final_main/fig/cbc-subtype.graffle has changed diff -r 000000000000 -r 83f997abf3b5 final_main/fig/cbc-subtype.pdf Binary file final_main/fig/cbc-subtype.pdf has changed diff -r 000000000000 -r 83f997abf3b5 final_main/fig/codesegment.pdf Binary file final_main/fig/codesegment.pdf has changed diff -r 000000000000 -r 83f997abf3b5 final_main/fig/codesegment2.pdf Binary file final_main/fig/codesegment2.pdf has changed diff -r 000000000000 -r 83f997abf3b5 final_main/fig/csds.graffle Binary file final_main/fig/csds.graffle has changed diff -r 000000000000 -r 83f997abf3b5 final_main/fig/csds.pdf Binary file final_main/fig/csds.pdf has changed diff -r 000000000000 -r 83f997abf3b5 final_main/fig/factorial.graffle --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/fig/factorial.graffle Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,580 @@ + + + + + ActiveLayerIndex + 0 + ApplicationVersion + + com.omnigroup.OmniGraffle6 + 169.23.0.276662 + + AutoAdjust + + BackgroundGraphic + + Bounds + {{0, 0}, {559, 783}} + Class + SolidGraphic + ID + 2 + Style + + stroke + + Draws + NO + + + + BaseZoom + 0 + CanvasOrigin + {0, 0} + ColumnAlign + 1 + ColumnSpacing + 36 + CreationDate + 2011-11-12 11:03:25 +0000 + Creator + Nobuyasu Oshiro + DisplayScale + 1 in = 1.00000 in + GraphDocumentVersion + 12 + GraphicsList + + + Bounds + {{337.67999245226383, 177.89999766647816}, {103, 24}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + FontInfo + + Size + 11 + + ID + 44 + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;} +{\colortbl;\red255\green255\blue255;} +\deftab720 +\pard\pardeftab720\qc\partightenfactor0 + +\f0\fs22 \cf0 goto print_factorial} + + Wrap + NO + + + Class + LineGraphic + FontInfo + + Font + Helvetica + Size + 12 + + Head + + ID + 42 + + ID + 43 + Points + + {325.49999356269836, 144} + {325.49999356269836, 235.79999533295631} + + Style + + shadow + + Draws + NO + + stroke + + HeadArrow + FilledArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 33 + + + + Bounds + {{287.99999356269836, 208.79999533295631}, {75, 54}} + Class + ShapedGraphic + ID + 42 + Shape + Circle + Style + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\partightenfactor0 + +\f0\fs24 \cf0 print_\ +factorial} + VerticalPad + 0.0 + + + + Bounds + {{284.99999356269836, 45.359998986124992}, {81, 24}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + FontInfo + + Size + 11 + + ID + 37 + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;} +{\colortbl;\red255\green255\blue255;} +\deftab720 +\pard\pardeftab720\qc\partightenfactor0 + +\f0\fs22 \cf0 goto factorial0} + + Wrap + NO + + + Bounds + {{208.49999356269836, 106.55999761819839}, {81, 24}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + FontInfo + + Size + 11 + + ID + 36 + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;} +{\colortbl;\red255\green255\blue255;} +\deftab720 +\pard\pardeftab720\qc\partightenfactor0 + +\f0\fs22 \cf0 goto factorial0} + + Wrap + NO + + + Class + LineGraphic + FontInfo + + Font + Helvetica + Size + 12 + + Head + + ID + 33 + + ID + 35 + Points + + {325.49999356269836, 144} + {294.49999356269836, 93.08203125} + {351.578125, 84.4765625} + {325.49999356269836, 144} + + Style + + shadow + + Draws + NO + + stroke + + HeadArrow + FilledArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 33 + + + + Class + LineGraphic + FontInfo + + Font + Helvetica + Size + 12 + + Head + + ID + 33 + + ID + 34 + Points + + {183, 144} + {325.49999356269836, 144} + + Style + + shadow + + Draws + NO + + stroke + + HeadArrow + FilledArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 3 + + + + Bounds + {{287.99999356269836, 117}, {75, 54}} + Class + ShapedGraphic + ID + 33 + Shape + Circle + Style + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\partightenfactor0 + +\f0\fs24 \cf0 factorial 0} + VerticalPad + 0.0 + + + + Bounds + {{147, 117}, {72, 54}} + Class + ShapedGraphic + ID + 3 + Shape + Circle + Style + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\partightenfactor0 + +\f0\fs24 \cf0 factorial} + VerticalPad + 0.0 + + + + GridInfo + + GuidesLocked + NO + GuidesVisible + YES + HPages + 1 + ImageCounter + 1 + KeepToScale + + Layers + + + Lock + NO + Name + Layer 1 + Print + YES + Slices + NO + View + YES + + + LayoutInfo + + Animate + NO + circoMinDist + 18 + circoSeparation + 0.0 + layoutEngine + dot + neatoLineLength + 0.20000000298023224 + neatoSeparation + 0.0 + twopiSeparation + 0.0 + + LinksVisible + NO + MagnetsVisible + NO + MasterSheets + + ModificationDate + 2017-02-09 07:19:20 +0000 + Modifier + atton + NotesVisible + NO + Orientation + 2 + OriginVisible + NO + PageBreaks + YES + PrintInfo + + NSBottomMargin + + float + 41 + + NSHorizonalPagination + + coded + BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFxlwCG + + NSLeftMargin + + float + 18 + + NSPaperSize + + size + {595, 842} + + NSPrintReverseOrientation + + coded + BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFxlwCG + + 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 + Expanded_Canvases + + Frame + {{87, 100}, {989, 938}} + ShowInfo + + ShowRuler + + Sidebar + + SidebarWidth + 200 + TopSlabHeight + 250 + VisibleRegion + {{0, 0}, {475, 780}} + Zoom + 1 + ZoomValues + + + Canvas 1 + 1 + 1 + + + + + diff -r 000000000000 -r 83f997abf3b5 final_main/fig/factorial.pdf Binary file final_main/fig/factorial.pdf has changed diff -r 000000000000 -r 83f997abf3b5 final_main/fig/gears-meta.graffle --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/fig/gears-meta.graffle Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,974 @@ + + + + + ActiveLayerIndex + 0 + ApplicationVersion + + com.omnigroup.OmniGraffle6 + 169.5.0.253125 + + AutoAdjust + + BackgroundGraphic + + Bounds + {{0, 0}, {1118.4000244140625, 782.79998779296875}} + Class + SolidGraphic + ID + 2 + Style + + stroke + + Draws + NO + + + + BaseZoom + 0 + CanvasOrigin + {0, 0} + ColumnAlign + 1 + ColumnSpacing + 36 + CreationDate + 2014-02-10 06:36:22 +0000 + Creator + utah + DisplayScale + 1 in = 1 in + GraphDocumentVersion + 12 + GraphicsList + + + Class + LineGraphic + FontInfo + + Font + Helvetica + Size + 12 + + ID + 34 + Points + + {414, 72} + {468, 72} + + Style + + shadow + + Draws + NO + + stroke + + HeadArrow + 0 + Legacy + + LineType + 1 + Pattern + 1 + TailArrow + 0 + + + + + Class + LineGraphic + FontInfo + + Font + Helvetica + Size + 12 + + Head + + ID + 29 + Info + 2 + + ID + 33 + Points + + {189, 72} + {243, 72} + + Style + + shadow + + Draws + NO + + stroke + + HeadArrow + 0 + Legacy + + LineType + 1 + Pattern + 1 + TailArrow + 0 + + + + + Class + LineGraphic + FontInfo + + Font + Helvetica + Size + 12 + + ID + 32 + Points + + {585, 99} + {585, 135} + + Style + + shadow + + Draws + NO + + stroke + + HeadArrow + FilledArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + + + Class + LineGraphic + FontInfo + + Font + Helvetica + Size + 12 + + ID + 31 + OrthogonalBarAutomatic + + OrthogonalBarPoint + {0, 0} + OrthogonalBarPosition + -1 + Points + + {414, 162} + {468, 162} + {468, 72} + {531, 72} + + Style + + shadow + + Draws + NO + + stroke + + HeadArrow + FilledArrow + Legacy + + LineType + 2 + TailArrow + 0 + + + + + Class + LineGraphic + FontInfo + + Font + Helvetica + Size + 12 + + ID + 30 + Points + + {360, 99} + {360, 135} + + Style + + shadow + + Draws + NO + + stroke + + HeadArrow + FilledArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + + + Class + LineGraphic + FontInfo + + Font + Helvetica + Size + 12 + + ID + 29 + OrthogonalBarAutomatic + + OrthogonalBarPoint + {0, 0} + OrthogonalBarPosition + -1 + Points + + {189, 162} + {243, 162} + {243, 72} + {306, 72} + + Style + + shadow + + Draws + NO + + stroke + + HeadArrow + FilledArrow + Legacy + + LineType + 2 + TailArrow + 0 + + + + + Class + LineGraphic + FontInfo + + Font + Helvetica + Size + 12 + + ID + 27 + Points + + {135, 99} + {135, 135} + + Style + + shadow + + Draws + NO + + stroke + + HeadArrow + FilledArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + + + Bounds + {{60.5, 198}, {83, 30}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + ID + 26 + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;} +{\colortbl;\red255\green255\blue255;} +\deftab720 +\pard\pardeftab720\qc\partightenfactor0 + +\f0\fs32 \cf0 meta level} + + Wrap + NO + + + Bounds + {{51.0625, 3}, {96, 30}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + ID + 25 + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;} +{\colortbl;\red255\green255\blue255;} +\deftab720 +\pard\pardeftab720\qc\partightenfactor0 + +\f0\fs32 \cf0 normal level} + + Wrap + NO + + + Bounds + {{531, 135}, {108, 54}} + Class + ShapedGraphic + FontInfo + + Font + Helvetica + Size + 9 + + HFlip + YES + ID + 24 + 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} + + Style + + fill + + Color + + b + 0.99999099999999996 + g + 0.99997400000000003 + r + 1 + + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc\partightenfactor0 + +\f0\fs28 \cf0 meta3} + VerticalPad + 0.0 + + + + Bounds + {{306, 135}, {108, 54}} + Class + ShapedGraphic + FontInfo + + Font + Helvetica + Size + 9 + + HFlip + YES + ID + 23 + 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} + + Style + + fill + + Color + + b + 0.99999099999999996 + g + 0.99997400000000003 + r + 1 + + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc\partightenfactor0 + +\f0\fs28 \cf0 meta2} + VerticalPad + 0.0 + + + + Bounds + {{81, 135}, {108, 54}} + Class + ShapedGraphic + FontInfo + + Font + Helvetica + Size + 9 + + HFlip + YES + ID + 22 + 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} + + Style + + fill + + Color + + b + 0.99999099999999996 + g + 0.99997400000000003 + r + 1 + + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc\partightenfactor0 + +\f0\fs28 \cf0 meta1} + VerticalPad + 0.0 + + + + Class + LineGraphic + FontInfo + + Font + Helvetica + Size + 12 + + ID + 21 + Points + + {684, 117} + {54, 117} + + Style + + shadow + + Draws + NO + + stroke + + HeadArrow + 0 + Legacy + + LineType + 1 + Pattern + 2 + TailArrow + 0 + + + + + Bounds + {{531, 45}, {108, 54}} + Class + ShapedGraphic + FontInfo + + Font + Helvetica + Size + 9 + + HFlip + YES + ID + 19 + 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} + + Style + + fill + + Color + + b + 0.99999099999999996 + g + 0.99997400000000003 + r + 1 + + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc\partightenfactor0 + +\f0\fs28 \cf0 code3} + VerticalPad + 0.0 + + + + Bounds + {{306, 45}, {108, 54}} + Class + ShapedGraphic + FontInfo + + Font + Helvetica + Size + 9 + + HFlip + YES + ID + 5 + 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} + + Style + + fill + + Color + + b + 0.99999099999999996 + g + 0.99997400000000003 + r + 1 + + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc\partightenfactor0 + +\f0\fs28 \cf0 code2} + VerticalPad + 0.0 + + + + Bounds + {{81, 45}, {108, 54}} + Class + ShapedGraphic + FontInfo + + Font + Helvetica + Size + 9 + + HFlip + YES + ID + 4 + 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} + + Style + + fill + + Color + + b + 0.99999099999999996 + g + 0.99997400000000003 + r + 1 + + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc\partightenfactor0 + +\f0\fs28 \cf0 code1} + VerticalPad + 0.0 + + + + GridInfo + + SnapsToGrid + YES + + GuidesLocked + NO + GuidesVisible + YES + HPages + 2 + ImageCounter + 1 + KeepToScale + + Layers + + + Lock + NO + Name + Layer 1 + Print + YES + View + YES + + + LayoutInfo + + Animate + NO + circoMinDist + 18 + circoSeparation + 0.0 + layoutEngine + dot + neatoLineLength + 0.20000000298023224 + neatoSeparation + 0.0 + twopiSeparation + 0.0 + + LinksVisible + NO + MagnetsVisible + NO + MasterSheets + + ModificationDate + 2016-02-09 02:10:43 +0000 + Modifier + utah + NotesVisible + NO + Orientation + 2 + OriginVisible + NO + PageBreaks + YES + PrintInfo + + NSBottomMargin + + float + 41 + + NSHorizonalPagination + + coded + BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFxlwCG + + NSLeftMargin + + float + 18 + + NSPaperSize + + size + {595.20001220703125, 841.79998779296875} + + NSPrintReverseOrientation + + coded + BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFxlwCG + + 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 + Expanded_Canvases + + Frame + {{252, -73}, {1263, 938}} + ShowInfo + + ShowRuler + + Sidebar + + SidebarWidth + 200 + TopSlabHeight + 250 + VisibleRegion + {{0, 0}, {749, 780}} + Zoom + 1 + ZoomValues + + + Canvas 1 + 1 + 1 + + + + + diff -r 000000000000 -r 83f997abf3b5 final_main/fig/gears-meta.pdf Binary file final_main/fig/gears-meta.pdf has changed diff -r 000000000000 -r 83f997abf3b5 final_main/fig/goto.graffle --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/fig/goto.graffle Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,445 @@ + + + + + ActiveLayerIndex + 0 + ApplicationVersion + + com.omnigroup.OmniGraffle6 + 169.5.0.253125 + + AutoAdjust + + BackgroundGraphic + + Bounds + {{0, 0}, {559.20001220703125, 782.79998779296875}} + Class + SolidGraphic + ID + 2 + Style + + stroke + + Draws + NO + + + + BaseZoom + 0 + CanvasOrigin + {0, 0} + ColumnAlign + 1 + ColumnSpacing + 36 + CreationDate + 2011-11-12 11:03:25 +0000 + Creator + Nobuyasu Oshiro + DisplayScale + 1 in = 1.00000 in + GraphDocumentVersion + 12 + GraphicsList + + + Bounds + {{366.49999356269836, 106.55999761819839}, {65, 24}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + FontInfo + + Size + 11 + + ID + 37 + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;} +{\colortbl;\red255\green255\blue255;} +\deftab720 +\pard\pardeftab720\qc\partightenfactor0 + +\f0\fs22 \cf0 goto cs2(c)} + + Wrap + NO + + + Bounds + {{209.99999356269836, 106.55999761819839}, {78, 24}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + FontInfo + + Size + 11 + + ID + 36 + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;} +{\colortbl;\red255\green255\blue255;} +\deftab720 +\pard\pardeftab720\qc\partightenfactor0 + +\f0\fs22 \cf0 goto cs1(a+b)} + + Wrap + NO + + + Class + LineGraphic + FontInfo + + Font + Helvetica + Size + 12 + + ID + 35 + Points + + {323.99999356269836, 144} + {426.68373636901379, 143.8290591686964} + + Style + + shadow + + Draws + NO + + stroke + + HeadArrow + FilledArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 33 + + + + Class + LineGraphic + FontInfo + + Font + Helvetica + Size + 12 + + Head + + ID + 33 + + ID + 34 + Points + + {183, 144} + {323.99999356269836, 144} + + Style + + shadow + + Draws + NO + + stroke + + HeadArrow + FilledArrow + Legacy + + LineType + 1 + TailArrow + 0 + + + Tail + + ID + 3 + + + + Bounds + {{287.99999356269836, 117}, {72, 54}} + Class + ShapedGraphic + ID + 33 + Shape + Circle + Style + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\partightenfactor0 + +\f0\fs24 \cf0 cs1} + VerticalPad + 0.0 + + + + Bounds + {{147, 117}, {72, 54}} + Class + ShapedGraphic + ID + 3 + Shape + Circle + Style + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\partightenfactor0 + +\f0\fs24 \cf0 cs0} + VerticalPad + 0.0 + + + + GridInfo + + 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 + neatoLineLength + 0.20000000298023224 + neatoSeparation + 0.0 + twopiSeparation + 0.0 + + LinksVisible + NO + MagnetsVisible + NO + MasterSheets + + ModificationDate + 2016-02-14 19:41:55 +0000 + Modifier + utah + NotesVisible + NO + Orientation + 2 + OriginVisible + NO + PageBreaks + YES + PrintInfo + + NSBottomMargin + + float + 41 + + NSHorizonalPagination + + coded + BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFxlwCG + + NSLeftMargin + + float + 18 + + NSPaperSize + + size + {595.20001220703125, 841.79998779296875} + + NSPrintReverseOrientation + + coded + BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFxlwCG + + 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 + Expanded_Canvases + + Frame + {{507, -237}, {989, 938}} + ShowInfo + + ShowRuler + + Sidebar + + SidebarWidth + 200 + TopSlabHeight + 250 + VisibleRegion + {{0, 0}, {475, 780}} + Zoom + 1 + ZoomValues + + + Canvas 1 + 1 + 1 + + + + + diff -r 000000000000 -r 83f997abf3b5 final_main/fig/goto.pdf Binary file final_main/fig/goto.pdf has changed diff -r 000000000000 -r 83f997abf3b5 final_main/fig/meta-hierarchy.graffle Binary file final_main/fig/meta-hierarchy.graffle has changed diff -r 000000000000 -r 83f997abf3b5 final_main/fig/meta-hierarchy.pdf Binary file final_main/fig/meta-hierarchy.pdf has changed diff -r 000000000000 -r 83f997abf3b5 final_main/fig/meta.graffle Binary file final_main/fig/meta.graffle has changed diff -r 000000000000 -r 83f997abf3b5 final_main/fig/meta.pdf Binary file final_main/fig/meta.pdf has changed diff -r 000000000000 -r 83f997abf3b5 final_main/fig/metameta.graffle Binary file final_main/fig/metameta.graffle has changed diff -r 000000000000 -r 83f997abf3b5 final_main/fig/metameta.pdf Binary file final_main/fig/metameta.pdf has changed diff -r 000000000000 -r 83f997abf3b5 final_main/fig/non-destructive-rbtree.pdf Binary file final_main/fig/non-destructive-rbtree.pdf has changed diff -r 000000000000 -r 83f997abf3b5 final_main/fig/put.graffle Binary file final_main/fig/put.graffle has changed diff -r 000000000000 -r 83f997abf3b5 final_main/fig/put.pdf Binary file final_main/fig/put.pdf has changed diff -r 000000000000 -r 83f997abf3b5 final_main/fig/rbtree.graffle Binary file final_main/fig/rbtree.graffle has changed diff -r 000000000000 -r 83f997abf3b5 final_main/fig/rbtree.pdf Binary file final_main/fig/rbtree.pdf has changed diff -r 000000000000 -r 83f997abf3b5 final_main/fig/ryukyu.pdf Binary file final_main/fig/ryukyu.pdf has changed diff -r 000000000000 -r 83f997abf3b5 final_main/fig/ryukyu.xbb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/fig/ryukyu.xbb Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,8 @@ +%%Title: fig/ryukyu.pdf +%%Creator: extractbb 20160307 +%%BoundingBox: 0 0 595 842 +%%HiResBoundingBox: 0.000000 0.000000 595.000000 842.000000 +%%PDFVersion: 1.3 +%%Pages: 1 +%%CreationDate: Sun Jan 28 19:06:39 2018 + diff -r 000000000000 -r 83f997abf3b5 final_main/fig/subtype-arg.graffle Binary file final_main/fig/subtype-arg.graffle has changed diff -r 000000000000 -r 83f997abf3b5 final_main/fig/subtype-arg.pdf Binary file final_main/fig/subtype-arg.pdf has changed diff -r 000000000000 -r 83f997abf3b5 final_main/fig/subtype-return.graffle Binary file final_main/fig/subtype-return.graffle has changed diff -r 000000000000 -r 83f997abf3b5 final_main/fig/subtype-return.pdf Binary file final_main/fig/subtype-return.pdf has changed diff -r 000000000000 -r 83f997abf3b5 final_main/fig/u-ryukyu-Mark.eps --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/fig/u-ryukyu-Mark.eps Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,1 @@ +%!PS-Adobe-3.0 EPSF-3.0 %%Creator: Adobe Illustrator(TM) 6.0 %%For: (\216\251\227\247\225\252\216U\203V\203X\203e\203\200\214\244\213\206\216\272) () %%Title: (u-ryukyu_Mark2.eps) %%CreationDate: (2/19/01) (2:50 PM) %%BoundingBox: 1 4 195 200 %%HiResBoundingBox: 1.3735 4.3999 194.5 199.3999 %%DocumentProcessColors: Black %%DocumentSuppliedResources: procset Adobe_level2_AI5 1.2 0 %%+ procset Adobe_ColorImage_AI6 1.1 0 %%+ procset Adobe_Illustrator_AI5 1.0 0 %AI5_FileFormat 3 %AI3_ColorUsage: Black&White %AI3_IncludePlacedImages %%CMYKCustomColor: 1 0 0.55 0 (Aqua) %%+ 1 0.5 0 0 (Blue) %%+ 0.5 0.4 0.3 0 (Blue Gray) %%+ 0.8 0.05 0 0 (Blue Sky) %%+ 0.5 0.85 1 0 (Brown) %%+ 1 0.9 0.1 0 (Dark Blue) %%+ 1 0.55 1 0 (Forest Green) %%+ 0.05 0.2 0.95 0 (Gold) %%+ 0.75 0.05 1 0 (Grass Green) %%+ 0 0.45 1 0 (Orange) %%+ 0.15 1 1 0 (Red) %%+ 0.45 0.9 0 0 (Violet) %%AI6_ColorSeparationSet: 1 1 (AI6 Default Color Separation Set) %%+ Options: 1 16 0 1 0 1 1 1 0 1 1 1 1 8.504 0 0 0 0 0 0 0 0 -1 -1 %%+ PPD: 1 21 0 0 60 45 2 2 1 0 0 1 0 0 0 0 0 0 0 0 0 0 () %AI3_TemplateBox: 100 102 100 102 %AI3_TileBox: 0 0 538 781 %AI3_DocumentPreview: Header %AI5_ArtSize: 612 792 %AI5_RulerUnits: 1 %AI5_ArtFlags: 1 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI5_OpenToView: -284 390 1 794 557 18 0 1 3 40 0 0 %AI5_OpenViewLayers: 7 %%PageOrigin:0 0 %%AI3_PaperRect:-28 811 567 -31 %%AI3_Margin:28 -30 -29 31 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %%EndComments %%BeginProlog %%BeginResource: procset Adobe_level2_AI5 1.2 0 %%Title: (Adobe Illustrator (R) Version 5.0 Level 2 Emulation) %%Version: 1.2 0 %%CreationDate: (04/10/93) () %%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved) userdict /Adobe_level2_AI5 25 dict dup begin put /packedarray where not { userdict begin /packedarray { array astore readonly } bind def /setpacking /pop load def /currentpacking false def end 0 } if pop userdict /defaultpacking currentpacking put true setpacking /initialize { Adobe_level2_AI5 begin } bind def /terminate { currentdict Adobe_level2_AI5 eq { end } if } bind def mark /setcustomcolor where not { /findcmykcustomcolor { 0 6 packedarray } bind def /findrgbcustomcolor { 1 5 packedarray } bind def /setcustomcolor { exch aload pop 0 eq { pop 4 { 4 index mul 4 1 roll } repeat 5 -1 roll pop setcmykcolor } { pop 3 { 1 exch sub 3 index mul 1 exch sub 3 1 roll } repeat 4 -1 roll pop setrgbcolor } ifelse } def } if /gt38? mark {version cvr cvx exec} stopped {cleartomark true} {38 gt exch pop} ifelse def userdict /deviceDPI 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt put userdict /level2? systemdict /languagelevel known dup { pop systemdict /languagelevel get 2 ge } if put /level2ScreenFreq { begin 60 HalftoneType 1 eq { pop Frequency } if HalftoneType 2 eq { pop GrayFrequency } if HalftoneType 5 eq { pop Default level2ScreenFreq } if end } bind def userdict /currentScreenFreq level2? {currenthalftone level2ScreenFreq} {currentscreen pop pop} ifelse put level2? not { /setcmykcolor where not { /setcmykcolor { exch .11 mul add exch .59 mul add exch .3 mul add 1 exch sub setgray } def } if /currentcmykcolor where not { /currentcmykcolor { 0 0 0 1 currentgray sub } def } if /setoverprint where not { /setoverprint /pop load def } if /selectfont where not { /selectfont { exch findfont exch dup type /arraytype eq { makefont } { scalefont } ifelse setfont } bind def } if /cshow where not { /cshow { [ 0 0 5 -1 roll aload pop ] cvx bind forall } bind def } if } if cleartomark /anyColor? { add add add 0 ne } bind def /testColor { gsave setcmykcolor currentcmykcolor grestore } bind def /testCMYKColorThrough { testColor anyColor? } bind def userdict /composite? level2? { gsave 1 1 1 1 setcmykcolor currentcmykcolor grestore add add add 4 eq } { 1 0 0 0 testCMYKColorThrough 0 1 0 0 testCMYKColorThrough 0 0 1 0 testCMYKColorThrough 0 0 0 1 testCMYKColorThrough and and and } ifelse put composite? not { userdict begin gsave /cyan? 1 0 0 0 testCMYKColorThrough def /magenta? 0 1 0 0 testCMYKColorThrough def /yellow? 0 0 1 0 testCMYKColorThrough def /black? 0 0 0 1 testCMYKColorThrough def grestore /isCMYKSep? cyan? magenta? yellow? black? or or or def /customColor? isCMYKSep? not def end } if end defaultpacking setpacking %%EndResource %%BeginProcSet: Adobe_ColorImage_AI6 1.1 0 userdict /Adobe_ColorImage_AI6 known not { userdict /Adobe_ColorImage_AI6 24 dict put } if userdict /Adobe_ColorImage_AI6 get begin /initialize { Adobe_ColorImage_AI6 begin Adobe_ColorImage_AI6 { dup type /arraytype eq { dup xcheck { bind } if } if pop pop } forall } def /terminate { end } def currentdict /Adobe_ColorImage_AI6_Vars known not { /Adobe_ColorImage_AI6_Vars 15 dict def } if Adobe_ColorImage_AI6_Vars begin /channelcount 0 def /sourcecount 0 def /sourcearray 4 array def /plateindex -1 def /XIMask 0 def /XIBinary 0 def /XIChannelCount 0 def /XIBitsPerPixel 0 def /XIImageHeight 0 def /XIImageWidth 0 def /XIImageMatrix null def /XIBuffer null def /XIDataProc null def /XIVersion 6 def end /WalkRGBString null def /WalkCMYKString null def /StuffRGBIntoGrayString null def /RGBToGrayImageProc null def /StuffCMYKIntoGrayString null def /CMYKToGrayImageProc null def /ColorImageCompositeEmulator null def /SeparateCMYKImageProc null def /FourEqual null def /TestPlateIndex null def currentdict /_colorimage known not { /colorimage where { /colorimage get /_colorimage exch def } { /_colorimage null def } ifelse } if /_currenttransfer systemdict /currenttransfer get def /colorimage null def /XI null def /WalkRGBString { 0 3 index dup length 1 sub 0 3 3 -1 roll { 3 getinterval { } forall 5 index exec 3 index } for 5 { pop } repeat } def /WalkCMYKString { 0 3 index dup length 1 sub 0 4 3 -1 roll { 4 getinterval { } forall 6 index exec 3 index } for 5 { pop } repeat } def /StuffRGBIntoGrayString { .11 mul exch .59 mul add exch .3 mul add cvi 3 copy put pop 1 add } def /RGBToGrayImageProc { Adobe_ColorImage_AI6_Vars begin sourcearray 0 get exec dup length 3 idiv string dup 3 1 roll /StuffRGBIntoGrayString load exch WalkRGBString end } def /StuffCMYKIntoGrayString { exch .11 mul add exch .59 mul add exch .3 mul add dup 255 gt { pop 255 } if 255 exch sub cvi 3 copy put pop 1 add } def /CMYKToGrayImageProc { Adobe_ColorImage_AI6_Vars begin sourcearray 0 get exec dup length 4 idiv string dup 3 1 roll /StuffCMYKIntoGrayString load exch WalkCMYKString end } def /ColorImageCompositeEmulator { pop true eq { Adobe_ColorImage_AI6_Vars /sourcecount get 5 add { pop } repeat } { Adobe_ColorImage_AI6_Vars /channelcount get 1 ne { Adobe_ColorImage_AI6_Vars begin sourcearray 0 3 -1 roll put channelcount 3 eq { /RGBToGrayImageProc } { /CMYKToGrayImageProc } ifelse load end } if image } ifelse } def /SeparateCMYKImageProc { Adobe_ColorImage_AI6_Vars begin sourcecount 0 ne { sourcearray plateindex get exec } { sourcearray 0 get exec dup length 4 idiv string 0 2 index plateindex 4 2 index length 1 sub { get 255 exch sub 3 copy put pop 1 add 2 index } for pop pop exch pop } ifelse end } def /FourEqual { 4 index ne { pop pop pop false } { 4 index ne { pop pop false } { 4 index ne { pop false } { 4 index eq } ifelse } ifelse } ifelse } def /TestPlateIndex { Adobe_ColorImage_AI6_Vars begin /plateindex -1 def /setcmykcolor where { pop gsave 1 0 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub 0 1 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub 0 0 1 0 setcmykcolor systemdict /currentgray get exec 1 exch sub 0 0 0 1 setcmykcolor systemdict /currentgray get exec 1 exch sub grestore 1 0 0 0 FourEqual { /plateindex 0 def } { 0 1 0 0 FourEqual { /plateindex 1 def } { 0 0 1 0 FourEqual { /plateindex 2 def } { 0 0 0 1 FourEqual { /plateindex 3 def } { 0 0 0 0 FourEqual { /plateindex 5 def } if } ifelse } ifelse } ifelse } ifelse pop pop pop pop } if plateindex end } def /colorimage { Adobe_ColorImage_AI6_Vars begin /channelcount 1 index def /sourcecount 2 index 1 eq { channelcount 1 sub } { 0 } ifelse def 4 sourcecount add index dup 8 eq exch 1 eq or not end { /_colorimage load null ne { _colorimage } { Adobe_ColorImage_AI6_Vars /sourcecount get 7 add { pop } repeat } ifelse } { dup 3 eq TestPlateIndex dup -1 eq exch 5 eq or or { /_colorimage load null eq { ColorImageCompositeEmulator } { dup 1 eq { pop pop image } { Adobe_ColorImage_AI6_Vars /plateindex get 5 eq { gsave 0 _currenttransfer exec 1 _currenttransfer exec eq { 0 _currenttransfer exec 0.5 lt } { 0 _currenttransfer exec 1 _currenttransfer exec gt } ifelse { { pop 0 } } { { pop 1 } } ifelse systemdict /settransfer get exec } if _colorimage Adobe_ColorImage_AI6_Vars /plateindex get 5 eq { grestore } if } ifelse } ifelse } { dup 1 eq { pop pop image } { pop pop Adobe_ColorImage_AI6_Vars begin sourcecount -1 0 { exch sourcearray 3 1 roll put } for /SeparateCMYKImageProc load end systemdict /image get exec } ifelse } ifelse } ifelse } def /XG { pop pop } def /XF { 13 {pop} repeat } def /Xh { Adobe_ColorImage_AI6_Vars begin gsave /XIMask exch 0 ne def /XIImageHeight exch def /XIImageWidth exch def /XIImageMatrix exch def 0 0 moveto XIImageMatrix concat XIImageWidth XIImageHeight scale XIMask { /_lp /null ddef _fc /_lp /imagemask ddef } if /XIVersion 7 def end } def /XH { Adobe_ColorImage_AI6_Vars begin /XIVersion 6 def grestore end } def /XI { Adobe_ColorImage_AI6_Vars begin gsave /XIMask exch 0 ne def /XIBinary exch 0 ne def pop pop /XIChannelCount exch def /XIBitsPerPixel exch def /XIImageHeight exch def /XIImageWidth exch def pop pop pop pop /XIImageMatrix exch def XIBitsPerPixel 1 eq { XIImageWidth 8 div ceiling cvi } { XIImageWidth XIChannelCount mul } ifelse /XIBuffer exch string def XIBinary { /XIDataProc { currentfile XIBuffer readstring pop } def XIVersion 6 le { currentfile 128 string readline pop pop } if } { /XIDataProc { currentfile XIBuffer readhexstring pop } def } ifelse XIVersion 6 le { 0 0 moveto XIImageMatrix concat XIImageWidth XIImageHeight scale XIMask { /_lp /null ddef _fc /_lp /imagemask ddef } if } if XIMask { XIImageWidth XIImageHeight false [ XIImageWidth 0 0 XIImageHeight neg 0 0 ] /XIDataProc load imagemask } { XIImageWidth XIImageHeight XIBitsPerPixel [ XIImageWidth 0 0 XIImageHeight neg 0 0 ] /XIDataProc load XIChannelCount 1 eq { gsave 0 setgray image grestore } { false XIChannelCount colorimage } ifelse } ifelse grestore end } def end %%EndProcSet %%BeginResource: procset Adobe_Illustrator_AI5 1.1 0 %%Title: (Adobe Illustrator (R) Version 5.0 Full Prolog) %%Version: 1.1 0 %%CreationDate: (3/7/1994) () %%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_Illustrator_AI5_vars 81 dict dup begin put /_eo false def /_lp /none def /_pf { } def /_ps { } def /_psf { } def /_pss { } def /_pjsf { } def /_pjss { } def /_pola 0 def /_doClip 0 def /cf currentflat def /_tm matrix def /_renderStart [ /e0 /r0 /a0 /o0 /e1 /r1 /a1 /i0 ] def /_renderEnd [ null null null null /i1 /i1 /i1 /i1 ] def /_render -1 def /_rise 0 def /_ax 0 def /_ay 0 def /_cx 0 def /_cy 0 def /_leading [ 0 0 ] def /_ctm matrix def /_mtx matrix def /_sp 16#020 def /_hyphen (-) def /_fScl 0 def /_cnt 0 def /_hs 1 def /_nativeEncoding 0 def /_useNativeEncoding 0 def /_tempEncode 0 def /_pntr 0 def /_tDict 2 dict def /_wv 0 def /Tx { } def /Tj { } def /CRender { } def /_AI3_savepage { } def /_gf null def /_cf 4 array def /_if null def /_of false def /_fc { } def /_gs null def /_cs 4 array def /_is null def /_os false def /_sc { } def /_pd 1 dict def /_ed 15 dict def /_pm matrix def /_fm null def /_fd null def /_fdd null def /_sm null def /_sd null def /_sdd null def /_i null def /discardSave null def /buffer 256 string def /beginString null def /endString null def /endStringLength null def /layerCnt 1 def /layerCount 1 def /perCent (%) 0 get def /perCentSeen? false def /newBuff null def /newBuffButFirst null def /newBuffLast null def /clipForward? false def end userdict /Adobe_Illustrator_AI5 known not { userdict /Adobe_Illustrator_AI5 91 dict put } if userdict /Adobe_Illustrator_AI5 get begin /initialize { Adobe_Illustrator_AI5 dup begin Adobe_Illustrator_AI5_vars begin discardDict { bind pop pop } forall dup /nc get begin { dup xcheck 1 index type /operatortype ne and { bind } if pop pop } forall end newpath } def /terminate { end end } def /_ null def /ddef { Adobe_Illustrator_AI5_vars 3 1 roll put } def /xput { dup load dup length exch maxlength eq { dup dup load dup length 2 mul dict copy def } if load begin def end } def /npop { { pop } repeat } def /sw { dup length exch stringwidth exch 5 -1 roll 3 index mul add 4 1 roll 3 1 roll mul add } def /swj { dup 4 1 roll dup length exch stringwidth exch 5 -1 roll 3 index mul add 4 1 roll 3 1 roll mul add 6 2 roll /_cnt 0 ddef { 1 index eq { /_cnt _cnt 1 add ddef } if } forall pop exch _cnt mul exch _cnt mul 2 index add 4 1 roll 2 index add 4 1 roll pop pop } def /ss { 4 1 roll { 2 npop (0) exch 2 copy 0 exch put pop gsave false charpath currentpoint 4 index setmatrix stroke grestore moveto 2 copy rmoveto } exch cshow 3 npop } def /jss { 4 1 roll { 2 npop (0) exch 2 copy 0 exch put gsave _sp eq { exch 6 index 6 index 6 index 5 -1 roll widthshow currentpoint } { false charpath currentpoint 4 index setmatrix stroke } ifelse grestore moveto 2 copy rmoveto } exch cshow 6 npop } def /sp { { 2 npop (0) exch 2 copy 0 exch put pop false charpath 2 copy rmoveto } exch cshow 2 npop } def /jsp { { 2 npop (0) exch 2 copy 0 exch put _sp eq { exch 5 index 5 index 5 index 5 -1 roll widthshow } { false charpath } ifelse 2 copy rmoveto } exch cshow 5 npop } def /pl { transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add exch itransform } def /setstrokeadjust where { pop true setstrokeadjust /c { curveto } def /C /c load def /v { currentpoint 6 2 roll curveto } def /V /v load def /y { 2 copy curveto } def /Y /y load def /l { lineto } def /L /l load def /m { moveto } def } { /c { pl curveto } def /C /c load def /v { currentpoint 6 2 roll pl curveto } def /V /v load def /y { pl 2 copy curveto } def /Y /y load def /l { pl lineto } def /L /l load def /m { pl moveto } def } ifelse /d { setdash } def /cf { } def /i { dup 0 eq { pop cf } if setflat } def /j { setlinejoin } def /J { setlinecap } def /M { setmiterlimit } def /w { setlinewidth } def /XR { 0 ne /_eo exch ddef } def /H { } def /h { closepath } def /N { _pola 0 eq { _doClip 1 eq { _eo {eoclip} {clip} ifelse /_doClip 0 ddef } if newpath } { /CRender { N } ddef } ifelse } def /n { N } def /F { _pola 0 eq { _doClip 1 eq { gsave _pf grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _fc /_doClip 0 ddef } { _pf } ifelse } { /CRender { F } ddef } ifelse } def /f { closepath F } def /S { _pola 0 eq { _doClip 1 eq { gsave _ps grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc /_doClip 0 ddef } { _ps } ifelse } { /CRender { S } ddef } ifelse } def /s { closepath S } def /B { _pola 0 eq { _doClip 1 eq gsave F grestore { gsave S grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc /_doClip 0 ddef } { S } ifelse } { /CRender { B } ddef } ifelse } def /b { closepath B } def /W { /_doClip 1 ddef } def /* { count 0 ne { dup type /stringtype eq { pop } if } if newpath } def /u { } def /U { } def /q { _pola 0 eq { gsave } if } def /Q { _pola 0 eq { grestore } if } def /*u { _pola 1 add /_pola exch ddef } def /*U { _pola 1 sub /_pola exch ddef _pola 0 eq { CRender } if } def /D { pop } def /*w { } def /*W { } def /` { /_i save ddef clipForward? { nulldevice } if 6 1 roll 4 npop concat pop userdict begin /showpage { } def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash /setstrokeadjust where {pop false setstrokeadjust} if newpath 0 setgray false setoverprint } def /~ { end _i restore } def /O { 0 ne /_of exch ddef /_lp /none ddef } def /R { 0 ne /_os exch ddef /_lp /none ddef } def /g { /_gf exch ddef /_fc { _lp /fill ne { _of setoverprint _gf setgray /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc ashow } ddef /_pjsf { _fc awidthshow } ddef /_lp /none ddef } def /G { /_gs exch ddef /_sc { _lp /stroke ne { _os setoverprint _gs setgray /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /k { _cf astore pop /_fc { _lp /fill ne { _of setoverprint _cf aload pop setcmykcolor /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc ashow } ddef /_pjsf { _fc awidthshow } ddef /_lp /none ddef } def /K { _cs astore pop /_sc { _lp /stroke ne { _os setoverprint _cs aload pop setcmykcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /x { /_gf exch ddef findcmykcustomcolor /_if exch ddef /_fc { _lp /fill ne { _of setoverprint _if _gf 1 exch sub setcustomcolor /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc ashow } ddef /_pjsf { _fc awidthshow } ddef /_lp /none ddef } def /X { /_gs exch ddef findcmykcustomcolor /_is exch ddef /_sc { _lp /stroke ne { _os setoverprint _is _gs 1 exch sub setcustomcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /A { pop } def /annotatepage { userdict /annotatepage 2 copy known {get exec} {pop pop} ifelse } def /XT { pop pop } def /discard { save /discardSave exch store discardDict begin /endString exch store gt38? { 2 add } if load stopped pop end discardSave restore } bind def userdict /discardDict 7 dict dup begin put /pre38Initialize { /endStringLength endString length store /newBuff buffer 0 endStringLength getinterval store /newBuffButFirst newBuff 1 endStringLength 1 sub getinterval store /newBuffLast newBuff endStringLength 1 sub 1 getinterval store } def /shiftBuffer { newBuff 0 newBuffButFirst putinterval newBuffLast 0 currentfile read not { stop } if put } def 0 { pre38Initialize mark currentfile newBuff readstring exch pop { { newBuff endString eq { cleartomark stop } if shiftBuffer } loop } { stop } ifelse } def 1 { pre38Initialize /beginString exch store mark currentfile newBuff readstring exch pop { { newBuff beginString eq { /layerCount dup load 1 add store } { newBuff endString eq { /layerCount dup load 1 sub store layerCount 0 eq { cleartomark stop } if } if } ifelse shiftBuffer } loop } if } def 2 { mark { currentfile buffer readline not { stop } if endString eq { cleartomark stop } if } loop } def 3 { /beginString exch store /layerCnt 1 store mark { currentfile buffer readline not { stop } if dup beginString eq { pop /layerCnt dup load 1 add store } { endString eq { layerCnt 1 eq { cleartomark stop } { /layerCnt dup load 1 sub store } ifelse } if } ifelse } loop } def end userdict /clipRenderOff 15 dict dup begin put { /n /N /s /S /f /F /b /B } { { _doClip 1 eq { /_doClip 0 ddef _eo {eoclip} {clip} ifelse } if newpath } def } forall /Tr /pop load def /Bb {} def /BB /pop load def /Bg {12 npop} def /Bm {6 npop} def /Bc /Bm load def /Bh {4 npop} def end /Lb { 4 npop 6 1 roll pop 4 1 roll pop pop pop 0 eq { 0 eq { (%AI5_BeginLayer) 1 (%AI5_EndLayer--) discard } { /clipForward? true def /Tx /pop load def /Tj /pop load def currentdict end clipRenderOff begin begin } ifelse } { 0 eq { save /discardSave exch store } if } ifelse } bind def /LB { discardSave dup null ne { restore } { pop clipForward? { currentdict end end begin /clipForward? false ddef } if } ifelse } bind def /Pb { pop pop 0 (%AI5_EndPalette) discard } bind def /Np { 0 (%AI5_End_NonPrinting--) discard } bind def /Ln /pop load def /Ap /pop load def /Ar { 72 exch div 0 dtransform dup mul exch dup mul add sqrt dup 1 lt { pop 1 } if setflat } def /Mb { q } def /Md { } def /MB { Q } def /nc 3 dict def nc begin /setgray { pop } bind def /setcmykcolor { 4 npop } bind def /setcustomcolor { 2 npop } bind def currentdict readonly pop end end setpacking %%EndResource %%EndProlog %%BeginSetup Adobe_level2_AI5 /initialize get exec Adobe_ColorImage_AI6 /initialize get exec Adobe_Illustrator_AI5 /initialize get exec %AI5_Begin_NonPrinting Np %AI3_BeginPattern: (Arrow1.2.out/in) (Arrow1.2.out/in) 1 1 39.4039 39.4039 [ %AI3_Tile (0 O 0 R 0.75 0.75 0.375 0 k 0.75 0.75 0.375 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 1 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 33.9039 15.6187 m 39.4247 20.202 L 39.4247 20.202 L 33.8869 24.6252 L S 39.2997 20.202 m 24.5706 20.202 l 20.4039 20.4792 20.4039 16.8125 v 20.4039 13.1458 20.4039 12.5625 y S %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Arrow1.2.side) (Arrow1.2.side) 1 1 39.404 39.4039 [ %AI3_Tile (0 O 0 R 0.75 0.75 0.375 0 k 0.75 0.75 0.375 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 1 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 20.202 20.202 m 39.404 20.202 l S 33.904 15.6187 m 39.4248 20.202 L 39.4248 20.202 L 33.887 24.6252 L S %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Bricks) (Bricks) 1.6 1.6 73.6 73.6 [ %AI3_Tile (0 O 0 R 0.3 0.85 0.85 0 k 0.3 0.85 0.85 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 1.6 1.6 m 1.6 73.6 L 73.6 73.6 L 73.6 1.6 L 1.6 1.6 L f %AI6_EndPatternLayer ) & (0 O 0 R 1 g 1 G ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 1.6 70.01 m 73.6 70.01 l S 1.6 62.809 m 73.6 62.809 L S 1.6 55.609 m 73.6 55.609 L S 1.6 48.408 m 73.6 48.408 L S 1.6 41.208 m 73.6 41.208 L S 1.6 34.007 m 73.6 34.007 L S 1.6 26.807 m 73.6 26.807 L S 1.6 19.606 m 73.6 19.606 L S 1.6 12.406 m 73.6 12.406 L S 1.6 5.206 m 73.6 5.206 L S 70.01 70.01 m 70.01 62.822 l S 55.61 70.01 m 55.61 62.822 L S 41.21 70.01 m 41.21 62.822 L S 26.81 70.01 m 26.81 62.822 L S 12.41 70.01 m 12.41 62.822 L S 70.01 55.572 m 70.01 48.385 l S 55.61 55.572 m 55.61 48.385 L S 41.21 55.572 m 41.21 48.385 L S 26.81 55.572 m 26.81 48.385 L S 12.41 55.572 m 12.41 48.385 L S 70.01 41.197 m 70.01 34.01 l S 55.61 41.197 m 55.61 34.01 L S 41.21 41.197 m 41.21 34.01 L S 26.81 41.197 m 26.81 34.01 L S 12.41 41.197 m 12.41 34.01 L S 70.01 26.822 m 70.01 19.635 l S 55.61 26.822 m 55.61 19.635 L S 41.21 26.822 m 41.21 19.635 L S 26.81 26.822 m 26.81 19.635 L S 12.41 26.822 m 12.41 19.635 L S 70.01 12.385 m 70.01 5.197 l S 55.61 12.385 m 55.61 5.197 L S 41.21 12.385 m 41.21 5.197 L S 26.81 12.385 m 26.81 5.197 L S 12.41 12.385 m 12.41 5.197 L S 62.797 5.197 m 62.797 1.6 L S 48.397 5.197 m 48.397 1.6 L S 33.997 5.197 m 33.997 1.6 L S 19.597 5.197 m 19.597 1.6 L S 5.197 5.197 m 5.197 1.6 l S 62.797 19.635 m 62.797 12.447 L S 48.397 19.635 m 48.397 12.447 L S 33.997 19.635 m 33.997 12.447 L S 19.597 19.635 m 19.597 12.447 L S 5.197 19.635 m 5.197 12.447 l S 62.797 34.01 m 62.797 26.822 L S 48.397 34.01 m 48.397 26.822 L S 19.597 34.01 m 19.597 26.822 L S 5.197 34.01 m 5.197 26.822 l S 62.797 48.385 m 62.797 41.197 L S 48.397 48.385 m 48.397 41.197 L S 33.997 48.385 m 33.997 41.197 L S 19.597 48.385 m 19.597 41.197 L S 5.197 48.385 m 5.197 41.197 l S 62.797 62.822 m 62.797 55.635 L S 48.397 62.822 m 48.397 55.635 L S 33.997 62.822 m 33.997 55.635 L S 19.597 62.822 m 19.597 55.635 L S 5.197 62.822 m 5.197 55.635 l S 62.797 73.5589 m 62.797 70.072 L S 48.397 73.5589 m 48.397 70.072 L S 33.997 73.5589 m 33.997 70.072 L S 19.597 73.5589 m 19.597 70.072 L S 5.197 73.5589 m 5.197 70.072 l S 33.997 34.01 m 33.997 26.822 L S %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Checks) (Checks) 1 1 31.3995 31.3995 [ %AI3_Tile (0 O 0 R 0 0.9 1 0 k 0 0.9 1 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 1 XR 19.9995 4.8 m 27.5995 4.8 L 27.5995 12.3995 L 19.9995 12.3995 L 19.9995 4.8 L f 31.3995 27.5995 m 31.3995 31.3995 L 27.5995 31.3995 L 27.5995 27.5995 L 31.3995 27.5995 L f 19.9995 27.5995 m 19.9995 19.9995 L 27.5995 19.9995 L 27.5995 27.5995 L 19.9995 27.5995 L f 0 XR 12.3995 12.3995 m 19.9995 12.3995 L 19.9995 19.9995 L 12.3995 19.9995 L 12.3995 12.3995 L f 1 XR 12.3995 27.5995 m 4.8 27.5995 L 4.8 19.9995 L 12.3995 19.9995 L 12.3995 27.5995 L f 4.8 12.3995 m 4.8 4.8 L 12.3995 4.8 L 12.3995 12.3995 L 4.8 12.3995 L f 19.9995 27.5995 m 19.9995 31.3995 L 12.3995 31.3995 L 12.3995 27.5995 L 19.9995 27.5995 L f 12.3995 4.8 m 12.3995 1 L 19.9995 1 L 19.9995 4.8 L 12.3995 4.8 L f 4.8 19.9995 m 1 19.9995 L 1 12.3995 L 4.8 12.3995 L 4.8 19.9995 L f 27.5995 19.9995 m 27.5995 12.3995 L 31.3995 12.3995 L 31.3995 19.9995 L 27.5995 19.9995 L f 4.8 31.3995 m 1 31.3995 L 1 27.5995 L 4.8 27.5995 L 4.8 31.3995 L f 27.5995 1 m 31.3995 1 L 31.3995 4.8 L 27.5995 4.8 L 27.5995 1 L f 1 4.8 m 1 1 L 4.8 1 L 4.8 4.8 L 1 4.8 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0.05 0.2 0 k 0 0.05 0.2 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 1 XR 4.8 4.8 m 4.8 1 L 12.3995 1 L 12.3995 4.8 L 4.8 4.8 L f 4.8 12.3995 m 1 12.3995 L 1 4.8 L 4.8 4.8 L 4.8 12.3995 L f 19.9995 4.8 m 19.9995 1 L 27.5995 1 L 27.5995 4.8 L 19.9995 4.8 L f 12.3995 12.3995 m 12.3995 4.8 L 19.9995 4.8 L 19.9995 12.3995 L 12.3995 12.3995 L f 27.5995 4.8 m 31.3995 4.8 L 31.3995 12.3995 L 27.5995 12.3995 L 27.5995 4.8 L f 12.3995 19.9995 m 4.8 19.9995 L 4.8 12.3995 L 12.3995 12.3995 L 12.3995 19.9995 L f 4.8 27.5995 m 1 27.5995 L 1 19.9995 L 4.8 19.9995 L 4.8 27.5995 L f 19.9995 12.3995 m 27.5995 12.3995 L 27.5995 19.9995 L 19.9995 19.9995 L 19.9995 12.3995 L f 19.9995 19.9995 m 19.9995 27.5995 L 12.3995 27.5995 L 12.3995 19.9995 L 19.9995 19.9995 L f 27.5995 19.9995 m 31.3995 19.9995 L 31.3995 27.5995 L 27.5995 27.5995 L 27.5995 19.9995 L f 12.3995 27.5995 m 12.3995 31.3995 L 4.8 31.3995 L 4.8 27.5995 L 12.3995 27.5995 L f 27.5995 27.5995 m 27.5995 31.3995 L 19.9995 31.3995 L 19.9995 27.5995 L 27.5995 27.5995 L f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Confetti) (Confetti) 4.85 3.617 76.85 75.617 [ %AI3_Tile (0 O 0 R 1 g 1 G ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 4.85 3.617 m 4.85 75.617 L 76.85 75.617 L 76.85 3.617 L 4.85 3.617 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 g 0 G ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 10.6 64.867 m 7.85 62.867 l S 9.1 8.617 m 6.85 6.867 l S 78.1 68.617 m 74.85 67.867 l S 76.85 56.867 m 74.35 55.117 l S 79.6 51.617 m 76.6 51.617 l S 76.35 44.117 m 73.6 45.867 l S 78.6 35.867 m 76.6 34.367 l S 76.1 23.867 m 73.35 26.117 l S 78.1 12.867 m 73.85 13.617 l S 68.35 14.617 m 66.1 12.867 l S 76.6 30.617 m 73.6 30.617 l S 62.85 58.117 m 60.956 60.941 l S 32.85 59.617 m 31.196 62.181 l S 47.891 64.061 m 49.744 66.742 l S 72.814 2.769 m 73.928 5.729 l S 67.976 2.633 m 67.35 5.909 l S 61.85 27.617 m 59.956 30.441 l S 53.504 56.053 m 51.85 58.617 l S 52.762 1.779 m 52.876 4.776 l S 45.391 5.311 m 47.244 7.992 l S 37.062 3.375 m 35.639 5.43 l S 55.165 34.828 m 57.518 37.491 l S 20.795 3.242 m 22.12 5.193 l S 14.097 4.747 m 15.008 8.965 l S 9.736 1.91 m 8.073 4.225 l S 31.891 5.573 m 32.005 8.571 l S 12.1 70.367 m 15.6 68.867 l S 9.35 54.867 m 9.6 58.117 l S 12.85 31.867 m 14.35 28.117 l S 10.1 37.367 m 12.35 41.117 l S 34.1 71.117 m 31.85 68.617 l S 38.35 71.117 m 41.6 68.367 l S 55.1 71.117 m 58.35 69.117 l S 57.35 65.117 m 55.35 61.867 l S 64.35 66.367 m 69.35 68.617 l S 71.85 62.867 m 69.35 61.117 l S 23.6 70.867 m 23.6 67.867 l S 20.6 65.867 m 17.35 65.367 l S 24.85 61.367 m 25.35 58.117 l S 25.85 65.867 m 29.35 66.617 l S 14.1 54.117 m 16.85 56.117 l S 12.35 11.617 m 12.6 15.617 l S 12.1 19.867 m 14.35 22.367 l S 26.1 9.867 m 23.6 13.367 l S 34.6 47.117 m 32.1 45.367 l S 62.6 41.867 m 59.85 43.367 l S 31.6 35.617 m 27.85 36.367 l S 36.35 26.117 m 34.35 24.617 l S 33.85 14.117 m 31.1 16.367 l S 37.1 9.867 m 35.1 11.117 l S 34.35 20.867 m 31.35 20.867 l S 44.6 56.617 m 42.1 54.867 l S 47.35 51.367 m 44.35 51.367 l S 44.1 43.867 m 41.35 45.617 l S 43.35 33.117 m 42.6 30.617 l S 43.85 23.617 m 41.1 25.867 l S 44.35 15.617 m 42.35 16.867 l S 67.823 31.1 m 64.823 31.1 l S 27.1 32.617 m 29.6 30.867 l S 31.85 55.117 m 34.85 55.117 l S 19.6 40.867 m 22.1 39.117 l S 16.85 35.617 m 19.85 35.617 l S 20.1 28.117 m 22.85 29.867 l S 52.1 42.617 m 54.484 44.178 l S 52.437 50.146 m 54.821 48.325 l S 59.572 54.133 m 59.35 51.117 l S 50.185 10.055 m 53.234 9.928 l S 51.187 15.896 m 53.571 14.075 l S 58.322 19.883 m 59.445 16.823 l S 53.1 32.117 m 50.6 30.367 l S 52.85 24.617 m 49.6 25.617 l S 61.85 9.117 m 59.1 10.867 l S 69.35 34.617 m 66.6 36.367 l S 67.1 23.617 m 65.1 22.117 l S 24.435 46.055 m 27.484 45.928 l S 25.437 51.896 m 27.821 50.075 l S 62.6 47.117 m 65.321 46.575 l S 19.85 19.867 m 20.35 16.617 l S 21.85 21.867 m 25.35 22.617 l S 37.6 62.867 m 41.6 62.117 l S 38.323 42.1 m 38.823 38.6 l S 69.35 52.617 m 66.85 53.867 l S 14.85 62.117 m 18.1 59.367 l S 9.6 46.117 m 7.1 44.367 l S 20.6 51.617 m 18.6 50.117 l S 46.141 70.811 m 47.994 73.492 l S 69.391 40.561 m 71.244 43.242 l S 38.641 49.311 m 39.35 52.117 l S 25.141 16.811 m 25.85 19.617 l S 36.6 32.867 m 34.6 31.367 l S 6.1 68.617 m 2.85 67.867 l S 4.85 56.867 m 2.35 55.117 l S 7.6 51.617 m 4.6 51.617 l S 6.6 35.867 m 4.6 34.367 l S 6.1 12.867 m 1.85 13.617 l S 4.6 30.617 m 1.6 30.617 l S 72.814 74.769 m 73.928 77.729 l S 67.976 74.633 m 67.35 77.909 l S 52.762 73.779 m 52.876 76.776 l S 37.062 75.375 m 35.639 77.43 l S 20.795 75.242 m 22.12 77.193 l S 9.736 73.91 m 8.073 76.225 l S 10.1 23.617 m 6.35 24.367 l S 73.217 18.276 m 71.323 21.1 l S 28.823 39.6 m 29.505 42.389 l S 49.6 38.617 m 47.6 37.117 l S 60.323 73.6 m 62.323 76.6 l S 60.323 1.6 m 62.323 4.6 l S %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (DblLine1.2.inner) (DblLine1.2.inner) 1 1 39.2705 39.2706 [ %AI3_Tile (0 O 0 R 1 0.14 0.09 0 k 1 0.14 0.09 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 39.2702 22.175 m 39.2702 13.6108 L 26.66 13.6108 L 26.66 1.0003 L 18.0958 1.0003 L 18.0948 22.175 L 18.0958 22.175 L 18.0958 22.1752 L 39.2702 22.175 L f 39.2708 24.6929 m 15.5779 24.6929 L 15.5779 1.0003 L 14.9037 1.0003 L 14.9032 25.3675 L 39.2708 25.3675 L 39.2708 24.6929 L f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (DblLine1.2.outer) (DblLine1.2.outer) 1 1.0003 39.2706 39.271 [ %AI3_Tile (0 O 0 R 1 0.14 0.09 0 k 1 0.14 0.09 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 39.2708 26.6602 m 13.6111 26.6602 L 13.6111 1.0005 L 22.1751 1 L 22.1751 18.096 L 39.2708 18.096 L 39.2708 26.6602 L f 39.2708 15.578 m 24.6928 15.578 L 24.6928 1 L 25.367 1 L 25.367 14.9038 L 39.2708 14.9038 L 39.2708 15.578 L f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (DblLine1.2.side) (DblLine1.2.side) 1 1 39.2706 39.2706 [ %AI3_Tile (0 O 0 R 1 0.14 0.09 0 k 1 0.14 0.09 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 39.2704 18.0958 m 39.2704 26.6598 L 1.0001 26.6598 L 1.0001 18.0958 L 39.2704 18.0958 L f 39.2704 14.9037 m 39.2704 15.5776 L 1.0001 15.5776 L 1.0001 14.9037 L 39.2704 14.9037 L f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Diamonds) (Diamonds) 1 1 37.1865 41.9411 [ %AI3_Tile (0 O 0 R 0.2 0 1 0 k 0.2 0 1 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 1.0002 1.0004 m 1.0002 41.9411 L 37.1865 41.9411 L 37.1865 1.0004 L 1.0002 1.0004 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 g 0 G ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 1 XR 19.0936 41.9408 m 19.0929 41.9408 L 19.0933 41.9402 L 19.0936 41.9408 L f 7.0311 41.9408 m 7.0304 41.9408 L 7.0308 41.9402 L 7.0311 41.9408 L f 31.1556 41.9408 m 31.1548 41.9408 L 31.1552 41.9402 L 31.1556 41.9408 L f %AI6_EndPatternLayer ) & (0 O 0 R 0.75 0.9 0 0 k 0.75 0.9 0 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 1 XR 37.1865 1 m 37.1865 11.2349 L 31.1552 1 L 37.1865 1 L f 19.0933 1 m 31.1552 1 L 25.124 11.2349 L 19.0933 1 L f 7.0308 1 m 19.0933 1 L 13.062 11.2349 L 7.0308 1 L f 1 1 m 7.0308 1 L 1 11.2349 L 1 1 L f 37.1859 11.2349 m 37.1865 11.236 L 37.1865 31.7059 L 31.1552 21.4704 L 37.1859 11.2349 L f 19.0933 21.4704 m 25.124 11.2349 L 31.1552 21.4704 L 25.124 31.7059 L 19.0933 21.4704 L f 7.0308 21.4704 m 13.062 11.2349 L 19.0933 21.4704 L 13.062 31.7059 L 7.0308 21.4704 L f 1 31.7059 m 1 11.2349 L 7.0308 21.4704 L 1 31.7059 L f 37.1859 31.7059 m 37.1865 31.707 L 37.1865 41.9408 L 31.1556 41.9408 L 31.1552 41.9402 L 37.1859 31.7059 L f 25.124 31.7059 m 31.1552 41.9402 L 31.1548 41.9408 L 19.0936 41.9408 L 19.0933 41.9402 L 25.124 31.7059 L f 13.062 31.7059 m 19.0933 41.9402 L 19.0929 41.9408 L 7.0311 41.9408 L 7.0308 41.9402 L 13.062 31.7059 L f 7.0304 41.9408 m 1 41.9408 L 1 31.7059 L 7.0308 41.9402 L 7.0304 41.9408 L f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Hexagon) (Hexagon) 4 1.6 70.151 77.983 [ %AI3_Tile (0 O 0 R 0 1 0.35 0 k 0 1 0.35 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 70.151 77.983 m 70.151 1.6 L 4 1.6 L 4 77.983 L 70.151 77.983 L f %AI6_EndPatternLayer ) & (0 O 0 R 0.9921 1 0 0 k 0.9921 1 0 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 20.538 30.244 m S 26.05 20.696 m 15.025 20.696 L 9.513 30.244 L 15.025 39.792 L 26.05 39.792 L 31.564 30.244 L 26.05 20.696 L s 20.537 11.148 m S 26.05 1.6 m 15.024 1.6 L 9.512 11.148 L 15.024 20.696 L 26.05 20.696 L 31.563 11.148 L 26.05 1.6 L s 53.614 30.244 m S 59.126 20.696 m 48.101 20.696 L 42.589 30.244 L 48.101 39.792 L 59.126 39.792 L 64.639 30.244 L 59.126 20.696 L s 53.614 11.148 m S 59.126 1.6 m 48.101 1.6 L 42.588 11.148 L 48.101 20.696 L 59.126 20.696 L 64.638 11.148 L 59.126 1.6 L s 20.538 68.436 m S 26.051 58.888 m 15.025 58.888 L 9.513 68.436 L 15.025 77.984 L 26.051 77.984 L 31.564 68.436 L 26.051 58.888 L s 20.538 49.34 m S 26.051 39.792 m 15.025 39.792 L 9.513 49.34 L 15.025 58.888 L 26.05 58.888 L 31.564 49.34 L 26.051 39.792 L s 53.614 68.436 m S 59.127 58.888 m 48.102 58.888 L 42.589 68.436 L 48.101 77.985 L 59.127 77.985 L 64.639 68.436 L 59.127 58.888 L s 53.614 49.34 m S 59.127 39.792 m 48.101 39.792 L 42.589 49.34 L 48.101 58.888 L 59.127 58.888 L 64.639 49.341 L 59.127 39.792 L s 4 20.696 m S 3.876 30.244 m 9.512 30.244 L 15.024 20.696 L 9.512 11.147 L 3.876 11.147 L S 37.075 20.696 m S 42.588 11.148 m 31.563 11.148 L 26.05 20.696 L 31.563 30.244 L 42.589 30.244 L 48.101 20.696 L 42.588 11.148 L s 37.076 58.888 m S 42.589 49.34 m 31.564 49.34 L 26.05 58.888 L 31.564 68.436 L 42.589 68.436 L 48.101 58.888 L 42.589 49.34 L s 70.151 20.696 m S 70.2094 11.147 m 64.639 11.147 L 59.127 20.696 L 64.639 30.244 L 70.2094 30.244 L S 70.152 58.888 m S 70.0427 49.34 m 64.639 49.34 L 59.127 58.888 L 64.639 68.436 L 70.0427 68.436 L S 4 58.888 m S 3.876 68.436 m 9.513 68.436 L 15.025 58.888 L 9.513 49.34 L 3.876 49.34 L S %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Laurel.inner) (Laurel.inner) 1 1 28.5392 28.5392 [ %AI3_Tile (0 O 0 R 0 0.55 1 0.12 k 0 0.55 1 0.12 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 19.2768 15.3585 m 28.9144 15.3585 L 28.9144 14.2335 L 19.2768 14.2335 L 19.2768 15.3585 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0.55 1 0.3 k 0 0.55 1 0.3 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 14.7461 18.9624 m 13.0264 17.8486 11.3273 14.4193 11.3273 10.0362 c 11.3273 5.6547 12.9768 2.1518 14.744 1.1112 C 14.7443 1.1112 L 16.4707 2.1518 18.1679 5.6547 18.1679 10.0362 c 18.1679 14.4143 16.432 17.8633 14.7461 18.9624 C f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Laurel.outer) (Laurel.outer) 1 1.3751 28.5393 28.9143 [ %AI3_Tile (0 O 0 R 0 0.55 1 0.12 k 0 0.55 1 0.12 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 14.2395 10.6375 m 14.2395 1 L 15.3645 1 L 15.3645 10.6375 L 14.2395 10.6375 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0.55 1 0.3 k 0 0.55 1 0.3 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 10.5769 15.124 m 11.6906 16.8438 15.1198 18.5429 19.503 18.5429 c 23.8844 18.5429 27.3874 16.8935 28.428 15.1262 C 28.428 15.1259 L 27.3874 13.3995 23.8844 11.7023 19.503 11.7023 c 15.1249 11.7023 11.676 13.4382 10.5769 15.124 C f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Laurel.side) (Laurel.side) 1.3972 1 28.9364 28.5392 [ %AI3_Tile (0 O 0 R 0 0.55 1 0.12 k 0 0.55 1 0.12 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 29.1571 15.2998 m 1 15.2998 L 1 14.1748 L 29.1571 14.1748 L 29.1571 15.2998 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0.55 1 0.3 k 0 0.55 1 0.3 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 2.0183 27.4787 m 1.5899 25.4751 2.8132 21.8488 5.9125 18.7494 c 9.0107 15.6513 12.654 14.3407 14.6395 14.8545 C 14.6398 14.8547 L 15.1246 16.8113 13.8478 20.4883 10.7496 23.5865 c 7.6538 26.6824 3.9876 27.8936 2.0183 27.4787 C f %AI6_EndPatternLayer ) & (0 O 0 R 0 0.39 0.7 0.12 k 0 0.39 0.7 0.12 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 2.0183 2.0091 m 1.5899 4.0126 2.8132 7.6389 5.9125 10.7382 c 9.0107 13.8365 12.654 15.147 14.6395 14.6332 C 14.6398 14.633 L 15.1246 12.6765 13.8478 8.9993 10.7496 5.9011 c 7.6538 2.8054 3.9876 1.5941 2.0183 2.0091 C f %AI6_EndPatternLayer ) & (0 O 0 R 0 0.55 1 0.3 k 0 0.55 1 0.3 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 15.821 2.0091 m 15.3925 4.0126 16.6159 7.6389 19.7152 10.7382 c 22.8134 13.8365 26.4567 15.147 28.4422 14.6332 C 28.4424 14.633 L 28.9273 12.6765 27.6505 8.9993 24.5523 5.9011 c 21.4565 2.8054 17.7903 1.5941 15.821 2.0091 C f %AI6_EndPatternLayer ) & (0 O 0 R 0 0.39 0.7 0.12 k 0 0.39 0.7 0.12 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 15.821 27.4787 m 15.3925 25.4751 16.6159 21.8488 19.7152 18.7494 c 22.8134 15.6513 26.4567 14.3407 28.4422 14.8545 C 28.4424 14.8547 L 28.9273 16.8113 27.6505 20.4883 24.5523 23.5865 c 21.4565 26.6824 17.7903 27.8936 15.821 27.4787 C f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Leaves-fall) (Leaves-fall) 1 1 52.733 89.816 [ %AI3_Tile (0 O 0 R 0.05 0.2 1 0 k 0.05 0.2 1 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 52.733 89.816 m 52.733 1 L 1 1 L 1 89.816 L 52.733 89.816 L f %AI6_EndPatternLayer ) & (0 O 0 R 0.83 0 1 0 k 0.83 0 1 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 1 D 0 XR 25.317 2.083 m 25.994 2.283 26.284 2.435 V 24.815 5.147 29.266 9.428 30.186 10.168 C 30.787 9.943 30.907 7.41 30.23 6.073 C 31.073 6.196 33.262 4.818 34.02 3.529 C 34.085 4.217 35.655 7.158 36.481 7.535 C 35.561 7.933 34.896 9.406 34.134 10.854 C 35.156 11.021 36.555 10.1 38.026 9.195 C 38.541 9.996 39.915 10.968 41.174 11.484 C 40.086 12.171 39.591 12.912 39.094 14.372 C 38.052 13.806 35.865 13.657 35.336 13.944 C 35.85 15.057 38.096 15.6 38.827 15.547 C 38.573 16.409 38.425 18.562 38.598 21.155 C 36.939 19.839 35.393 18.522 33.734 18.58 C 34.003 17.158 33.367 15.353 32.99 14.86 C 32.417 15.604 32.006 16.431 32.361 18.408 C 30.908 18.893 29.671 19.439 28.297 20.697 C 28.297 18.866 27.725 17.664 26.857 16.388 C 28.117 15.9 29.389 14.697 29.385 13.658 C 28.537 13.81 26.845 14.554 26.352 15.547 C 25.634 14.8 23.95 13.491 22.346 13.487 C 23.534 12.632 24.454 11.598 24.549 9.686 C 25.802 10.657 28.255 11.272 29.635 10.674 C 24.794 6.438 25.262 3.405 25.317 2.083 C f 12.412 33.743 m 11.887 33.272 11.691 33.01 V 14.182 31.192 11.928 25.366 11.415 24.303 C 10.776 24.247 9.369 26.988 9.405 28.486 C 8.273 27.73 6.608 27.851 5.006 28.137 C 5.578 27.049 5.177 25.104 4.376 24.303 C 5.378 24.339 6.729 23.624 8.038 22.643 C 7.203 21.823 5.376 21.984 3.46 22.643 C 3.46 21.27 2.638 19.533 1.801 18.351 C 3.117 18.408 4.262 17.722 5.12 16.691 C 5.785 18.26 7.819 19.373 8.725 19.324 C 8.742 17.959 7.169 15.869 6.147 15.47 C 6.747 14.801 7.766 13.27 8.725 10.854 C 9.524 12.78 10.694 14.022 11.927 14.955 C 10.785 16.517 10.959 17.388 11.358 18.866 C 12.101 18.325 13.132 17.893 13.303 15.89 C 15.02 16.176 16.156 16.104 17.653 15.203 C 17.198 16.865 17.195 18.466 17.515 20.166 C 15.665 20.026 14.105 20.239 13.075 21.728 C 13.905 21.955 16.165 22.014 17.039 21.082 C 17.366 22.064 18.261 23.47 19.707 24.164 C 18.267 24.424 17.282 25.523 16.373 27.209 C 15.66 25.793 13.433 24.128 11.93 24.073 C 13.933 28.137 13.933 31.055 12.412 33.743 C f 31.125 30.5 m 31.445 31.128 31.648 31.385 V 34.045 29.444 38.851 32.752 39.746 33.521 C 39.636 34.153 37.511 35.29 35.794 34.26 C 36.234 35.549 35.332 37.51 34.134 38.552 C 35.873 38.451 38.019 39.813 38.541 40.555 C 38.763 39.577 39.946 38.307 41.231 37.293 C 41.582 38.266 40.887 40.384 39.971 41.986 C 41.206 42.487 42.318 43.417 42.776 44.676 C 43.233 43.359 44.236 42.685 45.58 41.929 C 44.421 40.502 43.64 38.328 43.92 37.465 C 45.243 37.8 46.814 40.518 46.937 41.607 C 47.812 40.841 49.366 40.154 51.947 39.848 C 50.246 38.77 49.884 36.778 49.3 35.347 C 48.152 35.794 45.983 35.853 45.008 35.29 C 45.721 34.711 47.061 34.16 49.071 34.146 C 49.071 32.601 49.534 31.469 50.788 30.254 C 49.065 30.267 46.965 29.781 45.469 29.389 C 45.221 30.718 44.378 32.314 43.233 32.715 C 43.227 31.854 43.493 29.605 44.378 28.938 C 43.513 28.37 42.26 26.993 41.803 25.276 C 41.181 26.601 40.32 27.906 38.457 28.35 C 39.642 29.403 40.477 31.42 40.143 32.887 C 35.091 28.905 32.414 30.203 31.125 30.5 C f 25.317 46.491 m 25.994 46.691 26.284 46.843 V 24.815 49.556 29.266 53.837 30.186 54.576 C 30.787 54.351 30.907 51.818 30.23 50.482 C 31.073 50.605 33.262 49.227 34.02 47.938 C 34.085 48.625 35.655 51.566 36.481 51.944 C 35.561 52.341 34.896 53.814 34.134 55.263 C 35.156 55.43 36.555 54.508 38.026 53.603 C 38.541 54.404 39.915 55.377 41.174 55.892 C 40.086 56.579 39.591 57.321 39.094 58.78 C 38.052 58.215 35.865 58.065 35.336 58.353 C 35.85 59.465 38.096 60.008 38.827 59.955 C 38.573 60.817 38.425 62.97 38.598 65.563 C 36.939 64.247 35.393 62.931 33.734 62.988 C 34.003 61.567 33.367 59.761 32.99 59.268 C 32.417 60.012 32.006 60.839 32.361 62.817 C 30.908 63.302 29.671 63.847 28.297 65.106 C 28.297 63.274 27.725 62.073 26.857 60.796 C 28.117 60.308 29.389 59.106 29.385 58.067 C 28.537 58.219 26.845 58.963 26.352 59.955 C 25.634 59.209 23.95 57.899 22.346 57.895 C 23.534 57.041 24.454 56.006 24.549 54.094 C 25.802 55.065 28.255 55.68 29.635 55.083 C 24.794 50.846 25.262 47.814 25.317 46.491 C f 12.412 78.151 m 11.887 77.68 11.691 77.418 V 14.182 75.601 11.928 69.774 11.415 68.711 C 10.776 68.655 9.369 71.396 9.405 72.894 C 8.273 72.138 6.608 72.259 5.006 72.545 C 5.578 71.458 5.177 69.512 4.376 68.711 C 5.378 68.747 6.729 68.032 8.038 67.052 C 7.203 66.231 5.376 66.393 3.46 67.052 C 3.46 65.678 2.638 63.941 1.801 62.759 C 3.117 62.817 4.262 62.13 5.12 61.1 C 5.785 62.669 7.819 63.781 8.725 63.732 C 8.742 62.367 7.169 60.277 6.147 59.878 C 6.747 59.209 7.766 57.678 8.725 55.263 C 9.524 57.189 10.694 58.431 11.927 59.364 C 10.785 60.925 10.959 61.796 11.358 63.274 C 12.101 62.734 13.132 62.301 13.303 60.298 C 15.02 60.584 16.156 60.512 17.653 59.612 C 17.198 61.273 17.195 62.874 17.515 64.574 C 15.665 64.434 14.105 64.648 13.075 66.136 C 13.905 66.363 16.165 66.422 17.039 65.49 C 17.366 66.472 18.261 67.878 19.707 68.572 C 18.267 68.832 17.282 69.931 16.373 71.617 C 15.66 70.202 13.433 68.536 11.93 68.482 C 13.933 72.545 13.933 75.464 12.412 78.151 C f 31.125 74.908 m 31.445 75.537 31.648 75.794 V 34.045 73.853 38.851 77.161 39.746 77.929 C 39.636 78.562 37.511 79.698 35.794 78.668 C 36.234 79.957 35.332 81.918 34.134 82.96 C 35.873 82.86 38.019 84.221 38.541 84.963 C 38.763 83.986 39.946 82.716 41.231 81.701 C 41.582 82.675 40.887 84.792 39.971 86.394 C 41.206 86.895 42.318 87.825 42.776 89.084 C 43.233 87.768 44.236 87.093 45.58 86.337 C 44.421 84.91 43.64 82.736 43.92 81.873 C 45.243 82.208 46.814 84.926 46.937 86.016 C 47.812 85.249 49.366 84.563 51.947 84.257 C 50.246 83.179 49.884 81.187 49.3 79.756 C 48.152 80.203 45.983 80.262 45.008 79.698 C 45.721 79.119 47.061 78.569 49.071 78.554 C 49.071 77.009 49.534 75.877 50.788 74.663 C 49.065 74.675 46.965 74.189 45.469 73.798 C 45.221 75.126 44.378 76.723 43.233 77.123 C 43.227 76.262 43.493 74.013 44.378 73.347 C 43.513 72.779 42.26 71.401 41.803 69.684 C 41.181 71.009 40.32 72.314 38.457 72.759 C 39.642 73.812 40.477 75.829 40.143 77.295 C 35.091 73.313 32.414 74.611 31.125 74.908 C f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Polka dots) (Polka dots) 1 1 29.8 29.8 [ %AI3_Tile (0 O 0 R 0.45 0.9 0 0 k 0.45 0.9 0 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 1 1 m 1 29.8 L 29.8 29.8 L 29.8 1 L 1 1 L f %AI6_EndPatternLayer ) & (0 O 0 R 0.09 0.18 0 0 k 0.09 0.18 0 0 K ) @ ( %AI6_BeginPatternLayer *u 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 11.08 8.2 m 11.08 9.791 9.79 11.08 8.2 11.08 c 6.609 11.08 5.32 9.791 5.32 8.2 c 5.32 6.61 6.609 5.32 8.2 5.32 c 9.79 5.32 11.08 6.61 11.08 8.2 c f 11.08 22.6 m 11.08 24.191 9.79 25.48 8.2 25.48 c 6.609 25.48 5.32 24.191 5.32 22.6 c 5.32 21.01 6.609 19.72 8.2 19.72 c 9.79 19.72 11.08 21.01 11.08 22.6 c f 18.28 15.4 m 18.28 16.991 16.99 18.28 15.4 18.28 c 13.809 18.28 12.52 16.991 12.52 15.4 c 12.52 13.81 13.809 12.52 15.4 12.52 c 16.99 12.52 18.28 13.81 18.28 15.4 c f 25.48 8.2 m 25.48 9.791 24.19 11.08 22.6 11.08 c 21.009 11.08 19.72 9.791 19.72 8.2 c 19.72 6.61 21.009 5.32 22.6 5.32 c 24.19 5.32 25.48 6.61 25.48 8.2 c f 25.48 22.6 m 25.48 24.191 24.19 25.48 22.6 25.48 c 21.009 25.48 19.72 24.191 19.72 22.6 c 19.72 21.01 21.009 19.72 22.6 19.72 c 24.19 19.72 25.48 21.01 25.48 22.6 c f *U 26.92 1 m 29.8 1 L 29.8 3.88 L 28.209 3.88 26.92 2.591 26.92 1 C f 15.4 3.88 m 13.809 3.88 12.52 2.591 12.52 1 C 18.28 1 L 18.28 2.591 16.99 3.88 15.4 3.88 c f 1 3.88 m 1 1 L 3.88 1 L 3.88 2.591 2.59 3.88 1 3.88 C f 1 XR 26.92 15.4 m 26.92 13.81 28.209 12.52 29.8 12.52 C 29.8 18.28 L 28.209 18.28 26.92 16.991 26.92 15.4 c f 0 XR 15.4 18.28 m 13.809 18.28 12.52 16.991 12.52 15.4 c 12.52 13.81 13.809 12.52 15.4 12.52 c 16.99 12.52 18.28 13.81 18.28 15.4 c 18.28 16.991 16.99 18.28 15.4 18.28 c f 1 XR 3.88 15.4 m 3.88 16.991 2.59 18.28 1 18.28 C 1 12.52 L 2.59 12.52 3.88 13.81 3.88 15.4 c f 0 XR 29.8 26.92 m 29.8 29.8 L 26.92 29.8 L 26.92 28.21 28.209 26.92 29.8 26.92 C f 15.4 26.92 m 16.99 26.92 18.28 28.21 18.28 29.8 C 12.52 29.8 L 12.52 28.21 13.809 26.92 15.4 26.92 c f 3.88 29.8 m 1 29.8 L 1 26.92 L 2.59 26.92 3.88 28.21 3.88 29.8 C f 1 XR 8.2 11.08 m 6.609 11.08 5.32 9.791 5.32 8.2 c 5.32 6.61 6.609 5.32 8.2 5.32 c 9.79 5.32 11.08 6.61 11.08 8.2 c 11.08 9.791 9.79 11.08 8.2 11.08 c f 22.6 11.08 m 21.009 11.08 19.72 9.791 19.72 8.2 c 19.72 6.61 21.009 5.32 22.6 5.32 c 24.19 5.32 25.48 6.61 25.48 8.2 c 25.48 9.791 24.19 11.08 22.6 11.08 c f 8.2 25.48 m 6.609 25.48 5.32 24.191 5.32 22.6 c 5.32 21.01 6.609 19.72 8.2 19.72 c 9.79 19.72 11.08 21.01 11.08 22.6 c 11.08 24.191 9.79 25.48 8.2 25.48 c f 22.6 25.48 m 21.009 25.48 19.72 24.191 19.72 22.6 c 19.72 21.01 21.009 19.72 22.6 19.72 c 24.19 19.72 25.48 21.01 25.48 22.6 c 25.48 24.191 24.19 25.48 22.6 25.48 c f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Random circles) (Random circles) 4.365 3.849 51.13 57.85 [ %AI3_Tile (0 O 0 R 0 0.1125 0.45 0 k 0 0.1125 0.45 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 4.365 3.849 m 4.365 57.85 L 51.13 57.85 L 51.13 3.849 L 4.365 3.849 L f %AI6_EndPatternLayer ) & (0 O 0 R 0.4 0.7 1 0 k 0.4 0.7 1 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 45.429 36.274 m 45.843 36.991 45.598 37.908 44.88 38.323 c 44.163 38.737 43.245 38.491 42.831 37.774 c 42.417 37.056 42.663 36.139 43.38 35.725 c 44.098 35.31 45.015 35.556 45.429 36.274 c s 44.179 27.926 m 43.765 28.643 42.848 28.889 42.13 28.475 c 41.413 28.06 41.167 27.143 41.581 26.425 c 41.995 25.708 42.913 25.462 43.63 25.876 c 44.348 26.291 44.593 27.208 44.179 27.926 c s 35.929 41.024 m 35.515 41.741 34.598 41.987 33.88 41.573 c 33.163 41.158 32.917 40.241 33.331 39.524 c 33.745 38.806 34.663 38.56 35.38 38.975 c 36.098 39.389 36.343 40.306 35.929 41.024 c s 28.38 34.225 m 28.794 34.942 28.549 35.859 27.831 36.274 c 27.114 36.688 26.196 36.442 25.782 35.725 c 25.368 35.007 25.614 34.09 26.331 33.675 c 27.049 33.261 27.966 33.507 28.38 34.225 c s 31.179 28.024 m 30.765 28.741 29.848 28.987 29.13 28.573 c 28.413 28.158 28.167 27.241 28.581 26.524 c 28.995 25.806 29.913 25.56 30.63 25.975 c 31.348 26.389 31.593 27.306 31.179 28.024 c s 36.792 23.349 m 35.963 23.349 35.292 22.678 35.292 21.849 c 35.292 21.021 35.963 20.349 36.792 20.349 c 37.62 20.349 38.292 21.021 38.292 21.849 c 38.292 22.678 37.62 23.349 36.792 23.349 c s 10.888 34.175 m 10.474 34.893 10.72 35.81 11.437 36.225 c 12.155 36.639 13.072 36.393 13.486 35.675 c 13.901 34.958 13.655 34.041 12.937 33.626 c 12.22 33.212 11.303 33.458 10.888 34.175 c s 11.517 26.601 m 11.931 27.318 12.848 27.564 13.566 27.15 c 14.283 26.735 14.529 25.818 14.115 25.1 c 13.701 24.383 12.783 24.137 12.066 24.551 c 11.348 24.966 11.103 25.883 11.517 26.601 c s 16.782 41.426 m 17.196 42.143 18.114 42.389 18.831 41.975 c 19.549 41.56 19.794 40.643 19.38 39.926 c 18.966 39.208 18.049 38.962 17.331 39.377 c 16.614 39.791 16.368 40.708 16.782 41.426 c s 22.365 24.35 m 23.194 24.35 23.865 23.678 23.865 22.85 c 23.865 22.021 23.194 21.35 22.365 21.35 c 21.537 21.35 20.865 22.021 20.865 22.85 c 20.865 23.678 21.537 24.35 22.365 24.35 c s 45.385 7.849 m 44.971 7.132 44.053 6.886 43.336 7.3 c 42.619 7.714 42.373 8.632 42.787 9.349 c 43.201 10.067 44.119 10.312 44.836 9.898 c 45.553 9.484 45.799 8.567 45.385 7.849 c s 29.679 7.774 m 29.265 7.056 28.348 6.81 27.63 7.225 c 26.913 7.639 26.667 8.556 27.081 9.274 c 27.495 9.991 28.413 10.237 29.13 9.823 c 29.848 9.408 30.093 8.491 29.679 7.774 c s 35.542 11.349 m 34.713 11.349 34.042 12.021 34.042 12.849 c 34.042 13.678 34.713 14.349 35.542 14.349 c 36.37 14.349 37.042 13.678 37.042 12.849 c 37.042 12.021 36.37 11.349 35.542 11.349 c s 10.13 7.475 m 10.544 6.757 11.462 6.511 12.179 6.926 c 12.897 7.34 13.142 8.257 12.728 8.975 c 12.314 9.692 11.397 9.938 10.679 9.524 c 9.962 9.109 9.716 8.192 10.13 7.475 c s 20.203 13.349 m 21.031 13.349 21.703 14.021 21.703 14.849 c 21.703 15.678 21.031 16.349 20.203 16.349 c 19.375 16.349 18.703 15.678 18.703 14.849 c 18.703 14.021 19.375 13.349 20.203 13.349 c s 44.635 54.1 m 45.049 53.382 44.803 52.465 44.086 52.051 c 43.369 51.636 42.451 51.882 42.037 52.6 c 41.623 53.317 41.869 54.234 42.586 54.649 c 43.303 55.063 44.221 54.817 44.635 54.1 c s 36.841 48.1 m 36.427 47.382 35.509 47.136 34.792 47.551 c 34.074 47.965 33.828 48.882 34.243 49.6 c 34.657 50.317 35.574 50.563 36.292 50.149 c 37.009 49.734 37.255 48.817 36.841 48.1 c s 29.728 54.725 m 30.143 54.007 29.897 53.09 29.179 52.675 c 28.462 52.261 27.544 52.507 27.13 53.225 c 26.716 53.942 26.962 54.859 27.679 55.274 c 28.397 55.688 29.314 55.442 29.728 54.725 c s 10.86 54.1 m 10.446 53.382 10.691 52.465 11.409 52.051 c 12.126 51.636 13.044 51.882 13.458 52.6 c 13.872 53.317 13.626 54.234 12.909 54.649 c 12.191 55.063 11.274 54.817 10.86 54.1 c s 19.154 49.1 m 19.568 48.382 20.486 48.136 21.203 48.551 c 21.92 48.965 22.166 49.882 21.752 50.6 c 21.338 51.317 20.42 51.563 19.703 51.149 c 18.986 50.734 18.74 49.817 19.154 49.1 c s 51.88 38.85 m 51.052 38.85 50.38 39.521 50.38 40.35 c 50.38 41.178 51.052 41.85 51.88 41.85 c 52.709 41.85 53.38 41.178 53.38 40.35 c 53.38 39.521 52.709 38.85 51.88 38.85 c s 51.865 11.349 m 52.693 11.349 53.365 12.021 53.365 12.849 c 53.365 13.678 52.693 14.349 51.865 14.349 c 51.036 14.349 50.365 13.678 50.365 12.849 c 50.365 12.021 51.036 11.349 51.865 11.349 c s 30.179 18.524 m 29.765 19.241 28.848 19.487 28.13 19.073 c 27.413 18.658 27.167 17.741 27.581 17.024 c 27.995 16.306 28.913 16.06 29.63 16.475 c 30.348 16.889 30.593 17.806 30.179 18.524 c s 21.679 31.524 m 21.265 32.241 20.348 32.487 19.63 32.073 c 18.913 31.658 18.667 30.741 19.081 30.024 c 19.495 29.306 20.413 29.06 21.13 29.475 c 21.848 29.889 22.093 30.806 21.679 31.524 c s 37.914 33.399 m 37.5 34.116 36.583 34.362 35.865 33.948 c 35.148 33.533 34.902 32.616 35.316 31.899 c 35.73 31.181 36.648 30.935 37.365 31.35 c 38.083 31.764 38.328 32.681 37.914 33.399 c s 28.929 45.024 m 28.515 45.741 27.598 45.987 26.88 45.573 c 26.163 45.158 25.917 44.241 26.331 43.524 c 26.745 42.806 27.663 42.56 28.38 42.975 c 29.098 43.389 29.343 44.306 28.929 45.024 c s 12.429 45.524 m 12.015 46.241 11.098 46.487 10.38 46.073 c 9.663 45.658 9.417 44.741 9.831 44.024 c 10.245 43.306 11.163 43.06 11.88 43.475 c 12.598 43.889 12.843 44.806 12.429 45.524 c s 44.49 45.6 m 44.075 46.317 43.158 46.563 42.441 46.149 c 41.723 45.734 41.477 44.817 41.891 44.1 c 42.306 43.382 43.223 43.136 43.941 43.55 c 44.658 43.965 44.904 44.882 44.49 45.6 c s 12.679 18.524 m 12.265 19.241 11.348 19.487 10.63 19.073 c 9.913 18.658 9.667 17.741 10.081 17.024 c 10.495 16.306 11.413 16.06 12.13 16.475 c 12.848 16.889 13.093 17.806 12.679 18.524 c s 21.179 5.774 m 20.765 6.491 19.848 6.737 19.13 6.323 c 18.413 5.908 18.167 4.991 18.581 4.274 c 18.995 3.557 19.913 3.311 20.63 3.725 c 21.348 4.139 21.593 5.056 21.179 5.774 c s 38.929 5.274 m 38.515 5.991 37.598 6.237 36.88 5.823 c 36.163 5.408 35.917 4.491 36.331 3.774 c 36.745 3.057 37.663 2.811 38.38 3.225 c 39.098 3.639 39.343 4.556 38.929 5.274 c s 43.865 18.1 m 44.694 18.1 45.365 17.429 45.365 16.6 c 45.365 15.772 44.694 15.1 43.865 15.1 c 43.037 15.1 42.365 15.772 42.365 16.6 c 42.365 17.429 43.037 18.1 43.865 18.1 c s 51.13 4.6 m 50.302 4.6 49.63 3.928 49.63 3.1 c 49.63 2.272 50.302 1.6 51.13 1.6 c 51.959 1.6 52.63 2.272 52.63 3.1 c 52.63 3.928 51.959 4.6 51.13 4.6 c s 52.163 31.649 m 51.748 32.366 50.831 32.612 50.114 32.198 c 49.396 31.783 49.15 30.866 49.565 30.149 c 49.979 29.431 50.896 29.185 51.614 29.6 c 52.331 30.014 52.577 30.931 52.163 31.649 c s 51.85 51.35 m 51.021 51.35 50.35 50.678 50.35 49.85 c 50.35 49.021 51.021 48.35 51.85 48.35 c 52.678 48.35 53.35 49.021 53.35 49.85 c 53.35 50.678 52.678 51.35 51.85 51.35 c s 49.85 23.1 m 50.679 23.1 51.35 22.428 51.35 21.6 c 51.35 20.771 50.679 20.1 49.85 20.1 c 49.022 20.1 48.35 20.771 48.35 21.6 c 48.35 22.428 49.022 23.1 49.85 23.1 c s 5.13 38.85 m 4.302 38.85 3.63 39.521 3.63 40.35 c 3.63 41.178 4.302 41.85 5.13 41.85 c 5.959 41.85 6.63 41.178 6.63 40.35 c 6.63 39.521 5.959 38.85 5.13 38.85 c s 5.115 11.349 m 5.943 11.349 6.615 12.021 6.615 12.849 c 6.615 13.678 5.943 14.349 5.115 14.349 c 4.286 14.349 3.615 13.678 3.615 12.849 c 3.615 12.021 4.286 11.349 5.115 11.349 c s 4.38 4.6 m 3.552 4.6 2.88 3.928 2.88 3.1 c 2.88 2.272 3.552 1.6 4.38 1.6 c 5.209 1.6 5.88 2.272 5.88 3.1 c 5.88 3.928 5.209 4.6 4.38 4.6 c s 5.413 31.649 m 4.998 32.366 4.081 32.612 3.364 32.198 c 2.646 31.783 2.4 30.866 2.815 30.149 c 3.229 29.431 4.146 29.185 4.864 29.6 c 5.581 30.014 5.827 30.931 5.413 31.649 c s 5.1 51.35 m 4.271 51.35 3.6 50.678 3.6 49.85 c 3.6 49.021 4.271 48.35 5.1 48.35 c 5.928 48.35 6.6 49.021 6.6 49.85 c 6.6 50.678 5.928 51.35 5.1 51.35 c s 3.1 23.1 m 3.929 23.1 4.6 22.428 4.6 21.6 c 4.6 20.771 3.929 20.1 3.1 20.1 c 2.272 20.1 1.6 20.771 1.6 21.6 c 1.6 22.428 2.272 23.1 3.1 23.1 c s 21.194 59.775 m 20.78 60.492 19.863 60.738 19.145 60.324 c 18.428 59.909 18.182 58.992 18.596 58.275 c 19.01 57.558 19.928 57.312 20.645 57.726 c 21.363 58.14 21.608 59.057 21.194 59.775 c s 38.944 59.275 m 38.53 59.992 37.613 60.238 36.895 59.824 c 36.178 59.409 35.932 58.492 36.346 57.775 c 36.76 57.058 37.678 56.812 38.395 57.226 c 39.113 57.64 39.358 58.557 38.944 59.275 c s 51.145 58.601 m 50.317 58.601 49.645 57.929 49.645 57.101 c 49.645 56.273 50.317 55.601 51.145 55.601 c 51.974 55.601 52.645 56.273 52.645 57.101 c 52.645 57.929 51.974 58.601 51.145 58.601 c s 4.395 58.601 m 3.567 58.601 2.895 57.929 2.895 57.101 c 2.895 56.273 3.567 55.601 4.395 55.601 c 5.224 55.601 5.895 56.273 5.895 57.101 c 5.895 57.929 5.224 58.601 4.395 58.601 c s %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Rope.side) (Rope.side) 1 4.6 60.9998 33.3999 [ %AI3_Tile (0 O 0 R 0 0 0 1 k 0 0 0 1 K ) @ ( %AI6_BeginPatternLayer 800 Ar 1 J 1 j 0.6 w 4 M []0 d %AI3_Note: 0 D 0 XR 24.9999 7 m 15.6521 4.663 8.125 8.6981 1 14.1407 C S 36.9999 7 m 22.3477 3.337 12.168 15.3276 1 23.859 C S 48.9999 7 m 29.3464 2.0866 17.7386 25.3332 1 30.6213 C S 1 30.9999 m 24.9999 36.9999 36.9999 1 60.9998 7 C S 13 30.9999 m 32.6534 35.9133 44.2611 12.6667 60.9998 7.3786 C S 24.9999 30.9999 m 39.652 34.6629 49.8317 22.6722 60.9998 14.1407 C S 36.9999 30.9999 m 46.3476 33.3369 53.8749 29.3018 60.9998 23.859 C S 48.9999 30.9999 m 53.3464 32.0865 57.2978 31.7908 60.9998 30.6213 C S 13 7 m 8.6535 5.9134 4.7019 6.2091 1 7.3786 C S %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Scales) (Scales) 1.6 9.3475 48.088 55.8355 [ %AI3_Tile (0 O 0 R 1 g 1 G ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 1.6 9.3475 m 1.6 55.8355 L 48.088 55.8355 L 48.088 9.3475 L 1.6 9.3475 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 g 0 G ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 17.0956 9.3475 m 12.8162 9.3475 9.3475 5.8787 9.3475 1.6 C 9.3475 5.8787 5.8787 9.3475 1.6 9.3475 C 1.6 13.6262 5.0687 17.095 9.3475 17.095 c 13.6268 17.095 17.0956 13.6262 17.0956 9.3475 C s 32.5918 9.3475 m 28.3125 9.3475 24.8437 5.8787 24.8437 1.6 C 24.8437 5.8787 21.3743 9.3475 17.0956 9.3475 C 17.0956 13.6262 20.5644 17.095 24.8437 17.095 c 29.1224 17.095 32.5918 13.6262 32.5918 9.3475 C s 48.088 9.3475 m 43.8087 9.3475 40.3399 5.8787 40.3399 1.6 C 40.3399 5.8787 36.8705 9.3475 32.5918 9.3475 C 32.5918 13.6262 36.0606 17.095 40.3399 17.095 c 44.6186 17.095 48.088 13.6262 48.088 9.3475 C s 17.0956 40.3393 m 12.8162 40.3393 9.3475 36.8699 9.3475 32.5912 C 9.3475 36.8699 5.8787 40.3393 1.6 40.3393 C 1.6 44.6181 5.0687 48.0874 9.3475 48.0874 c 13.6268 48.0874 17.0956 44.6181 17.0956 40.3393 C s 17.0956 24.8431 m 12.8162 24.8431 9.3475 21.3743 9.3475 17.095 C 9.3475 21.3743 5.8787 24.8431 1.6 24.8431 C 1.6 29.1218 5.0687 32.5912 9.3475 32.5912 c 13.6268 32.5912 17.0956 29.1218 17.0956 24.8431 C s 32.5918 24.8431 m 28.3125 24.8431 24.8437 21.3743 24.8437 17.095 C 24.8437 21.3743 21.3743 24.8431 17.0956 24.8431 C 17.0956 29.1218 20.5644 32.5912 24.8437 32.5912 c 29.1224 32.5912 32.5918 29.1218 32.5918 24.8431 C s 48.088 24.8431 m 43.8087 24.8431 40.3399 21.3743 40.3399 17.095 C 40.3399 21.3743 36.8705 24.8431 32.5918 24.8431 C 32.5918 29.1218 36.0606 32.5912 40.3399 32.5912 c 44.6186 32.5912 48.088 29.1218 48.088 24.8431 C s 32.5918 40.3393 m 28.3125 40.3393 24.8437 36.8699 24.8437 32.5912 C 24.8437 36.8699 21.3743 40.3393 17.0956 40.3393 C 17.0956 44.6181 20.5644 48.0874 24.8437 48.0874 c 29.1224 48.0874 32.5918 44.6181 32.5918 40.3393 C s 48.088 40.3393 m 43.8087 40.3393 40.3399 36.8699 40.3399 32.5912 C 40.3399 36.8699 36.8705 40.3393 32.5918 40.3393 C 32.5918 44.6181 36.0606 48.0874 40.3399 48.0874 c 44.6186 48.0874 48.088 44.6181 48.088 40.3393 C s 17.0956 55.8355 m 12.8162 55.8355 9.3475 52.3662 9.3475 48.0874 C 9.3475 52.3662 5.8787 55.8355 1.6 55.8355 C 1.6 60.1143 5.0687 63.5836 9.3475 63.5836 c 13.6268 63.5836 17.0956 60.1143 17.0956 55.8355 C s 32.5918 55.8355 m 28.3125 55.8355 24.8437 52.3662 24.8437 48.0874 C 24.8437 52.3662 21.3743 55.8355 17.0956 55.8355 C 17.0956 60.1143 20.5644 63.5836 24.8437 63.5836 c 29.1224 63.5836 32.5918 60.1143 32.5918 55.8355 C s 48.088 55.8355 m 43.8087 55.8355 40.3399 52.3662 40.3399 48.0874 C 40.3399 52.3662 36.8705 55.8355 32.5918 55.8355 C 32.5918 60.1143 36.0606 63.5836 40.3399 63.5836 c 44.6186 63.5836 48.088 60.1143 48.088 55.8355 C s %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (SolidStar.side) (SolidStar.side) 1 1 33.0117 33.0117 [ %AI3_Tile (0 O 0 R 0.05 0.2 0.95 0 k 0.05 0.2 0.95 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 1 D 0 XR 7.9689 26.0458 m 14.5331 22.9874 l 17.0095 29.7904 L 19.4859 22.9874 l 26.0473 26.0458 l 22.9889 19.4815 l 29.792 17.0052 l 22.9889 14.5288 l 26.0473 7.9674 l 19.4859 11.0257 l 17.0095 4.2226 l 14.5305 11.0257 l 7.9689 7.9674 l 11.0273 14.5288 l 4.2242 17.0052 l 11.0273 19.4843 L 7.9689 26.0458 l f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Stars) (Stars) 1 1 63.384 84.766 [ %AI3_Tile (0 O 0 R 1 0.9 0.1 0 k 1 0.9 0.1 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.3 w 4 M []0 d %AI3_Note: 0 D 0 XR 1 1 m 1 84.766 L 63.384 84.766 L 63.384 1 L 1 1 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0.25 1 0 k 0 0.25 1 0 K ) @ ( %AI6_BeginPatternLayer *u 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 37.668 67.113 m 43.924 62.567 L 41.535 55.213 L 47.791 59.757 L 54.046 55.212 L 51.657 62.566 L 57.914 67.112 L 50.18 67.112 L 47.791 74.467 L 45.402 67.113 L 37.668 67.113 L f 16.596 59.757 m 22.851 55.212 L 20.462 62.566 L 26.719 67.112 L 18.985 67.112 L 16.596 74.467 L 14.207 67.113 L 6.473 67.113 L 12.729 62.567 L 10.34 55.213 L 16.596 59.757 L f 20.462 20.683 m 26.719 25.229 L 18.985 25.229 L 16.596 32.584 L 14.207 25.23 L 6.473 25.23 L 12.729 20.684 L 10.34 13.33 L 16.596 17.874 L 22.851 13.329 L 20.462 20.683 L f 38.447 34.271 m 36.058 41.625 L 42.315 46.171 L 34.581 46.171 L 32.192 53.526 L 29.803 46.172 L 22.069 46.172 L 28.325 41.626 L 25.936 34.272 L 32.192 38.816 L 38.447 34.271 L f 51.657 20.683 m 57.914 25.229 L 50.18 25.229 L 47.791 32.584 L 45.402 25.23 L 37.668 25.23 L 43.924 20.684 L 41.535 13.33 L 47.791 17.874 L 54.046 13.329 L 51.657 20.683 L f *U 1 XR 34.581 4.288 m 32.192 11.643 L 29.803 4.289 L 22.069 4.289 L 26.5962 1 L 37.7885 1 L 42.315 4.288 L 34.581 4.288 L f 53.261 4.289 m 57.7882 1 L 63.384 1 L 63.384 11.643 L 60.995 4.289 L 53.261 4.289 L f 4.866 41.625 m 11.123 46.171 L 3.389 46.171 L 1 53.526 L 1 38.816 L 7.255 34.271 L 4.866 41.625 L f 36.058 41.625 m 42.315 46.171 L 34.581 46.171 L 32.192 53.526 L 29.803 46.172 L 22.069 46.172 L 28.325 41.626 L 25.936 34.272 L 32.192 38.816 L 38.447 34.271 L 36.058 41.625 L f 53.261 46.172 m 59.517 41.626 L 57.128 34.272 L 63.384 38.816 L 63.384 53.526 L 60.995 46.172 L 53.261 46.172 L f 4.866 83.508 m 6.5974 84.766 L 1 84.766 L 1 80.699 L 7.255 76.154 L 4.866 83.508 L f 25.936 76.155 m 32.192 80.699 L 38.447 76.154 L 36.058 83.508 L 37.7895 84.766 L 26.5951 84.766 L 28.325 83.509 L 25.936 76.155 L f 22.851 55.212 m 20.462 62.566 L 26.719 67.112 L 18.985 67.112 L 16.596 74.467 L 14.207 67.113 L 6.473 67.113 L 12.729 62.567 L 10.34 55.213 L 16.596 59.757 L 22.851 55.212 L f 41.535 55.213 m 47.791 59.757 L 54.046 55.212 L 51.657 62.566 L 57.914 67.112 L 50.18 67.112 L 47.791 74.467 L 45.402 67.113 L 37.668 67.113 L 43.924 62.567 L 41.535 55.213 L f 50.18 25.229 m 47.791 32.584 L 45.402 25.23 L 37.668 25.23 L 43.924 20.684 L 41.535 13.33 L 47.791 17.874 L 54.046 13.329 L 51.657 20.683 L 57.914 25.229 L 50.18 25.229 L f 18.985 25.229 m 16.596 32.584 L 14.207 25.23 L 6.473 25.23 L 12.729 20.684 L 10.34 13.33 L 16.596 17.874 L 22.851 13.329 L 20.462 20.683 L 26.719 25.229 L 18.985 25.229 L f 3.388 4.289 m 1 11.643 L 1 1 L 6.5948 1 L 11.122 4.289 L 3.388 4.289 L f 57.128 76.154 m 63.384 80.699 L 63.384 84.766 L 57.7855 84.766 L 59.517 83.508 L 57.128 76.154 L f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Stripes) (Stripes) 8.45 4.6001 80.45 76.6001 [ %AI3_Tile (0 O 0 R 1 0.07 1 0 k 1 0.07 1 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 3.6 w 4 M []0 d %AI3_Note: 0 D 0 XR 8.2 8.2 m 80.7 8.2 L S 8.2 22.6001 m 80.7 22.6001 L S 8.2 37.0002 m 80.7 37.0002 L S 8.2 51.4 m 80.7 51.4 L S 8.2 65.8001 m 80.7 65.8001 L S 8.2 15.4 m 80.7 15.4 L S 8.2 29.8001 m 80.7 29.8001 L S 8.2 44.2 m 80.7 44.2 L S 8.2 58.6001 m 80.7 58.6001 L S 8.2 73.0002 m 80.7 73.0002 L S %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (TriBevel.outer) (TriBevel.outer) 1 1.0004 31.6124 31.6127 [ %AI3_Tile (0 O 0 R 0 0 0 0.3 k 0 0 0 0.3 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 31.6118 5.4917 m 27.1221 5.4917 L 27.1205 1.0011 L 27.8031 1.0011 L 27.8031 4.8091 L 31.6118 4.8091 L 31.6118 5.4917 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0 0 0.2 k 0 0 0 0.2 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 31.6149 9.5062 m 23.1111 9.5062 L 23.1111 1.0015 L 27.1205 1.0015 L 27.1205 5.493 L 31.6144 5.493 L 31.6149 9.5062 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0 0 0.4 k 0 0 0 0.4 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 31.6124 10.485 m 22.1297 10.485 L 22.1292 1.0015 L 23.1084 1.0015 L 23.1084 9.5049 L 31.6124 9.5049 L 31.6124 10.485 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0 0 0.3 k 0 0 0 0.3 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 31.6129 17.2066 m 15.4064 17.2085 L 15.4064 1 L 22.1301 1 L 22.1301 10.4868 L 31.6129 10.4868 L 31.6129 17.2066 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0 0 0.5 k 0 0 0 0.5 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 31.6149 18.3658 m 14.2517 18.3658 L 14.2515 1.0009 L 15.4043 1.0009 L 15.4043 17.2093 L 31.6149 17.2093 L 31.6149 18.3658 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0 0 0.4 k 0 0 0 0.4 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 31.6124 30.4755 m 2.1395 30.4755 L 2.1395 1.0015 L 14.249 1 L 14.249 18.366 L 31.6149 18.366 L 31.6124 30.4755 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0 0 0.6 k 0 0 0 0.6 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 15.4066 16.847 m 14.2778 18.3257 l 15.4066 17.2057 l 15.4066 16.847 l f %AI6_EndPatternLayer ) & (0 O 0 R 0 0 0 0.5 k 0 0 0 0.5 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 23.1095 9.1906 m 22.1759 10.4392 l 23.1082 9.505 l 23.1095 9.1906 l f %AI6_EndPatternLayer ) & (0 O 0 R 0 0 0 0.4 k 0 0 0 0.4 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 27.8039 4.6026 m 27.1619 5.4533 l 27.8029 4.8093 l 27.8039 4.6026 l f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (TriBevel.side) (TriBevel.side) 1.0006 1 29.0006 31.6124 [ %AI3_Tile (0 O 0 R 0 0 0 0.3 k 0 0 0 0.3 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 29 4.8087 m 29 4.8087 L 29.0026 5.4927 L 1.0026 5.4927 L 1 4.8087 L 1 4.8087 L 29 4.8087 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0 0 0.2 k 0 0 0 0.2 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 29.0026 5.4927 m 29.0005 9.5045 L 1.0005 9.5045 L 1.0026 5.4927 L 29.0026 5.4927 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0 0 0.4 k 0 0 0 0.4 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 29.0005 9.5045 m 29.0011 10.4865 L 1.0011 10.4865 L 1.0005 9.5045 L 29.0005 9.5045 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0 0 0.3 k 0 0 0 0.3 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 29.0011 10.4865 m 29.003 17.209 L 1.003 17.209 L 1.0011 10.4865 L 29.0011 10.4865 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0 0 0.5 k 0 0 0 0.5 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 29.003 17.209 m 29.0031 18.3656 L 1.0031 18.3656 L 1.003 17.209 L 29.003 17.209 L f %AI6_EndPatternLayer ) & (0 O 0 R 0 0 0 0.4 k 0 0 0 0.4 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 0 XR 29.0031 18.3656 m 29.0006 30.4752 L 1.0006 30.4752 L 1.0031 18.3656 L 29.0031 18.3656 L f %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Waves-scroll) (Waves-scroll) 17.926 10.516 68.663 69.012 [ %AI3_Tile (0 O 0 R 1 0 0.3 0 k 1 0 0.3 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 1 D 0 XR 17.926 69.012 m 17.926 10.516 L 68.663 10.516 L 68.663 69.012 L 17.926 69.012 L f %AI6_EndPatternLayer ) & (0 O 0 R 0.55 0 0 0 k 0.55 0 0 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 0.75 w 4 M []0 d %AI3_Note: 0 D 0 XR 65.335 70.465 m 65.881 68.746 67.444 68.168 68.663 69.012 C 67.538 69.668 68.011 71.255 69.686 70.933 c 72.124 70.464 71.894 67.213 70.53 65.589 c 68.561 63.245 64.565 60.995 53.241 71.117 C S 39.964 70.465 m 40.511 68.746 42.074 68.168 43.293 69.012 C 42.168 69.668 42.64 71.255 44.316 70.933 c 46.753 70.464 46.524 67.213 45.16 65.589 c 43.191 63.245 39.195 60.995 27.87 71.117 c S 14.594 70.465 m 15.141 68.746 16.704 68.168 17.923 69.012 C 16.798 69.668 17.27 71.255 18.945 70.933 c 21.382 70.464 21.153 67.213 19.789 65.589 c 17.821 63.245 13.825 60.995 2.5 71.117 c S 10.959 51.619 m 22.282 41.497 26.278 43.747 28.247 46.09 c 29.611 47.715 29.841 50.965 27.403 51.434 c 25.728 51.757 25.255 50.169 26.38 49.513 C 25.161 48.669 23.599 49.248 23.052 50.966 c 22.723 51.997 23.38 53.966 24.872 54.903 c 27.267 56.406 31.371 56.05 36.328 51.619 c 47.653 41.497 51.649 43.746 53.618 46.09 c 54.982 47.715 55.212 50.965 52.774 51.434 c 51.099 51.757 50.626 50.169 51.751 49.513 C 50.532 48.669 48.97 49.248 48.423 50.966 c 48.094 51.997 48.751 53.966 50.243 54.903 c 52.638 56.406 56.742 56.05 61.699 51.619 C 73.024 41.497 77.02 43.747 78.988 46.09 c S 70.156 32.12 m 65.199 36.551 61.095 36.907 58.7 35.404 c 57.208 34.468 56.552 32.499 56.88 31.468 c 57.427 29.749 58.99 29.171 60.208 30.015 C 59.083 30.671 59.556 32.258 61.231 31.936 c 63.669 31.467 63.439 28.216 62.075 26.592 c 60.106 24.248 56.11 21.998 44.786 32.12 C 39.829 36.551 35.725 36.907 33.33 35.404 c 31.838 34.468 31.182 32.499 31.51 31.468 c 32.056 29.749 33.619 29.171 34.838 30.015 C 33.713 30.671 34.186 32.258 35.861 31.936 c 38.299 31.467 38.069 28.216 36.705 26.592 c 34.737 24.248 30.74 21.998 19.415 32.12 c 14.458 36.551 10.354 36.907 7.96 35.404 c S 19.792 7.094 m 21.157 8.719 21.386 11.968 18.949 12.437 c 17.274 12.76 16.801 11.172 17.926 10.516 C 16.708 9.673 15.145 10.252 14.598 11.969 c 14.27 13 14.926 14.969 16.418 15.906 c 18.812 17.409 22.916 17.053 27.874 12.622 c 39.199 2.5 43.195 4.75 45.163 7.094 c 46.528 8.719 46.757 11.968 44.32 12.437 c 42.644 12.76 42.172 11.172 43.297 10.516 C 42.078 9.673 40.515 10.252 39.968 11.969 c 39.64 13 40.297 14.969 41.788 15.906 c 44.183 17.409 48.287 17.053 53.245 12.622 C 64.569 2.5 68.565 4.75 70.534 7.094 c 71.898 8.719 72.127 11.968 69.69 12.437 c 68.014 12.76 67.542 11.172 68.667 10.516 C 67.448 9.673 65.885 10.252 65.338 11.969 c 65.011 13 65.667 14.969 67.159 15.906 c 69.553 17.409 73.657 17.053 78.615 12.622 c S %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI3_BeginPattern: (Yellow Stripe) (Yellow Stripe) 8.4499 4.6 80.4499 76.6 [ %AI3_Tile (0 O 0 R 0 0.4 1 0 k 0 0.4 1 0 K ) @ ( %AI6_BeginPatternLayer 800 Ar 0 J 0 j 3.6 w 4 M []0 d %AI3_Note: 0 D 0 XR 8.1999 8.1999 m 80.6999 8.1999 L S 8.1999 22.6 m 80.6999 22.6 L S 8.1999 37.0001 m 80.6999 37.0001 L S 8.1999 51.3999 m 80.6999 51.3999 L S 8.1999 65.8 m 80.6999 65.8 L S 8.1999 15.3999 m 80.6999 15.3999 L S 8.1999 29.8 m 80.6999 29.8 L S 8.1999 44.1999 m 80.6999 44.1999 L S 8.1999 58.6 m 80.6999 58.6 L S 8.1999 73.0001 m 80.6999 73.0001 L S %AI6_EndPatternLayer ) & ] E %AI3_EndPattern %AI5_End_NonPrinting-- %AI5_Begin_NonPrinting Np 13 Bn %AI5_BeginGradient: (Black & White) (Black & White) 0 2 Bd [ 0 0 0 < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > 1 %_Br [ 0 0 50 100 %_Bs 1 0 50 0 %_Bs BD %AI5_EndGradient %AI5_BeginGradient: (Black, White) (Black, White) 0 2 Bd [ 0 0 0 < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > 1 %_Br [ 0 0 50 100 %_Bs 1 0 50 0 %_Bs BD %AI5_EndGradient %AI5_BeginGradient: (Chrome) (Chrome) 0 6 Bd [ 0 < 464646454545444444444343434342424241414141404040403F3F3F3E3E3E3E3D3D3D3C3C3C3C3B 3B3B3B3A3A3A39393939383838383737373636363635353535343434333333333232323131313130 3030302F2F2F2E2E2E2E2D2D2D2D2C2C2C2B2B2B2B2A2A2A2A292929282828282727272726262625 2525252424242323232322222222212121202020201F1F1F1F1E1E1E1D1D1D1D1C1C1C1C1B1B1B1A 1A1A1A1919191818181817171717161616151515151414141413131312121212111111101010100F 0F0F0F0E0E0E0D0D0D0D0C0C0C0C0B0B0B0A0A0A0A09090909080808070707070606060505050504 04040403030302020202010101010000 > < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > < 1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A 1A1A1A19191919191919191818181818181818181717171717171717161616161616161615151515 15151515151414141414141414131313131313131312121212121212121211111111111111111010 1010101010100F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C 0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A090909090909090909080808080808080807070707070707 07060606060606060606050505050505050504040404040404040303030303030303030202020202 02020201010101010101010000000000 > 1 %_Br 0 0.275 1 < 6B6A696867666564636261605F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544 434241403F3E3D3C3B3A393837363534333231302F2E2D2C2B2A292827262524232221201F > 1 %_Br 0 < 00000101010102020202030303040404040505050506060607070707080808090909090A0A0A0A0B 0B0B0C0C0C0C0D0D0D0D0E0E0E0F0F0F0F1010101011111112121212131313141414141515151516 161617171717181818181919191A1A1A1A1B1B1B1B1C1C1C1D1D1D1D1E1E1E1F1F1F1F2020202021 212122222222232323232424242525252526262626272727282828282929292A2A2A2A2B2B2B2B2C 2C2C2D2D2D2D2E2E2E2E2F2F2F303030303131313132323233333333343434353535353636363637 373738383838393939393A3A3A3B3B3B3B3C3C3C3C3D3D3D3E3E3E3E3F3F3F404040404141414142 42424343434344444444454545464646 > < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > < 00000101020203030304040505050606070708080809090A0A0A0B0B0C0C0D0D0D0E0E0F0F101010 1111121212131314141515151616171718181819191A1A1A1B1B1C1C1D1D1D1E1E1F1F1F20202121 222222232324242525252626272727282829292A2A2A2B2B2C2C2D2D2D2E2E2F2F2F303031313232 32333334343435353636373737383839393A3A3A3B3B3C3C3C3D3D3E3E3F3F3F4040414142424243 434444444545464647474748484949494A4A4B4B4C4C4C4D4D4E4E4F4F4F50505151515252535354 54545555565657575758585959595A5A5B5B5C5C5C5D5D5E5E5F5F5F606061616162626363646464 6565666666676768686969696A6A6B6B > 1 %_Br 0 0 0 0 1 %_Br < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > < 4D4C4C4C4B4B4B4A4A4A4A4949494848484747474746464645454544444444434343424242414141 414040403F3F3F3E3E3E3E3D3D3D3C3C3C3B3B3B3B3A3A3A39393938383838373737363636353535 35343434333333323232323131313030302F2F2F2F2E2E2E2D2D2D2C2C2C2C2B2B2B2A2A2A292929 292828282727272626262625252524242423232323222222212121202020201F1F1F1E1E1E1D1D1D 1D1C1C1C1B1B1B1A1A1A1A1919191818181717171716161615151514141414131313121212111111 111010100F0F0F0E0E0E0E0D0D0D0C0C0C0B0B0B0B0A0A0A09090908080808070707060606050505 05040404030303020202020101010000 > 0 0 1 %_Br [ 1 0 50 92 %_Bs 0 0.275 1 0.12 1 50 59 %_Bs 0 0.275 1 0.42 1 50 50 %_Bs 1 0 50 49 %_Bs 1 0 50 41 %_Bs 1 0.3 0 0 1 50 0 %_Bs BD %AI5_EndGradient %AI5_BeginGradient: (Green, Blue) (Green, Blue) 0 2 Bd [ < 99999A9A9B9B9B9C9C9D9D9D9E9E9F9F9FA0A0A1A1A1A2A2A3A3A3A4A4A5A5A5A6A6A7A7A7A8A8A9 A9A9AAAAABABABACACADADADAEAEAFAFAFB0B0B1B1B1B2B2B3B3B3B4B4B5B5B5B6B6B7B7B7B8B8B9 B9B9BABABBBBBBBCBCBDBDBDBEBEBFBFBFC0C0C1C1C1C2C2C3C3C3C4C4C5C5C5C6C6C7C7C7C8C8C9 C9C9CACACBCBCBCCCCCDCDCDCECECFCFCFD0D0D1D1D1D2D2D3D3D3D4D4D5D5D5D6D6D7D7D7D8D8D9 D9D9DADADBDBDBDCDCDDDDDDDEDEDFDFDFE0E0E1E1E1E2E2E3E3E3E4E4E5E5E5E6E6E7E7E7E8E8E9 E9E9EAEAEBEBEBECECEDEDEDEEEEEFEFEFF0F0F1F1F1F2F2F3F3F3F4F4F5F5F5F6F6F7F7F7F8F8F9 F9F9FAFAFBFBFBFCFCFDFDFDFEFEFFFF > < 000102020304050506070808090A0B0B0C0D0E0E0F101111121314141516171718191A1A1B1C1D1D 1E1F20202122232324252626272829292A2B2C2C2D2E2F2F303132323334353536373838393A3B3B 3C3D3E3E3F404141424344444546474748494A4A4B4C4D4D4E4F5050515253535455565657585959 5A5B5C5C5D5E5F5F606162626364656566676868696A6B6B6C6D6E6E6F7071717273747475767777 78797A7A7B7C7D7D7E7F80808182828384858586878888898A8B8B8C8D8E8E8F9091919293949495 96979798999A9A9B9C9D9D9E9FA0A0A1A2A3A3A4A5A6A6A7A8A9A9AAABACACADAEAFAFB0B1B2B2B3 B4B5B5B6B7B8B8B9BABBBBBCBDBEBEBF > < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > 0 1 %_Br [ 1 0.75 0 0 1 50 100 %_Bs 0.6 0 1 0 1 50 0 %_Bs BD %AI5_EndGradient %AI5_BeginGradient: (Orange, Green, Violet) (Orange, Green, Violet) 0 3 Bd [ < F0EFEFEFEEEEEEEDEDEDECECECEBEBEBEAEAEAE9E9E9E8E8E8E7E7E7E6E6E6E5E5E5E4E4E4E3E3E3 E3E2E2E2E1E1E1E0E0E0DFDFDFDEDEDEDDDDDDDCDCDCDBDBDBDADADAD9D9D9D8D8D8D7D7D7D6D6D6 D5D5D5D4D4D4D3D3D3D2D2D2D1D1D1D0D0D0CFCFCFCECECECDCDCDCCCCCCCBCBCBCACACAC9C9C9C8 C8C8C7C7C7C6C6C6C5C5C5C4C4C4C3C3C3C2C2C2C2C1C1C1C0C0C0BFBFBFBEBEBEBDBDBDBCBCBCBB BBBBBABABAB9B9B9B8B8B8B7B7B7B6B6B6B5B5B5B4B4B4B3B3B3B2B2B2B1B1B1B0B0B0AFAFAFAEAE AEADADADACACACABABABAAAAAAA9A9A9A8A8A8A7A7A7A6A6A6A5A5A5A4A4A4A3A3A3A2A2A2A1A1A1 A0A0A0A09F9F9F9E9E9E9D9D9D9C9C9C > < 5455555657575859595A5A5B5C5C5D5E5E5F5F6061616263636465656666676868696A6A6B6B6C6D 6D6E6F6F707171727273747475767677777879797A7B7B7C7C7D7E7E7F8080818282838384858586 87878888898A8A8B8C8C8D8D8E8F8F909191929393949495969697989899999A9B9B9C9D9D9E9E9F A0A0A1A2A2A3A4A4A5A5A6A7A7A8A9A9AAAAABACACADAEAEAFAFB0B1B1B2B3B3B4B5B5B6B6B7B8B8 B9BABABBBBBCBDBDBEBFBFC0C1C1C2C2C3C4C4C5C6C6C7C7C8C9C9CACBCBCCCCCDCECECFD0D0D1D2 D2D3D3D4D5D5D6D7D7D8D8D9DADADBDCDCDDDDDEDFDFE0E1E1E2E3E3E4E4E5E6E6E7E8E8E9E9EAEB EBECEDEDEEEFEFF0F0F1F2F2F3F4F4F5 > < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > < 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000101010101010101010101010101010101010101010101010101010101 01010101010101010101010101010101010101010101010101010101010101010101010101010101 01010101010101010101010101010101010101010101010101010101010101020202020202020202 02020202020202020202020202020202020202020202020202020202020202020202020202020202 02020202020202020202020202020202020202020202020202020202020202020202020202020202 02020202020202020202020303030303 > 1 %_Br < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0 > < A1A0A0A09F9F9F9E9E9E9D9D9D9D9C9C9C9B9B9B9A9A9A9999999898989797979696969595959594 94949393939292929191919090908F8F8F8E8E8E8E8D8D8D8C8C8C8B8B8B8A8A8A89898988888887 878787868686858585848484838383828282818181808080807F7F7F7E7E7E7D7D7D7C7C7C7B7B7B 7A7A7A79797978787878777777767676757575747474737373727272717171717070706F6F6F6E6E 6E6D6D6D6C6C6C6B6B6B6A6A6A6A6969696868686767676666666565656464646363636262626261 61616060605F5F5F5E5E5E5D5D5D5C5C5C5B5B5B5B5A5A5A59595958585857575756565655555554 54 > < F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8 F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD FDFDFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFF FF > 0 1 %_Br [ 0.61 0.96 0 0.01 1 50 100 %_Bs 0.94 0.33 1 0 1 50 50 %_Bs 0 0.63 0.96 0 1 50 0 %_Bs BD %AI5_EndGradient %AI5_BeginGradient: (Pink, Yellow, Green ) (Pink, Yellow, Green ) 0 3 Bd [ < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4E4F50 5152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F70717273 > < 05050505050505050505050505050404040404040404040404040404040404040404040403030303 03030303030303030303030303030303030303020202020202020202020202020202020202020202 0201010101010101010101010101010101010101010101000000000000000000000000 > < CCCCCCCCCCCBCBCBCBCBCBCBCBCBCACACACACACACACACAC9C9C9C9C9C9C9C9C9C8C8C8C8C8C8C8C8 C8C7C7C7C7C7C7C7C7C7C6C6C6C6C6C6C6C6C6C5C5C5C5C5C5C5C5C5C4C4C4C4C4C4C4C4C3C3C3C3 C3C3C3C3C3C2C2C2C2C2C2C2C2C2C1C1C1C1C1C1C1C1C1C0C0C0C0C0C0C0C0C0BFBFBF > 0 1 %_Br < 0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A09090909090909090909090909090909090909090808080808080808080808080808080808 08080807070707070707070707070707070707070706060606060606060606060606060606060605 05050505050505050505050505050505050404040404040404040404040404040404030303030303 03030303030303030303030202020202020202020202020202020201010101010101010101010101 010101000000000000000000 > < B2B2B2B2B1B1B1B0B0B0AFAFAEAEAEADADACACABABAAAAA9A9A8A8A7A7A6A6A5A5A4A4A3A3A2A2A1 A0A09F9F9E9E9D9D9C9B9B9A9A999898979796959594949392929190908F8F8E8D8D8C8B8B8A8989 88888786868584848382828180807F7E7D7D7C7B7B7A7979787777767575747372727170706F6E6D 6D6C6B6B6A69686867666565646363626160605F5E5D5D5C5B5A5A59585757565554545352515150 4F4E4D4D4C4B4A4A4948474646454443434241403F3F3E3D3C3B3B3A393837373635343333323130 2F2F2E2D2C2B2B2A2928272726252423222221201F1E1D1D1C1B1A1918181716151413131211100F 0E0E0D0C0B0A090908070605 > < 0000010101020202030304040505060607070808090A0A0B0B0C0C0D0E0E0F0F1011111213131415 151616171818191A1B1B1C1D1D1E1F1F202122222324242526272728292A2A2B2C2C2D2E2F303031 323333343536363738393A3A3B3C3D3E3E3F4041424243444546464748494A4B4B4C4D4E4F505051 5253545556565758595A5B5B5C5D5E5F6061626263646566676869696A6B6C6D6E6F707171727374 75767778797A7B7B7C7D7E7F80818283848586868788898A8B8C8D8E8F9091929394949596979899 9A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAAAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0 C1C2C3C4C5C6C7C8C9CACBCC > 0 1 %_Br [ 0.45 0 0.75 0 1 50 100 %_Bs 0 0.02 0.8 0 1 50 64 %_Bs 0.05 0.7 0 0 1 57 0 %_Bs BD %AI5_EndGradient %AI5_BeginGradient: (Purple, Red, Yellow) (Purple, Red, Yellow) 0 3 Bd [ 0 < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A > < CCCCCCCDCDCDCDCDCECECECECECFCFCFCFD0D0D0D0D0D1D1D1D1D1D2D2D2D2D2D3D3D3D3D3D4D4D4 D4D5D5D5D5D5D6D6D6D6D6D7D7D7D7D7D8D8D8D8D8D9D9D9D9DADADADADADBDBDBDBDBDCDCDCDCDC DDDDDDDDDDDEDEDEDEDFDFDFDFDFE0E0E0E0E0E1E1E1E1E1E2E2E2E2E2E3E3E3E3E4E4E4E4E4E5E5 E5E5E5E6E6E6E6E6E7E7E7E7E7E8E8E8E8E9E9E9E9E9EAEAEAEAEAEBEBEBEBEBECECECECECEDEDED EDEEEEEEEEEEEFEFEFEFEFF0F0F0F0F0F1F1F1F1F1F2F2F2F2F3F3F3F3F3F4F4F4F4F4F5F5F5F5F5 F6F6F6F6F6F7F7F7F7F8F8F8F8F8F9F9F9F9F9FAFAFAFAFAFBFBFBFBFBFCFCFCFCFDFDFDFDFDFEFE FEFEFEFFFFFF > 0 1 %_Br < E5E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBE BDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A99989796 9594939291908F8E8D8C8B8A898887868584838281807F7E7D7C7B7A797877767574737271706F6E 6D6C6B6A696867666564636261605F5E5D5C5B5A595857565554535251504F4E4D4C4B4A49484746 4544434241403F3E3D3C3B3A393837363534333231302F2E2D2C2B2A292827262524232221201F1E 1D1C1B1A191817161514131211100F0E0D0C0B0A09080706050403020100 > < E5E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9EAEAEAEA EAEAEAEAEAEBEBEBEBEBEBEBEBEBECECECECECECECECECEDEDEDEDEDEDEDEDEDEEEEEEEEEEEEEEEE EEEFEFEFEFEFEFEFEFEFF0F0F0F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F2F2F2F2F2F2F2F2F2F3F3F3 F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7 F7F7F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9FAFAFAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFCFC FCFCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFEFFFFFFFFFF > < 00010203040405060708090A0B0C0C0D0E0F10111213141415161718191A1B1C1D1D1E1F20212223 242525262728292A2B2C2D2D2E2F30313233343535363738393A3B3C3D3D3E3F4041424344454546 4748494A4B4C4D4E4E4F50515253545556565758595A5B5C5D5E5E5F60616263646566666768696A 6B6C6D6E6E6F70717273747576767778797A7B7C7D7E7F7F80818283848586878788898A8B8C8D8E 8F8F90919293949596979798999A9B9C9D9E9F9FA0A1A2A3A4A5A6A7A7A8A9AAABACADAEAFAFB0B1 B2B3B4B5B6B7B8B8B9BABBBCBDBEBFC0C0C1C2C3C4C5C6C7C8C8C9CACBCC > 0 1 %_Br [ 0 0.04 1 0 1 50 100 %_Bs 0 1 0.8 0 1 50 50 %_Bs 0.9 0.9 0 0 1 50 0 %_Bs BD %AI5_EndGradient %AI5_BeginGradient: (Rainbow) (Rainbow) 0 6 Bd [ < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > 1 0 0 1 %_Br 1 < 0708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E 2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F50515253545556 5758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E 7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6 A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCE CFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6 F7F8F9FAFBFCFDFEFF > 0 0 1 %_Br 1 < 00000000000000000000000000000000000001010101010101010101010101010101010101010101 01010101010101010101010101010202020202020202020202020202020202020202020202020202 02020202020202020202030303030303030303030303030303030303030303030303030303030303 03030303030304040404040404040404040404040404040404040404040404040404040404040404 04040505050505050505050505050505050505050505050505050505050505050505050505050606 06060606060606060606060606060606060606060606060606060606060606060606070707070707 07070707070707070707070707070707 > < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > 0 1 %_Br < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > 0 1 0 1 %_Br 0 < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > 1 0 1 %_Br [ 0 1 0 0 1 50 100 %_Bs 1 1 0 0 1 50 80 %_Bs 1 0.0279 0 0 1 50 60 %_Bs 1 0 1 0 1 50 40 %_Bs 0 0 1 0 1 50 20 %_Bs 0 1 1 0 1 50 0 %_Bs BD %AI5_EndGradient %AI5_BeginGradient: (Steel Bar) (Steel Bar) 0 3 Bd [ 0 0 0 < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > 1 %_Br 0 0 0 < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > 1 %_Br [ 0 0 50 100 %_Bs 1 0 50 70 %_Bs 0 0 50 0 %_Bs BD %AI5_EndGradient %AI5_BeginGradient: (White & Red Radial) (White & Red Radial) 1 18 Bd [ 0 1 1 0 1 %_Br 0 1 1 0 1 %_Br 0 < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > 0 1 %_Br 0 0 0 0 1 %_Br 0 < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > 0 1 %_Br 0 1 1 0 1 %_Br 0 < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > 0 1 %_Br 0 0 0 0 1 %_Br 0 < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > 0 1 %_Br 0 1 1 0 1 %_Br 0 < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > 0 1 %_Br 0 0 0 0 1 %_Br 0 < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > 0 1 %_Br 0 1 1 0 1 %_Br 0 < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > < FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8 D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0 AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A8988 87868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A69686766656463626160 5F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A3938 37363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A19181716151413121110 0F0E0D0C0B0A09080706050403020100 > 0 1 %_Br 0 0 0 0 1 %_Br 0 < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > 0 1 %_Br [ 0 1 1 0 1 50 0 %_Bs 0 1 1 0 1 50 0 %_Bs 0 1 1 0 1 50 12.5 %_Bs 0 0 0 0 1 50 12.5 %_Bs 0 0 0 0 1 50 25 %_Bs 0 1 1 0 1 50 25 %_Bs 0 1 1 0 1 50 37.5 %_Bs 0 0 0 0 1 50 37.5 %_Bs 0 0 0 0 1 50 50 %_Bs 0 1 1 0 1 50 50 %_Bs 0 1 1 0 1 50 62.5 %_Bs 0 0 0 0 1 50 62.5 %_Bs 0 0 0 0 1 50 75 %_Bs 0 1 1 0 1 50 75 %_Bs 0 1 1 0 1 50 87.5 %_Bs 0 0 0 0 1 50 87.5 %_Bs 0 0 0 0 1 50 100 %_Bs 0 1 1 0 1 50 100 %_Bs BD %AI5_EndGradient %AI5_BeginGradient: (Yellow & Orange Radial) (Yellow & Orange Radial) 1 2 Bd [ 0 < 0001010203040506060708090A0B0C0C0D0E0F10111213131415161718191A1B1C1D1D1E1F202122 232425262728292A2B2B2C2D2E2F303132333435363738393A3B3C3D3E3E3F404142434445464748 494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60606162636465666768696A6B6C6D6E6F 707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C > < FFFFFFFFFEFEFEFEFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAFAFAFAF9F9F9F9F9 F9F8F8F8F8F8F8F7F7F7F7F7F7F6F6F6F6F6F6F5F5F5F5F5F5F4F4F4F4F4F3F3F3F3F3F3F2F2F2F2 F2F2F1F1F1F1F1F0F0F0F0F0F0EFEFEFEFEFEFEEEEEEEEEEEDEDEDEDEDEDECECECECECEBEBEBEBEB EBEAEAEAEAEAE9E9E9E9E9E9E8E8E8E8E8E8E7E7E7E7E7E6E6E6E6E6E5 > 0 1 %_Br [ 0 0 1 0 1 52 19 %_Bs 0 0.55 0.9 0 1 50 100 %_Bs BD %AI5_EndGradient %AI5_BeginGradient: (Yellow & Purple Radial) (Yellow & Purple Radial) 1 2 Bd [ < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > < 1415161718191A1B1C1D1E1F1F202122232425262728292A2A2B2C2D2E2F30313233343536363738 393A3B3C3D3E3F40414142434445464748494A4B4C4D4D4E4F50515253545556575858595A5B5C5D 5E5F60616263646465666768696A6B6C6D6E6F6F707172737475767778797A7B7B7C7D7E7F808182 83848586868788898A8B8C8D8E8F90919292939495969798999A9B9C9D9D9E9FA0A1A2A3A4A5A6A7 A8A9A9AAABACADAEAFB0B1B2B3B4B4B5B6B7B8B9BABBBCBDBEBFC0C0C1C2C3C4C5C6C7C8C9CACBCB CCCDCECFD0D1D2D3D4D5D6D7D7D8D9DADBDCDDDEDFE0E1E2E2E3E4E5E6E7E8E9EAEBECEDEEEEEFF0 F1F2F3F4F5F6F7F8F9F9FAFBFCFDFEFF > < ABAAAAA9A8A7A7A6A5A5A4A3A3A2A1A1A09F9F9E9D9D9C9B9B9A9999989797969595949393929191 908F8F8E8D8D8C8B8B8A8989888787868585848383828181807F7F7E7D7D7C7B7B7A797978777776 7575747373727171706F6F6E6D6D6C6B6B6A6969686767666565646362626160605F5E5E5D5C5C5B 5A5A5958585756565554545352525150504F4E4E4D4C4C4B4A4A4948484746464544444342424140 403F3E3E3D3C3C3B3A3A3938383736363534343332323130302F2E2E2D2C2C2B2A2A292828272626 25242423222121201F1F1E1D1D1C1B1B1A1919181717161515141313121111100F0F0E0D0D0C0B0B 0A090908070706050504030302010100 > 0 1 %_Br [ 0 0.08 0.67 0 1 50 14 %_Bs 1 1 0 0 1 50 100 %_Bs BD %AI5_EndGradient %AI5_BeginGradient: (Yellow, Violet, Orange, Blue) (Yellow, Violet, Orange, Blue) 0 4 Bd [ < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF > < A1A1A1A1A2A2A2A2A3A3A3A3A4A4A4A4A4A5A5A5A5A6A6A6A6A7A7A7A7A8A8A8A8A9A9A9A9AAAAAA AAAAABABABABACACACACADADADADAEAEAEAEAFAFAFAFB0B0B0B0B0B1B1B1B1B2B2B2B2B3B3B3B3B4 B4B4B4B5B5B5B5B6B6B6B6B6B7B7B7B7B8B8B8B8B9B9B9B9BABABABABBBBBBBBBCBCBCBCBCBDBDBD BDBEBEBEBEBFBFBFBFC0C0C0C0C1C1C1C1C2C2C2C2C2C3C3C3C3C4C4C4C4C5C5C5C5C6C6C6C6C7C7 C7C7C8C8C8C8C8C9C9C9C9CACACACACBCBCBCBCCCCCCCCCDCDCDCDCECECECECECFCFCFCFD0D0D0D0 D1D1D1D1D2D2D2D2D3D3D3D3D4D4D4D4D4D5D5D5D5D6D6D6D6D7D7D7D7D8D8D8D8D9D9D9D9DADADA DADADBDBDBDBDCDCDCDCDDDDDDDDDEDE > < F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CF CECDCCCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B4B3B2B1B0AFAEADACABAAA9 A8A7A6A5A4A3A2A1A09F9E9D9C9C9B9A999897969594939291908F8E8D8C8B8A8988878685848483 8281807F7E7D7C7B7A797877767574737271706F6E6D6C6C6B6A696867666564636261605F5E5D5C 5B5A59585756555454535251504F4E4D4C4B4A494847464544434241403F3E3D3C3C3B3A39383736 3534333231302F2E2D2C2B2A29282726252424232221201F1E1D1C1B1A191817161514131211100F 0E0D0C0C0B0A09080706050403020100 > 0 1 %_Br < 9C9B9A9A9998989796969595949393929191908F8F8E8E8D8C8C8B8A8A8989888787868585848383 82828180807F7E7E7D7C7C7B7B7A797978777776757574747372727170706F6E6E6D6D6C6B6B6A69 6968676766666564646362626161605F5F5E5D5D5C5B5B5A5A595858575656555454535352515150 4F4F4E4D4D4C4C4B4A4A4948484746464545444343424141403F3F3E3E3D3C3C3B3A3A3939383737 36353534333332323130302F2E2E2D2C2C2B2B2A292928272726252524242322222120201F1E1E1D 1D1C1B1B1A191918171716161514141312121111100F0F0E0D0D0C0B0B0A0A090808070606050404 030302010100 > < F5F4F4F4F3F3F3F2F2F2F1F1F1F0F0F0EFEFEFEEEEEEEDEDEDECECECEBEBEAEAEAE9E9E9E8E8E8E7 E7E7E6E6E6E5E5E5E4E4E4E3E3E3E2E2E2E1E1E1E0E0E0DFDFDEDEDEDDDDDDDCDCDCDBDBDBDADADA D9D9D9D8D8D8D7D7D7D6D6D6D5D5D5D4D4D3D3D3D2D2D2D1D1D1D0D0D0CFCFCFCECECECDCDCDCCCC CCCBCBCBCACACAC9C9C8C8C8C7C7C7C6C6C6C5C5C5C4C4C4C3C3C3C2C2C2C1C1C1C0C0C0BFBFBFBE BEBEBDBDBCBCBCBBBBBBBABABAB9B9B9B8B8B8B7B7B7B6B6B6B5B5B5B4B4B4B3B3B3B2B2B1B1B1B0 B0B0AFAFAFAEAEAEADADADACACACABABABAAAAAAA9A9A9A8A8A8A7A7A6A6A6A5A5A5A4A4A4A3A3A3 A2A2A2A1A1A1 > < 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324252627 28292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F 505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071727374757677 78797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7 C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF F0F1F2F3F4F5 > < 03030303030202020202020202020202020202020202020202020202020202020202020202020202 02020202020202020202020202020202020202020202020202020202020202020202020202020202 02020202020202020202020202020202020202020201010101010101010101010101010101010101 01010101010101010101010101010101010101010101010101010101010101010101010101010101 01010101010101010101010101010101010101010101010101010101010101010101010101000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000 > 1 %_Br < 0D0D0E0F0F10101111121313141415161617171819191A1A1B1C1C1D1D1E1E1F2020212122232324 2425262627272828292A2A2B2B2C2D2D2E2E2F30303131323333343435353637373838393A3A3B3B 3C3D3D3E3E3F3F404141424243444445454647474848494A4A4B4B4C4C4D4E4E4F4F505151525253 54545555565757585859595A5B5B5C5C5D5E5E5F5F60616162626363646565666667686869696A6B 6B6C6C6D6E6E6F6F70707172727373747575767677787879797A7B7B7C7C7D7D7E7F7F8080818282 8383848585868687878889898A8A8B8C8C8D8D8E8F8F90909192929393949495969697979899999A 9A9B9C > < 08090A0B0C0D0E0F0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E 2F303132333435363738393A3B3C3D3E3F40404142434445464748494A4B4C4D4E4F505152535455 565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F70717172737475767778797A7B7C 7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A2A3 A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACB CCCDCECFD0D1D2D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2 F3F4F5 > < F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCCCB CAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3 A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A898887868584838281807F7E7D7C7B 7A797877767574737271706F6E6D6C6B6A696867666564636261605F5E5D5C5B5A59585756555453 5251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A393837363534333231302F2E2D2C2B 2A292827262524232221201F1E1D1C1B1A191817161514131211100F0E0D0C0B0A09080706050403 020100 > < 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000101010101010101010101010101010101010101010101010101010101010101 01010101010101010101010101010101010101010101010101010101010101010101010101010101 01010101010101010101010101010101010101010101010202020202020202020202020202020202 02020202020202020202020202020202020202020202020202020202020202020202020202020202 02020202020202020202020202020202020202020202020202020202020202020202020202020303 030303 > 1 %_Br [ 1 0.87 0 0 1 50 95 %_Bs 0 0.63 0.96 0 1 50 65 %_Bs 0.61 0.96 0 0.01 1 50 35 %_Bs 0.05 0.03 0.95 0 1 50 5 %_Bs BD %AI5_EndGradient %AI5_End_NonPrinting-- %AI5_BeginPalette 0 0 Pb 0 0 0 0 k Pc 0 0 0 1 k Pc 0 0.45 0.6 0 k Pc 0 0.5 0.05 0 k Pc 0 0.9 1 0 k Pc 1 0.2 1 0 k Pc 1 0.4 0.15 0 k Pc 0.2 0 1 0 k Pc 0.25 1 0.25 0 k Pc 0.4 0.4 0.4 0 k Pc 0.4 0.7 1 0 k Pc 0.75 0.9 0 0 k Pc 1 0 0.55 0 (Aqua) 0 x Pc 1 0.5 0 0 (Blue) 0 x Pc 0.5 0.4 0.3 0 (Blue Gray) 0 x Pc 0.8 0.05 0 0 (Blue Sky) 0 x Pc 0.5 0.85 1 0 (Brown) 0 x Pc 1 0.9 0.1 0 (Dark Blue) 0 x Pc 1 0.55 1 0 (Forest Green) 0 x Pc 0.05 0.2 0.95 0 (Gold) 0 x Pc 0.75 0.05 1 0 (Grass Green) 0 x Pc 0 0.45 1 0 (Orange) 0 x Pc 0.15 1 1 0 (Red) 0 x Pc 0.45 0.9 0 0 (Violet) 0 x Pc Bb 2 (Black, White) -4220 4422 0 0 1 0 0 1 0 0 Bg 0 BB Pc Bb 2 (Chrome) -4220 4422 0 0 1 0 0 1 0 0 Bg 0 BB Pc Bb 2 (Green, Blue) -4220 4422 0 0 1 0 0 1 0 0 Bg 0 BB Pc Bb 2 (Orange, Green, Violet) -4220 4422 0 0 1 0 0 1 0 0 Bg 0 BB Pc Bb 2 (Pink, Yellow, Green ) -4220 4422 0 0 1 0 0 1 0 0 Bg 0 BB Pc Bb 2 (Purple, Red, Yellow) -4220 4422 0 0 1 0 0 1 0 0 Bg 0 BB Pc Bb 2 (Rainbow) -4220 4422 0 0 1 0 0 1 0 0 Bg 0 BB Pc Bb 2 (Steel Bar) -4220 4422 0 0 1 0 0 1 0 0 Bg 0 BB Pc Bb 0 0 0 0 Bh 2 (White & Red Radial) -4220 4422 0 0 1 0 0 1 0 0 Bg 0 BB Pc Bb 0 0 0 0 Bh 2 (Yellow & Orange Radial) -4220 4422 0 0 1 0 0 1 0 0 Bg 0 BB Pc Bb 0 0 0 0 Bh 2 (Yellow & Purple Radial) -4220 4422 0 0 1 0 0 1 0 0 Bg 0 BB Pc Bb 2 (Yellow, Violet, Orange, Blue) -4220 4422 0 0 1 0 0 1 0 0 Bg 0 BB Pc (Arrow1.2.out/in) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Arrow1.2.side) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Bricks) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Checks) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Confetti) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (DblLine1.2.inner) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (DblLine1.2.outer) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (DblLine1.2.side) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Diamonds) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Hexagon) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Laurel.inner) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Laurel.outer) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Laurel.side) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Leaves-fall) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Polka dots) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Random circles) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Rope.side) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Scales) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (SolidStar.side) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Stars) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Stripes) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (TriBevel.outer) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (TriBevel.side) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc (Waves-scroll) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc 1 1 1 1 k Pc 1 g Pc 0 g Pc 0.75 g Pc 0.5 g Pc 0.25 g Pc 0 g Pc Bb 2 (Black & White) -4220 4422 0 0 1 0 0 1 0 0 Bg 0 BB Pc 0.25 0 0 0 k Pc 0.5 0 0 0 k Pc 0.75 0 0 0 k Pc 1 0 0 0 k Pc 0.25 0.25 0 0 k Pc 0.5 0.5 0 0 k Pc 0.75 0.75 0 0 k Pc 1 1 0 0 k Pc 0 g Pc 0 0.25 0 0 k Pc 0 0.5 0 0 k Pc 0 0.75 0 0 k Pc 0 1 0 0 k Pc 0 0.25 0.25 0 k Pc 0 0.5 0.5 0 k Pc 0 0.75 0.75 0 k Pc 0 1 1 0 k Pc 0 g Pc 0 0 0.25 0 k Pc 0 0 0.5 0 k Pc 0 0 0.75 0 k Pc 0 0 1 0 k Pc 0.25 0 0.25 0 k Pc 0.5 0 0.5 0 k Pc 0.75 0 0.75 0 k Pc 1 0 1 0 k Pc (Yellow Stripe) 0 0 1 1 0 0 0 0 0 [1 0 0 1 0 0] p Pc 0.25 0.125 0 0 k Pc 0.5 0.25 0 0 k Pc 0.75 0.375 0 0 k Pc 1 0.5 0 0 k Pc 0.125 0.25 0 0 k Pc 0.25 0.5 0 0 k Pc 0.375 0.75 0 0 k Pc 0.5 1 0 0 k Pc 0 0.25 0.125 0 k Pc 0 0.5 0.25 0 k Pc 0 0.75 0.375 0 k Pc 0 1 0.5 0 k Pc 0 0.125 0.25 0 k Pc 0 0.25 0.5 0 k Pc 0 0.375 0.75 0 k Pc 0 0.5 1 0 k Pc 0.125 0 0.25 0 k Pc 0.25 0 0.5 0 k Pc 0.375 0 0.75 0 k Pc 0.5 0 1 0 k Pc 0.25 0 0.125 0 k Pc 0.5 0 0.25 0 k Pc 0.75 0 0.375 0 k Pc 1 0 0.5 0 k Pc 0.25 0.125 0.125 0 k Pc 0.5 0.25 0.25 0 k Pc 0.75 0.375 0.375 0 k Pc 1 0.5 0.5 0 k Pc 0.25 0.25 0.125 0 k Pc 0.5 0.5 0.25 0 k Pc 0.75 0.75 0.375 0 k Pc 1 1 0.5 0 k Pc 0.125 0.25 0.125 0 k Pc 0.25 0.5 0.25 0 k Pc 0.375 0.75 0.375 0 k Pc 0.5 1 0.5 0 k Pc 0.125 0.25 0.25 0 k Pc 0.25 0.5 0.5 0 k Pc 0.375 0.75 0.75 0 k Pc 0.5 1 1 0 k Pc 0.125 0.125 0.25 0 k Pc 0.25 0.25 0.5 0 k Pc 0.375 0.375 0.75 0 k Pc 0.5 0.5 1 0 k Pc 0.25 0.125 0.25 0 k Pc 0.5 0.25 0.5 0 k Pc 0.75 0.375 0.75 0 k Pc 1 0.5 1 0 k Pc PB %AI5_EndPalette %%EndSetup %AI5_BeginLayer 1 1 1 1 0 0 0 79 128 255 Lb (\203\214\203C\203\204\201| 1) Ln 0 A 0 O 0 g 800 Ar 2 J 0 j 1 w 2 M []0 d %AI3_Note: 0 D 0 XR 101.7998 199.2002 m 106.2998 199.1001 111.2998 198.5 115.7998 197.8999 C 115.7998 197.7998 L 122.2998 196.2998 129.7998 194.7998 135.7998 191.6001 C 131.5 191.2002 127.8999 190.8999 124.1001 191.8999 C 122 189.7002 119.2002 194.1001 117.7002 190.7998 C 117 191.2002 115.5 192.3999 115.2002 191.2998 C 114.7998 191.1001 114.5 190.1001 113.8999 190.2998 C 112.3999 191.2002 112.1001 193.7998 110.3999 194 C 109.8999 193.1001 110.2002 192.3999 110.3999 191.7998 C 108.5 190.1001 107.7998 193.1001 106.2998 193.8999 C 105.3999 193.2998 105.5 193.1001 105.3999 192.1001 C 104.2002 192.1001 102.7002 193 102 193.7002 C 101.3999 192.2002 100.3999 192.5 99.2002 193 C 96.7998 195.1001 L 95.2002 195.2002 96.2998 193.5 95.6001 193 C 94.2998 193.1001 92.8999 194.1001 92.2002 195.3999 C 91.7998 195.2998 90.8999 195.7002 91 194.7998 C 91.2998 193.6001 91.2002 193.7998 90.7998 193 C 89 192.3999 87.7998 196 86.6001 193.2002 C 85.2002 192.6001 84.3999 194 82.8999 194 C 83.1001 193.1001 82 193.1001 81.3999 193 C 80.8999 193.1001 80.2002 193.2998 79.6001 193.6001 C 79 193.7998 78.6001 194.7002 77.7998 194.5 C 77.7002 193.7002 77.2002 193.2002 77.5 192.3999 C 76.3999 192.1001 75.2998 192.2002 74.2002 193.2002 C 72.8999 193.2002 73.6001 191.2002 72.3999 191.3999 C 71.7998 191 71.2002 191.5 70.3999 191.8999 C 69.7002 192.2002 69.2998 191.3999 69.2002 190.8999 C 68.5 190.3999 67.1001 189.5 65.8999 190.2998 C 65.6001 190.6001 L 64.2998 187.7998 60.6001 190 58.6001 187.7002 C 58.2998 186.2002 56.8999 187.8999 55.7998 187.6001 C 52.8999 186.1001 51.6001 182 48 183.1001 C 47.7998 182.7998 L 47.6001 182.8999 L 42.1001 178.6001 36.1001 175.5 30.7998 171.2002 C 30.7998 171.6001 L 32.2002 172.7002 33.1001 174.2002 34.3999 175 C 35.2002 175.7998 36.7998 176.7002 37.7002 177.7998 C 37.7002 177.7002 L 38.3999 178.1001 39.3999 179.6001 40.2998 180 C 40.3999 179.8999 L 42 181.3999 44.8999 182.5 46.6001 184.1001 C 47.7002 184.3999 48.6001 185.2998 49.6001 185.6001 C 49.5 186.1001 50.1001 186.2998 50.3999 186.2002 C 50.2998 186.3999 L 52.3999 187.7998 55.2998 188.7998 56.8999 190 C 57.2002 189.7002 57.7002 189.8999 58 190.2002 C 58.5 190.5 59.5 191.1001 60.3999 191 C 61.3999 192.6001 63.5 192.3999 64.8999 193.1001 C 64.8999 193.2998 L 65.6001 193.2998 L 65.6001 193.6001 L 67.8999 194.1001 69.8999 194.8999 72.2002 195.3999 C 72.6001 195.7002 L 77.1001 196.3999 81.1001 197.7998 85.3999 198.3999 C 85.8999 198.3999 86.2998 198 86.6001 198.6001 C 86.6001 198.5 L 90.6001 198.7998 94 199.2998 98.2002 199.3999 C 99.2002 199 100.7002 199.2998 101.7998 199.2002 C f 151.8999 193.7002 m 151.6001 192.6001 152.5 193.2998 152.5 192.5 C 152.2998 190.7002 152.3999 189.3999 153.6001 187.8999 C 153.7998 187.7002 L 154 187.5 155.3999 187.6001 155.8999 187.6001 C 161.2002 188.8999 167 187.8999 171.7002 188.5 C 171.7002 188.3999 L 173.6001 188 176.5 189.2002 178.1001 187.6001 C 178.2998 187.7998 L 179 186.8999 179.5 185.7998 179 184.7998 C 179.2998 183 179.2002 181.8999 179.2002 180.2002 C 179.2998 179.6001 178.7002 178.5 179.2998 178 C 179.6001 177.5 178.6001 177.1001 179.2998 176.6001 C 178.7002 175.6001 178.7998 174.5 179.2002 173.2998 C 179 173.2998 L 178.7002 171 179 169 178.8999 166.2998 C 178.5 166 177.7998 165 176.8999 165 C 176 165.2998 174.5 165.2002 174.3999 166.2998 C 174.5 167.1001 174.1001 168.2002 173.8999 168.7002 C 173.7998 170.5 174 172.6001 173.7998 174.6001 C 173.8999 174.6001 L 173.8999 181.2002 L 170.7002 183.7998 166.5 182.2998 163 182.5 C 161.2998 180.5 160.6001 176.3999 161.2998 173.6001 C 161.6001 173.5 L 160.5 173.1001 161.7998 172.7002 161.6001 172 C 162 169.7998 161.7002 168.7998 161.6001 166.3999 C 160.8999 165.7002 160.2002 165.1001 159.2002 164.6001 C 158.2002 164.7998 156.7002 165.3999 156.1001 166.7002 C 156.2998 167.3999 155.8999 168.1001 155.5 168.5 C 155.6001 170.1001 155.3999 172.1001 156 173.6001 C 155.5 174.2002 156.6001 174.8999 155.7998 175.2002 C 156.1001 175.7002 L 156.1001 180.3999 L 155.2998 181.2998 155.3999 182.3999 154 182.8999 C 152.5 183.5 151.1001 182.7002 149.5 182.6001 C 147.6001 182.7002 145.8999 183.3999 144.3999 182.2002 C 141.6001 179.5 142.8999 174.6001 143.2998 171.6001 C 143.2002 169.5 143.7998 167 142.2002 165.3999 C 141.3999 164.7002 140.2998 164.5 139.3999 164.6001 C 138 165.2002 139.6001 166.6001 138.2002 167.3999 C 138.2002 167.7998 139 168.2002 138.2002 168.5 C 138.3999 170.7998 138.5 173.3999 138 175.3999 C 138.2002 175.3999 L 138.2998 176.2998 138.2002 176.2002 138.1001 177.1001 C 138 177.1001 L 138.6001 178 137.2998 178.6001 137.7998 179.7998 C 137.3999 179.8999 L 137.5 179.8999 L 137.2002 180.6001 137.2002 181.5 136.7002 182.2002 C 133.5 181.7002 127 184.1001 125.5 179.2002 C 125.7002 177.8999 125.2002 175.6001 125.5 173.7998 C 125.3999 171.2002 125.2998 167.8999 125.2002 166.2002 C 125.2998 166.2998 L 125 166.6001 125.6001 164.7998 124.3999 165 C 123.5 164.5 121.8999 164.5 121 165 C 120.3999 166.1001 120.7998 168 120 169 C 120.2998 172.6001 119.3999 175.6001 120.3999 178.8999 C 120 178.7998 L 120.2002 179.7002 119.7998 180.2002 120.5 181.2002 C 120.5 183.3999 120.5 183.6001 120.5 186 C 121 186.6001 121.3999 186.2002 121.7998 187.1001 C 121.7998 187 L 122.5 188.5 123.8999 187 125.2002 187.1001 C 131.2002 187.8999 136.7002 187.2998 142.1001 187.8999 C 143.5 188.2002 144.8999 187.6001 146.2998 188.2998 C 146.3999 189.2002 146.6001 190.1001 146.8999 190.6001 C 146.7002 190.6001 147.2002 192.2002 147 192.6001 C 147.3999 193.3999 147.8999 194.2002 148.8999 194.7998 C 150.1001 195.2002 151.2998 194.1001 151.8999 193.7002 C f 87.7002 185.2998 m 88.2998 184.7002 88.2998 184 88.1001 183.3999 C 87.6001 181.1001 L 87.7998 180.7998 87.6001 180 87.7002 179.6001 C 87.6001 179.7998 L 87 178.3999 87.2002 177.1001 87 175.7998 C 86.7002 174.8999 87.2998 174 86.6001 173.2002 C 86.8999 171.7998 86.6001 170.5 86.8999 169.3999 C 87.2998 168.8999 87 167.5 87.5 166.8999 C 87.7998 166.5 88.7998 166.5 88.8999 167.3999 C 88.8999 168.6001 L 89.1001 168.5 89.2002 168.7002 89.2998 168.7998 C 89 169.1001 L 89.6001 169.1001 88.8999 170 89.2002 170.3999 C 88.7998 170.7998 L 89.7998 170.7998 88.8999 171.6001 89.2998 172.1001 C 89 172.2998 L 89.7002 172.7002 89.2002 173.5 89.8999 173.8999 C 89.6001 174.5 L 89.7998 174.3999 89.7998 174.5 89.8999 174.6001 C 89.3999 176 90.6001 177.8999 90.7002 179.2998 C 91.1001 180.8999 92.2998 183.1001 92.5 184.2998 C 93.1001 185 L 93.5 184.7002 L 93.2998 182 92.8999 178.7998 92.8999 176.2002 C 92.3999 174.5 92.7002 173.3999 93.1001 172 C 93.3999 172 L 93 171.6001 L 93.8999 171.1001 93.5 172 94.1001 172.2998 C 93.3999 173.1001 95.1001 173.3999 94.3999 174.2002 C 94.3999 174.1001 94.5 174.1001 94.6001 174 C 94.5 174.7002 95.7002 175.7002 95.2998 177 C 96.3999 177.1001 94.8999 178.5 96.2002 178.6001 C 96.3999 179.8999 L 96.6001 179.6001 L 96.7002 181.1001 97.2998 181.7998 98 183.1001 C 97.6001 183.7002 98.5 184 98.5 184.3999 C 99 184.3999 L 99.1001 182.5 98.8999 180.8999 98.8999 179.2998 C 98.2998 177.5 98.7998 174.8999 98.2002 173.2002 C 98.5 172.6001 98.7998 172.2998 99.6001 172.2998 C 99.8999 173.5 100.5 174.2998 100.3999 175.2998 C 101.2998 175.8999 101.2002 177.6001 101.5 178.2998 C 101.7002 178.5 102 178.2998 102.1001 178.6001 C 101.7998 179.3999 102.7002 180.7002 103.2002 181.3999 C 102.8999 182.3999 103.7998 182.5 103.7998 183.2002 C 103.7998 181.7002 104.7998 180.6001 103.7998 179.3999 C 104.1001 177.2998 103.2998 175.7002 104.2998 173.7998 C 104.6001 174 105 174.1001 104.8999 174.6001 C 104.8999 174.3999 105.2002 174.3999 105.2002 174.6001 C 105.3999 175 105.2998 175.6001 105.3999 176 C 105.5 175.8999 L 105.8999 176.2002 105.7002 177.2998 106 178 C 106.2002 177.8999 106.3999 178.1001 106.2998 178.2998 C 106.3999 178.6001 107.1001 179.2002 107 179.5 C 107.2002 179.3999 L 107.2002 180.1001 108.2998 180.1001 108.2002 181.1001 C 108.6001 181.7002 L 108.7998 181.3999 109 180.7002 109.3999 180.1001 C 108.7002 180 109.3999 179.2998 108.7998 179.2998 C 109 177.2998 107.6001 175.1001 108.7002 173.7998 C 108.3999 173.5 108.8999 173.2002 109.1001 173 C 109.7998 173.7002 110.6001 175 111.1001 176 C 111 176.7002 111.7998 177.2002 111.7002 177.7998 C 112.2998 177.7998 L 112.6001 179.5 L 112.6001 179.2998 L 112.8999 179.3999 113 180.1001 113.3999 180.6001 C 113.3999 180.5 L 113.7998 180.8999 114.5 180.2002 114.2002 179.7998 C 113.6001 178.3999 113.5 176.7998 113 175.2998 C 113.1001 174.3999 113.1001 173.6001 112.6001 172.8999 C 113.3999 172.2002 L 113.7002 172.5 114.2002 172.8999 113.8999 173.2998 C 115 173.3999 114.5 174.1001 115.2998 174.7998 C 115.3999 175.2002 116.2002 175.6001 116.2002 176.3999 C 116.5 172.2998 115.8999 168.2998 116.2998 164 C 116 163.7998 L 113.2998 165.8999 109 165.7002 105.5 165.7002 C 98 163.1001 91.5 155.5 82.8999 159.1001 C 80.2002 161.8999 77.6001 167.5 72.5 165.7002 C 65.2998 163.8999 58.5 157.2002 50.8999 154.7002 C 46.8999 153.7998 43.2998 151.8999 39.5 151.7998 C 35.6001 152.5 30.3999 152.8999 28 149.6001 C 27.6001 148 26.5 145.8999 26.7998 144.1001 C 25.8999 141.5 24.3999 139.5 22 139.1001 C 17.2002 137.2002 13.6001 133.3999 9.2002 130.7002 C 9 131 9.2998 131.7002 8.7998 131.8999 C 9.5 132.7998 L 9.7998 133 9.5 134.2002 10.3999 134.3999 C 10.1001 134.7998 L 10.8999 135 12.2998 134.7002 12.6001 135.7998 C 12.5 138.1001 L 12.6001 138.1001 L 12.6001 138.3999 L 13 138.3999 L 12.5 139 13.1001 138.2002 13.2002 139.1001 C 13.5 139.7998 12.5 140.7002 13.7002 141 C 14.2998 140.6001 14.7002 140.7998 15.5 141 C 16.1001 141.3999 15.7998 142.8999 15.7002 143.2998 C 14.7002 144 16 144.2998 16.2998 145.1001 C 17 144.7998 16.8999 143.7002 17.7998 144.2002 C 17.7998 144.1001 17.7002 143.8999 17.8999 143.8999 C 18.1001 144.2002 18.7998 144.5 18.7002 145.2002 C 18.5 146.3999 18.2002 147.8999 19.1001 148.7002 C 19.6001 147.8999 20.5 147.7002 20.6001 146.8999 C 21 146.8999 L 21.2002 149 L 21.3999 148.8999 L 21.3999 150.1001 21 149.3999 21.7998 150.5 C 21.3999 151.1001 L 21.7002 150.8999 21.7002 151.2998 21.7998 151.3999 C 21.6001 151.7998 21.6001 152.2002 21.7002 152.6001 C 21.7998 151.2998 22.7998 151.6001 23.2002 150.5 C 23.6001 150.3999 24.5 150.3999 24.5 151.2002 C 25.2002 151.8999 24.1001 152.7002 24.5 153.6001 C 24.1001 154 L 24.2002 154 L 24.3999 155.8999 L 25 155.6001 25.7998 153.1001 27 153.7002 C 27.2998 154.2998 27.1001 155.2002 27.3999 155.7998 C 26.8999 156.7002 27.2998 157.5 27.1001 158.7998 C 27.3999 158.2998 L 27.6001 158.5 L 28 158 L 27.7998 157.8999 L 29 156.5 L 28.8999 156.3999 L 29.3999 155.8999 L 30.2998 157 29.7002 159.3999 29.8999 160.8999 C 31.2998 159 L 31.3999 159.1001 L 31.2002 158.5 32.3999 158.2002 32.6001 157.7002 C 33.3999 158.2998 L 32.8999 158.7998 33.2998 161.1001 32.5 161.6001 C 32.8999 162.5 32.1001 162.6001 32 163.3999 C 32.2002 163.2998 L 32.3999 163.5 32.2002 163.8999 32.2998 164.2002 C 32 164.2002 L 32 164.8999 L 32.3999 164.2998 L 32.6001 164.7998 L 32.6001 163.2998 33.8999 163.7002 34.1001 162.3999 C 34.2002 162.5 L 34.5 161.1001 35.3999 160.3999 35.8999 159.1001 C 35.8999 158.5 36.2998 157.8999 36.7998 157.7998 C 37.8999 158.3999 37.2998 159.7998 37.2998 160.8999 C 37.2998 161.5 L 37.2002 161.3999 L 36.6001 161.7998 37.5 163.6001 36.3999 164 C 36.3999 167.2998 L 36.6001 166.7998 36.5 166.6001 36.7002 166.1001 C 36.8999 166.1001 36.7998 166.2998 36.7998 166.3999 C 38.7998 163.8999 39.2002 160.8999 42 159.1001 C 42.5 160.2002 41.7998 162.3999 41.3999 163.7998 C 41.2002 163.7002 41.2998 163.3999 41.2998 163.2002 C 41.7002 164.7002 40.5 165.5 40.6001 167 C 40.1001 167.2002 40.5 167.5 40.6001 167.7998 C 40 168.2002 40 169.2998 40.1001 169.8999 C 41.3999 170.3999 41 168.2002 41.8999 168.1001 C 42 167.2998 42.3999 166.7998 43 166.3999 C 43.2998 166.2002 42.3999 165.2002 43.3999 165.3999 C 43.1001 165 43.7998 164.7998 43.7998 164.5 C 44 164.5 L 44.2002 163.7002 45.5 161.7998 46.2002 161.5 C 46.2002 160.8999 46.7998 160.6001 47.2998 160.2998 C 47.8999 160.7998 47.5 161.7998 47.7998 162.1001 C 47.2002 162.3999 47.7998 162.7998 47.3999 163.2002 C 47.5 163.2002 L 47.2002 164.1001 46.6001 164.2998 47 165.3999 C 46 165.2002 47 166.2998 46.2002 166.7002 C 46.2998 167.3999 45.3999 168.8999 45 169.7002 C 44.7002 170.7998 45.2998 172.1001 44.8999 173 C 45.2002 173.1001 45.3999 173.3999 45.6001 173.6001 C 45.7998 173 L 46.1001 173.2998 L 45.7998 172.2998 47.1001 172 46.7998 171 C 47.5 170.1001 47.7002 169.3999 48.5 168.1001 C 48.1001 167.5 49.3999 167.2998 49.2998 167 C 49.3999 167.2002 49.3999 165.3999 49.8999 166.1001 C 50.7002 165.1001 50.7998 163.2002 52.1001 162.7002 C 52.6001 162.7002 52.6001 163.7002 52.6001 164 C 51.6001 165.5 52.3999 167.7002 51.5 169.3999 C 51.3999 170.6001 50.7002 172.2998 51.1001 173.2002 C 50.8999 173.3999 L 51.2998 173.8999 50.6001 175.1001 51 175.8999 C 52.6001 175.8999 52.6001 173.7002 53.7998 172.6001 C 53.7998 171.7002 53.8999 170.1001 55 169.2998 C 54.6001 169 55 168.7002 55.1001 168.3999 C 55.3999 168.2998 55.2998 167.3999 55.7998 167.2998 C 55.8999 166.8999 56 166.1001 56.8999 166.1001 C 57.1001 166.2998 57.7002 166.2998 57.5 166.7998 C 57.6001 166.7998 57.7002 166.7002 Y 58.1001 167 57.7998 167.2998 57.6001 167.5 C 57.7002 167.5 L 57.6001 167.8999 L 57.7002 167.8999 57.7998 167.7998 Y 57.7998 168.5 L 57.5 168.5 L 57.6001 168.1001 57.8999 169.2002 57.5 169.2998 C 57.5 169.7002 57.3999 170 57.2002 170.2998 C 57.3999 170.2002 L 57.1001 170.7002 57.5 171.1001 56.8999 171.6001 C 57 171.6001 L 57.5 173.3999 55.6001 175.2002 56.6001 177.1001 C 56.6001 177.8999 56.2002 178 56.5 178.7998 C 58.2002 179.5 57.7002 177.1001 58.2998 176.2998 C 58.3999 176.3999 L 58.7002 175.8999 58.7998 175 59.2002 174.7998 C 59.6001 174.2002 58.2002 173.5 59.3999 173 C 59.5 173.2002 L 59.5 172.6001 60.7002 171.7998 60.5 171 C 60.8999 170.8999 60.7002 170.2002 61 169.8999 C 61.7998 169.1001 L 62.2998 169.2002 62.2002 169.7002 62.2998 170 C 61.8999 170.5 62.3999 170.8999 62.2002 171.5 C 62.2998 171.5 L 62.3999 172.1001 62.1001 173.1001 62.3999 173.8999 C 62 174.2002 L 62.8999 176.2002 61.7998 178.3999 62.2998 180.6001 C 62.7998 180.1001 62.8999 181.1001 63.3999 181 C 63.7002 179.3999 64.2002 178.2998 64.2998 176.6001 C 64.3999 176.7998 L 64.2002 175.6001 65.2002 174.2998 65.2998 172.8999 C 65.6001 172.8999 L 65.5 172.2998 65.7002 171.8999 65.8999 171.3999 C 66.2998 171.1001 67 171.6001 66.7002 172.1001 C 67 171.7998 L 67.2998 172.8999 67.2998 175.1001 67 176.2998 C 67.3999 177.3999 67.2002 178.7998 67.1001 180.1001 C 67.2002 180.1001 67.3999 180.1001 67.3999 180.2002 C 67.1001 180.5 67.8999 180.2998 67.7002 180.7998 C 67.7002 181.3999 L 67.8999 181.3999 68 181.7002 68.2002 181.7998 C 68.2002 182 67.6001 182.3999 68.2002 182.3999 C 69.1001 182 68.7002 180.5 69.5 179.5 C 69.3999 177 70.1001 175.6001 70.2002 173.2002 C 70.2998 173.1001 70.3999 173.2002 70.3999 173.2998 C 70.2998 173.2998 70.6001 172.7998 70.8999 172.6001 C 71.7002 172.6001 71.1001 172.6001 71.6001 172.3999 C 72.1001 173 72.1001 173.5 72.1001 174.2002 C 72.3999 174 L 72.6001 174.2002 L 72.2002 175 72.7998 176.3999 72.6001 177 C 73.1001 178.2998 72.7998 179.1001 73.6001 180.2002 C 73.2002 180.2002 L 73.6001 181 73.2002 182.5 74.2002 183 C 74.2002 183.7998 L 74.5 184.2002 74.8999 183.6001 75.2002 184 C 75.1001 182.2002 75.8999 180.2998 75.7002 178.3999 C 75.7002 178.6001 75.7998 178.7998 75.6001 178.8999 C 75 177.2002 76.1001 175.7002 76.1001 174 C 76.3999 173.7998 76.7002 173.6001 76.7998 173.2002 C 77.5 173.3999 77.2998 173.8999 77.5 174.6001 C 77.7002 174.6001 77.8999 174.5 78 174.7002 C 77.5 174.7998 77.8999 175.6001 78.1001 175.8999 C 77.8999 176 77.8999 176.2998 78.1001 176.3999 C 78.3999 177.3999 78.6001 178.2998 78.5 179.3999 C 78.6001 179.2998 L 79.2998 180.7002 79 181.7002 79.7998 182.7998 C 80 183.6001 80.7002 184.2998 80.7998 184.8999 C 81.1001 181 80.6001 176.7002 81 172.8999 C 81.1001 173 81.1001 173.1001 81.2002 173 C 81.1001 172.6001 81.2002 172.5 81.2002 172 C 81.1001 172.1001 81 172.1001 V 80.5 171.7002 81.3999 171.7002 81.2002 171.3999 C 81.1001 170.8999 81.3999 170.3999 81.5 169.8999 C 81.7998 169.7998 L 81.3999 169.6001 L 82.2002 168.7002 L 82 168.5 L 82.1001 168.3999 82.1001 168.2002 82.2998 168.2002 C 83.1001 168.6001 82.2998 169 82.8999 169.2998 C 83.2002 170.7998 83.3999 171.3999 83.5 172.6001 C 83.7998 173.6001 84.1001 174.3999 84.1001 175.3999 C 83.7002 176.1001 84.8999 176.5 84.5 177.3999 C 84.7998 178.7998 85.7998 180 85.7002 181.3999 C 85.7998 181.2998 L 86.1001 181.7002 86.2002 182.3999 86.2998 182.7998 C 86.5 183.3999 87.2998 184.1001 87.1001 185.2998 C 87.3999 184.8999 L 87.7002 185.2998 L f 106.2002 162.7002 m 106.2998 159.5 105.3999 156.8999 106.7998 154.2998 C 108.5 153.1001 107.7002 155.6001 108.3999 156 C 108 156 L 108.3999 156.5 L 108.7002 157.2002 107.5 158.2002 108.2002 159 C 107.8999 160.7998 108.1001 161.7998 109.6001 162.7998 C 109.8999 159.7002 110.3999 158 110.5 154.7002 C 110.7998 154.7002 L 110.7002 154.1001 110.7002 153.2002 111.2002 152.8999 C 111.7998 152.7002 111.1001 151.8999 111.7998 151.8999 C 112.2002 152.2998 L 112 152.2998 112.1001 152.5 112.1001 152.6001 C 112.2002 152.5 L 112.2998 152.7998 113.1001 153.1001 112.3999 153.5 C 112.7998 153.5 L 112.7002 155.2002 113.5 157 113.2998 158.7998 C 113.7998 160.6001 L 113.3999 160.6001 L 114 161.2002 L 114.3999 160.3999 115.2998 160.7002 115.3999 160 C 115.7998 159.5 116.2998 158.7002 116.2998 158 C 116 156.7002 117 155.2002 116.2002 154 C 115.8999 150.7002 116.7998 148.8999 116 146 C 111.1001 148.7998 106 147.3999 101.2998 145.1001 C 96.2002 143.1001 92.1001 139.5 86.8999 140.3999 C 84.3999 140.2002 82.6001 141.8999 80.6001 143.2002 C 79.6001 144.3999 78.2998 146.7002 76.2002 146 C 72.1001 145.3999 70.6001 141.3999 67.6001 139.3999 C 67.3999 139 L 65.7998 136.8999 62.7998 135.2998 60.7002 134.2002 C 60.6001 134.2998 L 58.7002 133.2002 55.6001 132.1001 53.2998 131 C 52.6001 130.2998 50.2998 129.6001 49.6001 128.2998 C 47.8999 126.7002 46.7002 123.7998 47.3999 121.6001 C 46.5 119.6001 48.7002 118.8999 47.2998 117.2002 C 45.7002 113.7002 40.8999 112 38.2998 109.7002 C 36.1001 108.7998 34.7998 107.2998 33.7002 105.7002 C 33.8999 106.7002 32.7998 107.7002 33.7002 108.3999 C 33.7002 109 L 33.7998 109 34 109 34.1001 108.7998 C 33.7998 110.7998 36.3999 109.3999 35.7998 111.5 C 35.8999 111.5 L 35.8999 112.8999 L 36.8999 113.2002 38 113.1001 37.6001 114.3999 C 36.7002 114.6001 37.2998 115.8999 36.3999 116 C 36.2002 116.5 36.7002 116.6001 36.7998 116.8999 C 37.6001 117.2998 39.1001 115.7002 39.1001 117.2002 C 40 117.5 38.8999 118 39.1001 118.8999 C 38.7998 120.1001 L 39 119.8999 L 39.1001 120.5 L 40.1001 120.2998 40.7002 118.2998 41.6001 119.3999 C 41.3999 120 L 41.8999 120.1001 41.5 120.3999 41.7998 120.6001 C 40.8999 121 41.5 123.2998 40.8999 124.1001 C 40.7002 124.1001 L 40.7002 123.8999 41.3999 124.2998 41.2002 124.7002 C 41.8999 124.6001 42.6001 122.6001 43.6001 122.7998 C 42.7998 122.7998 44 124.3999 43.1001 124.7998 C 43 125 43.2002 125 43.2998 125.2002 C 43.2002 125.3999 43 125.2002 42.7998 125.2998 C 43.2002 126.7002 42.1001 127.2998 42.7998 128.6001 C 43.1001 128.6001 43.2998 128.7002 43.3999 128.8999 C 43.7002 128.6001 L 43.8999 129.1001 43.8999 128.7002 44.2998 128.6001 C 44.6001 128 44.2998 127.1001 45.2002 126.7998 C 45.1001 126.2998 45.7002 126.2002 46 126.1001 C 46.6001 126.1001 46.2998 126.7998 46.7002 127.1001 C 46.6001 127.5 45.7998 127.7002 46.3999 128 C 46.1001 129 46 130.6001 45.6001 131.3999 C 46.1001 131.6001 L 45.7002 131.8999 45.7002 132.7002 46.1001 133 C 46.7998 133.2998 47.6001 132.1001 48.2002 133.1001 C 48.1001 133.7002 48.3999 134.3999 48.5 134.8999 C 48.5 135.1001 48.3999 134.6001 48.6001 134.6001 C 48.6001 135.2002 49 136 48.3999 136.2998 C 48.5 136.2002 48.6001 136.2002 V 48.7002 136.2998 48.7002 136.3999 48.7002 136.6001 C 49.7002 136.2002 50.2002 135.1001 50.7998 134 C 51.2002 134.2002 L 51.2002 134 51.2998 134 51.3999 133.8999 C 51.8999 134.2002 51.7998 135.1001 52.1001 135.6001 C 51.6001 136.5 52.3999 136.8999 51.5 137.3999 C 52 138.7002 51.5 139.3999 51.5 140.6001 C 52.2002 140.7002 52.7998 140 52.7998 139.2998 C 53.2002 139.3999 L 53.1001 139.1001 53.3999 138.8999 53.2998 138.6001 C 53.6001 138 54.1001 138.7998 54.5 138.3999 C 55.2998 140.2998 54.5 140.7002 54.1001 142.3999 C 54.6001 142.5 54.1001 143.3999 54.7998 143.2998 C 54.7002 143.2002 L 55.5 142.2002 56.2998 141 56.7998 140 C 57.1001 140.2998 57.6001 139.2998 58 140 C 58 141.7002 57.8999 141.2998 58.1001 142.7002 C 58.2002 142.7002 L 57.7998 143.1001 58.5 143.8999 57.7998 144.3999 C 57.8999 144 58.7002 145.3999 58.1001 145.6001 C 58.1001 146 58.7998 145.7998 59 145.7002 C 59.1001 144.7002 60.1001 144.5 60 143.5 C 60.6001 143.2998 60.1001 141.2002 61.3999 142.2998 C 61.8999 143.6001 61.2998 144.7998 61.7002 146.3999 C 61.6001 146.3999 L 61.8999 147.3999 61.7002 148.2998 61.7998 149.7998 C 63.5 148.6001 63.2002 147.2998 64.3999 145.7998 C 65.2002 145.8999 64.8999 146.7002 65.2998 147.1001 C 65.2998 147.5 64.6001 148.2998 65 148.7002 C 64.6001 149 65 149.2998 65.2002 149.6001 C 65.2002 151.2998 L 65.2998 151.2998 65.3999 151.5 65.5 151.6001 C 65.6001 151.7002 65.3999 151.7998 65.2998 151.8999 C 65.5 152.2002 L 65.8999 151.3999 67.2998 150.7998 67 149.6001 C 67.6001 148.8999 67.7002 147.5 68.5 146.6001 C 68.7002 146.6001 68.8999 146.2002 69.1001 146.5 C 69.1001 146.7998 L 69.5 146.5 68.8999 145.8999 69.6001 146.2002 C 69.7002 146.6001 L 69.7998 146.5 L 69.7002 147.5 70.8999 147.8999 70.3999 148.8999 C 70 149.6001 L 70.1001 149.7998 70.6001 149.7002 70.3999 150.1001 C 70 149.6001 70.2998 150.6001 70.1001 150.7002 C 70.2002 150.6001 L 70.2998 150.7002 70.2998 150.7002 70.2998 150.7998 C 69.3999 151.2002 69.8999 152.8999 70.1001 153.7998 C 70.2002 154.1001 70.3999 154.2998 70.2998 154.7002 C 71.3999 154.7002 70.7998 153 71.7998 153 C 72.1001 152 72 150 73.2998 149.5 C 74.1001 150.1001 73.2998 151.2998 74 151.8999 C 73.7002 151.8999 L 74.5 152.5 74 153.7002 74.2002 154.7002 C 74.2998 154.6001 74.3999 154.7998 74.5 154.8999 C 74.5 155.2002 74.2002 155.1001 74.2002 155.3999 C 74.2002 155.7998 74.5 156 74.7998 156.3999 C 76 154.3999 75.2002 152.8999 76.7998 151.2002 C 77.7002 151.6001 77.5 151.8999 78 152.5 C 77.7998 154 77.6001 155.2998 78.2002 157 C 78.3999 156.7998 L 78.6001 157.2002 78.2998 157.6001 78.5 158 C 78.6001 157.2998 79.1001 157.1001 79.2002 156.5 C 79.6001 154.7998 79.6001 152.5 79.8999 150.7002 C 80 150.7998 L 80.7002 150.3999 79.7002 149.3999 80.8999 149.2998 C 81.3999 149.7002 81.2998 150.8999 81.2002 151.2002 C 81.3999 151.2002 81.6001 151.1001 81.7002 151.2998 C 81.3999 151.8999 L 82.2002 151.7002 81.7002 152.7002 81.7998 153.1001 C 82 153.1001 L 81.5 154.2998 82.5 154.8999 82.3999 156.2002 C 82.7002 155.7002 83.8999 154.8999 83.6001 153.6001 C 84.1001 153.1001 L 84.1001 149.5 L 84.5 149.5 L 84.7002 148.7002 84.2002 147.8999 85.1001 147.6001 C 85.2002 147.8999 85.7998 147.8999 85.6001 148.3999 C 85.8999 148.3999 L 86.2998 150.7998 85.6001 153.1001 86.5 155.2998 C 86.3999 155.3999 L 86.6001 155.6001 L 87.2998 154.7002 87.1001 153.7002 87.7998 153.1001 C 87.7998 151.2002 88.5 151.1001 88.3999 149.2998 C 89.2002 149.2998 88.8999 146.6001 90.1001 148.2998 C 90.1001 148.7002 L 90.3999 148.7002 L 90.7998 149.5 90 150.8999 90.7002 151.6001 C 90.5 151.7998 L 90.2998 151.7002 90.3999 151.6001 90.3999 151.3999 C 90 151.8999 90.7002 152.2002 90.7998 152.6001 C 90.5 153.8999 91.2998 155 91.6001 155.8999 C 92.2002 154.6001 92.2998 153.3999 92.3999 152 C 92.5 150.6001 93.1001 149.7002 93.5 148.2998 C 93.6001 148.3999 L 94.1001 147.6001 L 95.1001 148.2002 94.5 148.7002 94.7998 149.5 C 94.6001 150.2998 94.8999 151 94.7002 151.7998 C 94.7998 152.3999 95.3999 151.5 95.2998 152.2998 C 94.7002 152.5 95.3999 152.7998 95.2998 153.1001 C 95.6001 154.3999 96 155.7998 96.3999 157.2002 C 97 155.2002 97.3999 153.2002 97.8999 151.3999 C 98.1001 151.2002 98.5 151.2998 98.7998 151.2998 C 98.7998 152.2002 100.1001 153 99.5 154 C 99.5 155 L 99.6001 154.8999 L 99.6001 156 100.2998 157.2998 100.1001 158.6001 C 100.8999 159.1001 100.2998 159.7002 101 160.2998 C 101 160.3999 101.1001 160.5 101.2002 160.6001 C 102 159.7002 101.3999 158.2998 102.1001 157.3999 C 101.6001 157.1001 101.7998 156.3999 101.7998 155.7998 C 101.7998 155.6001 102 155.6001 102.1001 155.6001 C 102.1001 155.2002 102.2002 154.7998 102.5 154.3999 C 103 154.7998 103.3999 154.6001 103.7002 155.2998 C 103.3999 155.5 L 103.7002 155.5 L 103.7002 157.6001 L 103.7002 157.3999 103.8999 157.3999 104 157.3999 C 103.5 159 104.3999 160.1001 104.5 161.7998 C 104.7002 161.7002 104.8999 161.7998 104.8999 162 C 104.8999 162.3999 L 104.8999 162.2998 105 162.2002 105.1001 162.2002 C 104.6001 163 105.8999 162.7998 106.2002 162.7002 C f 172 159.6001 m 172.2998 159.7998 L 172.2998 159.7002 L 172.7998 159.7002 173.3999 159.7998 173.7998 159.3999 C 174.1001 159.3999 175.1001 159.7002 175.7002 159.6001 C 176.2998 159.7998 178.2998 160.2998 178 159 C 178.3999 158.7002 178.5 158.2998 178.3999 157.7998 C 178.7998 157.7998 L 179.5 154 179.5 150.3999 179.2998 146.2998 C 178.7998 145.2998 178.7002 143.5 179.2998 142.7002 C 179.5 142.7002 179 142.6001 178.8999 142.3999 C 178.8999 142.1001 179.5 141.6001 178.8999 141.5 C 179.5 140.2002 179.7002 138.6001 178.7998 137.3999 C 177.7002 136.2998 L 173.2002 136.8999 169.6001 135.7998 165.2002 136.2998 C 164.6001 136.6001 163.7998 138.6001 163.7002 139.7002 C 164.8999 141.2998 167.5 141.2998 170.2002 141.2002 C 171.3999 141 172.2998 141.1001 173.5 141.6001 C 173.8999 141.2998 174.2998 141.7998 174.6001 142.1001 C 174.6001 142.2002 L 174.7998 142.2002 L 174.7002 143.2998 175.7002 144.7998 174.1001 145.3999 C 171 146.2002 167.3999 144.7998 164.3999 146.3999 C 164.6001 146.5 164.5 146.7002 164.5 146.8999 C 163.7998 147.2002 164.3999 148.7002 164.2998 149.3999 C 164.7998 149.1001 164.7998 150 165.3999 149.8999 C 165.2002 150 L 167.8999 151.7998 171.2998 149.6001 174.3999 150.5 C 175.5 151 174.5 151.8999 175.6001 152.3999 C 175.2002 152.3999 L 175.5 152.7002 175.5 153.5 175 153.7002 C 172.3999 155.7998 167.7002 153.7002 165.2002 155.5 C 164.7002 156.2998 164.2998 157.3999 164.2002 158.5 C 164.5 158.2998 164.7002 159.2002 165 158.7998 C 166.3999 160.2998 169.2998 159.7002 171.1001 160 C 172 159.6001 L f 135.7002 157.1001 m 135.1001 153.6001 129.7998 154.8999 127.1001 154 C 126.2998 153.7998 124.2998 154 124.7002 152.5 C 123.8999 151.7002 125.1001 151.2998 125 150.3999 C 128.1001 149.2002 131.5 151.2002 133.8999 149.5 C 134.1001 149.2002 136.1001 148.2998 135.2002 147.1001 C 134.6001 147 134.6001 145.8999 133.6001 145.6001 C 130.7002 144.3999 127 146.6001 124.7998 143.5 C 124.2002 142.5 125.3999 141.7002 126 141.3999 C 127 141.2002 127.8999 140.6001 129 141 C 129 140.8999 L 130.6001 140.6001 133.2998 141 134.7998 140 C 134.5 139.3999 135.2998 139.7002 135.3999 139.2998 C 137 137 133.6001 136.7998 132.3999 136 C 129.6001 135.3999 126.2002 135.8999 123 136.1001 C 121.7998 135.8999 120.8999 137.1001 120.6001 138.2002 C 120.6001 139.3999 120.7002 140.5 120.1001 141.7002 C 120 141.6001 L 120.1001 143.7998 119.7998 144.8999 119.7998 147.6001 C 120.2002 147.5 L 120.2002 149.5 L 119.8999 148.8999 L 119.8999 150.3999 120.1001 152.2998 119.8999 153.7998 C 120.5 154.1001 120 154.8999 119.8999 155.3999 C 120.7002 155.2002 119.6001 156.1001 120.5 155.7998 C 119.8999 156.3999 120.7998 157.2998 121.1001 158.3999 C 121.2998 158.2002 L 121.3999 158.5 121.6001 158.7002 121.6001 159.1001 C 121.7002 159 L 122 159.6001 L 126.6001 157.5 132.1001 161 135.7002 157.1001 C f 49.8999 150.5 m 49.7998 150.6001 L 49.6001 148.6001 46.7998 147.1001 45.6001 145.6001 C 44 146.1001 41.7998 146.1001 40.2998 145.1001 C 40 144.1001 41.6001 144.7002 41.8999 144.2002 C 42.7998 143.8999 43.6001 143.5 44 142.7002 C 43.3999 142.2998 42.2002 142.2998 41.8999 141.7002 C 41.6001 142 L 39 140.8999 L 39.5 139.6001 42 140 41.3999 138.7002 C 40.2998 137.7998 38.8999 137.2998 38 136.2002 C 38.7002 135.7002 39.5 134.8999 39.3999 133.8999 C 39.3999 134 L 38.1001 133.2002 36.7002 132.7998 35.2002 131.7998 C 35.2998 130.8999 36.3999 131 36.6001 130.2002 C 36.2998 128.6001 32.5 128.1001 34.7998 126 C 34.2002 125.7998 34.6001 124.8999 33.7998 124.8999 C 34 124.7998 L 33.2002 123.7998 31.6001 123.6001 32.3999 121.7002 C 32.8999 121.3999 L 32.6001 121.1001 32.5 121.6001 32.2998 121.2002 C 30.6001 120.3999 30.6001 117.7002 30.5 115.8999 C 30 115.2998 30 114.6001 29.5 114 C 29.7998 112.5 28.3999 111.3999 28.8999 110.2002 C 27.8999 111.2998 28.3999 113.5 28.2002 115.3999 C 28 115.3999 28 115.6001 27.7998 115.7002 C 28.2002 115.7002 L 27.8999 116.3999 28 116.5 27.7998 117.2002 C 28 117.1001 L 28.2002 117.6001 28.3999 119.2002 28.2998 120.6001 C 28.6001 120.6001 L 28.6001 121.1001 L 28.2998 121.1001 L 28.6001 121.8999 L 28.7002 121.7998 L 28.8999 123.1001 28.7998 124.1001 28.7998 124.8999 C 29 124.8999 L 29.3999 125.2998 28.6001 125.5 29.2998 125.6001 C 29.7002 126.5 28.7998 127.7002 29.8999 128.2002 C 29.5 128.5 L 29.6001 128.3999 L 30.2002 129.1001 29.7998 130 30.5 130.7002 C 30.1001 131.2002 L 30.6001 131.2002 30.2998 131.8999 30.3999 132.2002 C 30.6001 132.2002 30.7002 132.3999 31 132.6001 C 30.6001 133.5 31.5 134.5 31.6001 135.5 C 31.8999 136.5 31.8999 136.3999 32 137.6001 C 33 137.3999 32.2002 138.7998 32.6001 139.1001 C 31.7998 140 33.7998 140.1001 33.1001 141 C 33.3999 141.2002 33.2998 142.3999 34.2002 142.6001 C 34.2002 143.2998 L 34.2998 143.2002 L 34.7998 143.5 34.3999 144.7998 35.3999 145.1001 C 34.8999 145.3999 35.3999 145.7998 35.3999 146.2002 C 35.5 146.1001 35.5 146 35.6001 146 C 35.5 147.3999 36.7998 148.5 38 149.5 C 38.7002 148.8999 39 150.1001 39.6001 149.3999 C 39.8999 149.5 40.8999 149.1001 41.3999 149.2998 C 44.2998 149.5 47.6001 150.1001 50 151.3999 C 50 151.1001 49.6001 150.7998 49.8999 150.5 C f *u 159.5 158.2998 m 159.8999 155.5 151.6001 151.8999 158.2002 150.6001 C 158.7998 150.5 158.8999 149.7998 159.3999 149.5 C 160.1001 149.2002 159.8999 147.3999 159.7998 146.6001 C 159.1001 145.2002 155.6001 144.7998 156.1001 142.2998 C 157 141.7002 158.6001 141.1001 159 139.7002 C 159.6001 139.6001 L 159.6001 138.2002 159.2998 137.2002 158 136.2998 C 155.5 137.1001 152.8999 138.3999 150.6001 139.7998 C 146.2998 140.7998 145.1001 134.8999 140.8999 136.7002 C 140.6001 137.2002 140.3999 137.7002 139.8999 137.8999 C 139.5 140 142.2998 141.2002 143.7998 142.3999 C 143.6001 144 141.7002 144.7002 140.7998 145.8999 C 140.2998 146.5 140 147.6001 140.2002 148.3999 C 140.2998 148.2998 L 140.5 148.3999 140.6001 148.7998 140.3999 148.8999 C 139.8999 149 140.5 149.2998 140.5 149.5 C 140.7998 149.7002 141.1001 149.3999 141 150 C 141.7998 149.7002 141.7998 150.8999 142.2998 151 C 142.6001 151.5 144 152.2998 143.7998 153 C 142.2002 154.6001 139.5 155.5 140.2002 158 C 143 159.7998 145.6001 157 147.7002 156.2002 C 148.1001 155.8999 148.8999 155.5 149.7998 155.5 C 151 156.1001 152.2998 156.3999 153.5 157.3999 C 153.3999 157.6001 L 154.3999 157.6001 154.7998 158.8999 156.3999 158.8999 C 156.8999 159.2998 157.7998 159.1001 158.3999 158.8999 C 158.7998 158.2998 158.7998 158.5 159.5 158.2998 C f 1 D 149 149.3999 m 147.6001 149.2002 147.7002 148.7002 146.7998 148 C 146.8999 147.1001 147.8999 146.7002 148.6001 146.5 C 149.8999 145.7002 151.2998 146.6001 152.7998 146.6001 C 152.6001 147 153 147.7002 152.8999 147.6001 C 152.7998 148.1001 152.7002 148.7002 152.2002 148.7998 C 151.2998 148.8999 150 149.7002 149 149.3999 C f *U 0 D 184.3999 145 m 184.8999 144.6001 185.2002 143.6001 185.7998 142.8999 C 186.7998 139.8999 189.1001 137.3999 189.2002 134.5 C 189.7002 133.7998 190.2998 132.6001 190.3999 131.5 C 190.7002 131.5 L 190.6001 129.8999 191.5 129.1001 191.5 127.2998 C 192.1001 125.7002 192.2998 123.2998 193 121.7998 C 193 119.5 194.1001 117.3999 193.7002 115.1001 C 194.2002 113.7998 194.1001 112.7998 194.2998 111.5 C 194.5 111.5 L 194.2002 105.2002 195.3999 100.2002 194.2002 93.7998 C 193.8999 90.6001 193.7002 88 193.3999 85 C 192.6001 84 193.2002 82.7998 192.7002 81.7998 C 192.3999 78.3999 191 74.5 190.2002 71 C 189.6001 70.7002 189.7998 69.7998 189.6001 69.5 C 188.8999 67.1001 187.6001 64.8999 187 62.2998 C 186 62.2002 186.7998 60.8999 186 60.7998 C 186.1001 60.5 185.8999 60.1001 185.6001 60.1001 C 184.2998 56.3999 182.2998 53.5 180.1001 50.2998 C 180.2002 49.7998 L 179.7002 49.7998 179.6001 49.2002 179.5 48.7998 C 178.1001 46.8999 176.5 44.8999 175.2002 43 C 175.2998 42.7998 L 173.2002 40.5 171.6001 38.5 169.3999 36 C 162.1001 28.2002 154.2998 21.5 144.6001 16.1001 C 129.8999 8.2998 113.3999 3.8999 97.1001 4.3999 C 96.7998 3.7998 96.5 4.7998 96.2002 4.3999 C 87.8999 3.7002 79.8999 6.7998 71.6001 8.7998 C 71.3999 8.5 L 69.6001 9.6001 67.2998 10 65.5 10.3999 C 55.7002 13.7002 45.5 19.1001 37.2998 26 C 37.2998 26.6001 36.3999 26.6001 36.3999 27.1001 C 33 29 31.2998 32.2998 28.7002 34.7998 C 28.8999 35.7002 28 34.8999 28.2998 35.6001 C 32.7998 32.2002 38.5 27.3999 43.7002 24.7998 C 47.2002 22.7002 51.1001 21 54.5 18.5 C 56.5 17.5 58.3999 15.2998 60.3999 13.8999 C 60.7998 13.3999 61.7002 14.2002 61.2998 14.6001 C 62.7998 15.7002 63.5 14.7998 64.7002 14 C 65.3999 13.2998 66.3999 11.2998 67.7998 11.7998 C 68.3999 13.3999 L 71.5 13.8999 72.3999 10.6001 74.5 9.6001 C 75 10.3999 74.2998 11.5 74.8999 12.1001 C 76.7998 11.7002 77.6001 10.7998 78.6001 9.1001 C 79.2998 9.6001 79.8999 10.1001 79.7998 10.8999 C 81.1001 10.7002 83.2002 9.7998 84 8.8999 C 84.5 9.5 84.6001 10 84.7002 10.7998 C 86.7002 10.6001 88.1001 8.3999 89.6001 8.3999 C 90.1001 10.7998 L 90.5 10.5 91.6001 9.8999 92.2002 10 C 93.6001 8.7998 94 7.2002 96.2002 7 C 97 8.7998 94.2002 9.6001 96.1001 11.2002 C 97.5 10.6001 98.5 9.6001 99.6001 8.6001 C 100.5 8.7998 100.1001 9.8999 100.1001 10.2998 C 99.7998 10.6001 99.2998 10.8999 99.6001 11.3999 C 101.2002 12 102.7002 10.1001 104.2998 8.8999 C 104.8999 8.7002 105.7002 8.5 106 9.2002 C 106 10.6001 104.7002 10.3999 104.2002 10.8999 C 104.2002 12.2002 105.2998 11.7998 106.1001 12.2002 C 106.5 11.7998 107.2002 11.6001 107.6001 11.5 C 108.7002 10.6001 L 109 10.8999 109.2002 10.2002 109.6001 10.2002 C 110.1001 9.7002 111.7002 8.2002 113 8.7998 C 112.3999 10.2002 111.3999 10.7002 110.5 11.8999 C 110.6001 12 L 110.2002 12.6001 L 111.5 12.6001 112.3999 13 113.7998 12 C 114.6001 11.7998 115.7002 11.6001 116.7998 11 C 117.2002 11.7998 116.6001 12.3999 116.2998 13.1001 C 115.7998 13.1001 L 115.8999 13.3999 115.6001 13.8999 115.2002 14 C 116.2002 14.2998 117.6001 14.6001 118.2998 13.8999 C 119.7998 13.7998 119.6001 13.8999 120.6001 13.2002 C 121.1001 13.2002 122 12.7002 122.6001 13.2002 C 121.8999 13.8999 121 14.7998 121 15.3999 C 121.2998 16.6001 123.1001 15.6001 124 15.7002 C 125.6001 15.1001 126.8999 13.3999 128.3999 14 C 127.7998 15.5 126.6001 16.2998 125.5 17.2998 C 127.5 18.1001 129.6001 16.8999 131 16 C 132.6001 16.2002 L 132.7002 18.1001 127.8999 19.1001 130.8999 20.6001 C 131.5 20.1001 132.7002 20.2002 133.3999 19.2998 C 134.6001 18.7998 136.1001 18 137.5 17.2002 C 137.7002 17.3999 138.1001 17.2002 138.2002 17.5 C 137.7998 19.3999 135.8999 20.2002 134.5 21.2002 C 134.6001 21.3999 L 134.6001 21.8999 133.8999 21.5 134.2002 22.2002 C 134.2002 22.1001 L 137.2002 22.1001 139.6001 19.7998 142.8999 20 C 142.6001 20.3999 L 142.7002 20.3999 142.8999 20.3999 142.8999 20.5 C 141.7002 22 139.5 22.7998 138.3999 24.7998 C 139.7998 25 L 139.7998 25.2002 L 141.7002 24.7998 143.7998 23 145.7002 23 C 146.1001 24.6001 143.7002 25.2998 142.8999 26.2002 C 142.6001 26.5 142.2002 26.7002 142.6001 27.2002 C 143.2998 27.5 L 145 26.7998 147.7002 26.3999 149.2998 25.8999 C 149.5 25.8999 150.2002 26.2998 149.7998 26.6001 C 148.2002 27.7002 146.2002 28.2002 145.7998 30 C 147.8999 29.7002 150.6001 28.7002 152.6001 28.6001 C 152.7998 28.7002 L 151.7002 30.7002 149.2998 30.5 148 31.8999 C 148.7998 32.6001 148.8999 32.2998 150 32.8999 C 150.5 32.7002 151.3999 32.2002 152.2002 32 C 154 32.3999 156.2002 30.8999 158.2998 31.8999 C 158.2998 32.1001 158.1001 32.2002 158 32.2998 C 157.7002 32.2002 L 157.8999 32.3999 L 156.2998 34.2002 152.2998 34.2002 151.7002 36.1001 C 152.7998 36 154.7998 35.8999 156 35.7998 C 157.6001 35.6001 159.2998 35 161 35.6001 C 161.2998 36.2998 160.6001 36 160.2998 36.3999 C 160 36.3999 L 160 36.7002 L 158.2002 37.3999 156.5 38.3999 155.2002 39.3999 C 158.6001 39.1001 162.1001 38.7998 165 38.7998 C 165.2002 39.6001 164.1001 39.8999 163.3999 40.1001 C 161.7002 40.7998 159.7002 41.2002 158.2998 42.3999 C 159.1001 42.7002 161 42.1001 161.5 42.7998 C 162.2002 42.3999 162.8999 42.3999 163.6001 42.7998 C 165.3999 42.5 167.2998 42.7002 169.1001 42.5 C 169.2998 42.7002 169.2002 43 169.2002 43.2998 C 168.7002 43.5 167.7998 44.5 166.6001 44.5 C 165.2002 45.1001 163.3999 45.2002 162 46.1001 C 161.7002 46.6001 162.2998 46.7002 161.7998 47.2002 C 163.8999 48 166.1001 46.5 168.2002 47 C 168.8999 46.6001 169.6001 47 170.3999 47.3999 C 168.8999 49.2998 166.5 48.3999 164.7998 50.2002 C 165.8999 50.6001 168.1001 51.1001 169.8999 50.5 C 170.2002 50.7002 170.3999 50.7998 170.6001 50.5 C 172.2998 50.2002 174.2998 50.3999 175.7998 50.2998 C 176.3999 50.6001 L 175.8999 51.3999 174.7002 52.1001 173.8999 51.7998 C 171.8999 53.1001 170 53.1001 167.6001 53.8999 C 167.2002 54.3999 167.7998 54.7002 168.1001 55.1001 C 171 55.5 174.1001 55.3999 177.2002 55.3999 C 177.8999 55.8999 177 56.5 176.7998 56.6001 C 175.2998 57.3999 172 56.8999 171 58.3999 C 170.3999 58.2998 170.5 59 170 59.2002 C 172.2998 60.2998 175 59.2998 177.3999 60.1001 C 177.2002 60.2002 L 177.7998 60.2002 178.2002 60.7002 178.7002 61 C 177 62.8999 174 61.3999 172.2002 63.3999 C 172.3999 63.8999 173.7998 63.6001 174.3999 63.7998 C 176.6001 64.2998 179.2998 64.1001 181.6001 65.2002 C 181.6001 66.1001 180.2002 66.2002 179.6001 66.3999 C 177.8999 66.7002 175.2998 66.2002 173.8999 66.7002 C 173.8999 67.1001 L 175.2998 67.2998 176.7998 68 177.7998 68 C 178 68.3999 178.8999 68.2998 179.3999 68.7998 C 180.8999 69 182.7002 69.1001 184.2002 69.6001 C 184.3999 70 L 182.7002 70.7998 181.3999 70.7998 179.3999 71.2998 C 178.2998 71.7998 177 71.2002 175.8999 71.3999 C 176.7998 73.7998 179.5 72.8999 181.2998 73.7998 C 182.3999 73.7998 183.1001 74.1001 183.6001 75 C 181.7998 77.1001 178.8999 74.5 177.2002 75.7998 C 176.7998 78.3999 181 77.2002 181.7998 78.6001 C 183.5 78.7998 185.2998 79.2998 186.7002 79.7998 C 187 80.2998 L 184.7002 81.1001 181.2002 81 178.7002 81 C 178.6001 81.6001 179.1001 82.2998 179.6001 82.7002 C 180.2002 82.7002 180.3999 83.1001 180.7998 83.2998 C 182.6001 84.2002 183.2002 83.7998 184.8999 85.1001 C 183.5 87.2002 181.2998 85.5 179.3999 85.3999 C 179.1001 86.3999 179.5 87.3999 180 88.2002 C 180.7002 88.2002 180.7002 88.7002 181.1001 89 C 183.7002 90.5 185.7998 91 188.5 92.2002 C 188.8999 92.7998 L 185.8999 94.7998 183.3999 91.3999 179.8999 92.3999 C 180.6001 92.7998 179.7998 93.5 180.2002 94.2002 C 181.6001 94.7998 183.2002 95.2998 184.2002 96.2002 C 184.8999 96.2998 185.7998 97.2002 186.6001 97.2998 C 188 97.5 189 98.6001 190.2998 99.1001 C 187.2002 100.7002 184.2998 97.7002 181 98 C 180.2998 99.5 180.7002 100.3999 182.2002 101 C 183.7002 101.7998 185.2002 102.6001 186.5 103.7002 C 186.5 103.6001 L 186.8999 103.2998 186.8999 103.8999 187.2002 104 C 187.2002 103.8999 L 188.1001 104.1001 188.2002 105.2998 189.6001 105.3999 C 189.7002 106 L 188.8999 106.2002 L 186 105.3999 183.3999 104.2998 180.5 103.8999 C 180.7998 104.6001 181.3999 105.3999 181.7998 105.5 C 182.3999 106.3999 183.6001 107.3999 185 107.5 C 185 108.1001 186 107.8999 186.3999 108.7998 C 185.7998 109.5 184.3999 108.8999 183.7002 109.7998 C 183.5 110.2998 184.6001 110.3999 184.2002 111.2002 C 184.7998 111.3999 184.8999 112.5 185.6001 112.6001 C 185.2002 112.8999 187.2002 114 185.3999 114.1001 C 184.1001 113.5 L 183.7998 114.7998 183.6001 116.1001 184.2002 117.3999 C 184.2998 117.2002 L 184.7998 117.8999 185.7002 117.7998 186.3999 118.7998 C 185.7998 119.3999 L 185.2998 119.2998 184.6001 119.1001 184.1001 119.2002 C 184.2998 121.5 184 123.3999 184.2998 125.8999 C 184 126.6001 184.5 127.6001 183.7998 128.2002 C 184.6001 128.7002 183.7002 129.2002 183.7998 129.7998 C 183.7002 129.7002 L 183.7998 130.7002 183.6001 132.1001 183.5 133.2998 C 183.2002 133.2998 L 183.5 133.8999 183.2002 134.6001 183.5 135 C 183.1001 135.2998 183.5 135.3999 183.2002 135.7002 C 183.5 136 L 183 136 L 183.2998 136.8999 182.8999 139.2002 183.2002 140.5 C 183.5 140.7998 L 182.8999 141.6001 183.6001 142.2998 183.1001 143.3999 C 183.7002 143.3999 183.5 144.7002 183.7002 145.1001 C 183 145.3999 183.7998 146.2002 183.6001 146.8999 C 183.7002 145.8999 184.2998 145.8999 184.3999 145 C f 131.8999 132.7998 m 132.8999 132.5 134.2002 132.7002 135.3999 132.7998 C 135.3999 132.7002 L 138.8999 132.2002 141.7998 132.7002 145.1001 132.5 C 145.6001 132.6001 L 145.6001 132.5 L 146.2998 132.5 147.8999 132.7002 149 132.3999 C 150 133.2998 151 132 151.8999 132.6001 C 154.7002 132.7998 157 132.2002 160 132.6001 C 160 132.5 L 165.2998 132.2002 172.7002 132.5 178 132.2002 C 178.2998 131.6001 179.2002 131.2002 179.5 130.6001 C 179.2998 126 179.8999 120.5 179 116.2998 C 179.2002 115.2998 179.2998 114.2998 179.3999 113.5 C 178.7002 112 180.5 109.7998 177.7998 109.2002 C 176.7998 109 176 109.3999 175.2002 109.8999 C 175.1001 110.7998 174.8999 112.1001 175 113.2002 C 175 114 174.3999 116.6001 175.1001 118 C 175.3999 119.7998 174.2002 120.8999 175 122.6001 C 173.8999 122.7998 174.6001 124 174.6001 124.6001 C 174.6001 125.8999 173.7998 127.1001 173.2998 128.5 C 171.1001 129.3999 169.6001 128.2002 167.5 128.6001 C 165.2998 129 162.2998 129.1001 160 128.5 C 150.3999 128.3999 142.1001 127.7998 132.2002 128 C 132 127.7998 L 130.3999 127.8999 127.5 128.1001 126.2002 127.2002 C 125.8999 126.2002 125.7998 125.7002 125.5 124.8999 C 125.7002 123.8999 125.2998 122.7998 125.7998 121.8999 C 125.5 121.6001 L 126 121.3999 L 125.7002 120.2002 126.1001 118.6001 125.6001 117.5 C 126 116.7998 L 125.7998 116.7998 125.7998 116.6001 125.6001 116.5 C 125.7002 114.7002 125.5 113.1001 125.3999 111.3999 C 124.5 110.7002 125.7998 108.1001 123.7998 108.6001 C 122.6001 108.3999 121.2998 108.8999 120.6001 109.7998 C 120.7002 110.7002 120.3999 111.7998 120.6001 112.7998 C 119.8999 113.1001 121 113.2998 120.6001 113.7998 C 120.3999 115.5 120.5 117.6001 120.5 119.5 C 120.7002 119.5 L 120.2002 119.7998 120.7002 120.2998 121 120.7002 C 120.6001 120.7998 121 121.3999 120.7002 121.7002 C 120.2998 121.3999 121.5 122.1001 120.7002 122.2998 C 120.7998 122.2002 120.8999 122.2998 121 122.3999 C 120.7002 122.6001 L 120.8999 122.6001 121 122.7998 121.1001 122.8999 C 120.6001 122.7998 121 123.7998 120.7002 124.1001 C 120.7998 124.1001 L 121 125.5 120.7998 125.7998 120.7998 127.7002 C 120.6001 128.2998 120.7002 128.2998 120.7998 129.1001 C 121 129.1001 L 120.7002 130.2002 L 121 130.2002 L 120.1001 130.5 121.6001 131.2002 121.1001 131.6001 C 121.8999 132.1001 122.3999 132.1001 V 122.6001 131.8999 L 123.2002 132.3999 124 131.7998 124.2998 132.6001 C 130.2002 132.7998 L 130.2002 132.7002 L 131.8999 133 L 131.8999 132.7998 L f *u 135.3999 123 m 135.7002 122.7998 L 135.2002 122.3999 L 135.6001 121.8999 L 135.5 122 L 135.2998 121.8999 135.3999 121.7002 135.3999 121.6001 C 135.3999 121.3999 135.6001 121.3999 135.7002 121.3999 C 135 119.3999 135.5 117.6001 135.2002 115.2998 C 135.2002 114.3999 135.7998 114 136.1001 113.3999 C 136.2002 113.5 L 137.3999 111.7002 140.8999 112.8999 142.8999 112.7002 C 144 112.6001 144.7002 113.3999 145.8999 112.7998 C 146.5 113.3999 148.2002 113 147.5 114.2002 C 145.2998 117.2002 141.2002 113.2002 139.7998 117.2002 C 139.5 118.2002 139.3999 119.1001 139.3999 120.2002 C 139.3999 120.1001 L 139.7998 119.7998 139.6001 120.5 139.7998 120.6001 C 139.3999 120.6001 L 140.3999 120.8999 139.6001 121.8999 140.2002 122.5 C 140.1001 122.3999 140.2002 122.2998 140.2998 122.2998 C 140.3999 122.2998 L 139.8999 122.7998 140.8999 123.1001 140.3999 123.6001 C 140.8999 123.3999 L 140.7998 123.8999 141 124.7998 141.6001 124.8999 C 147.6001 124.8999 152.7998 124.5 158.8999 124.7002 C 159.6001 123.6001 160.3999 122.7002 160.1001 121.1001 C 160.2002 120.7998 160.3999 120.2998 160.3999 120.1001 C 160.3999 120.2002 L 159.7002 118.6001 160.7998 115.8999 157.7002 115.6001 C 155.8999 115.2002 154 115.5 152.8999 114.1001 C 152.8999 112.7998 154.5 113.3999 154.8999 112.6001 C 157.6001 112.3999 161 112.3999 164.2002 112.6001 C 165.2998 113.6001 164.5 115.2998 165.2002 116.2002 C 164.7998 116.7998 165.3999 117.1001 165 118.1001 C 164.7998 118 164.7998 118.2002 164.6001 118.2998 C 164.7002 119.2002 165 121.1001 165.2002 121.8999 C 164.8999 122.2998 L 165.8999 122.7002 164.2998 124 165.7998 124.2002 C 165.7002 124.7998 166.7002 125.5 167.2002 125.7998 C 167.6001 125.7998 L 167.7998 125.3999 168.3999 125.2998 168.7998 124.8999 C 169.7002 123.7998 L 169.8999 121.3999 169.6001 118.1001 169.8999 115.2998 C 169.7002 115.1001 L 169.7002 109.1001 L 164 107.7998 158.8999 108.6001 153.2002 107.8999 C 151.8999 106.2002 152.5 103.5 150.5 102.3999 C 149.3999 102.2998 148.2998 102.7998 147.6001 103.3999 C 146.8999 104.3999 148.1001 105.3999 146.8999 106.2002 C 147 106.7002 147.1001 107.1001 146.8999 107.6001 C 145.3999 108.3999 L 141 108.6001 136.3999 107.8999 131.5 108.3999 C 130.7998 110.1001 131 111.2002 130.3999 112.7998 C 129.8999 113.2002 131 113.8999 130.2002 114.2002 C 130.2998 116.3999 129.7998 119 130.7002 120.7998 C 129.6001 120.7002 131.3999 121.5 130.3999 121.8999 C 130.1001 122.3999 131 122.2002 130.6001 122.6001 C 130 124 130.8999 125 132.1001 125.7998 C 132.7002 125.7002 133.6001 126.2002 134 125.5 C 134.5 124.7998 135.3999 124.2998 135.3999 123 C f 1 D 148.6001 121.1001 m 147 120.8999 145.2998 122.2002 144.1001 120.2002 C 143.6001 119.5 144.5 119.7002 144.7002 119.2002 C 147.7998 118.3999 152.1001 119 155.2998 119.2002 C 155.5 119.7998 L 155.2998 119.7998 L 155.2002 120.5 154.3999 120.6001 154.1001 121 C 152.2002 121.2002 150.6001 121.6001 148.6001 121.1001 C f *U 0 D 162.6001 105.7998 m 162.7998 105.1001 164 105.3999 164.2998 105.1001 C 165.7998 104 168.1001 102.1001 169.2998 100.6001 C 169.3999 99.8999 169.7002 98.7998 169.1001 98.7998 C 165.7002 100.3999 162.5 102.3999 159.7002 105 C 159.7002 105.1001 158.7998 105.1001 159.1001 105.5 C 160 105.7002 160.7002 105.6001 161.7998 105.6001 C 161.8999 106 L 162.2002 105.7998 162.2002 105.5 162.6001 105.7998 C f 144.3999 104.5 m 144.5 102.7002 145.6001 100.2998 147.2002 99.3999 C 147.7002 99 148.2998 99.2002 148.6001 98.5 C 150.2998 99.5 151.8999 98.7998 153.1001 97.7998 C 153.7002 96.3999 156.1001 95.1001 157.2998 94.6001 C 157.5 94.2998 157.3999 94 157.3999 93.7002 C 157.6001 93.6001 158.5 92.7002 158.5 91.7998 C 158.8999 91.8999 159.2002 91.2998 159.2002 91 C 159.3999 91.1001 L 162.2002 87.6001 165.1001 84.7998 165.7998 80.2002 C 165.3999 79.7002 165.6001 78.7002 165.3999 77.8999 C 163.8999 78.2002 164 80 162.7998 80.8999 C 160.5 84 157.6001 87 154.3999 89.7998 C 153.6001 90.7998 152 92.2002 150.7998 93.1001 C 150.6001 92.7998 150.1001 92.5 150.5 92.2002 C 150.3999 92 150.6001 91.8999 150.7002 91.7998 C 151 92 L 151.5 90.7998 152.2998 89.6001 153.1001 88.6001 C 155.3999 85 L 155.5 85.1001 L 156.8999 83.6001 157.8999 81.1001 159 79.8999 C 159.1001 78.1001 161 77.8999 160.8999 76.1001 C 161.2002 76.1001 L 161.5 75.2002 161.6001 74.1001 162.2002 73.3999 C 162.2998 72.3999 163 72.1001 163 71 C 163 70 162.2998 69.7998 161.8999 69.1001 C 159.3999 72.6001 L 159.5 72.7002 L 154.2002 80.7002 148.7998 87.7002 141.5 94 C 141 94 L 140.8999 94.2998 140.2002 94.8999 139.7002 95.2002 C 139.2998 96 138.1001 95.5 138.1001 96.6001 C 137.8999 96.6001 L 137.7998 100.3999 L 138.3999 101 L 138 101.2998 L 138.3999 101.2998 L 138.3999 102.3999 138.2002 103.1001 139 103.8999 C 138.7002 104.7002 140.2998 104.7002 141.1001 105 C 144.3999 104.5 L f 158.2998 101.2998 m 158.5 100.1001 159.7002 100.2002 160.3999 99.2002 C 163.2998 96.5 165.5 94.1001 168.1001 90.3999 C 167.7002 89.5 169 88 167.5 87.2002 C 166.6001 88.3999 164.7998 89.5 164.2002 90.7002 C 163.2002 91 162.7002 92.3999 161.6001 93 C 160.6001 93.6001 159.7002 95.2002 158.7998 95.8999 C 157.3999 97.5 155.2002 98.7998 154.2998 100.7002 C 155.2002 101.7998 L 155.1001 102 155.7002 102.6001 155.6001 103.2002 C 156.2998 102.7002 157.5 101.7998 158.2998 101.2998 C f 136.7998 93.7002 m 136.8999 93.8999 137.5 93.2998 138 93.5 C 138.5 92.7998 139.6001 93.2002 140.2002 92.3999 C 142.1001 91.2998 142.6001 90 144.7002 88.3999 C 144.7998 88.6001 L 145.2998 87.7998 L 145.3999 88 L 145.8999 87.3999 146.7998 86.3999 147.2002 85.7002 C 148.1001 85.8999 147.3999 83.8999 148.7998 84 C 148.6001 83.6001 149.1001 83 149.2998 83.2998 C 150 81.5 151.2998 81 151.7998 79.1001 C 152 79.1001 L 151.6001 78.6001 152.3999 78.7998 152.2002 78.2002 C 152.6001 78.2998 152.5 77.6001 152.8999 77.2002 C 153 77.2998 L 153.2998 75.7998 154.7002 74.2002 154.8999 72.6001 C 155.2002 72.6001 L 155.5 70 157.2002 67.7002 157.3999 65.6001 C 157.8999 65.2998 158.2002 64.7002 158 64.1001 C 158.3999 64.2002 L 159.5 62.3999 157.8999 60.8999 157.2998 59.7998 C 157.2002 59.7998 157.1001 60.1001 157 60 C 156.7002 59.7998 L 156.3999 60.6001 156.1001 61.5 155.6001 62.2002 C 155.1001 63.5 154.8999 66.1001 153.5 67.1001 C 152.1001 69.7998 151 72.2002 149 74.5 C 149.2002 74.5 149.2002 74.6001 149.2998 74.6001 C 147.6001 76.7002 146.5 79 145 80.2998 C 144.3999 79.6001 L 145 77.7998 146.2002 76 147 74.2998 C 146.7998 73 147.8999 72.7002 148.2002 71.2002 C 148.5 70.8999 148.1001 69.7998 148.7002 70 C 149.2002 68.1001 150 65.8999 150.7002 63.6001 C 151 63.6001 L 150.7002 62.1001 151.8999 61.5 151.7998 60.1001 C 152.8999 57.7998 152.3999 57 153.7002 54.7002 C 153.5 54.7002 152.2998 53.2998 151.7998 52.7002 C 150.8999 52.8999 151.7002 54.1001 150.7998 54.2002 C 151 54.2002 L 151 54.3999 150.7002 54.7998 150.6001 55 C 150.3999 55.6001 150.1001 57.1001 149.3999 57.7002 C 149.5 57.7002 L 149.2002 58.6001 148.5 59.7998 148.1001 60.6001 C 148.2998 61 147.7002 61.5 147.7998 61.8999 C 147.5 61.8999 L 147.7998 63 147 63.2002 146.7998 64.2998 C 146.5 64.2998 L 146.2998 65.2002 146 65.5 145.7998 66.6001 C 145.6001 67.1001 L 145.3999 67 145.3999 66.7998 145.3999 66.7002 C 145.2002 68.2998 143.8999 68.6001 143.5 70.2002 C 143 70.2002 L 142.7998 69.6001 142.8999 68.8999 142.8999 68.2998 C 143.2998 68.3999 L 143.7998 66.7998 143.6001 65 144.5 64 C 144.5 62.7998 144.8999 62.2002 145.1001 61 C 145.5 60.7998 145.2998 59.2002 146 58.8999 C 145.7998 58.3999 146.5 58.1001 146 57.5 C 147 54.8999 147.3999 50.8999 148.3999 48.2002 C 146.5 46.2998 L 145.3999 48.7998 144.5 51.3999 143.7998 53.6001 C 143.3999 54.7998 142.6001 55.7998 142.2998 57.3999 C 142.1001 57.3999 L 142.2002 57.6001 142.2998 58.1001 142.2002 58.2998 C 140.8999 58.6001 142.2002 60 141.1001 60.2002 C 141.2002 60.8999 140.5 61.7998 140.2998 62 C 140.5 62.2998 L 139.7998 62.5 140.3999 62.7998 139.7998 63.2002 C 139.6001 63.7002 139.2998 64.2002 138.7998 64.6001 C 138.7002 64.3999 L 138.7002 64.2998 138.7998 64.8999 138.6001 65 C 137.2998 65 138.3999 64.2002 138.1001 63.5 C 138.3999 63.2002 L 138.5 63.2998 138.5 63.5 138.5 63.6001 C 138.2998 62.7998 138.7002 62.6001 138.6001 61.7998 C 139.2998 61.5 139.2002 60.6001 139.1001 59.8999 C 139.7998 59.8999 139.6001 58 140 57.6001 C 140.2998 56.3999 140 55.2998 140.7998 54.3999 C 140.7002 52.2998 141.3999 51.1001 141.2002 49.2002 C 141.8999 47.2002 141.7998 44.7002 142.2002 42.6001 C 142.2002 42.2998 142.2998 41.6001 141.7002 41.3999 C 141.1001 41.2998 L 141.2002 41.5 141 41.6001 140.8999 41.7998 C 141 41.7998 L 140.7002 43.5 140.2002 44.7002 139.3999 46.2998 C 139.1001 46.7998 139.7998 47.7002 138.7998 47.8999 C 139.3999 49.1001 138.1001 50 138.1001 51.2002 C 137.7998 52.6001 L 137.6001 52.3999 L 137 54.5 135.8999 57.3999 135 59.2002 C 135.3999 59.8999 134.2002 60.1001 134.2998 60.7998 C 134.2002 60.7002 L 133.8999 61.2002 134.2002 61.7002 133.3999 61.7998 C 132.5 60.2998 134.2002 58.6001 133.7998 56.7998 C 134.2002 55.2002 134.7998 52.6001 135.1001 50.7998 C 135.5 50.5 135.1001 49.2002 135.7002 48.7998 C 135.6001 48.7998 L 136.1001 48 135.6001 46.5 136.2998 46 C 136.2002 46 L 136.7002 44.2002 136.2002 42 136.7002 40.7002 C 136.8999 40.7002 L 136.6001 39.7998 136.6001 40.1001 136.3999 39 C 136.3999 38.1001 136.1001 37.2998 135.3999 36.7002 C 134.2998 37.2002 134.8999 39.7002 134.2998 39.7002 C 134.3999 39.7002 L 134.1001 41.2998 133.6001 42.2998 133.3999 44.2998 C 133.1001 44.5 L 133.5 44.8999 132.7998 45.8999 133 46.3999 C 132.5 46.8999 132.8999 47 132.5 47.2998 C 132.7002 47.5 L 131.5 49.6001 131.2002 52.7002 129.7002 54.7002 C 128.5 52.7002 130.2998 48.8999 130.2998 46.6001 C 130.5 42.2998 131.5 38.7998 131 34.6001 C 130.8999 34.3999 130.7002 34.2998 130.7002 34.1001 C 130.7998 34 L 129.5 32.8999 L 129 33.7002 129.1001 34.7998 128.7998 35.3999 C 129.2002 36.1001 127.8999 37.2998 128.5 37.8999 C 128 38.6001 128 40.7002 128 41.3999 C 127.6001 41.6001 L 128.2998 42.1001 127.2002 42.2002 127.6001 42.7002 C 127.6001 43.3999 127.6001 44.2002 127.1001 44.5 C 127 45.1001 127.2998 45.8999 126.7998 46.2998 C 127.3999 46.7998 126.2002 47.2002 126.5 47.8999 C 126.7002 49.3999 125.7002 50.1001 125.5 51.5 C 125.3999 51.3999 125.3999 51.2002 125.3999 51.1001 C 125 51.7002 L 124.2002 51.7002 124.7002 51.1001 124.6001 50.5 C 124.6001 50.3999 124.7998 50.3999 124.8999 50.3999 C 124.6001 45.3999 126 39.2998 125.5 34.7998 C 124.8999 33.8999 125.2998 32.6001 124.7002 31.7002 C 124.6001 30.7998 124.1001 30.3999 123.7998 29.6001 C 123 31.1001 123.5 32.5 123 33.7998 C 123.1001 33.7998 L 122.3999 35.2002 123.5 36.7002 122.2998 38.2998 C 123.1001 39.2002 121.7002 40.2998 122.2002 41.6001 C 121.7002 42.1001 L 121.7998 42.1001 L 121.7998 42.2998 121.8999 42.7998 121.3999 42.7998 C 121.7002 42.7998 L 121.8999 43.2002 121.7002 43.7002 121.2998 43.7998 C 121.6001 43.7998 L 121.6001 44.2998 L 121.1001 44.2998 L 121.5 45.7998 120.3999 46.7998 120.1001 48.2002 C 119.7998 48 L 119.7998 48.1001 119.7998 48.2998 119.6001 48.3999 C 118.2998 45.7002 119.3999 42.2998 119.2998 39.7998 C 119.3999 39.7998 119.3999 39.7998 Y 119.2002 39.6001 L 119.7998 39.3999 119.2998 38.2002 119.6001 37.8999 C 119.5 37.8999 L 118.7002 35.6001 119.2998 32.7998 118.7998 30.2002 C 119 30.2002 L 118.3999 29.5 118.5 27.5 117 27.5 C 116.7998 27.2002 L 117 28.6001 115.8999 29.7002 116.2998 31.7002 C 116 31.8999 L 116.2002 33 116.2002 33.8999 116 35 C 116.2998 35.2998 L 115.7998 35.6001 L 116.2002 35.7998 L 116.3999 36.6001 116.2998 38.2002 116.2002 39.3999 C 116.2998 39.2002 L 116.1001 41.5 115.7998 43.2998 115.1001 45.3999 C 115.2998 46.1001 115.2002 46.7002 115.1001 47.5 C 113.8999 47.8999 115.2998 49.2998 114.3999 49.8999 C 115.1001 50.2998 113.7998 50.7002 114.6001 51.1001 C 114.5 51.3999 114.2998 50.8999 114.3999 51.3999 C 114.5 51.5 L 114.1001 51.5 L 114.1001 52.6001 L 114.2002 52.6001 L 114.1001 53.1001 114 53.3999 114.6001 53.8999 C 114.2002 54.1001 L 115.1001 54.6001 113.8999 54.8999 114.5 55.3999 C 115.1001 55.8999 115.6001 57 116.2998 57.5 C 116.3999 57.7002 117.1001 58.6001 117.3999 58 C 117.6001 58.2998 117.6001 58.3999 117.2002 58.7002 C 118.6001 60.2998 119.7998 61.2002 120.7002 62.8999 C 120.7998 62.7998 L 121.1001 63.1001 122.2998 64.3999 122.3999 65.2002 C 122.5 65 L 122.3999 65.8999 123.7002 65.7002 123.2002 66.6001 C 124 66.7002 124.2002 67.8999 124.3999 68.7998 C 125.7002 68.7998 124.8999 70 126 70.2998 C 125.5 71.3999 127.1001 71.2002 126.5 72.1001 C 126.7002 72.5 128 72.7002 127.7002 73.7998 C 128.7998 74 128 75.2002 128.7998 75.6001 C 129 76 129.3999 76.2998 129.2002 76.8999 C 129.3999 76.8999 129.3999 76.8999 129.5 76.7998 C 129.8999 76.8999 129.1001 77.3999 129.7002 77.2998 C 130.2002 77.7002 129.2998 78.2002 130.1001 78.5 C 130.1001 78.3999 130 78.2002 130.2002 78.1001 C 130.3999 78.3999 130.2998 78.8999 130.2998 79.2998 C 130.6001 79.1001 L 131 80.3999 L 131.2998 80.2002 L 131.6001 80.6001 131.2002 81.7002 131.6001 81.7002 C 131.8999 81.5 L 132 82.6001 L 132.2002 82.6001 132.2002 82.2998 132.3999 82.6001 C 132.6001 83.6001 L 132.7002 83.6001 132.7002 83.5 132.7998 83.5 C 132.7998 84.1001 L 133 84.1001 L 133.1001 85.1001 L 133.6001 85.1001 L 132.8999 86.2998 134.7998 86.2998 134.2002 87.6001 C 134.7002 88 135 88.7002 135.1001 89.2002 C 135.2002 90 L 136 90.5 135.7998 90.7998 136.1001 91.6001 C 136.6001 92 136.7002 93 136.7998 93.7998 C 136.7998 93.7002 L f 0 J 0 w 4 M 177 105 m 173 105 L 172.5 55 135.373 20.021 91.479 20.021 c 47.5845 20.021 7.5 55.5 12 114.5 C 1.626 108.4907 L 1.4585 106.2656 1.3735 104.0176 1.3735 101.75 c 1.3735 52.8184 41.0415 13.1499 89.9731 13.1499 c 138.9048 13.1499 178 52 177 105 C f 0.2 w 116.5 186.75 m 92.75 194.25 67 187.5 v 34.3887 178.9517 20.75 155.75 y 38.5 178.25 67.75 185.5 v 96.1782 192.5464 116.25 183.75 y 116.5 186.75 l f 0 w 77.25 162 m 75 164.5 l 42.25 149.5 32.5 113.75 v 43 144.75 77.25 162 v f 111 51.8335 m 109.937 52.9429 109.1665 52 108.1665 51.6665 c 107.1665 51.3335 102.1665 48.1665 98.1665 46.8335 c 94.1665 45.5 93.8335 45.1665 91.1665 45 c 88.5 44.8335 85.8335 44.1665 84 43.6665 c 82.1665 43.1665 80.3335 43.5 78.3335 44 c 76.3335 44.5 70.5 46.3335 67.3335 45.6665 c 64.1665 45 63.6665 43.1665 61.5 42.5 c 59.3335 41.8335 56.3335 41.6665 52.8335 43.3335 c 49.3335 45 47.0103 46.1846 45 47.3335 c 43.8335 48 42.9429 48.8501 42 50.5 c 41.3335 51.6665 38.4165 53.8335 35.5 55.8335 c 31.7988 58.3711 24.3335 63.6665 22.8335 65.5 c 27 57 28.5 55.3335 v 30 53.6665 30 52.3335 32.6665 52.3335 c 35.3335 52.3335 36.6665 51.8335 37.5 51 c 38 50.5 37.1665 50 35.8335 50.1665 c 34.9902 50.272 33.2739 50.1968 34.1665 48.6665 c 34.9165 48.75 35.5835 48.6665 v 36.25 48.5835 37.5 48.75 38.25 48.6665 c 39 48.5835 40.3335 48.1665 40.8335 47.4165 c 40.3335 46.75 39.3335 46.5 v 38.3335 46.25 37.1665 45.8335 37.75 45.3335 c 38.3335 44.8335 39.5835 44.3335 40.9165 44.5835 c 42.25 44.8335 44 45.25 44.6665 44.8335 c 45.3335 44.4165 44.8335 43.5835 43 43 c 41.1665 42.4165 40.9165 41.75 41.8335 41.4165 c 42.75 41.0835 44.5835 41.3335 45.5835 41.9165 c 46.5835 42.5 47 42.3335 47.4165 42.1665 c 47.8335 42 47.9165 41.4165 46.75 40.9165 c 45.5835 40.4165 44.5835 39.5 45.25 39.1665 c 45.9165 38.8335 48.3335 39.4165 49.1665 39.6665 c 50 39.9165 51.4165 40.25 52 39.8335 c 52.5835 39.4165 52.75 39 51.25 38.0835 c 49.75 37.1665 48.75 36.1665 49.3335 35.6665 c 49.9165 35.1665 51.3335 35.8335 52.0835 36.3335 c 52.8335 36.8335 55.4165 38.9165 56.25 38.3335 c 57.0835 37.75 55.9165 35.5 55.0835 34.5835 c 54.25 33.6665 53.8335 32.5 54.9165 32.0835 c 56 31.6665 56.6665 33 57.3335 33.75 c 58 34.5 63.4165 41.3335 64.4165 41 c 65.4165 40.6665 63.3335 36.5835 62.5 35.3335 c 61.6665 34.0835 59.25 29.9165 60.25 29.3335 c 61.25 28.75 64.0835 31.75 64.9165 33.25 c 65.75 34.75 67.9165 38.5835 68.75 38.25 c 69.5835 37.9165 69.5 36.0835 68.25 33.75 c 67 31.4165 64.9165 27.9165 66 27.25 c 67.0835 26.5835 69.3335 29.75 70.5835 32 c 71.8335 34.25 73.8335 38.25 74.9165 37.9165 c 76 37.5835 75.1665 35.25 74.0835 32.4165 c 73 29.5835 71.4165 25.8335 72.5835 25.5 c 73.75 25.1665 76.0835 27.6665 76.9165 29.9165 c 77.75 32.1665 80 37 81.25 36.6665 c 82.5 36.3335 81.8335 34.3335 81.4165 32.8335 c 81 31.3335 80.1665 28.0835 79.4165 26.6665 c 78.6665 25.25 78.8335 24.1665 79.4165 24.1665 c 80 24.1665 83.3335 28.5835 84.5 31.6665 c 85.6665 34.75 86.6665 37.8335 87.4165 38.1665 c 88.1665 38.5 88.1665 38.5 88.0835 37.8335 c 88 37.1665 88.0835 35.6665 87.9165 33.5835 c 87.75 31.5 87.25 28.4165 86.6665 27.1665 c 86.0835 25.9165 85.9165 23 86.75 23.0835 c 87.5835 23.1665 87.4165 24.5 88.25 25.25 c 89.0835 26 90.1665 28 90.5835 30.3335 c 91.75 31.9165 91.9165 33.3335 v 92.0835 34.75 92.5835 35.1665 92.8335 36.1665 c 93.0835 37.1665 93.3335 38.75 93.8335 38.5835 c 94.3335 38.4165 94.25 37.5835 94.3335 36.6665 c 94.4165 35.75 94.75 35 94.5 34.0835 c 94.25 33.1665 94.5 32.5835 94.3335 31.9165 c 94.1665 31.25 93.5835 29.8335 93.4165 28.5 c 93.25 27.1665 93.4165 25.9165 93.25 25.1665 c 93.0835 24.4165 93 23.0835 93.8335 23.6665 c 94.6665 24.25 95.5645 25.6519 95.75 28.25 c 95.8335 29.4165 96.9165 30.5 y 97.3335 30.75 97.4165 31.75 v 97.5 32.75 98.4165 37.3335 99.0835 37.25 c 99.75 37.1665 99.5835 36.6665 99.5835 35.6665 c 99.5835 34.6665 99.9165 32 99.5 30.25 c 99.0835 28.5 98.1665 24.25 98.6665 24.0835 c 99.1665 23.9165 100.8335 24.8335 101.1665 27.5835 c 101.5 30.3335 102.3335 31.75 102.4165 33.75 c 102.5 35.75 103.6665 38.5 104.3335 38.25 c 105 38 105 37.0835 105 36.25 c 105 35.4165 106 31.8335 105.5835 30.6665 c 105.1665 29.5 104.9165 27.0835 105 26.4165 c 105.0835 25.75 105.3335 24.75 105.8335 25.1665 c 106.3335 25.5835 106.9092 27.4375 107.25 30.25 c 107.5835 33 107.6665 34.9165 107.9165 35.8335 c 108.1665 36.75 107.9165 38.0835 108.25 38.5835 c 108.5835 39.0835 108.5835 39.4165 109.0835 38.5835 c 109.5835 37.75 110.25 36.5835 110.25 35.3335 c 110.25 34.0835 110.4165 30.1665 110 28.5 c 109.5835 26.8335 109.9165 26.0835 110.75 26.1665 c 111.7207 26.2637 112.5 28.1665 112.8335 31.3335 c 113.2173 34.9834 113.3335 41.6665 113 44.5835 c 112.6665 47.5 112.9165 49.8335 111 51.8335 c f LB %AI5_EndLayer-- %%PageTrailer gsave annotatepage grestore showpage %%Trailer Adobe_Illustrator_AI5 /terminate get exec Adobe_ColorImage_AI6 /terminate get exec Adobe_level2_AI5 /terminate get exec %%EOF \ No newline at end of file diff -r 000000000000 -r 83f997abf3b5 final_main/main.pdf Binary file final_main/main.pdf has changed diff -r 000000000000 -r 83f997abf3b5 final_main/main.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/main.tex Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,130 @@ +\documentclass[a4j,12pt]{jreport} +\usepackage[dvipdfmx]{graphicx} +\usepackage{mythesis} +\usepackage{bussproofs} +\usepackage{multirow} +\usepackage{here} +\usepackage{listings} +\usepackage{url} +\usepackage{cite} +\usepackage{listings} +\usepackage{amssymb} +\usepackage{amsmath} +\usepackage[utf8]{inputenc} + +\lstset{ + basicstyle={\ttfamily}, + breaklines=true, + columns=[l]{fullflexible}, + commentstyle={\ttfamily}, + escapechar={@}, + frame=single, + framerule=.5pt, + identifierstyle={\ttfamily}, + keepspaces=true, + keywordstyle={\ttfamily}, + language={}, + lineskip=-0.1zw, + numbers=left, + numbersep=1em, + numberstyle={\scriptsize}, + stepnumber=1, + stringstyle={\ttfamily}, + tabsize=4, + xleftmargin=0zw, + xrightmargin=0zw, +} + +% \lstset{ +% language={C}, +% basicstyle={\footnotesize\ttfamily}, +% identifierstyle={\footnotesize}, +% commentstyle={\footnotesize\itshape}, +% keywordstyle={\footnotesize\bfseries}, +% ndkeywordstyle={\footnotesize}, +% stringstyle={\footnotesize\ttfamily}, +% frame={tb}, +% breaklines=true, +% columns=[l]{fullflexible}, +% numbers=left, +% xrightmargin=0zw, +% xleftmargin=3zw, +% numberstyle={\scriptsize}, +% stepnumber=1, +% numbersep=1zw, +% lineskip=-0.5ex +% } +\def\lstlistingname{ソースコード} +\def\lstlistlistingname{ソースコード目次} +\setlength{\itemsep}{-1zh} +\title{画面共有システム TreeVNC の拡張} +\icon{ + \includegraphics[width=80mm,bb=0 0 595 642]{fig/ryukyu.pdf} %%元は 642じゃなくて842 +} +\year{平成31年度 卒業論文} +\belongto{琉球大学工学部情報工学科} +\author{155702F 大城 由也 \\ 指導教員 {河野 真治} } +%% +%% プリアンブルに記述 +%% Figure 環境中で Table 環境の見出しを表示・カウンタの操作に必要 +%% +\makeatletter +\newcommand{\figcaption}[1]{\def\@captype{figure}\caption{#1}} +\newcommand{\tblcaption}[1]{\def\@captype{table}\caption{#1}} +\newcommand{\coderef}[1]{ソースコード \ref{code:#1}} +\makeatother +\setlength\abovecaptionskip{0pt} + +\begin{document} + +% タイトル +\maketitle +\baselineskip 17pt plus 1pt minus 1pt + +\pagenumbering{roman} +\setcounter{page}{0} + +\tableofcontents % 目次 +\listoffigures % 図目次 +%\listoftables % 表目次 +\lstlistoflistings + +%以下のように、章ごとに個別の tex ファイルを作成して、 +% main.tex をコンパイルして確認する。 +%章分けは個人で違うので下のフォーマットを参考にして下さい。 + +% はじめに +\input{chapter1.tex} + +% 基礎概念 +\input{chapter2.tex} + +% 実験 +\input{chapter3.tex} + +% 実装 +\input{chapter4.tex} + +% 評価 +\input{chapter5.tex} + +% 結論 +\input{chapter6.tex} + +% 参考文献 +%% こっちで書きたいよね + +\nocite{*} +\bibliographystyle{junsrt} +\bibliography{reference} + +% \input{bibliography.tex} + +% 謝辞 +\input{thanks.tex} + +\appendix +% 付録 +%\input{appendix.tex} + +\end{document} diff -r 000000000000 -r 83f997abf3b5 final_main/mythesis.sty --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/mythesis.sty Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,156 @@ +% +% 卒業論文スタイルファイル(mythesis.sty) +% version 1.0e +% +% ver 1.0e 02/07/2000 since +% usage: + +%\documentclass[a4j]{jreport} +%\usepackage{master_paper} +% +% +%\title{卒論タイトル \\ 長い} +%\etitle{\pLaTeX2e style test file for Teri's thesis } +%\year{平成11年度} +%\belongto{琉球大学大学工学部\\ 情報工学科} +%\author{豊平 絵梨} +% +%\begin{document} +% +%\maketitle +% +%%要旨 +%\input{abstract.tex} +% +%%目次 +%\tableofcontents +% +%%図目次 +%\listoffigures +% +%%表目次 +%\listoftables +% +%%第一章 +%\input{chapter1.tex} +%%chapter1.texの\chapter{}の後ろに次のコマンドを追加してください。 +%%ページカウントがリセットされ、ページ数がアラビア文字になります。 +%% \pagenumbering{arabic} +%%第二章 +%\input{chapter2.tex} +%%第三章 +%\input{chapter3.tex} +% +%%付録 +%\input{appendix.tex} +% +%%謝辞 +%%\input{thanx.tex} +% +%%参考文献 +%\input{biblography.tex} +% +%\end{document} + + +%長さ設定 +%\setlength{\topmargin}{-30mm} +%\addtolength{\oddsidemargin}{-15mm} +%\addtolength{\textwidth}{60mm} + +\topmargin -1in \addtolength{\topmargin}{35mm} +\headheight 0mm +\headsep 0mm +\oddsidemargin -1in \addtolength{\oddsidemargin}{30mm} +%\evensidemargin -1in \addtolength{\evensidemargin}{8mm} +\textwidth 160mm +\textheight 230mm +%\footheight 0mm +%\footskip 0mm +%\pagestyle{empty} + + +%年度 +\def\@year{} +\def\year#1{\gdef\@year{#1}} +%英文タイトル +\def\@etitle{} +\def\etitle#1{\gdef\@etitle{#1}} +%アイコン +\def\@icon{} +\def\icon#1{\gdef\@icon{#1}} +%所属 +\def\@belongto{} +\def\belongto#1{\gdef\@belongto{#1}} + +%表紙 +\renewcommand{\maketitle}{% +\newpage\null +\thispagestyle{empty} +\vskip 0cm% +\begin{center}% +\let\footnote\thanks + {\huge \@year \par}% + \vskip 3em% + {\Huge \@title \par}% + \vskip 1em% + {\huge \@etitle \par}% + \vskip 8em% + {\huge \@icon \par}% + \vskip 0.5em% + {\huge \@belongto \par}% + \vskip 1.0em% + {\huge \@author \par}% + +\end{center}% +\par\vskip 1.5em +} + + +%abstract +\renewenvironment{abstract}{% + \titlepage + \thispagestyle{empty} + \null\vfil + \@beginparpenalty\@lowpenalty + {\Huge \bfseries \abstractname}% + \begin{center}% + \@endparpenalty\@M + \end{center} +}% + + +%目次 +\renewcommand{\tableofcontents}{% + \pagestyle{plain} + \if@twocolumn\@restonecoltrue\onecolumn + \else\@restonecolfalse\fi + \chapter*{\contentsname + \@mkboth{\contentsname}{\contentsname}% + } \pagenumbering{roman}\@starttoc{toc}% + \if@restonecol\twocolumn\fi +} + +%章 +\renewcommand{\chapter}{% + \pagestyle{plain} + \if@openright\cleardoublepage\else\clearpage\fi + \thispagestyle{jpl@in}% + \global\@topnum\z@ + \@afterindentfalse + \secdef\@chapter\@schapter} + + +\renewcommand{\prepartname}{} %\renewcommand{\prepartname}{第} +\renewcommand{\postpartname}{部} +\renewcommand{\prechaptername}{第}%\renewcommand{\prechaptername}{第} +\renewcommand{\postchaptername}{章} +\renewcommand{\contentsname}{目 次} +\renewcommand{\listfigurename}{図 目 次} +\renewcommand{\listtablename}{表 目 次} +\renewcommand{\bibname}{参考文献} +\renewcommand{\indexname}{索 引} +\renewcommand{\figurename}{図} +\renewcommand{\tablename}{表} +\renewcommand{\appendixname}{付 録} +\renewcommand{\abstractname}{要 旨} diff -r 000000000000 -r 83f997abf3b5 final_main/pic/modus-ponens.pdf Binary file final_main/pic/modus-ponens.pdf has changed diff -r 000000000000 -r 83f997abf3b5 final_main/pic/modus-ponens.xbb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/pic/modus-ponens.xbb Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,8 @@ +%%Title: modus-ponens.pdf +%%Creator: extractbb 20160307 +%%BoundingBox: 96 684 500 799 +%%HiResBoundingBox: 96.082030 683.554700 499.886700 799.296900 +%%PDFVersion: 1.3 +%%Pages: 1 +%%CreationDate: Mon Jan 29 15:58:01 2018 + diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaBasics.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaBasics.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,1 @@ +module AgdaBasics where diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaBasics.agda.replaced --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaBasics.agda.replaced Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,1 @@ +module AgdaBasics where diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaBool.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaBool.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,3 @@ +data Bool : Set where + true : Bool + false : Bool diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaDebug.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaDebug.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,32 @@ +open import Level renaming (suc to succ ; zero to Zero ) + +module AgdaDebug where + +open import stack + +open import Relation.Binary.PropositionalEquality +open import Relation.Binary.Core +open import Data.Nat +open import Function + + +open SingleLinkedStack +open Stack + +testStack07 : {m : Level } -> Maybe (Element ℕ) +testStack07 = pushSingleLinkedStack emptySingleLinkedStack 1 (\s -> pushSingleLinkedStack s 2 (\s -> top s)) + +testStack08 = pushSingleLinkedStack emptySingleLinkedStack 1 + $ \s -> pushSingleLinkedStack s 2 + $ \s -> pushSingleLinkedStack s 3 + $ \s -> pushSingleLinkedStack s 4 + $ \s -> pushSingleLinkedStack s 5 + $ \s -> top s + + +testStack10 = pushStack emptySingleLinkedStack 1 + $ \s -> pushStack 2 + $ \s -> pushStack 3 + $ \s -> pushStack 4 + $ \s -> pushStack 5 + $ \s -> top s diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaDebug.agdai Binary file final_main/src/AgdaDebug.agdai has changed diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaElem.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaElem.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,3 @@ +elem : {A : Set} {{eqA : Eq A}} → A → List A → Bool +elem {{eqA}} x (y ∷ xs) = (Eq._==_ eqA x y) || (elem {{eqA}} x xs) +elem x [] = false diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaElemApply.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaElemApply.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,3 @@ +listHas4 : Bool +listHas4 = elem 4 (3 ∷ 2 ∷ 5 ∷ 4 ∷ []) -- true + diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaFunction.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaFunction.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,2 @@ +f : Bool -> Bool +f x = true diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaId.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaId.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,5 @@ +identity : (A : Set) -> A -> A +identity A x = x + +identity-zero : Nat +identity-zero = identity Nat zero diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaImplicitId.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaImplicitId.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,11 @@ +id : {A : Set} -> A -> A +id x = x + +id-zero : Nat +id-zero = id zero + +id' : {A : Set} -> A -> A +id' {A} x = x + +id-true : Bool +id-true = id {Bool} true diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaImport.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaImport.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,6 @@ +import Data.Nat -- import module +import Data.Bool as B -- renamed module +import Data.List using (head) -- import Data.head function +import Level renaming (suc to S) -- import module with rename suc to S +import Data.String hiding (_++_) -- import module without _++_ +open import Data.List -- import and expand Data.List diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaInstance.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaInstance.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,9 @@ +_==Nat_ : Nat -> Nat -> Bool +zero ==Nat zero = true +(suc n) ==Nat zero = false +zero ==Nat (suc m) = false +(suc n) ==Nat (suc m) = n ==Nat m + +instance + natHas== : Eq Nat + natHas== = record { _==_ = _==Nat_} diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaInterface.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaInterface.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,35 @@ +open import Level renaming (suc to succ ; zero to Zero ) +module AgdaInterface where + +data Maybe {n : Level } (a : Set n) : Set n where + Nothing : Maybe a + Just : a -> Maybe a + +record StackMethods {n m : Level } (a : Set n ) {t : Set m }(stackImpl : Set n ) : Set (m Level.⊔ n) where + field + push : stackImpl -> a -> (stackImpl -> t) -> t + pop : stackImpl -> (stackImpl -> Maybe a -> t) -> t + pop2 : stackImpl -> (stackImpl -> Maybe a -> Maybe a -> t) -> t + get : stackImpl -> (stackImpl -> Maybe a -> t) -> t + get2 : stackImpl -> (stackImpl -> Maybe a -> Maybe a -> t) -> t + clear : stackImpl -> (stackImpl -> t) -> t +open StackMethods + +record Stack {n m : Level } (a : Set n ) {t : Set m } (si : Set n ) : Set (m Level.⊔ n) where + field + stack : si + stackMethods : StackMethods {n} {m} a {t} si + pushStack : a -> (Stack a si -> t) -> t + pushStack d next = push (stackMethods ) (stack ) d (\s1 -> next (record {stack = s1 ; stackMethods = stackMethods } )) + popStack : (Stack a si -> Maybe a -> t) -> t + popStack next = pop (stackMethods ) (stack ) (\s1 d1 -> next (record {stack = s1 ; stackMethods = stackMethods }) d1 ) + pop2Stack : (Stack a si -> Maybe a -> Maybe a -> t) -> t + pop2Stack next = pop2 (stackMethods ) (stack ) (\s1 d1 d2 -> next (record {stack = s1 ; stackMethods = stackMethods }) d1 d2) + getStack : (Stack a si -> Maybe a -> t) -> t + getStack next = get (stackMethods ) (stack ) (\s1 d1 -> next (record {stack = s1 ; stackMethods = stackMethods }) d1 ) + get2Stack : (Stack a si -> Maybe a -> Maybe a -> t) -> t + get2Stack next = get2 (stackMethods ) (stack ) (\s1 d1 d2 -> next (record {stack = s1 ; stackMethods = stackMethods }) d1 d2) + clearStack : (Stack a si -> t) -> t + clearStack next = clear (stackMethods ) (stack ) (\s1 -> next (record {stack = s1 ; stackMethods = stackMethods } )) + +open Stack diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaInterface.agda.replaced --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaInterface.agda.replaced Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,35 @@ +open import Level renaming (suc to succ ; zero to Zero ) +module AgdaInterface where + +data Maybe {n : Level } (a : Set n) : Set n where + Nothing : Maybe a + Just : a @$\rightarrow$@ Maybe a + +record StackMethods {n m : Level } (a : Set n ) {t : Set m }(stackImpl : Set n ) : Set (m Level.@$\sqcup$@ n) where + field + push : stackImpl @$\rightarrow$@ a @$\rightarrow$@ (stackImpl @$\rightarrow$@ t) @$\rightarrow$@ t + pop : stackImpl @$\rightarrow$@ (stackImpl @$\rightarrow$@ Maybe a @$\rightarrow$@ t) @$\rightarrow$@ t + pop2 : stackImpl @$\rightarrow$@ (stackImpl @$\rightarrow$@ Maybe a @$\rightarrow$@ Maybe a @$\rightarrow$@ t) @$\rightarrow$@ t + get : stackImpl @$\rightarrow$@ (stackImpl @$\rightarrow$@ Maybe a @$\rightarrow$@ t) @$\rightarrow$@ t + get2 : stackImpl @$\rightarrow$@ (stackImpl @$\rightarrow$@ Maybe a @$\rightarrow$@ Maybe a @$\rightarrow$@ t) @$\rightarrow$@ t + clear : stackImpl @$\rightarrow$@ (stackImpl @$\rightarrow$@ t) @$\rightarrow$@ t +open StackMethods + +record Stack {n m : Level } (a : Set n ) {t : Set m } (si : Set n ) : Set (m Level.@$\sqcup$@ n) where + field + stack : si + stackMethods : StackMethods {n} {m} a {t} si + pushStack : a @$\rightarrow$@ (Stack a si @$\rightarrow$@ t) @$\rightarrow$@ t + pushStack d next = push (stackMethods ) (stack ) d (\s1 @$\rightarrow$@ next (record {stack = s1 ; stackMethods = stackMethods } )) + popStack : (Stack a si @$\rightarrow$@ Maybe a @$\rightarrow$@ t) @$\rightarrow$@ t + popStack next = pop (stackMethods ) (stack ) (\s1 d1 @$\rightarrow$@ next (record {stack = s1 ; stackMethods = stackMethods }) d1 ) + pop2Stack : (Stack a si @$\rightarrow$@ Maybe a @$\rightarrow$@ Maybe a @$\rightarrow$@ t) @$\rightarrow$@ t + pop2Stack next = pop2 (stackMethods ) (stack ) (\s1 d1 d2 @$\rightarrow$@ next (record {stack = s1 ; stackMethods = stackMethods }) d1 d2) + getStack : (Stack a si @$\rightarrow$@ Maybe a @$\rightarrow$@ t) @$\rightarrow$@ t + getStack next = get (stackMethods ) (stack ) (\s1 d1 @$\rightarrow$@ next (record {stack = s1 ; stackMethods = stackMethods }) d1 ) + get2Stack : (Stack a si @$\rightarrow$@ Maybe a @$\rightarrow$@ Maybe a @$\rightarrow$@ t) @$\rightarrow$@ t + get2Stack next = get2 (stackMethods ) (stack ) (\s1 d1 d2 @$\rightarrow$@ next (record {stack = s1 ; stackMethods = stackMethods }) d1 d2) + clearStack : (Stack a si @$\rightarrow$@ t) @$\rightarrow$@ t + clearStack next = clear (stackMethods ) (stack ) (\s1 @$\rightarrow$@ next (record {stack = s1 ; stackMethods = stackMethods } )) + +open Stack diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaInterface.agdai Binary file final_main/src/AgdaInterface.agdai has changed diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaLambda.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaLambda.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,5 @@ +not-apply : Bool -> Bool +not-apply = (\b -> not b) -- use lambda + +not-apply : Bool -> Bool +not-appy b = not b -- not use lambda diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaModusPonens.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaModusPonens.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,2 @@ +f : {A B C : Set} -> ((A -> B) × (B -> C)) -> (A -> C) +f = \p x -> (snd p) ((fst p) x) diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaNPushNPop.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaNPushNPop.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,13 @@ +n-push : {m : Meta} {{_ : M.DataSegment Meta}} (n : ℕ) -> M.CodeSegment Meta Meta +n-push {{mm}} (zero) = M.cs {{mm}} {{mm}} id +n-push {m} {{mm}} (suc n) = M.cs {{mm}} {{mm}} (\m -> M.exec {{mm}} {{mm}} (n-push {m} {{mm}} n) (pushOnce m)) + +n-pop : {m : Meta} {{_ : M.DataSegment Meta}} (n : ℕ) -> M.CodeSegment Meta Meta +n-pop {{mm}} (zero) = M.cs {{mm}} {{mm}} id +n-pop {m} {{mm}} (suc n) = M.cs {{mm}} {{mm}} (\m -> M.exec {{mm}} {{mm}} (n-pop {m} {{mm}} n) (popOnce m)) + +pop-n-push-type : ℕ -> ℕ -> ℕ -> SingleLinkedStack ℕ -> Set₁ +pop-n-push-type n cn ce s = M.exec (M.csComp {meta} (M.cs popOnce) (n-push {meta} (suc n))) meta + ≡ M.exec (n-push {meta} n) meta + where + meta = id-meta cn ce s diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaNPushNPopProof.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaNPushNPopProof.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,58 @@ +pop-n-push-type : ℕ -> ℕ -> ℕ -> SingleLinkedStack ℕ -> Set₁ +pop-n-push-type n cn ce s = M.exec (M.csComp (M.cs popOnce) (n-push (suc n))) meta + ≡ M.exec (n-push n) meta + where + meta = id-meta cn ce s + +pop-n-push : (n cn ce : ℕ) -> (s : SingleLinkedStack ℕ) -> pop-n-push-type n cn ce s +pop-n-push zero cn ce s = refl +pop-n-push (suc n) cn ce s = begin + M.exec (M.csComp (M.cs popOnce) (n-push (suc (suc n)))) (id-meta cn ce s) + ≡⟨ refl ⟩ + M.exec (M.csComp (M.cs popOnce) (M.csComp (n-push (suc n)) (M.cs pushOnce))) (id-meta cn ce s) + ≡⟨ exec-comp (M.cs popOnce) (M.csComp (n-push (suc n)) (M.cs pushOnce)) (id-meta cn ce s) ⟩ + M.exec (M.cs popOnce) (M.exec (M.csComp (n-push (suc n)) (M.cs pushOnce)) (id-meta cn ce s)) + ≡⟨ cong (\x -> M.exec (M.cs popOnce) x) (exec-comp (n-push (suc n)) (M.cs pushOnce) (id-meta cn ce s)) ⟩ + M.exec (M.cs popOnce) (M.exec (n-push (suc n))(M.exec (M.cs pushOnce) (id-meta cn ce s))) + ≡⟨ refl ⟩ + M.exec (M.cs popOnce) (M.exec (n-push (suc n)) (id-meta cn ce (record {top = just (cons ce (SingleLinkedStack.top s))}))) + ≡⟨ sym (exec-comp (M.cs popOnce) (n-push (suc n)) (id-meta cn ce (record {top = just (cons ce (SingleLinkedStack.top s))}))) ⟩ + M.exec (M.csComp (M.cs popOnce) (n-push (suc n))) (id-meta cn ce (record {top = just (cons ce (SingleLinkedStack.top s))})) + ≡⟨ pop-n-push n cn ce (record {top = just (cons ce (SingleLinkedStack.top s))}) ⟩ + M.exec (n-push n) (id-meta cn ce (record {top = just (cons ce (SingleLinkedStack.top s))})) + ≡⟨ refl ⟩ + M.exec (n-push n) (pushOnce (id-meta cn ce s)) + ≡⟨ refl ⟩ + M.exec (n-push n) (M.exec (M.cs pushOnce) (id-meta cn ce s)) + ≡⟨ refl ⟩ + M.exec (n-push (suc n)) (id-meta cn ce s) + ∎ + + + +n-push-pop-type : ℕ -> ℕ -> ℕ -> SingleLinkedStack ℕ -> Set₁ +n-push-pop-type n cn ce st = M.exec (M.csComp (n-pop n) (n-push n)) meta ≡ meta + where + meta = id-meta cn ce st + +n-push-pop : (n cn ce : ℕ) -> (s : SingleLinkedStack ℕ) -> n-push-pop-type n cn ce s +n-push-pop zero cn ce s = refl +n-push-pop (suc n) cn ce s = begin + M.exec (M.csComp (n-pop (suc n)) (n-push (suc n))) (id-meta cn ce s) + ≡⟨ refl ⟩ + M.exec (M.csComp (M.cs (\m -> M.exec (n-pop n) (popOnce m))) (n-push (suc n))) (id-meta cn ce s) + ≡⟨ exec-comp (M.cs (\m -> M.exec (n-pop n) (popOnce m))) (n-push (suc n)) (id-meta cn ce s) ⟩ + M.exec (M.cs (\m -> M.exec (n-pop n) (popOnce m))) (M.exec (n-push (suc n)) (id-meta cn ce s)) + ≡⟨ refl ⟩ + M.exec (n-pop n) (popOnce (M.exec (n-push (suc n)) (id-meta cn ce s))) + ≡⟨ refl ⟩ + M.exec (n-pop n) (M.exec (M.cs popOnce) (M.exec (n-push (suc n)) (id-meta cn ce s))) + ≡⟨ cong (\x -> M.exec (n-pop n) x) (sym (exec-comp (M.cs popOnce) (n-push (suc n)) (id-meta cn ce s))) ⟩ + M.exec (n-pop n) (M.exec (M.csComp (M.cs popOnce) (n-push (suc n))) (id-meta cn ce s)) + ≡⟨ cong (\x -> M.exec (n-pop n) x) (pop-n-push n cn ce s) ⟩ + M.exec (n-pop n) (M.exec (n-push n) (id-meta cn ce s)) + ≡⟨ sym (exec-comp (n-pop n) (n-push n) (id-meta cn ce s)) ⟩ + M.exec (M.csComp (n-pop n) (n-push n)) (id-meta cn ce s) + ≡⟨ n-push-pop n cn ce s ⟩ + id-meta cn ce s + ∎ diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaNat.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaNat.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,3 @@ +data Nat : Set where + zero : Nat + suc : Nat -> Nat diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaNot.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaNot.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,3 @@ +not : Bool -> Bool +not true = false +not false = true diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaParameterizedModule.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaParameterizedModule.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,7 @@ +module Sort (A : Set) (_<_ : A -> A -> Bool) where +sort : List A -> List A +sort = -- 実装は省略 ... + +-- Parameterized Module により N.sort や B.sort が可能 +open import Sort Nat Nat._<_ as N +open import Sort Bool Bool._<_ as B diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaPattern.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaPattern.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,3 @@ +not : Bool -> Bool +not false = true +not x = false diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaPlus.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaPlus.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,3 @@ +_+_ : Nat -> Nat -> Nat +zero + m = m +suc n + m = suc (n + m) diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaProduct.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaProduct.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,8 @@ +data _×_ (A B : Set) : Set where + <_,_> : A -> B -> A × B + +fst : {A B : Set} -> A × B -> A +fst < a , _ > = a + +snd : {A B : Set} -> A × B -> B +snd < _ , b > = b diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaProp.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaProp.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,2 @@ +prop : Bool +prop = true diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaPushPop.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaPushPop.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,28 @@ +pushSingleLinkedStack : Meta -> Meta +pushSingleLinkedStack m = M.exec (liftMeta n) (record m {stack = (push s e) }) + where + n = Meta.nextCS m + s = Meta.stack m + e = Context.element (Meta.context m) + push : SingleLinkedStack A -> Maybe A -> SingleLinkedStack A + push s nothing = s + push s (just x) = record {top = just (cons x (top s))} + +popSingleLinkedStack : Meta -> Meta +popSingleLinkedStack m = M.exec (liftMeta n) (record m {stack = (st m) ; context = record con {element = (elem m)}}) + where + n = Meta.nextCS m + con = Meta.context m + elem : Meta -> Maybe A + elem record {stack = record { top = (just (cons x _)) }} = just x + elem record {stack = record { top = nothing }} = nothing + st : Meta -> SingleLinkedStack A + st record {stack = record { top = (just (cons _ s)) }} = record {top = s} + st record {stack = record { top = nothing }} = record {top = nothing} + + +pushSingleLinkedStackCS : M.CodeSegment Meta Meta +pushSingleLinkedStackCS = M.cs pushSingleLinkedStack + +popSingleLinkedStackCS : M.CodeSegment Meta Meta +popSingleLinkedStackCS = M.cs popSingleLinkedStack diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaPushPopProof.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaPushPopProof.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,11 @@ +id-meta : ℕ -> ℕ -> SingleLinkedStack ℕ -> Meta +id-meta n e s = record { context = record {n = n ; element = just e} + ; nextCS = (N.cs id) ; stack = s} + +push-pop-type : ℕ -> ℕ -> ℕ -> Element ℕ -> Set₁ +push-pop-type n e x s = M.exec (M.csComp {meta} (M.cs popOnce) (M.cs pushOnce)) meta ≡ meta + where + meta = id-meta n e record {top = just (cons x (just s))} + +push-pop : (n e x : ℕ) -> (s : Element ℕ) -> push-pop-type n e x s +push-pop n e x s = refl diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaRecord.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaRecord.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,7 @@ +record Point : Set where + field + x : Nat + y : Nat + +makePoint : Nat -> Nat -> Point +makePoint a b = record { x = a ; y = b } diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaRecordProj.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaRecordProj.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,8 @@ +getX : Point -> Nat +getX p = Point.x p + +getY : Point -> Nat +getY record { x = a ; y = b} = b + +xPlus5 : Point -> Point +xPlus5 p = record p { x = (Point.x p) + 5} diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaSingleLinkedStack.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaSingleLinkedStack.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,63 @@ +singleLinkedStackSpec : {n m : Level } {t : Set m } {a : Set n} -> StackMethods {n} {m} a {t} (SingleLinkedStack a) +singleLinkedStackSpec = record { +push = pushSingleLinkedStack +; pop = popSingleLinkedStack +; pop2 = pop2SingleLinkedStack +; get = getSingleLinkedStack +; get2 = get2SingleLinkedStack +; clear = clearSingleLinkedStack +} + +createSingleLinkedStack : {n m : Level } {t : Set m } {a : Set n} -> Stack {n} {m} a {t} (SingleLinkedStack a) +createSingleLinkedStack = record { +stack = emptySingleLinkedStack ; +stackMethods = singleLinkedStackSpec +} + +-- Implementation + +pushSingleLinkedStack : {n m : Level } {t : Set m } {Data : Set n} -> SingleLinkedStack Data -> Data -> (Code : SingleLinkedStack Data -> t) -> t +pushSingleLinkedStack stack datum next = next stack1 + where + element = cons datum (top stack) + stack1 = record {top = Just element} + + +popSingleLinkedStack : {n m : Level } {t : Set m } {a : Set n} -> SingleLinkedStack a -> (Code : SingleLinkedStack a -> (Maybe a) -> t) -> t +popSingleLinkedStack stack cs with (top stack) +... | Nothing = cs stack Nothing +... | Just d = cs stack1 (Just data1) + where + data1 = datum d + stack1 = record { top = (next d) } + +pop2SingleLinkedStack : {n m : Level } {t : Set m } {a : Set n} -> SingleLinkedStack a -> (Code : SingleLinkedStack a -> (Maybe a) -> (Maybe a) -> t) -> t +pop2SingleLinkedStack {n} {m} {t} {a} stack cs with (top stack) +... | Nothing = cs stack Nothing Nothing +... | Just d = pop2SingleLinkedStack' {n} {m} stack cs + where + pop2SingleLinkedStack' : {n m : Level } {t : Set m } -> SingleLinkedStack a -> (Code : SingleLinkedStack a -> (Maybe a) -> (Maybe a) -> t) -> t + pop2SingleLinkedStack' stack cs with (next d) + ... | Nothing = cs stack Nothing Nothing + ... | Just d1 = cs (record {top = (next d1)}) (Just (datum d)) (Just (datum d1)) + + +getSingleLinkedStack : {n m : Level } {t : Set m } {a : Set n} -> SingleLinkedStack a -> (Code : SingleLinkedStack a -> (Maybe a) -> t) -> t +getSingleLinkedStack stack cs with (top stack) +... | Nothing = cs stack Nothing +... | Just d = cs stack (Just data1) + where + data1 = datum d + +get2SingleLinkedStack : {n m : Level } {t : Set m } {a : Set n} -> SingleLinkedStack a -> (Code : SingleLinkedStack a -> (Maybe a) -> (Maybe a) -> t) -> t +get2SingleLinkedStack {n} {m} {t} {a} stack cs with (top stack) +... | Nothing = cs stack Nothing Nothing +... | Just d = get2SingleLinkedStack' {n} {m} stack cs + where + get2SingleLinkedStack' : {n m : Level} {t : Set m } -> SingleLinkedStack a -> (Code : SingleLinkedStack a -> (Maybe a) -> (Maybe a) -> t) -> t + get2SingleLinkedStack' stack cs with (next d) + ... | Nothing = cs stack Nothing Nothing + ... | Just d1 = cs stack (Just (datum d)) (Just (datum d1)) + +clearSingleLinkedStack : {n m : Level } {t : Set m } {a : Set n} -> SingleLinkedStack a -> (SingleLinkedStack a -> t) -> t +clearSingleLinkedStack stack next = next (record {top = Nothing}) diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaSingleLinkedStack.agda.replaced --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaSingleLinkedStack.agda.replaced Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,63 @@ +singleLinkedStackSpec : {n m : Level } {t : Set m } {a : Set n} @$\rightarrow$@ StackMethods {n} {m} a {t} (SingleLinkedStack a) +singleLinkedStackSpec = record { +push = pushSingleLinkedStack +; pop = popSingleLinkedStack +; pop2 = pop2SingleLinkedStack +; get = getSingleLinkedStack +; get2 = get2SingleLinkedStack +; clear = clearSingleLinkedStack +} + +createSingleLinkedStack : {n m : Level } {t : Set m } {a : Set n} @$\rightarrow$@ Stack {n} {m} a {t} (SingleLinkedStack a) +createSingleLinkedStack = record { +stack = emptySingleLinkedStack ; +stackMethods = singleLinkedStackSpec +} + +-- Implementation + +pushSingleLinkedStack : {n m : Level } {t : Set m } {Data : Set n} @$\rightarrow$@ SingleLinkedStack Data @$\rightarrow$@ Data @$\rightarrow$@ (Code : SingleLinkedStack Data @$\rightarrow$@ t) @$\rightarrow$@ t +pushSingleLinkedStack stack datum next = next stack1 + where + element = cons datum (top stack) + stack1 = record {top = Just element} + + +popSingleLinkedStack : {n m : Level } {t : Set m } {a : Set n} @$\rightarrow$@ SingleLinkedStack a @$\rightarrow$@ (Code : SingleLinkedStack a @$\rightarrow$@ (Maybe a) @$\rightarrow$@ t) @$\rightarrow$@ t +popSingleLinkedStack stack cs with (top stack) +... | Nothing = cs stack Nothing +... | Just d = cs stack1 (Just data1) + where + data1 = datum d + stack1 = record { top = (next d) } + +pop2SingleLinkedStack : {n m : Level } {t : Set m } {a : Set n} @$\rightarrow$@ SingleLinkedStack a @$\rightarrow$@ (Code : SingleLinkedStack a @$\rightarrow$@ (Maybe a) @$\rightarrow$@ (Maybe a) @$\rightarrow$@ t) @$\rightarrow$@ t +pop2SingleLinkedStack {n} {m} {t} {a} stack cs with (top stack) +... | Nothing = cs stack Nothing Nothing +... | Just d = pop2SingleLinkedStack' {n} {m} stack cs + where + pop2SingleLinkedStack' : {n m : Level } {t : Set m } @$\rightarrow$@ SingleLinkedStack a @$\rightarrow$@ (Code : SingleLinkedStack a @$\rightarrow$@ (Maybe a) @$\rightarrow$@ (Maybe a) @$\rightarrow$@ t) @$\rightarrow$@ t + pop2SingleLinkedStack' stack cs with (next d) + ... | Nothing = cs stack Nothing Nothing + ... | Just d1 = cs (record {top = (next d1)}) (Just (datum d)) (Just (datum d1)) + + +getSingleLinkedStack : {n m : Level } {t : Set m } {a : Set n} @$\rightarrow$@ SingleLinkedStack a @$\rightarrow$@ (Code : SingleLinkedStack a @$\rightarrow$@ (Maybe a) @$\rightarrow$@ t) @$\rightarrow$@ t +getSingleLinkedStack stack cs with (top stack) +... | Nothing = cs stack Nothing +... | Just d = cs stack (Just data1) + where + data1 = datum d + +get2SingleLinkedStack : {n m : Level } {t : Set m } {a : Set n} @$\rightarrow$@ SingleLinkedStack a @$\rightarrow$@ (Code : SingleLinkedStack a @$\rightarrow$@ (Maybe a) @$\rightarrow$@ (Maybe a) @$\rightarrow$@ t) @$\rightarrow$@ t +get2SingleLinkedStack {n} {m} {t} {a} stack cs with (top stack) +... | Nothing = cs stack Nothing Nothing +... | Just d = get2SingleLinkedStack' {n} {m} stack cs + where + get2SingleLinkedStack' : {n m : Level} {t : Set m } @$\rightarrow$@ SingleLinkedStack a @$\rightarrow$@ (Code : SingleLinkedStack a @$\rightarrow$@ (Maybe a) @$\rightarrow$@ (Maybe a) @$\rightarrow$@ t) @$\rightarrow$@ t + get2SingleLinkedStack' stack cs with (next d) + ... | Nothing = cs stack Nothing Nothing + ... | Just d1 = cs stack (Just (datum d)) (Just (datum d1)) + +clearSingleLinkedStack : {n m : Level } {t : Set m } {a : Set n} @$\rightarrow$@ SingleLinkedStack a @$\rightarrow$@ (SingleLinkedStack a @$\rightarrow$@ t) @$\rightarrow$@ t +clearSingleLinkedStack stack next = next (record {top = Nothing}) diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaStack.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaStack.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,13 @@ +data Element (a : Set) : Set where + cons : a -> Maybe (Element a) -> Element a + +datum : {a : Set} -> Element a -> a +datum (cons a _) = a + +next : {a : Set} -> Element a -> Maybe (Element a) +next (cons _ n) = n + +record SingleLinkedStack (a : Set) : Set where + field + top : Maybe (Element a) + diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaStackDS.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaStackDS.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,17 @@ +record Context : Set where + field + -- fields for stack + element : Maybe A + + +open import subtype Context as N + +record Meta : Set₁ where + field + -- context as set of data segments + context : Context + stack : SingleLinkedStack A + nextCS : N.CodeSegment Context Context + +open import subtype Meta as M + diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaStackImpl.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaStackImpl.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,28 @@ +record SingleLinkedStack {n : Level } (a : Set n) : Set n where + field + top : Maybe (Element a) +open SingleLinkedStack + +pushSingleLinkedStack : {n m : Level } {t : Set m } {Data : Set n} -> SingleLinkedStack Data -> Data -> (Code : SingleLinkedStack Data -> t) -> t +pushSingleLinkedStack stack datum next = next stack1 + where + element = cons datum (top stack) + stack1 = record {top = Just element} + +-- Basic stack implementations are specifications of a Stack + +singleLinkedStackSpec : {n m : Level } {t : Set m } {a : Set n} -> StackMethods {n} {m} a {t} (SingleLinkedStack a) +singleLinkedStackSpec = record { + push = pushSingleLinkedStack + ; pop = popSingleLinkedStack + ; pop2 = pop2SingleLinkedStack + ; get = getSingleLinkedStack + ; get2 = get2SingleLinkedStack + ; clear = clearSingleLinkedStack + } + +createSingleLinkedStack : {n m : Level } {t : Set m } {a : Set n} -> Stack {n} {m} a {t} (SingleLinkedStack a) +createSingleLinkedStack = record { + stack = emptySingleLinkedStack ; + stackMethods = singleLinkedStackSpec + } diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaStackImpl.agda.replaced --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaStackImpl.agda.replaced Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,28 @@ +record SingleLinkedStack {n : Level } (a : Set n) : Set n where + field + top : Maybe (Element a) +open SingleLinkedStack + +pushSingleLinkedStack : {n m : Level } {t : Set m } {Data : Set n} @$\rightarrow$@ SingleLinkedStack Data @$\rightarrow$@ Data @$\rightarrow$@ (Code : SingleLinkedStack Data @$\rightarrow$@ t) @$\rightarrow$@ t +pushSingleLinkedStack stack datum next = next stack1 + where + element = cons datum (top stack) + stack1 = record {top = Just element} + +-- Basic stack implementations are specifications of a Stack + +singleLinkedStackSpec : {n m : Level } {t : Set m } {a : Set n} @$\rightarrow$@ StackMethods {n} {m} a {t} (SingleLinkedStack a) +singleLinkedStackSpec = record { + push = pushSingleLinkedStack + ; pop = popSingleLinkedStack + ; pop2 = pop2SingleLinkedStack + ; get = getSingleLinkedStack + ; get2 = get2SingleLinkedStack + ; clear = clearSingleLinkedStack + } + +createSingleLinkedStack : {n m : Level } {t : Set m } {a : Set n} @$\rightarrow$@ Stack {n} {m} a {t} (SingleLinkedStack a) +createSingleLinkedStack = record { + stack = emptySingleLinkedStack ; + stackMethods = singleLinkedStackSpec + } diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaStackSomeState.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaStackSomeState.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,6 @@ +stackInSomeState : {l m : Level } {D : Set l} {t : Set m } (s : SingleLinkedStack D ) -> Stack {l} {m} D {t} ( SingleLinkedStack D ) +stackInSomeState s = record { stack = s ; stackMethods = singleLinkedStackSpec } + +push->push->pop2 : {l : Level } {D : Set l} (x y : D ) (s : SingleLinkedStack D ) -> +pushStack ( stackInSomeState s ) x ( \s1 -> pushStack s1 y ( \s2 -> pop2Stack s2 ( \s3 y1 x1 -> (Just x ≡ x1 ) ∧ (Just y ≡ y1 ) ) )) +push->push->pop2 {l} {D} x y s = record { pi1 = refl ; pi2 = refl } diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaStackSomeState.agda.replaced --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaStackSomeState.agda.replaced Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,6 @@ +stackInSomeState : {l m : Level } {D : Set l} {t : Set m } (s : SingleLinkedStack D ) @$\rightarrow$@ Stack {l} {m} D {t} ( SingleLinkedStack D ) +stackInSomeState s = record { stack = s ; stackMethods = singleLinkedStackSpec } + +push@$\rightarrow$@push@$\rightarrow$@pop2 : {l : Level } {D : Set l} (x y : D ) (s : SingleLinkedStack D ) @$\rightarrow$@ pushStack (stackInSomeState s) x (\s1 @$\rightarrow$@ pushStack s1 y (\s2 @$\rightarrow$@ pop2Stack s2 (\s3 y1 x1 @$\rightarrow$@ + (Just x @$\equiv$@ x1) ∧ (Just y @$\equiv$@ y1)))) +push@$\rightarrow$@push@$\rightarrow$@pop2 {l} {D} x y s = record { pi1 = refl ; pi2 = refl } diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaStackTest.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaStackTest.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,37 @@ +open import Level renaming (suc to succ ; zero to Zero ) +module AgdaStackTest where + +open import stack + +open import Relation.Binary.PropositionalEquality +open import Relation.Binary.Core +open import Data.Nat +open import Function + + +open SingleLinkedStack +open Stack + + +-- after push 1 and 2, pop2 get 1 and 2 + +testStack02 : {m : Level } -> ( Stack ℕ (SingleLinkedStack ℕ) -> Bool {m} ) -> Bool {m} +testStack02 cs = pushStack createSingleLinkedStack 1 (\s -> pushStack s 2 cs) + + +testStack031 : (d1 d2 : ℕ ) -> Bool {Zero} +testStack031 2 1 = True +testStack031 _ _ = False + +testStack032 : (d1 d2 : Maybe ℕ) -> Bool {Zero} +testStack032 (Just d1) (Just d2) = testStack031 d1 d2 +testStack032 _ _ = False + +testStack03 : {m : Level } -> Stack ℕ (SingleLinkedStack ℕ) -> ((Maybe ℕ) -> (Maybe ℕ) -> Bool {m} ) -> Bool {m} +testStack03 s cs = pop2Stack s (\s d1 d2 -> cs d1 d2 ) + +testStack04 : Bool +testStack04 = testStack02 (\s -> testStack03 s testStack032) + +testStack05 : testStack04 ≡ True +testStack05 = refl diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaStackTest.agda.replaced --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaStackTest.agda.replaced Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,22 @@ +-- after push 1 and 2, pop2 get 1 and 2 + +testStack02 : {m : Level } @$\rightarrow$@ ( Stack @$\mathbb{N}$@ (SingleLinkedStack @$\mathbb{N}$@) @$\rightarrow$@ Bool {m} ) @$\rightarrow$@ Bool {m} +testStack02 cs = pushStack createSingleLinkedStack 1 (\s @$\rightarrow$@ pushStack s 2 cs) + + +testStack031 : (d1 d2 : $\mathbb{N}$ ) @$\rightarrow$@ Bool {Zero} +testStack031 2 1 = True +testStack031 _ _ = False + +testStack032 : (d1 d2 : Maybe @$\mathbb{N}$@) @$\rightarrow$@ Bool {Zero} +testStack032 (Just d1) (Just d2) = testStack031 d1 d2 +testStack032 _ _ = False + +testStack03 : {m : Level } @$\rightarrow$@ Stack @$\mathbb{N}$@ (SingleLinkedStack @$\mathbb{N}$@) @$\rightarrow$@ ((Maybe @$\mathbb{N}$@) @$\rightarrow$@ (Maybe @$\mathbb{N}$@) @$\rightarrow$@ Bool {m} ) @$\rightarrow$@ Bool {m} +testStack03 s cs = pop2Stack s (\s d1 d2 @$\rightarrow$@ cs d1 d2 ) + +testStack04 : Bool +testStack04 = testStack02 (\s @$\rightarrow$@ testStack03 s testStack032) + +testStack05 : testStack04 @$\equiv$@ True +testStack05 = refl diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaStackTest.agdai Binary file final_main/src/AgdaStackTest.agdai has changed diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaTree.Agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaTree.Agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,17 @@ +record TreeMethods {n m : Level } {a : Set n } {t : Set m } (treeImpl : Set n ) : Set (m Level.⊔ n) where + field + putImpl : treeImpl -> a -> (treeImpl -> t) -> t + getImpl : treeImpl -> (treeImpl -> Maybe a -> t) -> t +open TreeMethods + +record Tree {n m : Level } {a : Set n } {t : Set m } (treeImpl : Set n ) : Set (m Level.⊔ n) where + field + tree : treeImpl + treeMethods : TreeMethods {n} {m} {a} {t} treeImpl + putTree : a -> (Tree treeImpl -> t) -> t + putTree d next = putImpl (treeMethods ) tree d (\t1 -> next (record {tree = t1 ; treeMethods = treeMethods} )) + getTree : (Tree treeImpl -> Maybe a -> t) -> t + getTree next = getImpl (treeMethods ) tree (\t1 d -> next (record {tree = t1 ; treeMethods = treeMethods} ) d ) + +open Tree + diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaTree.agda.replaced --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaTree.agda.replaced Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,17 @@ +record TreeMethods {n m : Level } {a : Set n } {t : Set m } (treeImpl : Set n ) : Set (m Level.@$\sqcup$@ n) where + field + putImpl : treeImpl @$\rightarrow$@ a @$\rightarrow$@ (treeImpl @$\rightarrow$@ t) @$\rightarrow$@ t + getImpl : treeImpl @$\rightarrow$@ (treeImpl @$\rightarrow$@ Maybe a @$\rightarrow$@ t) @$\rightarrow$@ t +open TreeMethods + +record Tree {n m : Level } {a : Set n } {t : Set m } (treeImpl : Set n ) : Set (m Level.@$\sqcup$@ n) where + field + tree : treeImpl + treeMethods : TreeMethods {n} {m} {a} {t} treeImpl + putTree : a @$\rightarrow$@ (Tree treeImpl @$\rightarrow$@ t) @$\rightarrow$@ t + putTree d next = putImpl (treeMethods ) tree d (\t1 @$\rightarrow$@ next (record {tree = t1 ; treeMethods = treeMethods} )) + getTree : (Tree treeImpl @$\rightarrow$@ Maybe a @$\rightarrow$@ t) @$\rightarrow$@ t + getTree next = getImpl (treeMethods ) tree (\t1 d @$\rightarrow$@ next (record {tree = t1 ; treeMethods = treeMethods} ) d ) + +open Tree + diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaTreeDebug.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaTreeDebug.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,15 @@ +test31 = putTree1 {_} {_} {ℕ} {ℕ} (createEmptyRedBlackTreeℕ ℕ ) 1 1 + $ \t -> putTree1 t 2 2 + $ \t -> putTree1 t 3 3 + $ \t -> putTree1 t 4 4 + $ \t -> getRedBlackTree t 4 + $ \t x -> x + +-- Just +-- (record +-- { key = 4 +-- ; value = 4 +-- ; right = Nothing +-- ; left = Nothing +-- ; color = Red +-- }) diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaTreeDebug.agda.replaced --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaTreeDebug.agda.replaced Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,15 @@ +test31 = putTree1 {_} {_} {@$\mathbb{N}$@} {@$\mathbb{N}$@} (createEmptyRedBlackTree@$\mathbb{N}$@ @$\mathbb{N}$@ ) 1 1 + $ \t @$\rightarrow$@ putTree1 t 2 2 + $ \t @$\rightarrow$@ putTree1 t 3 3 + $ \t @$\rightarrow$@ putTree1 t 4 4 + $ \t @$\rightarrow$@ getRedBlackTree t 4 + $ \t x @$\rightarrow$@ x + +-- Just +-- (record +-- { key = 4 +-- ; value = 4 +-- ; right = Nothing +-- ; left = Nothing +-- ; color = Red +-- }) diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaTreeDebugReturnNode4.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaTreeDebugReturnNode4.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,16 @@ +test31 = putTree1 {_} {_} {ℕ} {ℕ} (createEmptyRedBlackTreeℕ ℕ ) 1 1 +$ \t -> putTree1 t 2 2 +$ \t -> putTree1 t 3 3 +$ \t -> putTree1 t 4 4 +$ \t -> getRedBlackTree t 4 +$ \t x -> x + +-- C-c C-n test31 return + -- Just + -- (record + -- { key = 4 + -- ; value = 4 + -- ; right = Nothing + -- ; left = Nothing + -- ; color = Red + -- }) diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaTreeImpl.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaTreeImpl.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,33 @@ +record Node {n : Level } (a k : Set n) : Set n where + inductive + field + key : k + value : a + right : Maybe (Node a k) + left : Maybe (Node a k) + color : Color {n} +open Node + +leafNode : {n : Level } {a k : Set n} -> k -> a -> Node a k +leafNode k1 value = record { + key = k1 ; + value = value ; + right = Nothing ; + left = Nothing ; + color = Red + } +open leafNode + +record RedBlackTree {n m : Level } {t : Set m} (a k : Set n) : Set (m Level.⊔ n) where + field + root : Maybe (Node a k) + nodeStack : SingleLinkedStack (Node a k) + compare : k -> k -> CompareResult {n} +open RedBlackTree + +putRedBlackTree : {n m : Level } {a k : Set n} {t : Set m} -> RedBlackTree {n} {m} {t} a k -> k -> a -> (RedBlackTree {n} {m} {t} a k -> t) -> t +putRedBlackTree {n} {m} {a} {k} {t} tree k1 value next with (root tree) +... | Nothing = next (record tree {root = Just (leafNode k1 value) }) +... | Just n2 = clearSingleLinkedStack (nodeStack tree) (\ s -> findNode tree s (leafNode k1 value) n2 (\ tree1 s n1 -> insertNode tree1 s n1 next)) + +-- 以下省略 diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaTreeImpl.agda.replaced --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaTreeImpl.agda.replaced Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,47 @@ +record TreeMethods {n m : Level } {a : Set n } {t : Set m } (treeImpl : Set n ) : Set (m Level.@$\sqcup$@ n) where + field + putImpl : treeImpl @$\rightarrow$@ a @$\rightarrow$@ (treeImpl @$\rightarrow$@ t) @$\rightarrow$@ t + getImpl : treeImpl @$\rightarrow$@ (treeImpl @$\rightarrow$@ Maybe a @$\rightarrow$@ t) @$\rightarrow$@ t +open TreeMethods + +record Tree {n m : Level } {a : Set n } {t : Set m } (treeImpl : Set n ) : Set (m Level.@$\sqcup$@ n) where + field + tree : treeImpl + treeMethods : TreeMethods {n} {m} {a} {t} treeImpl + putTree : a @$\rightarrow$@ (Tree treeImpl @$\rightarrow$@ t) @$\rightarrow$@ t + putTree d next = putImpl (treeMethods ) tree d (\t1 @$\rightarrow$@ next (record {tree = t1 ; treeMethods = treeMethods} )) + getTree : (Tree treeImpl @$\rightarrow$@ Maybe a @$\rightarrow$@ t) @$\rightarrow$@ t + getTree next = getImpl (treeMethods ) tree (\t1 d @$\rightarrow$@ next (record {tree = t1 ; treeMethods = treeMethods} ) d ) +open Tree + +record Node {n : Level } (a k : Set n) : Set n where + inductive + field + key : k + value : a + right : Maybe (Node a k) + left : Maybe (Node a k) + color : Color {n} +open Node + +leafNode : {n : Level } {a k : Set n} @$\rightarrow$@ k @$\rightarrow$@ a @$\rightarrow$@ Node a k +leafNode k1 value = record { + key = k1 ; + value = value ; + right = Nothing ; + left = Nothing ; + color = Red + } +record RedBlackTree {n m : Level } {t : Set m} (a k : Set n) : Set (m Level.@$\sqcup$@ n) where + field + root : Maybe (Node a k) + nodeStack : SingleLinkedStack (Node a k) + compare : k @$\rightarrow$@ k @$\rightarrow$@ CompareResult {n} +open RedBlackTree + +putRedBlackTree : {n m : Level } {a k : Set n} {t : Set m} @$\rightarrow$@ RedBlackTree {n} {m} {t} a k @$\rightarrow$@ k @$\rightarrow$@ a @$\rightarrow$@ (RedBlackTree {n} {m} {t} a k @$\rightarrow$@ t) @$\rightarrow$@ t +putRedBlackTree {n} {m} {a} {k} {t} tree k1 value next with (root tree) +... | Nothing = next (record tree {root = Just (leafNode k1 value) }) +... | Just n2 = clearSingleLinkedStack (nodeStack tree) (\ s @$\rightarrow$@ findNode tree s (leafNode k1 value) n2 (\ tree1 s n1 @$\rightarrow$@ insertNode tree1 s n1 next)) + +-- 以下省略 diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaTreeProof.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaTreeProof.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,34 @@ +redBlackInSomeState : { m : Level } (a : Set Level.zero) (n : Maybe (Node a ℕ)) {t : Set m} -> RedBlackTree {Level.zero} {m} {t} a ℕ +redBlackInSomeState {m} a n {t} = record { root = n ; nodeStack = emptySingleLinkedStack ; compare = compare2 } + +putTest1 :{ m : Level } (n : Maybe (Node ℕ ℕ)) + -> (k : ℕ) (x : ℕ) + -> putTree1 {_} {_} {ℕ} {ℕ} (redBlackInSomeState {_} ℕ n {Set Level.zero}) k x + (\ t -> getRedBlackTree t k (\ t x1 -> check2 x1 x ≡ True)) +putTest1 n k x with n +... | Just n1 = lemma2 ( record { top = Nothing } ) + where + lemma2 : (s : SingleLinkedStack (Node ℕ ℕ) ) -> putTree1 (record { root = Just n1 ; nodeStack = s ; compare = compare2 }) k x (λ t → + GetRedBlackTree.checkNode t k (λ t₁ x1 → check2 x1 x ≡ True) (root t)) + lemma2 s with compare2 k (key n1) + ... | EQ = lemma3 {!!} + where + lemma3 : compare2 k (key n1) ≡ EQ -> getRedBlackTree {_} {_} {ℕ} {ℕ} {Set Level.zero} ( record { root = Just ( record { + key = key n1 ; value = x ; right = right n1 ; left = left n1 ; color = Black + } ) ; nodeStack = s ; compare = λ x₁ y → compare2 x₁ y } ) k ( \ t x1 -> check2 x1 x ≡ True) + lemma3 eq with compare2 x x | putTest1Lemma2 x + ... | EQ | refl with compare2 k (key n1) | eq + ... | EQ | refl with compare2 x x | putTest1Lemma2 x + ... | EQ | refl = refl + ... | GT = {!!} + ... | LT = {!!} + +... | Nothing = lemma1 + where + lemma1 : getRedBlackTree {_} {_} {ℕ} {ℕ} {Set Level.zero} ( record { root = Just ( record { + key = k ; value = x ; right = Nothing ; left = Nothing ; color = Red + } ) ; nodeStack = record { top = Nothing } ; compare = λ x₁ y → compare2 x₁ y } ) k + ( \ t x1 -> check2 x1 x ≡ True) + lemma1 with compare2 k k | putTest1Lemma2 k + ... | EQ | refl with compare2 x x | putTest1Lemma2 x + ... | EQ | refl = refl diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaTreeProof.agda.replaced --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaTreeProof.agda.replaced Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,34 @@ +redBlackInSomeState : { m : Level } (a : Set Level.zero) (n : Maybe (Node a @$\mathbb{N}$@)) {t : Set m} @$\rightarrow$@ RedBlackTree {Level.zero} {m} {t} a @$\mathbb{N}$@ +redBlackInSomeState {m} a n {t} = record { root = n ; nodeStack = emptySingleLinkedStack ; compare = compare2 } + +putTest1 :{ m : Level } (n : Maybe (Node @$\mathbb{N}$@ @$\mathbb{N}$@)) + @$\rightarrow$@ (k : @$\mathbb{N}$@) (x : @$\mathbb{N}$@) + @$\rightarrow$@ putTree1 {_} {_} {@$\mathbb{N}$@} {@$\mathbb{N}$@} (redBlackInSomeState {_} @$\mathbb{N}$@ n {Set Level.zero}) k x + (\ t @$\rightarrow$@ getRedBlackTree t k (\ t x1 @$\rightarrow$@ check2 x1 x @$\equiv$@ True)) +putTest1 n k x with n +... | Just n1 = lemma2 ( record { top = Nothing } ) + where + lemma2 : (s : SingleLinkedStack (Node @$\mathbb{N}$@ @$\mathbb{N}$@) ) @$\rightarrow$@ putTree1 (record { root = Just n1 ; nodeStack = s ; compare = compare2 }) k x (λ t → + GetRedBlackTree.checkNode t k (λ t@$\text{1}$@ x1 → check2 x1 x @$\equiv$@ True) (root t)) + lemma2 s with compare2 k (key n1) + ... | EQ = lemma3 {!!} + where + lemma3 : compare2 k (key n1) @$\equiv$@ EQ @$\rightarrow$@ getRedBlackTree {_} {_} {@$\mathbb{N}$@} {@$\mathbb{N}$@} {Set Level.zero} ( record { root = Just ( record { + key = key n1 ; value = x ; right = right n1 ; left = left n1 ; color = Black + } ) ; nodeStack = s ; compare = λ x@$\text{1}$@ y → compare2 x@$\text{1}$@ y } ) k ( \ t x1 @$\rightarrow$@ check2 x1 x @$\equiv$@ True) + lemma3 eq with compare2 x x | putTest1Lemma2 x + ... | EQ | refl with compare2 k (key n1) | eq + ... | EQ | refl with compare2 x x | putTest1Lemma2 x + ... | EQ | refl = refl + ... | GT = {!!} + ... | LT = {!!} + +... | Nothing = lemma1 + where + lemma1 : getRedBlackTree {_} {_} {@$\mathbb{N}$@} {@$\mathbb{N}$@} {Set Level.zero} ( record { root = Just ( record { + key = k ; value = x ; right = Nothing ; left = Nothing ; color = Red + } ) ; nodeStack = record { top = Nothing } ; compare = λ x@$\text{1}$@ y → compare2 x@$\text{1}$@ y } ) k + ( \ t x1 @$\rightarrow$@ check2 x1 x @$\equiv$@ True) + lemma1 with compare2 k k | putTest1Lemma2 k + ... | EQ | refl with compare2 x x | putTest1Lemma2 x + ... | EQ | refl = refl diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaTreeTest.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaTreeTest.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,6 @@ +test31 = putTree1 {_} {_} {ℕ} {ℕ} (createEmptyRedBlackTreeℕ ℕ ) 1 1 +$ \t -> putTree1 t 2 2 +$ \t -> putTree1 t 3 3 +$ \t -> putTree1 t 4 4 +$ \t -> getRedBlackTree t 4 +$ \t x -> x diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaTypeClass.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaTypeClass.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,3 @@ +record Eq (A : Set) : Set where + field + _==_ : A -> A -> Bool diff -r 000000000000 -r 83f997abf3b5 final_main/src/AgdaWhere.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/AgdaWhere.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,7 @@ +f : Int -> Int -> Int +f a b c = (t a) + (t b) + (t c) + where + t x = x + x + x + +f' : Int -> Int -> Int +f' a b c = (a + a + a) + (b + b + b) + (c + c + c) diff -r 000000000000 -r 83f997abf3b5 final_main/src/CodeSegment.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/CodeSegment.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,2 @@ +data CodeSegment {l1 l2 : Level} (I : Set l1) (O : Set l2) : Set (l ⊔ l1 ⊔ l2) where + cs : (I -> O) -> CodeSegment I O diff -r 000000000000 -r 83f997abf3b5 final_main/src/CodeSegment.agda.replaced --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/CodeSegment.agda.replaced Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,2 @@ +data CodeSegment {l1 l2 : Level} (I : Set l1) (O : Set l2) : Set (l @$\sqcup$@ l1 @$\sqcup$@ l2) where + cs : (I @$\rightarrow$@ O) @$\rightarrow$@ CodeSegment I O diff -r 000000000000 -r 83f997abf3b5 final_main/src/CodeSegments.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/CodeSegments.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,12 @@ +cs2 : CodeSegment ds1 ds1 +cs2 = cs id + +cs1 : CodeSegment ds1 ds1 +cs1 = cs (\d -> goto cs2 d) + +cs0 : CodeSegment ds0 ds1 +cs0 = cs (\d -> goto cs1 (record {c = (ds0.a d) + (ds0.b d)})) + +main : ds1 +main = goto cs0 (record {a = 100 ; b = 50}) + diff -r 000000000000 -r 83f997abf3b5 final_main/src/DataSegment.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/DataSegment.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,8 @@ +record ds0 : Set where + field + a : Int + b : Int + +record ds1 : Set where + field + c : Int diff -r 000000000000 -r 83f997abf3b5 final_main/src/DataSegment.agda.replaced --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/DataSegment.agda.replaced Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,8 @@ +record ds0 : Set where + field + a : Int + b : Int + +record ds1 : Set where + field + c : Int diff -r 000000000000 -r 83f997abf3b5 final_main/src/Eq.Agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/Eq.Agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,30 @@ +module Eq where +open import Data.Nat +open import Data.Bool +open import Data.List + +record Eq (A : Set) : Set where + field + _==_ : A -> A -> Bool + +_==Nat_ : ℕ -> ℕ -> Bool +zero ==Nat zero = true +(suc n) ==Nat zero = false +zero ==Nat (suc m) = false +(suc n) ==Nat (suc m) = n ==Nat m + + +instance + _ : Eq ℕ + _ = record { _==_ = _==Nat_} + +_||_ : Bool -> Bool -> Bool +true || _ = true +false || x = x + +elem : {A : Set} {{eqA : Eq A}} → A → List A → Bool +elem {{eqA}} x (y ∷ xs) = (Eq._==_ eqA x y) || (elem {{eqA}} x xs) +elem x [] = false + +listHas4 : Bool +listHas4 = elem 4 (3 ∷ 2 ∷ 5 ∷ 4 ∷ []) -- true diff -r 000000000000 -r 83f997abf3b5 final_main/src/Equiv.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/Equiv.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,1 @@ +data _≡_ {a} {A : Set a} (x : A) : A → Set a where refl : x ≡ x \ No newline at end of file diff -r 000000000000 -r 83f997abf3b5 final_main/src/Exec.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/Exec.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,5 @@ +exec : {l1 l2 : Level} {I : Set l1} {O : Set l2} + {{_ : DataSegment I}} {{_ : DataSegment O}} + -> CodeSegment I O -> Context -> Context +exec {l} {{i}} {{o}} (cs b) c = set o c (b (get i c)) + diff -r 000000000000 -r 83f997abf3b5 final_main/src/Goto.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/Goto.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,4 @@ +goto : {l1 l2 : Level} {I : Set l1} {O : Set l2} + -> CodeSegment I O -> I -> O +goto (cs b) i = b i + diff -r 000000000000 -r 83f997abf3b5 final_main/src/Goto.agda.replaced --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/Goto.agda.replaced Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,4 @@ +goto : {l1 l2 : Level} {I : Set l1} {O : Set l2} + @$\rightarrow$@ CodeSegment I O @$\rightarrow$@ I @$\rightarrow$@ O +goto (cs b) i = b i + diff -r 000000000000 -r 83f997abf3b5 final_main/src/Maybe.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/Maybe.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,3 @@ +data Maybe {a} (A : Set a) : Set a where + just : (x : A) -> Maybe A + nothing : Maybe A diff -r 000000000000 -r 83f997abf3b5 final_main/src/MetaCodeSegment.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/MetaCodeSegment.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,4 @@ +data CodeSegment {l1 l2 : Level} (A : Set l1) (B : Set l2) : Set (l ⊔ l1 ⊔ l2) where + cs : {{_ : DataSegment A}} {{_ : DataSegment B}} + -> (A -> B) -> CodeSegment A B + diff -r 000000000000 -r 83f997abf3b5 final_main/src/MetaDataSegment.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/MetaDataSegment.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,7 @@ +module subtype {l : Level} (Context : Set l) where + +record DataSegment {ll : Level} (A : Set ll) : Set (l ⊔ ll) where + field + get : Context -> A + set : Context -> A -> Context + diff -r 000000000000 -r 83f997abf3b5 final_main/src/MetaMetaCodeSegment.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/MetaMetaCodeSegment.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,29 @@ +-- meta level +liftContext : {X Y : Set} {{_ : N.DataSegment X}} {{_ : N.DataSegment Y}} -> N.CodeSegment X Y -> N.CodeSegment Context Context +liftContext {{x}} {{y}} (N.cs f) = N.cs (\c -> N.DataSegment.set y c (f (N.DataSegment.get x c))) + +liftMeta : {X Y : Set} {{_ : M.DataSegment X}} {{_ : M.DataSegment Y}} -> N.CodeSegment X Y -> M.CodeSegment X Y +liftMeta (N.cs f) = M.cs f + +gotoMeta : {I O : Set} {{_ : N.DataSegment I}} {{_ : N.DataSegment O}} -> M.CodeSegment Meta Meta -> N.CodeSegment I O -> Meta -> Meta +gotoMeta mCode code m = M.exec mCode (record m {next = (liftContext code)}) + +push : M.CodeSegment Meta Meta +push = M.cs (\m -> M.exec (liftMeta (Meta.next m)) (record m {c' = Context.c (Meta.context m)})) + +-- normal level + +cs2 : N.CodeSegment ds1 ds1 +cs2 = N.cs id + +cs1 : N.CodeSegment ds1 ds1 +cs1 = N.cs (\d -> N.goto cs2 d) + +cs0 : N.CodeSegment ds0 ds1 +cs0 = N.cs (\d -> N.goto cs1 (record {c = (ds0.a d) + (ds0.b d)})) + +-- meta level (with extended normal) +main : Meta +main = gotoMeta push cs0 (record {context = (record {a = 100 ; b = 50 ; c = 70}) ; c' = 0 ; next = (N.cs id)}) +-- record {context = record {a = 100 ; b = 50 ; c = 150} ; c' = 70 ; next = (N.cs id)} + diff -r 000000000000 -r 83f997abf3b5 final_main/src/MetaMetaDataSegment.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/MetaMetaDataSegment.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,12 @@ +-- 上で各 DataSegement の定義を行なっているとする +open import subtype Context as N -- Meta Datasegment を定義 + +-- Meta DataSegment を持つ Meta Meta DataSegment を定義できる +record Meta : Set where + field + context : Context + c' : Int + next : N.CodeSegment Context Context + +open import subtype Meta as M +-- 以下よりメタメタレベルのプログラムを記述できる diff -r 000000000000 -r 83f997abf3b5 final_main/src/Nat.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/Nat.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,5 @@ +module nat where + +data Nat : Set where + O : Nat + S : Nat -> Nat \ No newline at end of file diff -r 000000000000 -r 83f997abf3b5 final_main/src/NatAdd.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/NatAdd.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,6 @@ +open import nat +module nat_add where + +_+_ : Nat -> Nat -> Nat +O + m = m +(S n) + m = S (n + m) \ No newline at end of file diff -r 000000000000 -r 83f997abf3b5 final_main/src/NatAddSym.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/NatAddSym.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,12 @@ +open import Relation.Binary.PropositionalEquality +open import nat +open import nat_add +open ≡-Reasoning + +module nat_add_sym where + +addSym : (n m : Nat) -> n + m ≡ m + n +addSym O O = refl +addSym O (S m) = cong S (addSym O m) +addSym (S n) O = cong S (addSym n O) +addSym (S n) (S m) = {!!} -- 後述 diff -r 000000000000 -r 83f997abf3b5 final_main/src/PushPopType.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/PushPopType.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,9 @@ +pushOnce : Meta -> Meta +pushOnce m = M.exec pushSingleLinkedStackCS m + +popOnce : Meta -> Meta +popOnce m = M.exec popSingleLinkedStackCS m + +push-pop-type : Meta -> Set₁ +push-pop-type meta = + M.exec (M.csComp (M.cs popOnce) (M.cs pushOnce)) meta ≡ meta diff -r 000000000000 -r 83f997abf3b5 final_main/src/Reasoning.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/Reasoning.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,21 @@ +open import Relation.Binary.PropositionalEquality +open import nat +open import nat_add +open ≡-Reasoning + +module nat_add_sym_reasoning where + +addToRight : (n m : Nat) -> S (n + m) ≡ n + (S m) +addToRight O m = refl +addToRight (S n) m = cong S (addToRight n m) + +addSym : (n m : Nat) -> n + m ≡ m + n +addSym O O = refl +addSym O (S m) = cong S (addSym O m) +addSym (S n) O = cong S (addSym n O) +addSym (S n) (S m) = begin + (S n) + (S m) ≡⟨ refl ⟩ + S (n + S m) ≡⟨ cong S (addSym n (S m)) ⟩ + S ((S m) + n) ≡⟨ addToRight (S m) n ⟩ + S (m + S n) ≡⟨ refl ⟩ + (S m) + (S n) ∎ diff -r 000000000000 -r 83f997abf3b5 final_main/src/RedBlackTree.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/RedBlackTree.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,231 @@ +module RedBlackTree where + +open import stack +open import Level hiding (zero) +record TreeMethods {n m : Level } {a : Set n } {t : Set m } (treeImpl : Set n ) : Set (m Level.⊔ n) where + field + putImpl : treeImpl -> a -> (treeImpl -> t) -> t + getImpl : treeImpl -> (treeImpl -> Maybe a -> t) -> t +open TreeMethods + +record Tree {n m : Level } {a : Set n } {t : Set m } (treeImpl : Set n ) : Set (m Level.⊔ n) where + field + tree : treeImpl + treeMethods : TreeMethods {n} {m} {a} {t} treeImpl + putTree : a -> (Tree treeImpl -> t) -> t + putTree d next = putImpl (treeMethods ) tree d (\t1 -> next (record {tree = t1 ; treeMethods = treeMethods} )) + getTree : (Tree treeImpl -> Maybe a -> t) -> t + getTree next = getImpl (treeMethods ) tree (\t1 d -> next (record {tree = t1 ; treeMethods = treeMethods} ) d ) + +open Tree + +data Color {n : Level } : Set n where + Red : Color + Black : Color + +data CompareResult {n : Level } : Set n where + LT : CompareResult + GT : CompareResult + EQ : CompareResult + +record Node {n : Level } (a k : Set n) : Set n where + inductive + field + key : k + value : a + right : Maybe (Node a k) + left : Maybe (Node a k) + color : Color {n} +open Node + +record RedBlackTree {n m : Level } {t : Set m} (a k : Set n) : Set (m Level.⊔ n) where + field + root : Maybe (Node a k) + nodeStack : SingleLinkedStack (Node a k) + compare : k -> k -> CompareResult {n} + +open RedBlackTree + +open SingleLinkedStack + +-- +-- put new node at parent node, and rebuild tree to the top +-- +{-# TERMINATING #-} -- https://agda.readthedocs.io/en/v2.5.3/language/termination-checking.html +replaceNode : {n m : Level } {t : Set m } {a k : Set n} -> RedBlackTree {n} {m} {t} a k -> SingleLinkedStack (Node a k) -> Node a k -> (RedBlackTree {n} {m} {t} a k -> t) -> t +replaceNode {n} {m} {t} {a} {k} tree s n0 next = popSingleLinkedStack s ( + \s parent -> replaceNode1 s parent) + where + replaceNode1 : SingleLinkedStack (Node a k) -> Maybe ( Node a k ) -> t + replaceNode1 s Nothing = next ( record tree { root = Just (record n0 { color = Black}) } ) + replaceNode1 s (Just n1) with compare tree (key n1) (key n0) + ... | EQ = replaceNode tree s ( record n1 { value = value n0 ; left = left n0 ; right = right n0 } ) next + ... | GT = replaceNode tree s ( record n1 { left = Just n0 } ) next + ... | LT = replaceNode tree s ( record n1 { right = Just n0 } ) next + + +rotateRight : {n m : Level } {t : Set m } {a k : Set n} -> RedBlackTree {n} {m} {t} a k -> SingleLinkedStack (Node a k) -> Maybe (Node a k) -> Maybe (Node a k) -> + (RedBlackTree {n} {m} {t} a k -> SingleLinkedStack (Node a k) -> Maybe (Node a k) -> Maybe (Node a k) -> t) -> t +rotateRight {n} {m} {t} {a} {k} tree s n0 parent rotateNext = getSingleLinkedStack s (\ s n0 -> rotateRight1 tree s n0 parent rotateNext) + where + rotateRight1 : {n m : Level } {t : Set m } {a k : Set n} -> RedBlackTree {n} {m} {t} a k -> SingleLinkedStack (Node a k) -> Maybe (Node a k) -> Maybe (Node a k) -> + (RedBlackTree {n} {m} {t} a k -> SingleLinkedStack (Node a k) -> Maybe (Node a k) -> Maybe (Node a k) -> t) -> t + rotateRight1 {n} {m} {t} {a} {k} tree s n0 parent rotateNext with n0 + ... | Nothing = rotateNext tree s Nothing n0 + ... | Just n1 with parent + ... | Nothing = rotateNext tree s (Just n1 ) n0 + ... | Just parent1 with left parent1 + ... | Nothing = rotateNext tree s (Just n1) Nothing + ... | Just leftParent with compare tree (key n1) (key leftParent) + ... | EQ = rotateNext tree s (Just n1) parent + ... | _ = rotateNext tree s (Just n1) parent + + +rotateLeft : {n m : Level } {t : Set m } {a k : Set n} -> RedBlackTree {n} {m} {t} a k -> SingleLinkedStack (Node a k) -> Maybe (Node a k) -> Maybe (Node a k) -> + (RedBlackTree {n} {m} {t} a k -> SingleLinkedStack (Node a k) -> Maybe (Node a k) -> Maybe (Node a k) -> t) -> t +rotateLeft {n} {m} {t} {a} {k} tree s n0 parent rotateNext = getSingleLinkedStack s (\ s n0 -> rotateLeft1 tree s n0 parent rotateNext) + where + rotateLeft1 : {n m : Level } {t : Set m } {a k : Set n} -> RedBlackTree {n} {m} {t} a k -> SingleLinkedStack (Node a k) -> Maybe (Node a k) -> Maybe (Node a k) -> + (RedBlackTree {n} {m} {t} a k -> SingleLinkedStack (Node a k) -> Maybe (Node a k) -> Maybe (Node a k) -> t) -> t + rotateLeft1 {n} {m} {t} {a} {k} tree s n0 parent rotateNext with n0 + ... | Nothing = rotateNext tree s Nothing n0 + ... | Just n1 with parent + ... | Nothing = rotateNext tree s (Just n1) Nothing + ... | Just parent1 with right parent1 + ... | Nothing = rotateNext tree s (Just n1) Nothing + ... | Just rightParent with compare tree (key n1) (key rightParent) + ... | EQ = rotateNext tree s (Just n1) parent + ... | _ = rotateNext tree s (Just n1) parent + +{-# TERMINATING #-} +insertCase5 : {n m : Level } {t : Set m } {a k : Set n} -> RedBlackTree {n} {m} {t} a k -> SingleLinkedStack (Node a k) -> Maybe (Node a k) -> Node a k -> Node a k -> (RedBlackTree {n} {m} {t} a k -> t) -> t +insertCase5 {n} {m} {t} {a} {k} tree s n0 parent grandParent next = pop2SingleLinkedStack s (\ s parent grandParent -> insertCase51 tree s n0 parent grandParent next) + where + insertCase51 : {n m : Level } {t : Set m } {a k : Set n} -> RedBlackTree {n} {m} {t} a k -> SingleLinkedStack (Node a k) -> Maybe (Node a k) -> Maybe (Node a k) -> Maybe (Node a k) -> (RedBlackTree {n} {m} {t} a k -> t) -> t + insertCase51 {n} {m} {t} {a} {k} tree s n0 parent grandParent next with n0 + ... | Nothing = next tree + ... | Just n1 with parent | grandParent + ... | Nothing | _ = next tree + ... | _ | Nothing = next tree + ... | Just parent1 | Just grandParent1 with left parent1 | left grandParent1 + ... | Nothing | _ = next tree + ... | _ | Nothing = next tree + ... | Just leftParent1 | Just leftGrandParent1 + with compare tree (key n1) (key leftParent1) | compare tree (key leftParent1) (key leftGrandParent1) + ... | EQ | EQ = rotateRight tree s n0 parent + (\ tree s n0 parent -> insertCase5 tree s n0 parent1 grandParent1 next) + ... | _ | _ = rotateLeft tree s n0 parent + (\ tree s n0 parent -> insertCase5 tree s n0 parent1 grandParent1 next) + +insertCase4 : {n m : Level } {t : Set m } {a k : Set n} -> RedBlackTree {n} {m} {t} a k -> SingleLinkedStack (Node a k) -> Node a k -> Node a k -> Node a k -> (RedBlackTree {n} {m} {t} a k -> t) -> t +insertCase4 {n} {m} {t} {a} {k} tree s n0 parent grandParent next + with (right parent) | (left grandParent) +... | Nothing | _ = insertCase5 tree s (Just n0) parent grandParent next +... | _ | Nothing = insertCase5 tree s (Just n0) parent grandParent next +... | Just rightParent | Just leftGrandParent with compare tree (key n0) (key rightParent) | compare tree (key parent) (key leftGrandParent) +... | EQ | EQ = popSingleLinkedStack s (\ s n1 -> rotateLeft tree s (left n0) (Just grandParent) + (\ tree s n0 parent -> insertCase5 tree s n0 rightParent grandParent next)) +... | _ | _ = insertCase41 tree s n0 parent grandParent next + where + insertCase41 : {n m : Level } {t : Set m } {a k : Set n} -> RedBlackTree {n} {m} {t} a k -> SingleLinkedStack (Node a k) -> Node a k -> Node a k -> Node a k -> (RedBlackTree {n} {m} {t} a k -> t) -> t + insertCase41 {n} {m} {t} {a} {k} tree s n0 parent grandParent next + with (left parent) | (right grandParent) + ... | Nothing | _ = insertCase5 tree s (Just n0) parent grandParent next + ... | _ | Nothing = insertCase5 tree s (Just n0) parent grandParent next + ... | Just leftParent | Just rightGrandParent with compare tree (key n0) (key leftParent) | compare tree (key parent) (key rightGrandParent) + ... | EQ | EQ = popSingleLinkedStack s (\ s n1 -> rotateRight tree s (right n0) (Just grandParent) + (\ tree s n0 parent -> insertCase5 tree s n0 leftParent grandParent next)) + ... | _ | _ = insertCase5 tree s (Just n0) parent grandParent next + +colorNode : {n : Level } {a k : Set n} -> Node a k -> Color -> Node a k +colorNode old c = record old { color = c } + +{-# TERMINATING #-} +insertNode : {n m : Level } {t : Set m } {a k : Set n} -> RedBlackTree {n} {m} {t} a k -> SingleLinkedStack (Node a k) -> Node a k -> (RedBlackTree {n} {m} {t} a k -> t) -> t +insertNode {n} {m} {t} {a} {k} tree s n0 next = get2SingleLinkedStack s (insertCase1 n0) + where + insertCase1 : Node a k -> SingleLinkedStack (Node a k) -> Maybe (Node a k) -> Maybe (Node a k) -> t -- placed here to allow mutual recursion + -- http://agda.readthedocs.io/en/v2.5.2/language/mutual-recursion.html + insertCase3 : SingleLinkedStack (Node a k) -> Node a k -> Node a k -> Node a k -> t + insertCase3 s n0 parent grandParent with left grandParent | right grandParent + ... | Nothing | Nothing = insertCase4 tree s n0 parent grandParent next + ... | Nothing | Just uncle = insertCase4 tree s n0 parent grandParent next + ... | Just uncle | _ with compare tree ( key uncle ) ( key parent ) + ... | EQ = insertCase4 tree s n0 parent grandParent next + ... | _ with color uncle + ... | Red = pop2SingleLinkedStack s ( \s p0 p1 -> insertCase1 ( + record grandParent { color = Red ; left = Just ( record parent { color = Black } ) ; right = Just ( record uncle { color = Black } ) }) s p0 p1 ) + ... | Black = insertCase4 tree s n0 parent grandParent next + insertCase2 : SingleLinkedStack (Node a k) -> Node a k -> Node a k -> Node a k -> t + insertCase2 s n0 parent grandParent with color parent + ... | Black = replaceNode tree s n0 next + ... | Red = insertCase3 s n0 parent grandParent + insertCase1 n0 s Nothing Nothing = next tree + insertCase1 n0 s Nothing (Just grandParent) = next tree + insertCase1 n0 s (Just parent) Nothing = replaceNode tree s (colorNode n0 Black) next + insertCase1 n0 s (Just parent) (Just grandParent) = insertCase2 s n0 parent grandParent + +---- +-- find node potition to insert or to delete, the path will be in the stack +-- +findNode : {n m : Level } {a k : Set n} {t : Set m} -> RedBlackTree {n} {m} {t} a k -> SingleLinkedStack (Node a k) -> (Node a k) -> (Node a k) -> (RedBlackTree {n} {m} {t} a k -> SingleLinkedStack (Node a k) -> Node a k -> t) -> t +findNode {n} {m} {a} {k} {t} tree s n0 n1 next = pushSingleLinkedStack s n1 (\ s -> findNode1 s n1) + where + findNode2 : SingleLinkedStack (Node a k) -> (Maybe (Node a k)) -> t + findNode2 s Nothing = next tree s n0 + findNode2 s (Just n) = findNode tree s n0 n next + findNode1 : SingleLinkedStack (Node a k) -> (Node a k) -> t + findNode1 s n1 with (compare tree (key n0) (key n1)) + ... | EQ = popSingleLinkedStack s ( \s _ -> next tree s (record n1 { key = key n1 ; value = value n0 } ) ) + ... | GT = findNode2 s (right n1) + ... | LT = findNode2 s (left n1) + + +leafNode : {n : Level } {a k : Set n} -> k -> a -> Node a k +leafNode k1 value = record { + key = k1 ; + value = value ; + right = Nothing ; + left = Nothing ; + color = Red + } + +putRedBlackTree : {n m : Level } {a k : Set n} {t : Set m} -> RedBlackTree {n} {m} {t} a k -> k -> a -> (RedBlackTree {n} {m} {t} a k -> t) -> t +putRedBlackTree {n} {m} {a} {k} {t} tree k1 value next with (root tree) +... | Nothing = next (record tree {root = Just (leafNode k1 value) }) +... | Just n2 = clearSingleLinkedStack (nodeStack tree) (\ s -> findNode tree s (leafNode k1 value) n2 (\ tree1 s n1 -> insertNode tree1 s n1 next)) + +getRedBlackTree : {n m : Level } {a k : Set n} {t : Set m} -> RedBlackTree {n} {m} {t} a k -> k -> (RedBlackTree {n} {m} {t} a k -> (Maybe (Node a k)) -> t) -> t +getRedBlackTree {_} {_} {a} {k} {t} tree k1 cs = checkNode (root tree) + module GetRedBlackTree where -- http://agda.readthedocs.io/en/v2.5.2/language/let-and-where.html + search : Node a k -> t + checkNode : Maybe (Node a k) -> t + checkNode Nothing = cs tree Nothing + checkNode (Just n) = search n + search n with compare tree k1 (key n) + search n | LT = checkNode (left n) + search n | GT = checkNode (right n) + search n | EQ = cs tree (Just n) + +open import Data.Nat hiding (compare) + +compareℕ : ℕ → ℕ → CompareResult {Level.zero} +compareℕ x y with Data.Nat.compare x y +... | less _ _ = LT +... | equal _ = EQ +... | greater _ _ = GT + +compare2 : (x y : ℕ ) -> CompareResult {Level.zero} +compare2 zero zero = EQ +compare2 (suc _) zero = GT +compare2 zero (suc _) = LT +compare2 (suc x) (suc y) = compare2 x y + + +createEmptyRedBlackTreeℕ : { m : Level } (a : Set Level.zero) {t : Set m} -> RedBlackTree {Level.zero} {m} {t} a ℕ +createEmptyRedBlackTreeℕ {m} a {t} = record { + root = Nothing + ; nodeStack = emptySingleLinkedStack + ; compare = compare2 + } + diff -r 000000000000 -r 83f997abf3b5 final_main/src/RedBlackTree.agdai Binary file final_main/src/RedBlackTree.agdai has changed diff -r 000000000000 -r 83f997abf3b5 final_main/src/SingleLinkedStack.cbc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/SingleLinkedStack.cbc Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,110 @@ +#include "../context.h" +#include "../origin_cs.h" +#include + +// typedef struct SingleLinkedStack { +// struct Element* top; +// } SingleLinkedStack; + +Stack* createSingleLinkedStack(struct Context* context) { + struct Stack* stack = new Stack(); + struct SingleLinkedStack* singleLinkedStack = new SingleLinkedStack(); + stack->stack = (union Data*)singleLinkedStack; + singleLinkedStack->top = NULL; + stack->push = C_pushSingleLinkedStack; + stack->pop = C_popSingleLinkedStack; + stack->pop2 = C_pop2SingleLinkedStack; + stack->get = C_getSingleLinkedStack; + stack->get2 = C_get2SingleLinkedStack; + stack->isEmpty = C_isEmptySingleLinkedStack; + stack->clear = C_clearSingleLinkedStack; + return stack; +} + +void printStack1(union Data* data) { + struct Node* node = &data->Element.data->Node; + if (node == NULL) { + printf("NULL"); + } else { + printf("key = %d ,", node->key); + printStack1((union Data*)data->Element.next); + } +} + +void printStack(union Data* data) { + printStack1(data); + printf("\n"); +} + +__code clearSingleLinkedStack(struct SingleLinkedStack* stack,__code next(...)) { + stack->top = NULL; + goto next(...); +} + +__code pushSingleLinkedStack(struct SingleLinkedStack* stack,union Data* data, __code next(...)) { + Element* element = new Element(); + element->next = stack->top; + element->data = data; + stack->top = element; + goto next(...); +} + +__code popSingleLinkedStack(struct SingleLinkedStack* stack, __code next(union Data* data, ...)) { + if (stack->top) { + data = stack->top->data; + stack->top = stack->top->next; + } else { + data = NULL; + } + goto next(data, ...); +} + +__code pop2SingleLinkedStack(struct SingleLinkedStack* stack, __code next(union Data* data, union Data* data1, ...)) { + if (stack->top) { + data = stack->top->data; + stack->top = stack->top->next; + } else { + data = NULL; + } + if (stack->top) { + data1 = stack->top->data; + stack->top = stack->top->next; + } else { + data1 = NULL; + } + goto next(data, data1, ...); +} + + +__code getSingleLinkedStack(struct SingleLinkedStack* stack, __code next(union Data* data, ...)) { + if (stack->top) + data = stack->top->data; + else + data = NULL; + goto next(data, ...); +} + +__code get2SingleLinkedStack(struct SingleLinkedStack* stack, __code next(union Data* data, union Data* data1, ...)) { + if (stack->top) { + data = stack->top->data; + if (stack->top->next) { + data1 = stack->top->next->data; + } else { + data1 = NULL; + } + } else { + data = NULL; + data1 = NULL; + } + goto next(data, data1, ...); +} + +__code isEmptySingleLinkedStack(struct SingleLinkedStack* stack, __code next(...), __code whenEmpty(...)) { + if (stack->top) + goto next(...); + else + goto whenEmpty(...); +} + + + diff -r 000000000000 -r 83f997abf3b5 final_main/src/ThreePlusOne.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/ThreePlusOne.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,8 @@ +open import Relation.Binary.PropositionalEquality +open import nat +open import nat_add + +module three_plus_one where + +3+1 : (S (S (S O))) + (S O) ≡ (S (S (S (S O)))) +3+1 = refl \ No newline at end of file diff -r 000000000000 -r 83f997abf3b5 final_main/src/akashaContext.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/akashaContext.h Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,31 @@ +// Data Segment +union Data { + struct Tree { /* ... 赤黒木の定義と同様 */ } tree; + struct Node { /* ... 赤黒木の定義と同様 */ } node; + + /* for verification */ + struct IterElem { + unsigned int val; + struct IterElem* next; + } iterElem; + struct Iterator { + struct Tree* tree; + struct Iterator* previousDepth; + struct IterElem* head; + struct IterElem* last; + unsigned int iteratedValue; + unsigned long iteratedPointDataNum; + void* iteratedPointHeap; + } iterator; + struct AkashaInfo { + unsigned int minHeight; + unsigned int maxHeight; + struct AkashaNode* akashaNode; + } akashaInfo; + struct AkashaNode { + unsigned int height; + struct Node* node; + struct AkashaNode* nextAkashaNode; + } akashaNode; +}; + diff -r 000000000000 -r 83f997abf3b5 final_main/src/akashaMeta.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/akashaMeta.c Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,31 @@ +__code meta(struct Context* context, enum Code next) { + struct Iterator* iter = &context->data[Iter]->iterator; + + switch (context->prev) { + case GoToPreviousDepth: + if (iter->iteratedPointDataNum == 0) break; + if (iter->iteratedPointHeap == NULL) break; + + unsigned int diff =(unsigned long)context->heap - (unsigned long)iter->iteratedPointHeap; + memset(iter->iteratedPointHeap, 0, diff); + context->dataNum = iter->iteratedPointDataNum; + context->heap = iter->iteratedPointHeap; + break; + default: + break; + } + switch (next) { + case PutAndGoToNextDepth: // with assert check + if (context->prev == GoToPreviousDepth) break; + if (iter->previousDepth == NULL) break; + iter->previousDepth->iteratedPointDataNum = context->dataNum; + iter->previousDepth->iteratedPointHeap = context->heap; + break; + default: + break; + } + + context->prev = next; + goto (context->code[next])(context); +} + diff -r 000000000000 -r 83f997abf3b5 final_main/src/assert.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/assert.c Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,7 @@ +__code verifySpecificationFinish(struct Context* context) { + if (context->data[AkashaInfo]->akashaInfo.maxHeight > 2*context->data[AkashaInfo]->akashaInfo.minHeight) { + context->next = Exit; + goto meta(context, ShowTrace); + } + goto meta(context, DuplicateIterator); +} diff -r 000000000000 -r 83f997abf3b5 final_main/src/atton-master-meta-sample.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/atton-master-meta-sample.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,77 @@ +module atton-master-meta-sample where + +open import Data.Nat +open import Data.Unit +open import Function +Int = ℕ + +record Context : Set where + field + a : Int + b : Int + c : Int + +open import subtype Context as N + +record Meta : Set where + field + context : Context + c' : Int + next : N.CodeSegment Context Context + +open import subtype Meta as M + +instance + _ : N.DataSegment Context + _ = record { get = id ; set = (\_ c -> c) } + _ : M.DataSegment Context + _ = record { get = (\m -> Meta.context m) ; + set = (\m c -> record m {context = c}) } + _ : M.DataSegment Meta + _ = record { get = id ; set = (\_ m -> m) } + + +liftContext : {X Y : Set} {{_ : N.DataSegment X}} {{_ : N.DataSegment Y}} -> N.CodeSegment X Y -> N.CodeSegment Context Context +liftContext {{x}} {{y}} (N.cs f) = N.cs (\c -> N.DataSegment.set y c (f (N.DataSegment.get x c))) + +liftMeta : {X Y : Set} {{_ : M.DataSegment X}} {{_ : M.DataSegment Y}} -> N.CodeSegment X Y -> M.CodeSegment X Y +liftMeta (N.cs f) = M.cs f + + +gotoMeta : {I O : Set} {{_ : N.DataSegment I}} {{_ : N.DataSegment O}} -> M.CodeSegment Meta Meta -> N.CodeSegment I O -> Meta -> Meta +gotoMeta mCode code m = M.exec mCode (record m {next = (liftContext code)}) + +push : M.CodeSegment Meta Meta +push = M.cs (\m -> M.exec (liftMeta (Meta.next m)) (record m {c' = Context.c (Meta.context m)})) + + +record ds0 : Set where + field + a : Int + b : Int + +record ds1 : Set where + field + c : Int + +instance + _ : N.DataSegment ds0 + _ = record { set = (\c d -> record c {a = (ds0.a d) ; b = (ds0.b d)}) + ; get = (\c -> record { a = (Context.a c) ; b = (Context.b c)})} + _ : N.DataSegment ds1 + _ = record { set = (\c d -> record c {c = (ds1.c d)}) + ; get = (\c -> record { c = (Context.c c)})} + +cs2 : N.CodeSegment ds1 ds1 +cs2 = N.cs id + +cs1 : N.CodeSegment ds1 ds1 +cs1 = N.cs (\d -> N.goto cs2 d) + +cs0 : N.CodeSegment ds0 ds1 +cs0 = N.cs (\d -> N.goto cs1 (record {c = (ds0.a d) + (ds0.b d)})) + + +main : Meta +main = gotoMeta push cs0 (record {context = (record {a = 100 ; b = 50 ; c = 70}) ; c' = 0 ; next = (N.cs id)}) +-- record {context = record {a = 100 ; b = 50 ; c = 150} ; c' = 70 ; next = (N.cs id)} diff -r 000000000000 -r 83f997abf3b5 final_main/src/atton-master-sample.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/atton-master-sample.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,46 @@ +module atton-master-sample where + +open import Data.Nat +open import Data.Unit +open import Function +Int = ℕ + +record Context : Set where + field + a : Int + b : Int + c : Int + + +open import subtype Context + + + +record ds0 : Set where + field + a : Int + b : Int + +record ds1 : Set where + field + c : Int + +instance + _ : DataSegment ds0 + _ = record { set = (\c d -> record c {a = (ds0.a d) ; b = (ds0.b d)}) + ; get = (\c -> record { a = (Context.a c) ; b = (Context.b c)})} + _ : DataSegment ds1 + _ = record { set = (\c d -> record c {c = (ds1.c d)}) + ; get = (\c -> record { c = (Context.c c)})} + +cs2 : CodeSegment ds1 ds1 +cs2 = cs id + +cs1 : CodeSegment ds1 ds1 +cs1 = cs (\d -> goto cs2 d) + +cs0 : CodeSegment ds0 ds1 +cs0 = cs (\d -> goto cs1 (record {c = (ds0.a d) + (ds0.b d)})) + +main : ds1 +main = goto cs0 (record {a = 100 ; b = 50}) diff -r 000000000000 -r 83f997abf3b5 final_main/src/cbmc-assert.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/cbmc-assert.c Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,7 @@ +void verifySpecification(struct Context* context, + struct Tree* tree) { + assert(!(maxHeight(tree->root, 1) > + 2*minHeight(tree->root, 1))); + return meta(context, EnumerateInputs); +} + diff -r 000000000000 -r 83f997abf3b5 final_main/src/context.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/context.h Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,47 @@ +/* Context definition */ + +#define ALLOCATE_SIZE 1024 + +enum Code { + Code1, + Code2, + Allocator, +}; + +enum UniqueData { + Allocate, + Tree, +}; + +struct Context { + int codeNum; + __code (**code) (struct Context *); + void* heap_start; + void* heap; + long dataSize; + int dataNum; + union Data **data; +}; + +union Data { + struct Tree { + union Data* root; + union Data* current; + union Data* prev; + int result; + } tree; + struct Node { + int key; + int value; + enum Color { + Red, + Black, + } color; + union Data* left; + union Data* right; + } node; + struct Allocate { + long size; + enum Code next; + } allocate; +}; diff -r 000000000000 -r 83f997abf3b5 final_main/src/enumerate-inputs.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/enumerate-inputs.c Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,13 @@ +void enumerateInputs(struct Context* context, + struct Node* node) { + if (context->loopCount > LIMIT_OF_VERIFICATION_SIZE) { + return meta(context, Exit); + } + + node->key = nondet_int(); + node->value = node->key; + context->next = VerifySpecification; + context->loopCount++; + + return meta(context, Put); +} diff -r 000000000000 -r 83f997abf3b5 final_main/src/escape_agda.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/escape_agda.rb Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,28 @@ +#!/usr/bin/env ruby +# coding: utf-8 + +Suffix = '.agda.replaced' +EscapeChar = '@' +FileName = ARGV.first + +ReplaceTable = { + '->' => 'rightarrow', + '⊔' => 'sqcup', + '∷' => 'text{::}', + '∙' => 'circ', + '≡' => 'equiv', + '×' => 'times', + '⟨' => 'langle', + '⟩' => 'rangle', + '₁' => 'text{1}', + 'ℕ' => 'mathbb{N}', + '∎' => 'blacksquare' +} + +code = File.read(FileName) +ReplaceTable.each do |k, v| + escaped_str = EscapeChar + "$\\#{v}$" + EscapeChar + code = code.gsub(k, escaped_str) +end + +File.write(FileName.sub(/.agda$/, Suffix), code) diff -r 000000000000 -r 83f997abf3b5 final_main/src/expr-term.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/expr-term.txt Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,8 @@ +t ::= + true + false + if t then t else t + 0 + succ t + pred t + iszero t diff -r 000000000000 -r 83f997abf3b5 final_main/src/factrial.cbc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/factrial.cbc Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,29 @@ +__code print_factorial(int prod) +{ + printf("factorial = %d\n", prod); + exit(0); +} + +__code factorial0(int prod, int x) +{ + if (x >= 1) { + goto factorial0(prod*x, x-1); + } else { + goto print_factorial(prod); + } + +} + +__code factorial(int x) +{ + goto factorial0(1, x); +} + +int main(int argc, char **argv) +{ + int i; + i = atoi(argv[1]); + + goto factorial(i); +} + diff -r 000000000000 -r 83f997abf3b5 final_main/src/getMinHeight.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/getMinHeight.c Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,51 @@ +__code getMinHeight_stub(struct Context* context) { + goto getMinHeight(context, &context->data[Allocate]->allocate, &context->data[AkashaInfo]->akashaInfo); +} + +__code getMinHeight(struct Context* context, struct Allocate* allocate, struct AkashaInfo* akashaInfo) { + const struct AkashaNode* akashaNode = akashaInfo->akashaNode; + + if (akashaNode == NULL) { + allocate->size = sizeof(struct AkashaNode); + allocator(context); + akashaInfo->akashaNode = (struct AkashaNode*)context->data[context->dataNum]; + + akashaInfo->akashaNode->height = 1; + akashaInfo->akashaNode->node = context->data[Tree]->tree.root; + + goto getMaxHeight_stub(context); + } + + const struct Node* node = akashaInfo->akashaNode->node; + if (node->left == NULL && node->right == NULL) { + if (akashaInfo->minHeight > akashaNode->height) { + akashaInfo->minHeight = akashaNode->height; + akashaInfo->akashaNode = akashaNode->nextAkashaNode; + goto getMinHeight_stub(context); + } + } + + akashaInfo->akashaNode = akashaInfo->akashaNode->nextAkashaNode; + + if (node->left != NULL) { + allocate->size = sizeof(struct AkashaNode); + allocator(context); + struct AkashaNode* left = (struct AkashaNode*)context->data[context->dataNum]; + left->height = akashaNode->height+1; + left->node = node->left; + left->nextAkashaNode = akashaInfo->akashaNode; + akashaInfo->akashaNode = left; + } + + if (node->right != NULL) { + allocate->size = sizeof(struct AkashaNode); + allocator(context); + struct AkashaNode* right = (struct AkashaNode*)context->data[context->dataNum]; + right->height = akashaNode->height+1; + right->node = node->right; + right->nextAkashaNode = akashaInfo->akashaNode; + akashaInfo->akashaNode = right; + } + + goto getMinHeight_stub(context); +} diff -r 000000000000 -r 83f997abf3b5 final_main/src/goto.cbc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/goto.cbc Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,7 @@ +__code cs0(int a, int b){ + goto cs1(a+b); +} + +__code cs1(int c){ + goto cs2(c); +} diff -r 000000000000 -r 83f997abf3b5 final_main/src/initLLRBContext.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/initLLRBContext.c Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,53 @@ +__code initLLRBContext(struct Context* context, int num) { + context->heapLimit = sizeof(union Data)*ALLOCATE_SIZE; + context->code = malloc(sizeof(__code*)*ALLOCATE_SIZE); + context->data = malloc(sizeof(union Data*)*ALLOCATE_SIZE); + context->heapStart = malloc(context->heapLimit); + + context->codeNum = Exit; + + context->code[Code1] = code1_stub; + context->code[Code2] = code2_stub; + context->code[Code3] = code3_stub; + context->code[Code4] = code4; + context->code[Code5] = code5; + context->code[Find] = find; + context->code[Not_find] = not_find; + context->code[Code6] = code6; + context->code[Put] = put_stub; + context->code[Replace] = replaceNode_stub; + context->code[Insert] = insertNode_stub; + context->code[RotateL] = rotateLeft_stub; + context->code[RotateR] = rotateRight_stub; + context->code[InsertCase1] = insert1_stub; + context->code[InsertCase2] = insert2_stub; + context->code[InsertCase3] = insert3_stub; + context->code[InsertCase4] = insert4_stub; + context->code[InsertCase4_1] = insert4_1_stub; + context->code[InsertCase4_2] = insert4_2_stub; + context->code[InsertCase5] = insert5_stub; + context->code[StackClear] = stackClear_stub; + context->code[Exit] = exit_code; + + context->heap = context->heapStart; + + context->data[Allocate] = context->heap; + context->heap += sizeof(struct Allocate); + + context->data[Tree] = context->heap; + context->heap += sizeof(struct Tree); + + context->data[Node] = context->heap; + context->heap += sizeof(struct Node); + + context->dataNum = Node; + + struct Tree* tree = &context->data[Tree]->tree; + tree->root = 0; + tree->current = 0; + tree->deleted = 0; + + context->node_stack = stack_init(sizeof(struct Node*), 100); + context->code_stack = stack_init(sizeof(enum Code), 100); +} + diff -r 000000000000 -r 83f997abf3b5 final_main/src/insertCase2.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/insertCase2.c Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,17 @@ +__code insertCase2(struct Context* context, struct Node* current) { + struct Node* parent; + stack_pop(context->node_stack, &parent); + + if (parent->color == Black) { + stack_pop(context->code_stack, &context->next); + goto meta(context, context->next); + } + + stack_push(context->node_stack, &parent); + goto meta(context, InsertCase3); +} + +__code insert2_stub(struct Context* context) { + goto insertCase2(context, context->data[Tree]->tree.current); +} + diff -r 000000000000 -r 83f997abf3b5 final_main/src/interface.cbc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/interface.cbc Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,15 @@ +typedef struct Stack{ + union Data* stack; + union Data* data; + union Data* data1; + + __code whenEmpty(...); + __code clear(Impl* stack,__code next(...)); + __code push(Impl* stack,Type* data, __code next(...)); + __code pop(Impl* stack, __code next(Type* data, ...)); + __code pop2(Impl* stack, __code next(Type* data, Type* data1, ...)); + __code isEmpty(Impl* stack, __code next(...), __code whenEmpty(...)); + __code get(Impl* stack, __code next(Type* data, ...)); + __code get2(Impl* stack, __code next(Type* data, Type* data1, ...)); + __code next(...); +} Stack; diff -r 000000000000 -r 83f997abf3b5 final_main/src/meta.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/meta.c Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,4 @@ +__code meta(struct Context* context, enum Code next) { + goto (context->code[next])(context); +} + diff -r 000000000000 -r 83f997abf3b5 final_main/src/rbtreeContext.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/rbtreeContext.h Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,50 @@ +// DataSegments for Red-Black Tree +union Data { + struct Comparable { // interface + enum Code compare; + union Data* data; + } compare; + struct Count { + enum Code next; + long i; + } count; + struct Tree { + enum Code next; + struct Node* root; + struct Node* current; + struct Node* deleted; + int result; + } tree; + struct Node { + // need to tree + enum Code next; + int key; // comparable data segment + int value; + struct Node* left; + struct Node* right; + // need to balancing + enum Color { + Red, + Black, + } color; + } node; + struct Allocate { + enum Code next; + long size; + } allocate; +}; + + +// Meta DataSegment +struct Context { + enum Code next; + int codeNum; + __code (**code) (struct Context*); + void* heapStart; + void* heap; + long heapLimit; + int dataNum; + stack_ptr code_stack; + stack_ptr node_stack; + union Data **data; +}; diff -r 000000000000 -r 83f997abf3b5 final_main/src/redBlackTreeTest.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/redBlackTreeTest.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,196 @@ +module redBlackTreeTest where + +open import RedBlackTree +open import stack +open import Level hiding (zero) + +open import Data.Nat + +open Tree +open Node +open RedBlackTree.RedBlackTree +open Stack + +-- tests + +putTree1 : {n m : Level } {a k : Set n} {t : Set m} -> RedBlackTree {n} {m} {t} a k -> k -> a -> (RedBlackTree {n} {m} {t} a k -> t) -> t +putTree1 {n} {m} {a} {k} {t} tree k1 value next with (root tree) +... | Nothing = next (record tree {root = Just (leafNode k1 value) }) +... | Just n2 = clearSingleLinkedStack (nodeStack tree) (\ s -> findNode tree s (leafNode k1 value) n2 (\ tree1 s n1 -> replaceNode tree1 s n1 next)) + +open import Relation.Binary.PropositionalEquality +open import Relation.Binary.Core +open import Function + + +check1 : {m : Level } (n : Maybe (Node ℕ ℕ)) -> ℕ -> Bool {m} +check1 Nothing _ = False +check1 (Just n) x with Data.Nat.compare (value n) x +... | equal _ = True +... | _ = False + +check2 : {m : Level } (n : Maybe (Node ℕ ℕ)) -> ℕ -> Bool {m} +check2 Nothing _ = False +check2 (Just n) x with compare2 (value n) x +... | EQ = True +... | _ = False + +test1 : putTree1 {_} {_} {ℕ} {ℕ} (createEmptyRedBlackTreeℕ ℕ {Set Level.zero} ) 1 1 ( \t -> getRedBlackTree t 1 ( \t x -> check2 x 1 ≡ True )) +test1 = refl + +test2 : putTree1 {_} {_} {ℕ} {ℕ} (createEmptyRedBlackTreeℕ ℕ {Set Level.zero} ) 1 1 ( + \t -> putTree1 t 2 2 ( + \t -> getRedBlackTree t 1 ( + \t x -> check2 x 1 ≡ True ))) +test2 = refl + +open ≡-Reasoning +test3 : putTree1 {_} {_} {ℕ} {ℕ} (createEmptyRedBlackTreeℕ ℕ {Set Level.zero}) 1 1 + $ \t -> putTree1 t 2 2 + $ \t -> putTree1 t 3 3 + $ \t -> putTree1 t 4 4 + $ \t -> getRedBlackTree t 1 + $ \t x -> check2 x 1 ≡ True +test3 = begin + check2 (Just (record {key = 1 ; value = 1 ; color = Black ; left = Nothing ; right = Just (leafNode 2 2)})) 1 + ≡⟨ refl ⟩ + True + ∎ + +test31 = putTree1 {_} {_} {ℕ} {ℕ} (createEmptyRedBlackTreeℕ ℕ ) 1 1 + $ \t -> putTree1 t 2 2 + $ \t -> putTree1 t 3 3 + $ \t -> putTree1 t 4 4 + $ \t -> getRedBlackTree t 4 + $ \t x -> x + +-- test5 : Maybe (Node ℕ ℕ) +test5 = putTree1 {_} {_} {ℕ} {ℕ} (createEmptyRedBlackTreeℕ ℕ ) 4 4 + $ \t -> putTree1 t 6 6 + $ \t0 -> clearSingleLinkedStack (nodeStack t0) + $ \s -> findNode1 t0 s (leafNode 3 3) ( root t0 ) + $ \t1 s n1 -> replaceNode t1 s n1 + $ \t -> getRedBlackTree t 3 + -- $ \t x -> SingleLinkedStack.top (stack s) + -- $ \t x -> n1 + $ \t x -> root t + where + findNode1 : {n m : Level } {a k : Set n} {t : Set m} -> RedBlackTree {n} {m} {t} a k -> SingleLinkedStack (Node a k) -> (Node a k) -> (Maybe (Node a k)) -> (RedBlackTree {n} {m} {t} a k -> SingleLinkedStack (Node a k) -> Node a k -> t) -> t + findNode1 t s n1 Nothing next = next t s n1 + findNode1 t s n1 ( Just n2 ) next = findNode t s n1 n2 next + +-- test51 : putTree1 {_} {_} {ℕ} {ℕ} {_} {Maybe (Node ℕ ℕ)} (createEmptyRedBlackTreeℕ ℕ {Set Level.zero} ) 1 1 $ \t -> +-- putTree1 t 2 2 $ \t -> putTree1 t 3 3 $ \t -> root t ≡ Just (record { key = 1; value = 1; left = Just (record { key = 2 ; value = 2 } ); right = Nothing} ) +-- test51 = refl + +test6 : Maybe (Node ℕ ℕ) +test6 = root (createEmptyRedBlackTreeℕ {_} ℕ {Maybe (Node ℕ ℕ)}) + + +test7 : Maybe (Node ℕ ℕ) +test7 = clearSingleLinkedStack (nodeStack tree2) (\ s -> replaceNode tree2 s n2 (\ t -> root t)) + where + tree2 = createEmptyRedBlackTreeℕ {_} ℕ {Maybe (Node ℕ ℕ)} + k1 = 1 + n2 = leafNode 0 0 + value1 = 1 + +test8 : Maybe (Node ℕ ℕ) +test8 = putTree1 {_} {_} {ℕ} {ℕ} (createEmptyRedBlackTreeℕ ℕ) 1 1 + $ \t -> putTree1 t 2 2 (\ t -> root t) + + +test9 : putRedBlackTree {_} {_} {ℕ} {ℕ} (createEmptyRedBlackTreeℕ ℕ {Set Level.zero} ) 1 1 ( \t -> getRedBlackTree t 1 ( \t x -> check2 x 1 ≡ True )) +test9 = refl + +test10 : putRedBlackTree {_} {_} {ℕ} {ℕ} (createEmptyRedBlackTreeℕ ℕ {Set Level.zero} ) 1 1 ( + \t -> putRedBlackTree t 2 2 ( + \t -> getRedBlackTree t 1 ( + \t x -> check2 x 1 ≡ True ))) +test10 = refl + +test11 = putRedBlackTree {_} {_} {ℕ} {ℕ} (createEmptyRedBlackTreeℕ ℕ) 1 1 + $ \t -> putRedBlackTree t 2 2 + $ \t -> putRedBlackTree t 3 3 + $ \t -> getRedBlackTree t 2 + $ \t x -> root t + + +redBlackInSomeState : { m : Level } (a : Set Level.zero) (n : Maybe (Node a ℕ)) {t : Set m} -> RedBlackTree {Level.zero} {m} {t} a ℕ +redBlackInSomeState {m} a n {t} = record { root = n ; nodeStack = emptySingleLinkedStack ; compare = compare2 } + +-- compare2 : (x y : ℕ ) -> compareresult +-- compare2 zero zero = eq +-- compare2 (suc _) zero = gt +-- compare2 zero (suc _) = lt +-- compare2 (suc x) (suc y) = compare2 x y + +putTest1Lemma2 : (k : ℕ) -> compare2 k k ≡ EQ +putTest1Lemma2 zero = refl +putTest1Lemma2 (suc k) = putTest1Lemma2 k + +putTest1Lemma1 : (x y : ℕ) -> compareℕ x y ≡ compare2 x y +putTest1Lemma1 zero zero = refl +putTest1Lemma1 (suc m) zero = refl +putTest1Lemma1 zero (suc n) = refl +putTest1Lemma1 (suc m) (suc n) with Data.Nat.compare m n +putTest1Lemma1 (suc .m) (suc .(Data.Nat.suc m + k)) | less m k = lemma1 m + where + lemma1 : (m : ℕ) -> LT ≡ compare2 m (ℕ.suc (m + k)) + lemma1 zero = refl + lemma1 (suc y) = lemma1 y +putTest1Lemma1 (suc .m) (suc .m) | equal m = lemma1 m + where + lemma1 : (m : ℕ) -> EQ ≡ compare2 m m + lemma1 zero = refl + lemma1 (suc y) = lemma1 y +putTest1Lemma1 (suc .(Data.Nat.suc m + k)) (suc .m) | greater m k = lemma1 m + where + lemma1 : (m : ℕ) -> GT ≡ compare2 (ℕ.suc (m + k)) m + lemma1 zero = refl + lemma1 (suc y) = lemma1 y + +putTest1Lemma3 : (k : ℕ) -> compareℕ k k ≡ EQ +putTest1Lemma3 k = trans (putTest1Lemma1 k k) ( putTest1Lemma2 k ) + +compareLemma1 : {x y : ℕ} -> compare2 x y ≡ EQ -> x ≡ y +compareLemma1 {zero} {zero} refl = refl +compareLemma1 {zero} {suc _} () +compareLemma1 {suc _} {zero} () +compareLemma1 {suc x} {suc y} eq = cong ( \z -> ℕ.suc z ) ( compareLemma1 ( trans lemma2 eq ) ) + where + lemma2 : compare2 (ℕ.suc x) (ℕ.suc y) ≡ compare2 x y + lemma2 = refl + + +putTest1 :{ m : Level } (n : Maybe (Node ℕ ℕ)) + -> (k : ℕ) (x : ℕ) + -> putTree1 {_} {_} {ℕ} {ℕ} (redBlackInSomeState {_} ℕ n {Set Level.zero}) k x + (\ t -> getRedBlackTree t k (\ t x1 -> check2 x1 x ≡ True)) +putTest1 n k x with n +... | Just n1 = lemma2 ( record { top = Nothing } ) + where + lemma2 : (s : SingleLinkedStack (Node ℕ ℕ) ) -> putTree1 (record { root = Just n1 ; nodeStack = s ; compare = compare2 }) k x (λ t → + GetRedBlackTree.checkNode t k (λ t₁ x1 → check2 x1 x ≡ True) (root t)) + lemma2 s with compare2 k (key n1) + ... | EQ = lemma3 {!!} + where + lemma3 : compare2 k (key n1) ≡ EQ -> getRedBlackTree {_} {_} {ℕ} {ℕ} {Set Level.zero} ( record { root = Just ( record { + key = key n1 ; value = x ; right = right n1 ; left = left n1 ; color = Black + } ) ; nodeStack = s ; compare = λ x₁ y → compare2 x₁ y } ) k ( \ t x1 -> check2 x1 x ≡ True) + lemma3 eq with compare2 x x | putTest1Lemma2 x + ... | EQ | refl with compare2 k (key n1) | eq + ... | EQ | refl with compare2 x x | putTest1Lemma2 x + ... | EQ | refl = refl + ... | GT = {!!} + ... | LT = {!!} + +... | Nothing = lemma1 + where + lemma1 : getRedBlackTree {_} {_} {ℕ} {ℕ} {Set Level.zero} ( record { root = Just ( record { + key = k ; value = x ; right = Nothing ; left = Nothing ; color = Red + } ) ; nodeStack = record { top = Nothing } ; compare = λ x₁ y → compare2 x₁ y } ) k + ( \ t x1 -> check2 x1 x ≡ True) + lemma1 with compare2 k k | putTest1Lemma2 k + ... | EQ | refl with compare2 x x | putTest1Lemma2 x + ... | EQ | refl = refl diff -r 000000000000 -r 83f997abf3b5 final_main/src/singleLinkedStack.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/singleLinkedStack.c Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,18 @@ +__code pushSingleLinkedStack(struct SingleLinkedStack* stack,union Data* data, __code next(...)) { + Element* element = new Element(); + element->next = stack->top; + element->data = data; + stack->top = element; + goto next(...); +} + +__code popSingleLinkedStack(struct SingleLinkedStack* stack, __code next(union Data* data, ...)) { + if (stack->top) { + data = stack->top->data; + stack->top = stack->top->next; + } else { + data = NULL; + } + goto next(data, ...); +} + diff -r 000000000000 -r 83f997abf3b5 final_main/src/singleLinkedStackInterface.cbc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/singleLinkedStackInterface.cbc Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,14 @@ +Stack* createSingleLinkedStack(struct Context* context) { + struct Stack* stack = new Stack(); + struct SingleLinkedStack* singleLinkedStack = new SingleLinkedStack(); + stack->stack = (union Data*)singleLinkedStack; + singleLinkedStack->top = NULL; + stack->push = C_pushSingleLinkedStack; + stack->pop = C_popSingleLinkedStack; + stack->pop2 = C_pop2SingleLinkedStack; + stack->get = C_getSingleLinkedStack; + stack->get2 = C_get2SingleLinkedStack; + stack->isEmpty = C_isEmptySingleLinkedStack; + stack->clear = C_clearSingleLinkedStack; + return stack; +} \ No newline at end of file diff -r 000000000000 -r 83f997abf3b5 final_main/src/stack-product.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/stack-product.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,158 @@ +module stack-product where + +open import product +open import Data.Product +open import Data.Nat +open import Function using (id) +open import Relation.Binary.PropositionalEquality + +-- definition based from Gears(209:5708390a9d88) src/parallel_execution +goto = executeCS + +data Bool : Set where + True : Bool + False : Bool + +data Maybe (a : Set) : Set where + Nothing : Maybe a + Just : a -> Maybe a + + +record Stack {a t : Set} (stackImpl : Set) : Set where + field + stack : stackImpl + push : CodeSegment (stackImpl × a × (CodeSegment stackImpl t)) t + pop : CodeSegment (stackImpl × (CodeSegment (stackImpl × Maybe a) t)) t + + +data Element (a : Set) : Set where + cons : a -> Maybe (Element a) -> Element a + +datum : {a : Set} -> Element a -> a +datum (cons a _) = a + +next : {a : Set} -> Element a -> Maybe (Element a) +next (cons _ n) = n + +record SingleLinkedStack (a : Set) : Set where + field + top : Maybe (Element a) +open SingleLinkedStack + +emptySingleLinkedStack : {a : Set} -> SingleLinkedStack a +emptySingleLinkedStack = record {top = Nothing} + + + + +pushSingleLinkedStack : {a t : Set} -> CodeSegment ((SingleLinkedStack a) × a × (CodeSegment (SingleLinkedStack a) t)) t +pushSingleLinkedStack = cs push + where + push : {a t : Set} -> ((SingleLinkedStack a) × a × (CodeSegment (SingleLinkedStack a) t)) -> t + push (stack , datum , next) = goto next stack1 + where + element = cons datum (top stack) + stack1 = record {top = Just element} + +popSingleLinkedStack : {a t : Set} -> CodeSegment (SingleLinkedStack a × (CodeSegment (SingleLinkedStack a × Maybe a) t)) t +popSingleLinkedStack = cs pop + where + pop : {a t : Set} -> (SingleLinkedStack a × (CodeSegment (SingleLinkedStack a × Maybe a) t)) -> t + pop (record { top = Nothing } , nextCS) = goto nextCS (emptySingleLinkedStack , Nothing) + pop (record { top = Just x } , nextCS) = goto nextCS (stack1 , (Just datum1)) + where + datum1 = datum x + stack1 = record { top = (next x) } + + + + + +createSingleLinkedStack : {a b : Set} -> Stack {a} {b} (SingleLinkedStack a) +createSingleLinkedStack = record { stack = emptySingleLinkedStack + ; push = pushSingleLinkedStack + ; pop = popSingleLinkedStack + } + + + + +test01 : {a : Set} -> CodeSegment (SingleLinkedStack a × Maybe a) Bool +test01 = cs test01' + where + test01' : {a : Set} -> (SingleLinkedStack a × Maybe a) -> Bool + test01' (record { top = Nothing } , _) = False + test01' (record { top = Just x } , _) = True + + +test02 : {a : Set} -> CodeSegment (SingleLinkedStack a) (SingleLinkedStack a × Maybe a) +test02 = cs test02' + where + test02' : {a : Set} -> SingleLinkedStack a -> (SingleLinkedStack a × Maybe a) + test02' stack = goto popSingleLinkedStack (stack , (cs id)) + + +test03 : {a : Set} -> CodeSegment a (SingleLinkedStack a) +test03 = cs test03' + where + test03' : {a : Set} -> a -> SingleLinkedStack a + test03' a = goto pushSingleLinkedStack (emptySingleLinkedStack , a , (cs id)) + + +lemma : {A : Set} {a : A} -> goto (test03 ◎ test02 ◎ test01) a ≡ False +lemma = refl + + +n-push : {A : Set} {a : A} -> CodeSegment (ℕ × SingleLinkedStack A) (ℕ × SingleLinkedStack A) +n-push {A} {a} = cs (push {A} {a}) + where + push : {A : Set} {a : A} -> (ℕ × SingleLinkedStack A) -> (ℕ × SingleLinkedStack A) + push {A} {a} (zero , s) = (zero , s) + push {A} {a} (suc n , s) = goto pushSingleLinkedStack (s , a , {!!} {- n-push -}) -- needs subtype + + +{- + +n-push : {A : Set} {a : A} -> Nat -> SingleLinkedStack A -> SingleLinkedStack A +n-push zero s = s +n-push {A} {a} (suc n) s = pushSingleLinkedStack (n-push {A} {a} n s) a (\s -> s) + +n-pop : {A : Set} {a : A} -> Nat -> SingleLinkedStack A -> SingleLinkedStack A +n-pop zero s = s +n-pop {A} {a} (suc n) s = popSingleLinkedStack (n-pop {A} {a} n s) (\s _ -> s) + +open ≡-Reasoning + +push-pop-equiv : {A : Set} {a : A} (s : SingleLinkedStack A) -> popSingleLinkedStack (pushSingleLinkedStack s a (\s -> s)) (\s _ -> s) ≡ s +push-pop-equiv s = refl + +push-and-n-pop : {A : Set} {a : A} (n : Nat) (s : SingleLinkedStack A) -> n-pop {A} {a} (suc n) (pushSingleLinkedStack s a id) ≡ n-pop {A} {a} n s +push-and-n-pop zero s = refl +push-and-n-pop {A} {a} (suc n) s = begin + n-pop (suc (suc n)) (pushSingleLinkedStack s a id) + ≡⟨ refl ⟩ + popSingleLinkedStack (n-pop (suc n) (pushSingleLinkedStack s a id)) (\s _ -> s) + ≡⟨ cong (\s -> popSingleLinkedStack s (\s _ -> s)) (push-and-n-pop n s) ⟩ + popSingleLinkedStack (n-pop n s) (\s _ -> s) + ≡⟨ refl ⟩ + n-pop (suc n) s + ∎ + + +n-push-pop-equiv : {A : Set} {a : A} (n : Nat) (s : SingleLinkedStack A) -> (n-pop {A} {a} n (n-push {A} {a} n s)) ≡ s +n-push-pop-equiv zero s = refl +n-push-pop-equiv {A} {a} (suc n) s = begin + n-pop (suc n) (n-push (suc n) s) + ≡⟨ refl ⟩ + n-pop (suc n) (pushSingleLinkedStack (n-push n s) a (\s -> s)) + ≡⟨ push-and-n-pop n (n-push n s) ⟩ + n-pop n (n-push n s) + ≡⟨ n-push-pop-equiv n s ⟩ + s + ∎ + + +n-push-pop-equiv-empty : {A : Set} {a : A} -> (n : Nat) -> n-pop {A} {a} n (n-push {A} {a} n emptySingleLinkedStack) ≡ emptySingleLinkedStack +n-push-pop-equiv-empty n = n-push-pop-equiv n emptySingleLinkedStack +-} + diff -r 000000000000 -r 83f997abf3b5 final_main/src/stack-subtype-sample.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/stack-subtype-sample.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,212 @@ +module stack-subtype-sample where + +open import Level renaming (suc to S ; zero to O) +open import Function +open import Data.Nat +open import Data.Maybe +open import Relation.Binary.PropositionalEquality + +open import stack-subtype ℕ +open import subtype Context as N +open import subtype Meta as M + + +record Num : Set where + field + num : ℕ + +instance + NumIsNormalDataSegment : N.DataSegment Num + NumIsNormalDataSegment = record { get = (\c -> record { num = Context.n c}) + ; set = (\c n -> record c {n = Num.num n})} + NumIsMetaDataSegment : M.DataSegment Num + NumIsMetaDataSegment = record { get = (\m -> record {num = Context.n (Meta.context m)}) + ; set = (\m n -> record m {context = record (Meta.context m) {n = Num.num n}})} + + +plus3 : Num -> Num +plus3 record { num = n } = record {num = n + 3} + +plus3CS : N.CodeSegment Num Num +plus3CS = N.cs plus3 + + + +plus5AndPushWithPlus3 : {mc : Meta} {{_ : N.DataSegment Num}} + -> M.CodeSegment Num (Meta) +plus5AndPushWithPlus3 {mc} {{nn}} = M.cs (\n -> record {context = con n ; nextCS = (liftContext {{nn}} {{nn}} plus3CS) ; stack = st} ) + where + co = Meta.context mc + con : Num -> Context + con record { num = num } = N.DataSegment.set nn co record {num = num + 5} + st = Meta.stack mc + + + + +push-sample : {{_ : N.DataSegment Num}} {{_ : M.DataSegment Num}} -> Meta +push-sample {{nd}} {{md}} = M.exec {{md}} (plus5AndPushWithPlus3 {mc} {{nd}}) mc + where + con = record { n = 4 ; element = just 0} + code = N.cs (\c -> c) + mc = record {context = con ; stack = emptySingleLinkedStack ; nextCS = code} + + +push-sample-equiv : push-sample ≡ record { nextCS = liftContext plus3CS + ; stack = record { top = nothing} + ; context = record { n = 9} } +push-sample-equiv = refl + + +pushed-sample : {m : Meta} {{_ : N.DataSegment Num}} {{_ : M.DataSegment Num}} -> Meta +pushed-sample {m} {{nd}} {{md}} = M.exec {{md}} (M.csComp {m} {{md}} pushSingleLinkedStackCS (plus5AndPushWithPlus3 {mc} {{nd}})) mc + where + con = record { n = 4 ; element = just 0} + code = N.cs (\c -> c) + mc = record {context = con ; stack = emptySingleLinkedStack ; nextCS = code} + + + +pushed-sample-equiv : {m : Meta} -> + pushed-sample {m} ≡ record { nextCS = liftContext plus3CS + ; stack = record { top = just (cons 0 nothing) } + ; context = record { n = 12} } +pushed-sample-equiv = refl + + + +pushNum : N.CodeSegment Context Context +pushNum = N.cs pn + where + pn : Context -> Context + pn record { n = n } = record { n = pred n ; element = just n} + + +pushOnce : Meta -> Meta +pushOnce m = M.exec pushSingleLinkedStackCS m + +n-push : {m : Meta} {{_ : M.DataSegment Meta}} (n : ℕ) -> M.CodeSegment Meta Meta +n-push {{mm}} (zero) = M.cs {{mm}} {{mm}} id +n-push {m} {{mm}} (suc n) = M.cs {{mm}} {{mm}} (\m -> M.exec {{mm}} {{mm}} (n-push {m} {{mm}} n) (pushOnce m)) + +popOnce : Meta -> Meta +popOnce m = M.exec popSingleLinkedStackCS m + +n-pop : {m : Meta} {{_ : M.DataSegment Meta}} (n : ℕ) -> M.CodeSegment Meta Meta +n-pop {{mm}} (zero) = M.cs {{mm}} {{mm}} id +n-pop {m} {{mm}} (suc n) = M.cs {{mm}} {{mm}} (\m -> M.exec {{mm}} {{mm}} (n-pop {m} {{mm}} n) (popOnce m)) + + + +initMeta : ℕ -> Maybe ℕ -> N.CodeSegment Context Context -> Meta +initMeta n mn code = record { context = record { n = n ; element = mn} + ; stack = emptySingleLinkedStack + ; nextCS = code + } + +n-push-cs-exec = M.exec (n-push {meta} 3) meta + where + meta = (initMeta 5 (just 9) pushNum) + + +n-push-cs-exec-equiv : n-push-cs-exec ≡ record { nextCS = pushNum + ; context = record {n = 2 ; element = just 3} + ; stack = record {top = just (cons 4 (just (cons 5 (just (cons 9 nothing)))))}} +n-push-cs-exec-equiv = refl + + +n-pop-cs-exec = M.exec (n-pop {meta} 4) meta + where + meta = record { nextCS = N.cs id + ; context = record { n = 0 ; element = nothing} + ; stack = record {top = just (cons 9 (just (cons 8 (just (cons 7 (just (cons 6 (just (cons 5 nothing)))))))))} + } + +n-pop-cs-exec-equiv : n-pop-cs-exec ≡ record { nextCS = N.cs id + ; context = record { n = 0 ; element = just 6} + ; stack = record { top = just (cons 5 nothing)} + } + +n-pop-cs-exec-equiv = refl + + +open ≡-Reasoning + +id-meta : ℕ -> ℕ -> SingleLinkedStack ℕ -> Meta +id-meta n e s = record { context = record {n = n ; element = just e} + ; nextCS = (N.cs id) ; stack = s} + +exec-comp : (f g : M.CodeSegment Meta Meta) (m : Meta) -> M.exec (M.csComp {m} f g) m ≡ M.exec f (M.exec g m) +exec-comp (M.cs x) (M.cs _) m = refl + + +push-pop-type : ℕ -> ℕ -> ℕ -> Element ℕ -> Set₁ +push-pop-type n e x s = M.exec (M.csComp {meta} (M.cs popOnce) (M.cs pushOnce)) meta ≡ meta + where + meta = id-meta n e record {top = just (cons x (just s))} + +push-pop : (n e x : ℕ) -> (s : Element ℕ) -> push-pop-type n e x s +push-pop n e x s = refl + + + +pop-n-push-type : ℕ -> ℕ -> ℕ -> SingleLinkedStack ℕ -> Set₁ +pop-n-push-type n cn ce s = M.exec (M.csComp {meta} (M.cs popOnce) (n-push {meta} (suc n))) meta + ≡ M.exec (n-push {meta} n) meta + where + meta = id-meta cn ce s + +pop-n-push : (n cn ce : ℕ) -> (s : SingleLinkedStack ℕ) -> pop-n-push-type n cn ce s + +pop-n-push zero cn ce s = refl +pop-n-push (suc n) cn ce s = begin + M.exec (M.csComp {id-meta cn ce s} (M.cs popOnce) (n-push {id-meta cn ce (record {top = just (cons ce (SingleLinkedStack.top s))})} (suc (suc n)))) (id-meta cn ce s) + ≡⟨ refl ⟩ + M.exec (M.csComp {id-meta cn ce s} (M.cs popOnce) (M.csComp {id-meta cn ce s} (n-push {id-meta cn ce (record {top = just (cons ce (SingleLinkedStack.top s))})} (suc n)) (M.cs pushOnce))) (id-meta cn ce s) + ≡⟨ exec-comp (M.cs popOnce) (M.csComp {id-meta cn ce s} (n-push {id-meta cn ce (record {top = just (cons ce (SingleLinkedStack.top s))})} (suc n)) (M.cs pushOnce)) (id-meta cn ce s) ⟩ + M.exec (M.cs popOnce) (M.exec (M.csComp {id-meta cn ce s} (n-push {id-meta cn ce (record {top = just (cons ce (SingleLinkedStack.top s))})} (suc n)) (M.cs pushOnce)) (id-meta cn ce s)) + ≡⟨ cong (\x -> M.exec (M.cs popOnce) x) (exec-comp (n-push {id-meta cn ce (record {top = just (cons ce (SingleLinkedStack.top s))})} (suc n)) (M.cs pushOnce) (id-meta cn ce s)) ⟩ + M.exec (M.cs popOnce) (M.exec (n-push {id-meta cn ce (record {top = just (cons ce (SingleLinkedStack.top s))})} (suc n))(M.exec (M.cs pushOnce) (id-meta cn ce s))) + ≡⟨ refl ⟩ + M.exec (M.cs popOnce) (M.exec (n-push {id-meta cn ce (record {top = just (cons ce (SingleLinkedStack.top s))})} (suc n)) (id-meta cn ce (record {top = just (cons ce (SingleLinkedStack.top s))}))) + ≡⟨ sym (exec-comp (M.cs popOnce) (n-push {id-meta cn ce (record {top = just (cons ce (SingleLinkedStack.top s))})} (suc n)) (id-meta cn ce (record {top = just (cons ce (SingleLinkedStack.top s))}))) ⟩ + M.exec (M.csComp {id-meta cn ce s} (M.cs popOnce) (n-push {id-meta cn ce (record {top = just (cons ce (SingleLinkedStack.top s))})} (suc n))) (id-meta cn ce (record {top = just (cons ce (SingleLinkedStack.top s))})) + ≡⟨ pop-n-push n cn ce (record {top = just (cons ce (SingleLinkedStack.top s))}) ⟩ + M.exec (n-push n) (id-meta cn ce (record {top = just (cons ce (SingleLinkedStack.top s))})) + ≡⟨ refl ⟩ + M.exec (n-push n) (pushOnce (id-meta cn ce s)) + ≡⟨ refl ⟩ + M.exec (n-push n) (M.exec (M.cs pushOnce) (id-meta cn ce s)) + ≡⟨ refl ⟩ + M.exec (n-push {id-meta cn ce s} (suc n)) (id-meta cn ce s) + ∎ + + + +n-push-pop-type : ℕ -> ℕ -> ℕ -> SingleLinkedStack ℕ -> Set₁ +n-push-pop-type n cn ce st = M.exec (M.csComp {meta} (n-pop {meta} n) (n-push {meta} n)) meta ≡ meta + where + meta = id-meta cn ce st + +n-push-pop : (n cn ce : ℕ) -> (s : SingleLinkedStack ℕ) -> n-push-pop-type n cn ce s +n-push-pop zero cn ce s = refl +n-push-pop (suc n) cn ce s = begin + M.exec (M.csComp {id-meta cn ce s} (n-pop {id-meta cn ce s} (suc n)) (n-push {id-meta cn ce s} (suc n))) (id-meta cn ce s) + ≡⟨ refl ⟩ + M.exec (M.csComp {id-meta cn ce s} (M.cs (\m -> M.exec (n-pop {id-meta cn ce s} n) (popOnce m))) (n-push {id-meta cn ce s} (suc n))) (id-meta cn ce s) + ≡⟨ exec-comp (M.cs (\m -> M.exec (n-pop n) (popOnce m))) (n-push {id-meta cn ce s} (suc n)) (id-meta cn ce s) ⟩ + M.exec (M.cs (\m -> M.exec (n-pop {id-meta cn ce s} n) (popOnce m))) (M.exec (n-push {id-meta cn ce s} (suc n)) (id-meta cn ce s)) + ≡⟨ refl ⟩ + M.exec (n-pop n) (popOnce (M.exec (n-push {id-meta cn ce s} (suc n)) (id-meta cn ce s))) + ≡⟨ refl ⟩ + M.exec (n-pop n) (M.exec (M.cs popOnce) (M.exec (n-push {id-meta cn ce s} (suc n)) (id-meta cn ce s))) + ≡⟨ cong (\x -> M.exec (n-pop {id-meta cn ce s} n) x) (sym (exec-comp (M.cs popOnce) (n-push {id-meta cn ce s} (suc n)) (id-meta cn ce s))) ⟩ + M.exec (n-pop n) (M.exec (M.csComp {id-meta cn ce s} (M.cs popOnce) (n-push {id-meta cn ce s} (suc n))) (id-meta cn ce s)) + ≡⟨ cong (\x -> M.exec (n-pop {id-meta cn ce s} n) x) (pop-n-push n cn ce s) ⟩ + M.exec (n-pop n) (M.exec (n-push n) (id-meta cn ce s)) + ≡⟨ sym (exec-comp (n-pop n) (n-push n) (id-meta cn ce s)) ⟩ + M.exec (M.csComp (n-pop n) (n-push n)) (id-meta cn ce s) + ≡⟨ n-push-pop n cn ce s ⟩ + id-meta cn ce s + ∎ + diff -r 000000000000 -r 83f997abf3b5 final_main/src/stack-subtype.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/stack-subtype.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,123 @@ +open import Level hiding (lift) +open import Data.Maybe +open import Data.Product +open import Data.Nat hiding (suc) +open import Function + +module stack-subtype (A : Set) where + +-- data definitions + +data Element (a : Set) : Set where + cons : a -> Maybe (Element a) -> Element a + +datum : {a : Set} -> Element a -> a +datum (cons a _) = a + +next : {a : Set} -> Element a -> Maybe (Element a) +next (cons _ n) = n + +record SingleLinkedStack (a : Set) : Set where + field + top : Maybe (Element a) +open SingleLinkedStack + +record Context : Set where + field + -- fields for concrete data segments + n : ℕ + -- fields for stack + element : Maybe A + + + + + +open import subtype Context as N + +instance + ContextIsDataSegment : N.DataSegment Context + ContextIsDataSegment = record {get = (\c -> c) ; set = (\_ c -> c)} + + +record Meta : Set₁ where + field + -- context as set of data segments + context : Context + stack : SingleLinkedStack A + nextCS : N.CodeSegment Context Context + + + + +open import subtype Meta as M + +instance + MetaIncludeContext : M.DataSegment Context + MetaIncludeContext = record { get = Meta.context + ; set = (\m c -> record m {context = c}) } + + MetaIsMetaDataSegment : M.DataSegment Meta + MetaIsMetaDataSegment = record { get = (\m -> m) ; set = (\_ m -> m) } + + +liftMeta : {X Y : Set} {{_ : M.DataSegment X}} {{_ : M.DataSegment Y}} -> N.CodeSegment X Y -> M.CodeSegment X Y +liftMeta (N.cs f) = M.cs f + +liftContext : {X Y : Set} {{_ : N.DataSegment X}} {{_ : N.DataSegment Y}} -> N.CodeSegment X Y -> N.CodeSegment Context Context +liftContext {{x}} {{y}} (N.cs f) = N.cs (\c -> N.DataSegment.set y c (f (N.DataSegment.get x c))) + +-- definition based from Gears(209:5708390a9d88) src/parallel_execution + +emptySingleLinkedStack : SingleLinkedStack A +emptySingleLinkedStack = record {top = nothing} + + +pushSingleLinkedStack : Meta -> Meta +pushSingleLinkedStack m = M.exec (liftMeta n) (record m {stack = (push s e) }) + where + n = Meta.nextCS m + s = Meta.stack m + e = Context.element (Meta.context m) + push : SingleLinkedStack A -> Maybe A -> SingleLinkedStack A + push s nothing = s + push s (just x) = record {top = just (cons x (top s))} + + + +popSingleLinkedStack : Meta -> Meta +popSingleLinkedStack m = M.exec (liftMeta n) (record m {stack = (st m) ; context = record con {element = (elem m)}}) + where + n = Meta.nextCS m + con = Meta.context m + elem : Meta -> Maybe A + elem record {stack = record { top = (just (cons x _)) }} = just x + elem record {stack = record { top = nothing }} = nothing + st : Meta -> SingleLinkedStack A + st record {stack = record { top = (just (cons _ s)) }} = record {top = s} + st record {stack = record { top = nothing }} = record {top = nothing} + + + + +pushSingleLinkedStackCS : M.CodeSegment Meta Meta +pushSingleLinkedStackCS = M.cs pushSingleLinkedStack + +popSingleLinkedStackCS : M.CodeSegment Meta Meta +popSingleLinkedStackCS = M.cs popSingleLinkedStack + + +-- for sample + +firstContext : Context +firstContext = record {element = nothing ; n = 0} + + +firstMeta : Meta +firstMeta = record { context = firstContext + ; stack = emptySingleLinkedStack + ; nextCS = (N.cs (\m -> m)) + } + + + diff -r 000000000000 -r 83f997abf3b5 final_main/src/stack.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/stack.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,149 @@ +open import Level renaming (suc to succ ; zero to Zero ) +module stack where + +open import Relation.Binary.PropositionalEquality +open import Relation.Binary.Core +open import Data.Nat + +ex : 1 + 2 ≡ 3 +ex = refl + +data Bool {n : Level } : Set n where + True : Bool + False : Bool + +record _∧_ {n : Level } (a : Set n) (b : Set n): Set n where + field + pi1 : a + pi2 : b + +data Maybe {n : Level } (a : Set n) : Set n where + Nothing : Maybe a + Just : a -> Maybe a + +record StackMethods {n m : Level } (a : Set n ) {t : Set m }(stackImpl : Set n ) : Set (m Level.⊔ n) where + field + push : stackImpl -> a -> (stackImpl -> t) -> t + pop : stackImpl -> (stackImpl -> Maybe a -> t) -> t + pop2 : stackImpl -> (stackImpl -> Maybe a -> Maybe a -> t) -> t + get : stackImpl -> (stackImpl -> Maybe a -> t) -> t + get2 : stackImpl -> (stackImpl -> Maybe a -> Maybe a -> t) -> t + clear : stackImpl -> (stackImpl -> t) -> t +open StackMethods + +record Stack {n m : Level } (a : Set n ) {t : Set m } (si : Set n ) : Set (m Level.⊔ n) where + field + stack : si + stackMethods : StackMethods {n} {m} a {t} si + pushStack : a -> (Stack a si -> t) -> t + pushStack d next = push (stackMethods ) (stack ) d (\s1 -> next (record {stack = s1 ; stackMethods = stackMethods } )) + popStack : (Stack a si -> Maybe a -> t) -> t + popStack next = pop (stackMethods ) (stack ) (\s1 d1 -> next (record {stack = s1 ; stackMethods = stackMethods }) d1 ) + pop2Stack : (Stack a si -> Maybe a -> Maybe a -> t) -> t + pop2Stack next = pop2 (stackMethods ) (stack ) (\s1 d1 d2 -> next (record {stack = s1 ; stackMethods = stackMethods }) d1 d2) + getStack : (Stack a si -> Maybe a -> t) -> t + getStack next = get (stackMethods ) (stack ) (\s1 d1 -> next (record {stack = s1 ; stackMethods = stackMethods }) d1 ) + get2Stack : (Stack a si -> Maybe a -> Maybe a -> t) -> t + get2Stack next = get2 (stackMethods ) (stack ) (\s1 d1 d2 -> next (record {stack = s1 ; stackMethods = stackMethods }) d1 d2) + clearStack : (Stack a si -> t) -> t + clearStack next = clear (stackMethods ) (stack ) (\s1 -> next (record {stack = s1 ; stackMethods = stackMethods } )) + +open Stack + +{-- +data Element {n : Level } (a : Set n) : Set n where + cons : a -> Maybe (Element a) -> Element a + + +datum : {n : Level } {a : Set n} -> Element a -> a +datum (cons a _) = a + +next : {n : Level } {a : Set n} -> Element a -> Maybe (Element a) +next (cons _ n) = n +--} + + +-- cannot define recrusive record definition. so use linked list with maybe. +record Element {l : Level} (a : Set l) : Set l where + inductive + constructor cons + field + datum : a -- `data` is reserved by Agda. + next : Maybe (Element a) + +open Element + + +record SingleLinkedStack {n : Level } (a : Set n) : Set n where + field + top : Maybe (Element a) +open SingleLinkedStack + +pushSingleLinkedStack : {n m : Level } {t : Set m } {Data : Set n} -> SingleLinkedStack Data -> Data -> (Code : SingleLinkedStack Data -> t) -> t +pushSingleLinkedStack stack datum next = next stack1 + where + element = cons datum (top stack) + stack1 = record {top = Just element} + + +popSingleLinkedStack : {n m : Level } {t : Set m } {a : Set n} -> SingleLinkedStack a -> (Code : SingleLinkedStack a -> (Maybe a) -> t) -> t +popSingleLinkedStack stack cs with (top stack) +... | Nothing = cs stack Nothing +... | Just d = cs stack1 (Just data1) + where + data1 = datum d + stack1 = record { top = (next d) } + +pop2SingleLinkedStack : {n m : Level } {t : Set m } {a : Set n} -> SingleLinkedStack a -> (Code : SingleLinkedStack a -> (Maybe a) -> (Maybe a) -> t) -> t +pop2SingleLinkedStack {n} {m} {t} {a} stack cs with (top stack) +... | Nothing = cs stack Nothing Nothing +... | Just d = pop2SingleLinkedStack' {n} {m} stack cs + where + pop2SingleLinkedStack' : {n m : Level } {t : Set m } -> SingleLinkedStack a -> (Code : SingleLinkedStack a -> (Maybe a) -> (Maybe a) -> t) -> t + pop2SingleLinkedStack' stack cs with (next d) + ... | Nothing = cs stack Nothing Nothing + ... | Just d1 = cs (record {top = (next d1)}) (Just (datum d)) (Just (datum d1)) + + +getSingleLinkedStack : {n m : Level } {t : Set m } {a : Set n} -> SingleLinkedStack a -> (Code : SingleLinkedStack a -> (Maybe a) -> t) -> t +getSingleLinkedStack stack cs with (top stack) +... | Nothing = cs stack Nothing +... | Just d = cs stack (Just data1) + where + data1 = datum d + +get2SingleLinkedStack : {n m : Level } {t : Set m } {a : Set n} -> SingleLinkedStack a -> (Code : SingleLinkedStack a -> (Maybe a) -> (Maybe a) -> t) -> t +get2SingleLinkedStack {n} {m} {t} {a} stack cs with (top stack) +... | Nothing = cs stack Nothing Nothing +... | Just d = get2SingleLinkedStack' {n} {m} stack cs + where + get2SingleLinkedStack' : {n m : Level} {t : Set m } -> SingleLinkedStack a -> (Code : SingleLinkedStack a -> (Maybe a) -> (Maybe a) -> t) -> t + get2SingleLinkedStack' stack cs with (next d) + ... | Nothing = cs stack Nothing Nothing + ... | Just d1 = cs stack (Just (datum d)) (Just (datum d1)) + +clearSingleLinkedStack : {n m : Level } {t : Set m } {a : Set n} -> SingleLinkedStack a -> (SingleLinkedStack a -> t) -> t +clearSingleLinkedStack stack next = next (record {top = Nothing}) + + +emptySingleLinkedStack : {n : Level } {a : Set n} -> SingleLinkedStack a +emptySingleLinkedStack = record {top = Nothing} + +----- +-- Basic stack implementations are specifications of a Stack +-- +singleLinkedStackSpec : {n m : Level } {t : Set m } {a : Set n} -> StackMethods {n} {m} a {t} (SingleLinkedStack a) +singleLinkedStackSpec = record { + push = pushSingleLinkedStack + ; pop = popSingleLinkedStack + ; pop2 = pop2SingleLinkedStack + ; get = getSingleLinkedStack + ; get2 = get2SingleLinkedStack + ; clear = clearSingleLinkedStack + } + +createSingleLinkedStack : {n m : Level } {t : Set m } {a : Set n} -> Stack {n} {m} a {t} (SingleLinkedStack a) +createSingleLinkedStack = record { + stack = emptySingleLinkedStack ; + stackMethods = singleLinkedStackSpec + } diff -r 000000000000 -r 83f997abf3b5 final_main/src/stack.agdai Binary file final_main/src/stack.agdai has changed diff -r 000000000000 -r 83f997abf3b5 final_main/src/stack.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/stack.h Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,7 @@ +struct SingleLinkedStack { + struct Element* top; +} SingleLinkedStack; +struct Element { + union Data* data; + struct Element* next; +} Element; diff -r 000000000000 -r 83f997abf3b5 final_main/src/stackImpl.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/stackImpl.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,38 @@ +record Element {l : Level} (a : Set l) : Set l where + inductive + constructor cons + field + datum : a -- `data` is reserved by Agda. + next : Maybe (Element a) +open Element + +record SingleLinkedStack {n : Level } (a : Set n) : Set n where + field + top : Maybe (Element a) +open SingleLinkedStack + +pushSingleLinkedStack : {n m : Level } {t : Set m } {Data : Set n} -> SingleLinkedStack Data -> Data -> (Code : SingleLinkedStack Data -> t) -> t +pushSingleLinkedStack stack datum next = next stack1 + where + element = cons datum (top stack) + stack1 = record {top = Just element} + +-- push 以下は省略 + +-- Basic stack implementations are specifications of a Stack + +singleLinkedStackSpec : {n m : Level } {t : Set m } {a : Set n} -> StackMethods {n} {m} a {t} (SingleLinkedStack a) +singleLinkedStackSpec = record { + push = pushSingleLinkedStack + ; pop = popSingleLinkedStack + ; pop2 = pop2SingleLinkedStack + ; get = getSingleLinkedStack + ; get2 = get2SingleLinkedStack + ; clear = clearSingleLinkedStack + } + +createSingleLinkedStack : {n m : Level } {t : Set m } {a : Set n} -> Stack {n} {m} a {t} (SingleLinkedStack a) +createSingleLinkedStack = record { + stack = emptySingleLinkedStack ; + stackMethods = singleLinkedStackSpec + } diff -r 000000000000 -r 83f997abf3b5 final_main/src/stackTest.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/stackTest.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,144 @@ +open import Level renaming (suc to succ ; zero to Zero ) +module stackTest where + +open import stack + +open import Relation.Binary.PropositionalEquality +open import Relation.Binary.Core +open import Data.Nat +open import Function + + +open SingleLinkedStack +open Stack + +---- +-- +-- proof of properties ( concrete cases ) +-- + +test01 : {n : Level } {a : Set n} -> SingleLinkedStack a -> Maybe a -> Bool {n} +test01 stack _ with (top stack) +... | (Just _) = True +... | Nothing = False + + +test02 : {n : Level } {a : Set n} -> SingleLinkedStack a -> Bool +test02 stack = popSingleLinkedStack stack test01 + +test03 : {n : Level } {a : Set n} -> a -> Bool +test03 v = pushSingleLinkedStack emptySingleLinkedStack v test02 + +-- after a push and a pop, the stack is empty +lemma : {n : Level} {A : Set n} {a : A} -> test03 a ≡ False +lemma = refl + +testStack01 : {n m : Level } {a : Set n} -> a -> Bool {m} +testStack01 v = pushStack createSingleLinkedStack v ( + \s -> popStack s (\s1 d1 -> True)) + +-- after push 1 and 2, pop2 get 1 and 2 + +testStack02 : {m : Level } -> ( Stack ℕ (SingleLinkedStack ℕ) -> Bool {m} ) -> Bool {m} +testStack02 cs = pushStack createSingleLinkedStack 1 ( + \s -> pushStack s 2 cs) + + +testStack031 : (d1 d2 : ℕ ) -> Bool {Zero} +testStack031 2 1 = True +testStack031 _ _ = False + +testStack032 : (d1 d2 : Maybe ℕ) -> Bool {Zero} +testStack032 (Just d1) (Just d2) = testStack031 d1 d2 +testStack032 _ _ = False + +testStack03 : {m : Level } -> Stack ℕ (SingleLinkedStack ℕ) -> ((Maybe ℕ) -> (Maybe ℕ) -> Bool {m} ) -> Bool {m} +testStack03 s cs = pop2Stack s ( + \s d1 d2 -> cs d1 d2 ) + +testStack04 : Bool +testStack04 = testStack02 (\s -> testStack03 s testStack032) + +testStack05 : testStack04 ≡ True +testStack05 = refl + +testStack06 : {m : Level } -> Maybe (Element ℕ) +testStack06 = pushStack createSingleLinkedStack 1 ( + \s -> pushStack s 2 (\s -> top (stack s))) + +testStack07 : {m : Level } -> Maybe (Element ℕ) +testStack07 = pushSingleLinkedStack emptySingleLinkedStack 1 ( + \s -> pushSingleLinkedStack s 2 (\s -> top s)) + +testStack08 = pushSingleLinkedStack emptySingleLinkedStack 1 + $ \s -> pushSingleLinkedStack s 2 + $ \s -> pushSingleLinkedStack s 3 + $ \s -> pushSingleLinkedStack s 4 + $ \s -> pushSingleLinkedStack s 5 + $ \s -> top s + +------ +-- +-- proof of properties with indefinite state of stack +-- +-- this should be proved by properties of the stack inteface, not only by the implementation, +-- and the implementation have to provides the properties. +-- +-- we cannot write "s ≡ s3", since level of the Set does not fit , but use stack s ≡ stack s3 is ok. +-- anyway some implementations may result s != s3 +-- + +stackInSomeState : {l m : Level } {D : Set l} {t : Set m } (s : SingleLinkedStack D ) -> Stack {l} {m} D {t} ( SingleLinkedStack D ) +stackInSomeState s = record { stack = s ; stackMethods = singleLinkedStackSpec } + +push->push->pop2 : {l : Level } {D : Set l} (x y : D ) (s : SingleLinkedStack D ) -> + pushStack ( stackInSomeState s ) x ( \s1 -> pushStack s1 y ( \s2 -> pop2Stack s2 ( \s3 y1 x1 -> (Just x ≡ x1 ) ∧ (Just y ≡ y1 ) ) )) +push->push->pop2 {l} {D} x y s = record { pi1 = refl ; pi2 = refl } + + +-- id : {n : Level} {A : Set n} -> A -> A +-- id a = a + +-- push a, n times + +n-push : {n : Level} {A : Set n} {a : A} -> ℕ -> SingleLinkedStack A -> SingleLinkedStack A +n-push zero s = s +n-push {l} {A} {a} (suc n) s = pushSingleLinkedStack (n-push {l} {A} {a} n s) a (\s -> s ) + +n-pop : {n : Level}{A : Set n} {a : A} -> ℕ -> SingleLinkedStack A -> SingleLinkedStack A +n-pop zero s = s +n-pop {_} {A} {a} (suc n) s = popSingleLinkedStack (n-pop {_} {A} {a} n s) (\s _ -> s ) + +open ≡-Reasoning + +push-pop-equiv : {n : Level} {A : Set n} {a : A} (s : SingleLinkedStack A) -> (popSingleLinkedStack (pushSingleLinkedStack s a (\s -> s)) (\s _ -> s) ) ≡ s +push-pop-equiv s = refl + +push-and-n-pop : {n : Level} {A : Set n} {a : A} (n : ℕ) (s : SingleLinkedStack A) -> n-pop {_} {A} {a} (suc n) (pushSingleLinkedStack s a id) ≡ n-pop {_} {A} {a} n s +push-and-n-pop zero s = refl +push-and-n-pop {_} {A} {a} (suc n) s = begin + n-pop {_} {A} {a} (suc (suc n)) (pushSingleLinkedStack s a id) + ≡⟨ refl ⟩ + popSingleLinkedStack (n-pop {_} {A} {a} (suc n) (pushSingleLinkedStack s a id)) (\s _ -> s) + ≡⟨ cong (\s -> popSingleLinkedStack s (\s _ -> s )) (push-and-n-pop n s) ⟩ + popSingleLinkedStack (n-pop {_} {A} {a} n s) (\s _ -> s) + ≡⟨ refl ⟩ + n-pop {_} {A} {a} (suc n) s + ∎ + + +n-push-pop-equiv : {n : Level} {A : Set n} {a : A} (n : ℕ) (s : SingleLinkedStack A) -> (n-pop {_} {A} {a} n (n-push {_} {A} {a} n s)) ≡ s +n-push-pop-equiv zero s = refl +n-push-pop-equiv {_} {A} {a} (suc n) s = begin + n-pop {_} {A} {a} (suc n) (n-push (suc n) s) + ≡⟨ refl ⟩ + n-pop {_} {A} {a} (suc n) (pushSingleLinkedStack (n-push n s) a (\s -> s)) + ≡⟨ push-and-n-pop n (n-push n s) ⟩ + n-pop {_} {A} {a} n (n-push n s) + ≡⟨ n-push-pop-equiv n s ⟩ + s + ∎ + + +n-push-pop-equiv-empty : {n : Level} {A : Set n} {a : A} -> (n : ℕ) -> n-pop {_} {A} {a} n (n-push {_} {A} {a} n emptySingleLinkedStack) ≡ emptySingleLinkedStack +n-push-pop-equiv-empty n = n-push-pop-equiv n emptySingleLinkedStack diff -r 000000000000 -r 83f997abf3b5 final_main/src/stackTest.agdai Binary file final_main/src/stackTest.agdai has changed diff -r 000000000000 -r 83f997abf3b5 final_main/src/struct-init.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/struct-init.c Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,1 @@ +struct Point p = {100 , 200}; diff -r 000000000000 -r 83f997abf3b5 final_main/src/struct.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/struct.c Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,4 @@ +struct Point { + int x; + int y; +}; diff -r 000000000000 -r 83f997abf3b5 final_main/src/stub.cbc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/stub.cbc Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,17 @@ +__code put(struct Context* context, + struct Tree* tree, + struct Node* root, + struct Allocate* allocate) +{ + /* 実装コードは省略 */ +} + +__code put_stub(struct Context* context) +{ + goto put(context, + &context->data[Tree]->tree, + context->data[Tree]->tree.root, + &context->data[Allocate]->allocate); +} + + diff -r 000000000000 -r 83f997abf3b5 final_main/src/subtype.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/subtype.agda Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,44 @@ +open import Level +open import Relation.Binary.PropositionalEquality + +module subtype {l : Level} (Context : Set l) where + + +record DataSegment {ll : Level} (A : Set ll) : Set (l ⊔ ll) where + field + get : Context -> A + set : Context -> A -> Context +open DataSegment + +data CodeSegment {l1 l2 : Level} (A : Set l1) (B : Set l2) : Set (l ⊔ l1 ⊔ l2) where + cs : {{_ : DataSegment A}} {{_ : DataSegment B}} -> (A -> B) -> CodeSegment A B + +goto : {l1 l2 : Level} {I : Set l1} {O : Set l2} -> CodeSegment I O -> I -> O +goto (cs b) i = b i + +exec : {l1 l2 : Level} {I : Set l1} {O : Set l2} {{_ : DataSegment I}} {{_ : DataSegment O}} + -> CodeSegment I O -> Context -> Context +exec {l} {{i}} {{o}} (cs b) c = set o c (b (get i c)) + + +comp : {con : Context} -> {l1 l2 l3 l4 : Level} + {A : Set l1} {B : Set l2} {C : Set l3} {D : Set l4} + {{_ : DataSegment A}} {{_ : DataSegment B}} {{_ : DataSegment C}} {{_ : DataSegment D}} + -> (C -> D) -> (A -> B) -> A -> D +comp {con} {{i}} {{io}} {{oi}} {{o}} g f x = g (get oi (set io con (f x))) + +csComp : {con : Context} -> {l1 l2 l3 l4 : Level} + {A : Set l1} {B : Set l2} {C : Set l3} {D : Set l4} + {{_ : DataSegment A}} {{_ : DataSegment B}} {{_ : DataSegment C}} {{_ : DataSegment D}} + -> CodeSegment C D -> CodeSegment A B -> CodeSegment A D +csComp {con} {A} {B} {C} {D} {{da}} {{db}} {{dc}} {{dd}} (cs g) (cs f) + = cs {{da}} {{dd}} (comp {con} {{da}} {{db}} {{dc}} {{dd}} g f) + + + +comp-associative : {A B C D E F : Set l} {con : Context} + {{da : DataSegment A}} {{db : DataSegment B}} {{dc : DataSegment C}} + {{dd : DataSegment D}} {{de : DataSegment E}} {{df : DataSegment F}} + -> (a : CodeSegment A B) (b : CodeSegment C D) (c : CodeSegment E F) + -> csComp {con} c (csComp {con} b a) ≡ csComp {con} (csComp {con} c b) a +comp-associative (cs _) (cs _) (cs _) = refl diff -r 000000000000 -r 83f997abf3b5 final_main/src/type-cs.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/type-cs.c Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,9 @@ +__code getMinHeight_stub(struct Context* context) { + goto getMinHeight(context, &context->data[Allocate]->allocate, &context->data[AkashaInfo]->akashaInfo); +} + +__code getMinHeight(struct Context* context, struct Allocate* allocate, struct AkashaInfo* akashaInfo) { + /* ... */ + goto getMinHeight_stub(context); +} + diff -r 000000000000 -r 83f997abf3b5 final_main/src/type-ds.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/type-ds.h Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,5 @@ +struct AkashaInfo { + unsigned int minHeight; + unsigned int maxHeight; + struct AkashaNode* akashaNode; +}; diff -r 000000000000 -r 83f997abf3b5 final_main/src/type-mds.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/src/type-mds.h Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,15 @@ +struct Data { /* data segments as types */ + struct Tree { /* ... */ } tree; + struct Node { /* ... */ } node; + + struct IterElem { /* ... */ } iterElem; + struct Iterator { /* ... */ } iterator; + struct AkashaInfo { /* ... */} akashaInfo; + struct AkashaNode { /* ... */} akashaNode; +}; + + +struct Context { /* meta data segment as subtype */ + /* ... fields for meta computations ... */ + struct Data **data; /* data segments */ +}; diff -r 000000000000 -r 83f997abf3b5 final_main/thanks.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/final_main/thanks.tex Thu Feb 14 16:51:50 2019 +0900 @@ -0,0 +1,18 @@ +\chapter*{謝辞} +\thispagestyle{empty} + +%基本的な内容は以下の通り.参考にしてみて下さい. +%厳密な決まりは無いので,個々人の文体でも構わない. +%GISゼミや英語ゼミに参加した人はその分も入れておく. +%順番は重要なので気を付けるように.(提出前に周りの人に確認してもらう.) + +\hspace{1zw}本研究の遂行,また本論文の作成にあたり、御多忙にも関わらず終始懇切なる御指導と御教授を賜わりました河野真治准教授に深く感謝したします。 +また、一年間共に研究を行い、暖かな気遣いと励ましをもって支えてくれた並列信頼研究室のみなさんに感謝致します。 + +最後に、有意義な時間を共に過ごした情報工学科の学友、並びに物心両面で支えてくれた両親に深く感謝致します。 + +\begin{flushright} + 2018年 3月 \\ 外間政尊 +\end{flushright} + +