2009年12月27日

単一方向リストと双方向リスト(singly linked list and doubly linked list)

Filed under: JavaScript,アルゴリズム — admin @ 5:16 PM

JavaScriptを使って連結リスト(単一方向リストと双方向リスト)を考える。

■一般的なリスト

以下の例を考える。

function Person(name){
    this.name = name;
}
function List(){
    this._ary = new Array();
}
List.prototype = {
    "push" : function(name){
        var person = new Person(name);
        this._ary.push(person);
        return person;
    },
    "insertAfter" : function(personRef, name){
        var person = new Person(name);
        var counter = this._ary.length;
        while(counter > 0 && this._ary[counter] != personRef){
            this._ary[counter] = this._ary[counter - 1];
            counter--;
        }
        this._ary[counter + 1] = person;
        return person;
    },
    "toString" : function(){
        var str = '';
        for(var i = 0; i < this._ary.length; i++){
            str += this._ary[i].name + ', ';
        }
        str = '[' + str + ']';
        str = str.replace(/,\s\]/i, ']');
        return str;
    }
}

ここに新しいPersonインスタンスを配列の特定の位置に挿入する。

var list = new List();
var john = list.push('John');
var mike = list.push('Mike');
alert(list.toString());//[John, Mike]
var nick = list.insertAfter(john, 'Nick');
alert(list.toString());//[John, Nick, Mike]

■単一方向リスト

配列で特定の位置pに挿入した場合、p以降の要素を全て+1側にコピーする必要がある。これは配列が大きくなったとき、コピーのコストも比例して大きくなる事を意味する。そこで以下の単一方向リストを考える。

function Person(name, personRef){
    this.name = name;
    this.next = personRef;
}
function List(){
    this._size = 0;
    this._first = null;
    this._last  = null;
}
List.prototype = {
    "push" : function(name){
        var person;
        if(this._size === 0){
            person = new Person(name, null);
            this._first = person;
            this._last  = person;
            this._size++;
            return person;
        }
        else{
            person = new Person(name, null);
            this._last.next = person;
            this._last = person;
            this._size++;
            return person;
        }
    },
    "insertAfter" : function(personRef, name){
        if(personRef === this._last){
            personRef.next = new Person(name, null);
            this._last = personRef.next;
            this._size++;
            return personRef.next;
        }
        else{
            personRef.next = new Person(name, personRef.next);
            this._size++;
            return personRef.next;
        }
    },
    "toString" : function(){
        var r1 = '';
        var str = '';
        r1 = this._first;
        while(r1 != null && r1 != r){
            str += r1.name + ', ';
            r1 = r1.next;
        }
        str = '[' + str + ']';
        str = str.replace(/,\s\]/i, ']');
        return str;
    }
}

Personクラス(のインスタンス)に次の順序のPerson(クラスのインスタンスのリファレンス)を保持している事で結果的にリストが完成するというものである。

var list = new List();
var john = list.push('John');
var mike = list.push('Mike');
alert(list.toString());//[John, Mike]
var nick = list.insertAfter(john, 'Nick');
alert(list.toString());//[John, Nick, Mike]

挿入部分だけ操作すれば良いので計算コストが下がる。重要なポイントは以下の2点だ。

任意のPersonインスタンスの後に挿入する場合で、それがリストの最後だった場合

Personインスタンス(A)のプロパティnextに新しいPersonオブジェクト(B)を挿入する。その時、Personオブジェクト(B)のプロパティnextは何もないのでnullとなる。listの最後の要素を表す_lastを書き換えるのを忘れないように。

personRef.next = new Person(name, null);
this._last = personRef.next;

任意のPersonインスタンスの後に挿入する場合で、それがリストの最後ではない場合

最後ではない任意のPersonインスタンス(A)のプロパティnextに新しいPersonオブジェクト(B)を挿入する。その時、現在の(A)のプロパティnextをPersonオブジェクト(B)のプロパティnextに保持する。結果的にリストに挿入した事になる。

personRef.next = new Person(name, personRef.next);

参考

連結リスト

コンピュータプログラミングと設計におけるほとんどの選択と同様、あらゆる状況に適した方法は存在しない。連結リストというデータ構造も状況によってはうまく機能するが、別の状況には適さない。以下では、連結リスト構造に関するトレードオフについて説明する。一般に動的に変化するデータの集まりがあって、要素の追加・削除が頻繁に行われ、新たな要素を追加する位置が重要となる場合、連結リストが適しているといえる。

ふむふむ

配列はランダムアクセス性に優れており、連結リストがシーケンシャルアクセスを得意とするのと対照的である。片方向リストは一方向にしか辿れない。従って、ヒープソートのようにインデックスによって高速に要素を参照する必要がある場合、連結リストは不向きである。シーケンシャルアクセスも多くのマシン上では、連結リストよりも配列の方が高速である。これは、キャッシュメモリの効果と参照の局所性によるものである。連結リストはキャッシュメモリからはほとんど何も恩恵を受けない。

ふぇー

ここで一つ前の要素を得るメソッドgetPrevを考える。

■通常のリスト

function Person(name){
    this.name = name;
}
function List(){
    this._ary = new Array();
}
List.prototype = {
    "push" : function(name){
        var person = new Person(name);
        this._ary.push(person);
        return person;
    },
    "insertAfter" : function(position, name){
        var person = new Person(name);
        for(var i = this._ary.length; i >position + 1; i--){
            this._ary[i] = this._ary[i - 1];
        }
        this._ary[position + 1] = person;
        return person;
    },
    "getPrev" : function(position){
        return this._ary[position -1];
    },
    "toString" : function(){
        var str = '';
        for(var i = 0; i < this._ary.length; i++){
            str += this._ary[i].name + ', ';
        }
        str = '[' + str + ']';
        str = str.replace(/,\s\]/i, ']');
        return str;
    }
}

■単一方向リスト

function Person(name, personRef){
    this.name = name;
    this.next = personRef;
}
function List(){
    this._size = 0;
    this._first = null;
    this._last  = null;
}
List.prototype = {
    "push" : function(name){
        var person;
        if(this._size === 0){
            person = new Person(name, null);
            this._first = person;
            this._last  = person;
            this._size++;
            return person;
        }
        else{
            person = new Person(name, null);
            this._last.next = person;
            this._last = person;
            this._size++;
            return person;
        }
    },
    "insertAfter" : function(personRef, name){
        if(personRef === this._last){
            personRef.next = new Person(name, null);
            this._last = personRef.next;
            this._size++;
            return personRef.next;
        }
        else{
            personRef.next = new Person(name, personRef.next);
            this._size++;
            return personRef.next;
        }
    },
    "getPrev" : function(personRef){
        var r0 = null;
        var r1 = this._first;
        while(r1 != null){
            if(r1 == personRef){
                return r0;
            }
            r0 = r1;
            r1 = r1.next;
        }
        return null;
    },
    "toString" : function(){
        var r1 = '';
        var str = '';
        r1 = this._first;
        while(r1 != null && r1 != r){
            str += r1.name + ', ';
            r1 = r1.next;
        }
        str = '[' + str + ']';
        str = str.replace(/,\s\]/i, ']');
        return str;
    }
}
var list = new List();

getPrevの計算コストがO(n)に増えてしまった。これは単一方向リストが要素の前への参照を持たないためである。

■双方向リスト

前後の参照を保持することによりgetPrevの計算コストがO(1)に下がる。

function Person(name, personRefPrev, personRefNext){
    this.name = name;
    this.prev = personRefPrev;
    this.next = personRefNext;
}
function List(){
    this._size = 0;
    this._first = null;
    this._last  = null;
}
List.prototype = {
    "push" : function(name){
        var person;
        if(this._size === 0){
            person = new Person(name, null, null);
            this._first = person;
            this._last  = person;
            this._size++;
            return person;
        }
        else{
            person = new Person(name, this._last, null);
            this._last.next = person;
            this._last = person;
            this._size++;
            return person;
        }
    },
    "insertAfter" : function(personRef, name){
        var person;
        if(personRef === this._last){
            person = new Person(name, this._last, null);
            personRef.next = person;
            this._last = person;
            this._size++;
            return personRef.next;
        }
        else{
            person = new Person(name, personRef, personRef.next);
            personRef.next.prev = person;
            personRef.next = person;
            this._size++;
            return person;
        }
    },
    "insertBefore" : function(personRef, name){
        var person;
        if(personRef === this._first){
            person = new Person(name, null, this._first)
            personRef.prev = person;
            this._first = person;
            this._size++;
            return person;
        }
        else{
            person = new Person(name, personRef.prev, personRef);
            personRef.prev.next = person;
            personRef.prev = person;
            this._size++;
            return person;
        }
    },
    "getPrev" : function(personRef){
        return personRef.prev;
    },
    "getNext" : function(personRef){
        return personRef.next;
    },
    "toString" : function(){
        var r1 = '';
        var str = '';
        r1 = this._first;
        while(r1 != null && r1 != r){
            str += r1.name + ', ';
            r1 = r1.next;
        }
        str = '[' + str + ']';
        str = str.replace(/,\s\]/i, ']');
        return str;
    }
}
var list = new List();
var john = list.push('John');
var mike = list.push('Mike');
alert(list.toString());//[John, Mike]
var nick = list.insertAfter(john, 'Nick');
var jack = list.insertBefore(nick, 'Jack');
alert(list.toString());//[John, Jack, Nick, Mike]

2009年12月27日

microformat

Filed under: HTML(XHTML) — admin @ 6:51 AM

検索のリッチ化が進む中、GoogleはRDFaとmicroformatに対応した。RDFaやmicroformatが埋め込まれたサイトでは検索結果が以下のように表示される。

リッチスニペット

■hCard(vCard)

人物に関する情報を記述する。

<div class="vcard">
<img class="photo" src="/wp-content/uploads/2009/12/1261861644_user_48.png" />
<p><strong class="fn">Mitsuaki Sample</strong></p>
<p><span class="org">Nutex Inc.</span>:<span class="title">Engineer</span></p>
<p><span class="adr">
<span class="postcode">141-0022</span><br />
<span class="region">東京都</span><span class="locality">品川区</span>
<span class="street-address">東五反田2-8-8</span><br />
</span></p>
</div>
name(fn) 名前
photo 写真
url URL
org 組織
title 役職
role 役割
adr 住所
>postcode 郵便番号
>region 都道府県
>locality 市町村
>street-address 番地

サンプル

Mitsuaki Sample

Nutex Inc.:Programmer

1410022
東京都品川区東五反田2-8-8

会社(組織情報)だと以下のようになる。

<div class="vcard">
<dt><span class="fn org">株式会社Nutex</span></dt>
<dd><span class="url">http://nutex.jp</span></dd>
<dd><span class="tel">03-5422-8684</span></dd>
<dd class="adr"><span class="postal-code">141-0022</span><br />
<span class="region">東京都</span><span class="locality">品川区</span><span class="street-address">東五反田2-8-8</span></dd>
</div>

サンプル

株式会社Nutex
http://nutex.jp
03-5422-8684
141-0022
東京都品川区東五反田2-8-8

■hReview

レビュー情報を記述する。

<div class="hreview">
<p><span class="item"><strong><span class="fn">NutexのCMS</span></strong></span> - Score:<strong><span class="rating">4.0</span></strong></p>
<p><span class="summary">凄く使いやすい。</span></p>
<p>written by <span class="reviewer">Mitsuaki Sample</span>(<span class="dtreviewed">2009-12-20</span>)</p>
</div>
item 対象アイテム
>name(fn) 名前
rating 評価点
reviewer 評価した人
dtreviewed 評価した日時
summary レビュー概要
description レビュー本文

サンプル

NutexのCMS – Score:4.0

凄く使いやすい。

written by Mitsuaki Sample(2009-12-20)

■hProduct

製品情報を記述する。

<div class="hproduct">
<h5><span class="fn">Rabit</span>(<span class="url">http://nutex.jp</span>)</h5>
<p><span class="price">\100</span></p>
<p class="ta-center"><span class="photo"><img src="http://blog.justoneplanet.info/wp-content/uploads/2009/12/1261863826_computer.png" alt="cms" width="128" height="128" /></span></p>
<p><span class="description">簡単CMS。</span></p>
<p>Brand: <span class="brand">Nutex</span> - Category: <span class="category">CMS</span></p>
</div>
name(fn) 製品名
price 値段
photo 製品写真
url 製品ページ
description 製品説明
brand ブランド
category カテゴリ

サンプル

Rabit(http://nutex.jp)

\100

cms

簡単CMS。

Brand: Nutex – Category: CMS

■応用

レビュー情報と製品情報を組み合わせる。

<div class="hreview">
<div class="item hproduct">
<h5><span class="fn">Rabit</span>(<span class="url">http://nutex.jp</span>)</h5>
<p><span class="price">\100</span></p>
<p class="ta-center"><span class="photo"><img src="http://blog.justoneplanet.info/wp-content/uploads/2009/12/1261863826_computer.png" alt="cms" width="128" height="128" /></span></p>
<p><span class="description">簡単CMS。</span></p>
<p>Brand: <span class="brand">Nutex</span> - Category: <span class="category">CMS</span></p>
</div>
<p><span class="summary">凄く使いやすい。</span> - Score:<strong><span class="rating">4.0</span></strong></p>
<p>written by <span class="reviewer">Mitsuaki Sample</span>(<span class="dtreviewed">2009-12-20</span>)</p>
</div>

サンプル

Rabit(http://nutex.jp)

\100

cms

簡単CMS。

Brand: Nutex – Category: CMS

凄く使いやすい。 – Score:4.0

written by Mitsuaki Sample(2009-12-20)

参考

2009年12月25日

チェックボックスの使い方

Filed under: HTML(XHTML),PHP — admin @ 2:31 AM

以下のコードよりも

<ul>
<li><input type="checkbox" name="check[]" value="1" />1</li>
<li><input type="checkbox" name="check[]" value="2" />2</li>
<li><input type="checkbox" name="check[]" value="3" />3</li>
<li><input type="checkbox" name="check[]" value="4" />4</li>
<li><input type="checkbox" name="check[]" value="5" />5</li>
</ul>
array(1) {
  ["check"]=>
  array(2) {
    [0]=>
    string(1) "2"
    [1]=>
    string(1) "4"
  }
}

以下のコードの方が

<ul>
<li><input type="checkbox" name="check[1]" value="1" />1</li>
<li><input type="checkbox" name="check[2]" value="1" />2</li>
<li><input type="checkbox" name="check[3]" value="1" />3</li>
<li><input type="checkbox" name="check[4]" value="1" />4</li>
<li><input type="checkbox" name="check[5]" value="1" />5</li>
</ul>
array(1) {
  ["check"]=>
  array(2) {
    [2]=>
    string(1) "1"
    [4]=>
    string(1) "1"
  }
}

なんか好きだ。

ちなみにvalue属性が無かったときは

<ul>
<li><input type="checkbox" name="check[1]" />1</li>
<li><input type="checkbox" name="check[2]" />2</li>
<li><input type="checkbox" name="check[3]" />3</li>
<li><input type="checkbox" name="check[4]" />4</li>
<li><input type="checkbox" name="check[5]" />5</li>
</ul>
array(1) {
  ["check"]=>
  array(2) {
    [2]=>
    string(2) "on"
    [4]=>
    string(2) "on"
  }
}

『on』という文字列が入る。(IE6~8,FF)

■参考

17.2 Controls

2009年12月22日

DBにバイナリで保存したjpegをファイルとして書き出すスクリプト

Filed under: PHP — admin @ 3:46 PM

勿体ないので掲載。

$id = (int) $_GET['id'];
define('DB_HOST', 'localhost');
define('DB_USER', 'username');
define('DB_PASS', 'password');
define('DB_NAME', 'dbname');

$column = 'data';
$table = 'table';

$dbh = mysql_connect(DB_HOST, DB_USER, DB_PASS);
mysql_select_db(DB_NAME, $dbh);
$result = mysql_query("SELECT `{$column}` FROM `{$table}` WHERE `id` = '{$id}'", $dbh);
$row = mysql_fetch_array($result);

header("Content-type: image/jpeg");
print($row[0]);

以上。

2009年12月20日

一定時間で更新されるコマンドを終了させる

Filed under: Linux — admin @ 5:46 AM

Ctrl+c

topコマンドとか

2009年12月19日

PHPとGDで画像を指定サイズに丸める

Filed under: PHP — admin @ 12:26 AM

イメージの縦横の長い方を指定のサイズにし、はみ出した部分はサンプリングしない感じだ。また、容量に制限を設け10KB以内になるように処理した。

$width         = 240;
$height        = 320;
$filename      = '0008.jpg';
$max_file_size = 10 * 1024;
$bg_quality    = 90;
$size       = getimagesize($filename);
$img        = imagecreatefromjpeg($filename);
$resizedImg = imagecreatetruecolor($width, $height);
if($size[1] < $size[0] * ($height / $width)){//horizontal
    $imageWidth = (int) (($height / $size[1]) * $size[0]);
    imagecopyresampled(
        $resizedImg,
        $img,
        0, 0,
        ($size[0] - ($width / $height * $size[1])) / 2, 0,
        $imageWidth, $height,
        $size[0], $size[1]
    );
}
else{//vertical
    $imageHeight = (int) (($width / $size[0]) * $size[1]);
    imagecopyresampled(
        $resizedImg,
        $img,
        0, 0,
        0, ($size[1] - ($height / $width * $size[0])) / 2,
        $width, $imageHeight,
        $size[0],
        $size[1]
    );
}
$counter = 0;
while(true){
    imagejpeg($resizedImg, $filename, $bg_quality - (10 * $counter));
    clearstatcache();
    $counter++;
    if(filesize($filename) < $max_file_size || $counter > 9){
        break;
    }
}

2009年12月10日

swfmillのインストール

Filed under: Linux — admin @ 1:20 AM

■g++

yum install gcc-c++

■patch

patchコマンドが使えなかった。

yum install patch
wget http://swfmill.org/releases/swfmill-0.3.0.tar.gz
tar xzf swfmill-0.3.0.tar.gz
cd swfmill-0.3.0

FlashLite1.1に対応するためのパッチをあてる。

wget http://lab.klab.org/files/flash/encoding.patch
patch -p1 < encoding.patch

このバージョンに対するパッチではないようだ。エラーが出る。

wget http://swfmill.org/releases/swfmill-0.2.12.tar.gz
tar xzf swfmill-0.2.12.tar.gz
cd swfmill-0.2.12
wget http://lab.klab.org/files/flash/encoding.patch
patch -p1 < encoding.patch
./configure
make
make install

試してみる。

wget http://ai.yimg.jp/bdv/43559/820056/20091207/odbpq8l0gqpysnz_3t2o-b.swf
swfmill swf2xml odbpq8l0gqpysnz_3t2o-b.swf banner.xml
vi banner.xml

以下のように表示される。(画像などを読み込んだ)バイナリ部分はBase64でエンコードされている。

<?xml version="1.0" encoding="UTF-8"?>
<swf version="6" compressed="0">
  <Header framerate="24" frames="215">
    <size>
      <Rectangle left="0" right="7000" top="0" bottom="3200"/>
    </size>
    <tags>
      <SetBackgroundColor>
        <color>
          <Color red="255" green="255" blue="255"/>
        </color>
      </SetBackgroundColor>
      <DefineBitsJPEG2 objectID="1">
        <data>
          <data>/9n/2P/Y/+AAEEpGSUYAAQIAAGQAZAAA   [省略]   JREoiURKIlESiJREoiURKIlESiJREoiURKIlESiJREoiURKIlESiJREoi//9k=</data>
        </data>
      </DefineBitsJPEG2>
      <DefineShape objectID="2">
        <bounds>
          <Rectangle left="-3500" right="3500" top="-1600" bottom="1600"/>
        </bounds>
        <styles>
          <StyleList>
            <fillStyles>
              <ClippedBitmap objectID="65535">
                <matrix>
                  <Transform scaleX="20.00000000000000" scaleY="20.00000000000000" transX="0" transY="0"/>
                </matrix>
              </ClippedBitmap>
              <ClippedBitmap objectID="1">
                <matrix>
                  <Transform scaleX="20.00000000000000" scaleY="20.00000000000000" transX="-3500" transY="-1600"/>
                </matrix>
              </ClippedBitmap>
            </fillStyles>
            <lineStyles/>
          </StyleList>
        </styles>
        <shapes>
          <Shape>
            <edges>
              <ShapeSetup x="3500" y="1600" fillStyle1="2"/>
              <LineTo x="-7000" y="0"/>
              <LineTo x="0" y="-3200"/>
              <LineTo x="7000" y="0"/>
              <LineTo x="0" y="3200"/>
              <ShapeSetup/>
            </edges>
          </Shape>
        </shapes>
      </DefineShape>
      <PlaceObject2 replace="0" depth="1" objectID="2">
        <transform>
          <Transform transX="3500" transY="1600"/>
        </transform>
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="0"/>
        </colorTransform>
      </PlaceObject2>
      <DefineShape objectID="3">
        <bounds>
          <Rectangle left="-10" right="7010" top="-10" bottom="3210"/>
        </bounds>
        <styles>
          <StyleList>
            <fillStyles>
              <Solid>
                <color>
                  <Color red="129" green="216" blue="208"/>
                </color>
              </Solid>
            </fillStyles>
            <lineStyles>
              <LineStyle width="20">
                <color>
                  <Color red="153" green="153" blue="153"/>
                </color>
              </LineStyle>
            </lineStyles>
          </StyleList>
        </styles>
        <shapes>
          <Shape>
            <edges>
              <ShapeSetup x="7000" y="3200" fillStyle1="1" lineStyle="1"/>
              <LineTo x="-7000" y="0"/>
              <LineTo x="0" y="-3200"/>
              <LineTo x="7000" y="0"/>
              <LineTo x="0" y="3200"/>
              <ShapeSetup/>
            </edges>
          </Shape>
        </shapes>
      </DefineShape>
      <DefineButton2 objectID="4" menu="0" buttonsSize="10">
        <buttons>
          <Button hitTest="1" down="0" over="0" up="0" objectID="3" depth="1">
            <transform>
              <Transform transX="0" transY="0"/>
            </transform>
            <colorTransform>
              <ColorTransform2/>
            </colorTransform>
          </Button>
          <Button hitTest="0" down="0" over="0" up="0"/>
        </buttons>
        <conditions>
          <Condition next="0" menuEnter="0" pointerReleaseOutside="0" pointerDragEnter="0" pointerDragLeave="0" pointerReleaseInside="1" pointerPush="0" pointerLeave="0" pointerEnter="0" key="0" menuLeave="0">
            <actions>
              <Dictionary>
                <strings>
                  <String value="clickTAG"/>
                  <String value="substr"/>
                  <String value="http:"/>
                  <String value="https:"/>
                  <String value="targetTAG"/>
                </strings>
              </Dictionary>
              <PushData>
                <items>
                  <StackInteger value="5"/>
                  <StackDouble value="0.000000000000000"/>
                  <StackInteger value="2"/>
                  <StackDictionaryLookup index="0"/>
                </items>
              </PushData>
              <GetVariable/>
              <PushData>
                <items>
                  <StackDictionaryLookup index="1"/>
                </items>
              </PushData>
              <CallMethod/>
              <PushData>
                <items>
                  <StackDictionaryLookup index="2"/>
                </items>
              </PushData>
              <EqualTyped/>
              <PushData>
                <items>
                  <StackInteger value="6"/>
                  <StackDouble value="0.000000000000000"/>
                  <StackInteger value="2"/>
                  <StackDictionaryLookup index="0"/>
                </items>
              </PushData>
              <GetVariable/>
              <PushData>
                <items>
                  <StackDictionaryLookup index="1"/>
                </items>
              </PushData>
              <CallMethod/>
              <PushData>
                <items>
                  <StackDictionaryLookup index="3"/>
                </items>
              </PushData>
              <EqualTyped/>
              <LogicalOR/>
              <LogicalNOT/>
              <BranchIfTrue byteOffset="16"/>
              <PushData>
                <items>
                  <StackDictionaryLookup index="0"/>
                </items>
              </PushData>
              <GetVariable/>
              <PushData>
                <items>
                  <StackDictionaryLookup index="4"/>
                </items>
              </PushData>
              <GetVariable/>
              <GetURL2 method="0"/>
              <EndAction/>
            </actions>
          </Condition>
        </conditions>
      </DefineButton2>
      <PlaceObject2 replace="0" depth="2" objectID="4">
        <transform>
          <Transform transX="0" transY="0"/>
        </transform>
      </PlaceObject2>
      <ShowFrame/>
      <DoAction>
        <actions>
          <Dictionary>
            <strings>
              <String value="Stage"/>
              <String value="showMenu"/>
              <String value="l"/>
              <String value=""/>
              <String value="ar"/>
              <String value="Array"/>
              <String value="i"/>
              <String value="length"/>
              <String value="charAt"/>
              <String value="/"/>
              <String value="push"/>
              <String value="str"/>
              <String value="substr"/>
              <String value="yimg.jp"/>
              <String value="indexOf"/>
              <String value="admission.jp"/>
              <String value="snd"/>
              <String value="Sound"/>
              <String value="setVolume"/>
            </strings>
          </Dictionary>
          <PushData>
            <items>
              <StackDictionaryLookup index="0"/>
            </items>
          </PushData>
          <GetVariable/>
          <PushData>
            <items>
              <StackDictionaryLookup index="1"/>
              <StackBoolean value="0"/>
            </items>
          </PushData>
          <SetMember/>
          <PushData>
            <items>
              <StackDictionaryLookup index="2"/>
              <StackDictionaryLookup index="3"/>
              <StackInteger value="15"/>
            </items>
          </PushData>
          <GetProperty/>
          <SetLocalVariable/>
          <PushData>
            <items>
              <StackDictionaryLookup index="4"/>
              <StackDouble value="0.000000000000000"/>
              <StackDictionaryLookup index="5"/>
            </items>
          </PushData>
          <New/>
          <SetLocalVariable/>
          <PushData>
            <items>
              <StackDictionaryLookup index="6"/>
              <StackDouble value="0.000000000000000"/>
            </items>
          </PushData>
          <SetLocalVariable/>
          <PushData>
            <items>
              <StackDictionaryLookup index="6"/>
            </items>
          </PushData>
          <GetVariable/>
          <PushData>
            <items>
              <StackDictionaryLookup index="2"/>
            </items>
          </PushData>
          <GetVariable/>
          <PushData>
            <items>
              <StackDictionaryLookup index="7"/>
            </items>
          </PushData>
          <GetMember/>
          <LessThanTyped/>
          <LogicalNOT/>
          <BranchIfTrue byteOffset="74"/>
          <PushData>
            <items>
              <StackDictionaryLookup index="6"/>
            </items>
          </PushData>
          <GetVariable/>
          <PushData>
            <items>
              <StackInteger value="1"/>
              <StackDictionaryLookup index="2"/>
            </items>
          </PushData>
          <GetVariable/>
          <PushData>
            <items>
              <StackDictionaryLookup index="8"/>
            </items>
          </PushData>
          <CallMethod/>
          <PushData>
            <items>
              <StackDictionaryLookup index="9"/>
            </items>
          </PushData>
          <EqualTyped/>
          <LogicalNOT/>
          <BranchIfTrue byteOffset="24"/>
          <PushData>
            <items>
              <StackDictionaryLookup index="6"/>
            </items>
          </PushData>
          <GetVariable/>
          <PushData>
            <items>
              <StackInteger value="1"/>
              <StackDictionaryLookup index="4"/>
            </items>
          </PushData>
          <GetVariable/>
          <PushData>
            <items>
              <StackDictionaryLookup index="10"/>
            </items>
          </PushData>
          <CallMethod/>
          <Pop/>
          <PushData>
            <items>
              <StackDictionaryLookup index="6"/>
              <StackDictionaryLookup index="6"/>
            </items>
          </PushData>
          <GetVariable/>
          <Increment/>
          <SetVariable/>
          <BranchAlways byteOffset="65437"/>
          <PushData>
            <items>
              <StackDictionaryLookup index="11"/>
              <StackDictionaryLookup index="4"/>
            </items>
          </PushData>
          <GetVariable/>
          <PushData>
            <items>
              <StackInteger value="2"/>
            </items>
          </PushData>
          <GetMember/>
          <PushData>
            <items>
              <StackDictionaryLookup index="4"/>
            </items>
          </PushData>
          <GetVariable/>
          <PushData>
            <items>
              <StackInteger value="1"/>
            </items>
          </PushData>
          <GetMember/>
          <Substract/>
          <PushData>
            <items>
              <StackInteger value="1"/>
            </items>
          </PushData>
          <Substract/>
          <PushData>
            <items>
              <StackDictionaryLookup index="4"/>
            </items>
          </PushData>
          <GetVariable/>
          <PushData>
            <items>
              <StackInteger value="1"/>
            </items>
          </PushData>
          <GetMember/>
          <PushData>
            <items>
              <StackInteger value="1"/>
            </items>
          </PushData>
          <AddTyped/>
          <PushData>
            <items>
              <StackInteger value="2"/>
              <StackDictionaryLookup index="2"/>
            </items>
          </PushData>
          <GetVariable/>
          <PushData>
            <items>
              <StackDictionaryLookup index="12"/>
            </items>
          </PushData>
          <CallMethod/>
          <SetVariable/>
          <PushData>
            <items>
              <StackDictionaryLookup index="13"/>
              <StackInteger value="1"/>
              <StackDictionaryLookup index="11"/>
            </items>
          </PushData>
          <GetVariable/>
          <PushData>
            <items>
              <StackDictionaryLookup index="14"/>
            </items>
          </PushData>
          <CallMethod/>
          <PushData>
            <items>
              <StackInteger value="-1"/>
            </items>
          </PushData>
          <EqualTyped/>
          <LogicalNOT/>
          <Duplicate/>
          <BranchIfTrue byteOffset="30"/>
          <Pop/>
          <PushData>
            <items>
              <StackDictionaryLookup index="15"/>
              <StackInteger value="1"/>
              <StackDictionaryLookup index="11"/>
            </items>
          </PushData>
          <GetVariable/>
          <PushData>
            <items>
              <StackDictionaryLookup index="14"/>
            </items>
          </PushData>
          <CallMethod/>
          <PushData>
            <items>
              <StackInteger value="-1"/>
            </items>
          </PushData>
          <EqualTyped/>
          <LogicalNOT/>
          <LogicalNOT/>
          <BranchIfTrue byteOffset="6"/>
          <Play/>
          <BranchAlways byteOffset="46"/>
          <PushData>
            <items>
              <StackDictionaryLookup index="16"/>
              <StackDouble value="0.000000000000000"/>
              <StackDictionaryLookup index="17"/>
            </items>
          </PushData>
          <New/>
          <SetLocalVariable/>
          <PushData>
            <items>
              <StackDouble value="0.000000000000000"/>
              <StackInteger value="1"/>
              <StackDictionaryLookup index="16"/>
            </items>
          </PushData>
          <GetVariable/>
          <PushData>
            <items>
              <StackDictionaryLookup index="18"/>
            </items>
          </PushData>
          <CallMethod/>
          <Pop/>
          <Stop/>
          <EndAction/>
        </actions>
      </DoAction>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="5"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="11"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="16"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="22"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="27"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="33"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="38"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="44"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="49"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="54"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="60"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="65"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="71"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="76"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="82"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="87"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="93"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="98"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="103"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="109"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="114"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="120"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="125"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="131"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="136"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="142"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="147"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="153"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="158"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="163"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="169"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="174"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="180"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="185"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="191"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="196"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="202"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="207"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="212"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="218"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="223"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="229"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="234"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="240"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="245"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="251"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="251"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="245"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="240"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="234"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="229"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="223"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="218"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="212"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="207"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="202"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="196"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="191"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="185"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="180"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="174"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="169"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="163"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="158"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="153"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="147"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="142"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="136"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="131"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="125"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="120"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="114"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="109"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="103"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="98"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="93"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="87"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="82"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="76"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="71"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="65"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="60"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="54"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="49"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="44"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="38"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="33"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="27"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="22"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="16"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="11"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="5"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="0"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <DefineBitsJPEG2 objectID="5">
        <data>
          <data>/9n/2P/Y/+AAEEpGSUYAAQIAAGQAZAAA/+wAEUR1Y2t5AAEABAAAAGQAAP/   [省略]   /8Av3xpqRoWF4vAQfop4iqPXRPiUkl6/iqyCc7XjTWRMx48cfFhhlgf4Cy020Kf9BbEU401+y9/+P8AnxprG7iDYzBUGnXPqL4UGXEa/wAu/wBe1+ONNYZ/25aV785S/wBwP7gFTJXe1+CVHfLyEvH/AD+eNNf/2Q==</data>
        </data>
      </DefineBitsJPEG2>
      <DefineShape objectID="6">
        <bounds>
          <Rectangle left="-3500" right="3500" top="-1600" bottom="1600"/>
        </bounds>
        <styles>
          <StyleList>
            <fillStyles>
              <ClippedBitmap objectID="65535">
                <matrix>
                  <Transform scaleX="20.00000000000000" scaleY="20.00000000000000" transX="0" transY="0"/>
                </matrix>
              </ClippedBitmap>
              <ClippedBitmap objectID="5">
                <matrix>
                  <Transform scaleX="20.00000000000000" scaleY="20.00000000000000" transX="-3500" transY="-1600"/>
                </matrix>
              </ClippedBitmap>
            </fillStyles>
            <lineStyles/>
          </StyleList>
        </styles>
        <shapes>
          <Shape>
            <edges>
              <ShapeSetup x="3500" y="1600" fillStyle1="2"/>
              <LineTo x="-7000" y="0"/>
              <LineTo x="0" y="-3200"/>
              <LineTo x="7000" y="0"/>
              <LineTo x="0" y="3200"/>
              <ShapeSetup/>
            </edges>
          </Shape>
        </shapes>
      </DefineShape>
      <PlaceObject2 replace="1" depth="1" objectID="6"/>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="5"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="11"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="16"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="22"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="27"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="33"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="38"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="44"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="49"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="54"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="60"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="65"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="71"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="76"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="82"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="87"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="93"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="98"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="103"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="109"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="114"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="120"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="125"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="131"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="136"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="142"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="147"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="153"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="158"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="163"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="169"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="174"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="180"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="185"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="191"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="196"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="202"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="207"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="212"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="218"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="223"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="229"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="234"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="240"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="245"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2 factorRed="256" factorGreen="256" factorBlue="256" factorAlpha="251"/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <DoAction>
        <actions>
          <Stop/>
          <EndAction/>
        </actions>
      </DoAction>
      <PlaceObject2 replace="1" depth="1">
        <colorTransform>
          <ColorTransform2/>
        </colorTransform>
      </PlaceObject2>
      <ShowFrame/>
      <End/>
    </tags>
  </Header>
</swf>

書き換えてswfmill xml2swfで戻せば、サーバ上で動的にswfを生成することが可能になる。

2009年12月7日

preg_matchにおける$の注意点

Filed under: 文字列 — admin @ 3:04 AM

preg_matchにおける$の挙動を知る。

<?php
$str = "01237";
$str = preg_replace("/37$/", '', $str);
var_dump($str);
//string(3) "012"

当然だ。次に以下を実行する。

$str = "01237\n";
$str = preg_replace("/37$/", '', $str);
var_dump($str);
//string(4) "012\n"

ん?文字列の最後尾の改行コードが$で捉えきれなかった。

$str = "01237\n";
$str = preg_replace("/37$/D", '', $str);
var_dump($str);
//string(6) "01237\n"

上述のようにDオプションを加えると期待した動作になる。

■まとめ

$
行の末尾
D
$を検索対象文字列の終わりにのみマッチ。これが無い場合、$は改行文字の前でもマッチする

従って前述のコードの様な結果となる。

2009年12月7日

HTTPヘッダインジェクションを防ぐ

Filed under: セキュリティ — admin @ 2:17 AM

PHP5.1.2以前を使っている場合は特に気をつけねばならない。以下のようにHTTPヘッダにユーザ入力の値が入るとする。

header("Location: http://sample.org/{$input}");

■攻撃

$inputに改行が入っていた場合に成立する。

$input = '\n\n<script type="text/javascript">alert("attacked");</script>';

■対策

header("Location: http://sample.org/" . strtr($input, array("\r" => '', "\n" => '')));

但し、PHP5.1.2以降ではインジェクションに対する実装として、一度に複数のヘッダを送信することができなくなり改行コードは削除されるようになった。PHP 5.2.0では脆弱性が存在したようだ。

header("Location: http://sample.org/" . trim($input));

現代でも最低限このくらいはした方がよさそうだ。