Category Archives: 仕事

【OCaml】「Welcome from Eliom’s distillery!」を書き換えてみる

前回は諸々をインストールして、ブラウザに「Welcome from Eliom’s distillery!」と表示するところまでたどり着きました。

というわけで、「Welcome from Eliom’s distillery!」がどこで出力されているかを、まずは調べてみたいと思います。

作成された「hello」ディレクトリで適当にgrepすると、

バイナリファイル _server/hello.cmo に一致しました
hello.eliom:             h1 [pcdata "Welcome from Eliom's distillery!"];
バイナリファイル local/lib/hello/hello.cma に一致しました

こんな感じ。

バイナリファイルはとりあえず置いといて、hello.eliomですね。

ここで指定しているみたいです。

開いてみると。

[%%shared
open Eliom_lib
open Eliom_content
open Html.D
]

module Hello_app =
Eliom_registration.App (
struct
let application_name = “hello”
let global_data_path = None
end)

let main_service =
Eliom_service.create
~path:(Eliom_service.Path [])
~meth:(Eliom_service.Get Eliom_parameter.unit)
()

let () =
Hello_app.register
~service:main_service
(fun () () ->
Lwt.return
(Eliom_tools.F.html
~title:”hello”
~css:[[“css”;”hello.css”]]
Html.F.(body [
h1 [pcdata “Welcome from Eliom’s distillery!“];
])))

 

こんな感じです。最初の方はまだわからないが、後半で該当の文字列が見えます。

ここを変更すると反映されるのか?

上記、赤字部分を適当に変更してみます。

「Welcome from yonezos distillery」

テキスト編集して保存してブラウザを更新。

当然ですが、これだけでは反映はされません。当然、コンパイルが必要なんだろうなと。

前回は「make test.byte」とかやりましたが、今回はどうするのだろう?

 

とりあえず再度やってみますが、エラーが出ます。

$ make test.byte
js_of_eliom -ppx -c -package lwt.ppx -package js_of_ocaml.ppx -package js_of_ocaml.deriving.ppx  hello.eliom
make: js_of_eliom: コマンドが見つかりませんでした
Makefile:206: ターゲット '_client/hello.cmo' のレシピで失敗しました
make: *** [_client/hello.cmo] エラー 127

師匠曰く「パスが通ってない?」との事で、.profileをチェック。

# OPAM configuration
. /home/develop/.opam/opam-init/init.sh > /dev/null 2> /dev/null || true

上記記述があるか確認します。

で、記述があるのにダメな場合は

$ source .profile

で反映します。

で、再度make test.byteとやるもエラー。

$ make test.byte
js_of_eliom -ppx -c -package lwt.ppx -package js_of_ocaml.ppx -package js_of_ocaml.deriving.ppx  hello.eliom
js_of_eliom -ppx -o local/var/www/hello/eliom/hello.js  -package lwt.ppx -package js_of_ocaml.ppx -package js_of_ocaml.deriving.ppx  \
_client/hello.cmo
eliomc -ppx -c -package lwt.ppx -package js_of_ocaml.deriving.ppx  hello.eliom
eliomc -ppx -a -o local/lib/hello/hello.cma  \
_server/hello.cmo
ocsigenserver  -c local/etc/hello/hello-test.conf
ocsigenserver: ocsigen:main: Fatal - The port 8080 is already in use.
Makefile:58: ターゲット 'test.byte' のレシピで失敗しました
make: *** [test.byte] エラー 8

「ocsigensetverが8080掴んでて実行できないわ。」という感じなのでしょうか。

別コンソールで実行したままとなっていたocsigenserverをC-cで閉じます。

再度meke test.byteとやると、めでたく「Welcome from yonezos distillery!」と表示されました。

この「make test.byte」というコマンドですが、makeはコンパイルを行うとして「test.byte」って何?

makeでtabキーを押すと、続けて打てるオプションが出てきます。

$ make
all                  install              install.lib.byte     local/               run.opt
byte                 install.byte         install.lib.opt      opt                  test.byte
clean                install.etc          install.opt          print-install-files  test.opt
distclean            install.lib          install.static       run.byte

大きくrunとtestがあって、開発時はtestですかね。

実行形式の違いだったかな…。

byteとoptはコンパイル方法が異なるみたいで、optの方が10倍ほど早いとの事。

いや、間違えてるかも知れない。

とりあえず、この辺は実際にサイトを公開する際にもう一度掘り下げるとしよう。

 

Ocaml再挑戦

今年も残りわずか360日足らずとなりました。懲りずにOcamlへの挑戦です!

まずはVMwareMintの18を入れて、opamによる環境の構築から。

これは以前に四苦八苦したエントリ

Ubuntu7へOCamlモロモロをインストール

OCaml環境構築メモ

などを参考に。

 

さぁ懲りずに再挑戦。

とりあえずopamをinstallした後はeliomを入れるわけだが、

opam install eliom

とやっても、早速のエラーが。

=-=- conf-gmp.1 troobleshooting -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
=> This package relies on external (system) dependencies that may be missing. `opam depext conf-gmp.1' may help you find the correct installation for your
system.

=-=- conf-libpcre.1 troobleshooting -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
=> This package relies on external (system) dependencies that may be missing. `opam depext conf-libpcre.1' may help you find the correct installation for your
system.

=-=- conf-openssl.1 troobleshooting -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
=> This package relies on external (system) dependencies that may be missing. `opam depext conf-openssl.1' may help you find the correct installation for your
system.

=-=- conf-zlib.1 troobleshooting =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
=> This package relies on external (system) dependencies that may be missing. `opam depext conf-zlib.1' may help you find the correct installation for your
system.

=-=- dbm.1.0 troobleshooting =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
=> This package relies on external (system) dependencies that may be missing. `opam depext dbm.1.0' may help you find the correct installation for your system.

要するに「さっさとinstallしてくれよ」って事みたいなので、ご丁寧に提示までされているコマンドを叩き込んでいきます。

いろいろ聞かれても基本すべて「Y」で。

それにしても

opam depext

って何なんでしょう?

ただ、これでもエラーは無くならない。

仕方なく

opam swtich 4.04.0

としてから(現時点で最新ぽい)、再度

opam install eliom

とすると、どうやらうまくinstallできた様子。

ここで

/home/develop/

とかディレクトリをmkdirしてから、cdしてdevelopの中に入り、おもむろに

eliom-distillery -name hello

とか(helloは適当です)すると、helloディレクトリが作成されて、勝手にファイルが作られます。

なんだか懐かしいw

で、helloに入ってから

make test.byte

とすると、最終的に

ocsigenserver  -c local/etc/hello/hello-test.conf

と表示されて、ブラウザから「localhost:8080」とすると

メデタク「Welcome from Eliom’s distillery!」と表示されました。

 

ようやくスタートラインに立ったという感じですが、今後は以下のような機能について実装の方法を試していこうと思っております。

基本はwebサイトの構築が目的なので、最初は目に見えやすく、言語習得の効果が実感しやすいところから始めようと思います。

(いずれ必要ではあるが)あまり目に見えにくい部分であるocsigenserverの設定についてなどは、とりあえず後。

  1. HTML記述による簡単なwebページの表示、できればsmartyなど使ってテンプレートで表示できればベター。
  2. form画面を作成してgetやpostのデータを取得できるようにする。
  3. DB(とりあえずMySQLでもなんでもOK)に接続して、簡単なSELECTを発行してデータを取得して、適当な変数へ格納する。
  4. 取得したデータについて、簡単な集計・値の操作を行い、それをwebページとして表示する。
  5. セッションを利用したログイン・ログアウト画面の実装

ここまでできれば、ある程度開発はできるようになるだろうと。

その後はeliomについて調べたりして勉強しようかなと思っております。

 

しかし自分でこんな事を書いててつくづく思うのは、初心者向けのOcaml解説コンテンツ(本もサイトも)無いよなぁという事。

そもそもOcamlがプログラミング初心者の触るような言語ではないという見方もあるのかも知れないが、それでいて片方では「PHPなんてウンコ」と批判するというのはどうなのかなーと思います。

Ocaml利用者の裾野が広がって、PHPが駆逐されるような事になってくれば、既存の技術者にとってもいろいろなメリットがあるんじゃないかと思うんですけどね。

具体的には、新規開発において今まではJavaやRuby、PHPなんかの比較的メジャーとされる言語が採用される可能性(メンテにかかる要員の確保が楽とかそういうレベルで)が高かったと思うんですが、人的な懸念が無くなって母国語でのマニュアルや解説などのコンテンツが増えてくれば、「Ocamlでやってみますか」となりませんかね、ならないですかそうですか。

 

周りのOcaml使いの人に言わせると

「開発やメンテのスピードがPHPなんかとは桁違いに早く簡単になる」

「バグ発生の確率が激減する」

「そもそも開発が楽だし、実行スピードもCと同等」

という自慢メリットを散々聞いているので、「ほんまかいな」という気分です。

今年はそれを確認する一年となりそうです。

 

Git雑感

あけましておめでとうございます。

今年も宜しくお願い致します。m(__)m

 

という事で、2017年は「すぐやる」をテーマに余生を無駄なく過ごそうと考えております。

本年最初のエントリは仕事な話題ですが、「あぁ、米蔵はこんな仕事してんのか。」的に斜め読みして頂けると嬉しいです。

 

システム開発におけるバージョン管理システムの一つとして「Git」がありますが、この歳にしてようやく重すぎる腰を上げてちゃんと使い始めたので、「使い始めたばかりの初心者が思うこと」について書き残す。

相変わらず批判的文章の羅列になりそうだが、決して「もうやだ!」という感じではなく、それなりの恩恵は感じております。

まず、思いつく恩恵として、当然ですが作業履歴の確認が容易という点が挙げられる。

数百のソースファイルを日々改変・追加を行っていると、自分でも若年性なんちゃらを疑うほどに光速の速さで過去に行った作業内容を失念していきます。

ひどい時には先週行った作業の内容を思い出せないとか、「これ、いつ書いたんだっけ?」というような事がザラに起きる。

ましてや複数のエンジニアが混在するプロジェクトなどでは、ソース修正の全履歴を記憶するなど不可能に近い。

今までは記憶を頼りにソースを追いかけたり、指示メールなどを探して記憶をほじくり出していたんだが、Gitを使うことによって「いつ、どのブランチで誰が行った作業か」というのを検索できるようになったのは大きい。

特定のソースファイルについて、「この処理はなに!?」みたいな時も、Git上で行った作業ならば以下のコマンドでパッと履歴を確認できる。

git log -p ファイル名

自分の作業を忘れるような貧弱な記憶力を持つ私のような似非エンジニアにとって、これは素晴らしい機能である。

もう一つの素晴らしいと感じた機能は、コマンド一発で実環境への反映が一瞬で行えるという点がある。
※1 裏返すと「全修正や機能の追加内容が一瞬で反映されてしまう」とも言えるのだが、もちろん元に戻すのもコマンド一発で行えるので安心ではある
※2 ignoreでGit管理対象外とした設定ファイルなども更新する必要がある場合には、これまで以上に注意する必要がある。コマンド一発で反映OKという事に慣れてしまうと手動更新が必要な案件の場合にそれを失念する可能性が高まるという意味で。

ローカル環境で容易に開発・検証を行える事もGitの恩恵の一つだと言えるが(まぁこれはVMWareなどのゲストOS活用による恩恵がほとんどだが)、完成した機能を実環境・サーバへ反映するにも、mergeやpushなどのコマンドで一発反映できるのは、いままでチマチマと一つ一つのファイルについて確認しつつアップロードしていた身としては、隔世の感というのは言い過ぎとしても、作業時間の大幅な短縮やミスの撲滅という意味で、かなりの恩恵があると言える。

また、ブランチという機構によって作業内容を分割して管理でき、必要に応じて都度切り替えながら作業を行えるというのも、作業テーマを把握しやすく仕掛中の内容についてどのような作業を行ったのか確認しやすいというのも大きなメリットの一つである。

複数のエンジニアがよってたかって開発を行うようなプロジェクトにおいても、他人の作業内容をすぐに自環境へ取り込めるという点も素晴らしい。

あんまり使いたくないので、不勉強のままではあるが、基本的に修正や削除などはご法度とされる履歴の改変なども自由に行なえるし、よくできているシステムである。

ただ、今まで一つのシステムに対して複数の作業案件を抱えながら、並列的に作業を行い、都度検証環境や本番環境へ反映していた立場としては、上記で列挙したメリットが時としてデメリットにもなってしまう事に気付いた。

以降、多少批判的になってしまうが、それらデメリット(あくまでも今までの古いやり方と比較してであるが)を挙げていく。

 

Git初心者がほぼ確実にぶち当たる関門として「ブランチ作成時のmaster把握」というのがある。
※「そんな凡ミスやらかすのはお前だけ」という説もある

一つの案件を開始する時に、ブランチを作成してそこで作業を行っていく感じになるが、ここで問題となるのは「どのブランチから枝分かれさせているのか」という事の認識を疎かにしたまま突き進んでしまう事。

特にブランチがいくつも混在しながら開発を進めた状態で、よく分からないままデフォルトで提示されるブランチから枝分かれさせてしまうと、作業が完了して実環境へ反映した瞬間に不具合が多発するなどして大変な事になる。(なった)

要するに意図しない機能までもがリリースされてしまうという事。

Gitのリポジトリ構成はそれぞれのプロジェクトや設計者によって異なると思うが、どのようにして管理され、どのように自らのブランチを派生・管理するのかというのを、完全に把握しないと駄目だなと感じた。

ただ、この辺はGitの設計思想や操作方法をある程度理解しないと把握しずらい部分でもあるので、初めての環境やプロジェクトで、まずは既存システムの内容等を把握する事が最優先とされる場合に二重の負担となる事が予想され、ただでさえ頭に詰め込む情報量が多いのに、そこへ更にGitの仕組み・操作方法なども習得しなくてはならないというのは、特に初心者にとっては苦痛となるだろう。

なので(なんでもそうだが)「早いとこ始めておきなさい」という事ですね。
※今年こそはOCamlを…

 

Git運用の面倒な点としてコンフリクトの発生と解消を挙げている人も多く見られるが、個人的にはmergetoolやEmacs上で使えるmagitのediffで比較的簡単に解決できるため、それほど面倒だとは感じていない。(今のところは)

というか、それほどこのmergetoolやediffが素晴らしいという事なので、開発環境への導入は必須と言えるだろう。

コンフリクトは、もう「どちらのソースが正解か?」というのを見て判断するしかないし、システムを把握していればある程度は容易に解決できると思われる。

まぁ、他エンジニアとの調整などが発生すると、それはもう技術云々とは違う次元で面倒なのかも知れないが、今のところそのようなカオスな状況には遭遇していない。

 

前置きが長くなったが、現状で最も「これはやりにくいなぁ…。」と感じている部分。それはまさに案件毎にブランチを分ける事によるファイル・処理の住み分けである。

といっても私しか分からないかも知れないが。

 

例えば、Aという案件があって、Aブランチで作業を開始します。

サクサクと作業を進めていって、完成しました。

で、ここで新たにBという案件が差し込まれたとします。

Bブランチを作成して、ここでも作業を行いますが、新規で追加するファイルが大量に発生しました。

ここまでは特に問題は無いのですが、追加したファイルに対してA案件で作成した処理の一部を反映する必要が出てきました。

今までのやり方(バージョン管理システムを使わずに複数の要件を1ファイルに反映できる)では、特に問題無く、そのまま反映できたのですが、

ブランチで分割してしまうと、仕掛中のBブランチにA案件の処理を入れるのは難しくなります。

なぜかと言うと、もしA案件で追加修正などがあった場合にBブランチ上のファイルに対しても同じ修正を行わなければならなくなるというのと、そもそもブランチで案件を区切った意味が消失する(ような気がする)からです。
※A案件の作業内容をあとから把握したいとなった場合にBブランチの内容まで見る必要が出て来る

方法論的には、ここで「A案件の機能をB案件上で追加したファイルに反映する」というCブランチを作成して対応するべきなのかも知れません。

ただ、そうなると今度はもしAブランチを先にリリースした後でBブランチをリリースするとなった場合に、CブランチのリリースもBブランチのリリースと同時に行う必要が出てきます。

これをもし失念すると、Bブランチで追加した新規ファイルにはAブランチで開発した機能が盛り込まれないままとなり、不具合の要因となる可能性が出てきます。

それじゃやはり、BブランチにA案件の機能を盛り込んだファイルを作成するか…となると、もしAブランチに対して修正する必要が出てきた場合にBブランチに対しても同様の作業を行う必要が出てきます。

正直、この辺で

「うっわ、メンドクサー…。┐(´д`)┌ヤレヤレ」

となるのです。

なんだか、複数のブランチで共通のファイルを取り合っている感じです。

こんなケースは日常的に発生すると思うんですが、エンジニアの方々はどうやってるんだろうかと。

「そんなもん、一つのブランチでやっちまえばいいじゃないか。」という事なんだろうか。

 

「この案件が終わってから、次の案件にとりかかりますよ。終わらないうちは次の案件の作業はしません。」なんて現実には出来ないですもんね。

同一システム上の複数案件を並行して進めるというのが普通だと思います。

 

と、雑感というかほぼ初心者なりの「愚痴」なわけですが、上記の問題を除けば概ね素晴らしい仕組みです。

いや、こんな問題など問題でもなく、ちゃんとした解決方法ややり方が存在する可能性は99.9999%だと思います。

ただ、今は思いつかない…。

 

便利で自由で合理的、だから使うべき。という理屈が闊歩する世界でも、そこには使ってみないと分からない不便も束縛も理不尽さも時に存在するというような事を思った年初でありました。

それでは皆様、今年も良い一年にしましょう。

 

MySQLのレプリケーション時エラー対処方法

対処方法といっても、特定のケースに限る。

えー、レプリケーションて要するに「データベースの内容は自動で別サーバのDBに逐一コピーしてバックアップしておこうぜ」って事ですね。

コピーとレプリカの違いがよく分からないが、そういう事。

 

で、参照先となるデータベース(以下、マスタDB)とレプリケートする参照元のデータベース(以下、スレーブDB)がありますが、マスタDBがダウンした場合は、

レプリケートがどうこう言ってる場合じゃないので、今回のテーマとは外れます。

あと、本来であればマスタDB側でダンプを取って、スレーブDBへ反映してからレプリケーションを再開するのが王道みたいなのですが、

サービス稼働中のマスタDBへダンプ実行とか、恐ろしくてできないので、現実的ではないような気がする。

 

なので、スレーブDBのサーバがダウンした場合に、マスタ側でダンプとかせずに復旧するやり方について備忘録。

 

よほどの事でない限り、以下のケースがほとんどのようで、ググればいくらでも情報があります。

まずは、再起動したスレーブDBへログインして、以下でステータスを確認。

 

mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

 

本当はもっとズラ~っと出てきますが、確認するのは上記の項目。

両方「Yes」の場合は問題なくレプリケーションが動作しているので、反映を待つのみですが、どちらかが「No」となっている場合は以下の対処方法があります。

まずは、「Slave_IO_Running: No」の場合。

I/Oエラーとの事なので、HDD故障とか容量不足とかマスタDBへの接続が出来てないとか確認。

それらが問題無いようであれば、リセットします。

mysql> stop slave;

mysql> reset slave;

その後、

mysql> START SLAVE;

としてあげれば、再開されるはずですが、それでもダメな場合は、マスタDBにてステータス確認。

mysql> show master status \G;
*************************** 1. row ***************************
File: mysql-bin.005829
Position: 52932988

上記パラメータを控えつつ、スレーブDB側へ設定。

mysql> CHANGE MASTER TO
-> MASTER_LOG_FILE='mysql-bin.005829',
-> MASTER_LOG_POS=52932988;

再度、

mysql> START SLAVE;

で反映されるはず。

mysql> show slave status\G

で確認して「Yes」になっていればOK。

だが、以下の「Slave_SQL_Running: No」のケースと同様に、SQLのエラーが表示されている場合は、スレーブDBへの更新などが行われたせいでマスタDBとの整合が合わなくなっているとの事なので、以下で実行されてしまったSQLをスキップしてあげる事で整合が取れるらしい。

mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;

でもって、再度スタート。

mysql> START SLAVE SQL_THREAD;

mysql> show slave status\G

これで解消されると思いますです。ただ、これは最初から「Slave_SQL_Running: No」になってる場合のみって感じ。なんとなくですが、mysql> reset slave;これで、万事OKな気がする。試してないけどそんな気がする。それでもダメなら、MASTER_LOG_FILEとMASTER_LOG_POSをマスタDBと合わせて、再start。

風邪の原因は夜遊びじゃなく-DB最適化地獄

確かに疲れが溜まっていたのかも知れないが、築地では普通に食べて、その後もワイン空けたりしてたので、遅くまで遊んでたから風邪引いたってわけじゃないと思うんだが、遠因ではあるかも。

なんだか、最近眠れなくて、大体4時間くらい寝ると目が覚めてしまう。花粉症だからなのかな。あんまり自覚症状は無いんだが。

 

で、築地に行った次の日。

ちょいと仕事でもと思って、ひさしぶりに自転車で事務所まで行ったんだが、「今日は何も無いだろう。早く帰ろう。」と思っていたら、サーバからアラートが。

「HDD容量がそろそろ危険だよー。」との事で、見てみるとDBサーバがwarning発してます。

まぁ、DBサーバは担当じゃないし、ログインも出来ないしーと思ってたら、対応を依頼され。

Webサーバは、まぁログ・ファイル消すとか、その程度で解消してたんだが、DBサーバとなると、どうして良いものやら…。

という事で、恒例の備忘録。

 

まずは、ファイルの調査。

サーバ上のどのファイルが巨大に膨れ上がっているのか?を、とりあえず調べます。

とは言え、大体どの辺のファイルが圧迫しているかというのは、何となく把握は出来ているので、「見つける」というより「確認する」という感じ。

du -h --max-depth=1 /

これで、辿って行けば、「あー、こいつだな。」となるでしょう。

参考:Linuxサーバがディスク容量不足になった!何か消さねば!ってなった時にどう対処するか

上記サイトには、もっと便利な方法も記載されてます、ありがとうございます。

 

でもって、webサーバなら大抵はapacheが残すログファイルとか、アプリケーションが残しているデバッグ用・各種ログ・キャッシュなどのファイルが原因なので、不要なものをバシバシ削除もしくはバックアップしていきます。

ただ、DBサーバなので、そうもいかない。ただ今回はMySQLなので、何か良い方法は…と調べていたら、MySQLもログを吐くらしいとの事。しかもローテートの設定をしていないとGBクラスの巨大なファイルに成長するとの事で、それを確認します。

で、そのファイルは何かと言うと、「slowログ」というファイルらしい。

処理に時間がかかったSQLをログとして残して、後から調べられるようにするという事らしい。

しかしですね、今まで見たことも無く、そもそもサーバにログイン出来なかったので、これは必要無さそうですよ、実際。

本当は、マメにチェックしてチューニングやら行うべきなんでしょうが…。

という訳で、まずはその「slowログ」の場所を確認。

my.cnfへの確認と、DBへの確認の2つの方法があるようです。

$ cat /etc/my.conf | grep slow
slow_query_log=ON
slow_query_log_file=/var/log/mysql-slow.log
long_query_time=0.1

 

mysql> show variables like 'slow%';
+---------------------+--------------------------------------+
| Variable_name       | Value                                |
+---------------------+--------------------------------------+
| slow_launch_time    | 2                                    |
| slow_query_log      | ON                                   |
| slow_query_log_file | /var/log/mysql-slow.log |
+---------------------+--------------------------------------+

という訳で、「/var/log/mysql-slow.log」を確認します。

なーんと、DB起動時から放置されていたのか、20GBに成長しておりました。つか、こんだけ成長するという事は、そもそも…という気もするのですが、今はそれは置いておきます。

で、とりあえず、こいつを削除…、と思ったんですが、先にローテートを調べます。

参考:MySQL の slowlog を logrotate する方法 

これで当面は大丈夫でしょう。ありがとうございます。

で、slowファイルの削除ですが、rmとかじゃなくmysqlのコマンドでflushするそうです。

mysqladmin flush-logs

こんな感じです。

すると、ファイル容量が激減し、HDD容量が増加。一気にwarningが消えました。

ただ、ですね。今回はこれで解決とはならず、レプリケーションしているので、マスタだけではなくスレーブ側も同様の操作を行う必要があるみたいなんですが、残念ながらログインできるのはマスタ側のみ。

という事で、スレーブ側のslowログは操作できないので、スレーブ側のwarningは出たままとなっています。

仕方ないので、次にテーブルの容量を調べます。

これはphpmyadminでも見ることが出来ますが、SQLを打って確認する事も可能。

select table_name, round(data_length/1024/1024, 2) as 'data_size(MB)',
round(index_length/1024/1024, 2) as 'index_size(MB)' from information_schema.tables
where table_schema='[DB名]';

ザーッと出てきますが、まぁ大体はどのテーブルが怪しいか分かってます。

で、そのテーブルを見てみると…まさかの130GBオーバーw

どんだけ巨大なんだw

という訳で、このテーブルをなんとかすれば、大幅にHDDの容量を稼ぐことができそうです。

しかも、このテーブルのデータって、残しているだけで、ほとんど使われてないログデータという…。

ただ、130GBというビッグサイズなので、ここから泥沼にハマることになります…。

 

まず、単純ですがダンプして外に出してしまおうと考えました。

mysqldump -u root -p -t [DB名] [テーブル名] | gzip > hogehoge.gz

こんな感じです。ただ、これは通常の数GBとかのテーブルなら有効かも知れませんが、130GBだと無謀の一言に尽きます。

実際に、それー!って感じで実行すると、生成されるダンプファイルがHDDを圧迫し始めます。

更に、ダンプの処理が内部的にどうなっているのか分かりませんが、DBの機能がほぼロックされた状態で、SELECTから何からの操作が事実上ストップします。

当然、load averageの値もうなぎ登りで、稼働中のDBに対して行うのは無理と判断しました。

ちなみに、where条件を付けて実行する事も可能です。

mysqldump -u root -p -t [DB名] [テーブル名] –where ‘status = 1’ | gzip > hogehoge.gz

ただ、これでも130GBの巨大なテーブルに対しては無力。というか、ほとんどどんな操作をするにしても極端にサーバに負荷がかかる状態です。

気軽な気持ちで最適化など行おうものなら…。

 

で、ここまで試行錯誤しながら既に深夜です。

私思うに、この作業で無理したのと、各種数値の増減やアラートの頻出によるストレスが風邪の原因だと思っておりますw

 

で、最終的には「もう無理!一気に解決は無理!」という事で、担当の方に泣きを入れ、おまけにこれは「ちょっとやっといて。」程度の作業では無いという事を申し伝えさせて頂きました。

いや、DBサーバを舐めてました。

とりあえず、GW明けから再度突撃する予定ですが、小出しにダンプしつつ、小出しにDELETEして、ちょっとずつテーブルのデータを少なくして…という感じですかね。

ただ、MySQLの場合はDELETEしたとしても、削除した分だけのGarbageが残ってしまって、実質的な容量は変わらないという罠があるため(しかも迂闊に最適化できない)、数GBくらいのサイズになってから、最適化を行って、そこで初めて解決…となりそうです。

もうなんだか、ここまで苦闘しておいてなんだけど

 

一括DELETEしたい。

 

このデータいらないんじゃね?

という気分に…。

 

時間かかりそうだ…。

 

Vagrant+VirtualBoxインストール備忘録

ローカルの開発環境としては、今までVMwareを使っていたが、Vagrant+VirtualBoxはどうなのかと思ってやってみた備忘録。

とりあえず、VagrantとVirtualBoxのダウンロードとインストール。

Vagrantは仮想環境を簡単に構築するもので、VirtualBoxはVagrantを動かすために必要なもの。という曖昧な認識です。

とりあえず、ダウンロード

01

「DOWNLOAD」をクリック

02

今回はwindowsへのインストールなので、Universal(32 and 64-bit)ってのをダウンロードです。

.msiファイルなので、ダブルクリックでインストール開始。

特に難しい事はなく、とりあえずデフォルトのままで進めば完了する。

次は、VirtualBox。順番が逆かも知れないが。

03

これも.exeファイルなので、ダブルクリックでインストール開始。特に難しくは無い。

 

次に、コマンドプロンプトから操作。

とりあえず、Vagrantの設定ファイルを設置するディレクトリを作ります。今回はCentOSを入れるので以下のようにした。

mkdir MyVagrant

cd MyVagrant

mkdir mycentos

cd mycentos

ディレクトリを作った所で、仮想環境を作成する。

コマンドは以下。

vagrant init bento/centos-7.1

ちなみに、作成できる仮想環境(OS)は以下のサイトから参照しているようです。

https://atlas.hashicorp.com/bento

Linux系の主なOSは一通りあるっぽいです。Mintとかは無いみたいだがUbuntu入れとけって事ですね。

上記コマンドを実行すると、ディレクトリに「Vagrantfile」というのが出来てます。

この中の「# config.vm.network “private_network”, ip: “192.168.33.10”」のコメントを外します。

192.168.33.10というのは、OSをインストールしたあとでSSHなどでアクセスする際のIPとなります。

 

ファイルを編集したら、コマンドプロンプトに戻り、「vagrant up」を実行。

これで、OSが起動する。

ちなみに、シャットダウンは「vagrant halt」のようだ。

 

総じて、ものすごく簡単に仮想環境が完成する。ここで書くほどの事でも無いという感じ。
OSのファイルを別途ダウンロードしておく必要もない、というのがいいな。

 

さて、準備はできた。これからphp…は入れません。

【やってみた】自分で役員変更申請

弊社も何とか9期目へ突入しました。
お世話になった方々へ心からの感謝を申し上げます。

決算を機に税理士と相談し、役員変更を行うことになった。いろいろと理由はあるのだが、ここでは割愛。

で、今回その登記変更を自分でやってみたので、備忘録です。

面倒な人(ほとんどそうだと思うが)は、お金を払って行政書士とかに依頼するみたいですが、

  1. お金がもったいない(お願いすると数万円かかるらしい)
  2. 自分でやってみたい

という二点の理由から、今回自分で申請を行ってみた。

ネットで調べれば、申請方法は簡単に分かります。

意外に簡単だなー、こんなんで行政書士は何万も取るのか。とか思ってしまうほど。

ただ、やってみると案の定面倒でしたw

 

まずは、必要書類の準備があります。

今回は役員変更(役員の追加)なので、それに限った話。

 

必要な書類は以下。

  1. 株式会社変更登記申請書
  2. 臨時株主総会議事録
  3. 就任承諾書
  4. 互選書
  5. 追加役員の印鑑証明書
  6. 定款のコピー

それぞれのフォーマットは法務局のサイトでも載ってるし、テンプレートは探せば沢山出てくる。

記載事項を満たしていれば、書き方はそれほどうるさくはないようだ。

但し、私が参考にしたいくつかのサイトでは、これら全ての必要書類の記載が無かったり、サイトによって異なっていたりした。

実際、調べてみて必要だと思って用意したのは、1,2,3,5だけであった。

3の就任承諾書については、追加役員分のみ。4については、そもそも必要無いと書かれていたサイトもあった。

 

で、これらを用意して社判を押印して、川崎にある支局に持って行きました。

ところが、もう川崎支局では法人登記は行っていないようで(不動産登記のみ)、桜木町の本局へ行けという事でした。

川崎支局でも受領は可能だが、結局本局へ転送されるだけみたい。間違っていた場合は結局桜木町へ行ってもらう事になるかもとの事だったので、トボトボと桜木町へ向かいました。

ただ、これは予想だが、申請書に連絡先として電話番号を書いておけば不備があった場合は電話して問合せてくれるので、わざわざ再度本局へ行く必要はなさそう。

今回も、不備書類については全て郵送で済んだので、川崎支局へ出して転送してもらうのでも問題は無いかも知れない。

但し、その場合は転送に時間がかかるようなので、急いでいる場合は直接本局へ持って行った方が良いみたいですね。

 

途中、駅でクライアントに呼びだされてホームで仕事。

簡単に済んで良かった、と胸をなでおろし、桜木町へ。

 

桜木町から少し歩くと、横浜地方法務局があります。

20151104_033050720_iOS

素敵な建物ですな。

 

警備員に法務局へ行くと告げると、首から下げるやつを渡されるので、それを下げて法務局へ向かいます。

いきなり提出するのは怖いので、とりあえず相談窓口で必要書類に間違いが無いか、確認してもらいました。

すると、案の定、足りない書類を指摘されます。

まずは、6.定款のコピー。

コピーして割印して、最後に署名して押印して出す必要があるとの事でした。

そして、定款の内容にも依るらしいのだが、役員変更の場合は互選書というのが必要らしい。

 

臨時株主総会において、新規の役員に対して

「あなた、会社の取締役になってね。」

「うん、いいよ。」

となって、取締役になってもらうんだが、その後

「取締役になったので、今後はあなた(代表取締役)を取締役として認めてあげるわ。」

「うん、ありがと。」

という形で、選んだ側が逆に選んでもらう形とするようです。「互いに選ぶ」という意味でしょうか。

なので、この互選書という書類と共に、代表取締役の就任承諾書も必要となるとの事。

なので、就任承諾書については、新規の役員の分と共に、既存の役員(代表取締役)の分も必要になります。

 

なんというややこしさ。

 

プリンターを持ち歩いているわけではないので、スゴスゴと帰りました。

帰社して、定款は電子定款からプリントアウトして、割印して署名して押印して完了。

就任承諾書と互選書を作成。

よっしゃ、これで再度リベンジ!という感じで、再度桜木町へ。

今回は相談窓口はスルーして、直接申請窓口へ持って行きました。

約1週間で登記は完了するとの事。

何もなければ連絡が無いので、新しい謄本の請求が可能となるようです。

 

で、1週間経過するのを待っていたら、法務局から電話が。

 

「申請書に記載してある株数の数字が実際に発行されている株数と異なっているようです。」

「は?」

 

ほんと、馬鹿ですが、自社の株数を間違って記載しておりました。

で、割愛してますが、他にも凡ミスがあり、2度ほど書類を郵送しました。

 

とりあえず、これで大丈夫かなと思いながら、法務局から連絡が無い事を待っています。

※変な日本語だが、法務局への申請処理的には合っている

 

桜木町へ出向く手間(神奈川県も広いし遠くの人は大変だろうなぁ)、書類不備などで再度郵送する手間、その他の調べる時間や書類を用意する時間などを勘案すると、ある程度の会社ならプロに任せたほうが良いと思うのも分かる気がしました。

ただ、これはこれで経験として面白かったかなと思います。

 

とりあえず、注意点は。

  1. 川崎支局では法人登記は扱わないようになった
  2. 定款コピー、互選書は忘れるな

という二点ですね。

 

まぁ、次に同じ申請するのはいつなんだという話ですが、川崎で役員変更する方がいたら参考にしてください。

【nagios】監視サーバ設定メモ

師匠から

「監視サーバ立てとけ。」

と、チビリそうな指示を頂いたので、nagiosとやらを設定してみました。

私、linuxについてはド素人高校生と同じくらいの知識量なので、設定等で困っている方が見てもあまり参考にはならない事をご了承下さい。

あくまでも、私の備忘録であります。

 

サーバ立てとけと言われましたが、実際にはlinuxサーバが稼働していて、nagiosもnrpeもインストールされている状態でした。

なので、純粋に設定の変更だけでOKな環境でした。

※今回はlocalhostの監視ではなく、外部サーバの監視が要件です。

 

インストールとかは、いろいろググれば出てくるので…。

 

今回ハマってしまったのは、監視対象サーバ側からnrpeの応答が無いというものでした。

数時間なんだかんだとやってましたが、こういう時は一晩寝ると、何となく解決策が出てくるものです。

今回は師匠から、

「監視対象サーバ側でブロックしてんじゃないの?」

と、救いの手があり、そこから解決に至りました。

 

まぁ結局は監視対象サーバ側のiptablesが原因だったという、いかにも素人な…。

とりあえず、nagiosやnrpeの設定については、それほどややこしくはない。

 

nagiosサーバ側の設定

/usr/local/nagios/etc/servers以下のサーバー名.cfgファイル設定

とりあえず、適当なサーバ名にしてファイルを作りますです。

define host{
 use linux-server
 host_name <適当なサーバ名>
 alias <適当なサーバ名(表示用?)>
 address <接続先nrpeサーバのIP>
 active_checks_enabled 0
}

useというのが、いろいろ小難しい感じですが、とりあえずこれも適当で。

そして、nrpe側でインストールした監視サービスそれぞれについて設定をします。

define service{
 use generic-service
 host_name <上で設定したhost_name>
 service_description PING<監視サービス名>
 check_command check_ping!100.0,20%!500.0,60%
 max_check_attempts 1
 normal_check_interval 1
 retry_check_interval 1
 notification_interval 10
 notification_options c,r
}

かなり説明を端折りますが、上の設定をズラズラと設定していく。。

ここで注意するのは、監視対象サーバがlocalhostではない場合にIPを設定するんだが、

ifconfigなどでちゃんと調べてから設定するようにしましょう。

 

/usr/local/nagios/etc/nagios.cfgの設定

この設定が肝のようです。以下の有名サイトを参考に。

統合監視システム構築(Nagios)

date_format=iso8601

変更はここくらいでしょうか?

 

管理画面のログイン設定
管理画面を見るためにbasic認証を設定します。

htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

nagiosadminがIDですね。

これでパスワードを設定すればOK。

 

確認しよう!以下のコマンドでnagiosサーバ側から監視対象サーバ側のnrpeをチェックできる。

/usr/local/nagios/libexec/check_nrpe -H <監視対象サーバIP> -c check_disk -t 30

check_diskの部分は監視対象サーバ側でインストールしたサービスを指定。

ここで、ハマったのは以下。

まずは、

Connection refused or timed out

と表示されて、動作確認ができない。というか監視対象サーバへアクセスができない。

しかし、pingではOK。だけどtelnetではエラー。

telnet <監視対象サーバIP> 5666

これは監視対象サーバ側のiptables設定が原因でございました。

iptablesを利用していない場合は関係ない。

とりあえず、監視対象サーバ側のiptablesを以下のように設定

vi /etc/sysconfig/iptables
# Nagios
-A RH-Firewall-1-INPUT -s <nagiosサーバのIP>/32 -p tcp --dport 5666 -j ACCEPT

設定が完了したら、

service iptables restart

で反映です。

iptablesはviとかで設定しちゃいけないのかもだが…

 

で、telnetでも確認OK。再度確認すると今度は。

Could not complete SSL handshake

というエラーが。

これは、師匠から教えてもらった以下のサイトが参考になった。

NAGIOS nrpeでCould not complete SSL handshakeのエラー

監視対象サーバ側でのnrpe起動を

service nrpe start

とかってしていたんだが、これはダメみたいですね。ややこしい。

という事で。

service nrpe stop

/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d

これでOK。

再度、nagios側から確認すると、応答が返ってきました。

こんな感じ。

/usr/local/nagios/libexec/check_nrpe -H <監視対象サーバIP> -c check_disk -t 30
DISK OK - free space: /srv 14963 MB (43% inode=76%);| /srv=19785MB;29311;32975;0;36639

 

ここまでできたら、ブラウザでも監視状況が見ることが出来るでしょう。その前に。

service nagios restart

で、nagiosを起動。

http://<nagiosサーバのIPとか>/nagios/

で、管理画面が表示できるのではと。

ちなみに、監視対象サーバへの疎通が確認できないと、以下のような表示になっていた。

01

これが、繋がると以下のようになる。

02

pingだけは通るんですね。

 

そして、理由不明だが監視対象サーバ追加後はサーバ名の所に「✕」がついてます。

03

なんだろうな?と思ってたんだが、クリックするとこんな画面が開きます。

04

ちょと見にくいですが、「This host has not yet been checked, so status information is not available.」なんつって出てます。

とりあえず、右側にある

Enable active checks of this host
Enable notifications for all services on this host
Enable checks of all services on this host

のリンクを押下して、監視と通知を有効に?

そうしてしばらくすると、この「✕」が消えて通常運転が始まるようです。

ただ、これでもまだメールは飛びません。

今度は、メニューの中の「Tactical Overview」を開くと、画像のように通知がDisabledになっていた。

05

で、これもクリックしてみると、設定画面が開いて、Commitしてあげると…

06

こんな感じで通知がONになるようです。

他にも、サービス毎に監視・通知などの設定についてON/OFFが出来たりと、わざわざviとかで設定しなくても、管理画面からある程度の事はできるみたいです。

 

ちなみに、監視対象サーバ側でのhosts.denyがALL:ALLとかの場合は、hosts.allowにて以下のようにnrpeのアクセスを通してあげる必要がある。

nrpe:<nagiosサーバのIP>

 

nagios、nrpeの設定についてはまだまだあるので、勉強しながらやっていこうと思いますです。m(__)m

とりあえず、まだアラートのメールが飛ばないという…。

echo “TEST” | /bin/mail s “TEST” notice@example.com

ではちゃんと飛んでるし、

notifications_enabledは1で設定してあるんだが…。謎。

 

師匠、今日はとりあえずこの辺で。

OCaml環境構築メモ

へっぽこエンジニア、凡ミスキングの米蔵です。

数年前から友人が「関数型言語がイイ!PHPなんてウンコだよ!」と言ってくるので、そんなに良いのかと思い、とりあえず、OCamlプログラムをコンパイルしてブラウザで何らかの文字を表示できるところまでやってみる。

OCamlのメリットは、静的な変数(なんか矛盾してる感じだけど)による、バグの削減とか、いろいろあるらしい。とりあえず今後いろいろいじっていきたいと思います。

 

OSはLinux Mintです。

$ cat /etc/issue
Linux Mint 17 Qiana

ダウンロードはここ

 

OCamlのインストール

まずはこれが無いと始まらない的な。

「システム管理」-「ソフトウェアの管理」からOCamlで検索すればズラーっと出てくるので、そこからインストールするか、

20141220

コマンドで、

ocaml

と、いかにも既に入っているかのごとく打ち込むと、「まだインストールされてないから、これでインストールしろ。」と出てきますので、それを実行すればOK。これがどーこーというレベルではないので省略する。

 

opamのインストール

「おぱむ」とか「おっぱむ」とか呼んでいる、パッケージマネージャー。

ocamlの開発環境を作る上で便利なので、これを入れる。

wget http://www.ocamlpro.com/pub/opam_installer.sh

sh ./opam_installer.sh /usr/local/bin

ただ、上記サイトのインストーラーは古いみたい。1.1.1が入ってしまう。

どこで入手したのか分かりませんが、1.2.0のopam_installer.shがあるので、それを使う。

./opam_installer.sh /usr/local/bin/

インストール後は必ず

eval `opam config env`

を実行する事。

 

ocsigenserver、その他のインストール

ocamlはapacheではなく、ocsigenserverというwebサーバ上で動くらしい。

そのため、共存すると自動的にportが8080になるようだ。

とりあえずopamが入っているので、ガスガス入れていきます。

opam install ocsigenserver

 

ちなみに、

opam list

で、インストールされているパッケージの一覧が参照できる。

opam --version

でopamのバージョン参照。

opam upgrade

で、パッケージの一括更新。

とりあえずopamと叩けば、ヘルプが見れるので、それを見ればOK。

 

で、とりあえず必要なパッケージでocsigenserverの他は

js_of_ocaml、dbm、eliom、lwt、tyxml

この辺でした。

エラーが出る場合は、removeしてreinstallしてみる。

大抵はopamのバージョンが古かったりするので、switchしてバージョンを最新のものにしてからinstallする。

opam switch 4.02.1

とか。

 

eliomでプロジェクト作成

eliomはocamlのフレームワーク?、とにかく新規のプロジェクトを以下で作成することができる。

適当なディレクトリを作って、その下で。

mkdir develop

cd develop

eliom-distillery -name hello

とやると、developの下にhelloディレクトリが作成されて、ファイルが作成される。

cd hello

でディレクトリに入り、

make test.byte

でコンパイルされ、ocsigenが起動する。

この状態で、ブラウザから

localhost:8080

とやると、

7RMPagga

って感じでブラウザに表示されます。

他に、Geanyというエディタを入れた。うーむ便利。

ただ、作業環境については探求の余地がまだまだあるので、今後探索していきたいと思います。

 

ここに至るまでにエラー出たりとかエラー出たりとか試行錯誤があったんだが、省略した。

大抵はメッセージを読めば、何かのパッケージが足りないかバージョンが古くて対応できないかという事が分かります。

 

以上、ocaml開発環境メモでした。このエントリは今後大幅に加筆修正される可能性が大です。

何かの間違いで読んでしまった技術者の皆様、

「チッ、このド素人が。」という感じで構いませんので、大目に見ていただけると幸いです。

phpの難読化について【その2】

性懲りもなくphpの難読化についてゴニョゴニョやっております。

今日は、Compressor.phpについて少し改造を行ったので、それの日記。

 

compressor.phpは主に変数の名前を書き換えて行くのがメインな処理なんだけど、これがチョット甘い感じがしてました。

例えば

$result

とかっていう変数があったとして、compressor.phpは単純に変数の出現順に$Aから$B、$Cとアルファベット順に置換していくだけな感じなのです。

なので、前にも書いたが「;」で改行入りで置換処理すれば、ある程度は判読可能な状態になってしますのです。

 

で、もうちょっと見難くしたいなぁと思っていて、変数名の長さをめっちゃ長くしてしまえば面白くなるのでは?と考えました。

で、compressor.phpを改造です。

 

とりあえず、$Aとかいう変数を

$rdgKFPerAXPtgGmVYCGmwRDsisejuCEXiYExwtXjVpLfKJMwTjUgDbDAYzZMVbYhSwGusbZehMsQRZXPdLmWzfjtiJQsFWJmYGhr

とかにしたい。

こんな変数名が連続して出てきたら、まぁ見た目で抑止になるんじゃないかなとw

単純にA-zまでのアルファベットをランダムに並べればOKなので、以下のような関数を設置。

private function set_var_array() {
    $this->var_array = array();
    // ランダムな文字列の配列を作成する
    $base_char = array('Q','W','E','R','T','Y','U','I','O','P','A','S','D','F','G','H','J','K','L','Z','X','C','V','B','N','M','q','w','e','r','t','y','u','i','o','p','a','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m');

    // 百個作る
    for($i=0;$i<100;$i++){
        $rand_str = "";
        // 長さは128
        for($j=0;$j<128;$j++){
            $rand_str .= $base_char[array_rand($base_char)];
        }
        $this->var_array[] = $rand_str;
    }
}

内容をお分かり頂けますでしょうか。

この結果、

$this->var_array

の中には以下のような配列が出来上がります。

Array
(
    [0] => nmEcYyxGEzYylaPpxyfbAFNLZZBgeXeHzyYZRrIIOucHANyTjfqXSWkmHmuloucggAnuCKOoDfebTowdaNdTMIWykjYKzzBCNsQoVEebIraDFMMnMzpUylBmsdaGQNje
    [1] => kfkAajKpUrSmcrqfpJpjtkTWYrRXRIfswRwXMMKhhnJradraoKgupdEUjmWdaOImGoQfKjomykIKPEYeMmcnaqqKkwHAziZNjWdXFVTjrETCaeEnJslWgiHlZeGYyuwK
    [2] => XFePCWqGMAnJZikLZBqCFqoMaJJnaULEFMhaGJMbhqIWRSRvqTqAENIVARfsbemJIQXrxojMZdJhLgeRmGqkHHIXVwURnjrOvXrdViKUjXebfawEnDYFierwXQTAQPUy
    [3] => myQBgmGnEWgyJDqXcDUmobGNydyhPstbESuBjuZFodsaHJEdoNgOSuLLXVDkclWywMnCaiTDnIvqjVoGTVcqmwhCbuYKLZvSjuTkbmpwezfpxJzvtZcqQXvaftdAXcMP
    [4] => oTyYsPRsJICrocBqqdywyVkduzZeVOUjPuLBEMlHztUkIiVQRuyWVajfAeibuGXDCLhCckZkdtqhbppryBfyzbVKdTkxJxWqwSCkntJNerpiSHoFHiWWlBIhtvvBcReD
    [5] => ifTpjYXkGbQpzehwCKFNaMmPXrlbJUADNEEgsQAkmWZeJAMkyQAbIKTZgCUmVgfKncnQesCPBNhbAFClernbfFjLcMpxZDRsVEAwbMDFSxImYJLJkKwuVzzXdtzDlOKa
    [6] => vlyNSMVoirBveCvPKusEaviirGYnpAgqqDnizfybECGsheSzFzUKVDFhtMUKjtPgfDmBpTOCkXTkFuFiKCAMqOUVdNoGLrUXmFLJSjKRVwBGFpCxRgzNcYGpjZBFmJNx
    [7] => IrwpbolGleioDqNhkYSDUKsfPTAsbyLPedkTNuyeNxPRImDOSJEvlnlxjZpNdUdWzNdBAGwJFZcPVsPYiadDWbESBzwUbunLfaCOQzlVZkmSlzXzFYqGeLtrOLogTKAT
    [8] => iJrhIZSQCkNJLiLBKbIdfWOysUQRNrPUPjczXJZzLWuHKBZVyUDCAnRFNpuwwKVLwbzKkSleukSWPDHrzCBCruhbjUIhwUpbixhaBGGAomdXUleUMUayHIoQpqlkAKzH
    [9] => fLTyiJWdEXCBEBBgelaLszsUmPqriyDjIhfnUzKWGzXYdBfBXFGXRoYMPopgvXjsmEUJHczunzDoPiReIdMptyugtUBEdbuoRXDcbfHgsDOJsMsqeSYFpzZmhTixMTQG
    [10] => FkJRumKqMyTNUZgbHITzfGpodVSGFOaPBCdTBFjDkDVxdYnncUFiKfFsZMMXRHYSTvZIOdirupRfzykFhuUSziuBavCrITbadPoXgzuITjBolaJXxkRdwWYejfygtehW
    [11] => hkPASOasuMAXdnVHXOVEJzVuhxiuSVODNWTDVNjqmrgLakMDIlTwFBJsEvyPaijVCcjbpTrmAMKfLOZqfpjFZfNiopHrMlQgapCJPVqBsoKLgoVUBGTamvpGRPbFudJW
    [12] => rqgTAxPxIURIJpfOKAZbnUXgEZMpEaKeZGfPEfyPsyBStFusIvyljiNITnvFssRwEGKNXkSpfpuHksTItQSEIiSRdkgUlqjupferszvzzerSLxuORFMngQUHfDKLylkz
    [13] => MpaOZRkyGfqPberrHbZNqMEGRCwrQFcWOefvNoWpPMhHgwNZzhSEhMwLRHOKjiqmnvaTqbcbmLZXUKaXgcFYGSfaDhbFhaPKEXCWYmcAIAqPPALadlTMPDWPHuZeFIMI
    [14] => hOrLqXckNufJyDSGaMpfATytFShCdVihdNZwentAAEdaeHpaLnOcCNBZqkDgXSfmJuyDdjtxVdapVzzSJOEldvSwEgczAHeJlHATcbkPvyXxKGHzyQJZGdErzPpllpra
    [15] => spptTgcdbeQDzFfhQMLnIvxooodqlnPlQZfEVjUkGjlbiKvhBaMjuTqAPExPQkeLlmRkJHgasFHIIqbbTJYAzkNIYycLmbvrSCzpuJbgzIJnofwqqrLYDwEWrbKjCLKQ
    [16] => HTCciTCmmdpAdslIobPDhSXXouyZWoNkMoCrRcgmsOkEDoiPzFWstqnzbqgAPqUErmNYhIWkwfXkDSLHwsgsZbgTZADFWzQCqeoFrqhQENwqeVoPmcWzlmJIuUydMhNr
    [17] => cAbKTJpjTvDYabRjxnPHSAqCojlZjcVwEIlZhNTWLKRIyrWxLhBmpufvbwyoMPwNRIpKmXRUmFXlTpzjozmjqnZTkFWVXBsomBGgQoCfYHJbQMxAiLuZQOirznqxrRao
    [18] => poVhKBmYSNgQIJFRujUtiEOIYpSiobxVkfoWdPPmfJNKlhNDKXgmUUoOauBVJYiaBjInJaJTzvuzCmLibVDqrfScDZEJaBdDkIivJRdatgFAuSmSftiMFKuwEZvBiQeU
    [19] => hMTZbsxRKIiMYlwUjpVKLOEhFKkmHqcMCDEmNwFwkEvJpoQUinqnYQCpvHmGFfreEisriAzCwmSwZDkaVPZataxcAdeKOpAJNRqXfikkWRXOhPIfgwwMaOdqhgWahcOZ
    [20] => UKsnfKEFNwPnEOCMNYAFSBksqtYOeiiwEqVZFJiyCeoESiUVHTnjaWwNtvzEKqNTjVelNUvxAVedGVMnLposaVGXGdOZbDmehwENEhBKGNrWcdGebfxSAsuvqusjvhMm
    [21] => XjFikbeQETgFEWigWdKQTFNptdbajWddehzzQbcMBqaUJgKiorjoWhKpCopXcjmqIFiQXZnUZnqiZWrKpykkPKWTahygIFIkylYwLBBmlxVZmhTzkxtrhgYDMraLqiYk
    [22] => wNNrbLWaxjiKWyqRYpIXynYVsxPmtrsDkURKjFzXJUQgJfBGgVqEbYKeKBOKCfJuVneGwEGYvQcYhvEatvqMuefgIhppYVKvRCFcSuHieASgOIRGYZLLEUeXcWJgisKy
    [23] => kuPnUymZAdICsonzxYpCDCpmIZbghnYhmrMGISABGeksIRwEbmLBXUsgNNIjpHdJCDhpTbSXNVAQzDVBcSVrBkhpsdWBIPxbaAaxJmpqvsLdsufrLTAFHIIYqdQKPEgn
    [24] => IePOxIHHOAhgzquGUPoIIKlWDkILyFaiUonFeFwfhVowmsNkMCNiOyOcUNfbwAxOBGzwGLRHBXIngeUqgUFJhuhdOaUoxldiGfOyUTlXpYRdYNsFxmeFkZYCvxEGpHxe
    [25] => qQinzTySXGPrJIKOpCpcQjjiiJLwzwLMIcrGrlPdRuBHCAfkayOfJdXOVdQdvlfPPSowEWkiVOWajOxJCmXqgtDvtGpGsohJhaNKMGKgPwmmYebqOLhDiiOIIXbCxOlG
    [26] => OrebsNrWkBUoDKOQOvmeUyslXIRgDxGZnktLtqmdKxgyjWXhyfdhxzpHXOGKUIKAEpEbMsLRYwCcmMcHOgxEttgCxeXwhtmAvPgANClQwIEnxZCztRXkcGQSeUIRsMEN
    [27] => EEiWHXxRImNUhUIvbbqohHviGQJYdfRyYCMRNksUBmplCzgWhdyauQbxXHBljsxFcVKRAwZpEEioDYbtYGpZduzYYfqMbVLBYxlkQARRcqZJNRNmNofzudbFcZSGTBdp
    [28] => lvdzGBXZWuRKkSKGQKrdXorBcKopCddYTkHtAnQVXQbmcpKJHOkRTFDShIGsjLMHdALMJGzfpZjUkUlsYhPIhNTnZfoxbUdYmHVrkRzZMYORKztGBQMzoTJsGLxRvOoK
    [29] => RzNePhoYLHVYMJmRsFcZpwsrKaftDTUWHwlUhWUJOBsLPUKSqUPFIxsyyeoHUcEVlkayvvTGWoLrPctydkYVfbVSRvKkMZsjJiioQUYRgAoplaXFSrjhoUgrBDobbadz
    [30] => WMvTjiEkRTpIEkEQMVFHnuLNxwOZlNozAumpjPemhpcuhCWmjwFOaTJPVhyKRvqMrcyqrPvnZQHkJMUTNwPqeRfiVxrzGaUkGYYctViresWhNDmPsYBTmNfkDquauFNQ
    [31] => ahcQYbvWTqjMotdscwasIrHTUnklSjWFovmHhrNuGeSsbEJRkNcIypnYilAztdxGlzfOkJgTYVtKIZENZjiqGVrAkvCpxEIzkuibPTLpNeoLQXRepsbuByVrVzLMRLuF
    [32] => LvPDcpsGGJpfSUAOqmwrRHjkCUtvkVlKSbdOARCWVgWkmsHlzaELdyenZXuWDqchlkTbMvmnvjCedMczvpgPNRQOgKHkEAvusCCIFXNNlAgPjrVlbpXQAQkseuMxpQcf
    [33] => fNfxoOIDrdxoIyJGBpKWVERFPEgiCzQYKpGjSmcolNRbJuroWFYFHpKMNwkoriSUuePbvbPbTAunOaYgucMLEaewYIkbsahgRbdUskFcfbukkZGRBEdIIZzLmbJmGlHG
    [34] => YEjkTKwEMMBaEfErtgNoLOvSVSvxbcMrjXPoeoEkCQefIFfLWGBfjnmNoHCdqvwvGHVwkGVCNAKJPpoBDukhLUfpTYVhQMpFXpelFNfTIkopvWBuYDNIXBMTnWHnLSJQ
    [35] => UhLyCJDyjtdPvkwEajJbWqUfbQgWhvUkCZdqYymwUKSMEarUTuwUAXjfISBhIfWxJllrzQdCwYmxradPjpyjtMQhtAUhOcboVKShmeDvjQwEjeodFBWHKLjYQbYoTYqF
    [36] => tJBaEUWRvsSKsVdnDTaHLIOHHsClpxqMGTKpwcyjYUlWQBZGxjCEpIFgFSrKuhtUsmVXATVQCWMcoyvhuGwWnRuxtRMDxmGjfJwwWjQSGSxjOTwalvEMJOQRIzcAfaRr
    [37] => JycXTaiOiALkhIEdWsRYWsZpsAMUgyMHbDRzsVDvyOrcbKBKvYjwrhynYnCBwktxiICjmVbTYSdqtITGERAJEidsXNNAUwVUdgIZHZAjyDoBpMVZeJTZIEKaITJsmBlj
    [38] => jURoOLjRYhcwQpEZHHMCcawyWJmMfFQixjNsLfOjRDWKOdwgxXJVLzLJwWNFqMhAVRwSDyenpMpJdjYSZtqlQQskcXwEDqkqKSJRhYQYiumCtcYYQnISoCgdAdVsHJNB
    [39] => JILhCTRZNXxSHEHkTmrHBiDfFuinlyBtWsGTRVhOgLjLmTevCGTWorvODRrvppWQNxIBKbyAqrwyfylfVzPBwWuawEhyJknXwgRBIvDsapntrgjAqGzYHbDuHFZrBAGd
    [40] => dqTxbynefTohZqrXJxgmIIWCmthCIcFlOhHbyJvDMcDIYOLEkZQgSSTpNFVsAGJuDgHsUPkfpdLQhLKqgkqULEhyZzJuqpjOCcEOhejDZICESNBsPwLSStqPFOKHeQDj
    [41] => xcTIhpyIQNRwnhOlHhvOctRshkDsbeMCZfRPNofZhnoYUfNAEXBiFuiySpBHHuUwhdOdnzFbZNJrBJoYCbNShVwjhKFaYPosVGVXsWtckYEssFRpVJIWULEZXGoGUPMo
    [42] => pCpFhDeyDYLEEOjDkNZCvTjqhOtFZdjxybQaPYlWNijTyOtNxFezUvkcnKhzeYqZNMJBpdBLKOlipZNkwEkBFcamkJMWfybdlrdXcFUqwEPWuDOxiyjmEufygDdlACTN
    [43] => OpzdqgDGUNAOXEpoqUdMyrCbBHbjbUBPSsadHVGivwKAujyCRhyjmzyoQaBPvRmPJvtdLsCxOssuejenAIDogBGivRBLPYWkbTpaauAgJUuSeyIJeujMcVgiTRpUSByI
    [44] => jnxHcaoymLJCLLTCFZwixbdgCGiFDQAGDQxkVrhCoooYSFeXBSMJHoioewdpWNCxKiBsURhYPbfSfIcNTATSfrTJhxiwRlhDWWQuGBVBAuArjAWAbeTnGEBXoSDehPLZ
    [45] => pASufvXFQxwfDJXbSqwYCEzMxRnYajskUXdWvuAAsAQSILVRblFdOwVYLRqycdkCPeEDRnXkfQzPVwElqGnCZPovtCVSjFeUwbQHDrJAEaVpaYaniJeIgWkCEcbbOKgL
    [46] => rGsVWlVMDMcwofhTBLnntjPHPCnzRVGSCIayxJnoOuLjOZYhtTUFprQsWeqGhaJvObDNBeWJQFzARGieLCyyGvbZesJpdXNpYTIbKBglgdKafvcfgBvdYQRJahinzEfd
    [47] => nzmWDgLmHXAuqiEtufDWTHQTsTcahkuWXxtrIbMPTfVmmSbdyyrXyFBThfwQWLSrfrmlQFBfpvWwHOMYeAwBZJbtLFWiDcRDjldCKsNcubDXQwSAiYGjBHThHHziLABR
    [48] => KimAYjfiDrqLvudXolzKpUpdznOOMKjJeNDcqpqSFMqpWDHZgMfhVZYKsEXnVNRQABKzdzpjLRktvKXpcisNabMzdsQPSZrTbsyVygxFcZAVRKNfQZckiUqvTZSlKpAo
    [49] => ZnveuNAHopPrNBsTIxUqgEBCpbaINdaKSNeoUkTcuvAhcdvgbsygSnGMVZRnNMlNNzZHAbPuhFsBiLUBoxeuoPmunwzhhMlKoVRBCKjYSjsNukDMLvfoBuJSagpeWyst
    [50] => YCVXwExTAIJALkqLjJmBOnFluxYWXfIuealFFaoPQBuJjTglvCLqwbTDklfYuqoSqMecbXwdQYJrzFHDfDfSIFYEMkWuYBibZciYlHNMWEpUIytqTjzhrdMBqoaMPouk
    [51] => jsCjgxkoMEAQQDxhctkXeqplfodagGaGJxuxHkmFQsKXkHCPoxnRjxTTHpzQPcuoxmAeCbrerPqXXhFQsrqGmYyZoRrGAPwEvPkmLkMZPdlsTdlrydnCxPppAYjtYUsc
    [52] => TNzbloAeBzrbygEhyaalMoIDXoRoQiAoioTuQQhFmzBNtQmrKXSacMJkvmORwEeYeyTZrHCKSnUIRoCGMQHLRpPcUoqQVSgOucGyTyFIZEeyPTPoZWMmUmVsKKxKxOva
    [53] => bLdsjBnWOHrYFDfVnZpmrbiqVlWutAkAkUrIAVNZRztVxdHXuXPFLzhtlCpmCKReucnpMezhuQVABNsKAuGiPxModwPZBRsdOpIdmlEJbGKWjIJbZkAJnTrGgZLwnNFV
    [54] => TQWYHTdDsLpcxLyeaPbIbfliQSrNakzhPzogQztfAAWuCuxWaSsimzJBhrsNIwEaWJbHokfJEkAsHuTFecalYSJRtWSCAqPFoBJRmPkQgGPodRXXNImRFHecJbNiXvEt
    [55] => SSfhuPuVvBAmUvuUotrVbTHRZGZbdulEoiLcHhQXZYAdcWybFfCqhWnCEWIhCTCULhVitFYxrUehRwgMCQucGbKLopMFhEhchDMsGktycqhvCoNcAuoRfXFMBhrQpHOl
    [56] => XpklAMdDOLEiQpSioIdZkuyJQkqNMYiAXzrfKMpNnZSgoGNqcsvsqZXSiQdVwjdEuZQpBcDBIdxbsuiBUpOFhKlVARQYmypVMhqRlNPfHyYHHdIZocVlNWBvBvEksBsi
    [57] => vNClMdJlzauxzRxYUZsyszkDTRveoTMZWJiUXTPLKgcTgoosyCgfoDpgAWWrsCAYfMUDqtzShjVTVEinVaPONUmrsiWMvKlGNsCmPOBKXFZFLwWLdOlTJBLdjezIupML
    [58] => pYbveYSobLmNNjWVeRGGthZDrqyFGllHymjvRRaVeHSEdPSXHphoVKqViKTBJQymPThwCphZRhkznbeevYQxZXSWfIcAeOORPlzIOiVsUOraIXBEyrhiVlHcShJuObtA
    [59] => UfdsSACWQNJeFLOJLKxUNQNaNoqznxeJsMnoxkKUYPvMIkjBWSOTEeKLBNbhhvTJQiLhXYYPBHgsdVkFajobkkqkAeABbzXUFevnPXziSwpPKCYExgNqdhYBFlKaGFSJ
    [60] => haWpSaAzbLYDokSGafcaFboHoMgPiNjpQJZYORJIBVnyLjnhWadYLQHgePOnyylbVpLjivNNrMbqLTTMVJpbvQYcgdTxoAceloafZJKllVTpKsTjIYaorYKLsDCBxvWN
    [61] => YEkzuSKLrcVUcKhaKNJBaAoedDwuqVABcZYdocABicMIbiTIyMpFekqSxdForvtReNSPVFRBlUmClsrJYeyGLRECdBCjpeueaqcZJKKiWYjymemDHkQmwPpzZGLPXLIT
    [62] => LBsexlSZDBNRoHTGkZYerUERhVQOCVPBBhNMeCHmKPHRxxhElyvcYXRVlTdzvZxTaeeDWLhcOOpLqieuIRbPGMZYRiyPvQAUyTyLXKHPupyyEHVDgejPyqUdWhKyaDnw
    [63] => znnzwgynBoOSzGOoVekQNkQjFlGEzMJjJRmgRzqrIOqDJlOzCtekngeCbeFDAheiVVZeOZKsDZUsUQloHhKfXFsEQBSRHUWZXezGscnHSiKtbiLDMCAOiWvCYIkCYbvT
    [64] => BunBaubfCQxvyUcJjjnhUCAwHwPdSAxIHoPzPMurubUDFXtKPkMAWMEcErrIVhmlIfYXSzLlWeiEWPQKYdXltDqZbZHMmtqQEQCQmjABZGRfwgYFyoIUETXlNFVbaHtP
    [65] => ZoKnhMqMxSekkqMpWeIFZDvwVVvtmATUxaoBgxbiyQQTvuJMHQuYidkqGgxobhnaVQVfKsiNldUggscdCvfeqkprgdRSsIxzlBSovPcFLAsjOjpOUjyRhtcYrrJqPUae
    [66] => gtsBlMEuLnUJXgeDfphLdziUfbasCrYFmXOGTJjUurAuOxWSPwKUpLIdfbevRrlIYMexCheIMsOyGAdQLEMqDWIVTFdplLHwCqHnnkNwcENsXIrRDOlzwpfJQASwswRl
    [67] => pUqlXJOWErkyPYncGfgzENerVGuTAmwPBeOYCusPiVlniUPIIruLAgGkNscyHUAIgAzMGAFKOBDVyaHBSauQaxWqNkadJjtBwEoqOOFHWxedhGviAylxNYTVPAIAavxb
    [68] => pRZTYycRnVqVqQBzPAfQpQpwIICVidycnXIIoaFySNJfpWwEYXJoFbulzWzfUsooYrBBoONJBYYfASFDZTdnRhWIxwNHqDteXsNCgpylniHeZelBWBwEcVAckFMecIqk
    [69] => SFpmEZhiYagVjgKpjcXExRolHSVLyCvjmtAiRoYsmDcSUcjADbztwxkXkpLlJjCYoxJXCKjlKAVEDHEcIHINAOoqbOWmLWyOpXUESeoNmEbuzmAzHnidDkCCHpmJSaFJ
    [70] => NytrghpXoAIOSejKckhgGLqxarlTjlUdXmeySBpdETGTrISAWijElwJyaEicjoELTDruNCqlhmGepFMvxFiKAljnWcDQDmHPUkoIEeLoxetffHUwoDaEakYaLpISHEga
    [71] => QZypQqEeDySswmUmpxFLOEGcMkMkYGPOGKfysaoyoZianthmdzRfuihPRubTkYifbeDySMyFCHBAMrSAcgkijcMfWWqPkKLRjPrIsnJiIMDmxYnSsLlYBDylFlIaYqmd
    [72] => gydxWwLXgOcewdxFIrUhXiePvMpOZAZKsHAqeGAdRDplzQfuMOKltEyaaAKbLvUhnzbiXLxQvoAFaaIfHVJEDPXiRNzRvWKgPUFzBpCViqaJYOGpAxjKaFmctVibRylw
    [73] => nbFbiWIrxzvnMMucdoqnfzMFJEyIgBLjuTqFgDRnAjYjoUHfgpYqodlPUCvuzWIeXiOPmkXVodaPbCDdRhjUsioeYpRegrDAycozrWmFpkrEypYfnvmeQyBKhCKQnVas
    [74] => ywkrQzyfwyeQKMyTeKpECDBEoZQaOgdpXukIlllPmdXEZUKTeNrPbJJwEgXDwWAarxwJVDjraxZOoehLENZUwsxFMkXnEwYWRpcSRLeXXsQUWOjArEbfGUNbGTTcmbwO
    [75] => fKpjMmOXKIivhMECuswDHOSmFnLGzNdBdVRPHFoNsofXlSlBhFyBaMOeZhfavrMwkwgaGuDXzahBHuOcwejPgkLbxMdFKRbQkAKwYfTdEsMnNSGRaBqgKrqdKhUNJmtZ
    [76] => MEkNuezrtIhoQPOzZTpcXxvmvqvekpGGPGIYSafwhvpaXgmisOsXXhCKjUDofnfvjyIUkBZeaGPcALoUKQPkoxewFfamuzczedTUoWCDeGJgWHmnLlGMilgvMfcSxUfE
    [77] => jPULOpBHqBaADMjvqyXyUCndeVJuiNUzLTgAKFjuLjzyjAbqBTFdYVvkgXhHsgxGUFfQoYqjAYdUgUyYfLOsLmRiQxDfHEOtUbjxgwBAZbqEoawTcAroHULsMNulovHh
    [78] => zEDmymBKwLdCzLfBnDXkzdiIpInuXiNllkfZmQHzlwTUGJrATDNtQSVPTWgTHYCzRkOdwjnnYKUIoQeUkCulsrqjVhslEahqiegsLMWEzvVWEUpUVUperKPcDiHFoUqr
    [79] => xDhiGvxdyShrZBMmXnVcvrdIciCxBkenFoikfsXPTSGpjTWsLeCouFqjFmUZNQaYkfXyCjoQAoRQqewEMLWsLnJTIIpgLldIjfUMNSwEfOaIKVLntgmNbSTLJyKrkBgy
    [80] => zLuaCQJYaSZOUaIGZoSorjsYadoUyQsJBgNFoKnFGsrdYvaQHgRjgSoskgSoAbdbhRBJaCBKHCDsXaMJnoamcdXJquXVHQAuyuskBFjKAbcLjDMScjWFQTZbHpFJOAos
    [81] => HJxlfBXhEZFqOyylEVrHyzevptjGkFsLbKcxRKXRVeKArFXegwIxbAULdsrVdBgFJPZRcVlSUHhWGmiAKadDDXFeblIvZKRisfBLMdIMfQltbEFcfJqVnnxdezoYoidG
    [82] => xIoIqEyJmMzZUYngKbEJgZdorzyivZkmXmlXyhgbuUIEzWrIFSZbJlRvhWaYLDESEkNgrszhPzzLLmXaXUMwYsmHedJfhQkiPZRjkpcvGxHtqdbLIZljrTYeuHJADnkV
    [83] => ETUTfRirydssITvCKWAAakxBlLfvFqiXVbYKiXIDpjcmdQlllYSKrCoqhlmHhWDOlJfRlYgSffdiPfoYdoKObryuObvexerZRVVqhCRpbPrHQRWMJkClUUgXnfniNqmw
    [84] => CGamyWQhAhgnpSLShOpBymkcDaApxZYQFbrHcrVOAjsUGRPFEbGvJqywpoAkHLKNasInpwJGAkMzSlAnkzugJdsavtzwDZdxSNsECtoeGtTZElBJUJafAOjDGFuYRECr
    [85] => gYugOANRPAvgfPBjVPFruKoglYqZuqQXrKcvUhUluthYkIZJptcwClEmxwuVuhjSJMJhcMnEDasqRcbBGnBVBwjnRGaUzpBCwAJdoAbFjODlJwErMmKrCWSNprvoAZba
    [86] => euiOjmqIPPZYYVauwxKiXAzRvAzfniHLpCWzQkkRSxtefgPibtwxmJRXbITRhsgkAaFxNnPHZbDWMToUpVAVCmfWWgIHQoEMjbiBEvohVpopxbDJxgJJwELcRWyUyGRA
    [87] => TklhDsHBMfdaJbYJjJWFcVdUvQwZwWFLXhAKrFONBxIBKMbArEeUQovFfGlaYcOySmCCjpFjeKWXxwRuUANaqjpjUCCFYZUrxyipbzCvwgqYWFmmuelXOFNdoHZZwmXz
    [88] => GXpOALcYwEsvdoGxDUAavjDyFYbPJlEQqfUAFfotrIzgBxIVydugmkHljGiwCgAVpPKEfhuNnVpJfKPbcCoQKTdvMiPiWyTAkJmiSWJSuxKeoJTbfYYlSRdmeAWKPObD
    [89] => mJkFrWREIHUlXVIlKGwoTYYnTelwHqqizmkDyZsKDPgrFHoIFHVFVLcsChEpVKLYRuKjDhccCGoDgwBfEgDMNsHTfALpcPXikbDXSqBCglrwBzmODdsilGbfiUoXzaKi
    [90] => cuNwHLIKqDgnTcwbdyFRXrfeuBbBoHCzZXBwKATnxZFPhPHAwYBOQgphPrLEoduMcoKuMelTrnHOMABQRhGhsryUPhUPusNBxDYDBWMXaKNkdgrlsiqskbohfULHYFuu
    [91] => wgAmGYKJfskWfSyWvQSOVBOdjGwWlpbMVWSNjfPMxRDJmAWKVitvcgwhyFRcraNxUOlTnfvnIiTIZtSyXzlNclsSToClbmqmRmuGRjTBnsCnYjDGINqtLTKaDIBbUwlm
    [92] => rRVnpQhLWIxpGvhefvToCLmPPOkfAYiwPOdNMjZrfLQxNcFGbgPnjaJbROScSfwjkqemZvhdePktEdiXWOoNFVAzGQnDkUHucASvCDiDSCmELxbmODcSbATwEQJwzqWY
    [93] => OzQJGHBBZcANOXOfVYHigMWJyTpltspUrPokwXHfAUbERkodxebLGHTqUdGJBzLuuzkjyxPEowhWPzLkEDlXBfkByvCMjqXMaiWGGdYrvZzFzxxbRlaAcJUCYMsGsyVj
    [94] => pjYbpMDJLTGJqPVEuygGLsqhVJdcpVvZtvnnnabBctrEnFAysNhlHAKhoBZpNctdTGjmnECtykBQBYvEWXQwLlAhHgDeAMURmQayUfApuCQPbCOsYCgUBsIwYqAQJczg
    [95] => TNnkPOpleudhrWCZzJcZDnCxTblKHLzZXRSoFYXBifEIjHDbuzbJiXmGMYOPRlMuKGUyLcLCTXDsYHIGlRLwniwCaIwZSxRqDIsyFzfxjwrGvyOMhuFJcNkdioFFRvLK
    [96] => ltIdbzSOgAmMndbFhegDsjixqNRBoKOsWikzuRvAHnHJetYaZfhYImxftrFkkVyAKvcSmFsRVckWTvcSFlNgdFNCXhWFsjeDbfpGsCUKCsilDMOLgaWARlVigfFqSvFq
    [97] => EvVMWWsgWhCtpfbKxbmDkSzbeQpvVKXevKNmPhXIDHLKNNjixdPGxRciSRwycmEjVaHRrXPcLsrngcnsUgeFkyWGDOzQZDktvIUsYapFmnQRKZcbddLrdvgpLWNtURZK
    [98] => EShgWTQpyZSkLrbGsfYpnuPOzkvQgoGbKxQvLFdFhMfSZBdPyQNGbDjKnqRzFYGaNacVQCDVPrKzfTPOyAXlVsnnpgozdOjdOOoLkYFPTLXlUnCsFmHnsRNLGLdzWHOK
    [99] => UHeGdaUpeTMbqdGHuualRGvMeUMKkGiIGrCLAqGobPbIdmIfnFSYMRmGCJTkxqtuqxSoZRVnBFuUvhEqfCyKVSABxgKEiGyceSsPFPyzDNlVmLvSOWQpqkfjoKwGVihb
)

で、この変数名をアサインするようにencode_id()を以下のように変更。

return $this->var_array[$value];

これで、compressor.phpを実行すると、素敵な、ほぼ暗号のようにも見えるphpのソースが出来上がります♪

例えば、オリジナルのcompressor.phpを処理すると、こんな感じ。

オリジナルのソースはこちら。

php-compressor

<?php class Compressor{static$RESERVED_VARS=array('$GLOBALS'=>1,'$_ENV'=>1,'$_SERVER'=>1,'$_SESSION'=>1,'$_REQUEST'=>1,'$_GET'=>1,'$_POST'=>1,'$_FILES'=>1,'$_COOKIE'=>1,'$HTTP_RAW_POST_DATA'=>1,'$php_errormsg'=>1,'$http_response_header '=>1,'$argc '=>1,'$argv '=>1,'$this'=>1);var$comment=null;var$keep_line_breaks=false;private$tokens=array();function load($yubcBecdGyLuQeNTxjeaQuSsNXQoDsDoHKGdiZColwuoPnoYiyfiTzIeOpRhqMoxIBnwWIRlKPTdCEdZOjNOaybJhKGxqbpyWJkqdYnJhIzyVIKrUBoCySuCBtBQYVmn){$this->add_tokens($yubcBecdGyLuQeNTxjeaQuSsNXQoDsDoHKGdiZColwuoPnoYiyfiTzIeOpRhqMoxIBnwWIRlKPTdCEdZOjNOaybJhKGxqbpyWJkqdYnJhIzyVIKrUBoCySuCBtBQYVmn);}function run(){$this->shrink_var_names();$this->remove_public_modifier();return$this->generate_result();}private function generate_result(){$EyUqGNkSVvswVBrXWGMnhKqIUsOmEZcvKtNwpmsKbzQzwXKjpQRzRFPUvvOqZlAoKQgwVUQNEEmFTVpPscRgUHOVAiYQDJfvMRCVAPAQgRiNlKhQDeytUujuLrVbVOmt="<?php\n";if($this->comment){foreach($this->comment as$HIszhxAbnlVHWdQRsasczZZsAcykpIbPHqrRWjGInhwxoISdXVPdtLzkiKUUzMKnCaSmerDbUcpvguWGVlRmhJUyGFgfpamJQRAALpAsPZuQNkwCMUXCifsxFSsAwzLK){$EyUqGNkSVvswVBrXWGMnhKqIUsOmEZcvKtNwpmsKbzQzwXKjpQRzRFPUvvOqZlAoKQgwVUQNEEmFTVpPscRgUHOVAiYQDJfvMRCVAPAQgRiNlKhQDeytUujuLrVbVOmt.="# ".trim($HIszhxAbnlVHWdQRsasczZZsAcykpIbPHqrRWjGInhwxoISdXVPdtLzkiKUUzMKnCaSmerDbUcpvguWGVlRmhJUyGFgfpamJQRAALpAsPZuQNkwCMUXCifsxFSsAwzLK)."\n";}}$EyUqGNkSVvswVBrXWGMnhKqIUsOmEZcvKtNwpmsKbzQzwXKjpQRzRFPUvvOqZlAoKQgwVUQNEEmFTVpPscRgUHOVAiYQDJfvMRCVAPAQgRiNlKhQDeytUujuLrVbVOmt.="# Shrunk with http://code.google.com/p/php-compressor/\n";foreach($this->tokens as$GtaumYbnwQVZsjIdIdaRzlXFxlXHpeuLHXIgMTBxWIkdEcWpBkhrJesWIQfidvNOgKmfpqsVBVmqlenMVlxrHsClNdNmHFKJwEAOcvLdWfLfxivSvWvaAzhQZeSMbnXW){$yubcBecdGyLuQeNTxjeaQuSsNXQoDsDoHKGdiZColwuoPnoYiyfiTzIeOpRhqMoxIBnwWIRlKPTdCEdZOjNOaybJhKGxqbpyWJkqdYnJhIzyVIKrUBoCySuCBtBQYVmn=$GtaumYbnwQVZsjIdIdaRzlXFxlXHpeuLHXIgMTBxWIkdEcWpBkhrJesWIQfidvNOgKmfpqsVBVmqlenMVlxrHsClNdNmHFKJwEAOcvLdWfLfxivSvWvaAzhQZeSMbnXW[1];if(!strlen($yubcBecdGyLuQeNTxjeaQuSsNXQoDsDoHKGdiZColwuoPnoYiyfiTzIeOpRhqMoxIBnwWIRlKPTdCEdZOjNOaybJhKGxqbpyWJkqdYnJhIzyVIKrUBoCySuCBtBQYVmn))continue;if(preg_match("~^\\w\\w$~",$EyUqGNkSVvswVBrXWGMnhKqIUsOmEZcvKtNwpmsKbzQzwXKjpQRzRFPUvvOqZlAoKQgwVUQNEEmFTVpPscRgUHOVAiYQDJfvMRCVAPAQgRiNlKhQDeytUujuLrVbVOmt[strlen($EyUqGNkSVvswVBrXWGMnhKqIUsOmEZcvKtNwpmsKbzQzwXKjpQRzRFPUvvOqZlAoKQgwVUQNEEmFTVpPscRgUHOVAiYQDJfvMRCVAPAQgRiNlKhQDeytUujuLrVbVOmt)-1].$yubcBecdGyLuQeNTxjeaQuSsNXQoDsDoHKGdiZColwuoPnoYiyfiTzIeOpRhqMoxIBnwWIRlKPTdCEdZOjNOaybJhKGxqbpyWJkqdYnJhIzyVIKrUBoCySuCBtBQYVmn[0]))$EyUqGNkSVvswVBrXWGMnhKqIUsOmEZcvKtNwpmsKbzQzwXKjpQRzRFPUvvOqZlAoKQgwVUQNEEmFTVpPscRgUHOVAiYQDJfvMRCVAPAQgRiNlKhQDeytUujuLrVbVOmt.=" ";$EyUqGNkSVvswVBrXWGMnhKqIUsOmEZcvKtNwpmsKbzQzwXKjpQRzRFPUvvOqZlAoKQgwVUQNEEmFTVpPscRgUHOVAiYQDJfvMRCVAPAQgRiNlKhQDeytUujuLrVbVOmt.=$yubcBecdGyLuQeNTxjeaQuSsNXQoDsDoHKGdiZColwuoPnoYiyfiTzIeOpRhqMoxIBnwWIRlKPTdCEdZOjNOaybJhKGxqbpyWJkqdYnJhIzyVIKrUBoCySuCBtBQYVmn;}return$EyUqGNkSVvswVBrXWGMnhKqIUsOmEZcvKtNwpmsKbzQzwXKjpQRzRFPUvvOqZlAoKQgwVUQNEEmFTVpPscRgUHOVAiYQDJfvMRCVAPAQgRiNlKhQDeytUujuLrVbVOmt;}private function remove_public_modifier(){for($rPpvUyxpppCLTpQIcmVTLcwObJrNlMIJJMsVTEYOLpdOhdyuNBWCffwhVRaEVuKzeKeszgLnGbGdxaESBNezRTcbyKKKPEQbYFmrHOMLrgQTYAABeAPVcLCGjQbCIyCh=0;$rPpvUyxpppCLTpQIcmVTLcwObJrNlMIJJMsVTEYOLpdOhdyuNBWCffwhVRaEVuKzeKeszgLnGbGdxaESBNezRTcbyKKKPEQbYFmrHOMLrgQTYAABeAPVcLCGjQbCIyCh<count($this->tokens)-1;$rPpvUyxpppCLTpQIcmVTLcwObJrNlMIJJMsVTEYOLpdOhdyuNBWCffwhVRaEVuKzeKeszgLnGbGdxaESBNezRTcbyKKKPEQbYFmrHOMLrgQTYAABeAPVcLCGjQbCIyCh++){if($this->tokens[$rPpvUyxpppCLTpQIcmVTLcwObJrNlMIJJMsVTEYOLpdOhdyuNBWCffwhVRaEVuKzeKeszgLnGbGdxaESBNezRTcbyKKKPEQbYFmrHOMLrgQTYAABeAPVcLCGjQbCIyCh][0]==T_PUBLIC)$this->tokens[$rPpvUyxpppCLTpQIcmVTLcwObJrNlMIJJMsVTEYOLpdOhdyuNBWCffwhVRaEVuKzeKeszgLnGbGdxaESBNezRTcbyKKKPEQbYFmrHOMLrgQTYAABeAPVcLCGjQbCIyCh]=$this->tokens[$rPpvUyxpppCLTpQIcmVTLcwObJrNlMIJJMsVTEYOLpdOhdyuNBWCffwhVRaEVuKzeKeszgLnGbGdxaESBNezRTcbyKKKPEQbYFmrHOMLrgQTYAABeAPVcLCGjQbCIyCh+1][1][0]=='$'?array(T_VAR,"var"):array(-1,"");}}private function shrink_var_names(){$eRJJAESCptuptaYuzVoofzIucixkWyhQmiQiGshPhDXUlgwBNNRaSFnEIevxoPOmgptnBXpHaBtbQSRvEwAVWibdWApChgxXVgmNWJyDYiNAcNXMBKjoTnFRgRPkNFlB=array();$MjjQeBCyyjJDJhCsuLqhrPKCWoofhfzdaXCXLQXklQlxXuvSvIXJiPTUWgXBThsMeFXvotnhQeNIZZGgfqpDqBznwIwEIBKmozJkBDiIoTzOvzLbAcinFPxlbPBPMMMS=array();for($rPpvUyxpppCLTpQIcmVTLcwObJrNlMIJJMsVTEYOLpdOhdyuNBWCffwhVRaEVuKzeKeszgLnGbGdxaESBNezRTcbyKKKPEQbYFmrHOMLrgQTYAABeAPVcLCGjQbCIyCh=0;$rPpvUyxpppCLTpQIcmVTLcwObJrNlMIJJMsVTEYOLpdOhdyuNBWCffwhVRaEVuKzeKeszgLnGbGdxaESBNezRTcbyKKKPEQbYFmrHOMLrgQTYAABeAPVcLCGjQbCIyCh<count($this->tokens);$rPpvUyxpppCLTpQIcmVTLcwObJrNlMIJJMsVTEYOLpdOhdyuNBWCffwhVRaEVuKzeKeszgLnGbGdxaESBNezRTcbyKKKPEQbYFmrHOMLrgQTYAABeAPVcLCGjQbCIyCh++){list($QgrPYJUdEiTsVoJZlXsGcPhoBIEWHkgESJOPhzyfXdxgNSjhMNLnIzWsYsXzbirgrgQnwLXUvDGukIuuedaDzalictEDOUMyilHIZQcRTlvIjmHKbFCIZaanbvBEqPyz,$yubcBecdGyLuQeNTxjeaQuSsNXQoDsDoHKGdiZColwuoPnoYiyfiTzIeOpRhqMoxIBnwWIRlKPTdCEdZOjNOaybJhKGxqbpyWJkqdYnJhIzyVIKrUBoCySuCBtBQYVmn)=$this->tokens[$rPpvUyxpppCLTpQIcmVTLcwObJrNlMIJJMsVTEYOLpdOhdyuNBWCffwhVRaEVuKzeKeszgLnGbGdxaESBNezRTcbyKKKPEQbYFmrHOMLrgQTYAABeAPVcLCGjQbCIyCh];if($QgrPYJUdEiTsVoJZlXsGcPhoBIEWHkgESJOPhzyfXdxgNSjhMNLnIzWsYsXzbirgrgQnwLXUvDGukIuuedaDzalictEDOUMyilHIZQcRTlvIjmHKbFCIZaanbvBEqPyz!=T_VARIABLE)continue;if(isset(self::$RESERVED_VARS[$yubcBecdGyLuQeNTxjeaQuSsNXQoDsDoHKGdiZColwuoPnoYiyfiTzIeOpRhqMoxIBnwWIRlKPTdCEdZOjNOaybJhKGxqbpyWJkqdYnJhIzyVIKrUBoCySuCBtBQYVmn]))continue;if($rPpvUyxpppCLTpQIcmVTLcwObJrNlMIJJMsVTEYOLpdOhdyuNBWCffwhVRaEVuKzeKeszgLnGbGdxaESBNezRTcbyKKKPEQbYFmrHOMLrgQTYAABeAPVcLCGjQbCIyCh>0){$dEerLyZviADomsFuqHzrcQuSRHorjOlwvAjpHsQvPpypXrcjRWmQWuDLrOksnQCZpcMYRMWFGkGlBHhyVjLyEwEXZrCgENQIvjqLWYTnwhlQnTUJXfxQPRinnCvgEqSo=$this->tokens[$rPpvUyxpppCLTpQIcmVTLcwObJrNlMIJJMsVTEYOLpdOhdyuNBWCffwhVRaEVuKzeKeszgLnGbGdxaESBNezRTcbyKKKPEQbYFmrHOMLrgQTYAABeAPVcLCGjQbCIyCh-1][0];if($dEerLyZviADomsFuqHzrcQuSRHorjOlwvAjpHsQvPpypXrcjRWmQWuDLrOksnQCZpcMYRMWFGkGlBHhyVjLyEwEXZrCgENQIvjqLWYTnwhlQnTUJXfxQPRinnCvgEqSo==T_DOUBLE_COLON)continue;if($this->is_class_scope($rPpvUyxpppCLTpQIcmVTLcwObJrNlMIJJMsVTEYOLpdOhdyuNBWCffwhVRaEVuKzeKeszgLnGbGdxaESBNezRTcbyKKKPEQbYFmrHOMLrgQTYAABeAPVcLCGjQbCIyCh))continue;}$MjjQeBCyyjJDJhCsuLqhrPKCWoofhfzdaXCXLQXklQlxXuvSvIXJiPTUWgXBThsMeFXvotnhQeNIZZGgfqpDqBznwIwEIBKmozJkBDiIoTzOvzLbAcinFPxlbPBPMMMS[]=$rPpvUyxpppCLTpQIcmVTLcwObJrNlMIJJMsVTEYOLpdOhdyuNBWCffwhVRaEVuKzeKeszgLnGbGdxaESBNezRTcbyKKKPEQbYFmrHOMLrgQTYAABeAPVcLCGjQbCIyCh;if(!isset($eRJJAESCptuptaYuzVoofzIucixkWyhQmiQiGshPhDXUlgwBNNRaSFnEIevxoPOmgptnBXpHaBtbQSRvEwAVWibdWApChgxXVgmNWJyDYiNAcNXMBKjoTnFRgRPkNFlB[$yubcBecdGyLuQeNTxjeaQuSsNXQoDsDoHKGdiZColwuoPnoYiyfiTzIeOpRhqMoxIBnwWIRlKPTdCEdZOjNOaybJhKGxqbpyWJkqdYnJhIzyVIKrUBoCySuCBtBQYVmn]))$eRJJAESCptuptaYuzVoofzIucixkWyhQmiQiGshPhDXUlgwBNNRaSFnEIevxoPOmgptnBXpHaBtbQSRvEwAVWibdWApChgxXVgmNWJyDYiNAcNXMBKjoTnFRgRPkNFlB[$yubcBecdGyLuQeNTxjeaQuSsNXQoDsDoHKGdiZColwuoPnoYiyfiTzIeOpRhqMoxIBnwWIRlKPTdCEdZOjNOaybJhKGxqbpyWJkqdYnJhIzyVIKrUBoCySuCBtBQYVmn]=0;$eRJJAESCptuptaYuzVoofzIucixkWyhQmiQiGshPhDXUlgwBNNRaSFnEIevxoPOmgptnBXpHaBtbQSRvEwAVWibdWApChgxXVgmNWJyDYiNAcNXMBKjoTnFRgRPkNFlB[$yubcBecdGyLuQeNTxjeaQuSsNXQoDsDoHKGdiZColwuoPnoYiyfiTzIeOpRhqMoxIBnwWIRlKPTdCEdZOjNOaybJhKGxqbpyWJkqdYnJhIzyVIKrUBoCySuCBtBQYVmn]++;}arsort($eRJJAESCptuptaYuzVoofzIucixkWyhQmiQiGshPhDXUlgwBNNRaSFnEIevxoPOmgptnBXpHaBtbQSRvEwAVWibdWApChgxXVgmNWJyDYiNAcNXMBKjoTnFRgRPkNFlB);$skzLoXjJURapIIJypvXRrxozFdaGjLdkhvCBUjIMbpIuRkOOCpLYjlpfKMlKkQntfECfqHvYbTxJjRNuyopYAqMdkCwllYdjAglVjWIxZumNbVXkmJScdoIiEOeGRRUa=array();$rPpvUyxpppCLTpQIcmVTLcwObJrNlMIJJMsVTEYOLpdOhdyuNBWCffwhVRaEVuKzeKeszgLnGbGdxaESBNezRTcbyKKKPEQbYFmrHOMLrgQTYAABeAPVcLCGjQbCIyCh=0;foreach(array_keys($eRJJAESCptuptaYuzVoofzIucixkWyhQmiQiGshPhDXUlgwBNNRaSFnEIevxoPOmgptnBXpHaBtbQSRvEwAVWibdWApChgxXVgmNWJyDYiNAcNXMBKjoTnFRgRPkNFlB)as$fSkHjprjkupDPnwgOOrvwSEUpVeDpRvujBZtKhyEQffWFnSArToGdzSSmEhiIZtGmaXhlJCMpcenlGebmcwHrPWgMwaOFAvbgWPEjmDgFeriayVlJAEEoyQLgEijgrEP){$skzLoXjJURapIIJypvXRrxozFdaGjLdkhvCBUjIMbpIuRkOOCpLYjlpfKMlKkQntfECfqHvYbTxJjRNuyopYAqMdkCwllYdjAglVjWIxZumNbVXkmJScdoIiEOeGRRUa[$fSkHjprjkupDPnwgOOrvwSEUpVeDpRvujBZtKhyEQffWFnSArToGdzSSmEhiIZtGmaXhlJCMpcenlGebmcwHrPWgMwaOFAvbgWPEjmDgFeriayVlJAEEoyQLgEijgrEP]=$this->encode_id($rPpvUyxpppCLTpQIcmVTLcwObJrNlMIJJMsVTEYOLpdOhdyuNBWCffwhVRaEVuKzeKeszgLnGbGdxaESBNezRTcbyKKKPEQbYFmrHOMLrgQTYAABeAPVcLCGjQbCIyCh);$rPpvUyxpppCLTpQIcmVTLcwObJrNlMIJJMsVTEYOLpdOhdyuNBWCffwhVRaEVuKzeKeszgLnGbGdxaESBNezRTcbyKKKPEQbYFmrHOMLrgQTYAABeAPVcLCGjQbCIyCh++;}unset($eRJJAESCptuptaYuzVoofzIucixkWyhQmiQiGshPhDXUlgwBNNRaSFnEIevxoPOmgptnBXpHaBtbQSRvEwAVWibdWApChgxXVgmNWJyDYiNAcNXMBKjoTnFRgRPkNFlB);foreach($MjjQeBCyyjJDJhCsuLqhrPKCWoofhfzdaXCXLQXklQlxXuvSvIXJiPTUWgXBThsMeFXvotnhQeNIZZGgfqpDqBznwIwEIBKmozJkBDiIoTzOvzLbAcinFPxlbPBPMMMS as$kaNusLjYhBLhmFFlCfbbjGkhlchKxTAibSCkGMXUWtIYeLyhMYZpIqCQdxAhefLAFjKHiDZrYLoLNzgkiCJShynVFwooVTdhkyzxFIhsIYyhQjLyUIQhdbASBOKaYhUs){$fSkHjprjkupDPnwgOOrvwSEUpVeDpRvujBZtKhyEQffWFnSArToGdzSSmEhiIZtGmaXhlJCMpcenlGebmcwHrPWgMwaOFAvbgWPEjmDgFeriayVlJAEEoyQLgEijgrEP=$this->tokens[$kaNusLjYhBLhmFFlCfbbjGkhlchKxTAibSCkGMXUWtIYeLyhMYZpIqCQdxAhefLAFjKHiDZrYLoLNzgkiCJShynVFwooVTdhkyzxFIhsIYyhQjLyUIQhdbASBOKaYhUs][1];$this->tokens[$kaNusLjYhBLhmFFlCfbbjGkhlchKxTAibSCkGMXUWtIYeLyhMYZpIqCQdxAhefLAFjKHiDZrYLoLNzgkiCJShynVFwooVTdhkyzxFIhsIYyhQjLyUIQhdbASBOKaYhUs][1]='$'.$skzLoXjJURapIIJypvXRrxozFdaGjLdkhvCBUjIMbpIuRkOOCpLYjlpfKMlKkQntfECfqHvYbTxJjRNuyopYAqMdkCwllYdjAglVjWIxZumNbVXkmJScdoIiEOeGRRUa[$fSkHjprjkupDPnwgOOrvwSEUpVeDpRvujBZtKhyEQffWFnSArToGdzSSmEhiIZtGmaXhlJCMpcenlGebmcwHrPWgMwaOFAvbgWPEjmDgFeriayVlJAEEoyQLgEijgrEP];}}private function is_class_scope($kaNusLjYhBLhmFFlCfbbjGkhlchKxTAibSCkGMXUWtIYeLyhMYZpIqCQdxAhefLAFjKHiDZrYLoLNzgkiCJShynVFwooVTdhkyzxFIhsIYyhQjLyUIQhdbASBOKaYhUs){while($kaNusLjYhBLhmFFlCfbbjGkhlchKxTAibSCkGMXUWtIYeLyhMYZpIqCQdxAhefLAFjKHiDZrYLoLNzgkiCJShynVFwooVTdhkyzxFIhsIYyhQjLyUIQhdbASBOKaYhUs--){$QgrPYJUdEiTsVoJZlXsGcPhoBIEWHkgESJOPhzyfXdxgNSjhMNLnIzWsYsXzbirgrgQnwLXUvDGukIuuedaDzalictEDOUMyilHIZQcRTlvIjmHKbFCIZaanbvBEqPyz=$this->tokens[$kaNusLjYhBLhmFFlCfbbjGkhlchKxTAibSCkGMXUWtIYeLyhMYZpIqCQdxAhefLAFjKHiDZrYLoLNzgkiCJShynVFwooVTdhkyzxFIhsIYyhQjLyUIQhdbASBOKaYhUs][0];if($QgrPYJUdEiTsVoJZlXsGcPhoBIEWHkgESJOPhzyfXdxgNSjhMNLnIzWsYsXzbirgrgQnwLXUvDGukIuuedaDzalictEDOUMyilHIZQcRTlvIjmHKbFCIZaanbvBEqPyz==T_CLASS)return true;if($QgrPYJUdEiTsVoJZlXsGcPhoBIEWHkgESJOPhzyfXdxgNSjhMNLnIzWsYsXzbirgrgQnwLXUvDGukIuuedaDzalictEDOUMyilHIZQcRTlvIjmHKbFCIZaanbvBEqPyz==T_FUNCTION)return false;}return false;}private function add_tokens($yubcBecdGyLuQeNTxjeaQuSsNXQoDsDoHKGdiZColwuoPnoYiyfiTzIeOpRhqMoxIBnwWIRlKPTdCEdZOjNOaybJhKGxqbpyWJkqdYnJhIzyVIKrUBoCySuCBtBQYVmn){$AAaDvdFUlowLginujFzqEeHkUHUxdJXCpxIgTaWPvfkGQoklYuYVAQjmIoxXTfGxMjIfujjxVzhxzzTDOHyacOthIkAipPaaPTUNaAMnNrzgbCOkYbHfAyTWTOgTROyS=token_get_all(trim($yubcBecdGyLuQeNTxjeaQuSsNXQoDsDoHKGdiZColwuoPnoYiyfiTzIeOpRhqMoxIBnwWIRlKPTdCEdZOjNOaybJhKGxqbpyWJkqdYnJhIzyVIKrUBoCySuCBtBQYVmn));if(!count($AAaDvdFUlowLginujFzqEeHkUHUxdJXCpxIgTaWPvfkGQoklYuYVAQjmIoxXTfGxMjIfujjxVzhxzzTDOHyacOthIkAipPaaPTUNaAMnNrzgbCOkYbHfAyTWTOgTROyS))return;if(is_array($AAaDvdFUlowLginujFzqEeHkUHUxdJXCpxIgTaWPvfkGQoklYuYVAQjmIoxXTfGxMjIfujjxVzhxzzTDOHyacOthIkAipPaaPTUNaAMnNrzgbCOkYbHfAyTWTOgTROyS[0])&&$AAaDvdFUlowLginujFzqEeHkUHUxdJXCpxIgTaWPvfkGQoklYuYVAQjmIoxXTfGxMjIfujjxVzhxzzTDOHyacOthIkAipPaaPTUNaAMnNrzgbCOkYbHfAyTWTOgTROyS[0][0]==T_OPEN_TAG)array_shift($AAaDvdFUlowLginujFzqEeHkUHUxdJXCpxIgTaWPvfkGQoklYuYVAQjmIoxXTfGxMjIfujjxVzhxzzTDOHyacOthIkAipPaaPTUNaAMnNrzgbCOkYbHfAyTWTOgTROyS);$iwUcuhXcPNaSuPgDogjIrRdjGgLnJpkecRQUvEhgAoOPtMzldBHJmhkEwUHBjOvudHnPkbVzspLNDdBUmZAhqNQPmmJnsaOLEvMARjsddPuYMEgsQNGSuhOVgOZIwyig=count($AAaDvdFUlowLginujFzqEeHkUHUxdJXCpxIgTaWPvfkGQoklYuYVAQjmIoxXTfGxMjIfujjxVzhxzzTDOHyacOthIkAipPaaPTUNaAMnNrzgbCOkYbHfAyTWTOgTROyS)-1;if(is_array($AAaDvdFUlowLginujFzqEeHkUHUxdJXCpxIgTaWPvfkGQoklYuYVAQjmIoxXTfGxMjIfujjxVzhxzzTDOHyacOthIkAipPaaPTUNaAMnNrzgbCOkYbHfAyTWTOgTROyS[$iwUcuhXcPNaSuPgDogjIrRdjGgLnJpkecRQUvEhgAoOPtMzldBHJmhkEwUHBjOvudHnPkbVzspLNDdBUmZAhqNQPmmJnsaOLEvMARjsddPuYMEgsQNGSuhOVgOZIwyig])&&$AAaDvdFUlowLginujFzqEeHkUHUxdJXCpxIgTaWPvfkGQoklYuYVAQjmIoxXTfGxMjIfujjxVzhxzzTDOHyacOthIkAipPaaPTUNaAMnNrzgbCOkYbHfAyTWTOgTROyS[$iwUcuhXcPNaSuPgDogjIrRdjGgLnJpkecRQUvEhgAoOPtMzldBHJmhkEwUHBjOvudHnPkbVzspLNDdBUmZAhqNQPmmJnsaOLEvMARjsddPuYMEgsQNGSuhOVgOZIwyig][0]==T_CLOSE_TAG)array_pop($AAaDvdFUlowLginujFzqEeHkUHUxdJXCpxIgTaWPvfkGQoklYuYVAQjmIoxXTfGxMjIfujjxVzhxzzTDOHyacOthIkAipPaaPTUNaAMnNrzgbCOkYbHfAyTWTOgTROyS);$swEBcZCuykOCKhmzsAXZpLQYrfhXSyDoXjtKNsNlebsFHwaPjxwhPAyulkuxVsyhIRgmbUQMIlUrhqjUCUmIVOucNOGpTRvmgvVjxlqBREnRuvGnOEWAEqmqKWkVnQYH=count($this->tokens)?"\n":"";foreach($AAaDvdFUlowLginujFzqEeHkUHUxdJXCpxIgTaWPvfkGQoklYuYVAQjmIoxXTfGxMjIfujjxVzhxzzTDOHyacOthIkAipPaaPTUNaAMnNrzgbCOkYbHfAyTWTOgTROyS as$GtaumYbnwQVZsjIdIdaRzlXFxlXHpeuLHXIgMTBxWIkdEcWpBkhrJesWIQfidvNOgKmfpqsVBVmqlenMVlxrHsClNdNmHFKJwEAOcvLdWfLfxivSvWvaAzhQZeSMbnXW){if(!is_array($GtaumYbnwQVZsjIdIdaRzlXFxlXHpeuLHXIgMTBxWIkdEcWpBkhrJesWIQfidvNOgKmfpqsVBVmqlenMVlxrHsClNdNmHFKJwEAOcvLdWfLfxivSvWvaAzhQZeSMbnXW))$GtaumYbnwQVZsjIdIdaRzlXFxlXHpeuLHXIgMTBxWIkdEcWpBkhrJesWIQfidvNOgKmfpqsVBVmqlenMVlxrHsClNdNmHFKJwEAOcvLdWfLfxivSvWvaAzhQZeSMbnXW=array(-1,$GtaumYbnwQVZsjIdIdaRzlXFxlXHpeuLHXIgMTBxWIkdEcWpBkhrJesWIQfidvNOgKmfpqsVBVmqlenMVlxrHsClNdNmHFKJwEAOcvLdWfLfxivSvWvaAzhQZeSMbnXW);if($GtaumYbnwQVZsjIdIdaRzlXFxlXHpeuLHXIgMTBxWIkdEcWpBkhrJesWIQfidvNOgKmfpqsVBVmqlenMVlxrHsClNdNmHFKJwEAOcvLdWfLfxivSvWvaAzhQZeSMbnXW[0]==T_COMMENT||$GtaumYbnwQVZsjIdIdaRzlXFxlXHpeuLHXIgMTBxWIkdEcWpBkhrJesWIQfidvNOgKmfpqsVBVmqlenMVlxrHsClNdNmHFKJwEAOcvLdWfLfxivSvWvaAzhQZeSMbnXW[0]==T_DOC_COMMENT)continue;if($GtaumYbnwQVZsjIdIdaRzlXFxlXHpeuLHXIgMTBxWIkdEcWpBkhrJesWIQfidvNOgKmfpqsVBVmqlenMVlxrHsClNdNmHFKJwEAOcvLdWfLfxivSvWvaAzhQZeSMbnXW[0]==T_WHITESPACE){$swEBcZCuykOCKhmzsAXZpLQYrfhXSyDoXjtKNsNlebsFHwaPjxwhPAyulkuxVsyhIRgmbUQMIlUrhqjUCUmIVOucNOGpTRvmgvVjxlqBREnRuvGnOEWAEqmqKWkVnQYH.=$GtaumYbnwQVZsjIdIdaRzlXFxlXHpeuLHXIgMTBxWIkdEcWpBkhrJesWIQfidvNOgKmfpqsVBVmqlenMVlxrHsClNdNmHFKJwEAOcvLdWfLfxivSvWvaAzhQZeSMbnXW[1];continue;}if($this->keep_line_breaks&&strpos($swEBcZCuykOCKhmzsAXZpLQYrfhXSyDoXjtKNsNlebsFHwaPjxwhPAyulkuxVsyhIRgmbUQMIlUrhqjUCUmIVOucNOGpTRvmgvVjxlqBREnRuvGnOEWAEqmqKWkVnQYH,"\n")!==false){$this->tokens[]=array(-1,"\n");}$this->tokens[]=$GtaumYbnwQVZsjIdIdaRzlXFxlXHpeuLHXIgMTBxWIkdEcWpBkhrJesWIQfidvNOgKmfpqsVBVmqlenMVlxrHsClNdNmHFKJwEAOcvLdWfLfxivSvWvaAzhQZeSMbnXW;$swEBcZCuykOCKhmzsAXZpLQYrfhXSyDoXjtKNsNlebsFHwaPjxwhPAyulkuxVsyhIRgmbUQMIlUrhqjUCUmIVOucNOGpTRvmgvVjxlqBREnRuvGnOEWAEqmqKWkVnQYH="";}}private function encode_id($opGMkYLIIBMSdLKOGasKZGHuTQDopuRHbPsLLfgCbhkXqdXqPedfsyLEVbNOKhZcWSNTooEJyQPjzVEXFIAauxhhddTsRGMqfbITngkcSIaxGcTxdyzXIGQwFqypsEhz){$EyUqGNkSVvswVBrXWGMnhKqIUsOmEZcvKtNwpmsKbzQzwXKjpQRzRFPUvvOqZlAoKQgwVUQNEEmFTVpPscRgUHOVAiYQDJfvMRCVAPAQgRiNlKhQDeytUujuLrVbVOmt="";if($opGMkYLIIBMSdLKOGasKZGHuTQDopuRHbPsLLfgCbhkXqdXqPedfsyLEVbNOKhZcWSNTooEJyQPjzVEXFIAauxhhddTsRGMqfbITngkcSIaxGcTxdyzXIGQwFqypsEhz>52){$EyUqGNkSVvswVBrXWGMnhKqIUsOmEZcvKtNwpmsKbzQzwXKjpQRzRFPUvvOqZlAoKQgwVUQNEEmFTVpPscRgUHOVAiYQDJfvMRCVAPAQgRiNlKhQDeytUujuLrVbVOmt.=$this->encode_id_digit($opGMkYLIIBMSdLKOGasKZGHuTQDopuRHbPsLLfgCbhkXqdXqPedfsyLEVbNOKhZcWSNTooEJyQPjzVEXFIAauxhhddTsRGMqfbITngkcSIaxGcTxdyzXIGQwFqypsEhz%53);$opGMkYLIIBMSdLKOGasKZGHuTQDopuRHbPsLLfgCbhkXqdXqPedfsyLEVbNOKhZcWSNTooEJyQPjzVEXFIAauxhhddTsRGMqfbITngkcSIaxGcTxdyzXIGQwFqypsEhz=floor($opGMkYLIIBMSdLKOGasKZGHuTQDopuRHbPsLLfgCbhkXqdXqPedfsyLEVbNOKhZcWSNTooEJyQPjzVEXFIAauxhhddTsRGMqfbITngkcSIaxGcTxdyzXIGQwFqypsEhz/53);}while($opGMkYLIIBMSdLKOGasKZGHuTQDopuRHbPsLLfgCbhkXqdXqPedfsyLEVbNOKhZcWSNTooEJyQPjzVEXFIAauxhhddTsRGMqfbITngkcSIaxGcTxdyzXIGQwFqypsEhz>62){$EyUqGNkSVvswVBrXWGMnhKqIUsOmEZcvKtNwpmsKbzQzwXKjpQRzRFPUvvOqZlAoKQgwVUQNEEmFTVpPscRgUHOVAiYQDJfvMRCVAPAQgRiNlKhQDeytUujuLrVbVOmt.=$this->encode_id_digit($opGMkYLIIBMSdLKOGasKZGHuTQDopuRHbPsLLfgCbhkXqdXqPedfsyLEVbNOKhZcWSNTooEJyQPjzVEXFIAauxhhddTsRGMqfbITngkcSIaxGcTxdyzXIGQwFqypsEhz%63);$opGMkYLIIBMSdLKOGasKZGHuTQDopuRHbPsLLfgCbhkXqdXqPedfsyLEVbNOKhZcWSNTooEJyQPjzVEXFIAauxhhddTsRGMqfbITngkcSIaxGcTxdyzXIGQwFqypsEhz=floor($opGMkYLIIBMSdLKOGasKZGHuTQDopuRHbPsLLfgCbhkXqdXqPedfsyLEVbNOKhZcWSNTooEJyQPjzVEXFIAauxhhddTsRGMqfbITngkcSIaxGcTxdyzXIGQwFqypsEhz/63);}$EyUqGNkSVvswVBrXWGMnhKqIUsOmEZcvKtNwpmsKbzQzwXKjpQRzRFPUvvOqZlAoKQgwVUQNEEmFTVpPscRgUHOVAiYQDJfvMRCVAPAQgRiNlKhQDeytUujuLrVbVOmt.=$this->encode_id_digit($opGMkYLIIBMSdLKOGasKZGHuTQDopuRHbPsLLfgCbhkXqdXqPedfsyLEVbNOKhZcWSNTooEJyQPjzVEXFIAauxhhddTsRGMqfbITngkcSIaxGcTxdyzXIGQwFqypsEhz);return$EyUqGNkSVvswVBrXWGMnhKqIUsOmEZcvKtNwpmsKbzQzwXKjpQRzRFPUvvOqZlAoKQgwVUQNEEmFTVpPscRgUHOVAiYQDJfvMRCVAPAQgRiNlKhQDeytUujuLrVbVOmt;}private function encode_id_digit($hUekouHWIpnryOBuRSfFlWpichOHsnuffSFtDhVZeJxWlSAejEiBzEKGqWecyArjUkDuKKDPvTcIgcncYCJgSXNQuUlBktosixTNOwrPyLFIZRIIRZIliAchozVsAcvC){if($hUekouHWIpnryOBuRSfFlWpichOHsnuffSFtDhVZeJxWlSAejEiBzEKGqWecyArjUkDuKKDPvTcIgcncYCJgSXNQuUlBktosixTNOwrPyLFIZRIIRZIliAchozVsAcvC<26)return chr(65+$hUekouHWIpnryOBuRSfFlWpichOHsnuffSFtDhVZeJxWlSAejEiBzEKGqWecyArjUkDuKKDPvTcIgcncYCJgSXNQuUlBktosixTNOwrPyLFIZRIIRZIliAchozVsAcvC);if($hUekouHWIpnryOBuRSfFlWpichOHsnuffSFtDhVZeJxWlSAejEiBzEKGqWecyArjUkDuKKDPvTcIgcncYCJgSXNQuUlBktosixTNOwrPyLFIZRIIRZIliAchozVsAcvC<52)return chr(71+$hUekouHWIpnryOBuRSfFlWpichOHsnuffSFtDhVZeJxWlSAejEiBzEKGqWecyArjUkDuKKDPvTcIgcncYCJgSXNQuUlBktosixTNOwrPyLFIZRIIRZIliAchozVsAcvC);if($hUekouHWIpnryOBuRSfFlWpichOHsnuffSFtDhVZeJxWlSAejEiBzEKGqWecyArjUkDuKKDPvTcIgcncYCJgSXNQuUlBktosixTNOwrPyLFIZRIIRZIliAchozVsAcvC==52)return"_";return chr($hUekouHWIpnryOBuRSfFlWpichOHsnuffSFtDhVZeJxWlSAejEiBzEKGqWecyArjUkDuKKDPvTcIgcncYCJgSXNQuUlBktosixTNOwrPyLFIZRIIRZIliAchozVsAcvC-5);}}

一行になってしまうので、表示が…。

暇な人は、クリップボードにコピーしてエディタにでも貼り付けて見てみると笑えるかも知れません。

私だったら、ちょっとこのphpソースをメンテしようという気は起きないかなと。

 

で、ついでなので、こいつをunpack()して、更に「,」でimplodeしてあげます。

そうすると更に変態的な文字列へと変化します。

99,108,97,115,115,32,67,111,109,112,114,101,115,115,111,114,123,115,116,97,116,105,99,36,82,69,83,69,82,86,69,68,95,86,65,82,83,61,97,114,114,97,121,40,39,36,71,76,79,66,65,76,83,39,61,62,49,44,39,36,95,69,78,86,39,61,62,49,44,39,36,95,83,69,82,86,69,82,39,61,62,49,44,39,36,95,83,69,83,83,73,79,78,39,61,62,49,44,39,36,95,82,69,81,85,69,83,84,39,61,62,49,44,39,36,95,71,69,84,39,61,62,49,44,39,36,95,80,79,83,84,39,61,62,49,44,39,36,95,70,73,76,69,83,39,61,62,49,44,39,36,95,67,79,79,75,73,69,39,61,62,49,44,39,36,72,84,84,80,95,82,65,87,95,80,79,83,84,95,68,65,84,65,39,61,62,49,44,39,36,112,104,112,95,101,114,114,111,114,109,115,103,39,61,62,49,44,39,36,104,116,116,112,95,114,101,115,112,111,110,115,101,95,104,101,97,100,101,114,32,39,61,62,49,44,39,36,97,114,103,99,32,39,61,62,49,44,39,36,97,114,103,118,32,39,61,62,49,44,39,36,116,104,105,115,39,61,62,49,41,59,118,97,114,36,99,111,109,109,101,110,116,61,110,117,108,108,59,118,97,114,36,107,101,101,112,95,108,105,110,101,95,98,114,101,97,107,115,61,102,97,108,115,101,59,112,114,105,118,97,116,101,36,116,111,107,101,110,115,61,97,114,114,97,121,40,41,59,102,117,110,99,116,105,111,110,32,108,111,97,100,40,36,69,78,69,77,74,115,116,109,66,100,85,118,97,105,79,119,65,115,114,84,80,68,69,102,115,102,122,86,104,81,116,74,99,109,106,112,67,101,74,80,75,102,81,117,105,84,118,68,71,119,69,101,87,120,82,90,108,111,113,86,89,109,67,71,98,73,83,82,66,103,111,111,75,109,107,108,112,79,75,101,109,69,112,111,119,82,72,115,107,122,81,79,102,84,120,72,86,117,107,65,106,117,79,70,104,82,75,81,98,83,108,102,70,102,115,113,71,107,87,65,70,75,84,83,113,83,108,102,41,123,36,116,104,105,115,45,62,97,100,100,95,116,111,107,101,110,115,40,36,69,78,69,77,74,115,116,109,66,100,85,118,97,105,79,119,65,115,114,84,80,68,69,102,115,102,122,86,104,81,116,74,99,109,106,112,67,101,74,80,75,102,81,117,105,84,118,68,71,119,69,101,87,120,82,90,108,111,113,86,89,109,67,71,98,73,83,82,66,103,111,111,75,109,107,108,112,79,75,101,109,69,112,111,119,82,72,115,107,122,81,79,102,84,120,72,86,117,107,65,106,117,79,70,104,82,75,81,98,83,108,102,70,102,115,113,71,107,87,65,70,75,84,83,113,83,108,102,41,59,125,102,117,110,99,116,105,111,110,32,114,117,110,40,41,123,36,116,104,105,115,45,62,115,104,114,105,110,107,95,118,97,114,95,110,97,109,101,115,40,41,59,36,116,104,105,115,45,62,114,101,109,111,118,101,95,112,117,98,108,105,99,95,109,111,100,105,102,105,101,114,40,41,59,114,101,116,117,114,110,36,116,104,105,115,45,62,103,101,110,101,114,97,116,101,95,114,101,115,117,108,116,40,41,59,125,112,114,105,118,97,116,101,32,102,117,110,99,116,105,111,110,32,103,101,110,101,114,97,116,101,95,114,101,115,117,108,116,40,41,123,36,118,76,101,121,67,78,65,80,107,113,118,77,88,115,68,72,87,108,100,99,117,108,71,110,99,85,98,89,88,69,80,70,77,73,103,117,72,105,87,118,69,114,97,100,77,72,116,77,106,84,107,114,117,75,98,66,119,102,77,65,101,115,118,102,66,68,119,115,115,65,104,81,76,117,122,82,109,99,87,66,114,112,83,81,88,97,100,105,87,120,89,89,101,110,111,118,89,118,76,73,108,105,115,88,82,99,70,98,83,97,120,118,109,78,106,85,98,122,107,121,110,118,76,100,114,108,97,70,61,34,60,63,112,104,112,92,110,34,59,105,102,40,36,116,104,105,115,45,62,99,111,109,109,101,110,116,41,123,102,111,114,101,97,99,104,40,36,116,104,105,115,45,62,99,111,109,109,101,110,116,32,97,115,36,87,65,114,79,79,118,70,75,111,112,116,70,112,73,100,76,88,107,68,103,87,87,107,99,84,70,86,99,114,122,87,72,69,112,71,72,118,86,121,67,87,119,82,118,72,104,68,103,83,76,110,119,115,83,73,82,85,99,113,113,107,120,114,89,120,114,71,71,86,105,90,67,107,114,67,108,98,89,97,105,99,67,80,113,66,114,104,66,104,79,76,75,73,115,89,81,117,113,83,82,110,71,114,88,97,74,79,110,97,102,86,88,65,109,105,106,88,81,103,71,88,113,75,100,73,66,72,86,41,123,36,118,76,101,121,67,78,65,80,107,113,118,77,88,115,68,72,87,108,100,99,117,108,71,110,99,85,98,89,88,69,80,70,77,73,103,117,72,105,87,118,69,114,97,100,77,72,116,77,106,84,107,114,117,75,98,66,119,102,77,65,101,115,118,102,66,68,119,115,115,65,104,81,76,117,122,82,109,99,87,66,114,112,83,81,88,97,100,105,87,120,89,89,101,110,111,118,89,118,76,73,108,105,115,88,82,99,70,98,83,97,120,118,109,78,106,85,98,122,107,121,110,118,76,100,114,108,97,70,46,61,34,35,32,34,46,116,114,105,109,40,36,87,65,114,79,79,118,70,75,111,112,116,70,112,73,100,76,88,107,68,103,87,87,107,99,84,70,86,99,114,122,87,72,69,112,71,72,118,86,121,67,87,119,82,118,72,104,68,103,83,76,110,119,115,83,73,82,85,99,113,113,107,120,114,89,120,114,71,71,86,105,90,67,107,114,67,108,98,89,97,105,99,67,80,113,66,114,104,66,104,79,76,75,73,115,89,81,117,113,83,82,110,71,114,88,97,74,79,110,97,102,86,88,65,109,105,106,88,81,103,71,88,113,75,100,73,66,72,86,41,46,34,92,110,34,59,125,125,36,118,76,101,121,67,78,65,80,107,113,118,77,88,115,68,72,87,108,100,99,117,108,71,110,99,85,98,89,88,69,80,70,77,73,103,117,72,105,87,118,69,114,97,100,77,72,116,77,106,84,107,114,117,75,98,66,119,102,77,65,101,115,118,102,66,68,119,115,115,65,104,81,76,117,122,82,109,99,87,66,114,112,83,81,88,97,100,105,87,120,89,89,101,110,111,118,89,118,76,73,108,105,115,88,82,99,70,98,83,97,120,118,109,78,106,85,98,122,107,121,110,118,76,100,114,108,97,70,46,61,34,35,32,83,104,114,117,110,107,32,119,105,116,104,32,104,116,116,112,58,47,47,99,111,100,101,46,103,111,111,103,108,101,46,99,111,109,47,112,47,112,104,112,45,99,111,109,112,114,101,115,115,111,114,47,92,110,34,59,102,111,114,101,97,99,104,40,36,116,104,105,115,45,62,116,111,107,101,110,115,32,97,115,36,67,75,115,79,99,74,79,101,121,104,109,102,119,115,113,72,81,81,83,76,99,116,76,108,106,85,105,76,97,114,83,119,71,109,88,104,88,76,119,99,89,75,104,121,89,97,74,99,112,121,69,83,87,106,65,82,117,98,105,71,102,87,68,99,68,98,90,114,113,97,74,70,119,68,68,66,109,72,70,79,82,79,104,74,110,66,80,73,107,73,76,110,76,79,90,89,105,69,117,108,84,122,90,113,75,105,101,115,108,109,78,112,70,84,99,119,104,107,120,90,77,72,104,72,88,66,81,106,41,123,36,69,78,69,77,74,115,116,109,66,100,85,118,97,105,79,119,65,115,114,84,80,68,69,102,115,102,122,86,104,81,116,74,99,109,106,112,67,101,74,80,75,102,81,117,105,84,118,68,71,119,69,101,87,120,82,90,108,111,113,86,89,109,67,71,98,73,83,82,66,103,111,111,75,109,107,108,112,79,75,101,109,69,112,111,119,82,72,115,107,122,81,79,102,84,120,72,86,117,107,65,106,117,79,70,104,82,75,81,98,83,108,102,70,102,115,113,71,107,87,65,70,75,84,83,113,83,108,102,61,36,67,75,115,79,99,74,79,101,121,104,109,102,119,115,113,72,81,81,83,76,99,116,76,108,106,85,105,76,97,114,83,119,71,109,88,104,88,76,119,99,89,75,104,121,89,97,74,99,112,121,69,83,87,106,65,82,117,98,105,71,102,87,68,99,68,98,90,114,113,97,74,70,119,68,68,66,109,72,70,79,82,79,104,74,110,66,80,73,107,73,76,110,76,79,90,89,105,69,117,108,84,122,90,113,75,105,101,115,108,109,78,112,70,84,99,119,104,107,120,90,77,72,104,72,88,66,81,106,91,49,93,59,105,102,40,33,115,116,114,108,101,110,40,36,69,78,69,77,74,115,116,109,66,100,85,118,97,105,79,119,65,115,114,84,80,68,69,102,115,102,122,86,104,81,116,74,99,109,106,112,67,101,74,80,75,102,81,117,105,84,118,68,71,119,69,101,87,120,82,90,108,111,113,86,89,109,67,71,98,73,83,82,66,103,111,111,75,109,107,108,112,79,75,101,109,69,112,111,119,82,72,115,107,122,81,79,102,84,120,72,86,117,107,65,106,117,79,70,104,82,75,81,98,83,108,102,70,102,115,113,71,107,87,65,70,75,84,83,113,83,108,102,41,41,99,111,110,116,105,110,117,101,59,105,102,40,112,114,101,103,95,109,97,116,99,104,40,34,126,94,92,92,119,92,92,119,36,126,34,44,36,118,76,101,121,67,78,65,80,107,113,118,77,88,115,68,72,87,108,100,99,117,108,71,110,99,85,98,89,88,69,80,70,77,73,103,117,72,105,87,118,69,114,97,100,77,72,116,77,106,84,107,114,117,75,98,66,119,102,77,65,101,115,118,102,66,68,119,115,115,65,104,81,76,117,122,82,109,99,87,66,114,112,83,81,88,97,100,105,87,120,89,89,101,110,111,118,89,118,76,73,108,105,115,88,82,99,70,98,83,97,120,118,109,78,106,85,98,122,107,121,110,118,76,100,114,108,97,70,91,115,116,114,108,101,110,40,36,118,76,101,121,67,78,65,80,107,113,118,77,88,115,68,72,87,108,100,99,117,108,71,110,99,85,98,89,88,69,80,70,77,73,103,117,72,105,87,118,69,114,97,100,77,72,116,77,106,84,107,114,117,75,98,66,119,102,77,65,101,115,118,102,66,68,119,115,115,65,104,81,76,117,122,82,109,99,87,66,114,112,83,81,88,97,100,105,87,120,89,89,101,110,111,118,89,118,76,73,108,105,115,88,82,99,70,98,83,97,120,118,109,78,106,85,98,122,107,121,110,118,76,100,114,108,97,70,41,45,49,93,46,36,69,78,69,77,74,115,116,109,66,100,85,118,97,105,79,119,65,115,114,84,80,68,69,102,115,102,122,86,104,81,116,74,99,109,106,112,67,101,74,80,75,102,81,117,105,84,118,68,71,119,69,101,87,120,82,90,108,111,113,86,89,109,67,71,98,73,83,82,66,103,111,111,75,109,107,108,112,79,75,101,109,69,112,111,119,82,72,115,107,122,81,79,102,84,120,72,86,117,107,65,106,117,79,70,104,82,75,81,98,83,108,102,70,102,115,113,71,107,87,65,70,75,84,83,113,83,108,102,91,48,93,41,41,36,118,76,101,121,67,78,65,80,107,113,118,77,88,115,68,72,87,108,100,99,117,108,71,110,99,85,98,89,88,69,80,70,77,73,103,117,72,105,87,118,69,114,97,100,77,72,116,77,106,84,107,114,117,75,98,66,119,102,77,65,101,115,118,102,66,68,119,115,115,65,104,81,76,117,122,82,109,99,87,66,114,112,83,81,88,97,100,105,87,120,89,89,101,110,111,118,89,118,76,73,108,105,115,88,82,99,70,98,83,97,120,118,109,78,106,85,98,122,107,121,110,118,76,100,114,108,97,70,46,61,34,32,34,59,36,118,76,101,121,67,78,65,80,107,113,118,77,88,115,68,72,87,108,100,99,117,108,71,110,99,85,98,89,88,69,80,70,77,73,103,117,72,105,87,118,69,114,97,100,77,72,116,77,106,84,107,114,117,75,98,66,119,102,77,65,101,115,118,102,66,68,119,115,115,65,104,81,76,117,122,82,109,99,87,66,114,112,83,81,88,97,100,105,87,120,89,89,101,110,111,118,89,118,76,73,108,105,115,88,82,99,70,98,83,97,120,118,109,78,106,85,98,122,107,121,110,118,76,100,114,108,97,70,46,61,36,69,78,69,77,74,115,116,109,66,100,85,118,97,105,79,119,65,115,114,84,80,68,69,102,115,102,122,86,104,81,116,74,99,109,106,112,67,101,74,80,75,102,81,117,105,84,118,68,71,119,69,101,87,120,82,90,108,111,113,86,89,109,67,71,98,73,83,82,66,103,111,111,75,109,107,108,112,79,75,101,109,69,112,111,119,82,72,115,107,122,81,79,102,84,120,72,86,117,107,65,106,117,79,70,104,82,75,81,98,83,108,102,70,102,115,113,71,107,87,65,70,75,84,83,113,83,108,102,59,125,114,101,116,117,114,110,36,118,76,101,121,67,78,65,80,107,113,118,77,88,115,68,72,87,108,100,99,117,108,71,110,99,85,98,89,88,69,80,70,77,73,103,117,72,105,87,118,69,114,97,100,77,72,116,77,106,84,107,114,117,75,98,66,119,102,77,65,101,115,118,102,66,68,119,115,115,65,104,81,76,117,122,82,109,99,87,66,114,112,83,81,88,97,100,105,87,120,89,89,101,110,111,118,89,118,76,73,108,105,115,88,82,99,70,98,83,97,120,118,109,78,106,85,98,122,107,121,110,118,76,100,114,108,97,70,59,125,112,114,105,118,97,116,101,32,102,117,110,99,116,105,111,110,32,114,101,109,111,118,101,95,112,117,98,108,105,99,95,109,111,100,105,102,105,101,114,40,41,123,102,111,114,40,36,115,87,67,79,82,117,111,111,120,116,66,76,107,75,99,115,68,100,84,70,72,66,81,72,67,119,69,69,107,111,122,106,68,68,100,85,82,66,88,73,76,66,113,79,68,108,87,84,118,85,115,110,78,106,117,78,73,107,65,105,99,119,90,117,108,73,82,72,87,71,117,66,120,71,89,106,75,78,121,68,109,112,67,73,107,109,74,111,110,104,118,112,118,76,114,101,76,77,120,90,122,122,84,104,100,86,106,66,68,122,85,89,111,116,98,99,68,116,120,98,79,113,80,75,100,69,70,119,61,48,59,36,115,87,67,79,82,117,111,111,120,116,66,76,107,75,99,115,68,100,84,70,72,66,81,72,67,119,69,69,107,111,122,106,68,68,100,85,82,66,88,73,76,66,113,79,68,108,87,84,118,85,115,110,78,106,117,78,73,107,65,105,99,119,90,117,108,73,82,72,87,71,117,66,120,71,89,106,75,78,121,68,109,112,67,73,107,109,74,111,110,104,118,112,118,76,114,101,76,77,120,90,122,122,84,104,100,86,106,66,68,122,85,89,111,116,98,99,68,116,120,98,79,113,80,75,100,69,70,119,60,99,111,117,110,116,40,36,116,104,105,115,45,62,116,111,107,101,110,115,41,45,49,59,36,115,87,67,79,82,117,111,111,120,116,66,76,107,75,99,115,68,100,84,70,72,66,81,72,67,119,69,69,107,111,122,106,68,68,100,85,82,66,88,73,76,66,113,79,68,108,87,84,118,85,115,110,78,106,117,78,73,107,65,105,99,119,90,117,108,73,82,72,87,71,117,66,120,71,89,106,75,78,121,68,109,112,67,73,107,109,74,111,110,104,118,112,118,76,114,101,76,77,120,90,122,122,84,104,100,86,106,66,68,122,85,89,111,116,98,99,68,116,120,98,79,113,80,75,100,69,70,119,43,43,41,123,105,102,40,36,116,104,105,115,45,62,116,111,107,101,110,115,91,36,115,87,67,79,82,117,111,111,120,116,66,76,107,75,99,115,68,100,84,70,72,66,81,72,67,119,69,69,107,111,122,106,68,68,100,85,82,66,88,73,76,66,113,79,68,108,87,84,118,85,115,110,78,106,117,78,73,107,65,105,99,119,90,117,108,73,82,72,87,71,117,66,120,71,89,106,75,78,121,68,109,112,67,73,107,109,74,111,110,104,118,112,118,76,114,101,76,77,120,90,122,122,84,104,100,86,106,66,68,122,85,89,111,116,98,99,68,116,120,98,79,113,80,75,100,69,70,119,93,91,48,93,61,61,84,95,80,85,66,76,73,67,41,36,116,104,105,115,45,62,116,111,107,101,110,115,91,36,115,87,67,79,82,117,111,111,120,116,66,76,107,75,99,115,68,100,84,70,72,66,81,72,67,119,69,69,107,111,122,106,68,68,100,85,82,66,88,73,76,66,113,79,68,108,87,84,118,85,115,110,78,106,117,78,73,107,65,105,99,119,90,117,108,73,82,72,87,71,117,66,120,71,89,106,75,78,121,68,109,112,67,73,107,109,74,111,110,104,118,112,118,76,114,101,76,77,120,90,122,122,84,104,100,86,106,66,68,122,85,89,111,116,98,99,68,116,120,98,79,113,80,75,100,69,70,119,93,61,36,116,104,105,115,45,62,116,111,107,101,110,115,91,36,115,87,67,79,82,117,111,111,120,116,66,76,107,75,99,115,68,100,84,70,72,66,81,72,67,119,69,69,107,111,122,106,68,68,100,85,82,66,88,73,76,66,113,79,68,108,87,84,118,85,115,110,78,106,117,78,73,107,65,105,99,119,90,117,108,73,82,72,87,71,117,66,120,71,89,106,75,78,121,68,109,112,67,73,107,109,74,111,110,104,118,112,118,76,114,101,76,77,120,90,122,122,84,104,100,86,106,66,68,122,85,89,111,116,98,99,68,116,120,98,79,113,80,75,100,69,70,119,43,49,93,91,49,93,91,48,93,61,61,39,36,39,63,97,114,114,97,121,40,84,95,86,65,82,44,34,118,97,114,34,41,58,97,114,114,97,121,40,45,49,44,34,34,41,59,125,125,112,114,105,118,97,116,101,32,102,117,110,99,116,105,111,110,32,115,104,114,105,110,107,95,118,97,114,95,110,97,109,101,115,40,41,123,36,72,88,112,108,113,80,86,85,77,85,67,122,79,99,121,121,106,105,69,88,103,74,90,118,119,85,98,80,113,106,84,113,66,71,68,65,107,84,71,121,112,81,71,121,105,99,76,71,73,101,77,105,79,69,75,74,115,111,98,85,97,67,99,97,118,87,78,113,80,102,76,104,75,83,73,82,90,115,113,67,69,101,67,97,74,86,86,118,119,108,88,81,118,71,120,115,115,112,79,90,69,104,97,86,101,116,101,99,88,89,99,68,74,120,98,86,90,75,106,85,80,116,101,67,72,112,74,79,61,97,114,114,97,121,40,41,59,36,71,103,85,113,117,89,87,103,85,98,67,100,118,111,116,101,79,76,69,79,90,121,80,66,90,84,115,82,87,87,75,109,88,121,104,102,90,120,85,107,109,85,78,86,118,70,110,98,89,118,74,104,99,104,71,104,90,114,70,100,102,98,116,90,120,71,104,110,108,110,98,65,73,72,117,107,107,109,81,114,105,122,103,66,102,66,88,86,113,100,77,106,106,73,117,73,72,74,111,110,111,99,111,84,79,105,113,88,85,119,69,105,106,100,84,69,106,80,97,117,84,84,106,84,77,114,67,122,61,97,114,114,97,121,40,41,59,102,111,114,40,36,115,87,67,79,82,117,111,111,120,116,66,76,107,75,99,115,68,100,84,70,72,66,81,72,67,119,69,69,107,111,122,106,68,68,100,85,82,66,88,73,76,66,113,79,68,108,87,84,118,85,115,110,78,106,117,78,73,107,65,105,99,119,90,117,108,73,82,72,87,71,117,66,120,71,89,106,75,78,121,68,109,112,67,73,107,109,74,111,110,104,118,112,118,76,114,101,76,77,120,90,122,122,84,104,100,86,106,66,68,122,85,89,111,116,98,99,68,116,120,98,79,113,80,75,100,69,70,119,61,48,59,36,115,87,67,79,82,117,111,111,120,116,66,76,107,75,99,115,68,100,84,70,72,66,81,72,67,119,69,69,107,111,122,106,68,68,100,85,82,66,88,73,76,66,113,79,68,108,87,84,118,85,115,110,78,106,117,78,73,107,65,105,99,119,90,117,108,73,82,72,87,71,117,66,120,71,89,106,75,78,121,68,109,112,67,73,107,109,74,111,110,104,118,112,118,76,114,101,76,77,120,90,122,122,84,104,100,86,106,66,68,122,85,89,111,116,98,99,68,116,120,98,79,113,80,75,100,69,70,119,60,99,111,117,110,116,40,36,116,104,105,115,45,62,116,111,107,101,110,115,41,59,36,115,87,67,79,82,117,111,111,120,116,66,76,107,75,99,115,68,100,84,70,72,66,81,72,67,119,69,69,107,111,122,106,68,68,100,85,82,66,88,73,76,66,113,79,68,108,87,84,118,85,115,110,78,106,117,78,73,107,65,105,99,119,90,117,108,73,82,72,87,71,117,66,120,71,89,106,75,78,121,68,109,112,67,73,107,109,74,111,110,104,118,112,118,76,114,101,76,77,120,90,122,122,84,104,100,86,106,66,68,122,85,89,111,116,98,99,68,116,120,98,79,113,80,75,100,69,70,119,43,43,41,123,108,105,115,116,40,36,66,66,65,74,72,118,84,73,109,107,75,72,111,75,85,73,122,66,122,89,113,100,65,103,86,118,70,102,89,107,66,101,112,84,120,80,106,69,89,107,80,73,112,122,81,112,68,119,119,107,87,103,74,88,111,97,115,70,72,72,69,104,70,111,117,107,90,90,106,103,89,100,84,80,69,100,74,100,74,83,111,89,66,115,110,102,72,81,110,66,118,114,74,86,101,98,108,115,102,101,89,65,81,109,117,65,84,79,100,116,89,90,66,100,68,100,101,122,118,106,67,71,66,103,67,79,78,69,44,36,69,78,69,77,74,115,116,109,66,100,85,118,97,105,79,119,65,115,114,84,80,68,69,102,115,102,122,86,104,81,116,74,99,109,106,112,67,101,74,80,75,102,81,117,105,84,118,68,71,119,69,101,87,120,82,90,108,111,113,86,89,109,67,71,98,73,83,82,66,103,111,111,75,109,107,108,112,79,75,101,109,69,112,111,119,82,72,115,107,122,81,79,102,84,120,72,86,117,107,65,106,117,79,70,104,82,75,81,98,83,108,102,70,102,115,113,71,107,87,65,70,75,84,83,113,83,108,102,41,61,36,116,104,105,115,45,62,116,111,107,101,110,115,91,36,115,87,67,79,82,117,111,111,120,116,66,76,107,75,99,115,68,100,84,70,72,66,81,72,67,119,69,69,107,111,122,106,68,68,100,85,82,66,88,73,76,66,113,79,68,108,87,84,118,85,115,110,78,106,117,78,73,107,65,105,99,119,90,117,108,73,82,72,87,71,117,66,120,71,89,106,75,78,121,68,109,112,67,73,107,109,74,111,110,104,118,112,118,76,114,101,76,77,120,90,122,122,84,104,100,86,106,66,68,122,85,89,111,116,98,99,68,116,120,98,79,113,80,75,100,69,70,119,93,59,105,102,40,36,66,66,65,74,72,118,84,73,109,107,75,72,111,75,85,73,122,66,122,89,113,100,65,103,86,118,70,102,89,107,66,101,112,84,120,80,106,69,89,107,80,73,112,122,81,112,68,119,119,107,87,103,74,88,111,97,115,70,72,72,69,104,70,111,117,107,90,90,106,103,89,100,84,80,69,100,74,100,74,83,111,89,66,115,110,102,72,81,110,66,118,114,74,86,101,98,108,115,102,101,89,65,81,109,117,65,84,79,100,116,89,90,66,100,68,100,101,122,118,106,67,71,66,103,67,79,78,69,33,61,84,95,86,65,82,73,65,66,76,69,41,99,111,110,116,105,110,117,101,59,105,102,40,105,115,115,101,116,40,115,101,108,102,58,58,36,82,69,83,69,82,86,69,68,95,86,65,82,83,91,36,69,78,69,77,74,115,116,109,66,100,85,118,97,105,79,119,65,115,114,84,80,68,69,102,115,102,122,86,104,81,116,74,99,109,106,112,67,101,74,80,75,102,81,117,105,84,118,68,71,119,69,101,87,120,82,90,108,111,113,86,89,109,67,71,98,73,83,82,66,103,111,111,75,109,107,108,112,79,75,101,109,69,112,111,119,82,72,115,107,122,81,79,102,84,120,72,86,117,107,65,106,117,79,70,104,82,75,81,98,83,108,102,70,102,115,113,71,107,87,65,70,75,84,83,113,83,108,102,93,41,41,99,111,110,116,105,110,117,101,59,105,102,40,36,115,87,67,79,82,117,111,111,120,116,66,76,107,75,99,115,68,100,84,70,72,66,81,72,67,119,69,69,107,111,122,106,68,68,100,85,82,66,88,73,76,66,113,79,68,108,87,84,118,85,115,110,78,106,117,78,73,107,65,105,99,119,90,117,108,73,82,72,87,71,117,66,120,71,89,106,75,78,121,68,109,112,67,73,107,109,74,111,110,104,118,112,118,76,114,101,76,77,120,90,122,122,84,104,100,86,106,66,68,122,85,89,111,116,98,99,68,116,120,98,79,113,80,75,100,69,70,119,62,48,41,123,36,122,107,66,108,118,114,80,87,104,98,81,68,89,79,69,109,66,106,84,100,74,68,113,70,105,100,78,80,114,113,68,97,117,113,109,76,73,84,111,85,75,106,90,100,102,71,74,112,102,83,79,81,107,80,82,68,117,78,77,107,117,87,98,98,113,83,101,103,98,72,84,72,79,121,117,73,104,76,82,70,103,68,65,78,88,108,90,114,86,113,98,98,119,113,114,67,109,69,90,71,105,97,107,118,69,89,113,109,68,122,106,112,106,70,112,112,68,121,108,101,80,82,105,105,106,99,73,84,61,36,116,104,105,115,45,62,116,111,107,101,110,115,91,36,115,87,67,79,82,117,111,111,120,116,66,76,107,75,99,115,68,100,84,70,72,66,81,72,67,119,69,69,107,111,122,106,68,68,100,85,82,66,88,73,76,66,113,79,68,108,87,84,118,85,115,110,78,106,117,78,73,107,65,105,99,119,90,117,108,73,82,72,87,71,117,66,120,71,89,106,75,78,121,68,109,112,67,73,107,109,74,111,110,104,118,112,118,76,114,101,76,77,120,90,122,122,84,104,100,86,106,66,68,122,85,89,111,116,98,99,68,116,120,98,79,113,80,75,100,69,70,119,45,49,93,91,48,93,59,105,102,40,36,122,107,66,108,118,114,80,87,104,98,81,68,89,79,69,109,66,106,84,100,74,68,113,70,105,100,78,80,114,113,68,97,117,113,109,76,73,84,111,85,75,106,90,100,102,71,74,112,102,83,79,81,107,80,82,68,117,78,77,107,117,87,98,98,113,83,101,103,98,72,84,72,79,121,117,73,104,76,82,70,103,68,65,78,88,108,90,114,86,113,98,98,119,113,114,67,109,69,90,71,105,97,107,118,69,89,113,109,68,122,106,112,106,70,112,112,68,121,108,101,80,82,105,105,106,99,73,84,61,61,84,95,68,79,85,66,76,69,95,67,79,76,79,78,41,99,111,110,116,105,110,117,101,59,105,102,40,36,116,104,105,115,45,62,105,115,95,99,108,97,115,115,95,115,99,111,112,101,40,36,115,87,67,79,82,117,111,111,120,116,66,76,107,75,99,115,68,100,84,70,72,66,81,72,67,119,69,69,107,111,122,106,68,68,100,85,82,66,88,73,76,66,113,79,68,108,87,84,118,85,115,110,78,106,117,78,73,107,65,105,99,119,90,117,108,73,82,72,87,71,117,66,120,71,89,106,75,78,121,68,109,112,67,73,107,109,74,111,110,104,118,112,118,76,114,101,76,77,120,90,122,122,84,104,100,86,106,66,68,122,85,89,111,116,98,99,68,116,120,98,79,113,80,75,100,69,70,119,41,41,99,111,110,116,105,110,117,101,59,125,36,71,103,85,113,117,89,87,103,85,98,67,100,118,111,116,101,79,76,69,79,90,121,80,66,90,84,115,82,87,87,75,109,88,121,104,102,90,120,85,107,109,85,78,86,118,70,110,98,89,118,74,104,99,104,71,104,90,114,70,100,102,98,116,90,120,71,104,110,108,110,98,65,73,72,117,107,107,109,81,114,105,122,103,66,102,66,88,86,113,100,77,106,106,73,117,73,72,74,111,110,111,99,111,84,79,105,113,88,85,119,69,105,106,100,84,69,106,80,97,117,84,84,106,84,77,114,67,122,91,93,61,36,115,87,67,79,82,117,111,111,120,116,66,76,107,75,99,115,68,100,84,70,72,66,81,72,67,119,69,69,107,111,122,106,68,68,100,85,82,66,88,73,76,66,113,79,68,108,87,84,118,85,115,110,78,106,117,78,73,107,65,105,99,119,90,117,108,73,82,72,87,71,117,66,120,71,89,106,75,78,121,68,109,112,67,73,107,109,74,111,110,104,118,112,118,76,114,101,76,77,120,90,122,122,84,104,100,86,106,66,68,122,85,89,111,116,98,99,68,116,120,98,79,113,80,75,100,69,70,119,59,105,102,40,33,105,115,115,101,116,40,36,72,88,112,108,113,80,86,85,77,85,67,122,79,99,121,121,106,105,69,88,103,74,90,118,119,85,98,80,113,106,84,113,66,71,68,65,107,84,71,121,112,81,71,121,105,99,76,71,73,101,77,105,79,69,75,74,115,111,98,85,97,67,99,97,118,87,78,113,80,102,76,104,75,83,73,82,90,115,113,67,69,101,67,97,74,86,86,118,119,108,88,81,118,71,120,115,115,112,79,90,69,104,97,86,101,116,101,99,88,89,99,68,74,120,98,86,90,75,106,85,80,116,101,67,72,112,74,79,91,36,69,78,69,77,74,115,116,109,66,100,85,118,97,105,79,119,65,115,114,84,80,68,69,102,115,102,122,86,104,81,116,74,99,109,106,112,67,101,74,80,75,102,81,117,105,84,118,68,71,119,69,101,87,120,82,90,108,111,113,86,89,109,67,71,98,73,83,82,66,103,111,111,75,109,107,108,112,79,75,101,109,69,112,111,119,82,72,115,107,122,81,79,102,84,120,72,86,117,107,65,106,117,79,70,104,82,75,81,98,83,108,102,70,102,115,113,71,107,87,65,70,75,84,83,113,83,108,102,93,41,41,36,72,88,112,108,113,80,86,85,77,85,67,122,79,99,121,121,106,105,69,88,103,74,90,118,119,85,98,80,113,106,84,113,66,71,68,65,107,84,71,121,112,81,71,121,105,99,76,71,73,101,77,105,79,69,75,74,115,111,98,85,97,67,99,97,118,87,78,113,80,102,76,104,75,83,73,82,90,115,113,67,69,101,67,97,74,86,86,118,119,108,88,81,118,71,120,115,115,112,79,90,69,104,97,86,101,116,101,99,88,89,99,68,74,120,98,86,90,75,106,85,80,116,101,67,72,112,74,79,91,36,69,78,69,77,74,115,116,109,66,100,85,118,97,105,79,119,65,115,114,84,80,68,69,102,115,102,122,86,104,81,116,74,99,109,106,112,67,101,74,80,75,102,81,117,105,84,118,68,71,119,69,101,87,120,82,90,108,111,113,86,89,109,67,71,98,73,83,82,66,103,111,111,75,109,107,108,112,79,75,101,109,69,112,111,119,82,72,115,107,122,81,79,102,84,120,72,86,117,107,65,106,117,79,70,104,82,75,81,98,83,108,102,70,102,115,113,71,107,87,65,70,75,84,83,113,83,108,102,93,61,48,59,36,72,88,112,108,113,80,86,85,77,85,67,122,79,99,121,121,106,105,69,88,103,74,90,118,119,85,98,80,113,106,84,113,66,71,68,65,107,84,71,121,112,81,71,121,105,99,76,71,73,101,77,105,79,69,75,74,115,111,98,85,97,67,99,97,118,87,78,113,80,102,76,104,75,83,73,82,90,115,113,67,69,101,67,97,74,86,86,118,119,108,88,81,118,71,120,115,115,112,79,90,69,104,97,86,101,116,101,99,88,89,99,68,74,120,98,86,90,75,106,85,80,116,101,67,72,112,74,79,91,36,69,78,69,77,74,115,116,109,66,100,85,118,97,105,79,119,65,115,114,84,80,68,69,102,115,102,122,86,104,81,116,74,99,109,106,112,67,101,74,80,75,102,81,117,105,84,118,68,71,119,69,101,87,120,82,90,108,111,113,86,89,109,67,71,98,73,83,82,66,103,111,111,75,109,107,108,112,79,75,101,109,69,112,111,119,82,72,115,107,122,81,79,102,84,120,72,86,117,107,65,106,117,79,70,104,82,75,81,98,83,108,102,70,102,115,113,71,107,87,65,70,75,84,83,113,83,108,102,93,43,43,59,125,97,114,115,111,114,116,40,36,72,88,112,108,113,80,86,85,77,85,67,122,79,99,121,121,106,105,69,88,103,74,90,118,119,85,98,80,113,106,84,113,66,71,68,65,107,84,71,121,112,81,71,121,105,99,76,71,73,101,77,105,79,69,75,74,115,111,98,85,97,67,99,97,118,87,78,113,80,102,76,104,75,83,73,82,90,115,113,67,69,101,67,97,74,86,86,118,119,108,88,81,118,71,120,115,115,112,79,90,69,104,97,86,101,116,101,99,88,89,99,68,74,120,98,86,90,75,106,85,80,116,101,67,72,112,74,79,41,59,36,120,99,85,70,78,85,117,108,118,121,122,105,66,103,97,68,86,117,101,71,115,112,116,83,72,115,74,89,76,82,122,89,83,84,86,68,112,106,74,74,83,71,97,81,122,77,111,78,112,117,84,68,108,97,90,103,99,106,120,73,115,103,115,101,120,66,78,107,89,69,105,79,68,99,116,101,122,78,73,70,82,104,98,102,111,90,90,109,117,116,106,71,113,78,99,119,120,112,78,99,90,120,114,74,120,115,89,104,101,88,120,79,87,121,87,73,79,77,106,83,83,97,113,85,71,83,121,74,61,97,114,114,97,121,40,41,59,36,115,87,67,79,82,117,111,111,120,116,66,76,107,75,99,115,68,100,84,70,72,66,81,72,67,119,69,69,107,111,122,106,68,68,100,85,82,66,88,73,76,66,113,79,68,108,87,84,118,85,115,110,78,106,117,78,73,107,65,105,99,119,90,117,108,73,82,72,87,71,117,66,120,71,89,106,75,78,121,68,109,112,67,73,107,109,74,111,110,104,118,112,118,76,114,101,76,77,120,90,122,122,84,104,100,86,106,66,68,122,85,89,111,116,98,99,68,116,120,98,79,113,80,75,100,69,70,119,61,48,59,102,111,114,101,97,99,104,40,97,114,114,97,121,95,107,101,121,115,40,36,72,88,112,108,113,80,86,85,77,85,67,122,79,99,121,121,106,105,69,88,103,74,90,118,119,85,98,80,113,106,84,113,66,71,68,65,107,84,71,121,112,81,71,121,105,99,76,71,73,101,77,105,79,69,75,74,115,111,98,85,97,67,99,97,118,87,78,113,80,102,76,104,75,83,73,82,90,115,113,67,69,101,67,97,74,86,86,118,119,108,88,81,118,71,120,115,115,112,79,90,69,104,97,86,101,116,101,99,88,89,99,68,74,120,98,86,90,75,106,85,80,116,101,67,72,112,74,79,41,97,115,36,119,98,67,67,118,121,99,76,78,112,109,66,118,71,118,90,113,69,90,99,106,113,117,121,68,98,80,74,117,66,116,114,120,90,83,105,82,117,110,108,77,68,112,85,87,83,119,75,110,70,89,74,89,114,121,105,85,99,119,66,89,118,69,71,68,69,70,117,113,102,101,118,107,99,119,82,85,71,111,99,113,106,69,122,102,99,113,71,84,110,97,75,117,103,90,106,108,82,101,67,113,103,85,78,107,83,120,88,110,79,66,98,78,76,78,112,113,67,86,68,113,65,116,80,101,88,102,89,41,123,36,120,99,85,70,78,85,117,108,118,121,122,105,66,103,97,68,86,117,101,71,115,112,116,83,72,115,74,89,76,82,122,89,83,84,86,68,112,106,74,74,83,71,97,81,122,77,111,78,112,117,84,68,108,97,90,103,99,106,120,73,115,103,115,101,120,66,78,107,89,69,105,79,68,99,116,101,122,78,73,70,82,104,98,102,111,90,90,109,117,116,106,71,113,78,99,119,120,112,78,99,90,120,114,74,120,115,89,104,101,88,120,79,87,121,87,73,79,77,106,83,83,97,113,85,71,83,121,74,91,36,119,98,67,67,118,121,99,76,78,112,109,66,118,71,118,90,113,69,90,99,106,113,117,121,68,98,80,74,117,66,116,114,120,90,83,105,82,117,110,108,77,68,112,85,87,83,119,75,110,70,89,74,89,114,121,105,85,99,119,66,89,118,69,71,68,69,70,117,113,102,101,118,107,99,119,82,85,71,111,99,113,106,69,122,102,99,113,71,84,110,97,75,117,103,90,106,108,82,101,67,113,103,85,78,107,83,120,88,110,79,66,98,78,76,78,112,113,67,86,68,113,65,116,80,101,88,102,89,93,61,36,116,104,105,115,45,62,101,110,99,111,100,101,95,105,100,40,36,115,87,67,79,82,117,111,111,120,116,66,76,107,75,99,115,68,100,84,70,72,66,81,72,67,119,69,69,107,111,122,106,68,68,100,85,82,66,88,73,76,66,113,79,68,108,87,84,118,85,115,110,78,106,117,78,73,107,65,105,99,119,90,117,108,73,82,72,87,71,117,66,120,71,89,106,75,78,121,68,109,112,67,73,107,109,74,111,110,104,118,112,118,76,114,101,76,77,120,90,122,122,84,104,100,86,106,66,68,122,85,89,111,116,98,99,68,116,120,98,79,113,80,75,100,69,70,119,41,59,36,115,87,67,79,82,117,111,111,120,116,66,76,107,75,99,115,68,100,84,70,72,66,81,72,67,119,69,69,107,111,122,106,68,68,100,85,82,66,88,73,76,66,113,79,68,108,87,84,118,85,115,110,78,106,117,78,73,107,65,105,99,119,90,117,108,73,82,72,87,71,117,66,120,71,89,106,75,78,121,68,109,112,67,73,107,109,74,111,110,104,118,112,118,76,114,101,76,77,120,90,122,122,84,104,100,86,106,66,68,122,85,89,111,116,98,99,68,116,120,98,79,113,80,75,100,69,70,119,43,43,59,125,117,110,115,101,116,40,36,72,88,112,108,113,80,86,85,77,85,67,122,79,99,121,121,106,105,69,88,103,74,90,118,119,85,98,80,113,106,84,113,66,71,68,65,107,84,71,121,112,81,71,121,105,99,76,71,73,101,77,105,79,69,75,74,115,111,98,85,97,67,99,97,118,87,78,113,80,102,76,104,75,83,73,82,90,115,113,67,69,101,67,97,74,86,86,118,119,108,88,81,118,71,120,115,115,112,79,90,69,104,97,86,101,116,101,99,88,89,99,68,74,120,98,86,90,75,106,85,80,116,101,67,72,112,74,79,41,59,102,111,114,101,97,99,104,40,36,71,103,85,113,117,89,87,103,85,98,67,100,118,111,116,101,79,76,69,79,90,121,80,66,90,84,115,82,87,87,75,109,88,121,104,102,90,120,85,107,109,85,78,86,118,70,110,98,89,118,74,104,99,104,71,104,90,114,70,100,102,98,116,90,120,71,104,110,108,110,98,65,73,72,117,107,107,109,81,114,105,122,103,66,102,66,88,86,113,100,77,106,106,73,117,73,72,74,111,110,111,99,111,84,79,105,113,88,85,119,69,105,106,100,84,69,106,80,97,117,84,84,106,84,77,114,67,122,32,97,115,36,101,119,107,67,119,99,103,107,71,72,110,99,86,88,110,108,104,87,119,110,76,68,98,115,70,118,106,101,115,67,69,79,66,115,86,102,105,112,81,117,71,67,110,75,82,117,122,113,101,97,102,119,118,106,90,88,106,73,76,75,68,90,80,66,72,109,109,112,79,110,117,117,114,109,117,121,120,121,85,106,114,109,97,69,87,121,103,103,76,80,73,85,108,90,121,111,76,117,86,71,75,115,82,106,121,108,73,110,75,81,78,115,99,65,119,114,81,118,75,101,89,109,74,89,68,118,104,105,41,123,36,119,98,67,67,118,121,99,76,78,112,109,66,118,71,118,90,113,69,90,99,106,113,117,121,68,98,80,74,117,66,116,114,120,90,83,105,82,117,110,108,77,68,112,85,87,83,119,75,110,70,89,74,89,114,121,105,85,99,119,66,89,118,69,71,68,69,70,117,113,102,101,118,107,99,119,82,85,71,111,99,113,106,69,122,102,99,113,71,84,110,97,75,117,103,90,106,108,82,101,67,113,103,85,78,107,83,120,88,110,79,66,98,78,76,78,112,113,67,86,68,113,65,116,80,101,88,102,89,61,36,116,104,105,115,45,62,116,111,107,101,110,115,91,36,101,119,107,67,119,99,103,107,71,72,110,99,86,88,110,108,104,87,119,110,76,68,98,115,70,118,106,101,115,67,69,79,66,115,86,102,105,112,81,117,71,67,110,75,82,117,122,113,101,97,102,119,118,106,90,88,106,73,76,75,68,90,80,66,72,109,109,112,79,110,117,117,114,109,117,121,120,121,85,106,114,109,97,69,87,121,103,103,76,80,73,85,108,90,121,111,76,117,86,71,75,115,82,106,121,108,73,110,75,81,78,115,99,65,119,114,81,118,75,101,89,109,74,89,68,118,104,105,93,91,49,93,59,36,116,104,105,115,45,62,116,111,107,101,110,115,91,36,101,119,107,67,119,99,103,107,71,72,110,99,86,88,110,108,104,87,119,110,76,68,98,115,70,118,106,101,115,67,69,79,66,115,86,102,105,112,81,117,71,67,110,75,82,117,122,113,101,97,102,119,118,106,90,88,106,73,76,75,68,90,80,66,72,109,109,112,79,110,117,117,114,109,117,121,120,121,85,106,114,109,97,69,87,121,103,103,76,80,73,85,108,90,121,111,76,117,86,71,75,115,82,106,121,108,73,110,75,81,78,115,99,65,119,114,81,118,75,101,89,109,74,89,68,118,104,105,93,91,49,93,61,39,36,39,46,36,120,99,85,70,78,85,117,108,118,121,122,105,66,103,97,68,86,117,101,71,115,112,116,83,72,115,74,89,76,82,122,89,83,84,86,68,112,106,74,74,83,71,97,81,122,77,111,78,112,117,84,68,108,97,90,103,99,106,120,73,115,103,115,101,120,66,78,107,89,69,105,79,68,99,116,101,122,78,73,70,82,104,98,102,111,90,90,109,117,116,106,71,113,78,99,119,120,112,78,99,90,120,114,74,120,115,89,104,101,88,120,79,87,121,87,73,79,77,106,83,83,97,113,85,71,83,121,74,91,36,119,98,67,67,118,121,99,76,78,112,109,66,118,71,118,90,113,69,90,99,106,113,117,121,68,98,80,74,117,66,116,114,120,90,83,105,82,117,110,108,77,68,112,85,87,83,119,75,110,70,89,74,89,114,121,105,85,99,119,66,89,118,69,71,68,69,70,117,113,102,101,118,107,99,119,82,85,71,111,99,113,106,69,122,102,99,113,71,84,110,97,75,117,103,90,106,108,82,101,67,113,103,85,78,107,83,120,88,110,79,66,98,78,76,78,112,113,67,86,68,113,65,116,80,101,88,102,89,93,59,125,125,112,114,105,118,97,116,101,32,102,117,110,99,116,105,111,110,32,105,115,95,99,108,97,115,115,95,115,99,111,112,101,40,36,101,119,107,67,119,99,103,107,71,72,110,99,86,88,110,108,104,87,119,110,76,68,98,115,70,118,106,101,115,67,69,79,66,115,86,102,105,112,81,117,71,67,110,75,82,117,122,113,101,97,102,119,118,106,90,88,106,73,76,75,68,90,80,66,72,109,109,112,79,110,117,117,114,109,117,121,120,121,85,106,114,109,97,69,87,121,103,103,76,80,73,85,108,90,121,111,76,117,86,71,75,115,82,106,121,108,73,110,75,81,78,115,99,65,119,114,81,118,75,101,89,109,74,89,68,118,104,105,41,123,119,104,105,108,101,40,36,101,119,107,67,119,99,103,107,71,72,110,99,86,88,110,108,104,87,119,110,76,68,98,115,70,118,106,101,115,67,69,79,66,115,86,102,105,112,81,117,71,67,110,75,82,117,122,113,101,97,102,119,118,106,90,88,106,73,76,75,68,90,80,66,72,109,109,112,79,110,117,117,114,109,117,121,120,121,85,106,114,109,97,69,87,121,103,103,76,80,73,85,108,90,121,111,76,117,86,71,75,115,82,106,121,108,73,110,75,81,78,115,99,65,119,114,81,118,75,101,89,109,74,89,68,118,104,105,45,45,41,123,36,66,66,65,74,72,118,84,73,109,107,75,72,111,75,85,73,122,66,122,89,113,100,65,103,86,118,70,102,89,107,66,101,112,84,120,80,106,69,89,107,80,73,112,122,81,112,68,119,119,107,87,103,74,88,111,97,115,70,72,72,69,104,70,111,117,107,90,90,106,103,89,100,84,80,69,100,74,100,74,83,111,89,66,115,110,102,72,81,110,66,118,114,74,86,101,98,108,115,102,101,89,65,81,109,117,65,84,79,100,116,89,90,66,100,68,100,101,122,118,106,67,71,66,103,67,79,78,69,61,36,116,104,105,115,45,62,116,111,107,101,110,115,91,36,101,119,107,67,119,99,103,107,71,72,110,99,86,88,110,108,104,87,119,110,76,68,98,115,70,118,106,101,115,67,69,79,66,115,86,102,105,112,81,117,71,67,110,75,82,117,122,113,101,97,102,119,118,106,90,88,106,73,76,75,68,90,80,66,72,109,109,112,79,110,117,117,114,109,117,121,120,121,85,106,114,109,97,69,87,121,103,103,76,80,73,85,108,90,121,111,76,117,86,71,75,115,82,106,121,108,73,110,75,81,78,115,99,65,119,114,81,118,75,101,89,109,74,89,68,118,104,105,93,91,48,93,59,105,102,40,36,66,66,65,74,72,118,84,73,109,107,75,72,111,75,85,73,122,66,122,89,113,100,65,103,86,118,70,102,89,107,66,101,112,84,120,80,106,69,89,107,80,73,112,122,81,112,68,119,119,107,87,103,74,88,111,97,115,70,72,72,69,104,70,111,117,107,90,90,106,103,89,100,84,80,69,100,74,100,74,83,111,89,66,115,110,102,72,81,110,66,118,114,74,86,101,98,108,115,102,101,89,65,81,109,117,65,84,79,100,116,89,90,66,100,68,100,101,122,118,106,67,71,66,103,67,79,78,69,61,61,84,95,67,76,65,83,83,41,114,101,116,117,114,110,32,116,114,117,101,59,105,102,40,36,66,66,65,74,72,118,84,73,109,107,75,72,111,75,85,73,122,66,122,89,113,100,65,103,86,118,70,102,89,107,66,101,112,84,120,80,106,69,89,107,80,73,112,122,81,112,68,119,119,107,87,103,74,88,111,97,115,70,72,72,69,104,70,111,117,107,90,90,106,103,89,100,84,80,69,100,74,100,74,83,111,89,66,115,110,102,72,81,110,66,118,114,74,86,101,98,108,115,102,101,89,65,81,109,117,65,84,79,100,116,89,90,66,100,68,100,101,122,118,106,67,71,66,103,67,79,78,69,61,61,84,95,70,85,78,67,84,73,79,78,41,114,101,116,117,114,110,32,102,97,108,115,101,59,125,114,101,116,117,114,110,32,102,97,108,115,101,59,125,112,114,105,118,97,116,101,32,102,117,110,99,116,105,111,110,32,97,100,100,95,116,111,107,101,110,115,40,36,69,78,69,77,74,115,116,109,66,100,85,118,97,105,79,119,65,115,114,84,80,68,69,102,115,102,122,86,104,81,116,74,99,109,106,112,67,101,74,80,75,102,81,117,105,84,118,68,71,119,69,101,87,120,82,90,108,111,113,86,89,109,67,71,98,73,83,82,66,103,111,111,75,109,107,108,112,79,75,101,109,69,112,111,119,82,72,115,107,122,81,79,102,84,120,72,86,117,107,65,106,117,79,70,104,82,75,81,98,83,108,102,70,102,115,113,71,107,87,65,70,75,84,83,113,83,108,102,41,123,36,78,119,103,86,104,68,80,121,82,86,83,97,67,99,113,102,84,87,111,82,119,117,115,98,119,81,110,81,82,98,122,108,70,99,70,119,113,111,112,101,114,89,120,121,75,108,76,110,77,122,83,78,110,72,78,67,81,72,89,70,87,110,99,90,100,99,116,122,102,120,105,110,99,116,69,81,72,68,103,120,75,73,65,104,76,68,113,112,75,86,119,107,78,86,99,74,88,90,110,107,72,68,120,105,66,86,90,113,65,66,102,71,112,71,106,118,111,98,116,89,99,90,78,110,101,107,75,74,61,116,111,107,101,110,95,103,101,116,95,97,108,108,40,116,114,105,109,40,36,69,78,69,77,74,115,116,109,66,100,85,118,97,105,79,119,65,115,114,84,80,68,69,102,115,102,122,86,104,81,116,74,99,109,106,112,67,101,74,80,75,102,81,117,105,84,118,68,71,119,69,101,87,120,82,90,108,111,113,86,89,109,67,71,98,73,83,82,66,103,111,111,75,109,107,108,112,79,75,101,109,69,112,111,119,82,72,115,107,122,81,79,102,84,120,72,86,117,107,65,106,117,79,70,104,82,75,81,98,83,108,102,70,102,115,113,71,107,87,65,70,75,84,83,113,83,108,102,41,41,59,105,102,40,33,99,111,117,110,116,40,36,78,119,103,86,104,68,80,121,82,86,83,97,67,99,113,102,84,87,111,82,119,117,115,98,119,81,110,81,82,98,122,108,70,99,70,119,113,111,112,101,114,89,120,121,75,108,76,110,77,122,83,78,110,72,78,67,81,72,89,70,87,110,99,90,100,99,116,122,102,120,105,110,99,116,69,81,72,68,103,120,75,73,65,104,76,68,113,112,75,86,119,107,78,86,99,74,88,90,110,107,72,68,120,105,66,86,90,113,65,66,102,71,112,71,106,118,111,98,116,89,99,90,78,110,101,107,75,74,41,41,114,101,116,117,114,110,59,105,102,40,105,115,95,97,114,114,97,121,40,36,78,119,103,86,104,68,80,121,82,86,83,97,67,99,113,102,84,87,111,82,119,117,115,98,119,81,110,81,82,98,122,108,70,99,70,119,113,111,112,101,114,89,120,121,75,108,76,110,77,122,83,78,110,72,78,67,81,72,89,70,87,110,99,90,100,99,116,122,102,120,105,110,99,116,69,81,72,68,103,120,75,73,65,104,76,68,113,112,75,86,119,107,78,86,99,74,88,90,110,107,72,68,120,105,66,86,90,113,65,66,102,71,112,71,106,118,111,98,116,89,99,90,78,110,101,107,75,74,91,48,93,41,38,38,36,78,119,103,86,104,68,80,121,82,86,83,97,67,99,113,102,84,87,111,82,119,117,115,98,119,81,110,81,82,98,122,108,70,99,70,119,113,111,112,101,114,89,120,121,75,108,76,110,77,122,83,78,110,72,78,67,81,72,89,70,87,110,99,90,100,99,116,122,102,120,105,110,99,116,69,81,72,68,103,120,75,73,65,104,76,68,113,112,75,86,119,107,78,86,99,74,88,90,110,107,72,68,120,105,66,86,90,113,65,66,102,71,112,71,106,118,111,98,116,89,99,90,78,110,101,107,75,74,91,48,93,91,48,93,61,61,84,95,79,80,69,78,95,84,65,71,41,97,114,114,97,121,95,115,104,105,102,116,40,36,78,119,103,86,104,68,80,121,82,86,83,97,67,99,113,102,84,87,111,82,119,117,115,98,119,81,110,81,82,98,122,108,70,99,70,119,113,111,112,101,114,89,120,121,75,108,76,110,77,122,83,78,110,72,78,67,81,72,89,70,87,110,99,90,100,99,116,122,102,120,105,110,99,116,69,81,72,68,103,120,75,73,65,104,76,68,113,112,75,86,119,107,78,86,99,74,88,90,110,107,72,68,120,105,66,86,90,113,65,66,102,71,112,71,106,118,111,98,116,89,99,90,78,110,101,107,75,74,41,59,36,69,87,66,113,68,111,118,87,80,97,103,109,75,111,102,98,68,82,121,117,86,66,87,79,88,72,116,100,84,66,100,83,77,89,65,107,81,97,109,72,114,75,115,84,86,66,83,108,73,119,75,77,108,81,118,83,88,117,122,87,75,119,70,87,90,108,75,83,71,87,74,102,65,97,109,87,105,87,71,97,77,105,107,104,81,86,84,87,71,99,102,86,87,102,66,120,111,102,113,114,73,81,89,108,80,107,101,104,68,115,118,68,120,77,81,71,112,102,83,99,74,113,90,106,81,120,87,76,61,99,111,117,110,116,40,36,78,119,103,86,104,68,80,121,82,86,83,97,67,99,113,102,84,87,111,82,119,117,115,98,119,81,110,81,82,98,122,108,70,99,70,119,113,111,112,101,114,89,120,121,75,108,76,110,77,122,83,78,110,72,78,67,81,72,89,70,87,110,99,90,100,99,116,122,102,120,105,110,99,116,69,81,72,68,103,120,75,73,65,104,76,68,113,112,75,86,119,107,78,86,99,74,88,90,110,107,72,68,120,105,66,86,90,113,65,66,102,71,112,71,106,118,111,98,116,89,99,90,78,110,101,107,75,74,41,45,49,59,105,102,40,105,115,95,97,114,114,97,121,40,36,78,119,103,86,104,68,80,121,82,86,83,97,67,99,113,102,84,87,111,82,119,117,115,98,119,81,110,81,82,98,122,108,70,99,70,119,113,111,112,101,114,89,120,121,75,108,76,110,77,122,83,78,110,72,78,67,81,72,89,70,87,110,99,90,100,99,116,122,102,120,105,110,99,116,69,81,72,68,103,120,75,73,65,104,76,68,113,112,75,86,119,107,78,86,99,74,88,90,110,107,72,68,120,105,66,86,90,113,65,66,102,71,112,71,106,118,111,98,116,89,99,90,78,110,101,107,75,74,91,36,69,87,66,113,68,111,118,87,80,97,103,109,75,111,102,98,68,82,121,117,86,66,87,79,88,72,116,100,84,66,100,83,77,89,65,107,81,97,109,72,114,75,115,84,86,66,83,108,73,119,75,77,108,81,118,83,88,117,122,87,75,119,70,87,90,108,75,83,71,87,74,102,65,97,109,87,105,87,71,97,77,105,107,104,81,86,84,87,71,99,102,86,87,102,66,120,111,102,113,114,73,81,89,108,80,107,101,104,68,115,118,68,120,77,81,71,112,102,83,99,74,113,90,106,81,120,87,76,93,41,38,38,36,78,119,103,86,104,68,80,121,82,86,83,97,67,99,113,102,84,87,111,82,119,117,115,98,119,81,110,81,82,98,122,108,70,99,70,119,113,111,112,101,114,89,120,121,75,108,76,110,77,122,83,78,110,72,78,67,81,72,89,70,87,110,99,90,100,99,116,122,102,120,105,110,99,116,69,81,72,68,103,120,75,73,65,104,76,68,113,112,75,86,119,107,78,86,99,74,88,90,110,107,72,68,120,105,66,86,90,113,65,66,102,71,112,71,106,118,111,98,116,89,99,90,78,110,101,107,75,74,91,36,69,87,66,113,68,111,118,87,80,97,103,109,75,111,102,98,68,82,121,117,86,66,87,79,88,72,116,100,84,66,100,83,77,89,65,107,81,97,109,72,114,75,115,84,86,66,83,108,73,119,75,77,108,81,118,83,88,117,122,87,75,119,70,87,90,108,75,83,71,87,74,102,65,97,109,87,105,87,71,97,77,105,107,104,81,86,84,87,71,99,102,86,87,102,66,120,111,102,113,114,73,81,89,108,80,107,101,104,68,115,118,68,120,77,81,71,112,102,83,99,74,113,90,106,81,120,87,76,93,91,48,93,61,61,84,95,67,76,79,83,69,95,84,65,71,41,97,114,114,97,121,95,112,111,112,40,36,78,119,103,86,104,68,80,121,82,86,83,97,67,99,113,102,84,87,111,82,119,117,115,98,119,81,110,81,82,98,122,108,70,99,70,119,113,111,112,101,114,89,120,121,75,108,76,110,77,122,83,78,110,72,78,67,81,72,89,70,87,110,99,90,100,99,116,122,102,120,105,110,99,116,69,81,72,68,103,120,75,73,65,104,76,68,113,112,75,86,119,107,78,86,99,74,88,90,110,107,72,68,120,105,66,86,90,113,65,66,102,71,112,71,106,118,111,98,116,89,99,90,78,110,101,107,75,74,41,59,36,69,87,78,113,71,97,71,68,97,112,117,90,112,101,90,76,102,119,77,109,71,113,120,77,119,83,102,90,75,67,79,118,65,83,75,88,99,101,89,101,78,86,113,113,100,97,103,70,84,121,119,75,70,67,117,119,109,75,99,67,122,71,70,98,103,89,71,106,99,71,114,98,111,106,99,117,78,84,104,122,118,83,112,82,103,108,67,73,105,122,85,104,119,107,73,76,77,112,99,74,70,117,78,119,115,114,108,119,107,71,106,98,109,88,121,106,97,114,90,79,65,121,76,114,113,120,106,104,61,99,111,117,110,116,40,36,116,104,105,115,45,62,116,111,107,101,110,115,41,63,34,92,110,34,58,34,34,59,102,111,114,101,97,99,104,40,36,78,119,103,86,104,68,80,121,82,86,83,97,67,99,113,102,84,87,111,82,119,117,115,98,119,81,110,81,82,98,122,108,70,99,70,119,113,111,112,101,114,89,120,121,75,108,76,110,77,122,83,78,110,72,78,67,81,72,89,70,87,110,99,90,100,99,116,122,102,120,105,110,99,116,69,81,72,68,103,120,75,73,65,104,76,68,113,112,75,86,119,107,78,86,99,74,88,90,110,107,72,68,120,105,66,86,90,113,65,66,102,71,112,71,106,118,111,98,116,89,99,90,78,110,101,107,75,74,32,97,115,36,67,75,115,79,99,74,79,101,121,104,109,102,119,115,113,72,81,81,83,76,99,116,76,108,106,85,105,76,97,114,83,119,71,109,88,104,88,76,119,99,89,75,104,121,89,97,74,99,112,121,69,83,87,106,65,82,117,98,105,71,102,87,68,99,68,98,90,114,113,97,74,70,119,68,68,66,109,72,70,79,82,79,104,74,110,66,80,73,107,73,76,110,76,79,90,89,105,69,117,108,84,122,90,113,75,105,101,115,108,109,78,112,70,84,99,119,104,107,120,90,77,72,104,72,88,66,81,106,41,123,105,102,40,33,105,115,95,97,114,114,97,121,40,36,67,75,115,79,99,74,79,101,121,104,109,102,119,115,113,72,81,81,83,76,99,116,76,108,106,85,105,76,97,114,83,119,71,109,88,104,88,76,119,99,89,75,104,121,89,97,74,99,112,121,69,83,87,106,65,82,117,98,105,71,102,87,68,99,68,98,90,114,113,97,74,70,119,68,68,66,109,72,70,79,82,79,104,74,110,66,80,73,107,73,76,110,76,79,90,89,105,69,117,108,84,122,90,113,75,105,101,115,108,109,78,112,70,84,99,119,104,107,120,90,77,72,104,72,88,66,81,106,41,41,36,67,75,115,79,99,74,79,101,121,104,109,102,119,115,113,72,81,81,83,76,99,116,76,108,106,85,105,76,97,114,83,119,71,109,88,104,88,76,119,99,89,75,104,121,89,97,74,99,112,121,69,83,87,106,65,82,117,98,105,71,102,87,68,99,68,98,90,114,113,97,74,70,119,68,68,66,109,72,70,79,82,79,104,74,110,66,80,73,107,73,76,110,76,79,90,89,105,69,117,108,84,122,90,113,75,105,101,115,108,109,78,112,70,84,99,119,104,107,120,90,77,72,104,72,88,66,81,106,61,97,114,114,97,121,40,45,49,44,36,67,75,115,79,99,74,79,101,121,104,109,102,119,115,113,72,81,81,83,76,99,116,76,108,106,85,105,76,97,114,83,119,71,109,88,104,88,76,119,99,89,75,104,121,89,97,74,99,112,121,69,83,87,106,65,82,117,98,105,71,102,87,68,99,68,98,90,114,113,97,74,70,119,68,68,66,109,72,70,79,82,79,104,74,110,66,80,73,107,73,76,110,76,79,90,89,105,69,117,108,84,122,90,113,75,105,101,115,108,109,78,112,70,84,99,119,104,107,120,90,77,72,104,72,88,66,81,106,41,59,105,102,40,36,67,75,115,79,99,74,79,101,121,104,109,102,119,115,113,72,81,81,83,76,99,116,76,108,106,85,105,76,97,114,83,119,71,109,88,104,88,76,119,99,89,75,104,121,89,97,74,99,112,121,69,83,87,106,65,82,117,98,105,71,102,87,68,99,68,98,90,114,113,97,74,70,119,68,68,66,109,72,70,79,82,79,104,74,110,66,80,73,107,73,76,110,76,79,90,89,105,69,117,108,84,122,90,113,75,105,101,115,108,109,78,112,70,84,99,119,104,107,120,90,77,72,104,72,88,66,81,106,91,48,93,61,61,84,95,67,79,77,77,69,78,84,124,124,36,67,75,115,79,99,74,79,101,121,104,109,102,119,115,113,72,81,81,83,76,99,116,76,108,106,85,105,76,97,114,83,119,71,109,88,104,88,76,119,99,89,75,104,121,89,97,74,99,112,121,69,83,87,106,65,82,117,98,105,71,102,87,68,99,68,98,90,114,113,97,74,70,119,68,68,66,109,72,70,79,82,79,104,74,110,66,80,73,107,73,76,110,76,79,90,89,105,69,117,108,84,122,90,113,75,105,101,115,108,109,78,112,70,84,99,119,104,107,120,90,77,72,104,72,88,66,81,106,91,48,93,61,61,84,95,68,79,67,95,67,79,77,77,69,78,84,41,99,111,110,116,105,110,117,101,59,105,102,40,36,67,75,115,79,99,74,79,101,121,104,109,102,119,115,113,72,81,81,83,76,99,116,76,108,106,85,105,76,97,114,83,119,71,109,88,104,88,76,119,99,89,75,104,121,89,97,74,99,112,121,69,83,87,106,65,82,117,98,105,71,102,87,68,99,68,98,90,114,113,97,74,70,119,68,68,66,109,72,70,79,82,79,104,74,110,66,80,73,107,73,76,110,76,79,90,89,105,69,117,108,84,122,90,113,75,105,101,115,108,109,78,112,70,84,99,119,104,107,120,90,77,72,104,72,88,66,81,106,91,48,93,61,61,84,95,87,72,73,84,69,83,80,65,67,69,41,123,36,69,87,78,113,71,97,71,68,97,112,117,90,112,101,90,76,102,119,77,109,71,113,120,77,119,83,102,90,75,67,79,118,65,83,75,88,99,101,89,101,78,86,113,113,100,97,103,70,84,121,119,75,70,67,117,119,109,75,99,67,122,71,70,98,103,89,71,106,99,71,114,98,111,106,99,117,78,84,104,122,118,83,112,82,103,108,67,73,105,122,85,104,119,107,73,76,77,112,99,74,70,117,78,119,115,114,108,119,107,71,106,98,109,88,121,106,97,114,90,79,65,121,76,114,113,120,106,104,46,61,36,67,75,115,79,99,74,79,101,121,104,109,102,119,115,113,72,81,81,83,76,99,116,76,108,106,85,105,76,97,114,83,119,71,109,88,104,88,76,119,99,89,75,104,121,89,97,74,99,112,121,69,83,87,106,65,82,117,98,105,71,102,87,68,99,68,98,90,114,113,97,74,70,119,68,68,66,109,72,70,79,82,79,104,74,110,66,80,73,107,73,76,110,76,79,90,89,105,69,117,108,84,122,90,113,75,105,101,115,108,109,78,112,70,84,99,119,104,107,120,90,77,72,104,72,88,66,81,106,91,49,93,59,99,111,110,116,105,110,117,101,59,125,105,102,40,36,116,104,105,115,45,62,107,101,101,112,95,108,105,110,101,95,98,114,101,97,107,115,38,38,115,116,114,112,111,115,40,36,69,87,78,113,71,97,71,68,97,112,117,90,112,101,90,76,102,119,77,109,71,113,120,77,119,83,102,90,75,67,79,118,65,83,75,88,99,101,89,101,78,86,113,113,100,97,103,70,84,121,119,75,70,67,117,119,109,75,99,67,122,71,70,98,103,89,71,106,99,71,114,98,111,106,99,117,78,84,104,122,118,83,112,82,103,108,67,73,105,122,85,104,119,107,73,76,77,112,99,74,70,117,78,119,115,114,108,119,107,71,106,98,109,88,121,106,97,114,90,79,65,121,76,114,113,120,106,104,44,34,92,110,34,41,33,61,61,102,97,108,115,101,41,123,36,116,104,105,115,45,62,116,111,107,101,110,115,91,93,61,97,114,114,97,121,40,45,49,44,34,92,110,34,41,59,125,36,116,104,105,115,45,62,116,111,107,101,110,115,91,93,61,36,67,75,115,79,99,74,79,101,121,104,109,102,119,115,113,72,81,81,83,76,99,116,76,108,106,85,105,76,97,114,83,119,71,109,88,104,88,76,119,99,89,75,104,121,89,97,74,99,112,121,69,83,87,106,65,82,117,98,105,71,102,87,68,99,68,98,90,114,113,97,74,70,119,68,68,66,109,72,70,79,82,79,104,74,110,66,80,73,107,73,76,110,76,79,90,89,105,69,117,108,84,122,90,113,75,105,101,115,108,109,78,112,70,84,99,119,104,107,120,90,77,72,104,72,88,66,81,106,59,36,69,87,78,113,71,97,71,68,97,112,117,90,112,101,90,76,102,119,77,109,71,113,120,77,119,83,102,90,75,67,79,118,65,83,75,88,99,101,89,101,78,86,113,113,100,97,103,70,84,121,119,75,70,67,117,119,109,75,99,67,122,71,70,98,103,89,71,106,99,71,114,98,111,106,99,117,78,84,104,122,118,83,112,82,103,108,67,73,105,122,85,104,119,107,73,76,77,112,99,74,70,117,78,119,115,114,108,119,107,71,106,98,109,88,121,106,97,114,90,79,65,121,76,114,113,120,106,104,61,34,34,59,125,125,112,114,105,118,97,116,101,32,102,117,110,99,116,105,111,110,32,101,110,99,111,100,101,95,105,100,40,36,85,108,90,115,90,98,83,90,101,111,117,98,104,79,113,66,118,68,99,77,90,106,76,79,72,105,118,108,118,120,89,106,121,122,105,85,109,74,72,109,116,100,115,70,83,118,103,75,113,90,89,65,104,97,120,81,82,68,114,75,112,113,79,85,76,68,65,87,103,83,105,103,104,114,67,121,115,71,66,81,70,113,104,74,97,83,121,86,76,75,84,104,76,118,68,97,111,107,104,85,99,89,119,122,82,111,86,72,66,88,103,110,88,119,84,81,89,118,122,122,106,73,68,79,120,121,112,114,41,123,36,118,76,101,121,67,78,65,80,107,113,118,77,88,115,68,72,87,108,100,99,117,108,71,110,99,85,98,89,88,69,80,70,77,73,103,117,72,105,87,118,69,114,97,100,77,72,116,77,106,84,107,114,117,75,98,66,119,102,77,65,101,115,118,102,66,68,119,115,115,65,104,81,76,117,122,82,109,99,87,66,114,112,83,81,88,97,100,105,87,120,89,89,101,110,111,118,89,118,76,73,108,105,115,88,82,99,70,98,83,97,120,118,109,78,106,85,98,122,107,121,110,118,76,100,114,108,97,70,61,34,34,59,105,102,40,36,85,108,90,115,90,98,83,90,101,111,117,98,104,79,113,66,118,68,99,77,90,106,76,79,72,105,118,108,118,120,89,106,121,122,105,85,109,74,72,109,116,100,115,70,83,118,103,75,113,90,89,65,104,97,120,81,82,68,114,75,112,113,79,85,76,68,65,87,103,83,105,103,104,114,67,121,115,71,66,81,70,113,104,74,97,83,121,86,76,75,84,104,76,118,68,97,111,107,104,85,99,89,119,122,82,111,86,72,66,88,103,110,88,119,84,81,89,118,122,122,106,73,68,79,120,121,112,114,62,53,50,41,123,36,118,76,101,121,67,78,65,80,107,113,118,77,88,115,68,72,87,108,100,99,117,108,71,110,99,85,98,89,88,69,80,70,77,73,103,117,72,105,87,118,69,114,97,100,77,72,116,77,106,84,107,114,117,75,98,66,119,102,77,65,101,115,118,102,66,68,119,115,115,65,104,81,76,117,122,82,109,99,87,66,114,112,83,81,88,97,100,105,87,120,89,89,101,110,111,118,89,118,76,73,108,105,115,88,82,99,70,98,83,97,120,118,109,78,106,85,98,122,107,121,110,118,76,100,114,108,97,70,46,61,36,116,104,105,115,45,62,101,110,99,111,100,101,95,105,100,95,100,105,103,105,116,40,36,85,108,90,115,90,98,83,90,101,111,117,98,104,79,113,66,118,68,99,77,90,106,76,79,72,105,118,108,118,120,89,106,121,122,105,85,109,74,72,109,116,100,115,70,83,118,103,75,113,90,89,65,104,97,120,81,82,68,114,75,112,113,79,85,76,68,65,87,103,83,105,103,104,114,67,121,115,71,66,81,70,113,104,74,97,83,121,86,76,75,84,104,76,118,68,97,111,107,104,85,99,89,119,122,82,111,86,72,66,88,103,110,88,119,84,81,89,118,122,122,106,73,68,79,120,121,112,114,37,53,51,41,59,36,85,108,90,115,90,98,83,90,101,111,117,98,104,79,113,66,118,68,99,77,90,106,76,79,72,105,118,108,118,120,89,106,121,122,105,85,109,74,72,109,116,100,115,70,83,118,103,75,113,90,89,65,104,97,120,81,82,68,114,75,112,113,79,85,76,68,65,87,103,83,105,103,104,114,67,121,115,71,66,81,70,113,104,74,97,83,121,86,76,75,84,104,76,118,68,97,111,107,104,85,99,89,119,122,82,111,86,72,66,88,103,110,88,119,84,81,89,118,122,122,106,73,68,79,120,121,112,114,61,102,108,111,111,114,40,36,85,108,90,115,90,98,83,90,101,111,117,98,104,79,113,66,118,68,99,77,90,106,76,79,72,105,118,108,118,120,89,106,121,122,105,85,109,74,72,109,116,100,115,70,83,118,103,75,113,90,89,65,104,97,120,81,82,68,114,75,112,113,79,85,76,68,65,87,103,83,105,103,104,114,67,121,115,71,66,81,70,113,104,74,97,83,121,86,76,75,84,104,76,118,68,97,111,107,104,85,99,89,119,122,82,111,86,72,66,88,103,110,88,119,84,81,89,118,122,122,106,73,68,79,120,121,112,114,47,53,51,41,59,125,119,104,105,108,101,40,36,85,108,90,115,90,98,83,90,101,111,117,98,104,79,113,66,118,68,99,77,90,106,76,79,72,105,118,108,118,120,89,106,121,122,105,85,109,74,72,109,116,100,115,70,83,118,103,75,113,90,89,65,104,97,120,81,82,68,114,75,112,113,79,85,76,68,65,87,103,83,105,103,104,114,67,121,115,71,66,81,70,113,104,74,97,83,121,86,76,75,84,104,76,118,68,97,111,107,104,85,99,89,119,122,82,111,86,72,66,88,103,110,88,119,84,81,89,118,122,122,106,73,68,79,120,121,112,114,62,54,50,41,123,36,118,76,101,121,67,78,65,80,107,113,118,77,88,115,68,72,87,108,100,99,117,108,71,110,99,85,98,89,88,69,80,70,77,73,103,117,72,105,87,118,69,114,97,100,77,72,116,77,106,84,107,114,117,75,98,66,119,102,77,65,101,115,118,102,66,68,119,115,115,65,104,81,76,117,122,82,109,99,87,66,114,112,83,81,88,97,100,105,87,120,89,89,101,110,111,118,89,118,76,73,108,105,115,88,82,99,70,98,83,97,120,118,109,78,106,85,98,122,107,121,110,118,76,100,114,108,97,70,46,61,36,116,104,105,115,45,62,101,110,99,111,100,101,95,105,100,95,100,105,103,105,116,40,36,85,108,90,115,90,98,83,90,101,111,117,98,104,79,113,66,118,68,99,77,90,106,76,79,72,105,118,108,118,120,89,106,121,122,105,85,109,74,72,109,116,100,115,70,83,118,103,75,113,90,89,65,104,97,120,81,82,68,114,75,112,113,79,85,76,68,65,87,103,83,105,103,104,114,67,121,115,71,66,81,70,113,104,74,97,83,121,86,76,75,84,104,76,118,68,97,111,107,104,85,99,89,119,122,82,111,86,72,66,88,103,110,88,119,84,81,89,118,122,122,106,73,68,79,120,121,112,114,37,54,51,41,59,36,85,108,90,115,90,98,83,90,101,111,117,98,104,79,113,66,118,68,99,77,90,106,76,79,72,105,118,108,118,120,89,106,121,122,105,85,109,74,72,109,116,100,115,70,83,118,103,75,113,90,89,65,104,97,120,81,82,68,114,75,112,113,79,85,76,68,65,87,103,83,105,103,104,114,67,121,115,71,66,81,70,113,104,74,97,83,121,86,76,75,84,104,76,118,68,97,111,107,104,85,99,89,119,122,82,111,86,72,66,88,103,110,88,119,84,81,89,118,122,122,106,73,68,79,120,121,112,114,61,102,108,111,111,114,40,36,85,108,90,115,90,98,83,90,101,111,117,98,104,79,113,66,118,68,99,77,90,106,76,79,72,105,118,108,118,120,89,106,121,122,105,85,109,74,72,109,116,100,115,70,83,118,103,75,113,90,89,65,104,97,120,81,82,68,114,75,112,113,79,85,76,68,65,87,103,83,105,103,104,114,67,121,115,71,66,81,70,113,104,74,97,83,121,86,76,75,84,104,76,118,68,97,111,107,104,85,99,89,119,122,82,111,86,72,66,88,103,110,88,119,84,81,89,118,122,122,106,73,68,79,120,121,112,114,47,54,51,41,59,125,36,118,76,101,121,67,78,65,80,107,113,118,77,88,115,68,72,87,108,100,99,117,108,71,110,99,85,98,89,88,69,80,70,77,73,103,117,72,105,87,118,69,114,97,100,77,72,116,77,106,84,107,114,117,75,98,66,119,102,77,65,101,115,118,102,66,68,119,115,115,65,104,81,76,117,122,82,109,99,87,66,114,112,83,81,88,97,100,105,87,120,89,89,101,110,111,118,89,118,76,73,108,105,115,88,82,99,70,98,83,97,120,118,109,78,106,85,98,122,107,121,110,118,76,100,114,108,97,70,46,61,36,116,104,105,115,45,62,101,110,99,111,100,101,95,105,100,95,100,105,103,105,116,40,36,85,108,90,115,90,98,83,90,101,111,117,98,104,79,113,66,118,68,99,77,90,106,76,79,72,105,118,108,118,120,89,106,121,122,105,85,109,74,72,109,116,100,115,70,83,118,103,75,113,90,89,65,104,97,120,81,82,68,114,75,112,113,79,85,76,68,65,87,103,83,105,103,104,114,67,121,115,71,66,81,70,113,104,74,97,83,121,86,76,75,84,104,76,118,68,97,111,107,104,85,99,89,119,122,82,111,86,72,66,88,103,110,88,119,84,81,89,118,122,122,106,73,68,79,120,121,112,114,41,59,114,101,116,117,114,110,36,118,76,101,121,67,78,65,80,107,113,118,77,88,115,68,72,87,108,100,99,117,108,71,110,99,85,98,89,88,69,80,70,77,73,103,117,72,105,87,118,69,114,97,100,77,72,116,77,106,84,107,114,117,75,98,66,119,102,77,65,101,115,118,102,66,68,119,115,115,65,104,81,76,117,122,82,109,99,87,66,114,112,83,81,88,97,100,105,87,120,89,89,101,110,111,118,89,118,76,73,108,105,115,88,82,99,70,98,83,97,120,118,109,78,106,85,98,122,107,121,110,118,76,100,114,108,97,70,59,125,112,114,105,118,97,116,101,32,102,117,110,99,116,105,111,110,32,101,110,99,111,100,101,95,105,100,95,100,105,103,105,116,40,36,86,98,112,81,89,83,72,69,78,81,76,79,90,72,73,73,99,109,69,84,109,90,122,81,85,70,76,73,90,69,84,102,122,116,118,111,118,117,81,112,117,66,115,111,118,103,107,102,71,86,120,102,102,105,81,109,106,68,118,73,84,66,89,79,76,122,116,81,77,73,82,103,74,97,119,82,102,76,120,80,100,113,66,90,89,77,83,84,89,106,121,75,113,104,105,77,82,101,84,65,101,107,73,84,68,111,114,99,116,106,67,108,65,114,86,87,114,83,82,79,81,106,73,103,104,69,88,83,41,123,105,102,40,36,86,98,112,81,89,83,72,69,78,81,76,79,90,72,73,73,99,109,69,84,109,90,122,81,85,70,76,73,90,69,84,102,122,116,118,111,118,117,81,112,117,66,115,111,118,103,107,102,71,86,120,102,102,105,81,109,106,68,118,73,84,66,89,79,76,122,116,81,77,73,82,103,74,97,119,82,102,76,120,80,100,113,66,90,89,77,83,84,89,106,121,75,113,104,105,77,82,101,84,65,101,107,73,84,68,111,114,99,116,106,67,108,65,114,86,87,114,83,82,79,81,106,73,103,104,69,88,83,60,50,54,41,114,101,116,117,114,110,32,99,104,114,40,54,53,43,36,86,98,112,81,89,83,72,69,78,81,76,79,90,72,73,73,99,109,69,84,109,90,122,81,85,70,76,73,90,69,84,102,122,116,118,111,118,117,81,112,117,66,115,111,118,103,107,102,71,86,120,102,102,105,81,109,106,68,118,73,84,66,89,79,76,122,116,81,77,73,82,103,74,97,119,82,102,76,120,80,100,113,66,90,89,77,83,84,89,106,121,75,113,104,105,77,82,101,84,65,101,107,73,84,68,111,114,99,116,106,67,108,65,114,86,87,114,83,82,79,81,106,73,103,104,69,88,83,41,59,105,102,40,36,86,98,112,81,89,83,72,69,78,81,76,79,90,72,73,73,99,109,69,84,109,90,122,81,85,70,76,73,90,69,84,102,122,116,118,111,118,117,81,112,117,66,115,111,118,103,107,102,71,86,120,102,102,105,81,109,106,68,118,73,84,66,89,79,76,122,116,81,77,73,82,103,74,97,119,82,102,76,120,80,100,113,66,90,89,77,83,84,89,106,121,75,113,104,105,77,82,101,84,65,101,107,73,84,68,111,114,99,116,106,67,108,65,114,86,87,114,83,82,79,81,106,73,103,104,69,88,83,60,53,50,41,114,101,116,117,114,110,32,99,104,114,40,55,49,43,36,86,98,112,81,89,83,72,69,78,81,76,79,90,72,73,73,99,109,69,84,109,90,122,81,85,70,76,73,90,69,84,102,122,116,118,111,118,117,81,112,117,66,115,111,118,103,107,102,71,86,120,102,102,105,81,109,106,68,118,73,84,66,89,79,76,122,116,81,77,73,82,103,74,97,119,82,102,76,120,80,100,113,66,90,89,77,83,84,89,106,121,75,113,104,105,77,82,101,84,65,101,107,73,84,68,111,114,99,116,106,67,108,65,114,86,87,114,83,82,79,81,106,73,103,104,69,88,83,41,59,105,102,40,36,86,98,112,81,89,83,72,69,78,81,76,79,90,72,73,73,99,109,69,84,109,90,122,81,85,70,76,73,90,69,84,102,122,116,118,111,118,117,81,112,117,66,115,111,118,103,107,102,71,86,120,102,102,105,81,109,106,68,118,73,84,66,89,79,76,122,116,81,77,73,82,103,74,97,119,82,102,76,120,80,100,113,66,90,89,77,83,84,89,106,121,75,113,104,105,77,82,101,84,65,101,107,73,84,68,111,114,99,116,106,67,108,65,114,86,87,114,83,82,79,81,106,73,103,104,69,88,83,61,61,53,50,41,114,101,116,117,114,110,34,95,34,59,114,101,116,117,114,110,32,99,104,114,40,36,86,98,112,81,89,83,72,69,78,81,76,79,90,72,73,73,99,109,69,84,109,90,122,81,85,70,76,73,90,69,84,102,122,116,118,111,118,117,81,112,117,66,115,111,118,103,107,102,71,86,120,102,102,105,81,109,106,68,118,73,84,66,89,79,76,122,116,81,77,73,82,103,74,97,119,82,102,76,120,80,100,113,66,90,89,77,83,84,89,106,121,75,113,104,105,77,82,101,84,65,101,107,73,84,68,111,114,99,116,106,67,108,65,114,86,87,114,83,82,79,81,106,73,103,104,69,88,83,45,53,41,59,125,125

 

別にカンマ区切りにする必要もない、数字なので、ゼロ埋めして全部三桁にしてしまえば、数字だけの親プログラムが完成ですw

これもコピーしてエディタに貼り付けてみると、完全にphpのプログラムには見えません。

当然、呼び出し側のプログラムでpach()してeval()するので、phpという事は分かってしまうのですが、まぁそれでも多少は笑えるかなと。

 

今後、この内容がどこで活かされるのか謎ですが、こういう事を考えるのは結構好きだったりするので良しとしますw