diff --git a/.drone.yml b/.drone.yml
index b05c253..af479b3 100644
--- a/.drone.yml
+++ b/.drone.yml
@@ -64,7 +64,6 @@ steps:
trigger:
event:
- - cron
- push
- tag
diff --git a/htdocs/ajax_flotte.php b/htdocs/ajax_flotte.php
index af900cb..669ac90 100644
--- a/htdocs/ajax_flotte.php
+++ b/htdocs/ajax_flotte.php
@@ -1,20 +1,16 @@
values['connected']) && $SESS->values['connected'] && !empty($SESS->values['id']) && !empty($SESS->values['idPlan'])) {
- $idPrep = gpc("cds_temp", "post");
+if (isset($sess) && isset($sess->values['connected']) && $sess->values['connected'] && !empty($sess->values['id']) && !empty($sess->level) && !empty($sess->values['idPlan'])) {
$json = new Services_JSON();
$nbtrajet = 2;
- if (empty($VAR['flottes']) && $SESS->level <= 1) {
+ if (empty($config['flottes']) && $sess->level <= 1) {
$datas = array(
'root' => array(
'destination' => '::',
@@ -32,7 +28,8 @@ if (isset($SESS) && isset($SESS->values['connected']) && $SESS->values['connecte
$destin = gpc('fav_dest', 'post');
$chapeau = new bdd();
- $idPlan = $SESS->values['idPlan'];
+ $chapeau->connexion();
+ $idPlan = $sess->values['idPlan'];
$queryPlanete = $chapeau->unique_query("SELECT * FROM $table_planete WHERE id = '$idPlan'");
if (!empty($destin)) {
$chapeau->escape($destin);
@@ -48,11 +45,18 @@ if (isset($SESS) && isset($SESS->values['connected']) && $SESS->values['connecte
$start_ss = $queryPlanete['ss'];
$start_position = $queryPlanete['position'];
- if (empty($SESS->values["prepFlottes"][$idPrep]['time']) ||
- $SESS->values["prepFlottes"][$idPrep]['time'] + 1200 < time() ||
- empty($SESS->values["prepFlottes"][$idPrep]['nbVaisseaux']) ||
- empty($SESS->values["prepFlottes"][$idPrep]['vitesse']) &&
- isset($SESS->values['auth_level'])) {
+ $met = gpc('met', 'post');
+ $cri = gpc('cri', 'post');
+ $hyd = gpc('hyd', 'post');
+ if (!empty($sess->values['flcontenu']) && $met+$cri+$hyd >= 0 && $met >= 0 && $cri >= 0 && $hyd >= 0) {
+ $places = $sess->values['flcontenu'] - ($met+$cri+$hyd);
+ } else {
+ $places = 'inconnu';
+ }
+
+
+
+ if (empty($sess->values['fltime']) || $sess->values['fltime'] + 600 < time() || empty($sess->values['flnbvais']) || empty($sess->values['flvitesse']) && isset($sess->values['auth_level'])) {
$datas = array(
'root' => array(
'destination' => $destinRapid,
@@ -60,7 +64,7 @@ if (isset($SESS) && isset($SESS->values['connected']) && $SESS->values['connecte
'deblok' => 'Une erreur est survenue lors de la création de la flotte. Veuillez recommencer',
'conso' => '-',
'tactique' => '',
- 'places' => '',
+ 'places' => separerNombres($places)
)
);
} elseif (empty($_POST['nom']) || preg_replace('@[^a-zA-Z0-9_ ]@i', '', $_POST['nom']) != $_POST['nom']) {
@@ -71,10 +75,10 @@ if (isset($SESS) && isset($SESS->values['connected']) && $SESS->values['connecte
'deblok' => 'Nom de la flotte incorrect !',
'conso' => '-',
'tactique' => '',
- 'places' => '',
+ 'places' => separerNombres($places)
)
);
- } elseif ($_POST['galaxie'] > $VAR['nb_amas'] || $_POST['ss'] > $VAR['nb_systeme'] || $_POST['pos'] > $VAR['nb_planete'] || $_POST['galaxie'] < 0 || $_POST['ss'] < 1 || $_POST['pos'] < 1 || ($_POST['galaxie'] < 1 && $SESS->values['auth_level'] < 6)) {
+ } elseif ($_POST['galaxie'] > MAX_AMAS || $_POST['ss'] > MAX_SYSTEME || $_POST['pos'] > MAX_PLANETE || $_POST['galaxie'] < 0 || $_POST['ss'] < 1 || $_POST['pos'] < 1 || ($_POST['galaxie'] < 1 && $sess->values['auth_level'] < 6)) {
$datas = array(
'root' => array(
'destination' => $destinRapid,
@@ -82,38 +86,23 @@ if (isset($SESS) && isset($SESS->values['connected']) && $SESS->values['connecte
'deblok' => 'Corrigez la destination !',
'conso' => '-',
'tactique' => '',
- 'places' => '',
+ 'places' => separerNombres($places)
)
);
} else {
$_POST['vitesse'] /= 100;
-
- $planete = new planete($idPlan);
- $flotte = new flotte();
- $temps = $flotte->calc_deplacement($planete, $_POST['galaxie'], $_POST['ss'], $_POST['pos'], $_POST['vitesse'], $SESS->values["prepFlottes"][$idPrep]['vaisseaux'], 1000);
+ $temps = vais_tempsDeplacement($start_galaxie, $start_ss, $start_position, $_POST['galaxie'], $_POST['ss'], $_POST['pos'], $sess->values['flvitesse'], $_POST['vitesse'], $sess->values['flpreparation'], $sess->values['flchauffe']);
if ($temps <= 0) {
$temps = 454;
}
- $conso = $flotte->calc_deplacement($planete, $_POST['galaxie'], $_POST['ss'], $_POST['pos'], $_POST['vitesse'], $SESS->values["prepFlottes"][$idPrep]['vaisseaux'], 1000, false, true);
- // $conso renvoi le temps ET la conso dans un array
- $conso = intval($conso[1]);
-
- $met = intval(gpc('met', 'post'));
- $cri = intval(gpc('cri', 'post'));
- $hyd = intval(gpc('hyd', 'post'));
- $places = $flotte->calcStockage($SESS->values["prepFlottes"][$idPrep]['vaisseaux'], $planete);
- $places -= ceil($conso * $nbtrajet);
- if (($met+$cri+$hyd) > 0) {
- $places -= ($met+$cri+$hyd);
- }
+ $conso = vais_conso($temps, $sess->values['flnbvais'])*$_POST['vitesse']/45;
+ $places -= ceil($conso*$nbtrajet);
$tactique = '';
- // si la mission est une mission d'attaque
- if ($_POST['mission'] == '3') {
+ if ($_POST['mission'] == '1') {
$tactique = '
';
}
- $SESS->values['flcds'] = $idPrep;
- $SESS->put();
+ $cds = sha1('flotte'.$conso.'ß10'.time().'|HB;'.rand(10, 99).$temps);
+ $sess->values['flcds'] = $cds;
+ $sess->put();
$datas = array(
'root' => array(
'destination' => $destinRapid,
'temps' => affTemp(floor($temps)),
- 'deblok' => '',
- 'conso' => ceil($conso*2),
+ 'deblok' => '',
+ 'conso' => separerNombres(ceil($conso*2)),
'tactique' => $tactique,
- 'places' => $places
+ 'places' => separerNombres($places)
)
);
}
diff --git a/htdocs/images/planetes/1.jpg b/htdocs/images/planetes/1.jpg
index 0ae5fb0..282fcde 100644
Binary files a/htdocs/images/planetes/1.jpg and b/htdocs/images/planetes/1.jpg differ
diff --git a/htdocs/images/planetes/10.jpg b/htdocs/images/planetes/10.jpg
index 061b8ba..84e2412 100644
Binary files a/htdocs/images/planetes/10.jpg and b/htdocs/images/planetes/10.jpg differ
diff --git a/htdocs/images/planetes/100.jpg b/htdocs/images/planetes/100.jpg
deleted file mode 100644
index 25521eb..0000000
Binary files a/htdocs/images/planetes/100.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/101.jpg b/htdocs/images/planetes/101.jpg
deleted file mode 100644
index 2d9105d..0000000
Binary files a/htdocs/images/planetes/101.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/102.jpg b/htdocs/images/planetes/102.jpg
deleted file mode 100644
index a57e0a8..0000000
Binary files a/htdocs/images/planetes/102.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/103.jpg b/htdocs/images/planetes/103.jpg
deleted file mode 100644
index 9b553ec..0000000
Binary files a/htdocs/images/planetes/103.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/104.jpg b/htdocs/images/planetes/104.jpg
deleted file mode 100644
index da2ec38..0000000
Binary files a/htdocs/images/planetes/104.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/105.jpg b/htdocs/images/planetes/105.jpg
deleted file mode 100644
index ebcc807..0000000
Binary files a/htdocs/images/planetes/105.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/106.jpg b/htdocs/images/planetes/106.jpg
deleted file mode 100644
index 020dd14..0000000
Binary files a/htdocs/images/planetes/106.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/107.jpg b/htdocs/images/planetes/107.jpg
deleted file mode 100644
index 8e34aa7..0000000
Binary files a/htdocs/images/planetes/107.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/108.jpg b/htdocs/images/planetes/108.jpg
deleted file mode 100644
index 02408be..0000000
Binary files a/htdocs/images/planetes/108.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/109.jpg b/htdocs/images/planetes/109.jpg
deleted file mode 100644
index 5e36180..0000000
Binary files a/htdocs/images/planetes/109.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/11.jpg b/htdocs/images/planetes/11.jpg
index 9a6fabf..6435940 100644
Binary files a/htdocs/images/planetes/11.jpg and b/htdocs/images/planetes/11.jpg differ
diff --git a/htdocs/images/planetes/110.jpg b/htdocs/images/planetes/110.jpg
deleted file mode 100644
index 8944616..0000000
Binary files a/htdocs/images/planetes/110.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/111.jpg b/htdocs/images/planetes/111.jpg
deleted file mode 100644
index b613a08..0000000
Binary files a/htdocs/images/planetes/111.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/112.jpg b/htdocs/images/planetes/112.jpg
deleted file mode 100644
index 1fdc3dd..0000000
Binary files a/htdocs/images/planetes/112.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/113.jpg b/htdocs/images/planetes/113.jpg
deleted file mode 100644
index 51ca960..0000000
Binary files a/htdocs/images/planetes/113.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/114.jpg b/htdocs/images/planetes/114.jpg
deleted file mode 100644
index aee7160..0000000
Binary files a/htdocs/images/planetes/114.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/115.jpg b/htdocs/images/planetes/115.jpg
deleted file mode 100644
index 9649e4e..0000000
Binary files a/htdocs/images/planetes/115.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/116.jpg b/htdocs/images/planetes/116.jpg
deleted file mode 100644
index 71cd646..0000000
Binary files a/htdocs/images/planetes/116.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/117.jpg b/htdocs/images/planetes/117.jpg
deleted file mode 100644
index 1607abb..0000000
Binary files a/htdocs/images/planetes/117.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/118.jpg b/htdocs/images/planetes/118.jpg
deleted file mode 100644
index 83de29e..0000000
Binary files a/htdocs/images/planetes/118.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/119.jpg b/htdocs/images/planetes/119.jpg
deleted file mode 100644
index b688916..0000000
Binary files a/htdocs/images/planetes/119.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/12.jpg b/htdocs/images/planetes/12.jpg
index edb244a..416508d 100644
Binary files a/htdocs/images/planetes/12.jpg and b/htdocs/images/planetes/12.jpg differ
diff --git a/htdocs/images/planetes/120.jpg b/htdocs/images/planetes/120.jpg
deleted file mode 100644
index 86520fc..0000000
Binary files a/htdocs/images/planetes/120.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/121.jpg b/htdocs/images/planetes/121.jpg
deleted file mode 100644
index c5b63b1..0000000
Binary files a/htdocs/images/planetes/121.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/122.jpg b/htdocs/images/planetes/122.jpg
deleted file mode 100644
index a5bdb84..0000000
Binary files a/htdocs/images/planetes/122.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/123.jpg b/htdocs/images/planetes/123.jpg
deleted file mode 100644
index 7ce69c7..0000000
Binary files a/htdocs/images/planetes/123.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/124.jpg b/htdocs/images/planetes/124.jpg
deleted file mode 100644
index 5a9491e..0000000
Binary files a/htdocs/images/planetes/124.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/125.jpg b/htdocs/images/planetes/125.jpg
deleted file mode 100644
index d99d9ac..0000000
Binary files a/htdocs/images/planetes/125.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/126.jpg b/htdocs/images/planetes/126.jpg
deleted file mode 100644
index d2379e0..0000000
Binary files a/htdocs/images/planetes/126.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/127.jpg b/htdocs/images/planetes/127.jpg
deleted file mode 100644
index 4572d89..0000000
Binary files a/htdocs/images/planetes/127.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/128.jpg b/htdocs/images/planetes/128.jpg
deleted file mode 100644
index 25442e5..0000000
Binary files a/htdocs/images/planetes/128.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/129.jpg b/htdocs/images/planetes/129.jpg
deleted file mode 100644
index 4d4524b..0000000
Binary files a/htdocs/images/planetes/129.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/13.jpg b/htdocs/images/planetes/13.jpg
index 1e896df..6861c8d 100644
Binary files a/htdocs/images/planetes/13.jpg and b/htdocs/images/planetes/13.jpg differ
diff --git a/htdocs/images/planetes/130.jpg b/htdocs/images/planetes/130.jpg
deleted file mode 100644
index e1cd78a..0000000
Binary files a/htdocs/images/planetes/130.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/131.jpg b/htdocs/images/planetes/131.jpg
deleted file mode 100644
index 3477dc1..0000000
Binary files a/htdocs/images/planetes/131.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/132.jpg b/htdocs/images/planetes/132.jpg
deleted file mode 100644
index 816864d..0000000
Binary files a/htdocs/images/planetes/132.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/133.jpg b/htdocs/images/planetes/133.jpg
deleted file mode 100644
index a0e9a67..0000000
Binary files a/htdocs/images/planetes/133.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/134.jpg b/htdocs/images/planetes/134.jpg
deleted file mode 100644
index 10b7c00..0000000
Binary files a/htdocs/images/planetes/134.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/135.jpg b/htdocs/images/planetes/135.jpg
deleted file mode 100644
index bb4c87f..0000000
Binary files a/htdocs/images/planetes/135.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/136.jpg b/htdocs/images/planetes/136.jpg
deleted file mode 100644
index 2fd079a..0000000
Binary files a/htdocs/images/planetes/136.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/137.jpg b/htdocs/images/planetes/137.jpg
deleted file mode 100644
index 42a9c65..0000000
Binary files a/htdocs/images/planetes/137.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/138.jpg b/htdocs/images/planetes/138.jpg
deleted file mode 100644
index f77f748..0000000
Binary files a/htdocs/images/planetes/138.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/139.jpg b/htdocs/images/planetes/139.jpg
deleted file mode 100644
index 1888d90..0000000
Binary files a/htdocs/images/planetes/139.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/14.jpg b/htdocs/images/planetes/14.jpg
index e8cbef9..bac8568 100644
Binary files a/htdocs/images/planetes/14.jpg and b/htdocs/images/planetes/14.jpg differ
diff --git a/htdocs/images/planetes/140.jpg b/htdocs/images/planetes/140.jpg
deleted file mode 100644
index 6fea310..0000000
Binary files a/htdocs/images/planetes/140.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/141.jpg b/htdocs/images/planetes/141.jpg
deleted file mode 100644
index 3ac391e..0000000
Binary files a/htdocs/images/planetes/141.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/142.jpg b/htdocs/images/planetes/142.jpg
deleted file mode 100644
index 1de0da6..0000000
Binary files a/htdocs/images/planetes/142.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/143.jpg b/htdocs/images/planetes/143.jpg
deleted file mode 100644
index 3b97809..0000000
Binary files a/htdocs/images/planetes/143.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/144.jpg b/htdocs/images/planetes/144.jpg
deleted file mode 100644
index 3375755..0000000
Binary files a/htdocs/images/planetes/144.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/145.jpg b/htdocs/images/planetes/145.jpg
deleted file mode 100644
index 8fb7394..0000000
Binary files a/htdocs/images/planetes/145.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/146.jpg b/htdocs/images/planetes/146.jpg
deleted file mode 100644
index 32ef681..0000000
Binary files a/htdocs/images/planetes/146.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/147.jpg b/htdocs/images/planetes/147.jpg
deleted file mode 100644
index 5fdbd9c..0000000
Binary files a/htdocs/images/planetes/147.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/148.jpg b/htdocs/images/planetes/148.jpg
deleted file mode 100644
index 386781e..0000000
Binary files a/htdocs/images/planetes/148.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/149.jpg b/htdocs/images/planetes/149.jpg
deleted file mode 100644
index 2311f69..0000000
Binary files a/htdocs/images/planetes/149.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/15.jpg b/htdocs/images/planetes/15.jpg
index 90c11d8..d9f82a7 100644
Binary files a/htdocs/images/planetes/15.jpg and b/htdocs/images/planetes/15.jpg differ
diff --git a/htdocs/images/planetes/150.jpg b/htdocs/images/planetes/150.jpg
deleted file mode 100644
index f287a95..0000000
Binary files a/htdocs/images/planetes/150.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/16.jpg b/htdocs/images/planetes/16.jpg
index 68b3f8e..305d244 100644
Binary files a/htdocs/images/planetes/16.jpg and b/htdocs/images/planetes/16.jpg differ
diff --git a/htdocs/images/planetes/17.jpg b/htdocs/images/planetes/17.jpg
index 0dcf0e8..ab33da0 100644
Binary files a/htdocs/images/planetes/17.jpg and b/htdocs/images/planetes/17.jpg differ
diff --git a/htdocs/images/planetes/18.jpg b/htdocs/images/planetes/18.jpg
index 6da6ebb..1e2e208 100644
Binary files a/htdocs/images/planetes/18.jpg and b/htdocs/images/planetes/18.jpg differ
diff --git a/htdocs/images/planetes/19.jpg b/htdocs/images/planetes/19.jpg
index 82ed8cf..6885bf2 100644
Binary files a/htdocs/images/planetes/19.jpg and b/htdocs/images/planetes/19.jpg differ
diff --git a/htdocs/images/planetes/2.jpg b/htdocs/images/planetes/2.jpg
index 57b297c..cd05f75 100644
Binary files a/htdocs/images/planetes/2.jpg and b/htdocs/images/planetes/2.jpg differ
diff --git a/htdocs/images/planetes/20.jpg b/htdocs/images/planetes/20.jpg
index 4c6201f..19bc5fb 100644
Binary files a/htdocs/images/planetes/20.jpg and b/htdocs/images/planetes/20.jpg differ
diff --git a/htdocs/images/planetes/21.jpg b/htdocs/images/planetes/21.jpg
index 0ffe38f..6c584d4 100644
Binary files a/htdocs/images/planetes/21.jpg and b/htdocs/images/planetes/21.jpg differ
diff --git a/htdocs/images/planetes/22.jpg b/htdocs/images/planetes/22.jpg
index 17b31f1..a318072 100644
Binary files a/htdocs/images/planetes/22.jpg and b/htdocs/images/planetes/22.jpg differ
diff --git a/htdocs/images/planetes/23.jpg b/htdocs/images/planetes/23.jpg
index bd2f024..2418250 100644
Binary files a/htdocs/images/planetes/23.jpg and b/htdocs/images/planetes/23.jpg differ
diff --git a/htdocs/images/planetes/24.jpg b/htdocs/images/planetes/24.jpg
index bf74178..3f851a5 100644
Binary files a/htdocs/images/planetes/24.jpg and b/htdocs/images/planetes/24.jpg differ
diff --git a/htdocs/images/planetes/25.jpg b/htdocs/images/planetes/25.jpg
index 3d60c12..8ff95dc 100644
Binary files a/htdocs/images/planetes/25.jpg and b/htdocs/images/planetes/25.jpg differ
diff --git a/htdocs/images/planetes/26.jpg b/htdocs/images/planetes/26.jpg
index 1acd25e..d184eea 100644
Binary files a/htdocs/images/planetes/26.jpg and b/htdocs/images/planetes/26.jpg differ
diff --git a/htdocs/images/planetes/27.jpg b/htdocs/images/planetes/27.jpg
index e0a25fc..df15458 100644
Binary files a/htdocs/images/planetes/27.jpg and b/htdocs/images/planetes/27.jpg differ
diff --git a/htdocs/images/planetes/28.jpg b/htdocs/images/planetes/28.jpg
index c417500..2b2dd3b 100644
Binary files a/htdocs/images/planetes/28.jpg and b/htdocs/images/planetes/28.jpg differ
diff --git a/htdocs/images/planetes/29.jpg b/htdocs/images/planetes/29.jpg
index 19a10d5..c92e144 100644
Binary files a/htdocs/images/planetes/29.jpg and b/htdocs/images/planetes/29.jpg differ
diff --git a/htdocs/images/planetes/3.jpg b/htdocs/images/planetes/3.jpg
index 97c7df6..a1c898a 100644
Binary files a/htdocs/images/planetes/3.jpg and b/htdocs/images/planetes/3.jpg differ
diff --git a/htdocs/images/planetes/30.jpg b/htdocs/images/planetes/30.jpg
index 25bfeca..6b9f9a1 100644
Binary files a/htdocs/images/planetes/30.jpg and b/htdocs/images/planetes/30.jpg differ
diff --git a/htdocs/images/planetes/31.jpg b/htdocs/images/planetes/31.jpg
index 7c86808..471a2bc 100644
Binary files a/htdocs/images/planetes/31.jpg and b/htdocs/images/planetes/31.jpg differ
diff --git a/htdocs/images/planetes/32.jpg b/htdocs/images/planetes/32.jpg
index d30d28b..fe7e629 100644
Binary files a/htdocs/images/planetes/32.jpg and b/htdocs/images/planetes/32.jpg differ
diff --git a/htdocs/images/planetes/33.jpg b/htdocs/images/planetes/33.jpg
deleted file mode 100644
index 5077615..0000000
Binary files a/htdocs/images/planetes/33.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/34.jpg b/htdocs/images/planetes/34.jpg
deleted file mode 100644
index 356367d..0000000
Binary files a/htdocs/images/planetes/34.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/35.jpg b/htdocs/images/planetes/35.jpg
deleted file mode 100644
index 0af0c61..0000000
Binary files a/htdocs/images/planetes/35.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/36.jpg b/htdocs/images/planetes/36.jpg
deleted file mode 100644
index b21afc8..0000000
Binary files a/htdocs/images/planetes/36.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/37.jpg b/htdocs/images/planetes/37.jpg
deleted file mode 100644
index 65ba113..0000000
Binary files a/htdocs/images/planetes/37.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/38.jpg b/htdocs/images/planetes/38.jpg
deleted file mode 100644
index 41b911a..0000000
Binary files a/htdocs/images/planetes/38.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/39.jpg b/htdocs/images/planetes/39.jpg
deleted file mode 100644
index 58966d3..0000000
Binary files a/htdocs/images/planetes/39.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/4.jpg b/htdocs/images/planetes/4.jpg
index 1c81beb..391ed50 100644
Binary files a/htdocs/images/planetes/4.jpg and b/htdocs/images/planetes/4.jpg differ
diff --git a/htdocs/images/planetes/40.jpg b/htdocs/images/planetes/40.jpg
deleted file mode 100644
index 69bf891..0000000
Binary files a/htdocs/images/planetes/40.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/41.jpg b/htdocs/images/planetes/41.jpg
deleted file mode 100644
index 86ce529..0000000
Binary files a/htdocs/images/planetes/41.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/42.jpg b/htdocs/images/planetes/42.jpg
deleted file mode 100644
index 38eee57..0000000
Binary files a/htdocs/images/planetes/42.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/43.jpg b/htdocs/images/planetes/43.jpg
deleted file mode 100644
index 9605173..0000000
Binary files a/htdocs/images/planetes/43.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/44.jpg b/htdocs/images/planetes/44.jpg
deleted file mode 100644
index 02f58bb..0000000
Binary files a/htdocs/images/planetes/44.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/45.jpg b/htdocs/images/planetes/45.jpg
deleted file mode 100644
index 817251c..0000000
Binary files a/htdocs/images/planetes/45.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/46.jpg b/htdocs/images/planetes/46.jpg
deleted file mode 100644
index caab9ae..0000000
Binary files a/htdocs/images/planetes/46.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/47.jpg b/htdocs/images/planetes/47.jpg
deleted file mode 100644
index acac44e..0000000
Binary files a/htdocs/images/planetes/47.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/48.jpg b/htdocs/images/planetes/48.jpg
deleted file mode 100644
index f8a7895..0000000
Binary files a/htdocs/images/planetes/48.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/49.jpg b/htdocs/images/planetes/49.jpg
deleted file mode 100644
index 8ab4d32..0000000
Binary files a/htdocs/images/planetes/49.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/5.jpg b/htdocs/images/planetes/5.jpg
index 30edd36..353f705 100644
Binary files a/htdocs/images/planetes/5.jpg and b/htdocs/images/planetes/5.jpg differ
diff --git a/htdocs/images/planetes/50.jpg b/htdocs/images/planetes/50.jpg
deleted file mode 100644
index 7ed5a59..0000000
Binary files a/htdocs/images/planetes/50.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/51.jpg b/htdocs/images/planetes/51.jpg
deleted file mode 100644
index d574f59..0000000
Binary files a/htdocs/images/planetes/51.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/52.jpg b/htdocs/images/planetes/52.jpg
deleted file mode 100644
index eeb56ab..0000000
Binary files a/htdocs/images/planetes/52.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/53.jpg b/htdocs/images/planetes/53.jpg
deleted file mode 100644
index 84bd9f8..0000000
Binary files a/htdocs/images/planetes/53.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/54.jpg b/htdocs/images/planetes/54.jpg
deleted file mode 100644
index a8602fe..0000000
Binary files a/htdocs/images/planetes/54.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/55.jpg b/htdocs/images/planetes/55.jpg
deleted file mode 100644
index e1c97cb..0000000
Binary files a/htdocs/images/planetes/55.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/56.jpg b/htdocs/images/planetes/56.jpg
deleted file mode 100644
index 5a77732..0000000
Binary files a/htdocs/images/planetes/56.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/57.jpg b/htdocs/images/planetes/57.jpg
deleted file mode 100644
index e3ae5cd..0000000
Binary files a/htdocs/images/planetes/57.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/58.jpg b/htdocs/images/planetes/58.jpg
deleted file mode 100644
index be04b2a..0000000
Binary files a/htdocs/images/planetes/58.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/59.jpg b/htdocs/images/planetes/59.jpg
deleted file mode 100644
index 28f5a02..0000000
Binary files a/htdocs/images/planetes/59.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/6.jpg b/htdocs/images/planetes/6.jpg
index dd6c466..39d266a 100644
Binary files a/htdocs/images/planetes/6.jpg and b/htdocs/images/planetes/6.jpg differ
diff --git a/htdocs/images/planetes/60.jpg b/htdocs/images/planetes/60.jpg
deleted file mode 100644
index 472872c..0000000
Binary files a/htdocs/images/planetes/60.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/61.jpg b/htdocs/images/planetes/61.jpg
deleted file mode 100644
index a38d82a..0000000
Binary files a/htdocs/images/planetes/61.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/62.jpg b/htdocs/images/planetes/62.jpg
deleted file mode 100644
index 7741875..0000000
Binary files a/htdocs/images/planetes/62.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/63.jpg b/htdocs/images/planetes/63.jpg
deleted file mode 100644
index 88e05f8..0000000
Binary files a/htdocs/images/planetes/63.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/64.jpg b/htdocs/images/planetes/64.jpg
deleted file mode 100644
index eb4b432..0000000
Binary files a/htdocs/images/planetes/64.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/65.jpg b/htdocs/images/planetes/65.jpg
deleted file mode 100644
index 74a6531..0000000
Binary files a/htdocs/images/planetes/65.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/66.jpg b/htdocs/images/planetes/66.jpg
deleted file mode 100644
index fc21fd4..0000000
Binary files a/htdocs/images/planetes/66.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/67.jpg b/htdocs/images/planetes/67.jpg
deleted file mode 100644
index 7f42702..0000000
Binary files a/htdocs/images/planetes/67.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/68.jpg b/htdocs/images/planetes/68.jpg
deleted file mode 100644
index 3910727..0000000
Binary files a/htdocs/images/planetes/68.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/69.jpg b/htdocs/images/planetes/69.jpg
deleted file mode 100644
index 29c4de7..0000000
Binary files a/htdocs/images/planetes/69.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/7.jpg b/htdocs/images/planetes/7.jpg
index ba61b23..2cf0298 100644
Binary files a/htdocs/images/planetes/7.jpg and b/htdocs/images/planetes/7.jpg differ
diff --git a/htdocs/images/planetes/70.jpg b/htdocs/images/planetes/70.jpg
deleted file mode 100644
index fd73f83..0000000
Binary files a/htdocs/images/planetes/70.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/71.jpg b/htdocs/images/planetes/71.jpg
deleted file mode 100644
index a5885ac..0000000
Binary files a/htdocs/images/planetes/71.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/72.jpg b/htdocs/images/planetes/72.jpg
deleted file mode 100644
index f5992b8..0000000
Binary files a/htdocs/images/planetes/72.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/73.jpg b/htdocs/images/planetes/73.jpg
deleted file mode 100644
index 885d400..0000000
Binary files a/htdocs/images/planetes/73.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/74.jpg b/htdocs/images/planetes/74.jpg
deleted file mode 100644
index 200af78..0000000
Binary files a/htdocs/images/planetes/74.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/75.jpg b/htdocs/images/planetes/75.jpg
deleted file mode 100644
index 39c0534..0000000
Binary files a/htdocs/images/planetes/75.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/76.jpg b/htdocs/images/planetes/76.jpg
deleted file mode 100644
index f45f8fb..0000000
Binary files a/htdocs/images/planetes/76.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/77.jpg b/htdocs/images/planetes/77.jpg
deleted file mode 100644
index a6e6842..0000000
Binary files a/htdocs/images/planetes/77.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/78.jpg b/htdocs/images/planetes/78.jpg
deleted file mode 100644
index b7785ba..0000000
Binary files a/htdocs/images/planetes/78.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/79.jpg b/htdocs/images/planetes/79.jpg
deleted file mode 100644
index b5c3c17..0000000
Binary files a/htdocs/images/planetes/79.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/8.jpg b/htdocs/images/planetes/8.jpg
index fe868a8..e2f7df0 100644
Binary files a/htdocs/images/planetes/8.jpg and b/htdocs/images/planetes/8.jpg differ
diff --git a/htdocs/images/planetes/80.jpg b/htdocs/images/planetes/80.jpg
deleted file mode 100644
index 86d4cc9..0000000
Binary files a/htdocs/images/planetes/80.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/81.jpg b/htdocs/images/planetes/81.jpg
deleted file mode 100644
index 8016a06..0000000
Binary files a/htdocs/images/planetes/81.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/82.jpg b/htdocs/images/planetes/82.jpg
deleted file mode 100644
index 60f21a4..0000000
Binary files a/htdocs/images/planetes/82.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/83.jpg b/htdocs/images/planetes/83.jpg
deleted file mode 100644
index 94f381d..0000000
Binary files a/htdocs/images/planetes/83.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/84.jpg b/htdocs/images/planetes/84.jpg
deleted file mode 100644
index d8d2ed6..0000000
Binary files a/htdocs/images/planetes/84.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/85.jpg b/htdocs/images/planetes/85.jpg
deleted file mode 100644
index bc64d9c..0000000
Binary files a/htdocs/images/planetes/85.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/86.jpg b/htdocs/images/planetes/86.jpg
deleted file mode 100644
index b81cd35..0000000
Binary files a/htdocs/images/planetes/86.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/87.jpg b/htdocs/images/planetes/87.jpg
deleted file mode 100644
index 6383e55..0000000
Binary files a/htdocs/images/planetes/87.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/88.jpg b/htdocs/images/planetes/88.jpg
deleted file mode 100644
index 6b1fb93..0000000
Binary files a/htdocs/images/planetes/88.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/89.jpg b/htdocs/images/planetes/89.jpg
deleted file mode 100644
index ab6fa92..0000000
Binary files a/htdocs/images/planetes/89.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/9.jpg b/htdocs/images/planetes/9.jpg
index 4f486dc..331e188 100644
Binary files a/htdocs/images/planetes/9.jpg and b/htdocs/images/planetes/9.jpg differ
diff --git a/htdocs/images/planetes/90.jpg b/htdocs/images/planetes/90.jpg
deleted file mode 100644
index 71be830..0000000
Binary files a/htdocs/images/planetes/90.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/91.jpg b/htdocs/images/planetes/91.jpg
deleted file mode 100644
index 60ece52..0000000
Binary files a/htdocs/images/planetes/91.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/92.jpg b/htdocs/images/planetes/92.jpg
deleted file mode 100644
index a609ea7..0000000
Binary files a/htdocs/images/planetes/92.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/93.jpg b/htdocs/images/planetes/93.jpg
deleted file mode 100644
index 28cb911..0000000
Binary files a/htdocs/images/planetes/93.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/94.jpg b/htdocs/images/planetes/94.jpg
deleted file mode 100644
index 7351432..0000000
Binary files a/htdocs/images/planetes/94.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/95.jpg b/htdocs/images/planetes/95.jpg
deleted file mode 100644
index 46f2dce..0000000
Binary files a/htdocs/images/planetes/95.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/96.jpg b/htdocs/images/planetes/96.jpg
deleted file mode 100644
index 07009bd..0000000
Binary files a/htdocs/images/planetes/96.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/97.jpg b/htdocs/images/planetes/97.jpg
deleted file mode 100644
index 947d5eb..0000000
Binary files a/htdocs/images/planetes/97.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/98.jpg b/htdocs/images/planetes/98.jpg
deleted file mode 100644
index 88b6642..0000000
Binary files a/htdocs/images/planetes/98.jpg and /dev/null differ
diff --git a/htdocs/images/planetes/99.jpg b/htdocs/images/planetes/99.jpg
deleted file mode 100644
index 4b8f062..0000000
Binary files a/htdocs/images/planetes/99.jpg and /dev/null differ
diff --git a/htdocs/js/flotte.js b/htdocs/js/flotte.js
index 129e9c7..061a7b1 100644
--- a/htdocs/js/flotte.js
+++ b/htdocs/js/flotte.js
@@ -91,26 +91,11 @@ window.onload = function(){
function tempsFlotte() {
document.getElementById('deblok').innerHTML = '...';
- var url_string = (window.location.href).toLowerCase();
- var url = new URL(url_string);
- var cds = url.searchParams.get("c");
new Ajax.Request(
'ajax_flotte.php',
{
method: 'post',
- parameters: {
- cds_temp: cds,
- fav_dest: document.getElementById('fav_dest').value,
- nom: document.getElementById('nom').value,
- mission: document.getElementById('mission').value,
- met: document.getElementById('metal').value,
- cri: document.getElementById('cristal').value,
- hyd: document.getElementById('hydrogene').value,
- galaxie: document.getElementById('amas').value,
- ss: document.getElementById('ss').value,
- pos: document.getElementById('plan').value,
- vitesse: document.getElementById('vitesse').value
- },
+ parameters: {fav_dest: document.getElementById('fav_dest').value, nom: document.getElementById('nom').value, mission: document.getElementById('mission').value, met: document.getElementById('metal').value, cri: document.getElementById('cristal').value, hyd: document.getElementById('hydrogene').value, galaxie: document.getElementById('amas').value, ss: document.getElementById('ss').value, pos: document.getElementById('plan').value, vitesse: document.getElementById('vitesse').value},
onSuccess: function(transport, json) {
document.getElementById('destination').innerHTML = json.root.destination;
document.getElementById('temps').innerHTML = json.root.temps;
@@ -122,4 +107,4 @@ function tempsFlotte() {
}
}
);
-}
+}
\ No newline at end of file
diff --git a/onyx2/config/root.xml b/onyx2/config/root.xml
index 2eaf7be..8b3583e 100644
--- a/onyx2/config/root.xml
+++ b/onyx2/config/root.xml
@@ -81,7 +81,7 @@
?p=classement
?p=chat
http://www.halo-battle.fr/forum/
- #
+ http://issues.halo-battle.s-fr.com/
?p=faq
?p=deconnexion
?p=pilori
@@ -159,4 +159,4 @@
-
+
\ No newline at end of file
diff --git a/onyx2/include/Class/Donnees/batiments.php b/onyx2/include/Class/Donnees/batiments.php
index 9c8b4a0..5cd6e81 100644
--- a/onyx2/include/Class/Donnees/batiments.php
+++ b/onyx2/include/Class/Donnees/batiments.php
@@ -311,15 +311,6 @@ class dBatiments implements Donnees
$sec /= (pow(1.23, $planete->batiments[11]) + 1.0025 * $planete->casernes[7]);
}
- //Bonus technologique de vitesse de construction : Constructions Planétaires
- if ($planete->technologies[2]& dTechnologies::idToBit(2)) {
- $sec /= 1.15;
- } elseif ($planete->technologies[2]& dTechnologies::idToBit(1)) {
- $sec /= 1.10;
- } elseif ($planete->technologies[2]& dTechnologies::idToBit(0)) {
- $sec /= 1.05;
- }
-
//Accélération du temps de construction
$sec /= VITESSE;
diff --git a/onyx2/include/Class/Donnees/interface.php b/onyx2/include/Class/Donnees/interface.php
index 55d5975..adf1587 100644
--- a/onyx2/include/Class/Donnees/interface.php
+++ b/onyx2/include/Class/Donnees/interface.php
@@ -87,12 +87,10 @@ class dDonnees
}
}
- public static function print_neededCheck($tableau, surface $planete, $race = null)
+ public static function print_neededCheck($tableau, surface $planete)
{
global $LANG;
- if ($race == null) {
- $race = $planete->race;
- }
+ $race = $planete->race;
if (!is_array($tableau)) {
return 'Débloqué';
} else {
diff --git a/onyx2/include/Class/Donnees/spatial.php b/onyx2/include/Class/Donnees/spatial.php
index ce4282a..56c772b 100644
--- a/onyx2/include/Class/Donnees/spatial.php
+++ b/onyx2/include/Class/Donnees/spatial.php
@@ -3,12 +3,9 @@ require_once("Class/Donnees/interface.php");
class dSpatial implements Donnees
{
- public static function metal($id, $nombre, surface $planete, $race = null)
+ public static function metal($id, $nombre, surface $planete)
{
- if ($race == null) {
- $race = $planete->race;
- }
- if ($race == "humain") {
+ if ($planete->race == "humain") {
switch ($id) {
case 0:
$metal = 1000;
@@ -121,12 +118,9 @@ class dSpatial implements Donnees
return $metal * $nombre;
}
- public static function cristal($id, $nombre, surface $planete, $race = null)
+ public static function cristal($id, $nombre, surface $planete)
{
- if ($race == null) {
- $race = $planete->race;
- }
- if ($race == "humain") {
+ if ($planete->race == "humain") {
switch ($id) {
case 0:
$cristal = 800;
@@ -220,7 +214,7 @@ class dSpatial implements Donnees
case 14:
$cristal = 19400;
break;
- case 15:
+ case 16:
$cristal = 23000;
break;
case 16:
@@ -239,12 +233,9 @@ class dSpatial implements Donnees
return $cristal * $nombre;
}
- public static function hydrogene($id, $nombre, surface $planete, $race = null)
+ public static function hydrogene($id, $nombre, surface $planete)
{
- if ($race == null) {
- $race = $planete->race;
- }
- if ($race == "humain") {
+ if ($planete->race == "humain") {
switch ($id) {
case 0:
$hydrogene = 180;
@@ -338,7 +329,7 @@ class dSpatial implements Donnees
case 14:
$hydrogene = 3740;
break;
- case 15:
+ case 16:
$hydrogene = 4050;
break;
case 16:
@@ -357,17 +348,14 @@ class dSpatial implements Donnees
return $hydrogene * $nombre;
}
- public static function credits($id, $nombre, surface $planete, $race = null)
+ public static function credits($id, $nombre, surface $planete)
{
return 0;
}
- public static function temps($id, $nombre, surface $planete, $race = null)
+ public static function temps($id, $nombre, surface $planete)
{
- if ($race == null) {
- $race = $planete->race;
- }
- if ($race == "humain") {
+ if ($planete->race == "humain") {
switch ($id) {
case 0:
$temps = 733;
@@ -422,7 +410,7 @@ class dSpatial implements Donnees
$moins = 12;
break;
case 13:
- $temps = 2000;
+ $temps = 34900;
$moins = 12;
break;
default:
@@ -514,12 +502,10 @@ class dSpatial implements Donnees
}
}
- public static function image($id, surface $planete, $race = null)
+
+ public static function image($id, surface $planete)
{
- if ($race == null) {
- $race = $planete->race;
- }
- if ($race == "humain") {
+ if ($planete->race == "humain") {
switch ($id) {
case 0:
return "csnucargoparabola2mc9.jpg";
@@ -556,7 +542,7 @@ class dSpatial implements Donnees
break;
}
return Donnees::image_humain_default;
- } else {
+ } elseif ($planete->race == "covenant") {
switch ($id) {
case 0:
return "cargo2pb6.jpg";
@@ -567,32 +553,39 @@ class dSpatial implements Donnees
case 2:
return "colocopiers4.jpg";
break;
- case 6:
- return "chasseurlourd7id.jpg";
- break;
- case 7:
+ case 3:
return "sonde_despionnage1.jpg";
break;
- case 8:
+ case 4:
+ return "chasseurlourd7id.jpg";
+ break;
+ case 5:
return "contactharvestbynameleszk3.jpg";
break;
- case 9:
+ case 6:
return "vaisseauuu0.jpg";
break;
- case 10:
+ case 7:
return "vaisseaudebataille9na.jpg";
break;
- case 14:
+ case 8:
return "pv.jpg";
break;
- case 16:
+ case 9:
+ return "stationorbitalezt7.jpg";
+ break;
+ case 10:
return "citecovenant.jpg";
break;
}
return Donnees::image_covenant_default;
+ } else {
+ trigger_error("Impossible de trouver la race pour ".$planete->race, E_USER_ERROR);
}
}
+
+
public static function needed($id, surface $planete, $print = false, $race = null)
{
if ($race == null) {
@@ -655,8 +648,8 @@ class dSpatial implements Donnees
array('technologies', 7,9)
),
array(
- array('batiments', 8, 3),
- array('technologies', 7, 4)
+ array('batiments', 8, 10),
+ array('technologies', 7,10)
)
);
} else {
@@ -672,7 +665,7 @@ class dSpatial implements Donnees
),
array(
array('batiments', 8, 3),
- array('technologies', 8, 0)
+ array('technologies', 8, 1)
),
array(
array('batiments', 8, 3),
@@ -734,18 +727,16 @@ class dSpatial implements Donnees
}
if ($print) {
- return dDonnees::print_neededCheck($neededSpatial[$id], $planete, $race);
+ return dDonnees::print_neededCheck($neededSpatial[$id], $planete);
} else {
return dDonnees::neededCheck($neededSpatial[$id], $planete);
}
}
- public static function tailleCales($id, surface $planete, $race = null)
+
+ public static function tailleCales($id)
{
- if ($race == null) {
- $race = $planete->race;
- }
- if ($race == "humain") {
+ if ($planete->race == "humain") {
switch ($id) {
case 0:
$vitesse = 10000;
@@ -790,7 +781,7 @@ class dSpatial implements Donnees
$vitesse = 15000;
break;
default:
- $vitesse = 0;
+ trigger_error("Vaisseau ".$id." introuvable dans les données", E_USER_ERROR);
}
} else {
switch ($id) {
@@ -846,7 +837,7 @@ class dSpatial implements Donnees
$vitesse = 20000000;
break;
default:
- $vitesse = 0;
+ trigger_error("Vaisseau ".$id." introuvable dans les données", E_USER_ERROR);
}
}
@@ -854,7 +845,8 @@ class dSpatial implements Donnees
return $vitesse;
}
- public static function vitesseP($id, surface $planete)
+
+ public static function vitesseP($id)
{
if ($planete->race == "humain") {
switch ($id) {
@@ -965,7 +957,7 @@ class dSpatial implements Donnees
return $vitesse;
}
- public static function vitesseS($id, surface $planete)
+ public static function vitesseS($id)
{
if ($planete->race == "humain") {
switch ($id) {
@@ -1076,7 +1068,7 @@ class dSpatial implements Donnees
return $vitesse;
}
- public static function vitesseG($id, surface $planete)
+ public static function vitesseG($id)
{
if ($planete->race == "humain") {
switch ($id) {
@@ -1186,418 +1178,4 @@ class dSpatial implements Donnees
//On tient compte des bonus
return $vitesse;
}
-
- public static function attaque($id, surface $planete, $race = null)
- {
- if ($race == null) {
- $race = $planete->race;
- }
- if ($race == "humain") {
- switch ($id) {
- case 0:
- $attaque = 10;
- break;
- case 1:
- $attaque = 20;
- break;
- case 2:
- $attaque = 20;
- break;
- case 3:
- $attaque = 20;
- break;
- case 4:
- $attaque = 50;
- break;
- case 5:
- $attaque = 250;
- break;
- case 6:
- $attaque = 720;
- break;
- case 7:
- $attaque = 1240;
- break;
- case 8:
- $attaque = 1990;
- break;
- case 9:
- $attaque = 3250;
- break;
- case 10:
- $attaque = 4250;
- break;
- case 11:
- $attaque = 8500;
- break;
- case 12:
- $attaque = 16000;
- break;
- case 13:
- $attaque = 20;
- break;
- default:
- trigger_error("Vaisseau ".$id." introuvable dans les données", E_USER_ERROR);
- }
- } else {
- switch ($id) {
- case 0:
- $attaque = 0;
- break;
- case 1:
- $attaque = 25;
- break;
- case 2:
- $attaque = 25;
- break;
- case 3:
- $attaque = 25;
- break;
- case 4:
- $attaque = 50;
- break;
- case 5:
- $attaque = 100;
- break;
- case 6:
- $attaque = 250;
- break;
- case 7:
- $attaque = 740;
- break;
- case 8:
- $attaque = 1300;
- break;
- case 9:
- $attaque = 2000;
- break;
- case 10:
- $attaque = 3400;
- break;
- case 11:
- $attaque = 4400;
- break;
- case 12:
- $attaque = 9300;
- break;
- case 13:
- $attaque = 8400;
- break;
- case 14:
- $attaque = 8300;
- break;
- case 15:
- $attaque = 11500;
- break;
- case 16:
- $attaque = 0;
- break;
- default:
- trigger_error("Vaisseau ".$id." introuvable dans les données", E_USER_ERROR);
- }
- }
-
- //On tient compte des bonus
- //Bonus pour les vaisseaux léger
- if ($id <= 3) {
- //Bonus Assistance de visée
- if ($planete->technologies[4]& dTechnologies::idToBit(5)) {
- $attaque *= 1.30;
- } elseif ($planete->technologies[4]& dTechnologies::idToBit(4)) {
- $attaque *= 1.20;
- } elseif ($planete->technologies[4]& dTechnologies::idToBit(3)) {
- $attaque *= 1.10;
- }
- }
-
- //Bonus pour les vaisseaux moyen
- if ($id >= 4 && $id <= 7) {
- //Bonus Guidage laser
- if ($planete->technologies[4]& dTechnologies::idToBit(8)) {
- $attaque *= 1.30;
- } elseif ($planete->technologies[4]& dTechnologies::idToBit(7)) {
- $attaque *= 1.20;
- } elseif ($planete->technologies[4]& dTechnologies::idToBit(6)) {
- $attaque *= 1.10;
- }
- }
-
- //Bonus pour les vaisseaux lourds
- if ($id >= 8) {
- //Bonus Condensateurs Rapides
- if ($planete->technologies[4]& dTechnologies::idToBit(11)) {
- $attaque *= 1.30;
- } elseif ($planete->technologies[4]& dTechnologies::idToBit(10)) {
- $attaque *= 1.20;
- } elseif ($planete->technologies[4]& dTechnologies::idToBit(9)) {
- $attaque *= 1.10;
- }
- }
-
- return $attaque;
- }
-
- public static function bouclier($id, surface $planete, $race = null)
- {
- if ($race == null) {
- $race = $planete->race;
- }
- if ($race == "humain") {
- switch ($id) {
- case 0:
- $bouclier = 500;
- break;
- case 1:
- $bouclier = 2000;
- break;
- case 2:
- $bouclier = 2000;
- break;
- case 3:
- $bouclier = 1500;
- break;
- case 4:
- $bouclier = 250;
- break;
- case 5:
- $bouclier = 1000;
- break;
- case 6:
- $bouclier = 1750;
- break;
- case 7:
- $bouclier = 3000;
- break;
- case 8:
- $bouclier = 5000;
- break;
- case 9:
- $bouclier = 9000;
- break;
- case 10:
- $bouclier = 10000;
- break;
- case 11:
- $bouclier = 10250;
- break;
- case 12:
- $bouclier = 12750;
- break;
- case 13:
- $bouclier = 750;
- break;
- default:
- trigger_error("Vaisseau ".$id." introuvable dans les données", E_USER_ERROR);
- }
- } else {
- switch ($id) {
- case 0:
- $bouclier = 400;
- break;
- case 1:
- $bouclier = 1800;
- break;
- case 2:
- $bouclier = 2000;
- break;
- case 3:
- $bouclier = 400;
- break;
- case 4:
- $bouclier = 200;
- break;
- case 5:
- $bouclier = 300;
- break;
- case 6:
- $bouclier = 900;
- break;
- case 7:
- $bouclier = 1500;
- break;
- case 8:
- $bouclier = 3000;
- break;
- case 9:
- $bouclier = 4600;
- break;
- case 10:
- $bouclier = 8000;
- break;
- case 11:
- $bouclier = 9000;
- break;
- case 12:
- $bouclier = 15000;
- break;
- case 13:
- $bouclier = 10400;
- break;
- case 14:
- $bouclier = 9700;
- break;
- case 15:
- $bouclier = 11500;
- break;
- case 16:
- $bouclier = 50000;
- break;
- default:
- trigger_error("Vaisseau ".$id." introuvable dans les données", E_USER_ERROR);
- }
- }
-
- //On tient compte des bonus
- return $bouclier;
- }
-
- public static function armature($id, surface $planete, $race = null)
- {
- if ($race == null) {
- $race = $planete->race;
- }
- if ($race == "humain") {
- switch ($id) {
- case 0:
- $armature = 100;
- break;
- case 1:
- $armature = 400;
- break;
- case 2:
- $armature = 400;
- break;
- case 3:
- $armature = 300;
- break;
- case 4:
- $armature = 50;
- break;
- case 5:
- $armature = 200;
- break;
- case 6:
- $armature = 350;
- break;
- case 7:
- $armature = 600;
- break;
- case 8:
- $armature = 1000;
- break;
- case 9:
- $armature = 1800;
- break;
- case 10:
- $armature = 2000;
- break;
- case 11:
- $armature = 2050;
- break;
- case 12:
- $armature = 2550;
- break;
- case 13:
- $armature = 150;
- break;
- default:
- trigger_error("Vaisseau ".$id." introuvable dans les données", E_USER_ERROR);
- }
- } else {
- switch ($id) {
- case 0:
- $armature = 200;
- break;
- case 1:
- $armature = 600;
- break;
- case 2:
- $armature = 800;
- break;
- case 3:
- $armature = 120;
- break;
- case 4:
- $armature = 100;
- break;
- case 5:
- $armature = 150;
- break;
- case 6:
- $armature = 300;
- break;
- case 7:
- $armature = 600;
- break;
- case 8:
- $armature = 600;
- break;
- case 9:
- $armature = 1400;
- break;
- case 10:
- $armature = 2800;
- break;
- case 11:
- $armature = 3000;
- break;
- case 12:
- $armature = 3000;
- break;
- case 13:
- $armature = 3600;
- break;
- case 14:
- $armature = 3600;
- break;
- case 15:
- $armature = 3500;
- break;
- case 16:
- $armature = 30000;
- break;
- default:
- trigger_error("Vaisseau ".$id." introuvable dans les données", E_USER_ERROR);
- }
- }
-
- //On tient compte des bonus
- //Bonus pour les vaisseaux léger
- if ($id <= 3) {
- //Bonus Alliage
- if ($planete->technologies[5]& dTechnologies::idToBit(20)) {
- $armature *= 1.30;
- } elseif ($planete->technologies[5]& dTechnologies::idToBit(19)) {
- $armature *= 1.20;
- } elseif ($planete->technologies[5]& dTechnologies::idToBit(18)) {
- $armature *= 1.10;
- }
- }
-
- //Bonus pour les vaisseaux moyen
- if ($id >= 4 && $id <= 7) {
- //Bonus Alliage avancé
- if ($planete->technologies[5]& dTechnologies::idToBit(23)) {
- $armature *= 1.30;
- } elseif ($planete->technologies[5]& dTechnologies::idToBit(22)) {
- $armature *= 1.20;
- } elseif ($planete->technologies[5]& dTechnologies::idToBit(21)) {
- $armature *= 1.10;
- }
- }
-
- //Bonus pour les vaisseaux lourds
- if ($id >= 8) {
- //Bonus Armure Moléculaire
- if ($planete->technologies[5]& dTechnologies::idToBit(26)) {
- $armature *= 1.30;
- } elseif ($planete->technologies[5]& dTechnologies::idToBit(25)) {
- $armature *= 1.20;
- } elseif ($planete->technologies[5]& dTechnologies::idToBit(24)) {
- $armature *= 1.10;
- }
- }
-
- return $armature;
- }
}
diff --git a/onyx2/include/Class/Donnees/technologies.php b/onyx2/include/Class/Donnees/technologies.php
index f6b9db0..b83d177 100644
--- a/onyx2/include/Class/Donnees/technologies.php
+++ b/onyx2/include/Class/Donnees/technologies.php
@@ -1046,11 +1046,8 @@ class dTechnologies implements Donnees
}
- public static function needed($object, surface $planete, $print = false, $race = null)
+ public static function needed($object, surface $planete, $print = false)
{
- if ($race == null) {
- $race = $planete->race;
- }
switch ($object[0]) {
case 0:
$tableau = array(
@@ -1491,125 +1488,64 @@ class dTechnologies implements Donnees
);
break;
case 7:
- if ($race == "humain") {
- $tableau = array(
- array(
- array('batiments', 6, 1)
- ),
- array(
- array("technologies", 7, 0),
- array('batiments', 6, 2)
- ),
- array(
- array("technologies", 7, 1),
- array('batiments', 6, 3)
- ),
- array(
- array("technologies", 7, 2),
- array('batiments', 6, 5)
- ),
- array(
- array("technologies", 7, 1),
- array('batiments', 6, 3)
- ),
- array(
- array("technologies", 7, 3),
- array('batiments', 6, 8)
- ),
- array(
- array("technologies", 7, 5),
- array('batiments', 6, 10)
- ),
- array(
- array("technologies", 7, 6),
- array('batiments', 6, 15)
- ),
- array(
- array("technologies", 7, 7),
- array('batiments', 6, 20)
- ),
- array(
- array("technologies", 7, 8),
- array('batiments', 6, 30)
- ),
- array(
- array("technologies", 7, 5),
- array('batiments', 6, 10)
- ),
- array(
- array("technologies", 7, 4),
- array('batiments', 6, 3)
- ),
- array(
- array('batiments', 6, 5)
- ),
- array(
- array("technologies", 7, 12)
- ),
- array(
- array("technologies", 7, 13)
- ),
- );
- } else {
- $tableau = array(
- array(
- array('batiments', 6, 1)
- ),
- array(
- array("technologies", 7, 0),
- array('batiments', 6, 2)
- ),
- array(
- array("technologies", 7, 1),
- array('batiments', 6, 3)
- ),
- array(
- array("technologies", 7, 2),
- array('batiments', 6, 5)
- ),
- array(
- array("technologies", 7, 1),
- array('batiments', 6, 3)
- ),
- array(
- array("technologies", 7, 3),
- array('batiments', 6, 8)
- ),
- array(
- array("technologies", 7, 5),
- array('batiments', 6, 10)
- ),
- array(
- array("technologies", 7, 6),
- array('batiments', 6, 15)
- ),
- array(
- array("technologies", 7, 7),
- array('batiments', 6, 20)
- ),
- array(
- array("technologies", 7, 8),
- array('batiments', 6, 30)
- ),
- array(
- array("technologies", 7, 5),
- array('batiments', 6, 10)
- ),
- array(
- array("technologies", 7, 5),
- array('batiments', 6, 10)
- ),
- array(
- array('batiments', 6, 5)
- ),
- array(
- array("technologies", 7, 12)
- ),
- array(
- array("technologies", 7, 13)
- ),
- );
- }
+ $tableau = array(
+ array(
+ array('batiments', 6, 1)
+ ),
+ array(
+ array("technologies", 7, 0),
+ array('batiments', 6, 2)
+ ),
+ array(
+ array("technologies", 7, 1),
+ array('batiments', 6, 3)
+ ),
+ array(
+ array("technologies", 7, 2),
+ array('batiments', 6, 5)
+ ),
+ array(
+ array("technologies", 7, 1),
+ array('batiments', 6, 3)
+ ),
+ array(
+ array("technologies", 7, 3),
+ array('batiments', 6, 8)
+ ),
+ array(
+ array("technologies", 7, 5),
+ array('batiments', 6, 10)
+ ),
+ array(
+ array("technologies", 7, 6),
+ array('batiments', 6, 15)
+ ),
+ array(
+ array("technologies", 7, 7),
+ array('batiments', 6, 20)
+ ),
+ array(
+ array("technologies", 7, 8),
+ array('batiments', 6, 30)
+ ),
+ array(
+ array("technologies", 7, 5),
+ array('batiments', 6, 10)
+ ),
+ array(
+ array("technologies", 7, 5),
+ array('batiments', 6, 10)
+ ),
+ array(
+ array('batiments', 6, 5)
+ ),
+ array(
+ array("technologies", 7, 12)
+ ),
+ array(
+ array("technologies", 7, 13)
+ ),
+ );
break;
case 8:
$tableau = array(
@@ -1617,9 +1553,6 @@ class dTechnologies implements Donnees
array("technologies", 1, 0),
array('batiments', 6, 2)
),
- array(
- array("technologies", 8, 0)
- ),
array(
array("technologies", 8, 1)
),
@@ -1671,6 +1604,9 @@ class dTechnologies implements Donnees
array(
array("technologies", 8, 17)
),
+ array(
+ array("technologies", 8, 18)
+ ),
);
break;
default:
@@ -1678,7 +1614,7 @@ class dTechnologies implements Donnees
}
if ($print) {
- return dDonnees::print_neededCheck($tableau[$object[1]], $planete, $race);
+ return dDonnees::print_neededCheck($tableau[$object[1]], $planete);
} else {
return dDonnees::neededCheck($tableau[$object[1]], $planete);
}
diff --git a/onyx2/include/Class/Donnees/terrestre.php b/onyx2/include/Class/Donnees/terrestre.php
index 3df2f67..005413e 100644
--- a/onyx2/include/Class/Donnees/terrestre.php
+++ b/onyx2/include/Class/Donnees/terrestre.php
@@ -471,15 +471,6 @@ class dTerrestre implements Donnees
$temps /= VITESSE;
//On tient compte des bonus
- //Bonus technologique de vitesse de construction : Constructions Planétaires
- if ($planete->technologies[2]& dTechnologies::idToBit(2)) {
- $temps /= 1.15;
- } elseif ($planete->technologies[2]& dTechnologies::idToBit(1)) {
- $temps /= 1.10;
- } elseif ($planete->technologies[2]& dTechnologies::idToBit(0)) {
- $temps /= 1.05;
- }
-
return ceil($temps/pow(1.25, ($planete->batiments[7] - $moins))) * $nombre;
}
@@ -747,274 +738,9 @@ class dTerrestre implements Donnees
}
if ($print) {
- return dDonnees::print_neededCheck($neededTerrestre[$id], $planete, $race);
+ return dDonnees::print_neededCheck($neededTerrestre[$id], $planete);
} else {
return dDonnees::neededCheck($neededTerrestre[$id], $planete);
}
}
-
-
- public static function attaque($id, surface $planete, $race = null)
- {
- if ($race == null) {
- $race = $planete->race;
- }
- //Les véhicules ne sont pas implémenté pour le moment
- if ($id < 8) {
- return 0;
- }
- if ($race == "humain") {
- switch ($id) {
- case 8:
- $attaque = 15;
- break;
- case 9:
- $attaque = 50;
- break;
- case 10:
- $attaque = 1000;
- break;
- case 11:
- $attaque = 2000;
- break;
- case 12:
- $attaque = 3000;
- break;
- case 13:
- $attaque = 3500;
- break;
- case 14:
- $attaque = 6000;
- break;
- case 15:
- $attaque = 15000;
- break;
- default:
- trigger_error("Vaisseau ".$id." introuvable dans les données", E_USER_ERROR);
- }
- } else {
- switch ($id) {
- case 8:
- $attaque = 15;
- break;
- case 9:
- $attaque = 50;
- break;
- case 10:
- $attaque = 1000;
- break;
- case 11:
- $attaque = 2000;
- break;
- case 12:
- $attaque = 3000;
- break;
- default:
- trigger_error("Vaisseau ".$id." introuvable dans les données", E_USER_ERROR);
- }
- }
-
- //On tient compte des bonus
- //Bonus pour les défenses légère
- if ($id == 8 || $id == 9) {
- //Bonus Projectiles haute densité
- if ($planete->technologies[4]& dTechnologies::idToBit(2)) {
- $attaque *= 1.30;
- } elseif ($planete->technologies[4]& dTechnologies::idToBit(1)) {
- $attaque *= 1.20;
- } elseif ($planete->technologies[4]& dTechnologies::idToBit(0)) {
- $attaque *= 1.10;
- }
- }
-
- //Bonus pour les défenses moyenne
- if ($id == 10 || $id == 11) {
- //Bonus Ballistique avancée
- if ($planete->technologies[4]& dTechnologies::idToBit(14)) {
- $attaque *= 1.30;
- } elseif ($planete->technologies[4]& dTechnologies::idToBit(13)) {
- $attaque *= 1.20;
- } elseif ($planete->technologies[4]& dTechnologies::idToBit(12)) {
- $attaque *= 1.10;
- }
- }
-
- //Bonus pour les défenses lourdes
- if ($id >= 12) {
- //Bonus Accélération Magnétique
- if ($planete->technologies[4]& dTechnologies::idToBit(17)) {
- $attaque *= 1.30;
- } elseif ($planete->technologies[4]& dTechnologies::idToBit(16)) {
- $attaque *= 1.20;
- } elseif ($planete->technologies[4]& dTechnologies::idToBit(15)) {
- $attaque *= 1.10;
- }
- }
-
- return $attaque;
- }
-
- public static function bouclier($id, surface $planete, $race = null)
- {
- if ($race == null) {
- $race = $planete->race;
- }
- //Les véhicules ne sont pas implémenté pour le moment
- if ($id < 8) {
- return 0;
- }
- if ($race == "humain") {
- switch ($id) {
- case 8:
- $bouclier = 25;
- break;
- case 9:
- $bouclier = 75;
- break;
- case 10:
- $bouclier = 1500;
- break;
- case 11:
- $bouclier = 1800;
- break;
- case 12:
- $bouclier = 4850;
- break;
- case 13:
- $bouclier = 5000;
- break;
- case 14:
- $bouclier = 5000;
- break;
- case 15:
- $bouclier = 7500;
- break;
- default:
- trigger_error("Vaisseau ".$id." introuvable dans les données", E_USER_ERROR);
- }
- } else {
- switch ($id) {
- case 8:
- $bouclier = 40;
- break;
- case 9:
- $bouclier = 120;
- break;
- case 10:
- $bouclier = 2600;
- break;
- case 11:
- $bouclier = 5000;
- break;
- case 12:
- $bouclier = 8600;
- break;
- default:
- trigger_error("Vaisseau ".$id." introuvable dans les données", E_USER_ERROR);
- }
- }
-
- //On tient compte des bonus
- return $bouclier;
- }
-
- public static function armature($id, surface $planete, $race = null)
- {
- if ($race == null) {
- $race = $planete->race;
- }
- //Les véhicules ne sont pas implémenté pour le moment
- if ($id < 8) {
- return 0;
- }
- if ($race == "humain") {
- switch ($id) {
- case 8:
- $armature = 25;
- break;
- case 9:
- $armature = 75;
- break;
- case 10:
- $armature = 1500;
- break;
- case 11:
- $armature = 1800;
- break;
- case 12:
- $armature = 4850;
- break;
- case 13:
- $armature = 5000;
- break;
- case 14:
- $armature = 5000;
- break;
- case 15:
- $armature = 7500;
- break;
- default:
- trigger_error("Vaisseau ".$id." introuvable dans les données", E_USER_ERROR);
- }
- } else {
- switch ($id) {
- case 8:
- $armature = 10;
- break;
- case 9:
- $armature = 30;
- break;
- case 10:
- $armature = 400;
- break;
- case 11:
- $armature = 700;
- break;
- case 12:
- $armature = 1400;
- break;
- default:
- trigger_error("Vaisseau ".$id." introuvable dans les données", E_USER_ERROR);
- }
- }
-
- //On tient compte des bonus
- //Bonus pour les défenses légères
- if ($id == 8 || $id == 9) {
- //Bonus Alliage
- if ($planete->technologies[5]& dTechnologies::idToBit(20)) {
- $armature *= 1.30;
- } elseif ($planete->technologies[5]& dTechnologies::idToBit(19)) {
- $armature *= 1.20;
- } elseif ($planete->technologies[5]& dTechnologies::idToBit(18)) {
- $armature *= 1.10;
- }
- }
-
- //Bonus pour les défense moyennes
- if ($id == 10 || $id == 11) {
- //Bonus Alliage avancé
- if ($planete->technologies[5]& dTechnologies::idToBit(23)) {
- $armature *= 1.30;
- } elseif ($planete->technologies[5]& dTechnologies::idToBit(22)) {
- $armature *= 1.20;
- } elseif ($planete->technologies[5]& dTechnologies::idToBit(21)) {
- $armature *= 1.10;
- }
- }
-
- //Bonus pour les défenses lourdes
- if ($id >= 12) {
- //Bonus Armure Moléculaire
- if ($planete->technologies[5]& dTechnologies::idToBit(26)) {
- $armature *= 1.30;
- } elseif ($planete->technologies[5]& dTechnologies::idToBit(25)) {
- $armature *= 1.20;
- } elseif ($planete->technologies[5]& dTechnologies::idToBit(24)) {
- $armature *= 1.10;
- }
- }
-
- return $armature;
- }
}
diff --git a/onyx2/include/Class/flotte.php b/onyx2/include/Class/flotte.php
index 2753972..1a7559c 100644
--- a/onyx2/include/Class/flotte.php
+++ b/onyx2/include/Class/flotte.php
@@ -88,13 +88,12 @@ class Flotte
public function calculer()
{
- global $planete;
$this->nb_vais = 0;
//Calcul de la capacité maximale d'embarquement de la flotte
foreach ($this->vaisseaux as $key => $vais) {
$this->nb_vais += $vais;
- $this->contenuMax += dSpatial::tailleCales($key, $planete) * $vais;
+ $this->contenuMax += dSpatial::tailleCales($key) * $vais;
}
}
@@ -266,20 +265,20 @@ class Flotte
//Calcul du temps de déplacement entre planètes
if ($start_planete->ss == $end_systeme && $start_planete->galaxie == $end_galaxie) {
- $temps[0][$key] = (1000/dSpatial::vitesseP($key, $start_planete)) * (1 + 0.1 * $diff_position);
+ $temps[0][$key] = (1000/dSpatial::vitesseP($key)) * (1 + 0.1 * $diff_position);
$temps[1][$key] = $temps[2][$key] = 0;
}
//Calcul du temps de déplacement entre système
elseif ($start_planete->galaxie == $end_galaxie) {
- $temps[0][$key] = (1000/dSpatial::vitesseP($key, $start_planete)) * (1 + 0.1 * ($diff_centre_position_start + $diff_centre_position_end));
- $temps[1][$key] = (2000/dSpatial::vitesseS($key, $start_planete)) * (2 + 1 * $diff_systeme);
+ $temps[0][$key] = (1000/dSpatial::vitesseP($key)) * (1 + 0.1 * ($diff_centre_position_start + $diff_centre_position_end));
+ $temps[1][$key] = (2000/dSpatial::vitesseS($key)) * (2 + 1 * $diff_systeme);
$temps[2][$key] = 0;
}
//Calcul du temps de déplacement entre galaxies
else {
- $temps[0][$key] = (1000/dSpatial::vitesseP($key, $start_planete)) * (1 + 0.1 * ($diff_centre_position_start + $diff_centre_position_end));
- $temps[1][$key] = (2000/dSpatial::vitesseS($key, $start_planete)) * (2 + 1 * ($diff_centre_systeme_start + $diff_centre_systeme_end));
- $temps[2][$key] = (5000/dSpatial::vitesseG($key, $start_planete)) * (2 + 1.5 * $diff_galaxie);
+ $temps[0][$key] = (1000/dSpatial::vitesseP($key)) * (1 + 0.1 * ($diff_centre_position_start + $diff_centre_position_end));
+ $temps[1][$key] = (2000/dSpatial::vitesseS($key)) * (2 + 1 * ($diff_centre_systeme_start + $diff_centre_systeme_end));
+ $temps[2][$key] = (5000/dSpatial::vitesseG($key)) * (2 + 1.5 * $diff_galaxie);
}
//Calcul du bonus pour le réacteur à combustion
@@ -333,7 +332,7 @@ class Flotte
}
//Si les chasseurs peuvent rentrer dans les cales des vaisseaux, on les enlèves
- if ($contenuDispo - ceil($conso[0]+$conso[1]+$conso[2]) - ($vaisseaux[4] * dSpatial::tailleCales(4, $start_planete) + $vaisseaux[5] * dSpatial::tailleCales(5, $start_planete)) >= ($vaisseaux[4] + $vaisseaux[5]) * 200) {
+ if ($contenuDispo - ceil($conso[0]+$conso[1]+$conso[2]) - ($vaisseaux[4] * dSpatial::tailleCales(4) + $vaisseaux[5] * dSpatial::tailleCales(5)) >= ($vaisseaux[4] + $vaisseaux[5]) * 200) {
$temps[2][4] = $temps[2][5] = $temps[1][4] = $temps[1][5] = $temps[0][4] = $temps[0][5] = 0;
}
@@ -348,21 +347,6 @@ class Flotte
}
- public function calcStockage($vaisseaux, surface $planete)
- {
- global $LANG;
-
- $contenuMax = 0;
- foreach ($vaisseaux as $key => $vais) {
- if (!isset($LANG[$planete->race]["vaisseaux"]["noms_sing"][$key])) {
- continue;
- }
- $contenuMax += dSpatial::tailleCales($key, $planete) * $vais;
- }
- return $contenuMax;
- }
-
-
public function check_mission()
{
//On vérifie qu'un calcul ne soit pas déjà en cours
@@ -562,26 +546,6 @@ class Flotte
}
- public function attaquer()
- {
- //Si la planète d'arrivé n'est pas chargée, on charge les planètes
- if (is_numeric($this->end_planete)) {
- $this->load_planete();
- }
-
- //On charge la classe des combats
-
- //On réalise le combat
-
- //On envoit le résultat
-
- //On update la flotte avec les pertes et gains
-
- //On dis à la flotte de rentrer
- $this->statut = 1;
- $this->addModifFlotte("statut");
- }
-
public function espionner()
{
//Si la planète d'arrivé n'est pas chargée, on charge les planètes
@@ -593,17 +557,17 @@ class Flotte
if (($this->start_planete->technologies[1]& 67108864) == 67108864) {
$espionnage_A = 3;
} elseif (($this->start_planete->technologies[1]& 33554432) == 33554432) {
- $espionnage_A = 2;
+ $espionnage_A = 3;
} elseif (($this->start_planete->technologies[1]& 16777216) == 16777216) {
- $espionnage_A = 1;
+ $espionnage_A = 3;
} else {
$espionnage_A = 0;
}
- if (($this->end_planete->technologies[1]& 536870912) == 536870912) {
+ if (($this->start_planete->technologies[1]& 536870912) == 536870912) {
$contreespionnage_B = 3;
- } elseif (($this->end_planete->technologies[1]& 268435456) == 268435456) {
+ } elseif (($this->start_planete->technologies[1]& 268435456) == 268435456) {
$contreespionnage_B = 2;
- } elseif (($this->end_planete->technologies[1]& 134217728) == 134217728) {
+ } elseif (($this->start_planete->technologies[1]& 134217728) == 134217728) {
$contreespionnage_B = 1;
} else {
$contreespionnage_B = 0;
@@ -612,20 +576,8 @@ class Flotte
//Création du rapport
$rapport = new Rapport(5, $this->start_planete, $this->end_planete, $this->start_time + $this->end_time);
$rapport->addInfo($this->end_planete, 0);
- //Rend aléatoire le niveau affiché des bâtiments
- $diff_esp = $espionnage_A - $contreespionnage_B;
- //Il y a au moins 2 niveaux d'erreur (soit 1 positif et 1 négatif)
- if ($diff_esp == 0) {
- $diff_esp = 1;
- }
- $rapport->addInfo($diff_esp, 1);
- //Où x est le résultat de cette formule, si x >= y, ça donne accès a plus d'informations
- // si y >= 1 : ressources
- // si y >= 2 : batiment
- // si y >= 3 : défenses
- // si y >= 4 : flottes
- $rapport->addInfo($espionnage_A + 2 - $contreespionnage_B + 1, 2);
- //Si le joueur a au moins le niveau 1 du contre-espionnage, on le prévient qu'il a été espionné, sinon il n'en sait rien
+ $rapport->addInfo($contreespionnage_B/$espionnage_A/10, 1);
+ $rapport->addInfo($espionnage_A+2-$contreespionnage_B+1, 2);
$rapport->addInfo($contreespionnage_B, 3);
$rapport->send();
diff --git a/onyx2/include/Class/planete.php b/onyx2/include/Class/planete.php
index 43ee8fb..a65e153 100644
--- a/onyx2/include/Class/planete.php
+++ b/onyx2/include/Class/planete.php
@@ -128,7 +128,7 @@ class Planete extends Surface
$this->file_cas = new FileCaserne();
}
- foreach ($terrestreVAR[$this->race] as $ter) {
+ foreach ($terrestreVAR as $ter) {
$this->terrestres[] = $plan[$ter];
}
if (!empty($plan["file_ter"])) {
@@ -273,12 +273,11 @@ class Planete extends Surface
$popPlus *= 1.05;
} //Démocratie : 5 % de population qui arrive en plus.
- //Bonus techno immigration coloniale
- if ($this->technologies[3] & 4) {
+ if ($this->technologies[2] & 4) {
$popPlus *= 1.15;
- } elseif ($this->technologies[3] & 2) {
+ } elseif ($this->technologies[2] & 2) {
$popPlus *= 1.10;
- } elseif ($this->technologies[3] & 1) {
+ } elseif ($this->technologies[2] & 1) {
$popPlus *= 1.05;
}
@@ -672,27 +671,7 @@ class Planete extends Surface
$prod_hy -= $conso_h;
if ($retarray) {
- return array(
- array(
- ceil($this->coeff_bat[0]*100),
- ceil($this->coeff_bat[1]*100),
- ceil($this->coeff_bat[2]*100),
- ceil($this->coeff_bat[3]*100),
- ceil($this->coeff_bat[4]*100)),
- array(
- $prod_met,
- $prod_cri,
- $prod_hy + $conso_h,
- $energie_s*$this->coeff_bat[3],
- $energie_f*$this->coeff_bat[4]),
- array(
- $energie_m*$this->coeff_bat[0],
- $energie_c*$this->coeff_bat[1],
- $energie_h*$this->coeff_bat[2],
- $conso_h,
- ($energie_s*$this->coeff_bat[3] + $energie_f*$this->coeff_bat[4])-($energie_m*$this->coeff_bat[0] + $energie_c*$this->coeff_bat[1] + $energie_h*$this->coeff_bat[2])
- )
- );
+ return array(array(ceil($this->coeff_bat[0]*100), ceil($this->coeff_bat[1]*100), ceil($this->coeff_bat[2]*100), ceil($this->coeff_bat[3]*100), ceil($this->coeff_bat[4]*100)), array($prod_met, $prod_cri, $prod_hy + $conso_h, $energie_s*$this->coeff_bat[3], $energie_f*$this->coeff_bat[4]), array($energie_m*$this->coeff_bat[0], $energie_c*$this->coeff_bat[1], $energie_h*$this->coeff_bat[2], $conso_h, ($energie_s*$this->coeff_bat[3] + $energie_f*$this->coeff_bat[4])-($energie_m*$this->coeff_bat[0] + $energie_c*$this->coeff_bat[1] + $energie_h*$this->coeff_bat[2])));
} else {
return array($prod_met, $prod_cri, $prod_hy);
}
@@ -705,17 +684,21 @@ class Planete extends Surface
$this->id_user = $id_user;
//Génération du nombre de case et de l'image en fonction de la position dans le système
- $this->image = mt_rand(1, 150);
if ($mere) {
$this->cases = 225;
+ $this->image = mt_rand(1, 19);
} elseif ($this->position > $VAR['nb_planete']*0.75) {
$this->cases = mt_rand(200, 255);
+ $this->image = mt_rand(1, 19);
} elseif ($this->position > $VAR['nb_planete']/2) {
$this->cases = mt_rand(250, 300);
+ $this->image = mt_rand(1, 19);
} elseif ($this->position > $VAR['nb_planete']/4) {
$this->cases = mt_rand(175, 260);
+ $this->image = mt_rand(1, 19);
} else {
$this->cases = mt_rand(150, 220);
+ $this->image = mt_rand(1, 19);
}
//Définition des principaux paramètres de la planète
@@ -729,10 +712,7 @@ class Planete extends Surface
$this->cristal = 700;
$this->hydrogene = 0;
- // on met le moment où la planete a été crée, comme ça, à la première actualisation, on ne remplit pas les silos
- $this->timestamp = time();
-
- $this->modif = array("id_user", "nom_planete", "galaxie", "ss", "position", "image", "cases", "timestamp", "metal", "cristal", "hydrogene");
+ $this->modif = array("id_user", "nom_planete", "galaxie", "ss", "position", "image", "cases");
}
/**
@@ -764,11 +744,7 @@ class Planete extends Surface
global ${$calc.'VAR'};
}
- if ($calc == "terrestre") {
- $outNomChamps[] = ${$calc.'VAR'}[$this->race][$modif[1]];
- } else {
- $outNomChamps[] = ${$calc.'VAR'}[$modif[1]];
- }
+ $outNomChamps[] = ${$calc.'VAR'}[$modif[1]];
$outValeurs[] = $this->{$modif[0]}[$modif[1]];
} elseif ($modif == "force") {
continue;
@@ -794,11 +770,6 @@ class Planete extends Surface
}
foreach ($this->{$modif} as $j => $value) {
- if ($calc == "terrestre") {
- $outNomChamps[] = ${$calc.'VAR'}[$this->race][$j];
- } else {
- $outNomChamps[] = ${$calc.'VAR'}[$j];
- }
$outNomChamps[] = ${$calc.'VAR'}[$j];
$outValeurs[] = $value;
}
@@ -825,11 +796,7 @@ class Planete extends Surface
trigger_error('Impossible de trouver les données pour '.$modif[0], E_USER_ERROR);
}
- if ($calc == "terrestre") {
- $out[] = ${$calc.'VAR'}[$this->race][$modif[1]]." = ".$this->{$modif[0]}[$modif[1]];
- } else {
- $out[] = ${$calc.'VAR'}[$modif[1]]." = ".$this->{$modif[0]}[$modif[1]];
- }
+ $out[] = ${$calc.'VAR'}[$modif[1]]." = ".$this->{$modif[0]}[$modif[1]];
} elseif ($modif == "force") {
$out[] = "timestamp = timestamp";
} elseif (!is_array($this->{$modif}) && !is_object($this->{$modif})) {
@@ -852,11 +819,7 @@ class Planete extends Surface
}
foreach ($this->{$modif} as $j => $value) {
- if ($calc == "terrestre") {
- $out[] = ${$calc.'VAR'}[$this->race][$j]." = ".$value;
- } else {
- $out[] = ${$calc.'VAR'}[$j]." = ".$value;
- }
+ $out[] = ${$calc.'VAR'}[$j]." = ".$value;
}
}
}
diff --git a/onyx2/include/Class/rapport.php b/onyx2/include/Class/rapport.php
index 9226a5e..58969a5 100644
--- a/onyx2/include/Class/rapport.php
+++ b/onyx2/include/Class/rapport.php
@@ -18,8 +18,6 @@ class Rapport
public $rapportA = "";
public $rapportB = "";
- public $table = "mail";
-
/**
* Constructor
* @access protected
@@ -91,42 +89,36 @@ class Rapport
if ($this->var[2] > 2) {
$this->rapportA .= "
Niveau | Bâtiment |
---|---|
".rand(($batiment - $this->var[1]), ($batiment + $this->var[1]))." | ".$LANG[$this->var[0]->race]["batiments"]["noms_sing"][$key]." |
".rand($batiment * (1 - $this->var[1]), $batiment * (1 + $this->var[1]))." | ".$LANG[$this->var[0]->race]["batiments"]["noms_sing"][$key]." |
Nombre | Vaisseaux |
---|---|
".rand(($vaisseau - $this->var[1]), ($vaisseau + $this->var[1]))." | ".$LANG[$this->var[0]->race]["vaisseaux"]["noms_sing"][$key]." |
".rand($vaisseau * (1 - $this->var[1]), $vaisseau * (1 + $this->var[1]))." | ".$LANG[$this->var[0]->race]["vaisseaux"]["noms_sing"][$key]." |
Nombre | Défenses |
---|---|
".rand($unite * floor(1 - $this->var[1]), $unite * ceil(1 + $this->var[1]))." | ".$LANG[$this->var[0]->race]["terrestre"]["noms_sing"][$key]." |
".rand($unite * (1 - $this->var[1]), $unite * (1 + $this->var[1]))." | ".$LANG[$this->var[0]->race]["terrestre"]["noms_sing"][$key]." |
";
- echo "Major = $maj s, ".floor($maj/60)."min, ".floor($maj/3600)."h, ".floor($maj/86400)."day
";
- echo "Min = $min s, ".floor($min/60)."min, ".floor($min/3600)."h, ".floor($min/86400)."day
";
- echo "Format=$format
";
- }
- */
-
+ if( 0 ) { // DEBUG
+ echo " Start =".date("Y-m-d H:i:s",$aStartTime)."
";
+ echo " End =".date("Y-m-d H:i:s",$aEndTime)."
";
+ echo "Adj Start =".date("Y-m-d H:i:s",$adjstart)."
";
+ echo "Adj End =".date("Y-m-d H:i:s",$adjend)."
";
+ echo "Major = $maj s, ".floor($maj/60)."min, ".floor($maj/3600)."h, ".floor($maj/86400)."day
";
+ echo "Min = $min s, ".floor($min/60)."min, ".floor($min/3600)."h, ".floor($min/86400)."day
";
+ echo "Format=$format
";
+ }
+ */
+
if ($this->iStartTimeAlign !== false && $this->iStartAlign !== false) {
JpGraphError::RaiseL(3001);
//('It is only possible to use either SetDateAlign() or SetTimeAlign() but not both');
@@ -491,7 +485,7 @@ class DateScale extends LinearScale
}
-
+
if ($this->iStartAlign !== false) {
if ($this->iStartAlign >= 30) {
$adjstart = $this->AdjStartDate($aStartTime, $this->iStartAlign-30);
diff --git a/onyx2/include/jpgraph/jpgraph_errhandler.inc.php b/onyx2/include/jpgraph/jpgraph_errhandler.inc.php
index fbd867c..325b357 100644
--- a/onyx2/include/jpgraph/jpgraph_errhandler.inc.php
+++ b/onyx2/include/jpgraph/jpgraph_errhandler.inc.php
@@ -1,22 +1,15 @@
Raise($aMsg, $aHalt);
}
public static function SetErrLocale($aLoc)
{
@@ -117,91 +112,12 @@ class JpGraphError
}
public static function RaiseL($errnbr, $a1=null, $a2=null, $a3=null, $a4=null, $a5=null)
{
- throw new JpGraphExceptionL($errnbr, $a1, $a2, $a3, $a4, $a5);
- }
- public static function SetImageFlag($aFlg=true)
- {
- self::$__iImgFlg = $aFlg;
- }
- public static function GetImageFlag()
- {
- return self::$__iImgFlg;
- }
- public static function SetLogFile($aFile)
- {
- self::$__iLogFile = $aFile;
- }
- public static function GetLogFile()
- {
- return self::$__iLogFile;
- }
- public static function SetTitle($aTitle)
- {
- self::$__iTitle = $aTitle;
- }
- public static function GetTitle()
- {
- return self::$__iTitle;
+ $t = new ErrMsgText();
+ $msg = $t->Get($errnbr, $a1, $a2, $a3, $a4, $a5);
+ self::$__jpg_err->Raise($msg);
}
}
-class JpGraphException extends Exception
-{
- // Redefine the exception so message isn't optional
- public function __construct($message, $code = 0)
- {
- // make sure everything is assigned properly
- parent::__construct($message, $code);
- }
- // custom string representation of object
- public function _toString()
- {
- return __CLASS__ . ": [{$this->code}]: {$this->message} at " . basename($this->getFile()) . ":" . $this->getLine() . "\n" . $this->getTraceAsString() . "\n";
- }
- // custom representation of error as an image
- public function Stroke()
- {
- if (JpGraphError::GetImageFlag()) {
- $errobj = new JpGraphErrObjectImg();
- $errobj->SetTitle(JpGraphError::GetTitle());
- } else {
- $errobj = new JpGraphErrObject();
- $errobj->SetTitle(JpGraphError::GetTitle());
- $errobj->SetStrokeDest(JpGraphError::GetLogFile());
- }
- $errobj->Raise($this->getMessage());
- }
- public static function defaultHandler(Throwable $exception)
- {
- global $__jpg_OldHandler;
- if ($exception instanceof JpGraphException) {
- $exception->Stroke();
- } else {
- // Restore old handler
- if ($__jpg_OldHandler !== null) {
- set_exception_handler($__jpg_OldHandler);
- }
- throw $exception;
- }
- }
-}
-
-class JpGraphExceptionL extends JpGraphException
-{
- // Redefine the exception so message isn't optional
- public function __construct($errcode, $a1=null, $a2=null, $a3=null, $a4=null, $a5=null)
- {
- // make sure everything is assigned properly
- $errtxt = new ErrMsgText();
- JpGraphError::SetTitle('JpGraph Error: '.$errcode);
- parent::__construct($errtxt->Get($errcode, $a1, $a2, $a3, $a4, $a5), 0);
- }
-}
-
-// Setup the default handler
-global $__jpg_OldHandler;
-$__jpg_OldHandler = set_exception_handler(array('JpGraphException','defaultHandler'));
-
//
// First of all set up a default error handler
//
@@ -211,11 +127,11 @@ $__jpg_OldHandler = set_exception_handler(array('JpGraphException','defaultHandl
//=============================================================
class JpGraphErrObject
{
- protected $iTitle = "JpGraph error: ";
+ protected $iTitle = "JpGraph Error";
protected $iDest = false;
- public function __construct()
+ public function JpGraphErrObject()
{
// Empty. Reserved for future use
}
@@ -231,31 +147,20 @@ class JpGraphErrObject
}
// If aHalt is true then execution can't continue. Typical used for fatal errors
- public function Raise($aMsg, $aHalt=false)
+ public function Raise($aMsg, $aHalt=true)
{
- if ($this->iDest != '') {
- if ($this->iDest == 'syslog') {
- error_log($this->iTitle.$aMsg);
- } else {
- $str = '['.date('r').'] '.$this->iTitle.$aMsg."\n";
- $f = @fopen($this->iDest, 'a');
- if ($f) {
- @fwrite($f, $str);
- @fclose($f);
- }
+ $aMsg = $this->iTitle.' '.$aMsg;
+ if ($this->iDest) {
+ $f = @fopen($this->iDest, 'a');
+ if ($f) {
+ @fwrite($f, $aMsg);
+ @fclose($f);
}
} else {
- $aMsg = $this->iTitle.$aMsg;
- // Check SAPI and if we are called from the command line
- // send the error to STDERR instead
- if (PHP_SAPI == 'cli') {
- fwrite(STDERR, $aMsg);
- } else {
- echo $aMsg;
- }
+ echo $aMsg;
}
if ($aHalt) {
- exit(1);
+ die();
}
}
}
@@ -265,32 +170,25 @@ class JpGraphErrObject
//==============================================================
class JpGraphErrObjectImg extends JpGraphErrObject
{
- public function __construct()
- {
- parent::__construct();
- // Empty. Reserved for future use
- }
-
public function Raise($aMsg, $aHalt=true)
{
$img_iconerror =
- 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAMAAAC7IEhfAAAAaV'.
- 'BMVEX//////2Xy8mLl5V/Z2VvMzFi/v1WyslKlpU+ZmUyMjEh/'.
- 'f0VyckJlZT9YWDxMTDjAwMDy8sLl5bnY2K/MzKW/v5yyspKlpY'.
- 'iYmH+MjHY/PzV/f2xycmJlZVlZWU9MTEXY2Ms/PzwyMjLFTjea'.
- 'AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACx'.
- 'IAAAsSAdLdfvwAAAAHdElNRQfTBgISOCqusfs5AAABLUlEQVR4'.
- '2tWV3XKCMBBGWfkranCIVClKLd/7P2Q3QsgCxjDTq+6FE2cPH+'.
- 'xJ0Ogn2lQbsT+Wrs+buAZAV4W5T6Bs0YXBBwpKgEuIu+JERAX6'.
- 'wM2rHjmDdEITmsQEEmWADgZm6rAjhXsoMGY9B/NZBwJzBvn+e3'.
- 'wHntCAJdGu9SviwIwoZVDxPB9+Rc0TSEbQr0j3SA1gwdSn6Db0'.
- '6Tm1KfV6yzWGQO7zdpvyKLKBDmRFjzeB3LYgK7r6A/noDAfjtS'.
- 'IXaIzbJSv6WgUebTMV4EoRB8a2mQiQjgtF91HdKDKZ1gtFtQjk'.
- 'YcWaR5OKOhkYt+ZsTFdJRfPAApOpQYJTNHvCRSJR6SJngQadfc'.
- 'vd69OLMddVOPCGVnmrFD8bVYd3JXfxXPtLR/+mtv59/ALWiiMx'.
- 'qL72fwAAAABJRU5ErkJggg==' ;
+ 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAMAAAC7IEhfAAAAaV'.
+ 'BMVEX//////2Xy8mLl5V/Z2VvMzFi/v1WyslKlpU+ZmUyMjEh/'.
+ 'f0VyckJlZT9YWDxMTDjAwMDy8sLl5bnY2K/MzKW/v5yyspKlpY'.
+ 'iYmH+MjHY/PzV/f2xycmJlZVlZWU9MTEXY2Ms/PzwyMjLFTjea'.
+ 'AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACx'.
+ 'IAAAsSAdLdfvwAAAAHdElNRQfTBgISOCqusfs5AAABLUlEQVR4'.
+ '2tWV3XKCMBBGWfkranCIVClKLd/7P2Q3QsgCxjDTq+6FE2cPH+'.
+ 'xJ0Ogn2lQbsT+Wrs+buAZAV4W5T6Bs0YXBBwpKgEuIu+JERAX6'.
+ 'wM2rHjmDdEITmsQEEmWADgZm6rAjhXsoMGY9B/NZBwJzBvn+e3'.
+ 'wHntCAJdGu9SviwIwoZVDxPB9+Rc0TSEbQr0j3SA1gwdSn6Db0'.
+ '6Tm1KfV6yzWGQO7zdpvyKLKBDmRFjzeB3LYgK7r6A/noDAfjtS'.
+ 'IXaIzbJSv6WgUebTMV4EoRB8a2mQiQjgtF91HdKDKZ1gtFtQjk'.
+ 'YcWaR5OKOhkYt+ZsTFdJRfPAApOpQYJTNHvCRSJR6SJngQadfc'.
+ 'vd69OLMddVOPCGVnmrFD8bVYd3JXfxXPtLR/+mtv59/ALWiiMx'.
+ 'qL72fwAAAABJRU5ErkJggg==' ;
-
if (function_exists("imagetypes")) {
$supported = imagetypes();
} else {
@@ -300,7 +198,7 @@ class JpGraphErrObjectImg extends JpGraphErrObject
if (!function_exists('imagecreatefromstring')) {
$supported = 0;
}
-
+
if (ob_get_length() || headers_sent() || !($supported & IMG_PNG)) {
// Special case for headers already sent or that the installation doesn't support
// the PNG format (which the error icon is encoded in).
@@ -326,7 +224,7 @@ class JpGraphErrObjectImg extends JpGraphErrObject
$img->FilledRectangle(5, 5, $w-1, $h-1, 10);
$img->SetColor("gray:0.7");
$img->FilledRectangle(5, 5, $w-3, $h-3, 10);
-
+
// Window background
$img->SetColor("lightblue");
$img->FilledRectangle(1, 1, $w-5, $h-5);
@@ -336,7 +234,7 @@ class JpGraphErrObjectImg extends JpGraphErrObject
$img->SetColor("black");
$img->Rectangle(1, 1, $w-5, $h-5);
$img->Rectangle(0, 0, $w-4, $h-4);
-
+
// Window top row
$img->SetColor("darkred");
for ($y=3; $y < 18; $y += 2) {
@@ -359,18 +257,17 @@ class JpGraphErrObjectImg extends JpGraphErrObject
// Window title
$m = floor($w/2-5);
- $l = 110;
+ $l = 100;
$img->SetColor("lightgray:1.3");
$img->FilledRectangle($m-$l, 2, $m+$l, 16);
// Stroke text
$img->SetColor("darkred");
$img->SetFont(FF_FONT2, FS_BOLD);
- $img->StrokeText($m-90, 15, $this->iTitle);
+ $img->StrokeText($m-50, 15, $this->iTitle);
$img->SetColor("black");
$img->SetFont(FF_FONT1, FS_NORMAL);
$txt = new Text($aMsg, 52, 25);
- $txt->SetFont(FF_FONT1);
$txt->Align("left", "top");
$txt->Stroke($img);
if ($this->iDest) {
@@ -386,7 +283,9 @@ class JpGraphErrObjectImg extends JpGraphErrObject
}
-
-if (! USE_IMAGE_ERROR_HANDLER) {
- JpGraphError::SetImageFlag(false);
+// Install the default error handler
+if (USE_IMAGE_ERROR_HANDLER) {
+ JpGraphError::Install("JpGraphErrObjectImg");
+} else {
+ JpGraphError::Install("JpGraphErrObject");
}
diff --git a/onyx2/include/jpgraph/jpgraph_error.php b/onyx2/include/jpgraph/jpgraph_error.php
index daac8ef..de9fcaa 100644
--- a/onyx2/include/jpgraph/jpgraph_error.php
+++ b/onyx2/include/jpgraph/jpgraph_error.php
@@ -1,14 +1,14 @@
Plot($datay, $datax);
$this->numpoints /= 2;
}
//---------------
// PUBLIC METHODS
-
+
// Gets called before any axis are stroked
public function PreStrokeAdjust($graph)
{
@@ -43,7 +42,7 @@ class ErrorPlot extends Plot
$graph->SetTextScaleOff($b);
//$graph->xaxis->scale->ticks->SupressMinorTickMarks();
}
-
+
// Method description
public function Stroke($img, $xscale, $yscale)
{
@@ -71,7 +70,7 @@ class ErrorPlot extends Plot
}
if (!is_numeric($x) ||
- !is_numeric($this->coords[0][$i*2]) || !is_numeric($this->coords[0][$i*2+1])) {
+ !is_numeric($this->coords[0][$i*2]) || !is_numeric($this->coords[0][$i*2+1])) {
continue;
}
@@ -98,9 +97,9 @@ class ErrorLinePlot extends ErrorPlot
public $line=null;
//---------------
// CONSTRUCTOR
- public function __construct($datay, $datax=false)
+ public function ErrorLinePlot($datay, $datax=false)
{
- parent::__construct($datay, $datax);
+ $this->ErrorPlot($datay, $datax);
// Calculate line coordinates as the average of the error limits
$n = count($datay);
for ($i=0; $i < $n; $i+=2) {
@@ -118,7 +117,7 @@ class ErrorLinePlot extends ErrorPlot
}
$this->line->Legend($graph);
}
-
+
public function Stroke($img, $xscale, $yscale)
{
parent::Stroke($img, $xscale, $yscale);
@@ -137,7 +136,7 @@ class LineErrorPlot extends ErrorPlot
//---------------
// CONSTRUCTOR
// Data is (val, errdeltamin, errdeltamax)
- public function __construct($datay, $datax=false)
+ public function LineErrorPlot($datay, $datax=false)
{
$ly=array();
$ey=array();
@@ -151,7 +150,7 @@ class LineErrorPlot extends ErrorPlot
$ey[]=$datay[$i]+$datay[$i+1];
$ey[]=$datay[$i]+$datay[$i+2];
}
- parent::__construct($ey, $datax);
+ $this->ErrorPlot($ey, $datax);
$this->line=new LinePlot($ly, $datax);
}
@@ -164,7 +163,7 @@ class LineErrorPlot extends ErrorPlot
}
$this->line->Legend($graph);
}
-
+
public function Stroke($img, $xscale, $yscale)
{
parent::Stroke($img, $xscale, $yscale);
diff --git a/onyx2/include/jpgraph/jpgraph_flags.php b/onyx2/include/jpgraph/jpgraph_flags.php
index 7f0e85d..383e55a 100644
--- a/onyx2/include/jpgraph/jpgraph_flags.php
+++ b/onyx2/include/jpgraph/jpgraph_flags.php
@@ -1,11 +1,11 @@
iFlagSetMap[$aSize].'.dat';
- $fp = fopen($file, 'rb');
- $rawdata = fread($fp, filesize($file));
- $this->iFlagData = unserialize($rawdata);
- break;
- default:
- JpGraphError::RaiseL(5001, $aSize);
- //('Unknown flag size. ('.$aSize.')');
- }
+ case FLAGSIZE1:
+ case FLAGSIZE2:
+ case FLAGSIZE3:
+ case FLAGSIZE4:
+ $file = dirname(__FILE__).'/'.$this->iFlagSetMap[$aSize].'.dat';
+ $fp = fopen($file, 'rb');
+ $rawdata = fread($fp, filesize($file));
+ $this->iFlagData = unserialize($rawdata);
+ break;
+ default:
+ JpGraphError::RaiseL(5001, $aSize);
+//('Unknown flag size. ('.$aSize.')');
+ }
$this->iFlagCount = count($this->iCountryNameMap);
}
@@ -304,7 +304,7 @@ class FlagImages
return Image::CreateFromString($d);
} else {
JpGraphError::RaiseL(5002, $aIdx);
- //("Flag index \"�$aIdx\" does not exist.");
+ //("Flag index \"$aIdx\" does not exist.");
}
}
@@ -313,9 +313,10 @@ class FlagImages
$aOrd--;
$n = count($this->iOrdIdx);
if ($n == 0) {
+ reset($this->iCountryNameMap);
$this->iOrdIdx=array();
$i=0;
- foreach ($this->iCountryNameMap as $key => $val) {
+ while (list($key, $val) = each($this->iCountryNameMap)) {
$this->iOrdIdx[$i++] = array($val,$key);
}
$tmp=$this->iOrdIdx[$aOrd];
@@ -341,16 +342,18 @@ class FlagImages
$found=false;
$aName = strtolower($aName);
$nlen = strlen($aName);
+ reset($this->iCountryNameMap);
// Start by trying to match exact index name
- foreach ($this->iCountryNameMap as $key => $val) {
+ while (list($key, $val) = each($this->iCountryNameMap)) {
if ($nlen == strlen($val) && $val == $aName) {
$found=true;
break;
}
}
if (!$found) {
+ reset($this->iCountryNameMap);
// If the exact index doesn't work try a (partial) full name
- foreach ($this->iCountryNameMap as $key => $val) {
+ while (list($key, $val) = each($this->iCountryNameMap)) {
if (strpos(strtolower($key), $aName) !== false) {
$found=true;
break;
diff --git a/onyx2/include/jpgraph/jpgraph_gantt.php b/onyx2/include/jpgraph/jpgraph_gantt.php
index a6b098a..00708cc 100644
--- a/onyx2/include/jpgraph/jpgraph_gantt.php
+++ b/onyx2/include/jpgraph/jpgraph_gantt.php
@@ -1,127 +1,127 @@
vgrid = new LineProperty();
}
@@ -180,8 +180,8 @@ class GanttActivityInfo
public function SetFont($aFFamily, $aFStyle=FS_NORMAL, $aFSize=10)
{
$this->iFFamily = $aFFamily;
- $this->iFStyle = $aFStyle;
- $this->iFSize = $aFSize;
+ $this->iFStyle = $aFStyle;
+ $this->iFSize = $aFSize;
}
public function SetStyle($aStyle)
@@ -253,7 +253,7 @@ class GanttActivityInfo
$txt='';
return $w;
}
-
+
public function GetColStart($aImg, &$aStart, $aAddLeftMargin=false)
{
$n = count($this->iTitles) ;
@@ -263,7 +263,7 @@ class GanttActivityInfo
$aStart[$i] = $aStart[$i-1]+$this->iLeftColMargin+$this->iWidth[$i-1];
}
}
-
+
// Adjust headers left, right or centered
public function SetHeaderAlign($aAlign)
{
@@ -285,7 +285,7 @@ class GanttActivityInfo
if ($n == 0) {
return;
}
-
+
$x = $aXLeft;
$h = $this->iHeight;
$yTop = $aUseTextHeight ? $aYBottom-$h-$this->iTopColMargin-$this->iBottomColMargin : $aYTop ;
@@ -303,9 +303,14 @@ class GanttActivityInfo
if ($this->iStyle == 1) {
// Make a 3D effect
$aImg->SetColor('white');
- $aImg->Line($aXLeft, $yTop+1, $aXRight, $yTop+1);
+ $aImg->Line(
+ $aXLeft,
+ $yTop+1,
+ $aXRight,
+ $yTop+1
+ );
}
-
+
for ($i=0; $i < $n; ++$i) {
if ($this->iStyle == 1) {
// Make a 3D effect
@@ -314,7 +319,7 @@ class GanttActivityInfo
}
$x += $this->iLeftColMargin;
$txt->Set($this->iTitles[$i]);
-
+
// Adjust the text anchor position according to the choosen alignment
$xp = $x;
if ($this->iHeaderAlign == 'center') {
@@ -322,7 +327,7 @@ class GanttActivityInfo
} elseif ($this->iHeaderAlign == 'right') {
$xp = $x +$this->iWidth[$i]-$this->iRightColMargin;
}
-
+
$txt->Stroke($aImg, $xp, $yTop+$this->iTopHeaderMargin);
$x += $this->iWidth[$i];
if ($i < $n-1) {
@@ -357,12 +362,12 @@ class GanttActivityInfo
//===================================================
class GanttGraph extends Graph
{
- public $scale; // Public accessible
+ public $scale; // Public accessible
public $hgrid=null;
- private $iObj=array(); // Gantt objects
- private $iLabelHMarginFactor=0.2; // 10% margin on each side of the labels
- private $iLabelVMarginFactor=0.4; // 40% margin on top and bottom of label
- private $iLayout=GANTT_FROMTOP; // Could also be GANTT_EVEN
+ private $iObj=array(); // Gantt objects
+ private $iLabelHMarginFactor=0.2; // 10% margin on each side of the labels
+ private $iLabelVMarginFactor=0.4; // 40% margin on top and bottom of label
+ private $iLayout=GANTT_FROMTOP; // Could also be GANTT_EVEN
private $iSimpleFont = FF_FONT1;
private $iSimpleFontSize=11;
private $iSimpleStyle=GANTT_RDIAG;
@@ -371,14 +376,13 @@ class GanttGraph extends Graph
private $iSimpleProgressBkgColor='gray';
private $iSimpleProgressColor='darkgreen';
private $iSimpleProgressStyle=GANTT_SOLID;
- private $iZoomFactor = 1.0;
//---------------
// CONSTRUCTOR
// Create a new gantt graph
- public function __construct($aWidth=0, $aHeight=0, $aCachedName="", $aTimeOut=0, $aInline=true)
+ public function GanttGraph($aWidth=0, $aHeight=0, $aCachedName="", $aTimeOut=0, $aInline=true)
{
- // Backward compatibility
+ // Backward compatibility
if ($aWidth == -1) {
$aWidth=0;
}
@@ -390,18 +394,18 @@ class GanttGraph extends Graph
JpgraphError::RaiseL(6002);
//("You can't specify negative sizes for Gantt graph dimensions. Use 0 to indicate that you want the library to automatically determine a dimension.");
}
- parent::__construct($aWidth, $aHeight, $aCachedName, $aTimeOut, $aInline);
+ Graph::Graph($aWidth, $aHeight, $aCachedName, $aTimeOut, $aInline);
$this->scale = new GanttScale($this->img);
// Default margins
$this->img->SetMargin(15, 17, 25, 15);
$this->hgrid = new HorizontalGridLine();
-
+
$this->scale->ShowHeaders(GANTT_HWEEK|GANTT_HDAY);
$this->SetBox();
}
-
+
//---------------
// PUBLIC METHODS
@@ -426,80 +430,80 @@ class GanttGraph extends Graph
$num = count($data);
for ($i=0; $i < $num; ++$i) {
switch ($data[$i][1]) {
- case ACTYPE_GROUP:
- // Create a slightly smaller height bar since the
- // "wings" at the end will make it look taller
- $a = new GanttBar($data[$i][0], $data[$i][2], $data[$i][3], $data[$i][4], '', 8);
- $a->title->SetFont($this->iSimpleFont, FS_BOLD, $this->iSimpleFontSize);
- $a->rightMark->Show();
- $a->rightMark->SetType(MARK_RIGHTTRIANGLE);
- $a->rightMark->SetWidth(8);
- $a->rightMark->SetColor('black');
- $a->rightMark->SetFillColor('black');
-
- $a->leftMark->Show();
- $a->leftMark->SetType(MARK_LEFTTRIANGLE);
- $a->leftMark->SetWidth(8);
- $a->leftMark->SetColor('black');
- $a->leftMark->SetFillColor('black');
-
- $a->SetPattern(BAND_SOLID, 'black');
- $csimpos = 6;
- break;
-
- case ACTYPE_NORMAL:
- $a = new GanttBar($data[$i][0], $data[$i][2], $data[$i][3], $data[$i][4], '', 10);
- $a->title->SetFont($this->iSimpleFont, FS_NORMAL, $this->iSimpleFontSize);
- $a->SetPattern($this->iSimpleStyle, $this->iSimpleColor);
- $a->SetFillColor($this->iSimpleBkgColor);
- // Check if this activity should have a constrain line
- $n = count($constrains);
- for ($j=0; $j < $n; ++$j) {
- if (empty($constrains[$j]) || (count($constrains[$j]) != 3)) {
- JpGraphError::RaiseL(6003, $j);
- //("Invalid format for Constrain parameter at index=$j in CreateSimple(). Parameter must start with index 0 and contain arrays of (Row,Constrain-To,Constrain-Type)");
- }
- if ($constrains[$j][0]==$data[$i][0]) {
- $a->SetConstrain($constrains[$j][1], $constrains[$j][2], 'black', ARROW_S2, ARROWT_SOLID);
- }
- }
-
- // Check if this activity have a progress bar
- $n = count($progress);
- for ($j=0; $j < $n; ++$j) {
- if (empty($progress[$j]) || (count($progress[$j]) != 2)) {
- JpGraphError::RaiseL(6004, $j);
- //("Invalid format for Progress parameter at index=$j in CreateSimple(). Parameter must start with index 0 and contain arrays of (Row,Progress)");
- }
- if ($progress[$j][0]==$data[$i][0]) {
- $a->progress->Set($progress[$j][1]);
- $a->progress->SetPattern(
- $this->iSimpleProgressStyle,
- $this->iSimpleProgressColor
- );
- $a->progress->SetFillColor($this->iSimpleProgressBkgColor);
- //$a->progress->SetPattern($progress[$j][2],$progress[$j][3]);
- break;
- }
- }
- $csimpos = 6;
- break;
-
- case ACTYPE_MILESTONE:
- $a = new MileStone($data[$i][0], $data[$i][2], $data[$i][3]);
- $a->title->SetFont($this->iSimpleFont, FS_NORMAL, $this->iSimpleFontSize);
- $a->caption->SetFont($this->iSimpleFont, FS_NORMAL, $this->iSimpleFontSize);
- $csimpos = 5;
- break;
- default:
- die('Unknown activity type');
- break;
+ case ACTYPE_GROUP:
+ // Create a slightly smaller height bar since the
+ // "wings" at the end will make it look taller
+ $a = new GanttBar($data[$i][0], $data[$i][2], $data[$i][3], $data[$i][4], '', 8);
+ $a->title->SetFont($this->iSimpleFont, FS_BOLD, $this->iSimpleFontSize);
+ $a->rightMark->Show();
+ $a->rightMark->SetType(MARK_RIGHTTRIANGLE);
+ $a->rightMark->SetWidth(8);
+ $a->rightMark->SetColor('black');
+ $a->rightMark->SetFillColor('black');
+
+ $a->leftMark->Show();
+ $a->leftMark->SetType(MARK_LEFTTRIANGLE);
+ $a->leftMark->SetWidth(8);
+ $a->leftMark->SetColor('black');
+ $a->leftMark->SetFillColor('black');
+
+ $a->SetPattern(BAND_SOLID, 'black');
+ $csimpos = 6;
+ break;
+
+ case ACTYPE_NORMAL:
+ $a = new GanttBar($data[$i][0], $data[$i][2], $data[$i][3], $data[$i][4], '', 10);
+ $a->title->SetFont($this->iSimpleFont, FS_NORMAL, $this->iSimpleFontSize);
+ $a->SetPattern($this->iSimpleStyle, $this->iSimpleColor);
+ $a->SetFillColor($this->iSimpleBkgColor);
+ // Check if this activity should have a constrain line
+ $n = count($constrains);
+ for ($j=0; $j < $n; ++$j) {
+ if (empty($constrains[$j]) || (count($constrains[$j]) != 3)) {
+ JpGraphError::RaiseL(6003, $j);
+ //("Invalid format for Constrain parameter at index=$j in CreateSimple(). Parameter must start with index 0 and contain arrays of (Row,Constrain-To,Constrain-Type)");
+ }
+ if ($constrains[$j][0]==$data[$i][0]) {
+ $a->SetConstrain($constrains[$j][1], $constrains[$j][2], 'black', ARROW_S2, ARROWT_SOLID);
+ }
}
+ // Check if this activity have a progress bar
+ $n = count($progress);
+ for ($j=0; $j < $n; ++$j) {
+ if (empty($progress[$j]) || (count($progress[$j]) != 2)) {
+ JpGraphError::RaiseL(6004, $j);
+ //("Invalid format for Progress parameter at index=$j in CreateSimple(). Parameter must start with index 0 and contain arrays of (Row,Progress)");
+ }
+ if ($progress[$j][0]==$data[$i][0]) {
+ $a->progress->Set($progress[$j][1]);
+ $a->progress->SetPattern(
+ $this->iSimpleProgressStyle,
+ $this->iSimpleProgressColor
+ );
+ $a->progress->SetFillColor($this->iSimpleProgressBkgColor);
+ //$a->progress->SetPattern($progress[$j][2],$progress[$j][3]);
+ break;
+ }
+ }
+ $csimpos = 6;
+ break;
+
+ case ACTYPE_MILESTONE:
+ $a = new MileStone($data[$i][0], $data[$i][2], $data[$i][3]);
+ $a->title->SetFont($this->iSimpleFont, FS_NORMAL, $this->iSimpleFontSize);
+ $a->caption->SetFont($this->iSimpleFont, FS_NORMAL, $this->iSimpleFontSize);
+ $csimpos = 5;
+ break;
+ default:
+ die('Unknown activity type');
+ break;
+ }
+
// Setup caption
$a->caption->Set($data[$i][$csimpos-1]);
- // Check if this activity should have a CSIM target�?
+ // Check if this activity should have a CSIM target?
if (!empty($data[$i][$csimpos])) {
$a->SetCSIMTarget($data[$i][$csimpos]);
$a->SetCSIMAlt($data[$i][$csimpos+1]);
@@ -513,19 +517,13 @@ class GanttGraph extends Graph
}
}
- // Set user specified scale zoom factor when auto sizing is used
- public function SetZoomFactor($aZoom)
- {
- $this->iZoomFactor = $aZoom;
- }
-
-
+
// Set what headers should be shown
public function ShowHeaders($aFlg)
{
$this->scale->ShowHeaders($aFlg);
}
-
+
// Specify the fraction of the font height that should be added
// as vertical margin
public function SetLabelVMarginFactor($aVal)
@@ -538,8 +536,8 @@ class GanttGraph extends Graph
{
$this->iLabelVMarginFactor = $aVal;
}
-
-
+
+
// Add a new Gantt object
public function Add($aObject)
{
@@ -547,8 +545,6 @@ class GanttGraph extends Graph
$cl = $aObject[0];
if (class_exists('IconPlot', false) && ($cl instanceof IconPlot)) {
$this->AddIcon($aObject);
- } elseif (class_exists('Text', false) && ($cl instanceof Text)) {
- $this->AddText($aObject);
} else {
$n = count($aObject);
for ($i=0; $i < $n; ++$i) {
@@ -558,32 +554,12 @@ class GanttGraph extends Graph
} else {
if (class_exists('IconPlot', false) && ($aObject instanceof IconPlot)) {
$this->AddIcon($aObject);
- } elseif (class_exists('Text', false) && ($aObject instanceof Text)) {
- $this->AddText($aObject);
} else {
$this->iObj[] = $aObject;
}
}
}
- public function StrokeTexts()
- {
- // Stroke any user added text objects
- if ($this->texts != null) {
- $n = count($this->texts);
- for ($i=0; $i < $n; ++$i) {
- if ($this->texts[$i]->iScalePosX !== null && $this->texts[$i]->iScalePosY !== null) {
- $x = $this->scale->TranslateDate($this->texts[$i]->iScalePosX);
- $y = $this->scale->TranslateVertPos($this->texts[$i]->iScalePosY);
- $y -= $this->scale->GetVertSpacing()/2;
- } else {
- $x = $y = null;
- }
- $this->texts[$i]->Stroke($this->img, $x, $y);
- }
- }
- }
-
// Override inherit method from Graph and give a warning message
public function SetScale($aAxisType, $aYMin=1, $aYMax=1, $aXMin=1, $aXMax=1)
{
@@ -605,7 +581,7 @@ class GanttGraph extends Graph
}
$this->scale->SetRange($aStart, $aEnd);
}
-
+
// Get the maximum width of the activity titles columns for the bars
// The name is lightly misleading since we from now on can have
// multiple columns in the label section. When this was first written
@@ -629,17 +605,15 @@ class GanttGraph extends Graph
}
return $m;
}
-
+
// Get the maximum height of the titles for the bars
public function GetMaxLabelHeight()
{
$m=10;
if ($this->iObj != null) {
$n = count($this->iObj);
- // We can not include the title of GnttVLine since that title is stroked at the bottom
- // of the Gantt bar and not in the activity title columns
for ($i=0; $i < $n; ++$i) {
- if (!empty($this->iObj[$i]->title) && !($this->iObj[$i] instanceof GanttVLine)) {
+ if (!empty($this->iObj[$i]->title)) {
$m=max($m, $this->iObj[$i]->title->GetHeight($this->img));
}
}
@@ -659,7 +633,7 @@ class GanttGraph extends Graph
}
return $m;
}
-
+
// Get the maximum used line number (vertical position) for bars
public function GetBarMaxLineNumber()
{
@@ -673,7 +647,7 @@ class GanttGraph extends Graph
}
return $m;
}
-
+
// Get the minumum and maximum used dates for all bars
public function GetBarMinMax()
{
@@ -717,33 +691,21 @@ class GanttGraph extends Graph
// The predefined left, right, top, bottom margins.
// Note that the top margin might incease depending on
// the title.
- $hadj = $vadj = 0;
- if ($this->doshadow) {
- $hadj = $this->shadow_width;
- $vadj = $this->shadow_width+5;
- }
-
$lm = $this->img->left_margin;
- $rm = $this->img->right_margin +$hadj;
+ $rm = $this->img->right_margin;
$rm += 2 ;
$tm = $this->img->top_margin;
- $bm = $this->img->bottom_margin + $vadj;
- $bm += 2;
-
- // If there are any added GanttVLine we must make sure that the
- // bottom margin is wide enough to hold a title.
- $n = count($this->iObj);
- for ($i=0; $i < $n; ++$i) {
- if ($this->iObj[$i] instanceof GanttVLine) {
- $bm = max($bm, $this->iObj[$i]->title->GetHeight($this->img)+10);
- }
+ $bm = $this->img->bottom_margin;
+ $bm += 1;
+ if (BRAND_TIMING) {
+ $bm += 10;
}
-
+
// First find out the height
$n=$this->GetBarMaxLineNumber()+1;
$m=max($this->GetMaxLabelHeight(), $this->GetMaxBarAbsHeight());
$height=$n*((1+$this->iLabelVMarginFactor)*$m);
-
+
// Add the height of the scale titles
$h=$this->scale->GetHeaderHeight();
$height += $h;
@@ -781,47 +743,50 @@ class GanttGraph extends Graph
// If the days are displayed we also need to figure out
// how much space each day's title will require.
switch ($this->scale->day->iStyle) {
- case DAYSTYLE_LONG:
- $txt = "Monday";
- break;
- case DAYSTYLE_LONGDAYDATE1:
- $txt = "Monday 23 Jun";
- break;
- case DAYSTYLE_LONGDAYDATE2:
- $txt = "Monday 23 Jun 2003";
- break;
- case DAYSTYLE_SHORT:
- $txt = "Mon";
- break;
- case DAYSTYLE_SHORTDAYDATE1:
+ case DAYSTYLE_LONG:
+ $txt = "Monday";
+ break;
+ case DAYSTYLE_LONGDAYDATE1:
+ $txt = "Monday 23 Jun";
+ break;
+ case DAYSTYLE_LONGDAYDATE2:
+ $txt = "Monday 23 Jun 2003";
+ break;
+ case DAYSTYLE_SHORT:
+ $txt = "Mon";
+ break;
+ case DAYSTYLE_SHORTDAYDATE1:
$txt = "Mon 23/6";
- break;
- case DAYSTYLE_SHORTDAYDATE2:
- $txt = "Mon 23 Jun";
- break;
- case DAYSTYLE_SHORTDAYDATE3:
- $txt = "Mon 23";
- break;
- case DAYSTYLE_SHORTDATE1:
+ break;
+ case DAYSTYLE_SHORTDAYDATE2:
+ $txt = "Mon 23 Jun";
+ break;
+ case DAYSTYLE_SHORTDAYDATE3:
+ $txt = "Mon 23";
+ break;
+ case DAYSTYLE_SHORTDATE1:
$txt = "23/6";
- break;
- case DAYSTYLE_SHORTDATE2:
- $txt = "23 Jun";
- break;
- case DAYSTYLE_SHORTDATE3:
- $txt = "Mon 23";
- break;
- case DAYSTYLE_SHORTDATE4:
- $txt = "88";
- break;
- case DAYSTYLE_CUSTOM:
- $txt = date($this->scale->day->iLabelFormStr, strtotime('2003-12-20 18:00'));
- break;
- case DAYSTYLE_ONELETTER:
- default:
- $txt = "M";
- break;
- }
+ break;
+ case DAYSTYLE_SHORTDATE2:
+ $txt = "23 Jun";
+ break;
+ case DAYSTYLE_SHORTDATE3:
+ $txt = "Mon 23";
+ break;
+ case DAYSTYLE_SHORTDATE4:
+ $txt = "88";
+ break;
+ case DAYSTYLE_CUSTOM:
+ $txt = date(
+ $this->scale->day->iLabelFormStr,
+ strtotime('2003-12-20 18:00')
+ );
+ break;
+ case DAYSTYLE_ONELETTER:
+ default:
+ $txt = "M";
+ break;
+ }
$fw = $this->scale->day->GetStrWidth($this->img, $txt)+6;
}
@@ -832,24 +797,24 @@ class GanttGraph extends Graph
// of space. We therefore create a typical string for the choosen format
// and determine the length of that string.
switch ($this->scale->hour->iStyle) {
- case HOURSTYLE_HMAMPM:
- $txt = '12:00pm';
- break;
- case HOURSTYLE_H24:
- // 13
- $txt = '24';
- break;
- case HOURSTYLE_HAMPM:
- $txt = '12pm';
- break;
- case HOURSTYLE_CUSTOM:
- $txt = date($this->scale->hour->iLabelFormStr, strtotime('2003-12-20 18:00'));
- break;
- case HOURSTYLE_HM24:
- default:
- $txt = '24:00';
- break;
- }
+ case HOURSTYLE_HMAMPM:
+ $txt = '12:00pm';
+ break;
+ case HOURSTYLE_H24:
+ // 13
+ $txt = '24';
+ break;
+ case HOURSTYLE_HAMPM:
+ $txt = '12pm';
+ break;
+ case HOURSTYLE_CUSTOM:
+ $txt = date($this->scale->hour->iLabelFormStr, strtotime('2003-12-20 18:00'));
+ break;
+ case HOURSTYLE_HM24:
+ default:
+ $txt = '24:00';
+ break;
+ }
$hfw = $this->scale->hour->GetStrWidth($this->img, $txt)+6;
$mw = $hfw;
@@ -858,15 +823,15 @@ class GanttGraph extends Graph
// of space. We therefore create a typical string for the choosen format
// and determine the length of that string.
switch ($this->scale->minute->iStyle) {
- case HOURSTYLE_CUSTOM:
- $txt2 = date($this->scale->minute->iLabelFormStr, strtotime('2005-05-15 18:55'));
- break;
- case MINUTESTYLE_MM:
- default:
- $txt2 = '15';
- break;
- }
-
+ case HOURSTYLE_CUSTOM:
+ $txt2 = date($this->scale->minute->iLabelFormStr, strtotime('2005-05-15 18:55'));
+ break;
+ case MINUTESTYLE_MM:
+ default:
+ $txt2 = '15';
+ break;
+ }
+
$mfw = $this->scale->minute->GetStrWidth($this->img, $txt2)+6;
$n2 = ceil(60 / $this->scale->minute->GetIntervall());
$mw = $n2 * $mfw;
@@ -887,15 +852,15 @@ class GanttGraph extends Graph
// of space. We therefore create a typical string for the choosen format
// and determine the length of that string.
switch ($this->scale->minute->iStyle) {
- case HOURSTYLE_CUSTOM:
- $txt = date($this->scale->minute->iLabelFormStr, strtotime('2005-05-15 18:55'));
- break;
- case MINUTESTYLE_MM:
- default:
- $txt = '15';
- break;
- }
-
+ case HOURSTYLE_CUSTOM:
+ $txt = date($this->scale->minute->iLabelFormStr, strtotime('2005-05-15 18:55'));
+ break;
+ case MINUTESTYLE_MM:
+ default:
+ $txt = '15';
+ break;
+ }
+
$mfw = $this->scale->minute->GetStrWidth($this->img, $txt)+6;
$n = ceil(60 / $this->scale->TimeToMinutes($this->scale->minute->GetIntervall()));
$mw = $n * $mfw;
@@ -915,7 +880,7 @@ class GanttGraph extends Graph
} else {
$fsw += 4;
}
-
+
$ww = $fsw*$this->scale->week->GetFontWidth($this->img);
if (7*$fw < $ww) {
$fw = ceil($ww/7);
@@ -923,8 +888,8 @@ class GanttGraph extends Graph
}
if (!$this->scale->IsDisplayDay() && !$this->scale->IsDisplayHour() &&
- !(($this->scale->week->iStyle==WEEKSTYLE_FIRSTDAYWNBR ||
- $this->scale->week->iStyle==WEEKSTYLE_FIRSTDAY2WNBR) && $this->scale->IsDisplayWeek())) {
+ !(($this->scale->week->iStyle==WEEKSTYLE_FIRSTDAYWNBR ||
+ $this->scale->week->iStyle==WEEKSTYLE_FIRSTDAY2WNBR) && $this->scale->IsDisplayWeek())) {
// If we don't display the individual days we can shrink the
// scale a little bit. This is a little bit pragmatic at the
// moment and should be re-written to take into account
@@ -954,8 +919,6 @@ class GanttGraph extends Graph
// Add the width of the vertivcal divider line
$titlewidth += $this->scale->divider->iWeight*2;
- // Adjust the width by the user specified zoom factor
- $fw *= $this->iZoomFactor;
// Now get the total width taking
// titlewidth, left and rigt margin, dayfont size
@@ -989,7 +952,7 @@ class GanttGraph extends Graph
}
$w = array();
$m = $this->scale->actinfo->iLeftColMargin + $this->scale->actinfo->iRightColMargin;
-
+
for ($i=0; $i < $n; ++$i) {
$tmp = $this->iObj[$i]->title->GetColWidth($this->img, $m);
$nn = count($tmp);
@@ -1008,7 +971,7 @@ class GanttGraph extends Graph
public function Stroke($aStrokeFileName="")
{
- // If the filename is the predefined value = '_csim_special_'
+ // If the filename is the predefined value = '_csim_special_'
// we assume that the call to stroke only needs to do enough
// to correctly generate the CSIM maps.
// We use this variable to skip things we don't strictly need
@@ -1040,7 +1003,7 @@ class GanttGraph extends Graph
if ($this->scale->iVertLines == -1) {
$this->scale->iVertLines = $this->GetBarMaxLineNumber()+1;
}
-
+
$maxwidth=max(
$this->scale->actinfo->GetWidth($this->img),
max(
@@ -1087,15 +1050,12 @@ class GanttGraph extends Graph
$this->StrokeIcons();
}
- // Stroke all added user texts
- $this->StrokeTexts();
-
// Should we do any final image transformation
if ($this->iImgTrans) {
if (!class_exists('ImgTrans', false)) {
require_once('jpgraph_imgtrans.php');
}
-
+
$tform = new ImgTrans($this->img->img);
$this->img->img = $tform->Skew3D(
$this->iImgTransHorizon,
@@ -1107,8 +1067,8 @@ class GanttGraph extends Graph
$this->iImgTransBorder
);
}
-
-
+
+
// If the filename is given as the special "__handle"
// then the image handler is returned and the image is NOT
// streamed back
@@ -1133,7 +1093,7 @@ class GanttGraph extends Graph
// Stroke all constrains
for ($i=0; $i < $n; ++$i) {
- // Some gantt objects may not have constraints associated with them
+ // Some gantt objects may not have constraints associated with them
// for example we can add IconPlots which doesn't have this property.
if (empty($this->iObj[$i]->constraints)) {
continue;
@@ -1160,50 +1120,50 @@ class GanttGraph extends Graph
$c2 = $this->iObj[$targetobj]->iConstrainPos;
if (count($c1) == 4 && count($c2) == 4) {
switch ($this->iObj[$i]->constraints[$k]->iConstrainType) {
- case CONSTRAIN_ENDSTART:
- if ($c1[1] < $c2[1]) {
- $link = new GanttLink($c1[2], $c1[3], $c2[0], $c2[1]);
- } else {
- $link = new GanttLink($c1[2], $c1[1], $c2[0], $c2[3]);
- }
- $link->SetPath(3);
- break;
- case CONSTRAIN_STARTEND:
- if ($c1[1] < $c2[1]) {
- $link = new GanttLink($c1[0], $c1[3], $c2[2], $c2[1]);
- } else {
- $link = new GanttLink($c1[0], $c1[1], $c2[2], $c2[3]);
- }
- $link->SetPath(0);
- break;
- case CONSTRAIN_ENDEND:
- if ($c1[1] < $c2[1]) {
- $link = new GanttLink($c1[2], $c1[3], $c2[2], $c2[1]);
- } else {
- $link = new GanttLink($c1[2], $c1[1], $c2[2], $c2[3]);
- }
- $link->SetPath(1);
- break;
- case CONSTRAIN_STARTSTART:
- if ($c1[1] < $c2[1]) {
- $link = new GanttLink($c1[0], $c1[3], $c2[0], $c2[1]);
- } else {
- $link = new GanttLink($c1[0], $c1[1], $c2[0], $c2[3]);
- }
- $link->SetPath(3);
- break;
- default:
- JpGraphError::RaiseL(6009, $this->iObj[$i]->iVPos, $vpos);
- //('Unknown constrain type specified from row='.$this->iObj[$i]->iVPos.' to row='.$vpos);
- break;
- }
+ case CONSTRAIN_ENDSTART:
+ if ($c1[1] < $c2[1]) {
+ $link = new GanttLink($c1[2], $c1[3], $c2[0], $c2[1]);
+ } else {
+ $link = new GanttLink($c1[2], $c1[1], $c2[0], $c2[3]);
+ }
+ $link->SetPath(3);
+ break;
+ case CONSTRAIN_STARTEND:
+ if ($c1[1] < $c2[1]) {
+ $link = new GanttLink($c1[0], $c1[3], $c2[2], $c2[1]);
+ } else {
+ $link = new GanttLink($c1[0], $c1[1], $c2[2], $c2[3]);
+ }
+ $link->SetPath(0);
+ break;
+ case CONSTRAIN_ENDEND:
+ if ($c1[1] < $c2[1]) {
+ $link = new GanttLink($c1[2], $c1[3], $c2[2], $c2[1]);
+ } else {
+ $link = new GanttLink($c1[2], $c1[1], $c2[2], $c2[3]);
+ }
+ $link->SetPath(1);
+ break;
+ case CONSTRAIN_STARTSTART:
+ if ($c1[1] < $c2[1]) {
+ $link = new GanttLink($c1[0], $c1[3], $c2[0], $c2[1]);
+ } else {
+ $link = new GanttLink($c1[0], $c1[1], $c2[0], $c2[3]);
+ }
+ $link->SetPath(3);
+ break;
+ default:
+ JpGraphError::RaiseL(6009, $this->iObj[$i]->iVPos, $vpos);
+//('Unknown constrain type specified from row='.$this->iObj[$i]->iVPos.' to row='.$vpos);
+ break;
+ }
$link->SetColor($this->iObj[$i]->constraints[$k]->iConstrainColor);
$link->SetArrow(
$this->iObj[$i]->constraints[$k]->iConstrainArrowSize,
$this->iObj[$i]->constraints[$k]->iConstrainArrowType
);
-
+
$link->Stroke($this->img);
}
}
@@ -1216,7 +1176,7 @@ class GanttGraph extends Graph
if (!$this->iHasStroked) {
$this->Stroke(_CSIM_SPECIALFILE);
}
-
+
$csim = $this->title->GetCSIMAreas();
$csim .= $this->subtitle->GetCSIMAreas();
$csim .= $this->subsubtitle->GetCSIMAreas();
@@ -1233,19 +1193,19 @@ class GanttGraph extends Graph
// CLASS PredefIcons
// Description: Predefined icons for use with Gantt charts
//===================================================
-define('GICON_WARNINGRED', 0);
-define('GICON_TEXT', 1);
-define('GICON_ENDCONS', 2);
-define('GICON_MAIL', 3);
-define('GICON_STARTCONS', 4);
-define('GICON_CALC', 5);
-define('GICON_MAGNIFIER', 6);
-define('GICON_LOCK', 7);
-define('GICON_STOP', 8);
-define('GICON_WARNINGYELLOW', 9);
-define('GICON_FOLDEROPEN', 10);
-define('GICON_FOLDER', 11);
-define('GICON_TEXTIMPORTANT', 12);
+DEFINE('GICON_WARNINGRED', 0);
+DEFINE('GICON_TEXT', 1);
+DEFINE('GICON_ENDCONS', 2);
+DEFINE('GICON_MAIL', 3);
+DEFINE('GICON_STARTCONS', 4);
+DEFINE('GICON_CALC', 5);
+DEFINE('GICON_MAGNIFIER', 6);
+DEFINE('GICON_LOCK', 7);
+DEFINE('GICON_STOP', 8);
+DEFINE('GICON_WARNINGYELLOW', 9);
+DEFINE('GICON_FOLDEROPEN', 10);
+DEFINE('GICON_FOLDER', 11);
+DEFINE('GICON_TEXTIMPORTANT', 12);
class PredefIcons
{
@@ -1266,283 +1226,283 @@ class PredefIcons
return Image::CreateFromString(base64_decode($this->iBuiltinIcon[$aIdx][1]));
}
- public function __construct()
+ public function PredefIcons()
{
//==========================================================
// warning.png
//==========================================================
$this->iBuiltinIcon[0][0]= 1043 ;
$this->iBuiltinIcon[0][1]=
- 'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsSAAALEgHS3X78AAAA'.
- 'B3RJTUUH0wgKFSgilWPhUQAAA6BJREFUeNrtl91rHFUYh5/3zMx+Z5JNUoOamCZNaqTZ6IWIkqRiQWmi1IDetHfeiCiltgXBP8AL'.
- '0SIUxf/AvfRSBS9EKILFFqyIH9CEmFZtPqrBJLs7c+b1YneT3WTTbNsUFPLCcAbmzPt73o9zzgzs2Z793231UOdv3w9k9Z2uzOdA'.
- '5+2+79yNeL7Hl7hw7oeixRMZ6PJM26W18DNAm/Vh7lR8fqh97NmMF11es1iFpMATqdirwMNA/J4DpIzkr5YsAF1PO6gIMYHRdPwl'.
- 'oO2elmB+qH3sm7XozbkgYvy8SzYnZPtcblyM6I+5z3jQ+0vJfgpEu56BfI9vUkbyi2HZd1QJoeWRiAjBd4SDCW8SSAOy6wBHMzF7'.
- 'YdV2A+ROuvRPLfHoiSU0EMY/cDAIhxJeGngKaN1VgHyPL7NBxI1K9P4QxBzw3K1zJ/zkG8B9uwaQ7/HNsRZv9kohBGD0o7JqMYS/'.
- '/ynPidQw/LrBiPBcS/yFCT95DvB2BWAy4575PaQbQKW+tPd3GCItu2odKI++YxiKu0d26oWmAD7paZU/rLz37VqIijD2YbnzNBBE'.
- 'IBHf8K8qjL7vYhCGErEU8CTg3xXAeMp96GrJEqkyXkm9Bhui1xfsunjdGhcYLq+IzjsGmBt5YH/cmJkFq6gIqlon3u4LxdKGuCIo'.
- 'Qu41g0E41po+2R33Xt5uz9kRIB2UTle7PnfKrROP1HD4sRjZlq0lzhwoZ6rDNeTi3nEg1si/7FT7kYQbXS6E5E65tA5uRF9tutq0'.
- 'K/VwAF+/FbIYWt6+tjQM/AqUms7A4Wy6d7YSfSNxgMmzi0ycWWworio4QJvj4LpuL5BqugTnXzzqJsJwurrlNhJXFaavW67NRw3F'.
- 'q+aJcCQVe9fzvJGmAY7/dPH0gi0f64OveGxa+usCuQMeZ0+kt8BVrX+qPO9Bzx0MgqBvs+a2PfDdYIf+WAjXU1ub4tqNaPPzRs8A'.
- 'blrli+WVn79cXn0cWKl+tGx7HLc7pu3CSmnfitL+l1UihAhwjFkPQev4K/fSABjBM8JCaFuurJU+rgW41SroA8aNMVNAFtgHJCsn'.
- 'XGy/58QVxAC9MccJtZ5kIzNlW440WrJ2ea4YPA9cAooA7i0A/gS+iqLoOpB1HOegqrYB3UBmJrAtQAJwpwPr1Ry92wVlgZsiYlW1'.
- 'uX1gU36dymgqYxJIJJNJT1W9QqHgNwFQBGYqo94OwHZQUuPD7ACglSvc+5n5T9m/wfJJX4U9qzEAAAAASUVORK5CYII=' ;
+ 'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsSAAALEgHS3X78AAAA'.
+ 'B3RJTUUH0wgKFSgilWPhUQAAA6BJREFUeNrtl91rHFUYh5/3zMx+Z5JNUoOamCZNaqTZ6IWIkqRiQWmi1IDetHfeiCiltgXBP8AL'.
+ '0SIUxf/AvfRSBS9EKILFFqyIH9CEmFZtPqrBJLs7c+b1YneT3WTTbNsUFPLCcAbmzPt73o9zzgzs2Z793231UOdv3w9k9Z2uzOdA'.
+ '5+2+79yNeL7Hl7hw7oeixRMZ6PJM26W18DNAm/Vh7lR8fqh97NmMF11es1iFpMATqdirwMNA/J4DpIzkr5YsAF1PO6gIMYHRdPwl'.
+ 'oO2elmB+qH3sm7XozbkgYvy8SzYnZPtcblyM6I+5z3jQ+0vJfgpEu56BfI9vUkbyi2HZd1QJoeWRiAjBd4SDCW8SSAOy6wBHMzF7'.
+ 'YdV2A+ROuvRPLfHoiSU0EMY/cDAIhxJeGngKaN1VgHyPL7NBxI1K9P4QxBzw3K1zJ/zkG8B9uwaQ7/HNsRZv9kohBGD0o7JqMYS/'.
+ '/ynPidQw/LrBiPBcS/yFCT95DvB2BWAy4575PaQbQKW+tPd3GCItu2odKI++YxiKu0d26oWmAD7paZU/rLz37VqIijD2YbnzNBBE'.
+ 'IBHf8K8qjL7vYhCGErEU8CTg3xXAeMp96GrJEqkyXkm9Bhui1xfsunjdGhcYLq+IzjsGmBt5YH/cmJkFq6gIqlon3u4LxdKGuCIo'.
+ 'Qu41g0E41po+2R33Xt5uz9kRIB2UTle7PnfKrROP1HD4sRjZlq0lzhwoZ6rDNeTi3nEg1si/7FT7kYQbXS6E5E65tA5uRF9tutq0'.
+ 'K/VwAF+/FbIYWt6+tjQM/AqUms7A4Wy6d7YSfSNxgMmzi0ycWWworio4QJvj4LpuL5BqugTnXzzqJsJwurrlNhJXFaavW67NRw3F'.
+ 'q+aJcCQVe9fzvJGmAY7/dPH0gi0f64OveGxa+usCuQMeZ0+kt8BVrX+qPO9Bzx0MgqBvs+a2PfDdYIf+WAjXU1ub4tqNaPPzRs8A'.
+ 'blrli+WVn79cXn0cWKl+tGx7HLc7pu3CSmnfitL+l1UihAhwjFkPQev4K/fSABjBM8JCaFuurJU+rgW41SroA8aNMVNAFtgHJCsn'.
+ 'XGy/58QVxAC9MccJtZ5kIzNlW440WrJ2ea4YPA9cAooA7i0A/gS+iqLoOpB1HOegqrYB3UBmJrAtQAJwpwPr1Ry92wVlgZsiYlW1'.
+ 'uX1gU36dymgqYxJIJJNJT1W9QqHgNwFQBGYqo94OwHZQUuPD7ACglSvc+5n5T9m/wfJJX4U9qzEAAAAASUVORK5CYII=' ;
//==========================================================
// edit.png
//==========================================================
$this->iBuiltinIcon[1][0]= 959 ;
$this->iBuiltinIcon[1][1]=
- 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAFgAWABY9j+ZuwAAAAlwSFlz'.
- 'AAALEAAACxABrSO9dQAAAAd0SU1FB9AKDAwbIEXOA6AAAAM8SURBVHicpdRPaBxlHMbx76ZvsmOTmm1dsEqQSIIsEmGVBAQjivEQ'.
- 'PAUJngpWsAWlBw8egpQepKwplN4ULEG9CjkEyUFKlSJrWTG0IU51pCsdYW2ncUPjdtp9Z+f3vuNhu8nKbmhaf5cZeGc+PO8zf1Lc'.
- 'm0KhkACICCKCMeaBjiLC0tLSnjNvPmuOHRpH0TZTU1M8zBi9wakzn7OFTs5sw8YYACYmJrre7HkeuVyu69qPF77hlT1XmZ0eQ03O'.
- 'wOLJTvhBx1rLz18VmJ0eY+jVd2FxDkKXnvYLHgb97OgLzE4ON9Hzc1B1QaQzsed5O0Lta3Ec89OnR5h5McfQ+Mw2qgQUnfBOPbZ3'.
- 'bK3l+xOvMT0+3ERLp5FNF6UEjcL32+DdVmGt5WLhDYYPZrbRqreFumXwql0S3w9tnDvLWD5PZigPpdOwuYpSCo3C8wU3UHxQdHbf'.
- 'cZIkNM6dxcnlUM4k1eUFMlUPpUADbpkttFarHe6oYqeOr6yt4RzMQHYUcUsQVtGicHDwKprViuLDkkOtVnsHCHZVRVy/zcj1i5Af'.
- 'h8AjdIts+hUcGcYPK3iBtKM3gD/uAzf/AdY2mmmVgy6X8YNNKmGIvyloPcB8SUin07RQ4EZHFdsdG0wkJEnEaHAJxvKEpSLeaokV'.
- 'r4zWmhUZYLlY4b1D03y5eIEWCtS7vsciAgiIxkQRabWOrlQor66y4pUphoJb1jiO4uO5o0S3q6RSqVbiOmC7VCEgAhLSaDQ48dH7'.
- 'vD46REY0iysegSjKQciRt99ib7qXwX0O+pG4teM6YKHLB9JMq4mTmF9/+AKA4wvLZByH7OgYL7+UY2qvw/7Bfg5kHiXjJFyv3CGO'.
- 'Y1rof+BW4t/XLiPG0DCGr79d4XzRxRnIMn98huXSTYyJ6et1UNYQhRvcinpJq86H3wGPPPM0iBDd+QffD1g4eZjLvuG7S1Wef26E'.
- 'J7L7eSx7gAHVg7V3MSbi6m/r93baBd6qQjerAJg/9Ql/XrvG0ON1+vv7GH3qSfY5fahUnSTpwZgIEQesaVXRPbHRG/xyJSAxMYlp'.
- 'EOm71HUINiY7mGb95l/8jZCyQmJjMDGJjUmsdCROtZ0n/P/Z8v4Fs2MTUUf7vYoAAAAASUVORK5CYII=' ;
+ 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAFgAWABY9j+ZuwAAAAlwSFlz'.
+ 'AAALEAAACxABrSO9dQAAAAd0SU1FB9AKDAwbIEXOA6AAAAM8SURBVHicpdRPaBxlHMbx76ZvsmOTmm1dsEqQSIIsEmGVBAQjivEQ'.
+ 'PAUJngpWsAWlBw8egpQepKwplN4ULEG9CjkEyUFKlSJrWTG0IU51pCsdYW2ncUPjdtp9Z+f3vuNhu8nKbmhaf5cZeGc+PO8zf1Lc'.
+ 'm0KhkACICCKCMeaBjiLC0tLSnjNvPmuOHRpH0TZTU1M8zBi9wakzn7OFTs5sw8YYACYmJrre7HkeuVyu69qPF77hlT1XmZ0eQ03O'.
+ 'wOLJTvhBx1rLz18VmJ0eY+jVd2FxDkKXnvYLHgb97OgLzE4ON9Hzc1B1QaQzsed5O0Lta3Ec89OnR5h5McfQ+Mw2qgQUnfBOPbZ3'.
+ 'bK3l+xOvMT0+3ERLp5FNF6UEjcL32+DdVmGt5WLhDYYPZrbRqreFumXwql0S3w9tnDvLWD5PZigPpdOwuYpSCo3C8wU3UHxQdHbf'.
+ 'cZIkNM6dxcnlUM4k1eUFMlUPpUADbpkttFarHe6oYqeOr6yt4RzMQHYUcUsQVtGicHDwKprViuLDkkOtVnsHCHZVRVy/zcj1i5Af'.
+ 'h8AjdIts+hUcGcYPK3iBtKM3gD/uAzf/AdY2mmmVgy6X8YNNKmGIvyloPcB8SUin07RQ4EZHFdsdG0wkJEnEaHAJxvKEpSLeaokV'.
+ 'r4zWmhUZYLlY4b1D03y5eIEWCtS7vsciAgiIxkQRabWOrlQor66y4pUphoJb1jiO4uO5o0S3q6RSqVbiOmC7VCEgAhLSaDQ48dH7'.
+ 'vD46REY0iysegSjKQciRt99ib7qXwX0O+pG4teM6YKHLB9JMq4mTmF9/+AKA4wvLZByH7OgYL7+UY2qvw/7Bfg5kHiXjJFyv3CGO'.
+ 'Y1rof+BW4t/XLiPG0DCGr79d4XzRxRnIMn98huXSTYyJ6et1UNYQhRvcinpJq86H3wGPPPM0iBDd+QffD1g4eZjLvuG7S1Wef26E'.
+ 'J7L7eSx7gAHVg7V3MSbi6m/r93baBd6qQjerAJg/9Ql/XrvG0ON1+vv7GH3qSfY5fahUnSTpwZgIEQesaVXRPbHRG/xyJSAxMYlp'.
+ 'EOm71HUINiY7mGb95l/8jZCyQmJjMDGJjUmsdCROtZ0n/P/Z8v4Fs2MTUUf7vYoAAAAASUVORK5CYII=' ;
//==========================================================
// endconstrain.png
//==========================================================
$this->iBuiltinIcon[2][0]= 666 ;
$this->iBuiltinIcon[2][1]=
- 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlz'.
- 'AAALDwAACw8BkvkDpQAAAAd0SU1FB9ALEREILkh0+eQAAAIXSURBVHictZU9aFNRFMd/N81HX77aptJUWmp1LHRpIcWhg5sIDlUQ'.
- 'LAXB4t7RRUpwEhy7iQ46CCIoSHcl0CFaoVARU2MFMYktadLXJNok7x2HtCExvuYFmnO4w/3gx+Gc/z1HKRTdMEdXqHbB/sgc/sic'.
- 'nDoYAI8XwDa8o1RMLT+2hAsigtTvbIGVqhX46szUifBGswUeCPgAGB7QeLk0X4Ork+HOxo1VgSqGASjMqkn8W4r4vVtEgI/RRQEL'.
- 'vaoGD85cl5V3nySR/S1mxWxab7f35PnntNyMJeRr9kCMqiHTy09EoeToLwggx6ymiMOD/VwcD7Oa/MHkcIiQx026WGYto5P/U+ZZ'.
- '7gD0QwDuT5z9N3LrVPi0Xs543eQPKkRzaS54eviJIp4tMFQFMllAWN2qcRZHBnixNM8NYD162xq8u7ePSQ+GX2Pjwxc2dB2cLtB8'.
- '7GgamCb0anBYBeChMtl8855CarclxU1gvViiUK4w2OMkNDnGeJ8bt9fH90yOnOkCwLFTwhzykhvtYzOWoBBbY//R3dbaNTYhf2RO'.
- 'QpeuUMzv188MlwuHy0H13HnE48UzMcL0WAtUHX8OxZHoG1URiFw7rnLLCswuSPD1ulze/iWjT2PSf+dBXRFtVVGIvzqph0pQL7VE'.
- 'avXYaXXxPwsnt0imdttCocMmZBdK7YU9D8wuNOW0nXc6QWzPsSa5naZ1beb9BbGB6dxGtMnXAAAAAElFTkSuQmCC' ;
+ 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlz'.
+ 'AAALDwAACw8BkvkDpQAAAAd0SU1FB9ALEREILkh0+eQAAAIXSURBVHictZU9aFNRFMd/N81HX77aptJUWmp1LHRpIcWhg5sIDlUQ'.
+ 'LAXB4t7RRUpwEhy7iQ46CCIoSHcl0CFaoVARU2MFMYktadLXJNok7x2HtCExvuYFmnO4w/3gx+Gc/z1HKRTdMEdXqHbB/sgc/sic'.
+ 'nDoYAI8XwDa8o1RMLT+2hAsigtTvbIGVqhX46szUifBGswUeCPgAGB7QeLk0X4Ork+HOxo1VgSqGASjMqkn8W4r4vVtEgI/RRQEL'.
+ 'vaoGD85cl5V3nySR/S1mxWxab7f35PnntNyMJeRr9kCMqiHTy09EoeToLwggx6ymiMOD/VwcD7Oa/MHkcIiQx026WGYto5P/U+ZZ'.
+ '7gD0QwDuT5z9N3LrVPi0Xs543eQPKkRzaS54eviJIp4tMFQFMllAWN2qcRZHBnixNM8NYD162xq8u7ePSQ+GX2Pjwxc2dB2cLtB8'.
+ '7GgamCb0anBYBeChMtl8855CarclxU1gvViiUK4w2OMkNDnGeJ8bt9fH90yOnOkCwLFTwhzykhvtYzOWoBBbY//R3dbaNTYhf2RO'.
+ 'QpeuUMzv188MlwuHy0H13HnE48UzMcL0WAtUHX8OxZHoG1URiFw7rnLLCswuSPD1ulze/iWjT2PSf+dBXRFtVVGIvzqph0pQL7VE'.
+ 'avXYaXXxPwsnt0imdttCocMmZBdK7YU9D8wuNOW0nXc6QWzPsSa5naZ1beb9BbGB6dxGtMnXAAAAAElFTkSuQmCC' ;
//==========================================================
// mail.png
//==========================================================
$this->iBuiltinIcon[3][0]= 1122 ;
$this->iBuiltinIcon[3][1]=
- 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlz'.
- 'AAALEAAACxABrSO9dQAAAAd0SU1FB9AJHAMfFvL9OU8AAAPfSURBVHictZRdaBRXFMd/987H7tbNx8aYtGCrEexDsOBDaKHFxirb'.
- 'h0qhsiY0ykppKq1osI99C4H2WSiFFMHWUhXBrjRi0uCmtSEUGgP1QWqhWjGkoW7M1kTX3WRn5p4+TJJNGolQ6IXDnDtz+N0z/3PP'.
- 'UWBIpdpYa23b9g09PZ2kUrOrvmUyGVKp1Ao/mUyi56YnVgWfO/P1CihAd/dJMpmaNROIRq8BkM1m0bH6TasC3j6QXgFdXI+DR6PR'.
- 'JX/Pno8B+KLnMKqlpUU8z8MYs2RBEDzWf9J+0RcRbMdxGBsbw/fmCXwPMUEYID4iAVp8wIRmDIHMo4yHSIBSASKC+CWE0C/PF9jU'.
- '3B6Cp+4M07C5FUtKGNvGwQJctPgIsgD2wRhEIqAMGB+UQYkHJgYYZD7P1HwVlmWhHcfhyk83KeRGUW4t6CgoG5SNUS4KBWgQDUov'.
- '7AGlwYASBVqH0Bk49dXpCviVV3dw/tI1Bvr7kMIIlh0NYUpjlF0BAYvcxSXmEVLKceHSCJm+PnbueBHbtkNwTXUNBzo6aGpq4sSZ'.
- 'GwT5H7BsF6Wdf1GWHQAoM0upeI9PT1yioS7B7tdaSdSuw7KsUGMAy7HYsmUztTW1nMwM0txssX1rlHjjS5jy/Uq2YkK/eJuLl6/z'.
- 'x+1xkslW6mrixGIODx8EFSlEBC0+tmXT0NhA2763iEUjnLv4C8XpUbSbAB1mKkGJ3J83Od77HW5EszvZSqK2iljMIeJaRGNuJePF'.
- '6mspY7BJ1DXwQnCd2fxGRq5OUCz8xt72dyhMZcn++Cu3xu9SKhdp2b4ZHWnAtTSxmIWlhcIjlksR3lNBYzlxZsb7+f7ne+xtSzOd'.
- 'u83szH1OnThOPp/n+a0beeP1l4mvq+PU2Qyd+5PY1RuwlAqLYFaBfbTbyPSdfgaH77A//QF4f1O/vpr6RJyq+C5Kc/M8FbFxXItY'.
- 'xOHDrvfo/fxLDnbsJBp5BowBReVWYAzabeTh5ABDw7cWoNNL3YYYNtSv57lnn6Z+Qx01VeuIuBa2DV1HD3H63BAPZu4u1WGpeLHq'.
- 'Rh7+NcjA0O+0p4+CNwXigwnbWlQQdpuEpli+n+PIkcOc//YKuckJJFh2K2anrjFw+QZt6S6kPImIF/b+cqAJD1LihWAxC61twBTo'.
- 'fPcQF/oGsVW5ovHQlavs2/8+uYnRVSOUgHAmmAClBIOBwKC0gPjhIRgEIX2wg7NnwpZW3d3d4vs+vu8TBMGK51rvPM9b8hdteZxd'.
- 'LBbVR8feJDs0Rlv6GFKeXJ21rNRXESxMPR+CBUl0nN7PjtO+dye7Up/8v1I88bf/ixT/AO1/hZsqW+C6AAAAAElFTkSuQmCC' ;
+ 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlz'.
+ 'AAALEAAACxABrSO9dQAAAAd0SU1FB9AJHAMfFvL9OU8AAAPfSURBVHictZRdaBRXFMd/987H7tbNx8aYtGCrEexDsOBDaKHFxirb'.
+ 'h0qhsiY0ykppKq1osI99C4H2WSiFFMHWUhXBrjRi0uCmtSEUGgP1QWqhWjGkoW7M1kTX3WRn5p4+TJJNGolQ6IXDnDtz+N0z/3PP'.
+ 'UWBIpdpYa23b9g09PZ2kUrOrvmUyGVKp1Ao/mUyi56YnVgWfO/P1CihAd/dJMpmaNROIRq8BkM1m0bH6TasC3j6QXgFdXI+DR6PR'.
+ 'JX/Pno8B+KLnMKqlpUU8z8MYs2RBEDzWf9J+0RcRbMdxGBsbw/fmCXwPMUEYID4iAVp8wIRmDIHMo4yHSIBSASKC+CWE0C/PF9jU'.
+ '3B6Cp+4M07C5FUtKGNvGwQJctPgIsgD2wRhEIqAMGB+UQYkHJgYYZD7P1HwVlmWhHcfhyk83KeRGUW4t6CgoG5SNUS4KBWgQDUov'.
+ '7AGlwYASBVqH0Bk49dXpCviVV3dw/tI1Bvr7kMIIlh0NYUpjlF0BAYvcxSXmEVLKceHSCJm+PnbueBHbtkNwTXUNBzo6aGpq4sSZ'.
+ 'GwT5H7BsF6Wdf1GWHQAoM0upeI9PT1yioS7B7tdaSdSuw7KsUGMAy7HYsmUztTW1nMwM0txssX1rlHjjS5jy/Uq2YkK/eJuLl6/z'.
+ 'x+1xkslW6mrixGIODx8EFSlEBC0+tmXT0NhA2763iEUjnLv4C8XpUbSbAB1mKkGJ3J83Od77HW5EszvZSqK2iljMIeJaRGNuJePF'.
+ '6mspY7BJ1DXwQnCd2fxGRq5OUCz8xt72dyhMZcn++Cu3xu9SKhdp2b4ZHWnAtTSxmIWlhcIjlksR3lNBYzlxZsb7+f7ne+xtSzOd'.
+ 'u83szH1OnThOPp/n+a0beeP1l4mvq+PU2Qyd+5PY1RuwlAqLYFaBfbTbyPSdfgaH77A//QF4f1O/vpr6RJyq+C5Kc/M8FbFxXItY'.
+ 'xOHDrvfo/fxLDnbsJBp5BowBReVWYAzabeTh5ABDw7cWoNNL3YYYNtSv57lnn6Z+Qx01VeuIuBa2DV1HD3H63BAPZu4u1WGpeLHq'.
+ 'Rh7+NcjA0O+0p4+CNwXigwnbWlQQdpuEpli+n+PIkcOc//YKuckJJFh2K2anrjFw+QZt6S6kPImIF/b+cqAJD1LihWAxC61twBTo'.
+ 'fPcQF/oGsVW5ovHQlavs2/8+uYnRVSOUgHAmmAClBIOBwKC0gPjhIRgEIX2wg7NnwpZW3d3d4vs+vu8TBMGK51rvPM9b8hdteZxd'.
+ 'LBbVR8feJDs0Rlv6GFKeXJ21rNRXESxMPR+CBUl0nN7PjtO+dye7Up/8v1I88bf/ixT/AO1/hZsqW+C6AAAAAElFTkSuQmCC' ;
//==========================================================
// startconstrain.png
//==========================================================
$this->iBuiltinIcon[4][0]= 725 ;
$this->iBuiltinIcon[4][1]=
- 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlz'.
- 'AAALDgAACw4BQL7hQQAAAAd0SU1FB9ALEREICJp5fBkAAAJSSURBVHic3dS9a1NRGMfx77kxtS+xqS9FG6p1ER3qVJpBQUUc3CRU'.
- 'BwURVLB1EAuKIP0THJQiiNRJBK3iJl18AyeltRZa0bbaJMbUNmlNSm5e7s25j0NqpSSmyag/OMM9POdzDuflwn8djz8gClVRrVEV'.
- 'ur4Bl1FTNSzLrSS6vbml0jUUwSXj8Qfk3PkLtLW2AeBIybmrgz3+gFzpucjlE4f4btuFTuWuCF5XDr3a3UPf6cM8GQvxzbsRAJdh'.
- 'ScfxSywml5j7mVypN0eGEJ0tebIre+zxB6Tv7jPReS2hREpOvpmUXU+H5eC913JnNCSRVE60pUVbWoZjprR39Yq70bdqj4pW7PEH'.
- '5FpvL9e79jOTTHM7ssDL6CJZ08LbvAGnrpZg2mI2Z/MlZfN8IkxuSwu4V9+WIrj7zFlOHfXzKrLIi2SGh5ECKjnNVNxkQEc55vOw'.
- 'rb6O8JLFdHyJ+ayFElUeHvjwkfteL/V7fKTSkFvIQE4DoLI2Mz/muTkTApcBKIwaN8pwIUrKw+ajWwDknAO0d/r4zFaMuRS63sWm'.
- 'RoOdm+vRIriUYjKexrQV+t1o0YEVwfZSVJmD/dIABJuO0LG3lRFx0GOfiAELE9OgCrfU0XnIp5FwGLEy5WEAOxlR5uN+ARhP7GN3'.
- '5w7Gv4bQI2+xpt4jjv2nWBmIlcExE2vDAHYioszBZXw6CPE4ADoWVHmd/tuwlZR9eXYyoszBfpiNQqaAOU5+TXRN+DeeenADPT9b'.
- 'EVgKVsutKPl0TGWGhwofoquaoKK4apsq/tH/e/kFwBMXLgAEKK4AAAAASUVORK5CYII=' ;
+ 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlz'.
+ 'AAALDgAACw4BQL7hQQAAAAd0SU1FB9ALEREICJp5fBkAAAJSSURBVHic3dS9a1NRGMfx77kxtS+xqS9FG6p1ER3qVJpBQUUc3CRU'.
+ 'BwURVLB1EAuKIP0THJQiiNRJBK3iJl18AyeltRZa0bbaJMbUNmlNSm5e7s25j0NqpSSmyag/OMM9POdzDuflwn8djz8gClVRrVEV'.
+ 'ur4Bl1FTNSzLrSS6vbml0jUUwSXj8Qfk3PkLtLW2AeBIybmrgz3+gFzpucjlE4f4btuFTuWuCF5XDr3a3UPf6cM8GQvxzbsRAJdh'.
+ 'ScfxSywml5j7mVypN0eGEJ0tebIre+zxB6Tv7jPReS2hREpOvpmUXU+H5eC913JnNCSRVE60pUVbWoZjprR39Yq70bdqj4pW7PEH'.
+ '5FpvL9e79jOTTHM7ssDL6CJZ08LbvAGnrpZg2mI2Z/MlZfN8IkxuSwu4V9+WIrj7zFlOHfXzKrLIi2SGh5ECKjnNVNxkQEc55vOw'.
+ 'rb6O8JLFdHyJ+ayFElUeHvjwkfteL/V7fKTSkFvIQE4DoLI2Mz/muTkTApcBKIwaN8pwIUrKw+ajWwDknAO0d/r4zFaMuRS63sWm'.
+ 'RoOdm+vRIriUYjKexrQV+t1o0YEVwfZSVJmD/dIABJuO0LG3lRFx0GOfiAELE9OgCrfU0XnIp5FwGLEy5WEAOxlR5uN+ARhP7GN3'.
+ '5w7Gv4bQI2+xpt4jjv2nWBmIlcExE2vDAHYioszBZXw6CPE4ADoWVHmd/tuwlZR9eXYyoszBfpiNQqaAOU5+TXRN+DeeenADPT9b'.
+ 'EVgKVsutKPl0TGWGhwofoquaoKK4apsq/tH/e/kFwBMXLgAEKK4AAAAASUVORK5CYII=' ;
//==========================================================
// calc.png
//==========================================================
$this->iBuiltinIcon[5][0]= 589 ;
$this->iBuiltinIcon[5][1]=
- 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAA4AIwBbgMF12wAAAAlwSFlz'.
- 'AAALEQAACxEBf2RfkQAAAAd0SU1FB9AHBxQeFsqn0wQAAAHKSURBVHicnZWff+RAGIef3U/gcOEgUAgUCgcLhYXCwsHBQeGgUDgs'.
- 'FgMHB4VA/4Bg4XChWFgIFIqBwkJhsRAYeOGF+TQHmWSTTbKd9pU37/x45jvfTDITXEynAbdWKVQB0NazcVm0alcL4rJaRVzm+w/e'.
- '3iwAkzbYRcnnYgI04GCvsxxSPabYaEdt2Ra6D0atcvvvDmyrMWBX1zPq2ircP/Tk98DiJtjV/fim6ziOCL6dDHZNhxQ3arIMsox4'.
- 'vejleL2Ay9+jaw6A+4OSICG2cacGKhsGxg+CxeqAQS0Y7BYJvowq7iGMOhXHEfzpvpQkA9bLKgOgWKt+4Lo1mM9hs9m17QNsJ70P'.
- 'Fjc/O52joogoX8MZKiBiAFxd9Z1vcj9wfSpUlDRNMcYQxzFpmnJ0FPH8nDe1MQaWSz9woQpWSZKEojDkeaWoKAyr1tlu+s48wfVx'.
- 'u7n5i7jthmGIiEGcT+36PP+gFeJrxWLhb0UA/lb4ggGs1T0rZs0zwM/ZjNfilcIY5tutPxgOW3F6dUX464LrKILLiw+A7WErrl+2'.
- 'rABG1EL/BilZP8DjU2uR4U+2E49P1Z8QJmNXUzl24A9GBT0IruCfi86d9x+D12RGzt+pNAAAAABJRU5ErkJggg==' ;
+ 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAA4AIwBbgMF12wAAAAlwSFlz'.
+ 'AAALEQAACxEBf2RfkQAAAAd0SU1FB9AHBxQeFsqn0wQAAAHKSURBVHicnZWff+RAGIef3U/gcOEgUAgUCgcLhYXCwsHBQeGgUDgs'.
+ 'FgMHB4VA/4Bg4XChWFgIFIqBwkJhsRAYeOGF+TQHmWSTTbKd9pU37/x45jvfTDITXEynAbdWKVQB0NazcVm0alcL4rJaRVzm+w/e'.
+ '3iwAkzbYRcnnYgI04GCvsxxSPabYaEdt2Ra6D0atcvvvDmyrMWBX1zPq2ircP/Tk98DiJtjV/fim6ziOCL6dDHZNhxQ3arIMsox4'.
+ 'vejleL2Ay9+jaw6A+4OSICG2cacGKhsGxg+CxeqAQS0Y7BYJvowq7iGMOhXHEfzpvpQkA9bLKgOgWKt+4Lo1mM9hs9m17QNsJ70P'.
+ 'Fjc/O52joogoX8MZKiBiAFxd9Z1vcj9wfSpUlDRNMcYQxzFpmnJ0FPH8nDe1MQaWSz9woQpWSZKEojDkeaWoKAyr1tlu+s48wfVx'.
+ 'u7n5i7jthmGIiEGcT+36PP+gFeJrxWLhb0UA/lb4ggGs1T0rZs0zwM/ZjNfilcIY5tutPxgOW3F6dUX464LrKILLiw+A7WErrl+2'.
+ 'rABG1EL/BilZP8DjU2uR4U+2E49P1Z8QJmNXUzl24A9GBT0IruCfi86d9x+D12RGzt+pNAAAAABJRU5ErkJggg==' ;
//==========================================================
// mag.png
//==========================================================
$this->iBuiltinIcon[6][0]= 1415 ;
$this->iBuiltinIcon[6][1]=
- 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlz'.
- 'AAALDAAACwwBP0AiyAAAAAd0SU1FB9ALDxEWDY6Ul+UAAAUESURBVHicdZVrbFRFGIafsyyF0nalV1R6WiggaAptlzsr1OgEogmC'.
- '0IgoBAsBgkIrBAPEhBj/AP6xRTCUFEwRI4jcgsitXMrFCJptJWvBNpXYbbXtbtttt6e7e86ec/yxadlCfZPJZDIz73zzzjfvR2VL'.
- 'F7U+hf0HD2JduIzTFy6SlJRkPtkcDgdCCE65OxFC8NPV6wghyM7OptankJ2dzbSC5QghEEIgCSHog9PpNAF27dlN6miZuPgElB4/'.
- 'nmY3O7ZtByA1NVUCkGWZweD1eklJScESTbqxuIjrd+/x6uIl5M19hSy7nfGOeUxf+g7VjU1sKi7C4/GYsiyz7tAJAD4/cRaA1tZW'.
- 'AHIPnECUVGD1+/3U19ebG4uLeHf1akamjsIwoVnVCOvQEdLoVILYYmMo3PIxSBJflpSaDX5FAmju1QAYv/8k/s8+wLVxOU0jR2LZ'.
- '8sMFAApWrCApbRRDrRZirBYSLBKaoRPQw3SFernf2sav7T0Ubt4KwL4FMwF4Vu8FoHBCKgCzDhwHwLIhZ7y5a89u4m2JhA0wTdDC'.
- 'OrphEjJMNElCHxKDEjaobmvlfo/Krj27CQQCJsCGJW8C0KXqAMxMiosQA8hZWcTFx9OsaniDKh1qmG7VoFsL0x0K06kbeAMhWpRe'.
- '/KpG+gwHAKUnz7Dz3BUMw6DK18nuw99wt0Nh6VdHI8RJicmETQgFg7SFwjSrGv+oKp6ghldV6dZ0ugJBlF6FmCESQ2w2AIqXLsan'.
- 'BrFYLJTnTCBrdBqveeopWZiPFaBHUegJhegMqGgxEkHDwB/UaQ9rdIV06v0+TD2EEQjQFtAY0dsNgNvt5sialQAIIXh7wQKuVf6J'.
- 'gTsSccPDWlQstClBGjr9eHpVWvUQncEwdYEedF8noQ4vmYmpZMTH0nTvDn25vLbrNmu7bvfnsYEbAMnhcPDgwQPzUo2LJusw/mhp'.
- 'QwlHNO0KBAnoIfxtrcQMT2De1Mm891wyUzNlUlJSpIyMDBobGzlzr5rFM/Koq6vrP8ASGxsLwPmKcvIShjPGZiPOakE3VFB8hHwd'.
- 'vJAxhrk5L7Ly+RQuH/sWgPdXrwFg/6HDFBUsIj09nehfbAWwPWOT9n5RYhqGwarNWxkRM5TRCfF4U1PQsDDJFk9uYhwXvzvKjm3b'.
- 'KSsro3DJInNW5RXp7u2bAKSlpeH1esnPz6eqqgqLpmmcr3Fht9ulfaV7mZk1Bs+lM6T1djM9fhg5egDPpTNMy5TZsW07kydPYdWM'.
- 'aXx96ixOp9O8cfUa80srmDpjOgAulytiQqZpMnvObLbt/JTtHxXj9/tRVdU0DGOAufRpevPDTeac0hJyc3NxOOawfv161lVWS6eX'.
- 'z+9/UOCxu1VWVvaTRGv16NFfjB2bNeAQp9NpTpmSM4DcbrdL0WsGDKLRR+52uwe1yP8jb2lpYfikyY9t80n03UCWZeaXVjw1f+zs'.
- 'Oen+/d+pqanhzp2fKSsrw+l0mi6XiyPl5ZGITdN8fAVJwjRNJEmi1qfw1kw7siyTnJxMe3s71dXV3GpoZO64DG41NPJylvxU5D/e'.
- 'qJKsfWQD9IkaZ2RmUvr9aV4aGYcQgjfO3aWoYBF5eXm4ewIsu/CbdPz1aWb0/p1bNoOrQxlUiuiaFo3c3FyEEOx9+C9CCD6paaTW'.
- 'p/TXyYkTJ0Xe59jf7QOyAKDWp/QXxcFQ61P4pT3ShBBcvnUHIQTjxmX19/8BCeVg+/GPpskAAAAASUVORK5CYII=' ;
+ 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlz'.
+ 'AAALDAAACwwBP0AiyAAAAAd0SU1FB9ALDxEWDY6Ul+UAAAUESURBVHicdZVrbFRFGIafsyyF0nalV1R6WiggaAptlzsr1OgEogmC'.
+ '0IgoBAsBgkIrBAPEhBj/AP6xRTCUFEwRI4jcgsitXMrFCJptJWvBNpXYbbXtbtttt6e7e86ec/yxadlCfZPJZDIz73zzzjfvR2VL'.
+ 'F7U+hf0HD2JduIzTFy6SlJRkPtkcDgdCCE65OxFC8NPV6wghyM7OptankJ2dzbSC5QghEEIgCSHog9PpNAF27dlN6miZuPgElB4/'.
+ 'nmY3O7ZtByA1NVUCkGWZweD1eklJScESTbqxuIjrd+/x6uIl5M19hSy7nfGOeUxf+g7VjU1sKi7C4/GYsiyz7tAJAD4/cRaA1tZW'.
+ 'AHIPnECUVGD1+/3U19ebG4uLeHf1akamjsIwoVnVCOvQEdLoVILYYmMo3PIxSBJflpSaDX5FAmju1QAYv/8k/s8+wLVxOU0jR2LZ'.
+ '8sMFAApWrCApbRRDrRZirBYSLBKaoRPQw3SFernf2sav7T0Ubt4KwL4FMwF4Vu8FoHBCKgCzDhwHwLIhZ7y5a89u4m2JhA0wTdDC'.
+ 'OrphEjJMNElCHxKDEjaobmvlfo/Krj27CQQCJsCGJW8C0KXqAMxMiosQA8hZWcTFx9OsaniDKh1qmG7VoFsL0x0K06kbeAMhWpRe'.
+ '/KpG+gwHAKUnz7Dz3BUMw6DK18nuw99wt0Nh6VdHI8RJicmETQgFg7SFwjSrGv+oKp6ghldV6dZ0ugJBlF6FmCESQ2w2AIqXLsan'.
+ 'BrFYLJTnTCBrdBqveeopWZiPFaBHUegJhegMqGgxEkHDwB/UaQ9rdIV06v0+TD2EEQjQFtAY0dsNgNvt5sialQAIIXh7wQKuVf6J'.
+ 'gTsSccPDWlQstClBGjr9eHpVWvUQncEwdYEedF8noQ4vmYmpZMTH0nTvDn25vLbrNmu7bvfnsYEbAMnhcPDgwQPzUo2LJusw/mhp'.
+ 'QwlHNO0KBAnoIfxtrcQMT2De1Mm891wyUzNlUlJSpIyMDBobGzlzr5rFM/Koq6vrP8ASGxsLwPmKcvIShjPGZiPOakE3VFB8hHwd'.
+ 'vJAxhrk5L7Ly+RQuH/sWgPdXrwFg/6HDFBUsIj09nehfbAWwPWOT9n5RYhqGwarNWxkRM5TRCfF4U1PQsDDJFk9uYhwXvzvKjm3b'.
+ 'KSsro3DJInNW5RXp7u2bAKSlpeH1esnPz6eqqgqLpmmcr3Fht9ulfaV7mZk1Bs+lM6T1djM9fhg5egDPpTNMy5TZsW07kydPYdWM'.
+ 'aXx96ixOp9O8cfUa80srmDpjOgAulytiQqZpMnvObLbt/JTtHxXj9/tRVdU0DGOAufRpevPDTeac0hJyc3NxOOawfv161lVWS6eX'.
+ 'z+9/UOCxu1VWVvaTRGv16NFfjB2bNeAQp9NpTpmSM4DcbrdL0WsGDKLRR+52uwe1yP8jb2lpYfikyY9t80n03UCWZeaXVjw1f+zs'.
+ 'Oen+/d+pqanhzp2fKSsrw+l0mi6XiyPl5ZGITdN8fAVJwjRNJEmi1qfw1kw7siyTnJxMe3s71dXV3GpoZO64DG41NPJylvxU5D/e'.
+ 'qJKsfWQD9IkaZ2RmUvr9aV4aGYcQgjfO3aWoYBF5eXm4ewIsu/CbdPz1aWb0/p1bNoOrQxlUiuiaFo3c3FyEEOx9+C9CCD6paaTW'.
+ 'p/TXyYkTJ0Xe59jf7QOyAKDWp/QXxcFQ61P4pT3ShBBcvnUHIQTjxmX19/8BCeVg+/GPpskAAAAASUVORK5CYII=' ;
//==========================================================
// lock.png
//==========================================================
$this->iBuiltinIcon[7][0]= 963 ;
$this->iBuiltinIcon[7][1]=
- 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlz'.
- 'AAALCwAACwsBbQSEtwAAAAd0SU1FB9AKAw0XDmwMOwIAAANASURBVHic7ZXfS1t3GMY/3+PprI7aisvo2YU6h6ATA8JW4rrlsF4U'.
- 'qiAsF9mhl0N2cYTRy9G/wptAYWPD9iJtRy5asDe7cYFmyjaXOLaMImOrmkRrjL9yTmIS3120JybWQgfb3R74wuc8Lzw858vLOUpE'.
- 'OK6pqSm2trbY39+nu7tbPHYch7m5OcLhMIA67kWj0aMQEWk6tm17rNm2LSIie3t7ksvlJJ1OSyqVkls3Z8SyLMnlcqTTaVKpFLdu'.
- 'zmBZVj1HeY2VUti2TSQSQSml2bZdi0QirK2tMT09zerqKtlslqGhISYnJ4nHv2N+foFsNquOe9FotLlxOBwmk8lgWRbhcFgymYxY'.
- 'liUi0mqaJoAuIi2macrdO7fFsizx3to0Te7euV1vrXtXEgqFmJmZYWVlhXK5LB4/U9kwDL784kYV0A3DYHd3m4sXRymXywKoRi8U'.
- 'Ch01DgQCJBIJLMsiEAhIIpHw2uLz+eqtYrEYIqKZpimxWEyCwaCMjY01zYPBIJpXqVQqsby8TLVabWKA/v5+RkZGMAyDrq4ulFKH'.
- 'HsfjcWZnZ+ns7KTRqwcnk0mKxSKFQqGJlVKtruuSTCYB6O3trW9UI/v9/iZPB/j8s2HOnX0FgHfeXpeffnzK+fWf+fijvhLs0PtG'.
- 'D/n1OJ9+MsrlSwb3733DwMCAt1EyPj6uACYmJp56168NU6nUqFSE9nZdPE7+WqC/r4NKTagcCJVqDaUUB5VDAA4Pa9x7sMLlSwan'.
- 'WjRmv13D7/erpaWlo604qOp88OF7LC48rPNosMq5Th+Dgxd4/XyA1rbzADi7j8jnf2P++wdcvSr8MJ/i8eomAKlUqn41OsDAQDeD'.
- 'g++yuPCwzm/2vU8+n2a7sMFfj79mp7BBuVzioFSiXHJx3SKuW2Rzy0Up9dxnQVvODALQerqNRn4ZKe0Mvtc6TpzpmqbxalcY9Ato'.
- '2v06t515C73YQftZB9GLnDrt4LoujuPgOA4Ui+C6yOpXJwZrJ7r/gv4P/u+D9W7fLxTz+1ScQxrZ3atRLaVxdjbY2d184R6/sLHe'.
- 'opHP7/Do90Ua+WWUyezzZHObP/7cfX54/dowE1d66s8TV3oE+Mfn+L/zb4XmHPjRG9YjAAAAAElFTkSuQmCC' ;
+ 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlz'.
+ 'AAALCwAACwsBbQSEtwAAAAd0SU1FB9AKAw0XDmwMOwIAAANASURBVHic7ZXfS1t3GMY/3+PprI7aisvo2YU6h6ATA8JW4rrlsF4U'.
+ 'qiAsF9mhl0N2cYTRy9G/wptAYWPD9iJtRy5asDe7cYFmyjaXOLaMImOrmkRrjL9yTmIS3120JybWQgfb3R74wuc8Lzw858vLOUpE'.
+ 'OK6pqSm2trbY39+nu7tbPHYch7m5OcLhMIA67kWj0aMQEWk6tm17rNm2LSIie3t7ksvlJJ1OSyqVkls3Z8SyLMnlcqTTaVKpFLdu'.
+ 'zmBZVj1HeY2VUti2TSQSQSml2bZdi0QirK2tMT09zerqKtlslqGhISYnJ4nHv2N+foFsNquOe9FotLlxOBwmk8lgWRbhcFgymYxY'.
+ 'liUi0mqaJoAuIi2macrdO7fFsizx3to0Te7euV1vrXtXEgqFmJmZYWVlhXK5LB4/U9kwDL784kYV0A3DYHd3m4sXRymXywKoRi8U'.
+ 'Ch01DgQCJBIJLMsiEAhIIpHw2uLz+eqtYrEYIqKZpimxWEyCwaCMjY01zYPBIJpXqVQqsby8TLVabWKA/v5+RkZGMAyDrq4ulFKH'.
+ 'HsfjcWZnZ+ns7KTRqwcnk0mKxSKFQqGJlVKtruuSTCYB6O3trW9UI/v9/iZPB/j8s2HOnX0FgHfeXpeffnzK+fWf+fijvhLs0PtG'.
+ 'D/n1OJ9+MsrlSwb3733DwMCAt1EyPj6uACYmJp56168NU6nUqFSE9nZdPE7+WqC/r4NKTagcCJVqDaUUB5VDAA4Pa9x7sMLlSwan'.
+ 'WjRmv13D7/erpaWlo604qOp88OF7LC48rPNosMq5Th+Dgxd4/XyA1rbzADi7j8jnf2P++wdcvSr8MJ/i8eomAKlUqn41OsDAQDeD'.
+ 'g++yuPCwzm/2vU8+n2a7sMFfj79mp7BBuVzioFSiXHJx3SKuW2Rzy0Up9dxnQVvODALQerqNRn4ZKe0Mvtc6TpzpmqbxalcY9Ato'.
+ '2v06t515C73YQftZB9GLnDrt4LoujuPgOA4Ui+C6yOpXJwZrJ7r/gv4P/u+D9W7fLxTz+1ScQxrZ3atRLaVxdjbY2d184R6/sLHe'.
+ 'opHP7/Do90Ua+WWUyezzZHObP/7cfX54/dowE1d66s8TV3oE+Mfn+L/zb4XmHPjRG9YjAAAAAElFTkSuQmCC' ;
//==========================================================
// stop.png
//==========================================================
$this->iBuiltinIcon[8][0]= 889 ;
$this->iBuiltinIcon[8][1]=
- 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlz'.
- 'AAALDwAACw8BkvkDpQAAAAd0SU1FB9AJDwEvNyD6M/0AAAL2SURBVHic1ZTLaxVnGIefb2bO5OScHJN4oWrFNqcUJYoUEgU3/Qf6'.
- 'F7gwCkIrvdBLUtqqiLhSg9bgBduFSHZdiG5ctkJ3xRDbUFwUmghNzBDanPGMkzOX79LFJGPMOSd204U/+Bbzvd/78F4H/ieJdoad'.
- 'pZKxRFszAI/DcP0HazXY22v+HB01kee1PA/v3zfnjx4xgGnHcNZe7OvuNj+cOEF1ZATv5nUA4jhBSgmADCVWo8Ge2Of9wb18P/G7'.
- 'oUXmYi30zqlTVEdGWLh1g2D6MYlKkXGE0Vl8aa2GEB149+4xXSzyoOIw/mimiZV/DPb25pFOj13A9gOMEChhUEqhVYqWKUk9QAUp'.
- 'sT/P4s8PmKlUmNhQaIJbkDVqBbpw6wZ2zUc4Nm+ePku5p4eOrgpueQOFUoVCVxcD4+N07dpF9+5tVJeWGPBjhvr7WF1zC8ASgtcP'.
- 'H8a7eZ1odh4sh50nzwCw9ZNh3M4Stutiu0X2nB/LyjZ6lcIbVTpdQU/jWVPzLADM8+ZGBRdtC7wrF/O7bR99iu26VL86iU4SAH4b'.
- 'Po5d6AQhstMSvGyI4wS5FJBKSRwnzF8byx/u+PjzzMF1mfryQ1K/jnCahqp1xEopjFLoNEFJSRJHzF799gWHqa+/QKcSUXBI609f'.
- 'Al5W4teQSiHDOipNUKnMI13RvnOXAIEKQixvGWya98SC560MFwPiqEG86JM8q79Q06lvhnOndy5/B6GPCUOMUu3BQgg8z0M3GmBZ'.
- 'iGJn3v2VmsqnfzNx7FDueODuj8ROCFpjtG5TCmOYv32bJ09msP0ISydMfnAUgF8/O45RAA6WTPjlvXcB+Gn7FuRf/zAnNX6x3ARe'.
- 'PSdmqL+P/YHkwMGDOGWDZTlQcNBRhPEComgB/YeHfq2InF1kLlXUOkpMbio1bd7aATRD/X0M1lPeSlM2vt2X1XBZjZnpLG2tmZO6'.
- 'LbQVOIcP+HG2UauH3xgwBqOz9Cc3l1tC24Fz+MvUDroeGNb5if9H/1dM/wLPCYMw9fryKgAAAABJRU5ErkJggg==' ;
+ 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlz'.
+ 'AAALDwAACw8BkvkDpQAAAAd0SU1FB9AJDwEvNyD6M/0AAAL2SURBVHic1ZTLaxVnGIefb2bO5OScHJN4oWrFNqcUJYoUEgU3/Qf6'.
+ 'F7gwCkIrvdBLUtqqiLhSg9bgBduFSHZdiG5ctkJ3xRDbUFwUmghNzBDanPGMkzOX79LFJGPMOSd204U/+Bbzvd/78F4H/ieJdoad'.
+ 'pZKxRFszAI/DcP0HazXY22v+HB01kee1PA/v3zfnjx4xgGnHcNZe7OvuNj+cOEF1ZATv5nUA4jhBSgmADCVWo8Ge2Of9wb18P/G7'.
+ 'oUXmYi30zqlTVEdGWLh1g2D6MYlKkXGE0Vl8aa2GEB149+4xXSzyoOIw/mimiZV/DPb25pFOj13A9gOMEChhUEqhVYqWKUk9QAUp'.
+ 'sT/P4s8PmKlUmNhQaIJbkDVqBbpw6wZ2zUc4Nm+ePku5p4eOrgpueQOFUoVCVxcD4+N07dpF9+5tVJeWGPBjhvr7WF1zC8ASgtcP'.
+ 'H8a7eZ1odh4sh50nzwCw9ZNh3M4Stutiu0X2nB/LyjZ6lcIbVTpdQU/jWVPzLADM8+ZGBRdtC7wrF/O7bR99iu26VL86iU4SAH4b'.
+ 'Po5d6AQhstMSvGyI4wS5FJBKSRwnzF8byx/u+PjzzMF1mfryQ1K/jnCahqp1xEopjFLoNEFJSRJHzF799gWHqa+/QKcSUXBI609f'.
+ 'Al5W4teQSiHDOipNUKnMI13RvnOXAIEKQixvGWya98SC560MFwPiqEG86JM8q79Q06lvhnOndy5/B6GPCUOMUu3BQgg8z0M3GmBZ'.
+ 'iGJn3v2VmsqnfzNx7FDueODuj8ROCFpjtG5TCmOYv32bJ09msP0ISydMfnAUgF8/O45RAA6WTPjlvXcB+Gn7FuRf/zAnNX6x3ARe'.
+ 'PSdmqL+P/YHkwMGDOGWDZTlQcNBRhPEComgB/YeHfq2InF1kLlXUOkpMbio1bd7aATRD/X0M1lPeSlM2vt2X1XBZjZnpLG2tmZO6'.
+ 'LbQVOIcP+HG2UauH3xgwBqOz9Cc3l1tC24Fz+MvUDroeGNb5if9H/1dM/wLPCYMw9fryKgAAAABJRU5ErkJggg==' ;
//==========================================================
// error.png
//==========================================================
$this->iBuiltinIcon[9][0]= 541 ;
$this->iBuiltinIcon[9][1]=
- 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAMAAAC7IEhfAAAAaVBMVEX//////2Xy8mLl5V/Z2VvMzFi/v1WyslKlpU+ZmUyMjEh/'.
- 'f0VyckJlZT9YWDxMTDjAwMDy8sLl5bnY2K/MzKW/v5yyspKlpYiYmH+MjHY/PzV/f2xycmJlZVlZWU9MTEXY2Ms/PzwyMjLFTjea'.
- 'AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfTCAkUMSj9wWSOAAABLUlEQVR4'.
- '2s2U3ZKCMAxGjfzJanFAXFkUle/9H9JUKA1gKTN7Yy6YMjl+kNPK5rlZVSuxf1ZRnlZxFYAm93NnIKvR+MEHUgqBXx93wZGIUrSe'.
- 'h+ctEgbpiMo3iQ4kioHCGxir/ZYUbr7AgPXs9bX0BCYM8vN/cPe8oQYzom3tVsSBMVHEoOJ5dm5F1RsIe9CtqGgRacCAkUvRtevT'.
- 'e2pd6vOWF+gCuc/brcuhyARakBU9FgK5bUBWdHEH8tHpDsZnRTZQGzdLVvQ3CzyYZiTAmSIODEwzFCAdJopuvbpeZDisJ4pKEcjD'.
- 'ijWPJhU1MjCo9dkYfiUVjQNTDKY6CVbR6A0niUSZjRwFanR0l9i/TyvGnFdqwStq5axMfDbyBksld/FUumvxS/Bd9VyJvQDWiiMx'.
- 'iOsCHgAAAABJRU5ErkJggg==' ;
+ 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAMAAAC7IEhfAAAAaVBMVEX//////2Xy8mLl5V/Z2VvMzFi/v1WyslKlpU+ZmUyMjEh/'.
+ 'f0VyckJlZT9YWDxMTDjAwMDy8sLl5bnY2K/MzKW/v5yyspKlpYiYmH+MjHY/PzV/f2xycmJlZVlZWU9MTEXY2Ms/PzwyMjLFTjea'.
+ 'AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfTCAkUMSj9wWSOAAABLUlEQVR4'.
+ '2s2U3ZKCMAxGjfzJanFAXFkUle/9H9JUKA1gKTN7Yy6YMjl+kNPK5rlZVSuxf1ZRnlZxFYAm93NnIKvR+MEHUgqBXx93wZGIUrSe'.
+ 'h+ctEgbpiMo3iQ4kioHCGxir/ZYUbr7AgPXs9bX0BCYM8vN/cPe8oQYzom3tVsSBMVHEoOJ5dm5F1RsIe9CtqGgRacCAkUvRtevT'.
+ 'e2pd6vOWF+gCuc/brcuhyARakBU9FgK5bUBWdHEH8tHpDsZnRTZQGzdLVvQ3CzyYZiTAmSIODEwzFCAdJopuvbpeZDisJ4pKEcjD'.
+ 'ijWPJhU1MjCo9dkYfiUVjQNTDKY6CVbR6A0niUSZjRwFanR0l9i/TyvGnFdqwStq5axMfDbyBksld/FUumvxS/Bd9VyJvQDWiiMx'.
+ 'iOsCHgAAAABJRU5ErkJggg==' ;
//==========================================================
// openfolder.png
//==========================================================
$this->iBuiltinIcon[10][0]= 2040 ;
$this->iBuiltinIcon[10][1]=
- 'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEANAAtwClFht71AAAAAlwSFlz'.
- 'AAALEAAACxABrSO9dQAAAAd0SU1FB9AKDQ4RIXMeaLcAAAd1SURBVHicxZd7jBXVHcc/58zcvTNzH8vusqw8FsTsKiCUUh5WBZXG'.
- 'GkOptmqwNWsWLKXFGlEpzZI0AWNKSy0WhDS22gJKtWlTsSRqzYIuLGB2WVvDIwQMZQMsy2OFfdzde+/OnHP6x907vJaFpjb9JZM5'.
- 'c85Mfp/f9/s7Jxn4P4e41gtSyp78WGvtfdEAcqDFYUOH9HS0NhGk9tPb/ilSyp789UUB2AMuqhQy3Uzm7HGkE6W3dTNZMRI3EcWO'.
- 'jf9ClLmWBT3dzW8jUsevWHCG3UpWl+IkHSxnbDh/Mcz12NevBcuWXTmf6TjnXvJ88gDmVB3pw3+nt3UzHa1NqMzBS2zqPLGFjtMN'.
- 'ZNr3XdW+qyqwZcFk76HX/tHWfuQvyO4W7qhaHwL8efkMRlRUpPv7rqD0RrJ+FgAjLy1a20OIxZJEEuNCRfIApj+om4bGM3u2/sYU'.
- '9J41d8973f3Dhg1pISTV1dXXBRNJxPGFCzhou+DCQrScZOkktNaeDZjamgeZ9MgiYmVDccvHhjAzJw0NTh8/alyZMaVJicp0iTHj'.
- 'JpgNv38tjWUhhGROdbUL9W5/MH5XCkjlcibi+KIop5LVHLKEu8A/f4r286doa9pGrGwYAAsfqbbH3b8MgO/Nqgy6WvdbbXHMkEFJ'.
- '4xUOMVEvaTZu3BgmvF4Yk4hz9rO/Ulr5cE9owae/rcGxohSOuiWkC2IjcIqKyPZm+OmCH7GhoZEF077EEzVVweAbJ+riEeO0Ey8y'.
- 'UubqOHn0AOgMwvf59txnBrSp9dgxKmf/+kIP1NY8SFk0jh5ajmNHAWg5b2E5EexojGHjbiVRMoRMNs0LC+Yz46vTuH3enN7BI8fr'.
- 'qFdo0BoVZNC9aVSQ4fNjBzEmQJiARxb+/AqYPMAVB5FsPU5v37g9OxgLhe14ZM5/ju052E6MNZvf5pmHHuLmmWOkEysxUtpGAtme'.
- 'dtHTflJkezqQto3jFRnLssyf1jydxiiM7zNnye/c3ZsqLu2BN5fcMfzrv/hby1tPzmRUoihcTJ87CwQI2yLtDcIqsIjYUf51qBlf'.
- 'OnScOSrdQUOMURkiXsLUzJnvbGhoBGDHH5cGyZLhOpYoNl5hqYnYEXOu5fDl9eYAHntx98n8hFHZcPHUuTSxSASAeK/CGIOxJJ0f'.
- 'bOGNPU280dgkq6Y2yu8vfjCIlwwzr+/ZQ/PHO0gOLuO5qsftDQ2NbN+4OCgqG6WTxWVaq6zpF+DiSHWnicdylp3r6aZTWthIOrNp'.
- 'ktHcvBu0sHX1Sm6ozB3B42d90zZA9bQp7PvgPSzXZfnqX/HS4DKKK2+x69Y/HURs26iBAN5ccsfw7774UcumF37C6f07KSt2OHji'.
- 'DEUJD0tISjyPrrSPlAKvN0JP/U4O1NfjuhG2rvklN1SOpfXwftpbTqAyKRrff5fb7rs9V1R7m4wlz2ihA3HpmXflUWyOH2umpLiY'.
- 'ui3v8M+6bWzfsRNbSgqkxaCkiy0simMuEWEhpcRzIhQWOIAh6tiAwS4owInFiTou5dOnMnl2NR++ujBwXEc9terD6M43nrj6LgAB'.
- 'QnDPA9/irtkP8JRS7Hr/3T6YekDQ1pEiEXOwpUVJzCVlZZFS4mZtkpEo9ChAkDp/jtLMBACy6S4RiQghLyv5cgBRPnKUOX6smUGF'.
- 'hSil0MYw9d77mPy1e5mnFE3batm3czvb6nYgEJztSFGU9LCRlMRdUjIH0+lnEMIwPNXD3NumoVJnrMCJaiciMUZfvQnz4QcBSvV1'.
- 'vjE5GK358t0zmXDnDB79saLpo20c+aSRD+t25JTp7GZQwsEWFiVxl6hlUf/WO9z32CxmL1rOe6u/I2KuwGhzLQCB7/sYY9Bah3el'.
- 'FKbvrrVm4vS7GH/7ncx+chEHGz7myCeNbPtoO0JI2jq78WIRLGkzsqs7V5SfFV5EovXACoiqqsfNpk2vo5VCWtYFBfoU0VoTBAFa'.
- 'a7TRaK2p+MoURk+cxMzq+Rzbv49DDbuo27UTW9h0dedssPxuK+kIfN8XxhgDYPVXf2Fh4XKtFIl4AiklAlBKAYRKKK36wHIweTCt'.
- 'NfHiEkaOn8j0+7/BmDFjaT30GbHywSxcuZkpFfFg+m1jjZ/NmnVvNfRvwd69e8WBA/uNFAIh4JVXXmHsmDHE4vEQQgjQ2lxQIm9N'.
- 'nz35q3BEOZOHzaG2thaA4mRU+L29It+IV21CpbRQfeMFC35gRB/M2rVrubnyZmLxWJhECBEmz/eHyo/7lMlH3LFFujsthNFCCGOu'.
- '+WNyeUgpjSVzMKtWraKyshLPdcPEeYWCIEBdpIxSivr6eta8vI7d6+cGnhdV06pe1QP+F/QXWmuRL+jZZ58LlVmxYgUVFRV4rhtu'.
- '4TzMxXAA6XRaRAtsYUkx8I/JtSJQOlSwpmZpCLN8+fPcdNNoHMfB9/0QJgRoP295TlR7UVv8xxZcHMuWIZ9/Hn35vG3JEGZpzVJG'.
- 'jx5N1IlitKahsZE1L69j69qHgx+urFX/lQL9JYdLlfnZihUhzOLFi8N3Ml1dthOxVH/f/8/CtqSJ2JaJ2JZ59J7RPsC/AViJsQS/'.
- 'dBntAAAAAElFTkSuQmCC' ;
+ 'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEANAAtwClFht71AAAAAlwSFlz'.
+ 'AAALEAAACxABrSO9dQAAAAd0SU1FB9AKDQ4RIXMeaLcAAAd1SURBVHicxZd7jBXVHcc/58zcvTNzH8vusqw8FsTsKiCUUh5WBZXG'.
+ 'GkOptmqwNWsWLKXFGlEpzZI0AWNKSy0WhDS22gJKtWlTsSRqzYIuLGB2WVvDIwQMZQMsy2OFfdzde+/OnHP6x907vJaFpjb9JZM5'.
+ 'c85Mfp/f9/s7Jxn4P4e41gtSyp78WGvtfdEAcqDFYUOH9HS0NhGk9tPb/ilSyp789UUB2AMuqhQy3Uzm7HGkE6W3dTNZMRI3EcWO'.
+ 'jf9ClLmWBT3dzW8jUsevWHCG3UpWl+IkHSxnbDh/Mcz12NevBcuWXTmf6TjnXvJ88gDmVB3pw3+nt3UzHa1NqMzBS2zqPLGFjtMN'.
+ 'ZNr3XdW+qyqwZcFk76HX/tHWfuQvyO4W7qhaHwL8efkMRlRUpPv7rqD0RrJ+FgAjLy1a20OIxZJEEuNCRfIApj+om4bGM3u2/sYU'.
+ '9J41d8973f3Dhg1pISTV1dXXBRNJxPGFCzhou+DCQrScZOkktNaeDZjamgeZ9MgiYmVDccvHhjAzJw0NTh8/alyZMaVJicp0iTHj'.
+ 'JpgNv38tjWUhhGROdbUL9W5/MH5XCkjlcibi+KIop5LVHLKEu8A/f4r286doa9pGrGwYAAsfqbbH3b8MgO/Nqgy6WvdbbXHMkEFJ'.
+ '4xUOMVEvaTZu3BgmvF4Yk4hz9rO/Ulr5cE9owae/rcGxohSOuiWkC2IjcIqKyPZm+OmCH7GhoZEF077EEzVVweAbJ+riEeO0Ey8y'.
+ 'UubqOHn0AOgMwvf59txnBrSp9dgxKmf/+kIP1NY8SFk0jh5ajmNHAWg5b2E5EexojGHjbiVRMoRMNs0LC+Yz46vTuH3enN7BI8fr'.
+ 'qFdo0BoVZNC9aVSQ4fNjBzEmQJiARxb+/AqYPMAVB5FsPU5v37g9OxgLhe14ZM5/ju052E6MNZvf5pmHHuLmmWOkEysxUtpGAtme'.
+ 'dtHTflJkezqQto3jFRnLssyf1jydxiiM7zNnye/c3ZsqLu2BN5fcMfzrv/hby1tPzmRUoihcTJ87CwQI2yLtDcIqsIjYUf51qBlf'.
+ 'OnScOSrdQUOMURkiXsLUzJnvbGhoBGDHH5cGyZLhOpYoNl5hqYnYEXOu5fDl9eYAHntx98n8hFHZcPHUuTSxSASAeK/CGIOxJJ0f'.
+ 'bOGNPU280dgkq6Y2yu8vfjCIlwwzr+/ZQ/PHO0gOLuO5qsftDQ2NbN+4OCgqG6WTxWVaq6zpF+DiSHWnicdylp3r6aZTWthIOrNp'.
+ 'ktHcvBu0sHX1Sm6ozB3B42d90zZA9bQp7PvgPSzXZfnqX/HS4DKKK2+x69Y/HURs26iBAN5ccsfw7774UcumF37C6f07KSt2OHji'.
+ 'DEUJD0tISjyPrrSPlAKvN0JP/U4O1NfjuhG2rvklN1SOpfXwftpbTqAyKRrff5fb7rs9V1R7m4wlz2ihA3HpmXflUWyOH2umpLiY'.
+ 'ui3v8M+6bWzfsRNbSgqkxaCkiy0simMuEWEhpcRzIhQWOIAh6tiAwS4owInFiTou5dOnMnl2NR++ujBwXEc9terD6M43nrj6LgAB'.
+ 'QnDPA9/irtkP8JRS7Hr/3T6YekDQ1pEiEXOwpUVJzCVlZZFS4mZtkpEo9ChAkDp/jtLMBACy6S4RiQghLyv5cgBRPnKUOX6smUGF'.
+ 'hSil0MYw9d77mPy1e5mnFE3batm3czvb6nYgEJztSFGU9LCRlMRdUjIH0+lnEMIwPNXD3NumoVJnrMCJaiciMUZfvQnz4QcBSvV1'.
+ 'vjE5GK358t0zmXDnDB79saLpo20c+aSRD+t25JTp7GZQwsEWFiVxl6hlUf/WO9z32CxmL1rOe6u/I2KuwGhzLQCB7/sYY9Bah3el'.
+ 'FKbvrrVm4vS7GH/7ncx+chEHGz7myCeNbPtoO0JI2jq78WIRLGkzsqs7V5SfFV5EovXACoiqqsfNpk2vo5VCWtYFBfoU0VoTBAFa'.
+ 'a7TRaK2p+MoURk+cxMzq+Rzbv49DDbuo27UTW9h0dedssPxuK+kIfN8XxhgDYPVXf2Fh4XKtFIl4AiklAlBKAYRKKK36wHIweTCt'.
+ 'NfHiEkaOn8j0+7/BmDFjaT30GbHywSxcuZkpFfFg+m1jjZ/NmnVvNfRvwd69e8WBA/uNFAIh4JVXXmHsmDHE4vEQQgjQ2lxQIm9N'.
+ 'nz35q3BEOZOHzaG2thaA4mRU+L29It+IV21CpbRQfeMFC35gRB/M2rVrubnyZmLxWJhECBEmz/eHyo/7lMlH3LFFujsthNFCCGOu'.
+ '+WNyeUgpjSVzMKtWraKyshLPdcPEeYWCIEBdpIxSivr6eta8vI7d6+cGnhdV06pe1QP+F/QXWmuRL+jZZ58LlVmxYgUVFRV4rhtu'.
+ '4TzMxXAA6XRaRAtsYUkx8I/JtSJQOlSwpmZpCLN8+fPcdNNoHMfB9/0QJgRoP295TlR7UVv8xxZcHMuWIZ9/Hn35vG3JEGZpzVJG'.
+ 'jx5N1IlitKahsZE1L69j69qHgx+urFX/lQL9JYdLlfnZihUhzOLFi8N3Ml1dthOxVH/f/8/CtqSJ2JaJ2JZ59J7RPsC/AViJsQS/'.
+ 'dBntAAAAAElFTkSuQmCC' ;
//==========================================================
// folder.png
//==========================================================
$this->iBuiltinIcon[11][0]= 1824 ;
$this->iBuiltinIcon[11][1]=
- 'iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlz'.
- 'AAALEAAACxABrSO9dQAAAAd0SU1FB9ECAQgFFyd9cRUAAAadSURBVHiczdhvbBP3Hcfx9/2xfefEOA5JoCNNnIT8AdtZmYBETJsI'.
- '6+jQOlQihT1AYgytqzZpD1atfyYqlT1h0lRpT7aRJ4NQpRvZGELVuo5Ua9jEJDIETQsNQyPBsUJMWGPnj//e+e72wNg4xElMR6ed'.
- 'ZNln3933dZ/f93f6yfB/sgmrHdDV1WXlPg8NDZUDScD8LFFFEZZlWYZhWMFg0Orq6sq/gDJAfFy1iiZy9OjrVnj4JzQ1rMWqfxm/'.
- '309jYyNtbW0kEgnu3bvH4cOH88c/jqSKQl4/XGkd+eVtAN46up1LH92ktqYS++ZX8Pv9NDQ0sGnTJlKpFOFwmO7u7vy5IyMjeVRd'.
- 'XV1+WEOh0IrY4pDnq6wXX/sTiCJaMkFZdRNqxefoe7VtCSqXVDqdZnZ2ltraWkzTpKqqijt3JpFlG7dvj7NzZ1f++qFQyA3EClHL'.
- 'Ql743nFkhxPDtJAd5eTaYSVUfX09lZWVlJWVIUnSg7sVQMBCUcu4ceMGe/bsIRQK1QAzOcyykIM9P0KyudAyCWyqG8nhwqa4SkLt'.
- '3r0bVVVxu924XC40TUOWZUQxe97CwgIdHR2LMHIxSCaVInVvFElxE0vMY1Pd2NUKJMWNTXHlUfF//4vETJCelwbpFm3MjP2dt37x'.
- 'AlN+PzU1NViWRSwW4+7du3g8HjweD4qi5EFAJzAExIpCANbooxhplfB0FJvTg6xWIqsVRVF6MopkU3FXPcnkJxGU0VEAdF2noqKC'.
- 'W3/8DpnqLjzep2lubsblcjE8PExHR8fboVDID9xYFpLBDpJF0jDQIncQpWlkm31FlFLtp9PfyuW/vYQj1kPSuRW/38+lj27S2Q7v'.
- '/aWXUBVUffVNtm3blivVCEwsC5Eyc5iiApEpDEAXMqQdldhSiWVQHjJagud+8Fuexck/zv+K82dfoSbSCsDe75/km+4GVPd6+l5t'.
- '4zJHcqVUYN2yEEtZQDCSJCueRAYsPY49HsFIZVG6p25JUumFafT4DKJN4amtT7Nz38sk5+5A70HMtEYyMkFiZhxzjQ/poXrLQrRU'.
- 'DFGEeFpAlkQkm4pRiCpIKodKzk0T/2QMh+piPjxKZPwiSkUtu/b9mNnJEWS7E8nhAmvpM60oJDkXJxqNozxRRUxPIesispBBlsXV'.
- 'UaKEFo8gzoaJhz8s2lOmrpUG+WBhJ9/60g+Z+fDXTAXfxllRjl1VkO0OFATsYhYliiK21ZKKhhHnFveUqSdKgwAEOp7F2v51vvw8'.
- 'XH7/N1wd/BlTweuUV65BdtgfoLTSkipsdD3tRi0VYpommUwGwzDwdT5HYEc3giAwcvH3jLz3BlPB67jWeZBEKYsSBWwpHZtNKo4q'.
- 'aHTDsJeeiGEYWJaFZVmYpommaRiGQdPnv0bb1m8gSRL/vPIOV979aR4lmAJ2p4qCgCxksNuKJ6VNpx4NYhgGpmkuQhmGQTqdxjAM'.
- 'qr2d7HtxEEEQuH1tkKvvvkF44tqDnrIcKJKAPf1g+LAUElq8dIiu60sApmnm93Pfzc7OYhgGrie+wFe++ztcLhcT1wf54PzPCU9c'.
- 'w7XWjWS3IdsdOAUBWZAxrRJnTQ6SG5bce2FCpmkughmGQSqVYm5uDtnj44sH38TtdhP6+Dwf//V4ttHXrkGURZJaic8RgHQ6jWma'.
- 'SJKUL5RLKNfIOczDKF3XSSaTRCIRhLJWntp3nGfWrSMxc5OLf3iNP4+68T9Ub9nF76lTpxgfHycajZJKpdA0LZ9GbjYV7hcDWZaF'.
- 'pmnMz88Ti8UYunSLmu1HFi2aVkxkaGjINTY2ttDb24vX6+XQoUNs3ryZ8vJyIDu1BUFYkkxhgxeiWlpaOHPmDE1NTdTX1xe98eWG'.
- 'JnF/9dQZCoXUYDA4AOD1ejlw4ACtra2Ul5fniwmCkEcUJiUIAoFAgL6+Pnw+H21tbfT39z8SxCS7hHsfWH9/8dL4MKqnp4eWlhac'.
- 'TmcekEvMNE2am5s5ceIEgUCA9vZ2Tp48ic/nY3j4UsmQHCYOjJHtpeBKqL1799Lc3IzT6UTXdRobGxkYGKC9vZ3W1tZ8Ko86NJ8a'.
- 'tXHjRo4dO8bp06fZsmULGzZsoL+/n0AggNfr5ezZs/8VpGTU5OSkc//+/acBfD4f1dXV7Nq1i4aGBs6dO4fP5+Pq1SuPBbIiyjTN'.
- 'RUnV1dUNXLhwAa/Xy44dO4jFYgBEo9FFF1r134BPuYlk16LrAYXsAlmtq6sbKDwoFAp9m+ykuP5ZQVZF3f8tCdwCov8LyHIoAANI'.
- 'AXf/A1TI0XCDh7OWAAAAAElFTkSuQmCC' ;
+ 'iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlz'.
+ 'AAALEAAACxABrSO9dQAAAAd0SU1FB9ECAQgFFyd9cRUAAAadSURBVHiczdhvbBP3Hcfx9/2xfefEOA5JoCNNnIT8AdtZmYBETJsI'.
+ '6+jQOlQihT1AYgytqzZpD1atfyYqlT1h0lRpT7aRJ4NQpRvZGELVuo5Ua9jEJDIETQsNQyPBsUJMWGPnj//e+e72wNg4xElMR6ed'.
+ 'ZNln3933dZ/f93f6yfB/sgmrHdDV1WXlPg8NDZUDScD8LFFFEZZlWYZhWMFg0Orq6sq/gDJAfFy1iiZy9OjrVnj4JzQ1rMWqfxm/'.
+ '309jYyNtbW0kEgnu3bvH4cOH88c/jqSKQl4/XGkd+eVtAN46up1LH92ktqYS++ZX8Pv9NDQ0sGnTJlKpFOFwmO7u7vy5IyMjeVRd'.
+ 'XV1+WEOh0IrY4pDnq6wXX/sTiCJaMkFZdRNqxefoe7VtCSqXVDqdZnZ2ltraWkzTpKqqijt3JpFlG7dvj7NzZ1f++qFQyA3EClHL'.
+ 'Ql743nFkhxPDtJAd5eTaYSVUfX09lZWVlJWVIUnSg7sVQMBCUcu4ceMGe/bsIRQK1QAzOcyykIM9P0KyudAyCWyqG8nhwqa4SkLt'.
+ '3r0bVVVxu924XC40TUOWZUQxe97CwgIdHR2LMHIxSCaVInVvFElxE0vMY1Pd2NUKJMWNTXHlUfF//4vETJCelwbpFm3MjP2dt37x'.
+ 'AlN+PzU1NViWRSwW4+7du3g8HjweD4qi5EFAJzAExIpCANbooxhplfB0FJvTg6xWIqsVRVF6MopkU3FXPcnkJxGU0VEAdF2noqKC'.
+ 'W3/8DpnqLjzep2lubsblcjE8PExHR8fboVDID9xYFpLBDpJF0jDQIncQpWlkm31FlFLtp9PfyuW/vYQj1kPSuRW/38+lj27S2Q7v'.
+ '/aWXUBVUffVNtm3blivVCEwsC5Eyc5iiApEpDEAXMqQdldhSiWVQHjJagud+8Fuexck/zv+K82dfoSbSCsDe75/km+4GVPd6+l5t'.
+ '4zJHcqVUYN2yEEtZQDCSJCueRAYsPY49HsFIZVG6p25JUumFafT4DKJN4amtT7Nz38sk5+5A70HMtEYyMkFiZhxzjQ/poXrLQrRU'.
+ 'DFGEeFpAlkQkm4pRiCpIKodKzk0T/2QMh+piPjxKZPwiSkUtu/b9mNnJEWS7E8nhAmvpM60oJDkXJxqNozxRRUxPIesispBBlsXV'.
+ 'UaKEFo8gzoaJhz8s2lOmrpUG+WBhJ9/60g+Z+fDXTAXfxllRjl1VkO0OFATsYhYliiK21ZKKhhHnFveUqSdKgwAEOp7F2v51vvw8'.
+ 'XH7/N1wd/BlTweuUV65BdtgfoLTSkipsdD3tRi0VYpommUwGwzDwdT5HYEc3giAwcvH3jLz3BlPB67jWeZBEKYsSBWwpHZtNKo4q'.
+ 'aHTDsJeeiGEYWJaFZVmYpommaRiGQdPnv0bb1m8gSRL/vPIOV979aR4lmAJ2p4qCgCxksNuKJ6VNpx4NYhgGpmkuQhmGQTqdxjAM'.
+ 'qr2d7HtxEEEQuH1tkKvvvkF44tqDnrIcKJKAPf1g+LAUElq8dIiu60sApmnm93Pfzc7OYhgGrie+wFe++ztcLhcT1wf54PzPCU9c'.
+ 'w7XWjWS3IdsdOAUBWZAxrRJnTQ6SG5bce2FCpmkughmGQSqVYm5uDtnj44sH38TtdhP6+Dwf//V4ttHXrkGURZJaic8RgHQ6jWma'.
+ 'SJKUL5RLKNfIOczDKF3XSSaTRCIRhLJWntp3nGfWrSMxc5OLf3iNP4+68T9Ub9nF76lTpxgfHycajZJKpdA0LZ9GbjYV7hcDWZaF'.
+ 'pmnMz88Ti8UYunSLmu1HFi2aVkxkaGjINTY2ttDb24vX6+XQoUNs3ryZ8vJyIDu1BUFYkkxhgxeiWlpaOHPmDE1NTdTX1xe98eWG'.
+ 'JnF/9dQZCoXUYDA4AOD1ejlw4ACtra2Ul5fniwmCkEcUJiUIAoFAgL6+Pnw+H21tbfT39z8SxCS7hHsfWH9/8dL4MKqnp4eWlhac'.
+ 'TmcekEvMNE2am5s5ceIEgUCA9vZ2Tp48ic/nY3j4UsmQHCYOjJHtpeBKqL1799Lc3IzT6UTXdRobGxkYGKC9vZ3W1tZ8Ko86NJ8a'.
+ 'tXHjRo4dO8bp06fZsmULGzZsoL+/n0AggNfr5ezZs/8VpGTU5OSkc//+/acBfD4f1dXV7Nq1i4aGBs6dO4fP5+Pq1SuPBbIiyjTN'.
+ 'RUnV1dUNXLhwAa/Xy44dO4jFYgBEo9FFF1r134BPuYlk16LrAYXsAlmtq6sbKDwoFAp9m+ykuP5ZQVZF3f8tCdwCov8LyHIoAANI'.
+ 'AXf/A1TI0XCDh7OWAAAAAElFTkSuQmCC' ;
//==========================================================
// file_important.png
//==========================================================
$this->iBuiltinIcon[12][0]= 1785 ;
$this->iBuiltinIcon[12][1]=
- 'iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlz'.
- 'AAALDwAACw8BkvkDpQAAAAd0SU1FB9ECDAcjDeD3lKsAAAZ2SURBVHicrZhPaFzHHcc/897s7lutJCsr2VHsOHWMk0MPbsBUrcnF'.
- 'OFRdSo6FNhdB6SGHlpDmYtJCDyoxyKe6EBxKQkt7KKL0T6ABo0NbciqigtC6PhWKI2NFqqxdSd7V2/dmftPDvPd212t55dCBYfbN'.
- 'zpvfZ77z+/1mdhUjytWrV93Hf/24eD5z9gwiMlDjOKbb7dLtdhER2u02u7u73Lp1CxEZBw4AeZwdNQqkMd9wbziFGINJUt6rRbz5'.
- '1ptUq1XK5TJBEAAUMHt7e+zu7gKwvLzMysoKwAng/uNg9CgQgFKlgg1DUJ67Vqtx6tQpZmdniaIIpRTOOZRSdDoddnZ2aLfbLC8v'.
- 's7S0xJUrV7ZGwQSj1PhhfRodVdDlMrpc5vup5Z2fvMPdu3fZ29vDWjvwztjYGPV6nVqtRqVS4dKlSywtLQFsAdOH2XwsCEApg3jl'.
- 'w98Rak2gvYjNZpNms0mSJDjnHgkDMDc3dySYQ0Ea8w139YUX0OUKulzyg7UmCEO+l1huvHuDra0t9vf3h1TJYSqVypFhHquIrlQI'.
- 'S5qv/uIDAC7/4bcEQYAKvK+0Wq1DVQGIoog7d+4cCeaRII35hrt+8SsEOkRlUaEyR0UpFIrXHxyMVKVUKnHv3r0jwRwaNelBjBjL'.
- 'Sz/7KYuLiwAsLi7y4z/9kY9e+TpkCuSqjI+Po7XuAWeKXLt2DWNMUZMkwRjDhQsXWFtbK6JpCCT3jfQgxomPtPX19YHWicM5x3c2'.
- '73Pj3Ru8/aO3mZqaolKpoHVvyuvXr/Ppnf/Q7uzz380NPtu4y/qnG+ztd1hfX2dtbQ3gIvDnRyqSxl1UoPjyz98D4PTp0wPtq39Z'.
- '4fdzLxegrVaLVqvF5OQkYRgWqpRKJZ77wvNsbW1RG5tgfKLOTH2G7Z1twqBQrgrMDvhInjfSOCY5iIv+hYWFgRZArEWsZWF941Bf'.
- 'SdMUgMnJCWpjVU4cn+HUyePM1Gc4+fRUPkzBI5w1jbukcczLv/5l0XfmzJmBFuCba38r/CRXpT+CrDUoZ0jjB4RYonJAOYRobJKT'.
- 'z5zgqfqxAbsFSH6mpHFM2qdGXh4VnoViD6mSJF2cTQeqDqBaKVHWmonJCWpZjhkC6anR5WsffTgwaHV1FaUUq6urA/2v3f5k4LnV'.
- 'arG9tUn3oI2YBCcWHYAxMVYs1qZEZY2SFB2aYZDGfMN9d7uJiWPSeFiNo5Rclc3NTXZbO6RpF7EJVixYA9agwwDnUiqlEPdQ3imi'.
- 'Jo27BGHIt/7x9yEjc3Nzh27Na7c/4TdffKl4bja3ae5MUIu0T/HOEIaOpJt4gwoSsVTK4SBIY77hFtY3ABBjBiZ90rKwvsH77/+K'.
- 't37wOhO1iPpTk4SBw1mLsz6CnKQ4l3qV+kE+t9XHlNZOk+bUJLVIE1VCcIJWQmJ6qjj30NbcXLkZMt8YPig+Z3n1G5fZ39/j/vY2'.
- '9ckqZT2Ochbn0p4qNkU/dDfUADdXbh4HXgRO4zNdEU0XL1784PLly5w9e7Z4SazFOfGrEotDcOKrcoJPmrYIXf/Zop3QNd1skuGt'.
- 'cUAb2MgAxvHZTgFUq1Wmp6eZnZ0F8JlTjDduDThBnDeECEoJtbGIp6enqEblzCcEZ1PECU4yVRiOGgd0gc+AB0CZvkv1sWPHOHfu'.
- 'HOfPn8da41cpkkltEBEPJhYnBkTQJcdYVKGkgRxCfBsq5xXNgAa2Bn+hjTOgHEKBP8pzRUxykIH4ifLJRTJAl+UMBJzPHQ6bfe/f'.
- 'cWIzPxlUpD+zugzIZtVk1d8znBAqRxgoQuVQgSJQ3h9C5QhDRYgjUILCAzlnEdsHYTKfMTEBcP7F54YUGVmc2GLlIn6ve6v0ahSt'.
- '8X25TzjJ+rIx1grKpQPWR4LkGVVsMgghvS0qjPdvm5OeceOTWA5Evo2mFzkjQfL7hZPUy5yvvF/uPFQL3+nbDmsLCEmT3sTmCTNr'.
- 'rogT6yFsOix3ftw7OwQhkvSU6CuinhCk0+kAkFoBazEEICHaHHiPVmU0gnUp4EAc1mYrF0EBVpwPi34VrBkwPxKk3W5ju/e5/c+d'.
- 'bGUHIAIuydTIE5zfc5Wr4lJcahHnHTP3CVGm78DrgY38N+DEibp7dmYKdAQmBh1hjEFjis+9CTWYGK21H6PxPyOI0DobYwzZF/z7'.
- '7jadTvJtYG0kCD7lfwl49ijgT1gc0AH+dZSJA/xB+Mz/GSIvFoj/B7H1mAd8CO/zAAAAAElFTkSuQmCC' ;
+ 'iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlz'.
+ 'AAALDwAACw8BkvkDpQAAAAd0SU1FB9ECDAcjDeD3lKsAAAZ2SURBVHicrZhPaFzHHcc/897s7lutJCsr2VHsOHWMk0MPbsBUrcnF'.
+ 'OFRdSo6FNhdB6SGHlpDmYtJCDyoxyKe6EBxKQkt7KKL0T6ABo0NbciqigtC6PhWKI2NFqqxdSd7V2/dmftPDvPd212t55dCBYfbN'.
+ 'zpvfZ77z+/1mdhUjytWrV93Hf/24eD5z9gwiMlDjOKbb7dLtdhER2u02u7u73Lp1CxEZBw4AeZwdNQqkMd9wbziFGINJUt6rRbz5'.
+ '1ptUq1XK5TJBEAAUMHt7e+zu7gKwvLzMysoKwAng/uNg9CgQgFKlgg1DUJ67Vqtx6tQpZmdniaIIpRTOOZRSdDoddnZ2aLfbLC8v'.
+ 's7S0xJUrV7ZGwQSj1PhhfRodVdDlMrpc5vup5Z2fvMPdu3fZ29vDWjvwztjYGPV6nVqtRqVS4dKlSywtLQFsAdOH2XwsCEApg3jl'.
+ 'w98Rak2gvYjNZpNms0mSJDjnHgkDMDc3dySYQ0Ea8w139YUX0OUKulzyg7UmCEO+l1huvHuDra0t9vf3h1TJYSqVypFhHquIrlQI'.
+ 'S5qv/uIDAC7/4bcEQYAKvK+0Wq1DVQGIoog7d+4cCeaRII35hrt+8SsEOkRlUaEyR0UpFIrXHxyMVKVUKnHv3r0jwRwaNelBjBjL'.
+ 'Sz/7KYuLiwAsLi7y4z/9kY9e+TpkCuSqjI+Po7XuAWeKXLt2DWNMUZMkwRjDhQsXWFtbK6JpCCT3jfQgxomPtPX19YHWicM5x3c2'.
+ '73Pj3Ru8/aO3mZqaolKpoHVvyuvXr/Ppnf/Q7uzz380NPtu4y/qnG+ztd1hfX2dtbQ3gIvDnRyqSxl1UoPjyz98D4PTp0wPtq39Z'.
+ '4fdzLxegrVaLVqvF5OQkYRgWqpRKJZ77wvNsbW1RG5tgfKLOTH2G7Z1twqBQrgrMDvhInjfSOCY5iIv+hYWFgRZArEWsZWF941Bf'.
+ 'SdMUgMnJCWpjVU4cn+HUyePM1Gc4+fRUPkzBI5w1jbukcczLv/5l0XfmzJmBFuCba38r/CRXpT+CrDUoZ0jjB4RYonJAOYRobJKT'.
+ 'z5zgqfqxAbsFSH6mpHFM2qdGXh4VnoViD6mSJF2cTQeqDqBaKVHWmonJCWpZjhkC6anR5WsffTgwaHV1FaUUq6urA/2v3f5k4LnV'.
+ 'arG9tUn3oI2YBCcWHYAxMVYs1qZEZY2SFB2aYZDGfMN9d7uJiWPSeFiNo5Rclc3NTXZbO6RpF7EJVixYA9agwwDnUiqlEPdQ3imi'.
+ 'Jo27BGHIt/7x9yEjc3Nzh27Na7c/4TdffKl4bja3ae5MUIu0T/HOEIaOpJt4gwoSsVTK4SBIY77hFtY3ABBjBiZ90rKwvsH77/+K'.
+ 't37wOhO1iPpTk4SBw1mLsz6CnKQ4l3qV+kE+t9XHlNZOk+bUJLVIE1VCcIJWQmJ6qjj30NbcXLkZMt8YPig+Z3n1G5fZ39/j/vY2'.
+ '9ckqZT2Ochbn0p4qNkU/dDfUADdXbh4HXgRO4zNdEU0XL1784PLly5w9e7Z4SazFOfGrEotDcOKrcoJPmrYIXf/Zop3QNd1skuGt'.
+ 'cUAb2MgAxvHZTgFUq1Wmp6eZnZ0F8JlTjDduDThBnDeECEoJtbGIp6enqEblzCcEZ1PECU4yVRiOGgd0gc+AB0CZvkv1sWPHOHfu'.
+ 'HOfPn8da41cpkkltEBEPJhYnBkTQJcdYVKGkgRxCfBsq5xXNgAa2Bn+hjTOgHEKBP8pzRUxykIH4ifLJRTJAl+UMBJzPHQ6bfe/f'.
+ 'cWIzPxlUpD+zugzIZtVk1d8znBAqRxgoQuVQgSJQ3h9C5QhDRYgjUILCAzlnEdsHYTKfMTEBcP7F54YUGVmc2GLlIn6ve6v0ahSt'.
+ '8X25TzjJ+rIx1grKpQPWR4LkGVVsMgghvS0qjPdvm5OeceOTWA5Evo2mFzkjQfL7hZPUy5yvvF/uPFQL3+nbDmsLCEmT3sTmCTNr'.
+ 'rogT6yFsOix3ftw7OwQhkvSU6CuinhCk0+kAkFoBazEEICHaHHiPVmU0gnUp4EAc1mYrF0EBVpwPi34VrBkwPxKk3W5ju/e5/c+d'.
+ 'bGUHIAIuydTIE5zfc5Wr4lJcahHnHTP3CVGm78DrgY38N+DEibp7dmYKdAQmBh1hjEFjis+9CTWYGK21H6PxPyOI0DobYwzZF/z7'.
+ '7jadTvJtYG0kCD7lfwl49ijgT1gc0AH+dZSJA/xB+Mz/GSIvFoj/B7H1mAd8CO/zAAAAAElFTkSuQmCC' ;
$this->iLen = count($this->iBuiltinIcon);
}
@@ -1566,7 +1526,7 @@ class IconImage
private $iyalign='center';
private $iScale=1.0;
- public function __construct($aIcon, $aScale=1)
+ public function IconImage($aIcon, $aScale=1)
{
global $_gPredefIcons ;
if (is_string($aIcon)) {
@@ -1641,19 +1601,18 @@ class TextProperty
private $iFFamily=FF_FONT1;
private $iFStyle=FS_NORMAL;
private $iFSize=10;
- private $iFontArray=array();
private $iColor="black";
private $iText="";
private $iHAlign="left";
private $iVAlign="bottom";
-
+
//---------------
// CONSTRUCTOR
- public function __construct($aTxt='')
+ public function TextProperty($aTxt='')
{
$this->iText = $aTxt;
}
-
+
//---------------
// PUBLIC METHODS
public function Set($aTxt)
@@ -1678,7 +1637,7 @@ class TextProperty
}
$this->csimalt=$aAltText;
}
-
+
public function SetCSIMAlt($aAltText)
{
if (is_string($aAltText)) {
@@ -1692,7 +1651,7 @@ class TextProperty
{
$this->iColor = $aColor;
}
-
+
public function HasTabs()
{
if (is_string($this->iText)) {
@@ -1701,7 +1660,7 @@ class TextProperty
return false;
}
}
-
+
// Get number of tabs in string
public function GetNbrTabs()
{
@@ -1711,44 +1670,34 @@ class TextProperty
return 0;
}
}
-
+
// Set alignment
public function Align($aHAlign, $aVAlign="bottom")
{
$this->iHAlign=$aHAlign;
$this->iVAlign=$aVAlign;
}
-
+
// Synonym
public function SetAlign($aHAlign, $aVAlign="bottom")
{
$this->iHAlign=$aHAlign;
$this->iVAlign=$aVAlign;
}
-
+
// Specify font
public function SetFont($aFFamily, $aFStyle=FS_NORMAL, $aFSize=10)
{
$this->iFFamily = $aFFamily;
- $this->iFStyle = $aFStyle;
- $this->iFSize = $aFSize;
+ $this->iFStyle = $aFStyle;
+ $this->iFSize = $aFSize;
}
- public function SetColumnFonts($aFontArray)
- {
- if (!is_array($aFontArray) || count($aFontArray[0]) != 3) {
- JpGraphError::RaiseL(6033);
- // 'Array of fonts must contain arrays with 3 elements, i.e. (Family, Style, Size)'
- }
- $this->iFontArray = $aFontArray;
- }
-
-
public function IsColumns()
{
return is_array($this->iText) ;
}
-
+
// Get width of text. If text contains several columns separated by
// tabs then return both the total width as well as an array with a
// width for each column.
@@ -1760,7 +1709,7 @@ class TextProperty
if (strlen($this->iText) == 0) {
return 0;
}
- $tmp = preg_split('/\t/', $this->iText);
+ $tmp = split("\t", $this->iText);
if (count($tmp) <= 1 || !$aUseTabs) {
$w = $aImg->GetTextWidth($this->iText);
return $w + 2*$extra_margin;
@@ -1780,13 +1729,7 @@ class TextProperty
// Must be an array of texts. In this case we return the sum of the
// length + a fixed margin of 4 pixels on each text string
$n = count($this->iText);
- $nf = count($this->iFontArray);
for ($i=0, $w=0; $i < $n; ++$i) {
- if ($i < $nf) {
- $aImg->SetFont($this->iFontArray[$i][0], $this->iFontArray[$i][1], $this->iFontArray[$i][2]);
- } else {
- $aImg->SetFont($this->iFFamily, $this->iFStyle, $this->iFSize);
- }
$tmp = $this->iText[$i];
if (is_string($tmp)) {
$w += $aImg->GetTextWidth($tmp)+$extra_margin;
@@ -1811,16 +1754,10 @@ class TextProperty
$aImg->SetFont($this->iFFamily, $this->iFStyle, $this->iFSize);
if (is_array($this->iText)) {
$n = count($this->iText);
- $nf = count($this->iFontArray);
for ($i=0, $w=array(); $i < $n; ++$i) {
$tmp = $this->iText[$i];
if (is_string($tmp)) {
- if ($i < $nf) {
- $aImg->SetFont($this->iFontArray[$i][0], $this->iFontArray[$i][1], $this->iFontArray[$i][2]);
- } else {
- $aImg->SetFont($this->iFFamily, $this->iFStyle, $this->iFSize);
- }
- $w[$i] = $aImg->GetTextWidth($tmp)+$aMargin;
+ $w[$i] = $aImg->GetTextWidth($this->iText[$i])+$aMargin;
} else {
if (is_object($tmp) === false) {
JpGraphError::RaiseL(6012);
@@ -1833,35 +1770,20 @@ class TextProperty
return array($this->GetWidth($aImg));
}
}
-
+
// Get total height of text
public function GetHeight($aImg)
{
- $nf = count($this->iFontArray);
- $maxheight = -1;
-
- if ($nf > 0) {
- // We have to find out the largest font and take that one as the
- // height of the row
- for ($i=0; $i < $nf; ++$i) {
- $aImg->SetFont($this->iFontArray[$i][0], $this->iFontArray[$i][1], $this->iFontArray[$i][2]);
- $height = $aImg->GetFontHeight();
- $maxheight = max($height, $maxheight);
- }
- }
-
$aImg->SetFont($this->iFFamily, $this->iFStyle, $this->iFSize);
- $height = $aImg->GetFontHeight();
- $maxheight = max($height, $maxheight);
- return $maxheight;
+ return $aImg->GetFontHeight();
}
-
+
// Unhide/hide the text
public function Show($aShow=true)
{
$this->iShow=$aShow;
}
-
+
// Stroke text at (x,y) coordinates. If the text contains tabs then the
// x parameter should be an array of positions to be used for each successive
// tab mark. If no array is supplied then the tabs will be ignored.
@@ -1871,15 +1793,16 @@ class TextProperty
$aImg->SetColor($this->iColor);
$aImg->SetFont($this->iFFamily, $this->iFStyle, $this->iFSize);
$aImg->SetTextAlign($this->iHAlign, $this->iVAlign);
- if ($this->GetNbrTabs() < 1) {
+ if ($this->GetNbrTabs() <= 1) {
if (is_string($this->iText)) {
+ // Get rid of any "\t" characters and stroke string
if (is_array($aX)) {
$aX=$aX[0];
}
if (is_array($aY)) {
$aY=$aY[0];
}
- $aImg->StrokeText($aX, $aY, $this->iText);
+ $aImg->StrokeText($aX, $aY, str_replace("\t", " ", $this->iText));
} elseif (is_array($this->iText) && ($n = count($this->iText)) > 0) {
$ax = is_array($aX) ;
$ay = is_array($aY) ;
@@ -1900,26 +1823,14 @@ class TextProperty
if (is_object($tmp)) {
$tmp->Stroke($aImg, $aX[$i], $aY[$i]);
} else {
- if ($i < count($this->iFontArray)) {
- $font = $this->iFontArray[$i];
- $aImg->SetFont($font[0], $font[1], $font[2]);
- } else {
- $aImg->SetFont($this->iFFamily, $this->iFStyle, $this->iFSize);
- }
$aImg->StrokeText($aX[$i], $aY[$i], str_replace("\t", " ", $tmp));
}
}
}
} else {
- $tmp = preg_split('/\t/', $this->iText);
+ $tmp = split("\t", $this->iText);
$n = min(count($tmp), count($aX));
for ($i=0; $i < $n; ++$i) {
- if ($i < count($this->iFontArray)) {
- $font = $this->iFontArray[$i];
- $aImg->SetFont($font[0], $font[1], $font[2]);
- } else {
- $aImg->SetFont($this->iFFamily, $this->iFStyle, $this->iFSize);
- }
$aImg->StrokeText($aX[$i], $aY, $tmp[$i]);
}
}
@@ -1953,7 +1864,7 @@ class HeaderProperty
//---------------
// CONSTRUCTOR
- public function __construct()
+ public function HeaderProperty()
{
$this->grid = new LineProperty();
}
@@ -1970,28 +1881,23 @@ class HeaderProperty
$this->iIntervall = $aInt;
}
- public function SetInterval($aInt)
- {
- $this->iIntervall = $aInt;
- }
-
public function GetIntervall()
{
return $this->iIntervall ;
}
-
+
public function SetFont($aFFamily, $aFStyle=FS_NORMAL, $aFSize=10)
{
$this->iFFamily = $aFFamily;
- $this->iFStyle = $aFStyle;
- $this->iFSize = $aFSize;
+ $this->iFStyle = $aFStyle;
+ $this->iFSize = $aFSize;
}
public function SetFontColor($aColor)
{
$this->iTextColor = $aColor;
}
-
+
public function GetFontHeight($aImg)
{
$aImg->SetFont($this->iFFamily, $this->iFStyle, $this->iFSize);
@@ -2009,12 +1915,12 @@ class HeaderProperty
$aImg->SetFont($this->iFFamily, $this->iFStyle, $this->iFSize);
return $aImg->GetTextWidth($aStr);
}
-
+
public function SetStyle($aStyle)
{
$this->iStyle = $aStyle;
}
-
+
public function SetBackgroundColor($aColor)
{
$this->iBackgroundColor=$aColor;
@@ -2029,24 +1935,24 @@ class HeaderProperty
{
$this->iFrameColor=$aColor;
}
-
+
// Only used by day scale
public function SetWeekendColor($aColor)
{
$this->iWeekendBackgroundColor=$aColor;
}
-
+
// Only used by day scale
public function SetSundayFontColor($aColor)
{
$this->iSundayTextColor=$aColor;
}
-
+
public function SetTitleVertMargin($aMargin)
{
$this->iTitleVertMargin=$aMargin;
}
-
+
public function SetLabelFormatString($aStr)
{
$this->iLabelFormStr=$aStr;
@@ -2091,6 +1997,7 @@ class GanttScale
// Out image to stroke the scale to
private $iImg;
private $iTableHeaderBackgroundColor="white";
+
private $iTableHeaderFrameColor="black";
private $iTableHeaderFrameWeight=1;
private $iAvailableHeight=-1;
@@ -2098,11 +2005,11 @@ class GanttScale
private $iDateLocale;
private $iVertLayout=GANTT_EVEN;
private $iUsePlotWeekendBackground=true;
- private $iWeekStart = 1; // Default to have weekends start on Monday
-
+ private $iWeekStart = 1; // Default to have weekends start on Monday
+
//---------------
// CONSTRUCTOR
- public function __construct($aImg)
+ public function GanttScale($aImg)
{
$this->iImg = $aImg;
$this->iDateLocale = new DateLocale();
@@ -2133,7 +2040,7 @@ class GanttScale
$this->year = new HeaderProperty();
$this->year->SetFont(FF_FONT1, FS_BOLD);
-
+
$this->divider=new LineProperty();
$this->dividerh=new LineProperty();
$this->dividerh->SetWeight(2);
@@ -2145,7 +2052,7 @@ class GanttScale
$this->tableTitle->Show(false);
$this->actinfo = new GanttActivityInfo();
}
-
+
//---------------
// PUBLIC METHODS
// Specify what headers should be visible
@@ -2167,37 +2074,37 @@ class GanttScale
$this->day->grid->SetColor("black");
}
}
-
+
// Should the weekend background stretch all the way down in the plotarea
public function UseWeekendBackground($aShow)
{
$this->iUsePlotWeekendBackground = $aShow;
}
-
+
// Have a range been specified?
public function IsRangeSet()
{
return $this->iStartDate!=-1 && $this->iEndDate!=-1;
}
-
+
// Should the layout be from top or even?
public function SetVertLayout($aLayout)
{
$this->iVertLayout = $aLayout;
}
-
+
// Which locale should be used?
public function SetDateLocale($aLocale)
{
$this->iDateLocale->Set($aLocale);
}
-
+
// Number of days we are showing
public function GetNumberOfDays()
{
return round(($this->iEndDate-$this->iStartDate)/SECPERDAY);
}
-
+
// The width of the actual plot area
public function GetPlotWidth()
{
@@ -2218,7 +2125,7 @@ class GanttScale
public function SetWeekStart($aStartDay)
{
$this->iWeekStart = $aStartDay % 7;
-
+
//Recalculate the startday since this will change the week start
$this->SetRange($this->iStartDate, $this->iEndDate);
}
@@ -2235,25 +2142,25 @@ class GanttScale
return $this->hour->iShowLabels;
}
-
+
// Do we show day scale?
public function IsDisplayDay()
{
return $this->day->iShowLabels;
}
-
+
// Do we show week scale?
public function IsDisplayWeek()
{
return $this->week->iShowLabels;
}
-
+
// Do we show month scale?
public function IsDisplayMonth()
{
return $this->month->iShowLabels;
}
-
+
// Do we show year scale?
public function IsDisplayYear()
{
@@ -2287,7 +2194,7 @@ class GanttScale
// Get day in week for start and ending date (Sun==0)
$ds=strftime("%w", $this->iStartDate);
$de=strftime("%w", $this->iEndDate);
-
+
// We want to start on iWeekStart day. But first we subtract a week
// if the startdate is "behind" the day the week start at.
// This way we ensure that the given start date is always included
@@ -2300,7 +2207,7 @@ class GanttScale
}
$adjdate = strtotime(($this->iWeekStart-$ds).' day', $d /*$this->iStartDate*/);
$this->iStartDate = $adjdate;
-
+
// We want to end on the last day of the week
$preferredEndDay = ($this->iWeekStart+6)%7;
if ($preferredEndDay != $de) {
@@ -2319,7 +2226,7 @@ class GanttScale
///////////////////////////////////////
// PRIVATE Methods
-
+
// Determine the height of all the scale headers combined
public function GetHeaderHeight()
{
@@ -2351,7 +2258,7 @@ class GanttScale
}
return $height;
}
-
+
// Get width (in pixels) for a single day
public function GetDayWidth()
{
@@ -2378,7 +2285,7 @@ class GanttScale
return 365;
}
}
-
+
// Get week number
public function GetWeekNbr($aDate, $aSunStart=true)
{
@@ -2396,28 +2303,28 @@ class GanttScale
if ($aSunStart) {
$day += 60*60*24;
}
-
+
/*-------------------------------------------------------------------------
- According to ISO-8601 :
- "Week 01 of a year is per definition the first week that has the Thursday in this year,
- which is equivalent to the week that contains the fourth day of January.
- In other words, the first week of a new year is the week that has the majority of its
- days in the new year."
+ According to ISO-8601 :
+ "Week 01 of a year is per definition the first week that has the Thursday in this year,
+ which is equivalent to the week that contains the fourth day of January.
+ In other words, the first week of a new year is the week that has the majority of its
+ days in the new year."
- Be carefull, with PHP, -3 % 7 = -3, instead of 4 !!!
-
- day of year = date("z", $day) + 1
- offset to thursday = 3 - (date("w", $day) + 6) % 7
- first thursday of year = 1 + (11 - date("w", mktime(0, 0, 0, 1, 1, date("Y", $day)))) % 7
- week number = (thursday's day of year - first thursday's day of year) / 7 + 1
- ---------------------------------------------------------------------------*/
+ Be carefull, with PHP, -3 % 7 = -3, instead of 4 !!!
+ day of year = date("z", $day) + 1
+ offset to thursday = 3 - (date("w", $day) + 6) % 7
+ first thursday of year = 1 + (11 - date("w", mktime(0, 0, 0, 1, 1, date("Y", $day)))) % 7
+ week number = (thursday's day of year - first thursday's day of year) / 7 + 1
+ ---------------------------------------------------------------------------*/
+
$thursday = $day + 60 * 60 * 24 * (3 - (date("w", $day) + 6) % 7); // take week's thursday
$week = 1 + (date("z", $thursday) - (11 - date("w", mktime(0, 0, 0, 1, 1, date("Y", $thursday)))) % 7) / 7;
-
+
return $week;
}
-
+
// Is year a leap year?
public function IsLeap($aYear)
{
@@ -2436,7 +2343,7 @@ class GanttScale
{
return 0+Date("Y", $aDate);
}
-
+
// Return number of days in a year
public function GetNumDaysInMonth($aMonth, $aYear)
{
@@ -2448,7 +2355,7 @@ class GanttScale
return $days[$aMonth];
}
}
-
+
// Get day in month
public function GetMonthDayNbr($aDate)
{
@@ -2460,14 +2367,14 @@ class GanttScale
{
return 0+strftime("%j", $aDate);
}
-
+
// Get month number
public function GetMonthNbr($aDate)
{
return 0+strftime("%m", $aDate);
}
-
- // Translate a date to screen coordinates (horizontal scale)
+
+ // Translate a date to screen coordinates (horizontal scale)
public function TranslateDate($aDate)
{
//
@@ -2497,34 +2404,29 @@ class GanttScale
}
// Get screen coordinatesz for the vertical position for a bar
- public function TranslateVertPos($aPos, $atTop=false)
+ public function TranslateVertPos($aPos)
{
$img=$this->iImg;
+ $ph=$this->iAvailableHeight;
if ($aPos > $this->iVertLines) {
JpGraphError::RaiseL(6015, $aPos);
}
// 'Illegal vertical position %d'
if ($this->iVertLayout == GANTT_EVEN) {
// Position the top bar at 1 vert spacing from the scale
- $pos = round($img->top_margin + $this->iVertHeaderSize + ($aPos+1)*$this->iVertSpacing);
+ return round($img->top_margin + $this->iVertHeaderSize + ($aPos+1)*$this->iVertSpacing);
} else {
// position the top bar at 1/2 a vert spacing from the scale
- $pos = round($img->top_margin + $this->iVertHeaderSize + $this->iTopPlotMargin + ($aPos+1)*$this->iVertSpacing);
+ return round($img->top_margin + $this->iVertHeaderSize + $this->iTopPlotMargin + ($aPos+1)*$this->iVertSpacing);
}
-
- if ($atTop) {
- $pos -= $this->iVertSpacing;
- }
-
- return $pos;
}
-
+
// What is the vertical spacing?
public function GetVertSpacing()
{
return $this->iVertSpacing;
}
-
+
// Convert a date to timestamp
public function NormalizeDate($aDate)
{
@@ -2546,7 +2448,7 @@ class GanttScale
//Unknown date format in GanttScale ($aDate).");
}
-
+
// Convert a time string to minutes
public function TimeToMinutes($aTimeString)
@@ -2574,7 +2476,7 @@ class GanttScale
if ($this->minute->iShowLabels) {
$img->SetFont($this->minute->iFFamily, $this->minute->iFStyle, $this->minute->iFSize);
$yb = $yt + $img->GetFontHeight() +
- $this->minute->iTitleVertMargin + $this->minute->iFrameWeight;
+ $this->minute->iTitleVertMargin + $this->minute->iFrameWeight;
if ($getHeight) {
return $yb - $img->top_margin;
}
@@ -2586,7 +2488,7 @@ class GanttScale
$img->SetTextAlign("center");
$day = date('w', $this->iStartDate);
$minint = $this->minute->GetIntervall() ;
-
+
if (60 % $minint !== 0) {
JpGraphError::RaiseL(6018, $minint);
//'Intervall for minutes must divide the hour evenly, e.g. 1,5,10,12,15,20,30 etc You have specified an intervall of '.$minint.' minutes.');
@@ -2626,17 +2528,19 @@ class GanttScale
}
switch ($this->minute->iStyle) {
- case MINUTESTYLE_CUSTOM:
- $txt = date($this->minute->iLabelFormStr, $datestamp);
- break;
- case MINUTESTYLE_MM:
- default:
- // 15
- $txt = date('i', $datestamp);
- break;
- }
+ case MINUTESTYLE_CUSTOM:
+ $txt = date($this->minute->iLabelFormStr, $datestamp);
+ break;
+ case MINUTESTYLE_MM:
+ default:
+ // 15
+ $txt = date('i', $datestamp);
+ break;
+ }
$img->StrokeText(round($x+$width/2), round($yb-$this->minute->iTitleVertMargin), $txt);
+ // FIXME: The rounding problem needs to be solved properly ...
+ //
// Fix a rounding problem the wrong way ..
// If we also have hour scale then don't draw the firsta or last
// gridline since that will be overwritten by the hour scale gridline if such exists.
@@ -2670,7 +2574,7 @@ class GanttScale
if ($this->hour->iShowLabels) {
$img->SetFont($this->hour->iFFamily, $this->hour->iFStyle, $this->hour->iFSize);
$yb = $yt + $img->GetFontHeight() +
- $this->hour->iTitleVertMargin + $this->hour->iFrameWeight;
+ $this->hour->iTitleVertMargin + $this->hour->iFrameWeight;
if ($getHeight) {
return $yb - $img->top_margin;
}
@@ -2711,25 +2615,25 @@ class GanttScale
}
switch ($this->hour->iStyle) {
- case HOURSTYLE_HMAMPM:
- // 1:35pm
- $txt = date('g:ia', $datestamp);
- break;
- case HOURSTYLE_H24:
- // 13
- $txt = date('H', $datestamp);
- break;
- case HOURSTYLE_HAMPM:
- $txt = date('ga', $datestamp);
- break;
- case HOURSTYLE_CUSTOM:
- $txt = date($this->hour->iLabelFormStr, $datestamp);
- break;
- case HOURSTYLE_HM24:
- default:
- $txt = date('H:i', $datestamp);
- break;
- }
+ case HOURSTYLE_HMAMPM:
+ // 1:35pm
+ $txt = date('g:ia', $datestamp);
+ break;
+ case HOURSTYLE_H24:
+ // 13
+ $txt = date('H', $datestamp);
+ break;
+ case HOURSTYLE_HAMPM:
+ $txt = date('ga', $datestamp);
+ break;
+ case HOURSTYLE_CUSTOM:
+ $txt = date($this->hour->iLabelFormStr, $datestamp);
+ break;
+ case HOURSTYLE_HM24:
+ default:
+ $txt = date('H:i', $datestamp);
+ break;
+ }
$img->StrokeText(round($x+$width/2), round($yb-$this->hour->iTitleVertMargin), $txt);
$img->SetColor($this->hour->grid->iColor);
$img->SetLineWeight($this->hour->grid->iWeight);
@@ -2776,11 +2680,11 @@ class GanttScale
$img->SetTextAlign("center");
$day = date('w', $this->iStartDate);
$datestamp = $this->iStartDate;
-
+
$doback = !($this->hour->iShowLabels || $this->minute->iShowLabels);
setlocale(LC_TIME, $this->iDateLocale->iLocale);
-
+
for ($i=0; $i < $this->GetNumberOfDays(); ++$i, $x+=$daywidth, $day += 1,$day %= 7) {
if ($day==6 || $day==0) {
$img->SetColor($this->day->iWeekendBackgroundColor);
@@ -2807,61 +2711,61 @@ class GanttScale
}
switch ($this->day->iStyle) {
- case DAYSTYLE_LONG:
- // "Monday"
- $txt = strftime('%A', $datestamp);
- break;
- case DAYSTYLE_SHORT:
- // "Mon"
- $txt = strftime('%a', $datestamp);
- break;
- case DAYSTYLE_SHORTDAYDATE1:
- // "Mon 23/6"
- $txt = strftime('%a %d/'.$mn, $datestamp);
- break;
- case DAYSTYLE_SHORTDAYDATE2:
- // "Mon 23 Jun"
- $txt = strftime('%a %d %b', $datestamp);
- break;
- case DAYSTYLE_SHORTDAYDATE3:
- // "Mon 23 Jun 2003"
- $txt = strftime('%a %d %b %Y', $datestamp);
- break;
- case DAYSTYLE_LONGDAYDATE1:
- // "Monday 23 Jun"
- $txt = strftime('%A %d %b', $datestamp);
- break;
- case DAYSTYLE_LONGDAYDATE2:
- // "Monday 23 Jun 2003"
- $txt = strftime('%A %d %b %Y', $datestamp);
- break;
- case DAYSTYLE_SHORTDATE1:
- // "23/6"
- $txt = strftime('%d/'.$mn, $datestamp);
- break;
- case DAYSTYLE_SHORTDATE2:
- // "23 Jun"
- $txt = strftime('%d %b', $datestamp);
- break;
- case DAYSTYLE_SHORTDATE3:
- // "Mon 23"
- $txt = strftime('%a %d', $datestamp);
- break;
- case DAYSTYLE_SHORTDATE4:
- // "23"
- $txt = strftime('%d', $datestamp);
- break;
- case DAYSTYLE_CUSTOM:
- // Custom format
- $txt = strftime($this->day->iLabelFormStr, $datestamp);
- break;
- case DAYSTYLE_ONELETTER:
- default:
- // "M"
- $txt = strftime('%A', $datestamp);
- $txt = strtoupper($txt[0]);
- break;
- }
+ case DAYSTYLE_LONG:
+ // "Monday"
+ $txt = strftime('%A', $datestamp);
+ break;
+ case DAYSTYLE_SHORT:
+ // "Mon"
+ $txt = strftime('%a', $datestamp);
+ break;
+ case DAYSTYLE_SHORTDAYDATE1:
+ // "Mon 23/6"
+ $txt = strftime('%a %d/'.$mn, $datestamp);
+ break;
+ case DAYSTYLE_SHORTDAYDATE2:
+ // "Mon 23 Jun"
+ $txt = strftime('%a %d %b', $datestamp);
+ break;
+ case DAYSTYLE_SHORTDAYDATE3:
+ // "Mon 23 Jun 2003"
+ $txt = strftime('%a %d %b %Y', $datestamp);
+ break;
+ case DAYSTYLE_LONGDAYDATE1:
+ // "Monday 23 Jun"
+ $txt = strftime('%A %d %b', $datestamp);
+ break;
+ case DAYSTYLE_LONGDAYDATE2:
+ // "Monday 23 Jun 2003"
+ $txt = strftime('%A %d %b %Y', $datestamp);
+ break;
+ case DAYSTYLE_SHORTDATE1:
+ // "23/6"
+ $txt = strftime('%d/'.$mn, $datestamp);
+ break;
+ case DAYSTYLE_SHORTDATE2:
+ // "23 Jun"
+ $txt = strftime('%d %b', $datestamp);
+ break;
+ case DAYSTYLE_SHORTDATE3:
+ // "Mon 23"
+ $txt = strftime('%a %d', $datestamp);
+ break;
+ case DAYSTYLE_SHORTDATE4:
+ // "23"
+ $txt = strftime('%d', $datestamp);
+ break;
+ case DAYSTYLE_CUSTOM:
+ // Custom format
+ $txt = strftime($this->day->iLabelFormStr, $datestamp);
+ break;
+ case DAYSTYLE_ONELETTER:
+ default:
+ // "M"
+ $txt = strftime('%A', $datestamp);
+ $txt = strtoupper($txt[0]);
+ break;
+ }
if ($day==0) {
$img->SetColor($this->day->iSundayTextColor);
@@ -2887,7 +2791,7 @@ class GanttScale
}
return $aYCoord;
}
-
+
// Stroke week header and grid
public function StrokeWeeks($aYCoord, $getHeight=false)
{
@@ -2915,43 +2819,43 @@ class GanttScale
$img->SetTextAlign("center");
$txtOffset = $weekwidth/2+1;
} elseif ($this->week->iStyle==WEEKSTYLE_FIRSTDAY ||
- $this->week->iStyle==WEEKSTYLE_FIRSTDAY2 ||
- $this->week->iStyle==WEEKSTYLE_FIRSTDAYWNBR ||
- $this->week->iStyle==WEEKSTYLE_FIRSTDAY2WNBR) {
+ $this->week->iStyle==WEEKSTYLE_FIRSTDAY2 ||
+ $this->week->iStyle==WEEKSTYLE_FIRSTDAYWNBR ||
+ $this->week->iStyle==WEEKSTYLE_FIRSTDAY2WNBR) {
$img->SetTextAlign("left");
$txtOffset = 3;
} else {
JpGraphError::RaiseL(6021);
- //("Unknown formatting style for week.");
}
-
+ //("Unknown formatting style for week.");
+
for ($i=0; $i<$this->GetNumberOfDays()/7; ++$i, $x+=$weekwidth) {
$img->PushColor($this->week->iTextColor);
-
+
if ($this->week->iStyle==WEEKSTYLE_WNBR) {
$txt = sprintf($this->week->iLabelFormStr, $weeknbr);
} elseif ($this->week->iStyle==WEEKSTYLE_FIRSTDAY ||
- $this->week->iStyle==WEEKSTYLE_FIRSTDAYWNBR) {
+ $this->week->iStyle==WEEKSTYLE_FIRSTDAYWNBR) {
$txt = date("j/n", $week);
} elseif ($this->week->iStyle==WEEKSTYLE_FIRSTDAY2 ||
- $this->week->iStyle==WEEKSTYLE_FIRSTDAY2WNBR) {
+ $this->week->iStyle==WEEKSTYLE_FIRSTDAY2WNBR) {
$monthnbr = date("n", $week)-1;
$shortmonth = $this->iDateLocale->GetShortMonthName($monthnbr);
$txt = Date("j", $week)." ".$shortmonth;
}
if ($this->week->iStyle==WEEKSTYLE_FIRSTDAYWNBR ||
- $this->week->iStyle==WEEKSTYLE_FIRSTDAY2WNBR) {
+ $this->week->iStyle==WEEKSTYLE_FIRSTDAY2WNBR) {
$w = sprintf($this->week->iLabelFormStr, $weeknbr);
$txt .= ' '.$w;
}
-
+
$img->StrokeText(
round($x+$txtOffset),
round($yb-$this->week->iTitleVertMargin),
$txt
);
-
+
$week = strtotime('+7 day', $week);
$weeknbr = $this->GetWeekNbr($week);
$img->PopColor();
@@ -2966,38 +2870,38 @@ class GanttScale
}
return $aYCoord;
}
-
+
// Format the mont scale header string
public function GetMonthLabel($aMonthNbr, $year)
{
$sn = $this->iDateLocale->GetShortMonthName($aMonthNbr);
$ln = $this->iDateLocale->GetLongMonthName($aMonthNbr);
switch ($this->month->iStyle) {
- case MONTHSTYLE_SHORTNAME:
- $m=$sn;
- break;
- case MONTHSTYLE_LONGNAME:
- $m=$ln;
- break;
- case MONTHSTYLE_SHORTNAMEYEAR2:
- $m=$sn." '".substr("".$year, 2);
- break;
- case MONTHSTYLE_SHORTNAMEYEAR4:
- $m=$sn." ".$year;
- break;
- case MONTHSTYLE_LONGNAMEYEAR2:
- $m=$ln." '".substr("".$year, 2);
- break;
- case MONTHSTYLE_LONGNAMEYEAR4:
- $m=$ln." ".$year;
- break;
- case MONTHSTYLE_FIRSTLETTER:
- $m=$sn[0];
- break;
- }
+ case MONTHSTYLE_SHORTNAME:
+ $m=$sn;
+ break;
+ case MONTHSTYLE_LONGNAME:
+ $m=$ln;
+ break;
+ case MONTHSTYLE_SHORTNAMEYEAR2:
+ $m=$sn." '".substr("".$year, 2);
+ break;
+ case MONTHSTYLE_SHORTNAMEYEAR4:
+ $m=$sn." ".$year;
+ break;
+ case MONTHSTYLE_LONGNAMEYEAR2:
+ $m=$ln." '".substr("".$year, 2);
+ break;
+ case MONTHSTYLE_LONGNAMEYEAR4:
+ $m=$ln." ".$year;
+ break;
+ case MONTHSTYLE_FIRSTLETTER:
+ $m=$sn[0];
+ break;
+ }
return $m;
}
-
+
// Stroke month scale and gridlines
public function StrokeMonths($aYCoord, $getHeight=false)
{
@@ -3012,7 +2916,7 @@ class GanttScale
$monthnbr = $this->GetMonthNbr($this->iStartDate)-1;
$xt=$img->left_margin+$this->iLabelWidth;
$xb=$img->width-$img->right_margin+1;
-
+
$img->SetColor($this->month->iBackgroundColor);
$img->FilledRectangle($xt, $yt, $xb, $yb);
@@ -3021,7 +2925,7 @@ class GanttScale
$year = 0+strftime("%Y", $this->iStartDate);
$img->SetTextAlign("center");
if ($this->GetMonthNbr($this->iStartDate) == $this->GetMonthNbr($this->iEndDate)
- && $this->GetYear($this->iStartDate)==$this->GetYear($this->iEndDate)) {
+ && $this->GetYear($this->iStartDate)==$this->GetYear($this->iEndDate)) {
$monthwidth=$this->GetDayWidth()*($this->GetMonthDayNbr($this->iEndDate) - $this->GetMonthDayNbr($this->iStartDate) + 1);
} else {
$monthwidth=$this->GetDayWidth()*($this->GetNumDaysInMonth($monthnbr, $year)-$this->GetMonthDayNbr($this->iStartDate)+1);
@@ -3096,7 +3000,7 @@ class GanttScale
} else {
$yearwidth=$this->GetDayWidth()*($this->GetNumDaysInYear($year)-$this->GetYearDayNbr($this->iStartDate)+1);
}
-
+
// The space for a year must be at least 20% bigger than the actual text
// so we allow 10% margin on each side
if ($yearwidth >= 1.20*$img->GetTextWidth("".$year)) {
@@ -3136,7 +3040,7 @@ class GanttScale
}
return $aYCoord;
}
-
+
// Stroke table title (upper left corner)
public function StrokeTableHeaders($aYBottom)
{
@@ -3161,7 +3065,7 @@ class GanttScale
// Draw the horizontal dividing line
$this->dividerh->Stroke($img, $xt, $yb, $img->width-$img->right_margin, $yb);
-
+
// Draw the vertical dividing line
// We do the width "manually" since we want the line only to grow
// to the left
@@ -3193,8 +3097,8 @@ class GanttScale
{
if (!$this->IsRangeSet()) {
JpGraphError::RaiseL(6022);
- //("Gantt scale has not been specified.");
}
+ //("Gantt scale has not been specified.");
$img=$this->iImg;
// If minutes are displayed then hour interval must be 1
@@ -3202,10 +3106,10 @@ class GanttScale
JpGraphError::RaiseL(6023);
//('If you display both hour and minutes the hour intervall must be 1 (Otherwise it doesn\' make sense to display minutes).');
}
-
+
// Stroke all headers. As argument we supply the offset from the
// top which depends on any previous headers
-
+
// First find out the height of each header
$offy=$this->StrokeYears(0, true);
$offm=$this->StrokeMonths($offy, true);
@@ -3227,10 +3131,9 @@ class GanttScale
// Now when we now the oaverall size of the scale headers
// we can stroke the overall table headers
$this->StrokeTableHeaders($offmin);
-
+
// Now we can calculate the correct scaling factor for each vertical position
$this->iAvailableHeight = $img->height - $img->top_margin - $img->bottom_margin - $offd;
-
$this->iVertHeaderSize = $offmin;
if ($this->iVertSpacing == -1) {
$this->iVertSpacing = $this->iAvailableHeight / $this->iVertLines;
@@ -3253,7 +3156,7 @@ class GanttConstraint
//---------------
// CONSTRUCTOR
- public function __construct($aRow, $aType, $aColor, $aArrowSize, $aArrowType)
+ public function GanttConstraint($aRow, $aType, $aColor, $aArrowSize, $aArrowType)
{
$this->iConstrainType = $aType;
$this->iConstrainRow = $aRow;
@@ -3279,14 +3182,14 @@ class GanttPlotObject
public $constraints = array();
public $iCaptionMargin=5;
public $iConstrainPos=array();
- protected $iStart=""; // Start date
- public $iVPos=0; // Vertical position
- protected $iLabelLeftMargin=2; // Title margin
-
- public function __construct()
+ protected $iStart=""; // Start date
+ public $iVPos=0; // Vertical position
+ protected $iLabelLeftMargin=2; // Title margin
+
+ public function GanttPlotObject()
{
$this->title = new TextProperty();
- $this->title->Align('left', 'center');
+ $this->title->Align("left", "center");
$this->caption = new TextProperty();
}
@@ -3312,7 +3215,7 @@ class GanttPlotObject
$this->csimwintarget=$aWinTarget;
$this->csimalt=$aAlt;
}
-
+
public function SetCSIMAlt($aAlt)
{
if (!is_string($aAlt)) {
@@ -3333,6 +3236,12 @@ class GanttPlotObject
$this->iConstrainPos = array($xt,$yt,$xb,$yb);
}
+ /*
+ function GetConstrain() {
+ return array($this->iConstrainRow,$this->iConstrainType);
+ }
+ */
+
public function GetMinDate()
{
return $this->iStart;
@@ -3342,7 +3251,7 @@ class GanttPlotObject
{
return $this->iStart;
}
-
+
public function SetCaptionMargin($aMarg)
{
$this->iCaptionMargin=$aMarg;
@@ -3352,7 +3261,7 @@ class GanttPlotObject
{
return 0;
}
-
+
public function GetLineNbr()
{
return $this->iVPos;
@@ -3384,13 +3293,13 @@ class Progress
public $iFillColor='black';
public $iDensity=98;
public $iHeight=0.65;
-
+
public function Set($aProg)
{
if ($aProg < 0.0 || $aProg > 1.0) {
JpGraphError::RaiseL(6027);
- //("Progress value must in range [0, 1]");
}
+ //("Progress value must in range [0, 1]");
$this->iProgress = $aProg;
}
@@ -3405,15 +3314,15 @@ class Progress
{
$this->iFillColor = $aColor;
}
-
+
public function SetHeight($aHeight)
{
$this->iHeight = $aHeight;
}
}
-define('GANTT_HGRID1', 0);
-define('GANTT_HGRID2', 1);
+DEFINE('GANTT_HGRID1', 0);
+DEFINE('GANTT_HGRID2', 1);
//===================================================
// CLASS HorizontalGridLine
@@ -3428,13 +3337,13 @@ class HorizontalGridLine
private $line=null;
private $iStart=0; // 0=from left margin, 1=just along header
- public function __construct()
+ public function HorizontalGridLine()
{
$this->line = new LineProperty();
$this->line->SetColor('gray@0.4');
$this->line->SetStyle('dashed');
}
-
+
public function Show($aShow=true)
{
$this->iShow = $aShow;
@@ -3520,14 +3429,11 @@ class GanttBar extends GanttPlotObject
private $iPattern=GANTT_RDIAG;
private $iPatternColor="blue";
private $iPatternDensity=95;
- private $iBreakStyle=false;
- private $iBreakLineStyle='dotted';
- private $iBreakLineWeight=1;
//---------------
// CONSTRUCTOR
- public function __construct($aPos, $aLabel, $aStart, $aEnd, $aCaption="", $aHeightFactor=0.6)
+ public function GanttBar($aPos, $aLabel, $aStart, $aEnd, $aCaption="", $aHeightFactor=0.6)
{
- parent::__construct();
+ parent::GanttPlotObject();
$this->iStart = $aStart;
// Is the end date given as a date or as number of days added to start date?
if (is_string($aEnd)) {
@@ -3552,7 +3458,7 @@ class GanttBar extends GanttPlotObject
$this->rightMark->Hide();
$this->progress = new Progress();
}
-
+
//---------------
// PUBLIC METHODS
public function SetShadow($aShadow=true, $aColor="gray")
@@ -3560,19 +3466,12 @@ class GanttBar extends GanttPlotObject
$this->iShadow=$aShadow;
$this->iShadowColor=$aColor;
}
-
- public function SetBreakStyle($aFlg=true, $aLineStyle='dotted', $aLineWeight=1)
- {
- $this->iBreakStyle = $aFlg;
- $this->iBreakLineStyle = $aLineStyle;
- $this->iBreakLineWeight = $aLineWeight;
- }
-
+
public function GetMaxDate()
{
return $this->iEnd;
}
-
+
public function SetHeight($aHeight)
{
$this->iHeightFactor = $aHeight;
@@ -3606,7 +3505,7 @@ class GanttBar extends GanttPlotObject
return -1;
}
}
-
+
public function SetPattern($aPattern, $aColor="blue", $aDensity=95)
{
$this->iPattern = $aPattern;
@@ -3629,16 +3528,17 @@ class GanttBar extends GanttPlotObject
$vs = $this->iHeightFactor;
} else {
JpGraphError::RaiseL(6028, $this->iHeightFactor);
- // ("Specified height (".$this->iHeightFactor.") for gantt bar is out of range.");
}
-
+ //("Specified height (".$this->iHeightFactor.") for gantt bar is out of range.");
+
// Clip date to min max dates to show
$st = $aScale->NormalizeDate($this->iStart);
$en = $aScale->NormalizeDate($this->iEnd);
+
$limst = max($st, $aScale->iStartDate);
$limen = min($en, $aScale->iEndDate);
-
+
$xt = round($aScale->TranslateDate($limst));
$xb = round($aScale->TranslateDate($limen));
$yt = round($aScale->TranslateVertPos($this->iVPos)-$vs-($aScale->GetVertSpacing()/2-$vs/2));
@@ -3659,11 +3559,11 @@ class GanttBar extends GanttPlotObject
if (! empty($this->title->csimtarget[$i])) {
$this->csimarea .= "title->csimtarget[$i]."\"";
-
+
if (! empty($this->title->csimwintarget[$i])) {
$this->csimarea .= "target=\"".$this->title->csimwintarget[$i]."\" ";
}
-
+
if (! empty($this->title->csimalt[$i])) {
$tmp = $this->title->csimalt[$i];
$this->csimarea .= " title=\"$tmp\" alt=\"$tmp\" ";
@@ -3672,46 +3572,35 @@ class GanttBar extends GanttPlotObject
}
}
}
-
+
// Check if the bar is totally outside the current scale range
if ($en < $aScale->iStartDate || $st > $aScale->iEndDate) {
return;
}
-
+
// Remember the positions for the bar
$this->SetConstrainPos($xt, $yt, $xb, $yb);
-
-
-
+
$prect->ShowFrame(false);
$prect->SetBackground($this->iFillColor);
- if ($this->iBreakStyle) {
+ if ($this->iShadow) {
$aImg->SetColor($this->iFrameColor);
- $olds = $aImg->SetLineStyle($this->iBreakLineStyle);
- $oldw = $aImg->SetLineWeight($this->iBreakLineWeight);
- $aImg->StyleLine($xt, $yt, $xb, $yt);
- $aImg->StyleLine($xt, $yb, $xb, $yb);
- $aImg->SetLineStyle($olds);
- $aImg->SetLineWeight($oldw);
+ $aImg->ShadowRectangle($xt, $yt, $xb, $yb, $this->iFillColor, $this->iShadowWidth, $this->iShadowColor);
+ $prect->SetPos(new Rectangle($xt+1, $yt+1, $xb-$xt-$this->iShadowWidth-2, $yb-$yt-$this->iShadowWidth-2));
+ $prect->Stroke($aImg);
} else {
- if ($this->iShadow) {
- $aImg->SetColor($this->iFrameColor);
- $aImg->ShadowRectangle($xt, $yt, $xb, $yb, $this->iFillColor, $this->iShadowWidth, $this->iShadowColor);
- $prect->SetPos(new Rectangle($xt+1, $yt+1, $xb-$xt-$this->iShadowWidth-2, $yb-$yt-$this->iShadowWidth-2));
- $prect->Stroke($aImg);
- } else {
- $prect->SetPos(new Rectangle($xt, $yt, $xb-$xt+1, $yb-$yt+1));
- $prect->Stroke($aImg);
- $aImg->SetColor($this->iFrameColor);
- $aImg->Rectangle($xt, $yt, $xb, $yb);
- }
+ $prect->SetPos(new Rectangle($xt, $yt, $xb-$xt+1, $yb-$yt+1));
+ $prect->Stroke($aImg);
+ $aImg->SetColor($this->iFrameColor);
+ $aImg->Rectangle($xt, $yt, $xb, $yb);
}
+
// CSIM for bar
if (! empty($this->csimtarget)) {
$coords = "$xt,$yt,$xb,$yt,$xb,$yb,$xt,$yb";
$this->csimarea .= "csimtarget."\"";
-
+
if (!empty($this->csimwintarget)) {
$this->csimarea .= " target=\"".$this->csimwintarget."\" ";
}
@@ -3732,19 +3621,19 @@ class GanttBar extends GanttPlotObject
$endpos = $xtp+$len;
if ($endpos > $xt) {
- // Take away the length of the progress that is not visible (before the start date)
+ // Take away the length of the progress that is not visible (before the start date)
$len -= ($xt-$xtp);
// Is the the progress bar visible after the start date?
if ($xtp < $xt) {
$xtp = $xt;
}
-
+
// Make sure that the progess bar doesn't extend over the end date
if ($xtp+$len-1 > $xb) {
$len = $xb - $xtp ;
}
-
+
$prog = $factory->Create($this->progress->iPattern, $this->progress->iColor);
$prog->SetDensity($this->progress->iDensity);
$prog->SetBackground($this->progress->iFillColor);
@@ -3759,7 +3648,7 @@ class GanttBar extends GanttPlotObject
$prog->Stroke($aImg);
}
}
-
+
// We don't plot the end mark if the bar has been capped
if ($limst == $st) {
$y = $middle;
@@ -3780,7 +3669,7 @@ class GanttBar extends GanttPlotObject
$y = $yb ;
}
$this->rightMark->Stroke($aImg, $xb, $y);
-
+
$margin = $this->iCaptionMargin;
if ($this->rightMark->show) {
$margin += $this->rightMark->GetWidth();
@@ -3797,12 +3686,12 @@ class GanttBar extends GanttPlotObject
class MileStone extends GanttPlotObject
{
public $mark;
-
+
//---------------
// CONSTRUCTOR
- public function __construct($aVPos, $aLabel, $aDate, $aCaption="")
+ public function MileStone($aVPos, $aLabel, $aDate, $aCaption="")
{
- GanttPlotObject::__construct();
+ GanttPlotObject::GanttPlotObject();
$this->caption->Set($aCaption);
$this->caption->Align("left", "center");
$this->caption->SetFont(FF_FONT1, FS_BOLD);
@@ -3816,15 +3705,15 @@ class MileStone extends GanttPlotObject
$this->iVPos = $aVPos;
$this->iStart = $aDate;
}
-
+
//---------------
// PUBLIC METHODS
-
+
public function GetAbsHeight($aImg)
{
return max($this->title->GetHeight($aImg), $this->mark->GetWidth());
}
-
+
public function Stroke($aImg, $aScale)
{
// Put the mark in the middle at the middle of the day
@@ -3847,14 +3736,14 @@ class MileStone extends GanttPlotObject
$title_xt = $colstarts[$i];
$title_xb = $title_xt + $colwidth[$i];
$coords = "$title_xt,$yt,$title_xb,$yt,$title_xb,$yb,$title_xt,$yb";
-
+
if (!empty($this->title->csimtarget[$i])) {
$this->csimarea .= "title->csimtarget[$i]."\"";
-
+
if (!empty($this->title->csimwintarget[$i])) {
$this->csimarea .= "target=\"".$this->title->csimwintarget[$i]."\"";
}
-
+
if (! empty($this->title->csimalt[$i])) {
$tmp = $this->title->csimalt[$i];
$this->csimarea .= " title=\"$tmp\" alt=\"$tmp\" ";
@@ -3872,13 +3761,13 @@ class MileStone extends GanttPlotObject
// this milestone
$w = $this->mark->GetWidth()/2;
$this->SetConstrainPos($x, round($y-$w), $x, round($y+$w));
-
+
// Setup CSIM
if ($this->csimtarget != '') {
$this->mark->SetCSIMTarget($this->csimtarget);
$this->mark->SetCSIMAlt($this->csimalt);
}
-
+
$this->mark->Stroke($aImg, $x, $y);
$this->caption->Stroke($aImg, $x+$this->mark->width/2+$this->iCaptionMargin, $y);
@@ -3894,9 +3783,9 @@ class MileStone extends GanttPlotObject
class TextPropertyBelow extends TextProperty
{
- public function __construct($aTxt='')
+ public function TextPropertyBelow($aTxt='')
{
- parent::__construct($aTxt);
+ parent::TextProperty($aTxt);
}
public function GetColWidth($aImg, $aMargin=0)
@@ -3911,15 +3800,13 @@ class GanttVLine extends GanttPlotObject
{
private $iLine;
private $title_margin=3;
- private $iDayOffset=0.5;
- private $iStartRow = -1;
- private $iEndRow = -1;
-
+ private $iDayOffset=1;
+
//---------------
// CONSTRUCTOR
- public function __construct($aDate, $aTitle="", $aColor="darkred", $aWeight=2, $aStyle="solid")
+ public function GanttVLine($aDate, $aTitle="", $aColor="black", $aWeight=3, $aStyle="dashed")
{
- GanttPlotObject::__construct();
+ GanttPlotObject::GanttPlotObject();
$this->iLine = new LineProperty();
$this->iLine->SetColor($aColor);
$this->iLine->SetWeight($aWeight);
@@ -3932,33 +3819,20 @@ class GanttVLine extends GanttPlotObject
//---------------
// PUBLIC METHODS
- // Set start and end rows for the VLine. By default the entire heigh of the
- // Gantt chart is used
- public function SetRowSpan($aStart, $aEnd=-1)
- {
- $this->iStartRow = $aStart;
- $this->iEndRow = $aEnd;
- }
-
public function SetDayOffset($aOff=0.5)
{
if ($aOff < 0.0 || $aOff > 1.0) {
JpGraphError::RaiseL(6029);
- //("Offset for vertical line must be in range [0,1]");
}
+ //("Offset for vertical line must be in range [0,1]");
$this->iDayOffset = $aOff;
}
-
+
public function SetTitleMargin($aMarg)
{
$this->title_margin = $aMarg;
}
-
- public function SetWeight($aWeight)
- {
- $this->iLine->SetWeight($aWeight);
- }
-
+
public function Stroke($aImg, $aScale)
{
$d = $aScale->NormalizeDate($this->iStart);
@@ -3968,20 +3842,9 @@ class GanttVLine extends GanttPlotObject
if ($this->iDayOffset != 0.0) {
$d += 24*60*60*$this->iDayOffset;
}
- $x = $aScale->TranslateDate($d);//d=1006858800,
-
- if ($this->iStartRow > -1) {
- $y1 = $aScale->TranslateVertPos($this->iStartRow, true) ;
- } else {
- $y1 = $aScale->iVertHeaderSize+$aImg->top_margin;
- }
-
- if ($this->iEndRow > -1) {
- $y2 = $aScale->TranslateVertPos($this->iEndRow);
- } else {
- $y2 = $aImg->height - $aImg->bottom_margin;
- }
-
+ $x = $aScale->TranslateDate($d);
+ $y1 = $aScale->iVertHeaderSize+$aImg->top_margin;
+ $y2 = $aImg->height - $aImg->bottom_margin;
$this->iLine->Stroke($aImg, $x, $y1, $x, $y2);
$this->title->Align("center", "top");
$this->title->Stroke($aImg, $x, $y2+$this->title_margin);
@@ -4003,7 +3866,7 @@ class LinkArrow
private $iSize=ARROW_S2;
private $iColor='black';
- public function __construct($x, $y, $aDirection, $aType=ARROWT_SOLID, $aSize=ARROW_S2)
+ public function LinkArrow($x, $y, $aDirection, $aType=ARROWT_SOLID, $aSize=ARROW_S2)
{
$this->iDirection = $aDirection;
$this->iType = $aType;
@@ -4011,7 +3874,7 @@ class LinkArrow
$this->ix = $x;
$this->iy = $y;
}
-
+
public function SetColor($aColor)
{
$this->iColor = $aColor;
@@ -4033,38 +3896,38 @@ class LinkArrow
$x = $this->ix;
$y = $this->iy;
switch ($this->iDirection) {
- case ARROW_DOWN:
- $c = array($x,$y,$x-$dx,$y-$dy,$x+$dx,$y-$dy,$x,$y);
- break;
- case ARROW_UP:
- $c = array($x,$y,$x-$dx,$y+$dy,$x+$dx,$y+$dy,$x,$y);
- break;
- case ARROW_LEFT:
- $c = array($x,$y,$x+$dy,$y-$dx,$x+$dy,$y+$dx,$x,$y);
- break;
- case ARROW_RIGHT:
- $c = array($x,$y,$x-$dy,$y-$dx,$x-$dy,$y+$dx,$x,$y);
- break;
- default:
- JpGraphError::RaiseL(6030);
- //('Unknown arrow direction for link.');
- die();
- break;
- }
+ case ARROW_DOWN:
+ $c = array($x,$y,$x-$dx,$y-$dy,$x+$dx,$y-$dy,$x,$y);
+ break;
+ case ARROW_UP:
+ $c = array($x,$y,$x-$dx,$y+$dy,$x+$dx,$y+$dy,$x,$y);
+ break;
+ case ARROW_LEFT:
+ $c = array($x,$y,$x+$dy,$y-$dx,$x+$dy,$y+$dx,$x,$y);
+ break;
+ case ARROW_RIGHT:
+ $c = array($x,$y,$x-$dy,$y-$dx,$x-$dy,$y+$dx,$x,$y);
+ break;
+ default:
+ JpGraphError::RaiseL(6030);
+//('Unknown arrow direction for link.');
+ die();
+ break;
+ }
$aImg->SetColor($this->iColor);
switch ($this->iType) {
- case ARROWT_SOLID:
- $aImg->FilledPolygon($c);
- break;
- case ARROWT_OPEN:
- $aImg->Polygon($c);
- break;
- default:
- JpGraphError::RaiseL(6031);
- //('Unknown arrow type for link.');
- die();
- break;
- }
+ case ARROWT_SOLID:
+ $aImg->FilledPolygon($c);
+ break;
+ case ARROWT_OPEN:
+ $aImg->Polygon($c);
+ break;
+ default:
+ JpGraphError::RaiseL(6031);
+//('Unknown arrow type for link.');
+ die();
+ break;
+ }
}
}
@@ -4086,7 +3949,7 @@ class GanttLink
private $iArrowSize=ARROW_S2;
private $iArrowType=ARROWT_SOLID;
- public function __construct($x1=0, $y1=0, $x2=0, $y2=0)
+ public function GanttLink($x1=0, $y1=0, $x2=0, $y2=0)
{
$this->ix1 = $x1;
$this->ix2 = $x2;
@@ -4117,7 +3980,7 @@ class GanttLink
$this->iArrowSize = $aSize;
$this->iArrowType = $aType;
}
-
+
public function SetWeight($aWeight)
{
$this->iWeight = $aWeight;
@@ -4151,52 +4014,52 @@ class GanttLink
$midy = round(($y2-$y1)/2+$y1);
if ($x2 > $x1) {
switch ($this->iPathType) {
- case 0:
- $c = array($x1,$y1,$x1,$midy,$x2,$midy,$x2,$y2);
- break;
- case 1:
- case 2:
- case 3:
- $c = array($x1,$y1,$x2,$y1,$x2,$y2);
- break;
- default:
- JpGraphError::RaiseL(6032, $this->iPathType);
- //('Internal error: Unknown path type (='.$this->iPathType .') specified for link.');
- exit(1);
- break;
- }
+ case 0:
+ $c = array($x1,$y1,$x1,$midy,$x2,$midy,$x2,$y2);
+ break;
+ case 1:
+ case 2:
+ case 3:
+ $c = array($x1,$y1,$x2,$y1,$x2,$y2);
+ break;
+ default:
+ JpGraphError::RaiseL(6032, $this->iPathType);
+//('Internal error: Unknown path type (='.$this->iPathType .') specified for link.');
+ exit(1);
+ break;
+ }
} else {
switch ($this->iPathType) {
- case 0:
- case 1:
- $c = array($x1,$y1,$x1,$midy,$x2,$midy,$x2,$y2);
- break;
- case 2:
- // Always extend out horizontally a bit from the first point
- // If we draw a link back in time (end to start) and the bars
- // are very close we also change the path so it comes in from
- // the left on the activity
- $c = array($x1,$y1,$x1+$this->iPathExtend,$y1,
- $x1+$this->iPathExtend,$midy,
- $x2,$midy,$x2,$y2);
- break;
- case 3:
- if ($y2-$midy < 6) {
- $c = array($x1,$y1,$x1,$midy,
- $x2-$this->iPathExtend,$midy,
- $x2-$this->iPathExtend,$y2,
- $x2,$y2);
- $arrowtype = ARROW_RIGHT;
- } else {
- $c = array($x1,$y1,$x1,$midy,$x2,$midy,$x2,$y2);
- }
- break;
- default:
- JpGraphError::RaiseL(6032, $this->iPathType);
- //('Internal error: Unknown path type specified for link.');
- exit(1);
- break;
- }
+ case 0:
+ case 1:
+ $c = array($x1,$y1,$x1,$midy,$x2,$midy,$x2,$y2);
+ break;
+ case 2:
+ // Always extend out horizontally a bit from the first point
+ // If we draw a link back in time (end to start) and the bars
+ // are very close we also change the path so it comes in from
+ // the left on the activity
+ $c = array($x1,$y1,$x1+$this->iPathExtend,$y1,
+ $x1+$this->iPathExtend,$midy,
+ $x2,$midy,$x2,$y2);
+ break;
+ case 3:
+ if ($y2-$midy < 6) {
+ $c = array($x1,$y1,$x1,$midy,
+ $x2-$this->iPathExtend,$midy,
+ $x2-$this->iPathExtend,$y2,
+ $x2,$y2);
+ $arrowtype = ARROW_RIGHT;
+ } else {
+ $c = array($x1,$y1,$x1,$midy,$x2,$midy,$x2,$y2);
+ }
+ break;
+ default:
+ JpGraphError::RaiseL(6032, $this->iPathType);
+//('Internal error: Unknown path type specified for link.');
+ exit(1);
+ break;
+ }
}
$arrow = new LinkArrow($x2, $y2, $arrowtype);
} else {
@@ -4205,50 +4068,50 @@ class GanttLink
$midy = round(($y1-$y2)/2+$y2);
if ($x2 > $x1) {
switch ($this->iPathType) {
- case 0:
- case 1:
- $c = array($x1,$y1,$x1,$midy,$x2,$midy,$x2,$y2);
- break;
- case 3:
- if ($midy-$y2 < 8) {
- $arrowtype = ARROW_RIGHT;
- $c = array($x1,$y1,$x1,$y2,$x2,$y2);
- } else {
- $c = array($x1,$y1,$x1,$midy,$x2,$midy,$x2,$y2);
- }
- break;
- default:
- JpGraphError::RaiseL(6032, $this->iPathType);
- //('Internal error: Unknown path type specified for link.');
- break;
- }
+ case 0:
+ case 1:
+ $c = array($x1,$y1,$x1,$midy,$x2,$midy,$x2,$y2);
+ break;
+ case 3:
+ if ($midy-$y2 < 8) {
+ $arrowtype = ARROW_RIGHT;
+ $c = array($x1,$y1,$x1,$y2,$x2,$y2);
+ } else {
+ $c = array($x1,$y1,$x1,$midy,$x2,$midy,$x2,$y2);
+ }
+ break;
+ default:
+ JpGraphError::RaiseL(6032, $this->iPathType);
+//('Internal error: Unknown path type specified for link.');
+ break;
+ }
} else {
switch ($this->iPathType) {
- case 0:
- case 1:
- $c = array($x1,$y1,$x1,$midy,$x2,$midy,$x2,$y2);
- break;
- case 2:
- // Always extend out horizontally a bit from the first point
- $c = array($x1,$y1,$x1+$this->iPathExtend,$y1,
- $x1+$this->iPathExtend,$midy,
- $x2,$midy,$x2,$y2);
- break;
- case 3:
- if ($midy-$y2 < 16) {
- $arrowtype = ARROW_RIGHT;
- $c = array($x1,$y1,$x1,$midy,$x2-$this->iPathExtend,$midy,
- $x2-$this->iPathExtend,$y2,
- $x2,$y2);
- } else {
- $c = array($x1,$y1,$x1,$midy,$x2,$midy,$x2,$y2);
- }
- break;
- default:
- JpGraphError::RaiseL(6032, $this->iPathType);
- //('Internal error: Unknown path type specified for link.');
- break;
- }
+ case 0:
+ case 1:
+ $c = array($x1,$y1,$x1,$midy,$x2,$midy,$x2,$y2);
+ break;
+ case 2:
+ // Always extend out horizontally a bit from the first point
+ $c = array($x1,$y1,$x1+$this->iPathExtend,$y1,
+ $x1+$this->iPathExtend,$midy,
+ $x2,$midy,$x2,$y2);
+ break;
+ case 3:
+ if ($midy-$y2 < 16) {
+ $arrowtype = ARROW_RIGHT;
+ $c = array($x1,$y1,$x1,$midy,$x2-$this->iPathExtend,$midy,
+ $x2-$this->iPathExtend,$y2,
+ $x2,$y2);
+ } else {
+ $c = array($x1,$y1,$x1,$midy,$x2,$midy,$x2,$y2);
+ }
+ break;
+ default:
+ JpGraphError::RaiseL(6032, $this->iPathType);
+//('Internal error: Unknown path type specified for link.');
+ break;
+ }
}
$arrow = new LinkArrow($x2, $y2, $arrowtype);
}
diff --git a/onyx2/include/jpgraph/jpgraph_gb2312.php b/onyx2/include/jpgraph/jpgraph_gb2312.php
index 7eafce1..5e4fe4c 100644
--- a/onyx2/include/jpgraph/jpgraph_gb2312.php
+++ b/onyx2/include/jpgraph/jpgraph_gb2312.php
@@ -1,11 +1,11 @@
25745, 13126 => 31216, 13127 => 22478, 13128 => 27225, 13129 => 25104,
13130 => 21576, 13131 => 20056, 13132 => 31243, 13133 => 24809, 13134 => 28548,
13135 => 35802, 13136 => 25215, 13137 => 36894, 13138 => 39563, 13139 => 31204,
- 13140 => 21507, 13141 => 30196, 13142 => 25345, 13143 => 21273, 13144 => 27744,
- 13145 => 36831, 13146 => 24347, 13147 => 39536, 13148 => 32827, 13149 => 40831,
- 13150 => 20360, 13151 => 23610, 13152 => 36196, 13153 => 32709, 13154 => 26021,
- 13155 => 28861, 13156 => 20805, 13157 => 20914, 13158 => 34411, 13159 => 23815,
- 13160 => 23456, 13161 => 25277, 13162 => 37228, 13163 => 30068, 13164 => 36364,
- 13165 => 31264, 13166 => 24833, 13167 => 31609, 13168 => 20167, 13169 => 32504,
- 13170 => 30597, 13171 => 19985, 13172 => 33261, 13173 => 21021, 13174 => 20986,
- 13175 => 27249, 13176 => 21416, 13177 => 36487, 13178 => 38148, 13179 => 38607,
- 13180 => 28353, 13181 => 38500, 13182 => 26970, 13345 => 30784, 13346 => 20648,
- 13347 => 30679, 13348 => 25616, 13349 => 35302, 13350 => 22788, 13351 => 25571,
- 13352 => 24029, 13353 => 31359, 13354 => 26941, 13355 => 20256, 13356 => 33337,
- 13357 => 21912, 13358 => 20018, 13359 => 30126, 13360 => 31383, 13361 => 24162,
- 13362 => 24202, 13363 => 38383, 13364 => 21019, 13365 => 21561, 13366 => 28810,
- 13367 => 25462, 13368 => 38180, 13369 => 22402, 13370 => 26149, 13371 => 26943,
- 13372 => 37255, 13373 => 21767, 13374 => 28147, 13375 => 32431, 13376 => 34850,
- 13377 => 25139, 13378 => 32496, 13379 => 30133, 13380 => 33576, 13381 => 30913,
- 13382 => 38604, 13383 => 36766, 13384 => 24904, 13385 => 29943, 13386 => 35789,
- 13387 => 27492, 13388 => 21050, 13389 => 36176, 13390 => 27425, 13391 => 32874,
- 13392 => 33905, 13393 => 22257, 13394 => 21254, 13395 => 20174, 13396 => 19995,
- 13397 => 20945, 13398 => 31895, 13399 => 37259, 13400 => 31751, 13401 => 20419,
- 13402 => 36479, 13403 => 31713, 13404 => 31388, 13405 => 25703, 13406 => 23828,
- 13407 => 20652, 13408 => 33030, 13409 => 30209, 13410 => 31929, 13411 => 28140,
- 13412 => 32736, 13413 => 26449, 13414 => 23384, 13415 => 23544, 13416 => 30923,
- 13417 => 25774, 13418 => 25619, 13419 => 25514, 13420 => 25387, 13421 => 38169,
- 13422 => 25645, 13423 => 36798, 13424 => 31572, 13425 => 30249, 13426 => 25171,
- 13427 => 22823, 13428 => 21574, 13429 => 27513, 13430 => 20643, 13431 => 25140,
- 13432 => 24102, 13433 => 27526, 13434 => 20195, 13435 => 36151, 13436 => 34955,
- 13437 => 24453, 13438 => 36910, 13601 => 24608, 13602 => 32829, 13603 => 25285,
- 13604 => 20025, 13605 => 21333, 13606 => 37112, 13607 => 25528, 13608 => 32966,
- 13609 => 26086, 13610 => 27694, 13611 => 20294, 13612 => 24814, 13613 => 28129,
- 13614 => 35806, 13615 => 24377, 13616 => 34507, 13617 => 24403, 13618 => 25377,
- 13619 => 20826, 13620 => 33633, 13621 => 26723, 13622 => 20992, 13623 => 25443,
- 13624 => 36424, 13625 => 20498, 13626 => 23707, 13627 => 31095, 13628 => 23548,
- 13629 => 21040, 13630 => 31291, 13631 => 24764, 13632 => 36947, 13633 => 30423,
- 13634 => 24503, 13635 => 24471, 13636 => 30340, 13637 => 36460, 13638 => 28783,
- 13639 => 30331, 13640 => 31561, 13641 => 30634, 13642 => 20979, 13643 => 37011,
- 13644 => 22564, 13645 => 20302, 13646 => 28404, 13647 => 36842, 13648 => 25932,
- 13649 => 31515, 13650 => 29380, 13651 => 28068, 13652 => 32735, 13653 => 23265,
- 13654 => 25269, 13655 => 24213, 13656 => 22320, 13657 => 33922, 13658 => 31532,
- 13659 => 24093, 13660 => 24351, 13661 => 36882, 13662 => 32532, 13663 => 39072,
- 13664 => 25474, 13665 => 28359, 13666 => 30872, 13667 => 28857, 13668 => 20856,
- 13669 => 38747, 13670 => 22443, 13671 => 30005, 13672 => 20291, 13673 => 30008,
- 13674 => 24215, 13675 => 24806, 13676 => 22880, 13677 => 28096, 13678 => 27583,
- 13679 => 30857, 13680 => 21500, 13681 => 38613, 13682 => 20939, 13683 => 20993,
- 13684 => 25481, 13685 => 21514, 13686 => 38035, 13687 => 35843, 13688 => 36300,
- 13689 => 29241, 13690 => 30879, 13691 => 34678, 13692 => 36845, 13693 => 35853,
- 13694 => 21472, 13857 => 19969, 13858 => 30447, 13859 => 21486, 13860 => 38025,
- 13861 => 39030, 13862 => 40718, 13863 => 38189, 13864 => 23450, 13865 => 35746,
- 13866 => 20002, 13867 => 19996, 13868 => 20908, 13869 => 33891, 13870 => 25026,
- 13871 => 21160, 13872 => 26635, 13873 => 20375, 13874 => 24683, 13875 => 20923,
- 13876 => 27934, 13877 => 20828, 13878 => 25238, 13879 => 26007, 13880 => 38497,
- 13881 => 35910, 13882 => 36887, 13883 => 30168, 13884 => 37117, 13885 => 30563,
- 13886 => 27602, 13887 => 29322, 13888 => 29420, 13889 => 35835, 13890 => 22581,
- 13891 => 30585, 13892 => 36172, 13893 => 26460, 13894 => 38208, 13895 => 32922,
- 13896 => 24230, 13897 => 28193, 13898 => 22930, 13899 => 31471, 13900 => 30701,
- 13901 => 38203, 13902 => 27573, 13903 => 26029, 13904 => 32526, 13905 => 22534,
- 13906 => 20817, 13907 => 38431, 13908 => 23545, 13909 => 22697, 13910 => 21544,
- 13911 => 36466, 13912 => 25958, 13913 => 39039, 13914 => 22244, 13915 => 38045,
- 13916 => 30462, 13917 => 36929, 13918 => 25479, 13919 => 21702, 13920 => 22810,
- 13921 => 22842, 13922 => 22427, 13923 => 36530, 13924 => 26421, 13925 => 36346,
- 13926 => 33333, 13927 => 21057, 13928 => 24816, 13929 => 22549, 13930 => 34558,
- 13931 => 23784, 13932 => 40517, 13933 => 20420, 13934 => 39069, 13935 => 35769,
- 13936 => 23077, 13937 => 24694, 13938 => 21380, 13939 => 25212, 13940 => 36943,
- 13941 => 37122, 13942 => 39295, 13943 => 24681, 13944 => 32780, 13945 => 20799,
- 13946 => 32819, 13947 => 23572, 13948 => 39285, 13949 => 27953, 13950 => 20108,
- 14113 => 36144, 14114 => 21457, 14115 => 32602, 14116 => 31567, 14117 => 20240,
- 14118 => 20047, 14119 => 38400, 14120 => 27861, 14121 => 29648, 14122 => 34281,
- 14123 => 24070, 14124 => 30058, 14125 => 32763, 14126 => 27146, 14127 => 30718,
- 14128 => 38034, 14129 => 32321, 14130 => 20961, 14131 => 28902, 14132 => 21453,
- 14133 => 36820, 14134 => 33539, 14135 => 36137, 14136 => 29359, 14137 => 39277,
- 14138 => 27867, 14139 => 22346, 14140 => 33459, 14141 => 26041, 14142 => 32938,
- 14143 => 25151, 14144 => 38450, 14145 => 22952, 14146 => 20223, 14147 => 35775,
- 14148 => 32442, 14149 => 25918, 14150 => 33778, 14151 => 38750, 14152 => 21857,
- 14153 => 39134, 14154 => 32933, 14155 => 21290, 14156 => 35837, 14157 => 21536,
- 14158 => 32954, 14159 => 24223, 14160 => 27832, 14161 => 36153, 14162 => 33452,
- 14163 => 37210, 14164 => 21545, 14165 => 27675, 14166 => 20998, 14167 => 32439,
- 14168 => 22367, 14169 => 28954, 14170 => 27774, 14171 => 31881, 14172 => 22859,
- 14173 => 20221, 14174 => 24575, 14175 => 24868, 14176 => 31914, 14177 => 20016,
- 14178 => 23553, 14179 => 26539, 14180 => 34562, 14181 => 23792, 14182 => 38155,
- 14183 => 39118, 14184 => 30127, 14185 => 28925, 14186 => 36898, 14187 => 20911,
- 14188 => 32541, 14189 => 35773, 14190 => 22857, 14191 => 20964, 14192 => 20315,
- 14193 => 21542, 14194 => 22827, 14195 => 25975, 14196 => 32932, 14197 => 23413,
- 14198 => 25206, 14199 => 25282, 14200 => 36752, 14201 => 24133, 14202 => 27679,
- 14203 => 31526, 14204 => 20239, 14205 => 20440, 14206 => 26381, 14369 => 28014,
- 14370 => 28074, 14371 => 31119, 14372 => 34993, 14373 => 24343, 14374 => 29995,
- 14375 => 25242, 14376 => 36741, 14377 => 20463, 14378 => 37340, 14379 => 26023,
- 14380 => 33071, 14381 => 33105, 14382 => 24220, 14383 => 33104, 14384 => 36212,
- 14385 => 21103, 14386 => 35206, 14387 => 36171, 14388 => 22797, 14389 => 20613,
- 14390 => 20184, 14391 => 38428, 14392 => 29238, 14393 => 33145, 14394 => 36127,
- 14395 => 23500, 14396 => 35747, 14397 => 38468, 14398 => 22919, 14399 => 32538,
- 14400 => 21648, 14401 => 22134, 14402 => 22030, 14403 => 35813, 14404 => 25913,
- 14405 => 27010, 14406 => 38041, 14407 => 30422, 14408 => 28297, 14409 => 24178,
- 14410 => 29976, 14411 => 26438, 14412 => 26577, 14413 => 31487, 14414 => 32925,
- 14415 => 36214, 14416 => 24863, 14417 => 31174, 14418 => 25954, 14419 => 36195,
- 14420 => 20872, 14421 => 21018, 14422 => 38050, 14423 => 32568, 14424 => 32923,
- 14425 => 32434, 14426 => 23703, 14427 => 28207, 14428 => 26464, 14429 => 31705,
- 14430 => 30347, 14431 => 39640, 14432 => 33167, 14433 => 32660, 14434 => 31957,
- 14435 => 25630, 14436 => 38224, 14437 => 31295, 14438 => 21578, 14439 => 21733,
- 14440 => 27468, 14441 => 25601, 14442 => 25096, 14443 => 40509, 14444 => 33011,
- 14445 => 30105, 14446 => 21106, 14447 => 38761, 14448 => 33883, 14449 => 26684,
- 14450 => 34532, 14451 => 38401, 14452 => 38548, 14453 => 38124, 14454 => 20010,
- 14455 => 21508, 14456 => 32473, 14457 => 26681, 14458 => 36319, 14459 => 32789,
- 14460 => 26356, 14461 => 24218, 14462 => 32697, 14625 => 22466, 14626 => 32831,
- 14627 => 26775, 14628 => 24037, 14629 => 25915, 14630 => 21151, 14631 => 24685,
- 14632 => 40858, 14633 => 20379, 14634 => 36524, 14635 => 20844, 14636 => 23467,
- 14637 => 24339, 14638 => 24041, 14639 => 27742, 14640 => 25329, 14641 => 36129,
- 14642 => 20849, 14643 => 38057, 14644 => 21246, 14645 => 27807, 14646 => 33503,
- 14647 => 29399, 14648 => 22434, 14649 => 26500, 14650 => 36141, 14651 => 22815,
- 14652 => 36764, 14653 => 33735, 14654 => 21653, 14655 => 31629, 14656 => 20272,
- 14657 => 27837, 14658 => 23396, 14659 => 22993, 14660 => 40723, 14661 => 21476,
- 14662 => 34506, 14663 => 39592, 14664 => 35895, 14665 => 32929, 14666 => 25925,
- 14667 => 39038, 14668 => 22266, 14669 => 38599, 14670 => 21038, 14671 => 29916,
- 14672 => 21072, 14673 => 23521, 14674 => 25346, 14675 => 35074, 14676 => 20054,
- 14677 => 25296, 14678 => 24618, 14679 => 26874, 14680 => 20851, 14681 => 23448,
- 14682 => 20896, 14683 => 35266, 14684 => 31649, 14685 => 39302, 14686 => 32592,
- 14687 => 24815, 14688 => 28748, 14689 => 36143, 14690 => 20809, 14691 => 24191,
- 14692 => 36891, 14693 => 29808, 14694 => 35268, 14695 => 22317, 14696 => 30789,
- 14697 => 24402, 14698 => 40863, 14699 => 38394, 14700 => 36712, 14701 => 39740,
- 14702 => 35809, 14703 => 30328, 14704 => 26690, 14705 => 26588, 14706 => 36330,
- 14707 => 36149, 14708 => 21053, 14709 => 36746, 14710 => 28378, 14711 => 26829,
- 14712 => 38149, 14713 => 37101, 14714 => 22269, 14715 => 26524, 14716 => 35065,
- 14717 => 36807, 14718 => 21704, 14881 => 39608, 14882 => 23401, 14883 => 28023,
- 14884 => 27686, 14885 => 20133, 14886 => 23475, 14887 => 39559, 14888 => 37219,
- 14889 => 25000, 14890 => 37039, 14891 => 38889, 14892 => 21547, 14893 => 28085,
- 14894 => 23506, 14895 => 20989, 14896 => 21898, 14897 => 32597, 14898 => 32752,
- 14899 => 25788, 14900 => 25421, 14901 => 26097, 14902 => 25022, 14903 => 24717,
- 14904 => 28938, 14905 => 27735, 14906 => 27721, 14907 => 22831, 14908 => 26477,
- 14909 => 33322, 14910 => 22741, 14911 => 22158, 14912 => 35946, 14913 => 27627,
- 14914 => 37085, 14915 => 22909, 14916 => 32791, 14917 => 21495, 14918 => 28009,
- 14919 => 21621, 14920 => 21917, 14921 => 33655, 14922 => 33743, 14923 => 26680,
- 14924 => 31166, 14925 => 21644, 14926 => 20309, 14927 => 21512, 14928 => 30418,
- 14929 => 35977, 14930 => 38402, 14931 => 27827, 14932 => 28088, 14933 => 36203,
- 14934 => 35088, 14935 => 40548, 14936 => 36154, 14937 => 22079, 14938 => 40657,
- 14939 => 30165, 14940 => 24456, 14941 => 29408, 14942 => 24680, 14943 => 21756,
- 14944 => 20136, 14945 => 27178, 14946 => 34913, 14947 => 24658, 14948 => 36720,
- 14949 => 21700, 14950 => 28888, 14951 => 34425, 14952 => 40511, 14953 => 27946,
- 14954 => 23439, 14955 => 24344, 14956 => 32418, 14957 => 21897, 14958 => 20399,
- 14959 => 29492, 14960 => 21564, 14961 => 21402, 14962 => 20505, 14963 => 21518,
- 14964 => 21628, 14965 => 20046, 14966 => 24573, 14967 => 29786, 14968 => 22774,
- 14969 => 33899, 14970 => 32993, 14971 => 34676, 14972 => 29392, 14973 => 31946,
- 14974 => 28246, 15137 => 24359, 15138 => 34382, 15139 => 21804, 15140 => 25252,
- 15141 => 20114, 15142 => 27818, 15143 => 25143, 15144 => 33457, 15145 => 21719,
- 15146 => 21326, 15147 => 29502, 15148 => 28369, 15149 => 30011, 15150 => 21010,
- 15151 => 21270, 15152 => 35805, 15153 => 27088, 15154 => 24458, 15155 => 24576,
- 15156 => 28142, 15157 => 22351, 15158 => 27426, 15159 => 29615, 15160 => 26707,
- 15161 => 36824, 15162 => 32531, 15163 => 25442, 15164 => 24739, 15165 => 21796,
- 15166 => 30186, 15167 => 35938, 15168 => 28949, 15169 => 28067, 15170 => 23462,
- 15171 => 24187, 15172 => 33618, 15173 => 24908, 15174 => 40644, 15175 => 30970,
- 15176 => 34647, 15177 => 31783, 15178 => 30343, 15179 => 20976, 15180 => 24822,
- 15181 => 29004, 15182 => 26179, 15183 => 24140, 15184 => 24653, 15185 => 35854,
- 15186 => 28784, 15187 => 25381, 15188 => 36745, 15189 => 24509, 15190 => 24674,
- 15191 => 34516, 15192 => 22238, 15193 => 27585, 15194 => 24724, 15195 => 24935,
- 15196 => 21321, 15197 => 24800, 15198 => 26214, 15199 => 36159, 15200 => 31229,
- 15201 => 20250, 15202 => 28905, 15203 => 27719, 15204 => 35763, 15205 => 35826,
- 15206 => 32472, 15207 => 33636, 15208 => 26127, 15209 => 23130, 15210 => 39746,
- 15211 => 27985, 15212 => 28151, 15213 => 35905, 15214 => 27963, 15215 => 20249,
- 15216 => 28779, 15217 => 33719, 15218 => 25110, 15219 => 24785, 15220 => 38669,
- 15221 => 36135, 15222 => 31096, 15223 => 20987, 15224 => 22334, 15225 => 22522,
- 15226 => 26426, 15227 => 30072, 15228 => 31293, 15229 => 31215, 15230 => 31637,
- 15393 => 32908, 15394 => 39269, 15395 => 36857, 15396 => 28608, 15397 => 35749,
- 15398 => 40481, 15399 => 23020, 15400 => 32489, 15401 => 32521, 15402 => 21513,
- 15403 => 26497, 15404 => 26840, 15405 => 36753, 15406 => 31821, 15407 => 38598,
- 15408 => 21450, 15409 => 24613, 15410 => 30142, 15411 => 27762, 15412 => 21363,
- 15413 => 23241, 15414 => 32423, 15415 => 25380, 15416 => 20960, 15417 => 33034,
- 15418 => 24049, 15419 => 34015, 15420 => 25216, 15421 => 20864, 15422 => 23395,
- 15423 => 20238, 15424 => 31085, 15425 => 21058, 15426 => 24760, 15427 => 27982,
- 15428 => 23492, 15429 => 23490, 15430 => 35745, 15431 => 35760, 15432 => 26082,
- 15433 => 24524, 15434 => 38469, 15435 => 22931, 15436 => 32487, 15437 => 32426,
- 15438 => 22025, 15439 => 26551, 15440 => 22841, 15441 => 20339, 15442 => 23478,
- 15443 => 21152, 15444 => 33626, 15445 => 39050, 15446 => 36158, 15447 => 30002,
- 15448 => 38078, 15449 => 20551, 15450 => 31292, 15451 => 20215, 15452 => 26550,
- 15453 => 39550, 15454 => 23233, 15455 => 27516, 15456 => 30417, 15457 => 22362,
- 15458 => 23574, 15459 => 31546, 15460 => 38388, 15461 => 29006, 15462 => 20860,
- 15463 => 32937, 15464 => 33392, 15465 => 22904, 15466 => 32516, 15467 => 33575,
- 15468 => 26816, 15469 => 26604, 15470 => 30897, 15471 => 30839, 15472 => 25315,
- 15473 => 25441, 15474 => 31616, 15475 => 20461, 15476 => 21098, 15477 => 20943,
- 15478 => 33616, 15479 => 27099, 15480 => 37492, 15481 => 36341, 15482 => 36145,
- 15483 => 35265, 15484 => 38190, 15485 => 31661, 15486 => 20214, 15649 => 20581,
- 15650 => 33328, 15651 => 21073, 15652 => 39279, 15653 => 28176, 15654 => 28293,
- 15655 => 28071, 15656 => 24314, 15657 => 20725, 15658 => 23004, 15659 => 23558,
- 15660 => 27974, 15661 => 27743, 15662 => 30086, 15663 => 33931, 15664 => 26728,
- 15665 => 22870, 15666 => 35762, 15667 => 21280, 15668 => 37233, 15669 => 38477,
- 15670 => 34121, 15671 => 26898, 15672 => 30977, 15673 => 28966, 15674 => 33014,
- 15675 => 20132, 15676 => 37066, 15677 => 27975, 15678 => 39556, 15679 => 23047,
- 15680 => 22204, 15681 => 25605, 15682 => 38128, 15683 => 30699, 15684 => 20389,
- 15685 => 33050, 15686 => 29409, 15687 => 35282, 15688 => 39290, 15689 => 32564,
- 15690 => 32478, 15691 => 21119, 15692 => 25945, 15693 => 37237, 15694 => 36735,
- 15695 => 36739, 15696 => 21483, 15697 => 31382, 15698 => 25581, 15699 => 25509,
- 15700 => 30342, 15701 => 31224, 15702 => 34903, 15703 => 38454, 15704 => 25130,
- 15705 => 21163, 15706 => 33410, 15707 => 26708, 15708 => 26480, 15709 => 25463,
- 15710 => 30571, 15711 => 31469, 15712 => 27905, 15713 => 32467, 15714 => 35299,
- 15715 => 22992, 15716 => 25106, 15717 => 34249, 15718 => 33445, 15719 => 30028,
- 15720 => 20511, 15721 => 20171, 15722 => 30117, 15723 => 35819, 15724 => 23626,
- 15725 => 24062, 15726 => 31563, 15727 => 26020, 15728 => 37329, 15729 => 20170,
- 15730 => 27941, 15731 => 35167, 15732 => 32039, 15733 => 38182, 15734 => 20165,
- 15735 => 35880, 15736 => 36827, 15737 => 38771, 15738 => 26187, 15739 => 31105,
- 15740 => 36817, 15741 => 28908, 15742 => 28024, 15905 => 23613, 15906 => 21170,
- 15907 => 33606, 15908 => 20834, 15909 => 33550, 15910 => 30555, 15911 => 26230,
- 15912 => 40120, 15913 => 20140, 15914 => 24778, 15915 => 31934, 15916 => 31923,
- 15917 => 32463, 15918 => 20117, 15919 => 35686, 15920 => 26223, 15921 => 39048,
- 15922 => 38745, 15923 => 22659, 15924 => 25964, 15925 => 38236, 15926 => 24452,
- 15927 => 30153, 15928 => 38742, 15929 => 31455, 15930 => 31454, 15931 => 20928,
- 15932 => 28847, 15933 => 31384, 15934 => 25578, 15935 => 31350, 15936 => 32416,
- 15937 => 29590, 15938 => 38893, 15939 => 20037, 15940 => 28792, 15941 => 20061,
- 15942 => 37202, 15943 => 21417, 15944 => 25937, 15945 => 26087, 15946 => 33276,
- 15947 => 33285, 15948 => 21646, 15949 => 23601, 15950 => 30106, 15951 => 38816,
- 15952 => 25304, 15953 => 29401, 15954 => 30141, 15955 => 23621, 15956 => 39545,
- 15957 => 33738, 15958 => 23616, 15959 => 21632, 15960 => 30697, 15961 => 20030,
- 15962 => 27822, 15963 => 32858, 15964 => 25298, 15965 => 25454, 15966 => 24040,
- 15967 => 20855, 15968 => 36317, 15969 => 36382, 15970 => 38191, 15971 => 20465,
- 15972 => 21477, 15973 => 24807, 15974 => 28844, 15975 => 21095, 15976 => 25424,
- 15977 => 40515, 15978 => 23071, 15979 => 20518, 15980 => 30519, 15981 => 21367,
- 15982 => 32482, 15983 => 25733, 15984 => 25899, 15985 => 25225, 15986 => 25496,
- 15987 => 20500, 15988 => 29237, 15989 => 35273, 15990 => 20915, 15991 => 35776,
- 15992 => 32477, 15993 => 22343, 15994 => 33740, 15995 => 38055, 15996 => 20891,
- 15997 => 21531, 15998 => 23803, 16161 => 20426, 16162 => 31459, 16163 => 27994,
- 16164 => 37089, 16165 => 39567, 16166 => 21888, 16167 => 21654, 16168 => 21345,
- 16169 => 21679, 16170 => 24320, 16171 => 25577, 16172 => 26999, 16173 => 20975,
- 16174 => 24936, 16175 => 21002, 16176 => 22570, 16177 => 21208, 16178 => 22350,
- 16179 => 30733, 16180 => 30475, 16181 => 24247, 16182 => 24951, 16183 => 31968,
- 16184 => 25179, 16185 => 25239, 16186 => 20130, 16187 => 28821, 16188 => 32771,
- 16189 => 25335, 16190 => 28900, 16191 => 38752, 16192 => 22391, 16193 => 33499,
- 16194 => 26607, 16195 => 26869, 16196 => 30933, 16197 => 39063, 16198 => 31185,
- 16199 => 22771, 16200 => 21683, 16201 => 21487, 16202 => 28212, 16203 => 20811,
- 16204 => 21051, 16205 => 23458, 16206 => 35838, 16207 => 32943, 16208 => 21827,
- 16209 => 22438, 16210 => 24691, 16211 => 22353, 16212 => 21549, 16213 => 31354,
- 16214 => 24656, 16215 => 23380, 16216 => 25511, 16217 => 25248, 16218 => 21475,
- 16219 => 25187, 16220 => 23495, 16221 => 26543, 16222 => 21741, 16223 => 31391,
- 16224 => 33510, 16225 => 37239, 16226 => 24211, 16227 => 35044, 16228 => 22840,
- 16229 => 22446, 16230 => 25358, 16231 => 36328, 16232 => 33007, 16233 => 22359,
- 16234 => 31607, 16235 => 20393, 16236 => 24555, 16237 => 23485, 16238 => 27454,
- 16239 => 21281, 16240 => 31568, 16241 => 29378, 16242 => 26694, 16243 => 30719,
- 16244 => 30518, 16245 => 26103, 16246 => 20917, 16247 => 20111, 16248 => 30420,
- 16249 => 23743, 16250 => 31397, 16251 => 33909, 16252 => 22862, 16253 => 39745,
- 16254 => 20608, 16417 => 39304, 16418 => 24871, 16419 => 28291, 16420 => 22372,
- 16421 => 26118, 16422 => 25414, 16423 => 22256, 16424 => 25324, 16425 => 25193,
- 16426 => 24275, 16427 => 38420, 16428 => 22403, 16429 => 25289, 16430 => 21895,
- 16431 => 34593, 16432 => 33098, 16433 => 36771, 16434 => 21862, 16435 => 33713,
- 16436 => 26469, 16437 => 36182, 16438 => 34013, 16439 => 23146, 16440 => 26639,
- 16441 => 25318, 16442 => 31726, 16443 => 38417, 16444 => 20848, 16445 => 28572,
- 16446 => 35888, 16447 => 25597, 16448 => 35272, 16449 => 25042, 16450 => 32518,
- 16451 => 28866, 16452 => 28389, 16453 => 29701, 16454 => 27028, 16455 => 29436,
- 16456 => 24266, 16457 => 37070, 16458 => 26391, 16459 => 28010, 16460 => 25438,
- 16461 => 21171, 16462 => 29282, 16463 => 32769, 16464 => 20332, 16465 => 23013,
- 16466 => 37226, 16467 => 28889, 16468 => 28061, 16469 => 21202, 16470 => 20048,
- 16471 => 38647, 16472 => 38253, 16473 => 34174, 16474 => 30922, 16475 => 32047,
- 16476 => 20769, 16477 => 22418, 16478 => 25794, 16479 => 32907, 16480 => 31867,
- 16481 => 27882, 16482 => 26865, 16483 => 26974, 16484 => 20919, 16485 => 21400,
- 16486 => 26792, 16487 => 29313, 16488 => 40654, 16489 => 31729, 16490 => 29432,
- 16491 => 31163, 16492 => 28435, 16493 => 29702, 16494 => 26446, 16495 => 37324,
- 16496 => 40100, 16497 => 31036, 16498 => 33673, 16499 => 33620, 16500 => 21519,
- 16501 => 26647, 16502 => 20029, 16503 => 21385, 16504 => 21169, 16505 => 30782,
- 16506 => 21382, 16507 => 21033, 16508 => 20616, 16509 => 20363, 16510 => 20432,
- 16673 => 30178, 16674 => 31435, 16675 => 31890, 16676 => 27813, 16677 => 38582,
- 16678 => 21147, 16679 => 29827, 16680 => 21737, 16681 => 20457, 16682 => 32852,
- 16683 => 33714, 16684 => 36830, 16685 => 38256, 16686 => 24265, 16687 => 24604,
- 16688 => 28063, 16689 => 24088, 16690 => 25947, 16691 => 33080, 16692 => 38142,
- 16693 => 24651, 16694 => 28860, 16695 => 32451, 16696 => 31918, 16697 => 20937,
- 16698 => 26753, 16699 => 31921, 16700 => 33391, 16701 => 20004, 16702 => 36742,
- 16703 => 37327, 16704 => 26238, 16705 => 20142, 16706 => 35845, 16707 => 25769,
- 16708 => 32842, 16709 => 20698, 16710 => 30103, 16711 => 29134, 16712 => 23525,
- 16713 => 36797, 16714 => 28518, 16715 => 20102, 16716 => 25730, 16717 => 38243,
- 16718 => 24278, 16719 => 26009, 16720 => 21015, 16721 => 35010, 16722 => 28872,
- 16723 => 21155, 16724 => 29454, 16725 => 29747, 16726 => 26519, 16727 => 30967,
- 16728 => 38678, 16729 => 20020, 16730 => 37051, 16731 => 40158, 16732 => 28107,
- 16733 => 20955, 16734 => 36161, 16735 => 21533, 16736 => 25294, 16737 => 29618,
- 16738 => 33777, 16739 => 38646, 16740 => 40836, 16741 => 38083, 16742 => 20278,
- 16743 => 32666, 16744 => 20940, 16745 => 28789, 16746 => 38517, 16747 => 23725,
- 16748 => 39046, 16749 => 21478, 16750 => 20196, 16751 => 28316, 16752 => 29705,
- 16753 => 27060, 16754 => 30827, 16755 => 39311, 16756 => 30041, 16757 => 21016,
- 16758 => 30244, 16759 => 27969, 16760 => 26611, 16761 => 20845, 16762 => 40857,
- 16763 => 32843, 16764 => 21657, 16765 => 31548, 16766 => 31423, 16929 => 38534,
- 16930 => 22404, 16931 => 25314, 16932 => 38471, 16933 => 27004, 16934 => 23044,
- 16935 => 25602, 16936 => 31699, 16937 => 28431, 16938 => 38475, 16939 => 33446,
- 16940 => 21346, 16941 => 39045, 16942 => 24208, 16943 => 28809, 16944 => 25523,
- 16945 => 21348, 16946 => 34383, 16947 => 40065, 16948 => 40595, 16949 => 30860,
- 16950 => 38706, 16951 => 36335, 16952 => 36162, 16953 => 40575, 16954 => 28510,
- 16955 => 31108, 16956 => 24405, 16957 => 38470, 16958 => 25134, 16959 => 39540,
- 16960 => 21525, 16961 => 38109, 16962 => 20387, 16963 => 26053, 16964 => 23653,
- 16965 => 23649, 16966 => 32533, 16967 => 34385, 16968 => 27695, 16969 => 24459,
- 16970 => 29575, 16971 => 28388, 16972 => 32511, 16973 => 23782, 16974 => 25371,
- 16975 => 23402, 16976 => 28390, 16977 => 21365, 16978 => 20081, 16979 => 25504,
- 16980 => 30053, 16981 => 25249, 16982 => 36718, 16983 => 20262, 16984 => 20177,
- 16985 => 27814, 16986 => 32438, 16987 => 35770, 16988 => 33821, 16989 => 34746,
- 16990 => 32599, 16991 => 36923, 16992 => 38179, 16993 => 31657, 16994 => 39585,
- 16995 => 35064, 16996 => 33853, 16997 => 27931, 16998 => 39558, 16999 => 32476,
- 17000 => 22920, 17001 => 40635, 17002 => 29595, 17003 => 30721, 17004 => 34434,
- 17005 => 39532, 17006 => 39554, 17007 => 22043, 17008 => 21527, 17009 => 22475,
- 17010 => 20080, 17011 => 40614, 17012 => 21334, 17013 => 36808, 17014 => 33033,
- 17015 => 30610, 17016 => 39314, 17017 => 34542, 17018 => 28385, 17019 => 34067,
- 17020 => 26364, 17021 => 24930, 17022 => 28459, 17185 => 35881, 17186 => 33426,
- 17187 => 33579, 17188 => 30450, 17189 => 27667, 17190 => 24537, 17191 => 33725,
- 17192 => 29483, 17193 => 33541, 17194 => 38170, 17195 => 27611, 17196 => 30683,
- 17197 => 38086, 17198 => 21359, 17199 => 33538, 17200 => 20882, 17201 => 24125,
- 17202 => 35980, 17203 => 36152, 17204 => 20040, 17205 => 29611, 17206 => 26522,
- 17207 => 26757, 17208 => 37238, 17209 => 38665, 17210 => 29028, 17211 => 27809,
- 17212 => 30473, 17213 => 23186, 17214 => 38209, 17215 => 27599, 17216 => 32654,
- 17217 => 26151, 17218 => 23504, 17219 => 22969, 17220 => 23194, 17221 => 38376,
- 17222 => 38391, 17223 => 20204, 17224 => 33804, 17225 => 33945, 17226 => 27308,
- 17227 => 30431, 17228 => 38192, 17229 => 29467, 17230 => 26790, 17231 => 23391,
- 17232 => 30511, 17233 => 37274, 17234 => 38753, 17235 => 31964, 17236 => 36855,
- 17237 => 35868, 17238 => 24357, 17239 => 31859, 17240 => 31192, 17241 => 35269,
- 17242 => 27852, 17243 => 34588, 17244 => 23494, 17245 => 24130, 17246 => 26825,
- 17247 => 30496, 17248 => 32501, 17249 => 20885, 17250 => 20813, 17251 => 21193,
- 17252 => 23081, 17253 => 32517, 17254 => 38754, 17255 => 33495, 17256 => 25551,
- 17257 => 30596, 17258 => 34256, 17259 => 31186, 17260 => 28218, 17261 => 24217,
- 17262 => 22937, 17263 => 34065, 17264 => 28781, 17265 => 27665, 17266 => 25279,
- 17267 => 30399, 17268 => 25935, 17269 => 24751, 17270 => 38397, 17271 => 26126,
- 17272 => 34719, 17273 => 40483, 17274 => 38125, 17275 => 21517, 17276 => 21629,
- 17277 => 35884, 17278 => 25720, 17441 => 25721, 17442 => 34321, 17443 => 27169,
- 17444 => 33180, 17445 => 30952, 17446 => 25705, 17447 => 39764, 17448 => 25273,
- 17449 => 26411, 17450 => 33707, 17451 => 22696, 17452 => 40664, 17453 => 27819,
- 17454 => 28448, 17455 => 23518, 17456 => 38476, 17457 => 35851, 17458 => 29279,
- 17459 => 26576, 17460 => 25287, 17461 => 29281, 17462 => 20137, 17463 => 22982,
- 17464 => 27597, 17465 => 22675, 17466 => 26286, 17467 => 24149, 17468 => 21215,
- 17469 => 24917, 17470 => 26408, 17471 => 30446, 17472 => 30566, 17473 => 29287,
- 17474 => 31302, 17475 => 25343, 17476 => 21738, 17477 => 21584, 17478 => 38048,
- 17479 => 37027, 17480 => 23068, 17481 => 32435, 17482 => 27670, 17483 => 20035,
- 17484 => 22902, 17485 => 32784, 17486 => 22856, 17487 => 21335, 17488 => 30007,
- 17489 => 38590, 17490 => 22218, 17491 => 25376, 17492 => 33041, 17493 => 24700,
- 17494 => 38393, 17495 => 28118, 17496 => 21602, 17497 => 39297, 17498 => 20869,
- 17499 => 23273, 17500 => 33021, 17501 => 22958, 17502 => 38675, 17503 => 20522,
- 17504 => 27877, 17505 => 23612, 17506 => 25311, 17507 => 20320, 17508 => 21311,
- 17509 => 33147, 17510 => 36870, 17511 => 28346, 17512 => 34091, 17513 => 25288,
- 17514 => 24180, 17515 => 30910, 17516 => 25781, 17517 => 25467, 17518 => 24565,
- 17519 => 23064, 17520 => 37247, 17521 => 40479, 17522 => 23615, 17523 => 25423,
- 17524 => 32834, 17525 => 23421, 17526 => 21870, 17527 => 38218, 17528 => 38221,
- 17529 => 28037, 17530 => 24744, 17531 => 26592, 17532 => 29406, 17533 => 20957,
- 17534 => 23425, 17697 => 25319, 17698 => 27870, 17699 => 29275, 17700 => 25197,
- 17701 => 38062, 17702 => 32445, 17703 => 33043, 17704 => 27987, 17705 => 20892,
- 17706 => 24324, 17707 => 22900, 17708 => 21162, 17709 => 24594, 17710 => 22899,
- 17711 => 26262, 17712 => 34384, 17713 => 30111, 17714 => 25386, 17715 => 25062,
- 17716 => 31983, 17717 => 35834, 17718 => 21734, 17719 => 27431, 17720 => 40485,
- 17721 => 27572, 17722 => 34261, 17723 => 21589, 17724 => 20598, 17725 => 27812,
- 17726 => 21866, 17727 => 36276, 17728 => 29228, 17729 => 24085, 17730 => 24597,
- 17731 => 29750, 17732 => 25293, 17733 => 25490, 17734 => 29260, 17735 => 24472,
- 17736 => 28227, 17737 => 27966, 17738 => 25856, 17739 => 28504, 17740 => 30424,
- 17741 => 30928, 17742 => 30460, 17743 => 30036, 17744 => 21028, 17745 => 21467,
- 17746 => 20051, 17747 => 24222, 17748 => 26049, 17749 => 32810, 17750 => 32982,
- 17751 => 25243, 17752 => 21638, 17753 => 21032, 17754 => 28846, 17755 => 34957,
- 17756 => 36305, 17757 => 27873, 17758 => 21624, 17759 => 32986, 17760 => 22521,
- 17761 => 35060, 17762 => 36180, 17763 => 38506, 17764 => 37197, 17765 => 20329,
- 17766 => 27803, 17767 => 21943, 17768 => 30406, 17769 => 30768, 17770 => 25256,
- 17771 => 28921, 17772 => 28558, 17773 => 24429, 17774 => 34028, 17775 => 26842,
- 17776 => 30844, 17777 => 31735, 17778 => 33192, 17779 => 26379, 17780 => 40527,
- 17781 => 25447, 17782 => 30896, 17783 => 22383, 17784 => 30738, 17785 => 38713,
- 17786 => 25209, 17787 => 25259, 17788 => 21128, 17789 => 29749, 17790 => 27607,
- 17953 => 21860, 17954 => 33086, 17955 => 30130, 17956 => 30382, 17957 => 21305,
- 17958 => 30174, 17959 => 20731, 17960 => 23617, 17961 => 35692, 17962 => 31687,
- 17963 => 20559, 17964 => 29255, 17965 => 39575, 17966 => 39128, 17967 => 28418,
- 17968 => 29922, 17969 => 31080, 17970 => 25735, 17971 => 30629, 17972 => 25340,
- 17973 => 39057, 17974 => 36139, 17975 => 21697, 17976 => 32856, 17977 => 20050,
- 17978 => 22378, 17979 => 33529, 17980 => 33805, 17981 => 24179, 17982 => 20973,
- 17983 => 29942, 17984 => 35780, 17985 => 23631, 17986 => 22369, 17987 => 27900,
- 17988 => 39047, 17989 => 23110, 17990 => 30772, 17991 => 39748, 17992 => 36843,
- 17993 => 31893, 17994 => 21078, 17995 => 25169, 17996 => 38138, 17997 => 20166,
- 17998 => 33670, 17999 => 33889, 18000 => 33769, 18001 => 33970, 18002 => 22484,
- 18003 => 26420, 18004 => 22275, 18005 => 26222, 18006 => 28006, 18007 => 35889,
- 18008 => 26333, 18009 => 28689, 18010 => 26399, 18011 => 27450, 18012 => 26646,
- 18013 => 25114, 18014 => 22971, 18015 => 19971, 18016 => 20932, 18017 => 28422,
- 18018 => 26578, 18019 => 27791, 18020 => 20854, 18021 => 26827, 18022 => 22855,
- 18023 => 27495, 18024 => 30054, 18025 => 23822, 18026 => 33040, 18027 => 40784,
- 18028 => 26071, 18029 => 31048, 18030 => 31041, 18031 => 39569, 18032 => 36215,
- 18033 => 23682, 18034 => 20062, 18035 => 20225, 18036 => 21551, 18037 => 22865,
- 18038 => 30732, 18039 => 22120, 18040 => 27668, 18041 => 36804, 18042 => 24323,
- 18043 => 27773, 18044 => 27875, 18045 => 35755, 18046 => 25488, 18209 => 24688,
- 18210 => 27965, 18211 => 29301, 18212 => 25190, 18213 => 38030, 18214 => 38085,
- 18215 => 21315, 18216 => 36801, 18217 => 31614, 18218 => 20191, 18219 => 35878,
- 18220 => 20094, 18221 => 40660, 18222 => 38065, 18223 => 38067, 18224 => 21069,
- 18225 => 28508, 18226 => 36963, 18227 => 27973, 18228 => 35892, 18229 => 22545,
- 18230 => 23884, 18231 => 27424, 18232 => 27465, 18233 => 26538, 18234 => 21595,
- 18235 => 33108, 18236 => 32652, 18237 => 22681, 18238 => 34103, 18239 => 24378,
- 18240 => 25250, 18241 => 27207, 18242 => 38201, 18243 => 25970, 18244 => 24708,
- 18245 => 26725, 18246 => 30631, 18247 => 20052, 18248 => 20392, 18249 => 24039,
- 18250 => 38808, 18251 => 25772, 18252 => 32728, 18253 => 23789, 18254 => 20431,
- 18255 => 31373, 18256 => 20999, 18257 => 33540, 18258 => 19988, 18259 => 24623,
- 18260 => 31363, 18261 => 38054, 18262 => 20405, 18263 => 20146, 18264 => 31206,
- 18265 => 29748, 18266 => 21220, 18267 => 33465, 18268 => 25810, 18269 => 31165,
- 18270 => 23517, 18271 => 27777, 18272 => 38738, 18273 => 36731, 18274 => 27682,
- 18275 => 20542, 18276 => 21375, 18277 => 28165, 18278 => 25806, 18279 => 26228,
- 18280 => 27696, 18281 => 24773, 18282 => 39031, 18283 => 35831, 18284 => 24198,
- 18285 => 29756, 18286 => 31351, 18287 => 31179, 18288 => 19992, 18289 => 37041,
- 18290 => 29699, 18291 => 27714, 18292 => 22234, 18293 => 37195, 18294 => 27845,
- 18295 => 36235, 18296 => 21306, 18297 => 34502, 18298 => 26354, 18299 => 36527,
- 18300 => 23624, 18301 => 39537, 18302 => 28192, 18465 => 21462, 18466 => 23094,
- 18467 => 40843, 18468 => 36259, 18469 => 21435, 18470 => 22280, 18471 => 39079,
- 18472 => 26435, 18473 => 37275, 18474 => 27849, 18475 => 20840, 18476 => 30154,
- 18477 => 25331, 18478 => 29356, 18479 => 21048, 18480 => 21149, 18481 => 32570,
- 18482 => 28820, 18483 => 30264, 18484 => 21364, 18485 => 40522, 18486 => 27063,
- 18487 => 30830, 18488 => 38592, 18489 => 35033, 18490 => 32676, 18491 => 28982,
- 18492 => 29123, 18493 => 20873, 18494 => 26579, 18495 => 29924, 18496 => 22756,
- 18497 => 25880, 18498 => 22199, 18499 => 35753, 18500 => 39286, 18501 => 25200,
- 18502 => 32469, 18503 => 24825, 18504 => 28909, 18505 => 22764, 18506 => 20161,
- 18507 => 20154, 18508 => 24525, 18509 => 38887, 18510 => 20219, 18511 => 35748,
- 18512 => 20995, 18513 => 22922, 18514 => 32427, 18515 => 25172, 18516 => 20173,
- 18517 => 26085, 18518 => 25102, 18519 => 33592, 18520 => 33993, 18521 => 33635,
- 18522 => 34701, 18523 => 29076, 18524 => 28342, 18525 => 23481, 18526 => 32466,
- 18527 => 20887, 18528 => 25545, 18529 => 26580, 18530 => 32905, 18531 => 33593,
- 18532 => 34837, 18533 => 20754, 18534 => 23418, 18535 => 22914, 18536 => 36785,
- 18537 => 20083, 18538 => 27741, 18539 => 20837, 18540 => 35109, 18541 => 36719,
- 18542 => 38446, 18543 => 34122, 18544 => 29790, 18545 => 38160, 18546 => 38384,
- 18547 => 28070, 18548 => 33509, 18549 => 24369, 18550 => 25746, 18551 => 27922,
- 18552 => 33832, 18553 => 33134, 18554 => 40131, 18555 => 22622, 18556 => 36187,
- 18557 => 19977, 18558 => 21441, 18721 => 20254, 18722 => 25955, 18723 => 26705,
- 18724 => 21971, 18725 => 20007, 18726 => 25620, 18727 => 39578, 18728 => 25195,
- 18729 => 23234, 18730 => 29791, 18731 => 33394, 18732 => 28073, 18733 => 26862,
- 18734 => 20711, 18735 => 33678, 18736 => 30722, 18737 => 26432, 18738 => 21049,
- 18739 => 27801, 18740 => 32433, 18741 => 20667, 18742 => 21861, 18743 => 29022,
- 18744 => 31579, 18745 => 26194, 18746 => 29642, 18747 => 33515, 18748 => 26441,
- 18749 => 23665, 18750 => 21024, 18751 => 29053, 18752 => 34923, 18753 => 38378,
- 18754 => 38485, 18755 => 25797, 18756 => 36193, 18757 => 33203, 18758 => 21892,
- 18759 => 27733, 18760 => 25159, 18761 => 32558, 18762 => 22674, 18763 => 20260,
- 18764 => 21830, 18765 => 36175, 18766 => 26188, 18767 => 19978, 18768 => 23578,
- 18769 => 35059, 18770 => 26786, 18771 => 25422, 18772 => 31245, 18773 => 28903,
- 18774 => 33421, 18775 => 21242, 18776 => 38902, 18777 => 23569, 18778 => 21736,
- 18779 => 37045, 18780 => 32461, 18781 => 22882, 18782 => 36170, 18783 => 34503,
- 18784 => 33292, 18785 => 33293, 18786 => 36198, 18787 => 25668, 18788 => 23556,
- 18789 => 24913, 18790 => 28041, 18791 => 31038, 18792 => 35774, 18793 => 30775,
- 18794 => 30003, 18795 => 21627, 18796 => 20280, 18797 => 36523, 18798 => 28145,
- 18799 => 23072, 18800 => 32453, 18801 => 31070, 18802 => 27784, 18803 => 23457,
- 18804 => 23158, 18805 => 29978, 18806 => 32958, 18807 => 24910, 18808 => 28183,
- 18809 => 22768, 18810 => 29983, 18811 => 29989, 18812 => 29298, 18813 => 21319,
- 18814 => 32499, 18977 => 30465, 18978 => 30427, 18979 => 21097, 18980 => 32988,
- 18981 => 22307, 18982 => 24072, 18983 => 22833, 18984 => 29422, 18985 => 26045,
- 18986 => 28287, 18987 => 35799, 18988 => 23608, 18989 => 34417, 18990 => 21313,
- 18991 => 30707, 18992 => 25342, 18993 => 26102, 18994 => 20160, 18995 => 39135,
- 18996 => 34432, 18997 => 23454, 18998 => 35782, 18999 => 21490, 19000 => 30690,
- 19001 => 20351, 19002 => 23630, 19003 => 39542, 19004 => 22987, 19005 => 24335,
- 19006 => 31034, 19007 => 22763, 19008 => 19990, 19009 => 26623, 19010 => 20107,
- 19011 => 25325, 19012 => 35475, 19013 => 36893, 19014 => 21183, 19015 => 26159,
- 19016 => 21980, 19017 => 22124, 19018 => 36866, 19019 => 20181, 19020 => 20365,
- 19021 => 37322, 19022 => 39280, 19023 => 27663, 19024 => 24066, 19025 => 24643,
- 19026 => 23460, 19027 => 35270, 19028 => 35797, 19029 => 25910, 19030 => 25163,
- 19031 => 39318, 19032 => 23432, 19033 => 23551, 19034 => 25480, 19035 => 21806,
- 19036 => 21463, 19037 => 30246, 19038 => 20861, 19039 => 34092, 19040 => 26530,
- 19041 => 26803, 19042 => 27530, 19043 => 25234, 19044 => 36755, 19045 => 21460,
- 19046 => 33298, 19047 => 28113, 19048 => 30095, 19049 => 20070, 19050 => 36174,
- 19051 => 23408, 19052 => 29087, 19053 => 34223, 19054 => 26257, 19055 => 26329,
- 19056 => 32626, 19057 => 34560, 19058 => 40653, 19059 => 40736, 19060 => 23646,
- 19061 => 26415, 19062 => 36848, 19063 => 26641, 19064 => 26463, 19065 => 25101,
- 19066 => 31446, 19067 => 22661, 19068 => 24246, 19069 => 25968, 19070 => 28465,
- 19233 => 24661, 19234 => 21047, 19235 => 32781, 19236 => 25684, 19237 => 34928,
- 19238 => 29993, 19239 => 24069, 19240 => 26643, 19241 => 25332, 19242 => 38684,
- 19243 => 21452, 19244 => 29245, 19245 => 35841, 19246 => 27700, 19247 => 30561,
- 19248 => 31246, 19249 => 21550, 19250 => 30636, 19251 => 39034, 19252 => 33308,
- 19253 => 35828, 19254 => 30805, 19255 => 26388, 19256 => 28865, 19257 => 26031,
- 19258 => 25749, 19259 => 22070, 19260 => 24605, 19261 => 31169, 19262 => 21496,
- 19263 => 19997, 19264 => 27515, 19265 => 32902, 19266 => 23546, 19267 => 21987,
- 19268 => 22235, 19269 => 20282, 19270 => 20284, 19271 => 39282, 19272 => 24051,
- 19273 => 26494, 19274 => 32824, 19275 => 24578, 19276 => 39042, 19277 => 36865,
- 19278 => 23435, 19279 => 35772, 19280 => 35829, 19281 => 25628, 19282 => 33368,
- 19283 => 25822, 19284 => 22013, 19285 => 33487, 19286 => 37221, 19287 => 20439,
- 19288 => 32032, 19289 => 36895, 19290 => 31903, 19291 => 20723, 19292 => 22609,
- 19293 => 28335, 19294 => 23487, 19295 => 35785, 19296 => 32899, 19297 => 37240,
- 19298 => 33948, 19299 => 31639, 19300 => 34429, 19301 => 38539, 19302 => 38543,
- 19303 => 32485, 19304 => 39635, 19305 => 30862, 19306 => 23681, 19307 => 31319,
- 19308 => 36930, 19309 => 38567, 19310 => 31071, 19311 => 23385, 19312 => 25439,
- 19313 => 31499, 19314 => 34001, 19315 => 26797, 19316 => 21766, 19317 => 32553,
- 19318 => 29712, 19319 => 32034, 19320 => 38145, 19321 => 25152, 19322 => 22604,
- 19323 => 20182, 19324 => 23427, 19325 => 22905, 19326 => 22612, 19489 => 29549,
- 19490 => 25374, 19491 => 36427, 19492 => 36367, 19493 => 32974, 19494 => 33492,
- 19495 => 25260, 19496 => 21488, 19497 => 27888, 19498 => 37214, 19499 => 22826,
- 19500 => 24577, 19501 => 27760, 19502 => 22349, 19503 => 25674, 19504 => 36138,
- 19505 => 30251, 19506 => 28393, 19507 => 22363, 19508 => 27264, 19509 => 30192,
- 19510 => 28525, 19511 => 35885, 19512 => 35848, 19513 => 22374, 19514 => 27631,
- 19515 => 34962, 19516 => 30899, 19517 => 25506, 19518 => 21497, 19519 => 28845,
- 19520 => 27748, 19521 => 22616, 19522 => 25642, 19523 => 22530, 19524 => 26848,
- 19525 => 33179, 19526 => 21776, 19527 => 31958, 19528 => 20504, 19529 => 36538,
- 19530 => 28108, 19531 => 36255, 19532 => 28907, 19533 => 25487, 19534 => 28059,
- 19535 => 28372, 19536 => 32486, 19537 => 33796, 19538 => 26691, 19539 => 36867,
- 19540 => 28120, 19541 => 38518, 19542 => 35752, 19543 => 22871, 19544 => 29305,
- 19545 => 34276, 19546 => 33150, 19547 => 30140, 19548 => 35466, 19549 => 26799,
- 19550 => 21076, 19551 => 36386, 19552 => 38161, 19553 => 25552, 19554 => 39064,
- 19555 => 36420, 19556 => 21884, 19557 => 20307, 19558 => 26367, 19559 => 22159,
- 19560 => 24789, 19561 => 28053, 19562 => 21059, 19563 => 23625, 19564 => 22825,
- 19565 => 28155, 19566 => 22635, 19567 => 30000, 19568 => 29980, 19569 => 24684,
- 19570 => 33300, 19571 => 33094, 19572 => 25361, 19573 => 26465, 19574 => 36834,
- 19575 => 30522, 19576 => 36339, 19577 => 36148, 19578 => 38081, 19579 => 24086,
- 19580 => 21381, 19581 => 21548, 19582 => 28867, 19745 => 27712, 19746 => 24311,
- 19747 => 20572, 19748 => 20141, 19749 => 24237, 19750 => 25402, 19751 => 33351,
- 19752 => 36890, 19753 => 26704, 19754 => 37230, 19755 => 30643, 19756 => 21516,
- 19757 => 38108, 19758 => 24420, 19759 => 31461, 19760 => 26742, 19761 => 25413,
- 19762 => 31570, 19763 => 32479, 19764 => 30171, 19765 => 20599, 19766 => 25237,
- 19767 => 22836, 19768 => 36879, 19769 => 20984, 19770 => 31171, 19771 => 31361,
- 19772 => 22270, 19773 => 24466, 19774 => 36884, 19775 => 28034, 19776 => 23648,
- 19777 => 22303, 19778 => 21520, 19779 => 20820, 19780 => 28237, 19781 => 22242,
- 19782 => 25512, 19783 => 39059, 19784 => 33151, 19785 => 34581, 19786 => 35114,
- 19787 => 36864, 19788 => 21534, 19789 => 23663, 19790 => 33216, 19791 => 25302,
- 19792 => 25176, 19793 => 33073, 19794 => 40501, 19795 => 38464, 19796 => 39534,
- 19797 => 39548, 19798 => 26925, 19799 => 22949, 19800 => 25299, 19801 => 21822,
- 19802 => 25366, 19803 => 21703, 19804 => 34521, 19805 => 27964, 19806 => 23043,
- 19807 => 29926, 19808 => 34972, 19809 => 27498, 19810 => 22806, 19811 => 35916,
- 19812 => 24367, 19813 => 28286, 19814 => 29609, 19815 => 39037, 19816 => 20024,
- 19817 => 28919, 19818 => 23436, 19819 => 30871, 19820 => 25405, 19821 => 26202,
- 19822 => 30358, 19823 => 24779, 19824 => 23451, 19825 => 23113, 19826 => 19975,
- 19827 => 33109, 19828 => 27754, 19829 => 29579, 19830 => 20129, 19831 => 26505,
- 19832 => 32593, 19833 => 24448, 19834 => 26106, 19835 => 26395, 19836 => 24536,
- 19837 => 22916, 19838 => 23041, 20001 => 24013, 20002 => 24494, 20003 => 21361,
- 20004 => 38886, 20005 => 36829, 20006 => 26693, 20007 => 22260, 20008 => 21807,
- 20009 => 24799, 20010 => 20026, 20011 => 28493, 20012 => 32500, 20013 => 33479,
- 20014 => 33806, 20015 => 22996, 20016 => 20255, 20017 => 20266, 20018 => 23614,
- 20019 => 32428, 20020 => 26410, 20021 => 34074, 20022 => 21619, 20023 => 30031,
- 20024 => 32963, 20025 => 21890, 20026 => 39759, 20027 => 20301, 20028 => 28205,
- 20029 => 35859, 20030 => 23561, 20031 => 24944, 20032 => 21355, 20033 => 30239,
- 20034 => 28201, 20035 => 34442, 20036 => 25991, 20037 => 38395, 20038 => 32441,
- 20039 => 21563, 20040 => 31283, 20041 => 32010, 20042 => 38382, 20043 => 21985,
- 20044 => 32705, 20045 => 29934, 20046 => 25373, 20047 => 34583, 20048 => 28065,
- 20049 => 31389, 20050 => 25105, 20051 => 26017, 20052 => 21351, 20053 => 25569,
- 20054 => 27779, 20055 => 24043, 20056 => 21596, 20057 => 38056, 20058 => 20044,
- 20059 => 27745, 20060 => 35820, 20061 => 23627, 20062 => 26080, 20063 => 33436,
- 20064 => 26791, 20065 => 21566, 20066 => 21556, 20067 => 27595, 20068 => 27494,
- 20069 => 20116, 20070 => 25410, 20071 => 21320, 20072 => 33310, 20073 => 20237,
- 20074 => 20398, 20075 => 22366, 20076 => 25098, 20077 => 38654, 20078 => 26212,
- 20079 => 29289, 20080 => 21247, 20081 => 21153, 20082 => 24735, 20083 => 35823,
- 20084 => 26132, 20085 => 29081, 20086 => 26512, 20087 => 35199, 20088 => 30802,
- 20089 => 30717, 20090 => 26224, 20091 => 22075, 20092 => 21560, 20093 => 38177,
- 20094 => 29306, 20257 => 31232, 20258 => 24687, 20259 => 24076, 20260 => 24713,
- 20261 => 33181, 20262 => 22805, 20263 => 24796, 20264 => 29060, 20265 => 28911,
- 20266 => 28330, 20267 => 27728, 20268 => 29312, 20269 => 27268, 20270 => 34989,
- 20271 => 24109, 20272 => 20064, 20273 => 23219, 20274 => 21916, 20275 => 38115,
- 20276 => 27927, 20277 => 31995, 20278 => 38553, 20279 => 25103, 20280 => 32454,
- 20281 => 30606, 20282 => 34430, 20283 => 21283, 20284 => 38686, 20285 => 36758,
- 20286 => 26247, 20287 => 23777, 20288 => 20384, 20289 => 29421, 20290 => 19979,
- 20291 => 21414, 20292 => 22799, 20293 => 21523, 20294 => 25472, 20295 => 38184,
- 20296 => 20808, 20297 => 20185, 20298 => 40092, 20299 => 32420, 20300 => 21688,
- 20301 => 36132, 20302 => 34900, 20303 => 33335, 20304 => 38386, 20305 => 28046,
- 20306 => 24358, 20307 => 23244, 20308 => 26174, 20309 => 38505, 20310 => 29616,
- 20311 => 29486, 20312 => 21439, 20313 => 33146, 20314 => 39301, 20315 => 32673,
- 20316 => 23466, 20317 => 38519, 20318 => 38480, 20319 => 32447, 20320 => 30456,
- 20321 => 21410, 20322 => 38262, 20323 => 39321, 20324 => 31665, 20325 => 35140,
- 20326 => 28248, 20327 => 20065, 20328 => 32724, 20329 => 31077, 20330 => 35814,
- 20331 => 24819, 20332 => 21709, 20333 => 20139, 20334 => 39033, 20335 => 24055,
- 20336 => 27233, 20337 => 20687, 20338 => 21521, 20339 => 35937, 20340 => 33831,
- 20341 => 30813, 20342 => 38660, 20343 => 21066, 20344 => 21742, 20345 => 22179,
- 20346 => 38144, 20347 => 28040, 20348 => 23477, 20349 => 28102, 20350 => 26195,
- 20513 => 23567, 20514 => 23389, 20515 => 26657, 20516 => 32918, 20517 => 21880,
- 20518 => 31505, 20519 => 25928, 20520 => 26964, 20521 => 20123, 20522 => 27463,
- 20523 => 34638, 20524 => 38795, 20525 => 21327, 20526 => 25375, 20527 => 25658,
- 20528 => 37034, 20529 => 26012, 20530 => 32961, 20531 => 35856, 20532 => 20889,
- 20533 => 26800, 20534 => 21368, 20535 => 34809, 20536 => 25032, 20537 => 27844,
- 20538 => 27899, 20539 => 35874, 20540 => 23633, 20541 => 34218, 20542 => 33455,
- 20543 => 38156, 20544 => 27427, 20545 => 36763, 20546 => 26032, 20547 => 24571,
- 20548 => 24515, 20549 => 20449, 20550 => 34885, 20551 => 26143, 20552 => 33125,
- 20553 => 29481, 20554 => 24826, 20555 => 20852, 20556 => 21009, 20557 => 22411,
- 20558 => 24418, 20559 => 37026, 20560 => 34892, 20561 => 37266, 20562 => 24184,
- 20563 => 26447, 20564 => 24615, 20565 => 22995, 20566 => 20804, 20567 => 20982,
- 20568 => 33016, 20569 => 21256, 20570 => 27769, 20571 => 38596, 20572 => 29066,
- 20573 => 20241, 20574 => 20462, 20575 => 32670, 20576 => 26429, 20577 => 21957,
- 20578 => 38152, 20579 => 31168, 20580 => 34966, 20581 => 32483, 20582 => 22687,
- 20583 => 25100, 20584 => 38656, 20585 => 34394, 20586 => 22040, 20587 => 39035,
- 20588 => 24464, 20589 => 35768, 20590 => 33988, 20591 => 37207, 20592 => 21465,
- 20593 => 26093, 20594 => 24207, 20595 => 30044, 20596 => 24676, 20597 => 32110,
- 20598 => 23167, 20599 => 32490, 20600 => 32493, 20601 => 36713, 20602 => 21927,
- 20603 => 23459, 20604 => 24748, 20605 => 26059, 20606 => 29572, 20769 => 36873,
- 20770 => 30307, 20771 => 30505, 20772 => 32474, 20773 => 38772, 20774 => 34203,
- 20775 => 23398, 20776 => 31348, 20777 => 38634, 20778 => 34880, 20779 => 21195,
- 20780 => 29071, 20781 => 24490, 20782 => 26092, 20783 => 35810, 20784 => 23547,
- 20785 => 39535, 20786 => 24033, 20787 => 27529, 20788 => 27739, 20789 => 35757,
- 20790 => 35759, 20791 => 36874, 20792 => 36805, 20793 => 21387, 20794 => 25276,
- 20795 => 40486, 20796 => 40493, 20797 => 21568, 20798 => 20011, 20799 => 33469,
- 20800 => 29273, 20801 => 34460, 20802 => 23830, 20803 => 34905, 20804 => 28079,
- 20805 => 38597, 20806 => 21713, 20807 => 20122, 20808 => 35766, 20809 => 28937,
- 20810 => 21693, 20811 => 38409, 20812 => 28895, 20813 => 28153, 20814 => 30416,
- 20815 => 20005, 20816 => 30740, 20817 => 34578, 20818 => 23721, 20819 => 24310,
- 20820 => 35328, 20821 => 39068, 20822 => 38414, 20823 => 28814, 20824 => 27839,
- 20825 => 22852, 20826 => 25513, 20827 => 30524, 20828 => 34893, 20829 => 28436,
- 20830 => 33395, 20831 => 22576, 20832 => 29141, 20833 => 21388, 20834 => 30746,
- 20835 => 38593, 20836 => 21761, 20837 => 24422, 20838 => 28976, 20839 => 23476,
- 20840 => 35866, 20841 => 39564, 20842 => 27523, 20843 => 22830, 20844 => 40495,
- 20845 => 31207, 20846 => 26472, 20847 => 25196, 20848 => 20335, 20849 => 30113,
- 20850 => 32650, 20851 => 27915, 20852 => 38451, 20853 => 27687, 20854 => 20208,
- 20855 => 30162, 20856 => 20859, 20857 => 26679, 20858 => 28478, 20859 => 36992,
- 20860 => 33136, 20861 => 22934, 20862 => 29814, 21025 => 25671, 21026 => 23591,
- 21027 => 36965, 21028 => 31377, 21029 => 35875, 21030 => 23002, 21031 => 21676,
- 21032 => 33280, 21033 => 33647, 21034 => 35201, 21035 => 32768, 21036 => 26928,
- 21037 => 22094, 21038 => 32822, 21039 => 29239, 21040 => 37326, 21041 => 20918,
- 21042 => 20063, 21043 => 39029, 21044 => 25494, 21045 => 19994, 21046 => 21494,
- 21047 => 26355, 21048 => 33099, 21049 => 22812, 21050 => 28082, 21051 => 19968,
- 21052 => 22777, 21053 => 21307, 21054 => 25558, 21055 => 38129, 21056 => 20381,
- 21057 => 20234, 21058 => 34915, 21059 => 39056, 21060 => 22839, 21061 => 36951,
- 21062 => 31227, 21063 => 20202, 21064 => 33008, 21065 => 30097, 21066 => 27778,
- 21067 => 23452, 21068 => 23016, 21069 => 24413, 21070 => 26885, 21071 => 34433,
- 21072 => 20506, 21073 => 24050, 21074 => 20057, 21075 => 30691, 21076 => 20197,
- 21077 => 33402, 21078 => 25233, 21079 => 26131, 21080 => 37009, 21081 => 23673,
- 21082 => 20159, 21083 => 24441, 21084 => 33222, 21085 => 36920, 21086 => 32900,
- 21087 => 30123, 21088 => 20134, 21089 => 35028, 21090 => 24847, 21091 => 27589,
- 21092 => 24518, 21093 => 20041, 21094 => 30410, 21095 => 28322, 21096 => 35811,
- 21097 => 35758, 21098 => 35850, 21099 => 35793, 21100 => 24322, 21101 => 32764,
- 21102 => 32716, 21103 => 32462, 21104 => 33589, 21105 => 33643, 21106 => 22240,
- 21107 => 27575, 21108 => 38899, 21109 => 38452, 21110 => 23035, 21111 => 21535,
- 21112 => 38134, 21113 => 28139, 21114 => 23493, 21115 => 39278, 21116 => 23609,
- 21117 => 24341, 21118 => 38544, 21281 => 21360, 21282 => 33521, 21283 => 27185,
- 21284 => 23156, 21285 => 40560, 21286 => 24212, 21287 => 32552, 21288 => 33721,
- 21289 => 33828, 21290 => 33829, 21291 => 33639, 21292 => 34631, 21293 => 36814,
- 21294 => 36194, 21295 => 30408, 21296 => 24433, 21297 => 39062, 21298 => 30828,
- 21299 => 26144, 21300 => 21727, 21301 => 25317, 21302 => 20323, 21303 => 33219,
- 21304 => 30152, 21305 => 24248, 21306 => 38605, 21307 => 36362, 21308 => 34553,
- 21309 => 21647, 21310 => 27891, 21311 => 28044, 21312 => 27704, 21313 => 24703,
- 21314 => 21191, 21315 => 29992, 21316 => 24189, 21317 => 20248, 21318 => 24736,
- 21319 => 24551, 21320 => 23588, 21321 => 30001, 21322 => 37038, 21323 => 38080,
- 21324 => 29369, 21325 => 27833, 21326 => 28216, 21327 => 37193, 21328 => 26377,
- 21329 => 21451, 21330 => 21491, 21331 => 20305, 21332 => 37321, 21333 => 35825,
- 21334 => 21448, 21335 => 24188, 21336 => 36802, 21337 => 28132, 21338 => 20110,
- 21339 => 30402, 21340 => 27014, 21341 => 34398, 21342 => 24858, 21343 => 33286,
- 21344 => 20313, 21345 => 20446, 21346 => 36926, 21347 => 40060, 21348 => 24841,
- 21349 => 28189, 21350 => 28180, 21351 => 38533, 21352 => 20104, 21353 => 23089,
- 21354 => 38632, 21355 => 19982, 21356 => 23679, 21357 => 31161, 21358 => 23431,
- 21359 => 35821, 21360 => 32701, 21361 => 29577, 21362 => 22495, 21363 => 33419,
- 21364 => 37057, 21365 => 21505, 21366 => 36935, 21367 => 21947, 21368 => 23786,
- 21369 => 24481, 21370 => 24840, 21371 => 27442, 21372 => 29425, 21373 => 32946,
- 21374 => 35465, 21537 => 28020, 21538 => 23507, 21539 => 35029, 21540 => 39044,
- 21541 => 35947, 21542 => 39533, 21543 => 40499, 21544 => 28170, 21545 => 20900,
- 21546 => 20803, 21547 => 22435, 21548 => 34945, 21549 => 21407, 21550 => 25588,
- 21551 => 36757, 21552 => 22253, 21553 => 21592, 21554 => 22278, 21555 => 29503,
- 21556 => 28304, 21557 => 32536, 21558 => 36828, 21559 => 33489, 21560 => 24895,
- 21561 => 24616, 21562 => 38498, 21563 => 26352, 21564 => 32422, 21565 => 36234,
- 21566 => 36291, 21567 => 38053, 21568 => 23731, 21569 => 31908, 21570 => 26376,
- 21571 => 24742, 21572 => 38405, 21573 => 32792, 21574 => 20113, 21575 => 37095,
- 21576 => 21248, 21577 => 38504, 21578 => 20801, 21579 => 36816, 21580 => 34164,
- 21581 => 37213, 21582 => 26197, 21583 => 38901, 21584 => 23381, 21585 => 21277,
- 21586 => 30776, 21587 => 26434, 21588 => 26685, 21589 => 21705, 21590 => 28798,
- 21591 => 23472, 21592 => 36733, 21593 => 20877, 21594 => 22312, 21595 => 21681,
- 21596 => 25874, 21597 => 26242, 21598 => 36190, 21599 => 36163, 21600 => 33039,
- 21601 => 33900, 21602 => 36973, 21603 => 31967, 21604 => 20991, 21605 => 34299,
- 21606 => 26531, 21607 => 26089, 21608 => 28577, 21609 => 34468, 21610 => 36481,
- 21611 => 22122, 21612 => 36896, 21613 => 30338, 21614 => 28790, 21615 => 29157,
- 21616 => 36131, 21617 => 25321, 21618 => 21017, 21619 => 27901, 21620 => 36156,
- 21621 => 24590, 21622 => 22686, 21623 => 24974, 21624 => 26366, 21625 => 36192,
- 21626 => 25166, 21627 => 21939, 21628 => 28195, 21629 => 26413, 21630 => 36711,
- 21793 => 38113, 21794 => 38392, 21795 => 30504, 21796 => 26629, 21797 => 27048,
- 21798 => 21643, 21799 => 20045, 21800 => 28856, 21801 => 35784, 21802 => 25688,
- 21803 => 25995, 21804 => 23429, 21805 => 31364, 21806 => 20538, 21807 => 23528,
- 21808 => 30651, 21809 => 27617, 21810 => 35449, 21811 => 31896, 21812 => 27838,
- 21813 => 30415, 21814 => 26025, 21815 => 36759, 21816 => 23853, 21817 => 23637,
- 21818 => 34360, 21819 => 26632, 21820 => 21344, 21821 => 25112, 21822 => 31449,
- 21823 => 28251, 21824 => 32509, 21825 => 27167, 21826 => 31456, 21827 => 24432,
- 21828 => 28467, 21829 => 24352, 21830 => 25484, 21831 => 28072, 21832 => 26454,
- 21833 => 19976, 21834 => 24080, 21835 => 36134, 21836 => 20183, 21837 => 32960,
- 21838 => 30260, 21839 => 38556, 21840 => 25307, 21841 => 26157, 21842 => 25214,
- 21843 => 27836, 21844 => 36213, 21845 => 29031, 21846 => 32617, 21847 => 20806,
- 21848 => 32903, 21849 => 21484, 21850 => 36974, 21851 => 25240, 21852 => 21746,
- 21853 => 34544, 21854 => 36761, 21855 => 32773, 21856 => 38167, 21857 => 34071,
- 21858 => 36825, 21859 => 27993, 21860 => 29645, 21861 => 26015, 21862 => 30495,
- 21863 => 29956, 21864 => 30759, 21865 => 33275, 21866 => 36126, 21867 => 38024,
- 21868 => 20390, 21869 => 26517, 21870 => 30137, 21871 => 35786, 21872 => 38663,
- 21873 => 25391, 21874 => 38215, 21875 => 38453, 21876 => 33976, 21877 => 25379,
- 21878 => 30529, 21879 => 24449, 21880 => 29424, 21881 => 20105, 21882 => 24596,
- 21883 => 25972, 21884 => 25327, 21885 => 27491, 21886 => 25919, 22049 => 24103,
- 22050 => 30151, 22051 => 37073, 22052 => 35777, 22053 => 33437, 22054 => 26525,
- 22055 => 25903, 22056 => 21553, 22057 => 34584, 22058 => 30693, 22059 => 32930,
- 22060 => 33026, 22061 => 27713, 22062 => 20043, 22063 => 32455, 22064 => 32844,
- 22065 => 30452, 22066 => 26893, 22067 => 27542, 22068 => 25191, 22069 => 20540,
- 22070 => 20356, 22071 => 22336, 22072 => 25351, 22073 => 27490, 22074 => 36286,
- 22075 => 21482, 22076 => 26088, 22077 => 32440, 22078 => 24535, 22079 => 25370,
- 22080 => 25527, 22081 => 33267, 22082 => 33268, 22083 => 32622, 22084 => 24092,
- 22085 => 23769, 22086 => 21046, 22087 => 26234, 22088 => 31209, 22089 => 31258,
- 22090 => 36136, 22091 => 28825, 22092 => 30164, 22093 => 28382, 22094 => 27835,
- 22095 => 31378, 22096 => 20013, 22097 => 30405, 22098 => 24544, 22099 => 38047,
- 22100 => 34935, 22101 => 32456, 22102 => 31181, 22103 => 32959, 22104 => 37325,
- 22105 => 20210, 22106 => 20247, 22107 => 33311, 22108 => 21608, 22109 => 24030,
- 22110 => 27954, 22111 => 35788, 22112 => 31909, 22113 => 36724, 22114 => 32920,
- 22115 => 24090, 22116 => 21650, 22117 => 30385, 22118 => 23449, 22119 => 26172,
- 22120 => 39588, 22121 => 29664, 22122 => 26666, 22123 => 34523, 22124 => 26417,
- 22125 => 29482, 22126 => 35832, 22127 => 35803, 22128 => 36880, 22129 => 31481,
- 22130 => 28891, 22131 => 29038, 22132 => 25284, 22133 => 30633, 22134 => 22065,
- 22135 => 20027, 22136 => 33879, 22137 => 26609, 22138 => 21161, 22139 => 34496,
- 22140 => 36142, 22141 => 38136, 22142 => 31569, 22305 => 20303, 22306 => 27880,
- 22307 => 31069, 22308 => 39547, 22309 => 25235, 22310 => 29226, 22311 => 25341,
- 22312 => 19987, 22313 => 30742, 22314 => 36716, 22315 => 25776, 22316 => 36186,
- 22317 => 31686, 22318 => 26729, 22319 => 24196, 22320 => 35013, 22321 => 22918,
- 22322 => 25758, 22323 => 22766, 22324 => 29366, 22325 => 26894, 22326 => 38181,
- 22327 => 36861, 22328 => 36184, 22329 => 22368, 22330 => 32512, 22331 => 35846,
- 22332 => 20934, 22333 => 25417, 22334 => 25305, 22335 => 21331, 22336 => 26700,
- 22337 => 29730, 22338 => 33537, 22339 => 37196, 22340 => 21828, 22341 => 30528,
- 22342 => 28796, 22343 => 27978, 22344 => 20857, 22345 => 21672, 22346 => 36164,
- 22347 => 23039, 22348 => 28363, 22349 => 28100, 22350 => 23388, 22351 => 32043,
- 22352 => 20180, 22353 => 31869, 22354 => 28371, 22355 => 23376, 22356 => 33258,
- 22357 => 28173, 22358 => 23383, 22359 => 39683, 22360 => 26837, 22361 => 36394,
- 22362 => 23447, 22363 => 32508, 22364 => 24635, 22365 => 32437, 22366 => 37049,
- 22367 => 36208, 22368 => 22863, 22369 => 25549, 22370 => 31199, 22371 => 36275,
- 22372 => 21330, 22373 => 26063, 22374 => 31062, 22375 => 35781, 22376 => 38459,
- 22377 => 32452, 22378 => 38075, 22379 => 32386, 22380 => 22068, 22381 => 37257,
- 22382 => 26368, 22383 => 32618, 22384 => 23562, 22385 => 36981, 22386 => 26152,
- 22387 => 24038, 22388 => 20304, 22389 => 26590, 22390 => 20570, 22391 => 20316,
- 22392 => 22352, 22393 => 24231, 22561 => 20109, 22562 => 19980, 22563 => 20800,
- 22564 => 19984, 22565 => 24319, 22566 => 21317, 22567 => 19989, 22568 => 20120,
- 22569 => 19998, 22570 => 39730, 22571 => 23404, 22572 => 22121, 22573 => 20008,
- 22574 => 31162, 22575 => 20031, 22576 => 21269, 22577 => 20039, 22578 => 22829,
- 22579 => 29243, 22580 => 21358, 22581 => 27664, 22582 => 22239, 22583 => 32996,
- 22584 => 39319, 22585 => 27603, 22586 => 30590, 22587 => 40727, 22588 => 20022,
- 22589 => 20127, 22590 => 40720, 22591 => 20060, 22592 => 20073, 22593 => 20115,
- 22594 => 33416, 22595 => 23387, 22596 => 21868, 22597 => 22031, 22598 => 20164,
- 22599 => 21389, 22600 => 21405, 22601 => 21411, 22602 => 21413, 22603 => 21422,
- 22604 => 38757, 22605 => 36189, 22606 => 21274, 22607 => 21493, 22608 => 21286,
- 22609 => 21294, 22610 => 21310, 22611 => 36188, 22612 => 21350, 22613 => 21347,
- 22614 => 20994, 22615 => 21000, 22616 => 21006, 22617 => 21037, 22618 => 21043,
- 22619 => 21055, 22620 => 21056, 22621 => 21068, 22622 => 21086, 22623 => 21089,
- 22624 => 21084, 22625 => 33967, 22626 => 21117, 22627 => 21122, 22628 => 21121,
- 22629 => 21136, 22630 => 21139, 22631 => 20866, 22632 => 32596, 22633 => 20155,
- 22634 => 20163, 22635 => 20169, 22636 => 20162, 22637 => 20200, 22638 => 20193,
- 22639 => 20203, 22640 => 20190, 22641 => 20251, 22642 => 20211, 22643 => 20258,
- 22644 => 20324, 22645 => 20213, 22646 => 20261, 22647 => 20263, 22648 => 20233,
- 22649 => 20267, 22650 => 20318, 22651 => 20327, 22652 => 25912, 22653 => 20314,
- 22654 => 20317, 22817 => 20319, 22818 => 20311, 22819 => 20274, 22820 => 20285,
- 22821 => 20342, 22822 => 20340, 22823 => 20369, 22824 => 20361, 22825 => 20355,
- 22826 => 20367, 22827 => 20350, 22828 => 20347, 22829 => 20394, 22830 => 20348,
- 22831 => 20396, 22832 => 20372, 22833 => 20454, 22834 => 20456, 22835 => 20458,
- 22836 => 20421, 22837 => 20442, 22838 => 20451, 22839 => 20444, 22840 => 20433,
- 22841 => 20447, 22842 => 20472, 22843 => 20521, 22844 => 20556, 22845 => 20467,
- 22846 => 20524, 22847 => 20495, 22848 => 20526, 22849 => 20525, 22850 => 20478,
- 22851 => 20508, 22852 => 20492, 22853 => 20517, 22854 => 20520, 22855 => 20606,
- 22856 => 20547, 22857 => 20565, 22858 => 20552, 22859 => 20558, 22860 => 20588,
- 22861 => 20603, 22862 => 20645, 22863 => 20647, 22864 => 20649, 22865 => 20666,
- 22866 => 20694, 22867 => 20742, 22868 => 20717, 22869 => 20716, 22870 => 20710,
- 22871 => 20718, 22872 => 20743, 22873 => 20747, 22874 => 20189, 22875 => 27709,
- 22876 => 20312, 22877 => 20325, 22878 => 20430, 22879 => 40864, 22880 => 27718,
- 22881 => 31860, 22882 => 20846, 22883 => 24061, 22884 => 40649, 22885 => 39320,
- 22886 => 20865, 22887 => 22804, 22888 => 21241, 22889 => 21261, 22890 => 35335,
- 22891 => 21264, 22892 => 20971, 22893 => 22809, 22894 => 20821, 22895 => 20128,
- 22896 => 20822, 22897 => 20147, 22898 => 34926, 22899 => 34980, 22900 => 20149,
- 22901 => 33044, 22902 => 35026, 22903 => 31104, 22904 => 23348, 22905 => 34819,
- 22906 => 32696, 22907 => 20907, 22908 => 20913, 22909 => 20925, 22910 => 20924,
- 23073 => 20935, 23074 => 20886, 23075 => 20898, 23076 => 20901, 23077 => 35744,
- 23078 => 35750, 23079 => 35751, 23080 => 35754, 23081 => 35764, 23082 => 35765,
- 23083 => 35767, 23084 => 35778, 23085 => 35779, 23086 => 35787, 23087 => 35791,
- 23088 => 35790, 23089 => 35794, 23090 => 35795, 23091 => 35796, 23092 => 35798,
- 23093 => 35800, 23094 => 35801, 23095 => 35804, 23096 => 35807, 23097 => 35808,
- 23098 => 35812, 23099 => 35816, 23100 => 35817, 23101 => 35822, 23102 => 35824,
- 23103 => 35827, 23104 => 35830, 23105 => 35833, 23106 => 35836, 23107 => 35839,
- 23108 => 35840, 23109 => 35842, 23110 => 35844, 23111 => 35847, 23112 => 35852,
- 23113 => 35855, 23114 => 35857, 23115 => 35858, 23116 => 35860, 23117 => 35861,
- 23118 => 35862, 23119 => 35865, 23120 => 35867, 23121 => 35864, 23122 => 35869,
- 23123 => 35871, 23124 => 35872, 23125 => 35873, 23126 => 35877, 23127 => 35879,
- 23128 => 35882, 23129 => 35883, 23130 => 35886, 23131 => 35887, 23132 => 35890,
- 23133 => 35891, 23134 => 35893, 23135 => 35894, 23136 => 21353, 23137 => 21370,
- 23138 => 38429, 23139 => 38434, 23140 => 38433, 23141 => 38449, 23142 => 38442,
- 23143 => 38461, 23144 => 38460, 23145 => 38466, 23146 => 38473, 23147 => 38484,
- 23148 => 38495, 23149 => 38503, 23150 => 38508, 23151 => 38514, 23152 => 38516,
- 23153 => 38536, 23154 => 38541, 23155 => 38551, 23156 => 38576, 23157 => 37015,
- 23158 => 37019, 23159 => 37021, 23160 => 37017, 23161 => 37036, 23162 => 37025,
- 23163 => 37044, 23164 => 37043, 23165 => 37046, 23166 => 37050, 23329 => 37048,
- 23330 => 37040, 23331 => 37071, 23332 => 37061, 23333 => 37054, 23334 => 37072,
- 23335 => 37060, 23336 => 37063, 23337 => 37075, 23338 => 37094, 23339 => 37090,
- 23340 => 37084, 23341 => 37079, 23342 => 37083, 23343 => 37099, 23344 => 37103,
- 23345 => 37118, 23346 => 37124, 23347 => 37154, 23348 => 37150, 23349 => 37155,
- 23350 => 37169, 23351 => 37167, 23352 => 37177, 23353 => 37187, 23354 => 37190,
- 23355 => 21005, 23356 => 22850, 23357 => 21154, 23358 => 21164, 23359 => 21165,
- 23360 => 21182, 23361 => 21759, 23362 => 21200, 23363 => 21206, 23364 => 21232,
- 23365 => 21471, 23366 => 29166, 23367 => 30669, 23368 => 24308, 23369 => 20981,
- 23370 => 20988, 23371 => 39727, 23372 => 21430, 23373 => 24321, 23374 => 30042,
- 23375 => 24047, 23376 => 22348, 23377 => 22441, 23378 => 22433, 23379 => 22654,
- 23380 => 22716, 23381 => 22725, 23382 => 22737, 23383 => 22313, 23384 => 22316,
- 23385 => 22314, 23386 => 22323, 23387 => 22329, 23388 => 22318, 23389 => 22319,
- 23390 => 22364, 23391 => 22331, 23392 => 22338, 23393 => 22377, 23394 => 22405,
- 23395 => 22379, 23396 => 22406, 23397 => 22396, 23398 => 22395, 23399 => 22376,
- 23400 => 22381, 23401 => 22390, 23402 => 22387, 23403 => 22445, 23404 => 22436,
- 23405 => 22412, 23406 => 22450, 23407 => 22479, 23408 => 22439, 23409 => 22452,
- 23410 => 22419, 23411 => 22432, 23412 => 22485, 23413 => 22488, 23414 => 22490,
- 23415 => 22489, 23416 => 22482, 23417 => 22456, 23418 => 22516, 23419 => 22511,
- 23420 => 22520, 23421 => 22500, 23422 => 22493, 23585 => 22539, 23586 => 22541,
- 23587 => 22525, 23588 => 22509, 23589 => 22528, 23590 => 22558, 23591 => 22553,
- 23592 => 22596, 23593 => 22560, 23594 => 22629, 23595 => 22636, 23596 => 22657,
- 23597 => 22665, 23598 => 22682, 23599 => 22656, 23600 => 39336, 23601 => 40729,
- 23602 => 25087, 23603 => 33401, 23604 => 33405, 23605 => 33407, 23606 => 33423,
- 23607 => 33418, 23608 => 33448, 23609 => 33412, 23610 => 33422, 23611 => 33425,
- 23612 => 33431, 23613 => 33433, 23614 => 33451, 23615 => 33464, 23616 => 33470,
- 23617 => 33456, 23618 => 33480, 23619 => 33482, 23620 => 33507, 23621 => 33432,
- 23622 => 33463, 23623 => 33454, 23624 => 33483, 23625 => 33484, 23626 => 33473,
- 23627 => 33449, 23628 => 33460, 23629 => 33441, 23630 => 33450, 23631 => 33439,
- 23632 => 33476, 23633 => 33486, 23634 => 33444, 23635 => 33505, 23636 => 33545,
- 23637 => 33527, 23638 => 33508, 23639 => 33551, 23640 => 33543, 23641 => 33500,
- 23642 => 33524, 23643 => 33490, 23644 => 33496, 23645 => 33548, 23646 => 33531,
- 23647 => 33491, 23648 => 33553, 23649 => 33562, 23650 => 33542, 23651 => 33556,
- 23652 => 33557, 23653 => 33504, 23654 => 33493, 23655 => 33564, 23656 => 33617,
- 23657 => 33627, 23658 => 33628, 23659 => 33544, 23660 => 33682, 23661 => 33596,
- 23662 => 33588, 23663 => 33585, 23664 => 33691, 23665 => 33630, 23666 => 33583,
- 23667 => 33615, 23668 => 33607, 23669 => 33603, 23670 => 33631, 23671 => 33600,
- 23672 => 33559, 23673 => 33632, 23674 => 33581, 23675 => 33594, 23676 => 33587,
- 23677 => 33638, 23678 => 33637, 23841 => 33640, 23842 => 33563, 23843 => 33641,
- 23844 => 33644, 23845 => 33642, 23846 => 33645, 23847 => 33646, 23848 => 33712,
- 23849 => 33656, 23850 => 33715, 23851 => 33716, 23852 => 33696, 23853 => 33706,
- 23854 => 33683, 23855 => 33692, 23856 => 33669, 23857 => 33660, 23858 => 33718,
- 23859 => 33705, 23860 => 33661, 23861 => 33720, 23862 => 33659, 23863 => 33688,
- 23864 => 33694, 23865 => 33704, 23866 => 33722, 23867 => 33724, 23868 => 33729,
- 23869 => 33793, 23870 => 33765, 23871 => 33752, 23872 => 22535, 23873 => 33816,
- 23874 => 33803, 23875 => 33757, 23876 => 33789, 23877 => 33750, 23878 => 33820,
- 23879 => 33848, 23880 => 33809, 23881 => 33798, 23882 => 33748, 23883 => 33759,
- 23884 => 33807, 23885 => 33795, 23886 => 33784, 23887 => 33785, 23888 => 33770,
- 23889 => 33733, 23890 => 33728, 23891 => 33830, 23892 => 33776, 23893 => 33761,
- 23894 => 33884, 23895 => 33873, 23896 => 33882, 23897 => 33881, 23898 => 33907,
- 23899 => 33927, 23900 => 33928, 23901 => 33914, 23902 => 33929, 23903 => 33912,
- 23904 => 33852, 23905 => 33862, 23906 => 33897, 23907 => 33910, 23908 => 33932,
- 23909 => 33934, 23910 => 33841, 23911 => 33901, 23912 => 33985, 23913 => 33997,
- 23914 => 34000, 23915 => 34022, 23916 => 33981, 23917 => 34003, 23918 => 33994,
- 23919 => 33983, 23920 => 33978, 23921 => 34016, 23922 => 33953, 23923 => 33977,
- 23924 => 33972, 23925 => 33943, 23926 => 34021, 23927 => 34019, 23928 => 34060,
- 23929 => 29965, 23930 => 34104, 23931 => 34032, 23932 => 34105, 23933 => 34079,
- 23934 => 34106, 24097 => 34134, 24098 => 34107, 24099 => 34047, 24100 => 34044,
- 24101 => 34137, 24102 => 34120, 24103 => 34152, 24104 => 34148, 24105 => 34142,
- 24106 => 34170, 24107 => 30626, 24108 => 34115, 24109 => 34162, 24110 => 34171,
- 24111 => 34212, 24112 => 34216, 24113 => 34183, 24114 => 34191, 24115 => 34169,
- 24116 => 34222, 24117 => 34204, 24118 => 34181, 24119 => 34233, 24120 => 34231,
- 24121 => 34224, 24122 => 34259, 24123 => 34241, 24124 => 34268, 24125 => 34303,
- 24126 => 34343, 24127 => 34309, 24128 => 34345, 24129 => 34326, 24130 => 34364,
- 24131 => 24318, 24132 => 24328, 24133 => 22844, 24134 => 22849, 24135 => 32823,
- 24136 => 22869, 24137 => 22874, 24138 => 22872, 24139 => 21263, 24140 => 23586,
- 24141 => 23589, 24142 => 23596, 24143 => 23604, 24144 => 25164, 24145 => 25194,
- 24146 => 25247, 24147 => 25275, 24148 => 25290, 24149 => 25306, 24150 => 25303,
- 24151 => 25326, 24152 => 25378, 24153 => 25334, 24154 => 25401, 24155 => 25419,
- 24156 => 25411, 24157 => 25517, 24158 => 25590, 24159 => 25457, 24160 => 25466,
- 24161 => 25486, 24162 => 25524, 24163 => 25453, 24164 => 25516, 24165 => 25482,
- 24166 => 25449, 24167 => 25518, 24168 => 25532, 24169 => 25586, 24170 => 25592,
- 24171 => 25568, 24172 => 25599, 24173 => 25540, 24174 => 25566, 24175 => 25550,
- 24176 => 25682, 24177 => 25542, 24178 => 25534, 24179 => 25669, 24180 => 25665,
- 24181 => 25611, 24182 => 25627, 24183 => 25632, 24184 => 25612, 24185 => 25638,
- 24186 => 25633, 24187 => 25694, 24188 => 25732, 24189 => 25709, 24190 => 25750,
- 24353 => 25722, 24354 => 25783, 24355 => 25784, 24356 => 25753, 24357 => 25786,
- 24358 => 25792, 24359 => 25808, 24360 => 25815, 24361 => 25828, 24362 => 25826,
- 24363 => 25865, 24364 => 25893, 24365 => 25902, 24366 => 24331, 24367 => 24530,
- 24368 => 29977, 24369 => 24337, 24370 => 21343, 24371 => 21489, 24372 => 21501,
- 24373 => 21481, 24374 => 21480, 24375 => 21499, 24376 => 21522, 24377 => 21526,
- 24378 => 21510, 24379 => 21579, 24380 => 21586, 24381 => 21587, 24382 => 21588,
- 24383 => 21590, 24384 => 21571, 24385 => 21537, 24386 => 21591, 24387 => 21593,
- 24388 => 21539, 24389 => 21554, 24390 => 21634, 24391 => 21652, 24392 => 21623,
- 24393 => 21617, 24394 => 21604, 24395 => 21658, 24396 => 21659, 24397 => 21636,
- 24398 => 21622, 24399 => 21606, 24400 => 21661, 24401 => 21712, 24402 => 21677,
- 24403 => 21698, 24404 => 21684, 24405 => 21714, 24406 => 21671, 24407 => 21670,
- 24408 => 21715, 24409 => 21716, 24410 => 21618, 24411 => 21667, 24412 => 21717,
- 24413 => 21691, 24414 => 21695, 24415 => 21708, 24416 => 21721, 24417 => 21722,
- 24418 => 21724, 24419 => 21673, 24420 => 21674, 24421 => 21668, 24422 => 21725,
- 24423 => 21711, 24424 => 21726, 24425 => 21787, 24426 => 21735, 24427 => 21792,
- 24428 => 21757, 24429 => 21780, 24430 => 21747, 24431 => 21794, 24432 => 21795,
- 24433 => 21775, 24434 => 21777, 24435 => 21799, 24436 => 21802, 24437 => 21863,
- 24438 => 21903, 24439 => 21941, 24440 => 21833, 24441 => 21869, 24442 => 21825,
- 24443 => 21845, 24444 => 21823, 24445 => 21840, 24446 => 21820, 24609 => 21815,
- 24610 => 21846, 24611 => 21877, 24612 => 21878, 24613 => 21879, 24614 => 21811,
- 24615 => 21808, 24616 => 21852, 24617 => 21899, 24618 => 21970, 24619 => 21891,
- 24620 => 21937, 24621 => 21945, 24622 => 21896, 24623 => 21889, 24624 => 21919,
- 24625 => 21886, 24626 => 21974, 24627 => 21905, 24628 => 21883, 24629 => 21983,
- 24630 => 21949, 24631 => 21950, 24632 => 21908, 24633 => 21913, 24634 => 21994,
- 24635 => 22007, 24636 => 21961, 24637 => 22047, 24638 => 21969, 24639 => 21995,
- 24640 => 21996, 24641 => 21972, 24642 => 21990, 24643 => 21981, 24644 => 21956,
- 24645 => 21999, 24646 => 21989, 24647 => 22002, 24648 => 22003, 24649 => 21964,
- 24650 => 21965, 24651 => 21992, 24652 => 22005, 24653 => 21988, 24654 => 36756,
- 24655 => 22046, 24656 => 22024, 24657 => 22028, 24658 => 22017, 24659 => 22052,
- 24660 => 22051, 24661 => 22014, 24662 => 22016, 24663 => 22055, 24664 => 22061,
- 24665 => 22104, 24666 => 22073, 24667 => 22103, 24668 => 22060, 24669 => 22093,
- 24670 => 22114, 24671 => 22105, 24672 => 22108, 24673 => 22092, 24674 => 22100,
- 24675 => 22150, 24676 => 22116, 24677 => 22129, 24678 => 22123, 24679 => 22139,
- 24680 => 22140, 24681 => 22149, 24682 => 22163, 24683 => 22191, 24684 => 22228,
- 24685 => 22231, 24686 => 22237, 24687 => 22241, 24688 => 22261, 24689 => 22251,
- 24690 => 22265, 24691 => 22271, 24692 => 22276, 24693 => 22282, 24694 => 22281,
- 24695 => 22300, 24696 => 24079, 24697 => 24089, 24698 => 24084, 24699 => 24081,
- 24700 => 24113, 24701 => 24123, 24702 => 24124, 24865 => 24119, 24866 => 24132,
- 24867 => 24148, 24868 => 24155, 24869 => 24158, 24870 => 24161, 24871 => 23692,
- 24872 => 23674, 24873 => 23693, 24874 => 23696, 24875 => 23702, 24876 => 23688,
- 24877 => 23704, 24878 => 23705, 24879 => 23697, 24880 => 23706, 24881 => 23708,
- 24882 => 23733, 24883 => 23714, 24884 => 23741, 24885 => 23724, 24886 => 23723,
- 24887 => 23729, 24888 => 23715, 24889 => 23745, 24890 => 23735, 24891 => 23748,
- 24892 => 23762, 24893 => 23780, 24894 => 23755, 24895 => 23781, 24896 => 23810,
- 24897 => 23811, 24898 => 23847, 24899 => 23846, 24900 => 23854, 24901 => 23844,
- 24902 => 23838, 24903 => 23814, 24904 => 23835, 24905 => 23896, 24906 => 23870,
- 24907 => 23860, 24908 => 23869, 24909 => 23916, 24910 => 23899, 24911 => 23919,
- 24912 => 23901, 24913 => 23915, 24914 => 23883, 24915 => 23882, 24916 => 23913,
- 24917 => 23924, 24918 => 23938, 24919 => 23961, 24920 => 23965, 24921 => 35955,
- 24922 => 23991, 24923 => 24005, 24924 => 24435, 24925 => 24439, 24926 => 24450,
- 24927 => 24455, 24928 => 24457, 24929 => 24460, 24930 => 24469, 24931 => 24473,
- 24932 => 24476, 24933 => 24488, 24934 => 24493, 24935 => 24501, 24936 => 24508,
- 24937 => 34914, 24938 => 24417, 24939 => 29357, 24940 => 29360, 24941 => 29364,
- 24942 => 29367, 24943 => 29368, 24944 => 29379, 24945 => 29377, 24946 => 29390,
- 24947 => 29389, 24948 => 29394, 24949 => 29416, 24950 => 29423, 24951 => 29417,
- 24952 => 29426, 24953 => 29428, 24954 => 29431, 24955 => 29441, 24956 => 29427,
- 24957 => 29443, 24958 => 29434, 25121 => 29435, 25122 => 29463, 25123 => 29459,
- 25124 => 29473, 25125 => 29450, 25126 => 29470, 25127 => 29469, 25128 => 29461,
- 25129 => 29474, 25130 => 29497, 25131 => 29477, 25132 => 29484, 25133 => 29496,
- 25134 => 29489, 25135 => 29520, 25136 => 29517, 25137 => 29527, 25138 => 29536,
- 25139 => 29548, 25140 => 29551, 25141 => 29566, 25142 => 33307, 25143 => 22821,
- 25144 => 39143, 25145 => 22820, 25146 => 22786, 25147 => 39267, 25148 => 39271,
- 25149 => 39272, 25150 => 39273, 25151 => 39274, 25152 => 39275, 25153 => 39276,
- 25154 => 39284, 25155 => 39287, 25156 => 39293, 25157 => 39296, 25158 => 39300,
- 25159 => 39303, 25160 => 39306, 25161 => 39309, 25162 => 39312, 25163 => 39313,
- 25164 => 39315, 25165 => 39316, 25166 => 39317, 25167 => 24192, 25168 => 24209,
- 25169 => 24203, 25170 => 24214, 25171 => 24229, 25172 => 24224, 25173 => 24249,
- 25174 => 24245, 25175 => 24254, 25176 => 24243, 25177 => 36179, 25178 => 24274,
- 25179 => 24273, 25180 => 24283, 25181 => 24296, 25182 => 24298, 25183 => 33210,
- 25184 => 24516, 25185 => 24521, 25186 => 24534, 25187 => 24527, 25188 => 24579,
- 25189 => 24558, 25190 => 24580, 25191 => 24545, 25192 => 24548, 25193 => 24574,
- 25194 => 24581, 25195 => 24582, 25196 => 24554, 25197 => 24557, 25198 => 24568,
- 25199 => 24601, 25200 => 24629, 25201 => 24614, 25202 => 24603, 25203 => 24591,
- 25204 => 24589, 25205 => 24617, 25206 => 24619, 25207 => 24586, 25208 => 24639,
- 25209 => 24609, 25210 => 24696, 25211 => 24697, 25212 => 24699, 25213 => 24698,
- 25214 => 24642, 25377 => 24682, 25378 => 24701, 25379 => 24726, 25380 => 24730,
- 25381 => 24749, 25382 => 24733, 25383 => 24707, 25384 => 24722, 25385 => 24716,
- 25386 => 24731, 25387 => 24812, 25388 => 24763, 25389 => 24753, 25390 => 24797,
- 25391 => 24792, 25392 => 24774, 25393 => 24794, 25394 => 24756, 25395 => 24864,
- 25396 => 24870, 25397 => 24853, 25398 => 24867, 25399 => 24820, 25400 => 24832,
- 25401 => 24846, 25402 => 24875, 25403 => 24906, 25404 => 24949, 25405 => 25004,
- 25406 => 24980, 25407 => 24999, 25408 => 25015, 25409 => 25044, 25410 => 25077,
- 25411 => 24541, 25412 => 38579, 25413 => 38377, 25414 => 38379, 25415 => 38385,
- 25416 => 38387, 25417 => 38389, 25418 => 38390, 25419 => 38396, 25420 => 38398,
- 25421 => 38403, 25422 => 38404, 25423 => 38406, 25424 => 38408, 25425 => 38410,
- 25426 => 38411, 25427 => 38412, 25428 => 38413, 25429 => 38415, 25430 => 38418,
- 25431 => 38421, 25432 => 38422, 25433 => 38423, 25434 => 38425, 25435 => 38426,
- 25436 => 20012, 25437 => 29247, 25438 => 25109, 25439 => 27701, 25440 => 27732,
- 25441 => 27740, 25442 => 27722, 25443 => 27811, 25444 => 27781, 25445 => 27792,
- 25446 => 27796, 25447 => 27788, 25448 => 27752, 25449 => 27753, 25450 => 27764,
- 25451 => 27766, 25452 => 27782, 25453 => 27817, 25454 => 27856, 25455 => 27860,
- 25456 => 27821, 25457 => 27895, 25458 => 27896, 25459 => 27889, 25460 => 27863,
- 25461 => 27826, 25462 => 27872, 25463 => 27862, 25464 => 27898, 25465 => 27883,
- 25466 => 27886, 25467 => 27825, 25468 => 27859, 25469 => 27887, 25470 => 27902,
- 25633 => 27961, 25634 => 27943, 25635 => 27916, 25636 => 27971, 25637 => 27976,
- 25638 => 27911, 25639 => 27908, 25640 => 27929, 25641 => 27918, 25642 => 27947,
- 25643 => 27981, 25644 => 27950, 25645 => 27957, 25646 => 27930, 25647 => 27983,
- 25648 => 27986, 25649 => 27988, 25650 => 27955, 25651 => 28049, 25652 => 28015,
- 25653 => 28062, 25654 => 28064, 25655 => 27998, 25656 => 28051, 25657 => 28052,
- 25658 => 27996, 25659 => 28000, 25660 => 28028, 25661 => 28003, 25662 => 28186,
- 25663 => 28103, 25664 => 28101, 25665 => 28126, 25666 => 28174, 25667 => 28095,
- 25668 => 28128, 25669 => 28177, 25670 => 28134, 25671 => 28125, 25672 => 28121,
- 25673 => 28182, 25674 => 28075, 25675 => 28172, 25676 => 28078, 25677 => 28203,
- 25678 => 28270, 25679 => 28238, 25680 => 28267, 25681 => 28338, 25682 => 28255,
- 25683 => 28294, 25684 => 28243, 25685 => 28244, 25686 => 28210, 25687 => 28197,
- 25688 => 28228, 25689 => 28383, 25690 => 28337, 25691 => 28312, 25692 => 28384,
- 25693 => 28461, 25694 => 28386, 25695 => 28325, 25696 => 28327, 25697 => 28349,
- 25698 => 28347, 25699 => 28343, 25700 => 28375, 25701 => 28340, 25702 => 28367,
- 25703 => 28303, 25704 => 28354, 25705 => 28319, 25706 => 28514, 25707 => 28486,
- 25708 => 28487, 25709 => 28452, 25710 => 28437, 25711 => 28409, 25712 => 28463,
- 25713 => 28470, 25714 => 28491, 25715 => 28532, 25716 => 28458, 25717 => 28425,
- 25718 => 28457, 25719 => 28553, 25720 => 28557, 25721 => 28556, 25722 => 28536,
- 25723 => 28530, 25724 => 28540, 25725 => 28538, 25726 => 28625, 25889 => 28617,
- 25890 => 28583, 25891 => 28601, 25892 => 28598, 25893 => 28610, 25894 => 28641,
- 25895 => 28654, 25896 => 28638, 25897 => 28640, 25898 => 28655, 25899 => 28698,
- 25900 => 28707, 25901 => 28699, 25902 => 28729, 25903 => 28725, 25904 => 28751,
- 25905 => 28766, 25906 => 23424, 25907 => 23428, 25908 => 23445, 25909 => 23443,
- 25910 => 23461, 25911 => 23480, 25912 => 29999, 25913 => 39582, 25914 => 25652,
- 25915 => 23524, 25916 => 23534, 25917 => 35120, 25918 => 23536, 25919 => 36423,
- 25920 => 35591, 25921 => 36790, 25922 => 36819, 25923 => 36821, 25924 => 36837,
- 25925 => 36846, 25926 => 36836, 25927 => 36841, 25928 => 36838, 25929 => 36851,
- 25930 => 36840, 25931 => 36869, 25932 => 36868, 25933 => 36875, 25934 => 36902,
- 25935 => 36881, 25936 => 36877, 25937 => 36886, 25938 => 36897, 25939 => 36917,
- 25940 => 36918, 25941 => 36909, 25942 => 36911, 25943 => 36932, 25944 => 36945,
- 25945 => 36946, 25946 => 36944, 25947 => 36968, 25948 => 36952, 25949 => 36962,
- 25950 => 36955, 25951 => 26297, 25952 => 36980, 25953 => 36989, 25954 => 36994,
- 25955 => 37000, 25956 => 36995, 25957 => 37003, 25958 => 24400, 25959 => 24407,
- 25960 => 24406, 25961 => 24408, 25962 => 23611, 25963 => 21675, 25964 => 23632,
- 25965 => 23641, 25966 => 23409, 25967 => 23651, 25968 => 23654, 25969 => 32700,
- 25970 => 24362, 25971 => 24361, 25972 => 24365, 25973 => 33396, 25974 => 24380,
- 25975 => 39739, 25976 => 23662, 25977 => 22913, 25978 => 22915, 25979 => 22925,
- 25980 => 22953, 25981 => 22954, 25982 => 22947, 26145 => 22935, 26146 => 22986,
- 26147 => 22955, 26148 => 22942, 26149 => 22948, 26150 => 22994, 26151 => 22962,
- 26152 => 22959, 26153 => 22999, 26154 => 22974, 26155 => 23045, 26156 => 23046,
- 26157 => 23005, 26158 => 23048, 26159 => 23011, 26160 => 23000, 26161 => 23033,
- 26162 => 23052, 26163 => 23049, 26164 => 23090, 26165 => 23092, 26166 => 23057,
- 26167 => 23075, 26168 => 23059, 26169 => 23104, 26170 => 23143, 26171 => 23114,
- 26172 => 23125, 26173 => 23100, 26174 => 23138, 26175 => 23157, 26176 => 33004,
- 26177 => 23210, 26178 => 23195, 26179 => 23159, 26180 => 23162, 26181 => 23230,
- 26182 => 23275, 26183 => 23218, 26184 => 23250, 26185 => 23252, 26186 => 23224,
- 26187 => 23264, 26188 => 23267, 26189 => 23281, 26190 => 23254, 26191 => 23270,
- 26192 => 23256, 26193 => 23260, 26194 => 23305, 26195 => 23319, 26196 => 23318,
- 26197 => 23346, 26198 => 23351, 26199 => 23360, 26200 => 23573, 26201 => 23580,
- 26202 => 23386, 26203 => 23397, 26204 => 23411, 26205 => 23377, 26206 => 23379,
- 26207 => 23394, 26208 => 39541, 26209 => 39543, 26210 => 39544, 26211 => 39546,
- 26212 => 39551, 26213 => 39549, 26214 => 39552, 26215 => 39553, 26216 => 39557,
- 26217 => 39560, 26218 => 39562, 26219 => 39568, 26220 => 39570, 26221 => 39571,
- 26222 => 39574, 26223 => 39576, 26224 => 39579, 26225 => 39580, 26226 => 39581,
- 26227 => 39583, 26228 => 39584, 26229 => 39586, 26230 => 39587, 26231 => 39589,
- 26232 => 39591, 26233 => 32415, 26234 => 32417, 26235 => 32419, 26236 => 32421,
- 26237 => 32424, 26238 => 32425, 26401 => 32429, 26402 => 32432, 26403 => 32446,
- 26404 => 32448, 26405 => 32449, 26406 => 32450, 26407 => 32457, 26408 => 32459,
- 26409 => 32460, 26410 => 32464, 26411 => 32468, 26412 => 32471, 26413 => 32475,
- 26414 => 32480, 26415 => 32481, 26416 => 32488, 26417 => 32491, 26418 => 32494,
- 26419 => 32495, 26420 => 32497, 26421 => 32498, 26422 => 32525, 26423 => 32502,
- 26424 => 32506, 26425 => 32507, 26426 => 32510, 26427 => 32513, 26428 => 32514,
- 26429 => 32515, 26430 => 32519, 26431 => 32520, 26432 => 32523, 26433 => 32524,
- 26434 => 32527, 26435 => 32529, 26436 => 32530, 26437 => 32535, 26438 => 32537,
- 26439 => 32540, 26440 => 32539, 26441 => 32543, 26442 => 32545, 26443 => 32546,
- 26444 => 32547, 26445 => 32548, 26446 => 32549, 26447 => 32550, 26448 => 32551,
- 26449 => 32554, 26450 => 32555, 26451 => 32556, 26452 => 32557, 26453 => 32559,
- 26454 => 32560, 26455 => 32561, 26456 => 32562, 26457 => 32563, 26458 => 32565,
- 26459 => 24186, 26460 => 30079, 26461 => 24027, 26462 => 30014, 26463 => 37013,
- 26464 => 29582, 26465 => 29585, 26466 => 29614, 26467 => 29602, 26468 => 29599,
- 26469 => 29647, 26470 => 29634, 26471 => 29649, 26472 => 29623, 26473 => 29619,
- 26474 => 29632, 26475 => 29641, 26476 => 29640, 26477 => 29669, 26478 => 29657,
- 26479 => 39036, 26480 => 29706, 26481 => 29673, 26482 => 29671, 26483 => 29662,
- 26484 => 29626, 26485 => 29682, 26486 => 29711, 26487 => 29738, 26488 => 29787,
- 26489 => 29734, 26490 => 29733, 26491 => 29736, 26492 => 29744, 26493 => 29742,
- 26494 => 29740, 26657 => 29723, 26658 => 29722, 26659 => 29761, 26660 => 29788,
- 26661 => 29783, 26662 => 29781, 26663 => 29785, 26664 => 29815, 26665 => 29805,
- 26666 => 29822, 26667 => 29852, 26668 => 29838, 26669 => 29824, 26670 => 29825,
- 26671 => 29831, 26672 => 29835, 26673 => 29854, 26674 => 29864, 26675 => 29865,
- 26676 => 29840, 26677 => 29863, 26678 => 29906, 26679 => 29882, 26680 => 38890,
- 26681 => 38891, 26682 => 38892, 26683 => 26444, 26684 => 26451, 26685 => 26462,
- 26686 => 26440, 26687 => 26473, 26688 => 26533, 26689 => 26503, 26690 => 26474,
- 26691 => 26483, 26692 => 26520, 26693 => 26535, 26694 => 26485, 26695 => 26536,
- 26696 => 26526, 26697 => 26541, 26698 => 26507, 26699 => 26487, 26700 => 26492,
- 26701 => 26608, 26702 => 26633, 26703 => 26584, 26704 => 26634, 26705 => 26601,
- 26706 => 26544, 26707 => 26636, 26708 => 26585, 26709 => 26549, 26710 => 26586,
- 26711 => 26547, 26712 => 26589, 26713 => 26624, 26714 => 26563, 26715 => 26552,
- 26716 => 26594, 26717 => 26638, 26718 => 26561, 26719 => 26621, 26720 => 26674,
- 26721 => 26675, 26722 => 26720, 26723 => 26721, 26724 => 26702, 26725 => 26722,
- 26726 => 26692, 26727 => 26724, 26728 => 26755, 26729 => 26653, 26730 => 26709,
- 26731 => 26726, 26732 => 26689, 26733 => 26727, 26734 => 26688, 26735 => 26686,
- 26736 => 26698, 26737 => 26697, 26738 => 26665, 26739 => 26805, 26740 => 26767,
- 26741 => 26740, 26742 => 26743, 26743 => 26771, 26744 => 26731, 26745 => 26818,
- 26746 => 26990, 26747 => 26876, 26748 => 26911, 26749 => 26912, 26750 => 26873,
- 26913 => 26916, 26914 => 26864, 26915 => 26891, 26916 => 26881, 26917 => 26967,
- 26918 => 26851, 26919 => 26896, 26920 => 26993, 26921 => 26937, 26922 => 26976,
- 26923 => 26946, 26924 => 26973, 26925 => 27012, 26926 => 26987, 26927 => 27008,
- 26928 => 27032, 26929 => 27000, 26930 => 26932, 26931 => 27084, 26932 => 27015,
- 26933 => 27016, 26934 => 27086, 26935 => 27017, 26936 => 26982, 26937 => 26979,
- 26938 => 27001, 26939 => 27035, 26940 => 27047, 26941 => 27067, 26942 => 27051,
- 26943 => 27053, 26944 => 27092, 26945 => 27057, 26946 => 27073, 26947 => 27082,
- 26948 => 27103, 26949 => 27029, 26950 => 27104, 26951 => 27021, 26952 => 27135,
- 26953 => 27183, 26954 => 27117, 26955 => 27159, 26956 => 27160, 26957 => 27237,
- 26958 => 27122, 26959 => 27204, 26960 => 27198, 26961 => 27296, 26962 => 27216,
- 26963 => 27227, 26964 => 27189, 26965 => 27278, 26966 => 27257, 26967 => 27197,
- 26968 => 27176, 26969 => 27224, 26970 => 27260, 26971 => 27281, 26972 => 27280,
- 26973 => 27305, 26974 => 27287, 26975 => 27307, 26976 => 29495, 26977 => 29522,
- 26978 => 27521, 26979 => 27522, 26980 => 27527, 26981 => 27524, 26982 => 27538,
- 26983 => 27539, 26984 => 27533, 26985 => 27546, 26986 => 27547, 26987 => 27553,
- 26988 => 27562, 26989 => 36715, 26990 => 36717, 26991 => 36721, 26992 => 36722,
- 26993 => 36723, 26994 => 36725, 26995 => 36726, 26996 => 36728, 26997 => 36727,
- 26998 => 36729, 26999 => 36730, 27000 => 36732, 27001 => 36734, 27002 => 36737,
- 27003 => 36738, 27004 => 36740, 27005 => 36743, 27006 => 36747, 27169 => 36749,
- 27170 => 36750, 27171 => 36751, 27172 => 36760, 27173 => 36762, 27174 => 36558,
- 27175 => 25099, 27176 => 25111, 27177 => 25115, 27178 => 25119, 27179 => 25122,
- 27180 => 25121, 27181 => 25125, 27182 => 25124, 27183 => 25132, 27184 => 33255,
- 27185 => 29935, 27186 => 29940, 27187 => 29951, 27188 => 29967, 27189 => 29969,
- 27190 => 29971, 27191 => 25908, 27192 => 26094, 27193 => 26095, 27194 => 26096,
- 27195 => 26122, 27196 => 26137, 27197 => 26482, 27198 => 26115, 27199 => 26133,
- 27200 => 26112, 27201 => 28805, 27202 => 26359, 27203 => 26141, 27204 => 26164,
- 27205 => 26161, 27206 => 26166, 27207 => 26165, 27208 => 32774, 27209 => 26207,
- 27210 => 26196, 27211 => 26177, 27212 => 26191, 27213 => 26198, 27214 => 26209,
- 27215 => 26199, 27216 => 26231, 27217 => 26244, 27218 => 26252, 27219 => 26279,
- 27220 => 26269, 27221 => 26302, 27222 => 26331, 27223 => 26332, 27224 => 26342,
- 27225 => 26345, 27226 => 36146, 27227 => 36147, 27228 => 36150, 27229 => 36155,
- 27230 => 36157, 27231 => 36160, 27232 => 36165, 27233 => 36166, 27234 => 36168,
- 27235 => 36169, 27236 => 36167, 27237 => 36173, 27238 => 36181, 27239 => 36185,
- 27240 => 35271, 27241 => 35274, 27242 => 35275, 27243 => 35276, 27244 => 35278,
- 27245 => 35279, 27246 => 35280, 27247 => 35281, 27248 => 29294, 27249 => 29343,
- 27250 => 29277, 27251 => 29286, 27252 => 29295, 27253 => 29310, 27254 => 29311,
- 27255 => 29316, 27256 => 29323, 27257 => 29325, 27258 => 29327, 27259 => 29330,
- 27260 => 25352, 27261 => 25394, 27262 => 25520, 27425 => 25663, 27426 => 25816,
- 27427 => 32772, 27428 => 27626, 27429 => 27635, 27430 => 27645, 27431 => 27637,
- 27432 => 27641, 27433 => 27653, 27434 => 27655, 27435 => 27654, 27436 => 27661,
- 27437 => 27669, 27438 => 27672, 27439 => 27673, 27440 => 27674, 27441 => 27681,
- 27442 => 27689, 27443 => 27684, 27444 => 27690, 27445 => 27698, 27446 => 25909,
- 27447 => 25941, 27448 => 25963, 27449 => 29261, 27450 => 29266, 27451 => 29270,
- 27452 => 29232, 27453 => 34402, 27454 => 21014, 27455 => 32927, 27456 => 32924,
- 27457 => 32915, 27458 => 32956, 27459 => 26378, 27460 => 32957, 27461 => 32945,
- 27462 => 32939, 27463 => 32941, 27464 => 32948, 27465 => 32951, 27466 => 32999,
- 27467 => 33000, 27468 => 33001, 27469 => 33002, 27470 => 32987, 27471 => 32962,
- 27472 => 32964, 27473 => 32985, 27474 => 32973, 27475 => 32983, 27476 => 26384,
- 27477 => 32989, 27478 => 33003, 27479 => 33009, 27480 => 33012, 27481 => 33005,
- 27482 => 33037, 27483 => 33038, 27484 => 33010, 27485 => 33020, 27486 => 26389,
- 27487 => 33042, 27488 => 35930, 27489 => 33078, 27490 => 33054, 27491 => 33068,
- 27492 => 33048, 27493 => 33074, 27494 => 33096, 27495 => 33100, 27496 => 33107,
- 27497 => 33140, 27498 => 33113, 27499 => 33114, 27500 => 33137, 27501 => 33120,
- 27502 => 33129, 27503 => 33148, 27504 => 33149, 27505 => 33133, 27506 => 33127,
- 27507 => 22605, 27508 => 23221, 27509 => 33160, 27510 => 33154, 27511 => 33169,
- 27512 => 28373, 27513 => 33187, 27514 => 33194, 27515 => 33228, 27516 => 26406,
- 27517 => 33226, 27518 => 33211, 27681 => 33217, 27682 => 33190, 27683 => 27428,
- 27684 => 27447, 27685 => 27449, 27686 => 27459, 27687 => 27462, 27688 => 27481,
- 27689 => 39121, 27690 => 39122, 27691 => 39123, 27692 => 39125, 27693 => 39129,
- 27694 => 39130, 27695 => 27571, 27696 => 24384, 27697 => 27586, 27698 => 35315,
- 27699 => 26000, 27700 => 40785, 27701 => 26003, 27702 => 26044, 27703 => 26054,
- 27704 => 26052, 27705 => 26051, 27706 => 26060, 27707 => 26062, 27708 => 26066,
- 27709 => 26070, 27710 => 28800, 27711 => 28828, 27712 => 28822, 27713 => 28829,
- 27714 => 28859, 27715 => 28864, 27716 => 28855, 27717 => 28843, 27718 => 28849,
- 27719 => 28904, 27720 => 28874, 27721 => 28944, 27722 => 28947, 27723 => 28950,
- 27724 => 28975, 27725 => 28977, 27726 => 29043, 27727 => 29020, 27728 => 29032,
- 27729 => 28997, 27730 => 29042, 27731 => 29002, 27732 => 29048, 27733 => 29050,
- 27734 => 29080, 27735 => 29107, 27736 => 29109, 27737 => 29096, 27738 => 29088,
- 27739 => 29152, 27740 => 29140, 27741 => 29159, 27742 => 29177, 27743 => 29213,
- 27744 => 29224, 27745 => 28780, 27746 => 28952, 27747 => 29030, 27748 => 29113,
- 27749 => 25150, 27750 => 25149, 27751 => 25155, 27752 => 25160, 27753 => 25161,
- 27754 => 31035, 27755 => 31040, 27756 => 31046, 27757 => 31049, 27758 => 31067,
- 27759 => 31068, 27760 => 31059, 27761 => 31066, 27762 => 31074, 27763 => 31063,
- 27764 => 31072, 27765 => 31087, 27766 => 31079, 27767 => 31098, 27768 => 31109,
- 27769 => 31114, 27770 => 31130, 27771 => 31143, 27772 => 31155, 27773 => 24529,
- 27774 => 24528, 27937 => 24636, 27938 => 24669, 27939 => 24666, 27940 => 24679,
- 27941 => 24641, 27942 => 24665, 27943 => 24675, 27944 => 24747, 27945 => 24838,
- 27946 => 24845, 27947 => 24925, 27948 => 25001, 27949 => 24989, 27950 => 25035,
- 27951 => 25041, 27952 => 25094, 27953 => 32896, 27954 => 32895, 27955 => 27795,
- 27956 => 27894, 27957 => 28156, 27958 => 30710, 27959 => 30712, 27960 => 30720,
- 27961 => 30729, 27962 => 30743, 27963 => 30744, 27964 => 30737, 27965 => 26027,
- 27966 => 30765, 27967 => 30748, 27968 => 30749, 27969 => 30777, 27970 => 30778,
- 27971 => 30779, 27972 => 30751, 27973 => 30780, 27974 => 30757, 27975 => 30764,
- 27976 => 30755, 27977 => 30761, 27978 => 30798, 27979 => 30829, 27980 => 30806,
- 27981 => 30807, 27982 => 30758, 27983 => 30800, 27984 => 30791, 27985 => 30796,
- 27986 => 30826, 27987 => 30875, 27988 => 30867, 27989 => 30874, 27990 => 30855,
- 27991 => 30876, 27992 => 30881, 27993 => 30883, 27994 => 30898, 27995 => 30905,
- 27996 => 30885, 27997 => 30932, 27998 => 30937, 27999 => 30921, 28000 => 30956,
- 28001 => 30962, 28002 => 30981, 28003 => 30964, 28004 => 30995, 28005 => 31012,
- 28006 => 31006, 28007 => 31028, 28008 => 40859, 28009 => 40697, 28010 => 40699,
- 28011 => 40700, 28012 => 30449, 28013 => 30468, 28014 => 30477, 28015 => 30457,
- 28016 => 30471, 28017 => 30472, 28018 => 30490, 28019 => 30498, 28020 => 30489,
- 28021 => 30509, 28022 => 30502, 28023 => 30517, 28024 => 30520, 28025 => 30544,
- 28026 => 30545, 28027 => 30535, 28028 => 30531, 28029 => 30554, 28030 => 30568,
- 28193 => 30562, 28194 => 30565, 28195 => 30591, 28196 => 30605, 28197 => 30589,
- 28198 => 30592, 28199 => 30604, 28200 => 30609, 28201 => 30623, 28202 => 30624,
- 28203 => 30640, 28204 => 30645, 28205 => 30653, 28206 => 30010, 28207 => 30016,
- 28208 => 30030, 28209 => 30027, 28210 => 30024, 28211 => 30043, 28212 => 30066,
- 28213 => 30073, 28214 => 30083, 28215 => 32600, 28216 => 32609, 28217 => 32607,
- 28218 => 35400, 28219 => 32616, 28220 => 32628, 28221 => 32625, 28222 => 32633,
- 28223 => 32641, 28224 => 32638, 28225 => 30413, 28226 => 30437, 28227 => 34866,
- 28228 => 38021, 28229 => 38022, 28230 => 38023, 28231 => 38027, 28232 => 38026,
- 28233 => 38028, 28234 => 38029, 28235 => 38031, 28236 => 38032, 28237 => 38036,
- 28238 => 38039, 28239 => 38037, 28240 => 38042, 28241 => 38043, 28242 => 38044,
- 28243 => 38051, 28244 => 38052, 28245 => 38059, 28246 => 38058, 28247 => 38061,
- 28248 => 38060, 28249 => 38063, 28250 => 38064, 28251 => 38066, 28252 => 38068,
- 28253 => 38070, 28254 => 38071, 28255 => 38072, 28256 => 38073, 28257 => 38074,
- 28258 => 38076, 28259 => 38077, 28260 => 38079, 28261 => 38084, 28262 => 38088,
- 28263 => 38089, 28264 => 38090, 28265 => 38091, 28266 => 38092, 28267 => 38093,
- 28268 => 38094, 28269 => 38096, 28270 => 38097, 28271 => 38098, 28272 => 38101,
- 28273 => 38102, 28274 => 38103, 28275 => 38105, 28276 => 38104, 28277 => 38107,
- 28278 => 38110, 28279 => 38111, 28280 => 38112, 28281 => 38114, 28282 => 38116,
- 28283 => 38117, 28284 => 38119, 28285 => 38120, 28286 => 38122, 28449 => 38121,
- 28450 => 38123, 28451 => 38126, 28452 => 38127, 28453 => 38131, 28454 => 38132,
- 28455 => 38133, 28456 => 38135, 28457 => 38137, 28458 => 38140, 28459 => 38141,
- 28460 => 38143, 28461 => 38147, 28462 => 38146, 28463 => 38150, 28464 => 38151,
- 28465 => 38153, 28466 => 38154, 28467 => 38157, 28468 => 38158, 28469 => 38159,
- 28470 => 38162, 28471 => 38163, 28472 => 38164, 28473 => 38165, 28474 => 38166,
- 28475 => 38168, 28476 => 38171, 28477 => 38173, 28478 => 38174, 28479 => 38175,
- 28480 => 38178, 28481 => 38186, 28482 => 38187, 28483 => 38185, 28484 => 38188,
- 28485 => 38193, 28486 => 38194, 28487 => 38196, 28488 => 38198, 28489 => 38199,
- 28490 => 38200, 28491 => 38204, 28492 => 38206, 28493 => 38207, 28494 => 38210,
- 28495 => 38197, 28496 => 38212, 28497 => 38213, 28498 => 38214, 28499 => 38217,
- 28500 => 38220, 28501 => 38222, 28502 => 38223, 28503 => 38226, 28504 => 38227,
- 28505 => 38228, 28506 => 38230, 28507 => 38231, 28508 => 38232, 28509 => 38233,
- 28510 => 38235, 28511 => 38238, 28512 => 38239, 28513 => 38237, 28514 => 38241,
- 28515 => 38242, 28516 => 38244, 28517 => 38245, 28518 => 38246, 28519 => 38247,
- 28520 => 38248, 28521 => 38249, 28522 => 38250, 28523 => 38251, 28524 => 38252,
- 28525 => 38255, 28526 => 38257, 28527 => 38258, 28528 => 38259, 28529 => 38202,
- 28530 => 30695, 28531 => 30700, 28532 => 38601, 28533 => 31189, 28534 => 31213,
- 28535 => 31203, 28536 => 31211, 28537 => 31238, 28538 => 23879, 28539 => 31235,
- 28540 => 31234, 28541 => 31262, 28542 => 31252, 28705 => 31289, 28706 => 31287,
- 28707 => 31313, 28708 => 40655, 28709 => 39333, 28710 => 31344, 28711 => 30344,
- 28712 => 30350, 28713 => 30355, 28714 => 30361, 28715 => 30372, 28716 => 29918,
- 28717 => 29920, 28718 => 29996, 28719 => 40480, 28720 => 40482, 28721 => 40488,
- 28722 => 40489, 28723 => 40490, 28724 => 40491, 28725 => 40492, 28726 => 40498,
- 28727 => 40497, 28728 => 40502, 28729 => 40504, 28730 => 40503, 28731 => 40505,
- 28732 => 40506, 28733 => 40510, 28734 => 40513, 28735 => 40514, 28736 => 40516,
- 28737 => 40518, 28738 => 40519, 28739 => 40520, 28740 => 40521, 28741 => 40523,
- 28742 => 40524, 28743 => 40526, 28744 => 40529, 28745 => 40533, 28746 => 40535,
- 28747 => 40538, 28748 => 40539, 28749 => 40540, 28750 => 40542, 28751 => 40547,
- 28752 => 40550, 28753 => 40551, 28754 => 40552, 28755 => 40553, 28756 => 40554,
- 28757 => 40555, 28758 => 40556, 28759 => 40561, 28760 => 40557, 28761 => 40563,
- 28762 => 30098, 28763 => 30100, 28764 => 30102, 28765 => 30112, 28766 => 30109,
- 28767 => 30124, 28768 => 30115, 28769 => 30131, 28770 => 30132, 28771 => 30136,
- 28772 => 30148, 28773 => 30129, 28774 => 30128, 28775 => 30147, 28776 => 30146,
- 28777 => 30166, 28778 => 30157, 28779 => 30179, 28780 => 30184, 28781 => 30182,
- 28782 => 30180, 28783 => 30187, 28784 => 30183, 28785 => 30211, 28786 => 30193,
- 28787 => 30204, 28788 => 30207, 28789 => 30224, 28790 => 30208, 28791 => 30213,
- 28792 => 30220, 28793 => 30231, 28794 => 30218, 28795 => 30245, 28796 => 30232,
- 28797 => 30229, 28798 => 30233, 28961 => 30235, 28962 => 30268, 28963 => 30242,
- 28964 => 30240, 28965 => 30272, 28966 => 30253, 28967 => 30256, 28968 => 30271,
- 28969 => 30261, 28970 => 30275, 28971 => 30270, 28972 => 30259, 28973 => 30285,
- 28974 => 30302, 28975 => 30292, 28976 => 30300, 28977 => 30294, 28978 => 30315,
- 28979 => 30319, 28980 => 32714, 28981 => 31462, 28982 => 31352, 28983 => 31353,
- 28984 => 31360, 28985 => 31366, 28986 => 31368, 28987 => 31381, 28988 => 31398,
- 28989 => 31392, 28990 => 31404, 28991 => 31400, 28992 => 31405, 28993 => 31411,
- 28994 => 34916, 28995 => 34921, 28996 => 34930, 28997 => 34941, 28998 => 34943,
- 28999 => 34946, 29000 => 34978, 29001 => 35014, 29002 => 34999, 29003 => 35004,
- 29004 => 35017, 29005 => 35042, 29006 => 35022, 29007 => 35043, 29008 => 35045,
- 29009 => 35057, 29010 => 35098, 29011 => 35068, 29012 => 35048, 29013 => 35070,
- 29014 => 35056, 29015 => 35105, 29016 => 35097, 29017 => 35091, 29018 => 35099,
- 29019 => 35082, 29020 => 35124, 29021 => 35115, 29022 => 35126, 29023 => 35137,
- 29024 => 35174, 29025 => 35195, 29026 => 30091, 29027 => 32997, 29028 => 30386,
- 29029 => 30388, 29030 => 30684, 29031 => 32786, 29032 => 32788, 29033 => 32790,
- 29034 => 32796, 29035 => 32800, 29036 => 32802, 29037 => 32805, 29038 => 32806,
- 29039 => 32807, 29040 => 32809, 29041 => 32808, 29042 => 32817, 29043 => 32779,
- 29044 => 32821, 29045 => 32835, 29046 => 32838, 29047 => 32845, 29048 => 32850,
- 29049 => 32873, 29050 => 32881, 29051 => 35203, 29052 => 39032, 29053 => 39040,
- 29054 => 39043, 29217 => 39049, 29218 => 39052, 29219 => 39053, 29220 => 39055,
- 29221 => 39060, 29222 => 39066, 29223 => 39067, 29224 => 39070, 29225 => 39071,
- 29226 => 39073, 29227 => 39074, 29228 => 39077, 29229 => 39078, 29230 => 34381,
- 29231 => 34388, 29232 => 34412, 29233 => 34414, 29234 => 34431, 29235 => 34426,
- 29236 => 34428, 29237 => 34427, 29238 => 34472, 29239 => 34445, 29240 => 34443,
- 29241 => 34476, 29242 => 34461, 29243 => 34471, 29244 => 34467, 29245 => 34474,
- 29246 => 34451, 29247 => 34473, 29248 => 34486, 29249 => 34500, 29250 => 34485,
- 29251 => 34510, 29252 => 34480, 29253 => 34490, 29254 => 34481, 29255 => 34479,
- 29256 => 34505, 29257 => 34511, 29258 => 34484, 29259 => 34537, 29260 => 34545,
- 29261 => 34546, 29262 => 34541, 29263 => 34547, 29264 => 34512, 29265 => 34579,
- 29266 => 34526, 29267 => 34548, 29268 => 34527, 29269 => 34520, 29270 => 34513,
- 29271 => 34563, 29272 => 34567, 29273 => 34552, 29274 => 34568, 29275 => 34570,
- 29276 => 34573, 29277 => 34569, 29278 => 34595, 29279 => 34619, 29280 => 34590,
- 29281 => 34597, 29282 => 34606, 29283 => 34586, 29284 => 34622, 29285 => 34632,
- 29286 => 34612, 29287 => 34609, 29288 => 34601, 29289 => 34615, 29290 => 34623,
- 29291 => 34690, 29292 => 34594, 29293 => 34685, 29294 => 34686, 29295 => 34683,
- 29296 => 34656, 29297 => 34672, 29298 => 34636, 29299 => 34670, 29300 => 34699,
- 29301 => 34643, 29302 => 34659, 29303 => 34684, 29304 => 34660, 29305 => 34649,
- 29306 => 34661, 29307 => 34707, 29308 => 34735, 29309 => 34728, 29310 => 34770,
- 29473 => 34758, 29474 => 34696, 29475 => 34693, 29476 => 34733, 29477 => 34711,
- 29478 => 34691, 29479 => 34731, 29480 => 34789, 29481 => 34732, 29482 => 34741,
- 29483 => 34739, 29484 => 34763, 29485 => 34771, 29486 => 34749, 29487 => 34769,
- 29488 => 34752, 29489 => 34762, 29490 => 34779, 29491 => 34794, 29492 => 34784,
- 29493 => 34798, 29494 => 34838, 29495 => 34835, 29496 => 34814, 29497 => 34826,
- 29498 => 34843, 29499 => 34849, 29500 => 34873, 29501 => 34876, 29502 => 32566,
- 29503 => 32578, 29504 => 32580, 29505 => 32581, 29506 => 33296, 29507 => 31482,
- 29508 => 31485, 29509 => 31496, 29510 => 31491, 29511 => 31492, 29512 => 31509,
- 29513 => 31498, 29514 => 31531, 29515 => 31503, 29516 => 31559, 29517 => 31544,
- 29518 => 31530, 29519 => 31513, 29520 => 31534, 29521 => 31537, 29522 => 31520,
- 29523 => 31525, 29524 => 31524, 29525 => 31539, 29526 => 31550, 29527 => 31518,
- 29528 => 31576, 29529 => 31578, 29530 => 31557, 29531 => 31605, 29532 => 31564,
- 29533 => 31581, 29534 => 31584, 29535 => 31598, 29536 => 31611, 29537 => 31586,
- 29538 => 31602, 29539 => 31601, 29540 => 31632, 29541 => 31654, 29542 => 31655,
- 29543 => 31672, 29544 => 31660, 29545 => 31645, 29546 => 31656, 29547 => 31621,
- 29548 => 31658, 29549 => 31644, 29550 => 31650, 29551 => 31659, 29552 => 31668,
- 29553 => 31697, 29554 => 31681, 29555 => 31692, 29556 => 31709, 29557 => 31706,
- 29558 => 31717, 29559 => 31718, 29560 => 31722, 29561 => 31756, 29562 => 31742,
- 29563 => 31740, 29564 => 31759, 29565 => 31766, 29566 => 31755, 29729 => 31775,
- 29730 => 31786, 29731 => 31782, 29732 => 31800, 29733 => 31809, 29734 => 31808,
- 29735 => 33278, 29736 => 33281, 29737 => 33282, 29738 => 33284, 29739 => 33260,
- 29740 => 34884, 29741 => 33313, 29742 => 33314, 29743 => 33315, 29744 => 33325,
- 29745 => 33327, 29746 => 33320, 29747 => 33323, 29748 => 33336, 29749 => 33339,
- 29750 => 33331, 29751 => 33332, 29752 => 33342, 29753 => 33348, 29754 => 33353,
- 29755 => 33355, 29756 => 33359, 29757 => 33370, 29758 => 33375, 29759 => 33384,
- 29760 => 34942, 29761 => 34949, 29762 => 34952, 29763 => 35032, 29764 => 35039,
- 29765 => 35166, 29766 => 32669, 29767 => 32671, 29768 => 32679, 29769 => 32687,
- 29770 => 32688, 29771 => 32690, 29772 => 31868, 29773 => 25929, 29774 => 31889,
- 29775 => 31901, 29776 => 31900, 29777 => 31902, 29778 => 31906, 29779 => 31922,
- 29780 => 31932, 29781 => 31933, 29782 => 31937, 29783 => 31943, 29784 => 31948,
- 29785 => 31949, 29786 => 31944, 29787 => 31941, 29788 => 31959, 29789 => 31976,
- 29790 => 33390, 29791 => 26280, 29792 => 32703, 29793 => 32718, 29794 => 32725,
- 29795 => 32741, 29796 => 32737, 29797 => 32742, 29798 => 32745, 29799 => 32750,
- 29800 => 32755, 29801 => 31992, 29802 => 32119, 29803 => 32166, 29804 => 32174,
- 29805 => 32327, 29806 => 32411, 29807 => 40632, 29808 => 40628, 29809 => 36211,
- 29810 => 36228, 29811 => 36244, 29812 => 36241, 29813 => 36273, 29814 => 36199,
- 29815 => 36205, 29816 => 35911, 29817 => 35913, 29818 => 37194, 29819 => 37200,
- 29820 => 37198, 29821 => 37199, 29822 => 37220, 29985 => 37218, 29986 => 37217,
- 29987 => 37232, 29988 => 37225, 29989 => 37231, 29990 => 37245, 29991 => 37246,
- 29992 => 37234, 29993 => 37236, 29994 => 37241, 29995 => 37260, 29996 => 37253,
- 29997 => 37264, 29998 => 37261, 29999 => 37265, 30000 => 37282, 30001 => 37283,
- 30002 => 37290, 30003 => 37293, 30004 => 37294, 30005 => 37295, 30006 => 37301,
- 30007 => 37300, 30008 => 37306, 30009 => 35925, 30010 => 40574, 30011 => 36280,
- 30012 => 36331, 30013 => 36357, 30014 => 36441, 30015 => 36457, 30016 => 36277,
- 30017 => 36287, 30018 => 36284, 30019 => 36282, 30020 => 36292, 30021 => 36310,
- 30022 => 36311, 30023 => 36314, 30024 => 36318, 30025 => 36302, 30026 => 36303,
- 30027 => 36315, 30028 => 36294, 30029 => 36332, 30030 => 36343, 30031 => 36344,
- 30032 => 36323, 30033 => 36345, 30034 => 36347, 30035 => 36324, 30036 => 36361,
- 30037 => 36349, 30038 => 36372, 30039 => 36381, 30040 => 36383, 30041 => 36396,
- 30042 => 36398, 30043 => 36387, 30044 => 36399, 30045 => 36410, 30046 => 36416,
- 30047 => 36409, 30048 => 36405, 30049 => 36413, 30050 => 36401, 30051 => 36425,
- 30052 => 36417, 30053 => 36418, 30054 => 36433, 30055 => 36434, 30056 => 36426,
- 30057 => 36464, 30058 => 36470, 30059 => 36476, 30060 => 36463, 30061 => 36468,
- 30062 => 36485, 30063 => 36495, 30064 => 36500, 30065 => 36496, 30066 => 36508,
- 30067 => 36510, 30068 => 35960, 30069 => 35970, 30070 => 35978, 30071 => 35973,
- 30072 => 35992, 30073 => 35988, 30074 => 26011, 30075 => 35286, 30076 => 35294,
- 30077 => 35290, 30078 => 35292, 30241 => 35301, 30242 => 35307, 30243 => 35311,
- 30244 => 35390, 30245 => 35622, 30246 => 38739, 30247 => 38633, 30248 => 38643,
- 30249 => 38639, 30250 => 38662, 30251 => 38657, 30252 => 38664, 30253 => 38671,
- 30254 => 38670, 30255 => 38698, 30256 => 38701, 30257 => 38704, 30258 => 38718,
- 30259 => 40832, 30260 => 40835, 30261 => 40837, 30262 => 40838, 30263 => 40839,
- 30264 => 40840, 30265 => 40841, 30266 => 40842, 30267 => 40844, 30268 => 40702,
- 30269 => 40715, 30270 => 40717, 30271 => 38585, 30272 => 38588, 30273 => 38589,
- 30274 => 38606, 30275 => 38610, 30276 => 30655, 30277 => 38624, 30278 => 37518,
- 30279 => 37550, 30280 => 37576, 30281 => 37694, 30282 => 37738, 30283 => 37834,
- 30284 => 37775, 30285 => 37950, 30286 => 37995, 30287 => 40063, 30288 => 40066,
- 30289 => 40069, 30290 => 40070, 30291 => 40071, 30292 => 40072, 30293 => 31267,
- 30294 => 40075, 30295 => 40078, 30296 => 40080, 30297 => 40081, 30298 => 40082,
- 30299 => 40084, 30300 => 40085, 30301 => 40090, 30302 => 40091, 30303 => 40094,
- 30304 => 40095, 30305 => 40096, 30306 => 40097, 30307 => 40098, 30308 => 40099,
- 30309 => 40101, 30310 => 40102, 30311 => 40103, 30312 => 40104, 30313 => 40105,
- 30314 => 40107, 30315 => 40109, 30316 => 40110, 30317 => 40112, 30318 => 40113,
- 30319 => 40114, 30320 => 40115, 30321 => 40116, 30322 => 40117, 30323 => 40118,
- 30324 => 40119, 30325 => 40122, 30326 => 40123, 30327 => 40124, 30328 => 40125,
- 30329 => 40132, 30330 => 40133, 30331 => 40134, 30332 => 40135, 30333 => 40138,
- 30334 => 40139, 30497 => 40140, 30498 => 40141, 30499 => 40142, 30500 => 40143,
- 30501 => 40144, 30502 => 40147, 30503 => 40148, 30504 => 40149, 30505 => 40151,
- 30506 => 40152, 30507 => 40153, 30508 => 40156, 30509 => 40157, 30510 => 40159,
- 30511 => 40162, 30512 => 38780, 30513 => 38789, 30514 => 38801, 30515 => 38802,
- 30516 => 38804, 30517 => 38831, 30518 => 38827, 30519 => 38819, 30520 => 38834,
- 30521 => 38836, 30522 => 39601, 30523 => 39600, 30524 => 39607, 30525 => 40536,
- 30526 => 39606, 30527 => 39610, 30528 => 39612, 30529 => 39617, 30530 => 39616,
- 30531 => 39621, 30532 => 39618, 30533 => 39627, 30534 => 39628, 30535 => 39633,
- 30536 => 39749, 30537 => 39747, 30538 => 39751, 30539 => 39753, 30540 => 39752,
- 30541 => 39757, 30542 => 39761, 30543 => 39144, 30544 => 39181, 30545 => 39214,
- 30546 => 39253, 30547 => 39252, 30548 => 39647, 30549 => 39649, 30550 => 39654,
- 30551 => 39663, 30552 => 39659, 30553 => 39675, 30554 => 39661, 30555 => 39673,
- 30556 => 39688, 30557 => 39695, 30558 => 39699, 30559 => 39711, 30560 => 39715,
- 30561 => 40637, 30562 => 40638, 30563 => 32315, 30564 => 40578, 30565 => 40583,
- 30566 => 40584, 30567 => 40587, 30568 => 40594, 30569 => 37846, 30570 => 40605,
- 30571 => 40607, 30572 => 40667, 30573 => 40668, 30574 => 40669, 30575 => 40672,
- 30576 => 40671, 30577 => 40674, 30578 => 40681, 30579 => 40679, 30580 => 40677,
- 30581 => 40682, 30582 => 40687, 30583 => 40738, 30584 => 40748, 30585 => 40751,
- 30586 => 40761, 30587 => 40759, 30588 => 40765, 30589 => 40766, 30590 => 40772,
- 0 => 0 );
+13140 => 21507, 13141 => 30196, 13142 => 25345, 13143 => 21273, 13144 => 27744,
+13145 => 36831, 13146 => 24347, 13147 => 39536, 13148 => 32827, 13149 => 40831,
+13150 => 20360, 13151 => 23610, 13152 => 36196, 13153 => 32709, 13154 => 26021,
+13155 => 28861, 13156 => 20805, 13157 => 20914, 13158 => 34411, 13159 => 23815,
+13160 => 23456, 13161 => 25277, 13162 => 37228, 13163 => 30068, 13164 => 36364,
+13165 => 31264, 13166 => 24833, 13167 => 31609, 13168 => 20167, 13169 => 32504,
+13170 => 30597, 13171 => 19985, 13172 => 33261, 13173 => 21021, 13174 => 20986,
+13175 => 27249, 13176 => 21416, 13177 => 36487, 13178 => 38148, 13179 => 38607,
+13180 => 28353, 13181 => 38500, 13182 => 26970, 13345 => 30784, 13346 => 20648,
+13347 => 30679, 13348 => 25616, 13349 => 35302, 13350 => 22788, 13351 => 25571,
+13352 => 24029, 13353 => 31359, 13354 => 26941, 13355 => 20256, 13356 => 33337,
+13357 => 21912, 13358 => 20018, 13359 => 30126, 13360 => 31383, 13361 => 24162,
+13362 => 24202, 13363 => 38383, 13364 => 21019, 13365 => 21561, 13366 => 28810,
+13367 => 25462, 13368 => 38180, 13369 => 22402, 13370 => 26149, 13371 => 26943,
+13372 => 37255, 13373 => 21767, 13374 => 28147, 13375 => 32431, 13376 => 34850,
+13377 => 25139, 13378 => 32496, 13379 => 30133, 13380 => 33576, 13381 => 30913,
+13382 => 38604, 13383 => 36766, 13384 => 24904, 13385 => 29943, 13386 => 35789,
+13387 => 27492, 13388 => 21050, 13389 => 36176, 13390 => 27425, 13391 => 32874,
+13392 => 33905, 13393 => 22257, 13394 => 21254, 13395 => 20174, 13396 => 19995,
+13397 => 20945, 13398 => 31895, 13399 => 37259, 13400 => 31751, 13401 => 20419,
+13402 => 36479, 13403 => 31713, 13404 => 31388, 13405 => 25703, 13406 => 23828,
+13407 => 20652, 13408 => 33030, 13409 => 30209, 13410 => 31929, 13411 => 28140,
+13412 => 32736, 13413 => 26449, 13414 => 23384, 13415 => 23544, 13416 => 30923,
+13417 => 25774, 13418 => 25619, 13419 => 25514, 13420 => 25387, 13421 => 38169,
+13422 => 25645, 13423 => 36798, 13424 => 31572, 13425 => 30249, 13426 => 25171,
+13427 => 22823, 13428 => 21574, 13429 => 27513, 13430 => 20643, 13431 => 25140,
+13432 => 24102, 13433 => 27526, 13434 => 20195, 13435 => 36151, 13436 => 34955,
+13437 => 24453, 13438 => 36910, 13601 => 24608, 13602 => 32829, 13603 => 25285,
+13604 => 20025, 13605 => 21333, 13606 => 37112, 13607 => 25528, 13608 => 32966,
+13609 => 26086, 13610 => 27694, 13611 => 20294, 13612 => 24814, 13613 => 28129,
+13614 => 35806, 13615 => 24377, 13616 => 34507, 13617 => 24403, 13618 => 25377,
+13619 => 20826, 13620 => 33633, 13621 => 26723, 13622 => 20992, 13623 => 25443,
+13624 => 36424, 13625 => 20498, 13626 => 23707, 13627 => 31095, 13628 => 23548,
+13629 => 21040, 13630 => 31291, 13631 => 24764, 13632 => 36947, 13633 => 30423,
+13634 => 24503, 13635 => 24471, 13636 => 30340, 13637 => 36460, 13638 => 28783,
+13639 => 30331, 13640 => 31561, 13641 => 30634, 13642 => 20979, 13643 => 37011,
+13644 => 22564, 13645 => 20302, 13646 => 28404, 13647 => 36842, 13648 => 25932,
+13649 => 31515, 13650 => 29380, 13651 => 28068, 13652 => 32735, 13653 => 23265,
+13654 => 25269, 13655 => 24213, 13656 => 22320, 13657 => 33922, 13658 => 31532,
+13659 => 24093, 13660 => 24351, 13661 => 36882, 13662 => 32532, 13663 => 39072,
+13664 => 25474, 13665 => 28359, 13666 => 30872, 13667 => 28857, 13668 => 20856,
+13669 => 38747, 13670 => 22443, 13671 => 30005, 13672 => 20291, 13673 => 30008,
+13674 => 24215, 13675 => 24806, 13676 => 22880, 13677 => 28096, 13678 => 27583,
+13679 => 30857, 13680 => 21500, 13681 => 38613, 13682 => 20939, 13683 => 20993,
+13684 => 25481, 13685 => 21514, 13686 => 38035, 13687 => 35843, 13688 => 36300,
+13689 => 29241, 13690 => 30879, 13691 => 34678, 13692 => 36845, 13693 => 35853,
+13694 => 21472, 13857 => 19969, 13858 => 30447, 13859 => 21486, 13860 => 38025,
+13861 => 39030, 13862 => 40718, 13863 => 38189, 13864 => 23450, 13865 => 35746,
+13866 => 20002, 13867 => 19996, 13868 => 20908, 13869 => 33891, 13870 => 25026,
+13871 => 21160, 13872 => 26635, 13873 => 20375, 13874 => 24683, 13875 => 20923,
+13876 => 27934, 13877 => 20828, 13878 => 25238, 13879 => 26007, 13880 => 38497,
+13881 => 35910, 13882 => 36887, 13883 => 30168, 13884 => 37117, 13885 => 30563,
+13886 => 27602, 13887 => 29322, 13888 => 29420, 13889 => 35835, 13890 => 22581,
+13891 => 30585, 13892 => 36172, 13893 => 26460, 13894 => 38208, 13895 => 32922,
+13896 => 24230, 13897 => 28193, 13898 => 22930, 13899 => 31471, 13900 => 30701,
+13901 => 38203, 13902 => 27573, 13903 => 26029, 13904 => 32526, 13905 => 22534,
+13906 => 20817, 13907 => 38431, 13908 => 23545, 13909 => 22697, 13910 => 21544,
+13911 => 36466, 13912 => 25958, 13913 => 39039, 13914 => 22244, 13915 => 38045,
+13916 => 30462, 13917 => 36929, 13918 => 25479, 13919 => 21702, 13920 => 22810,
+13921 => 22842, 13922 => 22427, 13923 => 36530, 13924 => 26421, 13925 => 36346,
+13926 => 33333, 13927 => 21057, 13928 => 24816, 13929 => 22549, 13930 => 34558,
+13931 => 23784, 13932 => 40517, 13933 => 20420, 13934 => 39069, 13935 => 35769,
+13936 => 23077, 13937 => 24694, 13938 => 21380, 13939 => 25212, 13940 => 36943,
+13941 => 37122, 13942 => 39295, 13943 => 24681, 13944 => 32780, 13945 => 20799,
+13946 => 32819, 13947 => 23572, 13948 => 39285, 13949 => 27953, 13950 => 20108,
+14113 => 36144, 14114 => 21457, 14115 => 32602, 14116 => 31567, 14117 => 20240,
+14118 => 20047, 14119 => 38400, 14120 => 27861, 14121 => 29648, 14122 => 34281,
+14123 => 24070, 14124 => 30058, 14125 => 32763, 14126 => 27146, 14127 => 30718,
+14128 => 38034, 14129 => 32321, 14130 => 20961, 14131 => 28902, 14132 => 21453,
+14133 => 36820, 14134 => 33539, 14135 => 36137, 14136 => 29359, 14137 => 39277,
+14138 => 27867, 14139 => 22346, 14140 => 33459, 14141 => 26041, 14142 => 32938,
+14143 => 25151, 14144 => 38450, 14145 => 22952, 14146 => 20223, 14147 => 35775,
+14148 => 32442, 14149 => 25918, 14150 => 33778, 14151 => 38750, 14152 => 21857,
+14153 => 39134, 14154 => 32933, 14155 => 21290, 14156 => 35837, 14157 => 21536,
+14158 => 32954, 14159 => 24223, 14160 => 27832, 14161 => 36153, 14162 => 33452,
+14163 => 37210, 14164 => 21545, 14165 => 27675, 14166 => 20998, 14167 => 32439,
+14168 => 22367, 14169 => 28954, 14170 => 27774, 14171 => 31881, 14172 => 22859,
+14173 => 20221, 14174 => 24575, 14175 => 24868, 14176 => 31914, 14177 => 20016,
+14178 => 23553, 14179 => 26539, 14180 => 34562, 14181 => 23792, 14182 => 38155,
+14183 => 39118, 14184 => 30127, 14185 => 28925, 14186 => 36898, 14187 => 20911,
+14188 => 32541, 14189 => 35773, 14190 => 22857, 14191 => 20964, 14192 => 20315,
+14193 => 21542, 14194 => 22827, 14195 => 25975, 14196 => 32932, 14197 => 23413,
+14198 => 25206, 14199 => 25282, 14200 => 36752, 14201 => 24133, 14202 => 27679,
+14203 => 31526, 14204 => 20239, 14205 => 20440, 14206 => 26381, 14369 => 28014,
+14370 => 28074, 14371 => 31119, 14372 => 34993, 14373 => 24343, 14374 => 29995,
+14375 => 25242, 14376 => 36741, 14377 => 20463, 14378 => 37340, 14379 => 26023,
+14380 => 33071, 14381 => 33105, 14382 => 24220, 14383 => 33104, 14384 => 36212,
+14385 => 21103, 14386 => 35206, 14387 => 36171, 14388 => 22797, 14389 => 20613,
+14390 => 20184, 14391 => 38428, 14392 => 29238, 14393 => 33145, 14394 => 36127,
+14395 => 23500, 14396 => 35747, 14397 => 38468, 14398 => 22919, 14399 => 32538,
+14400 => 21648, 14401 => 22134, 14402 => 22030, 14403 => 35813, 14404 => 25913,
+14405 => 27010, 14406 => 38041, 14407 => 30422, 14408 => 28297, 14409 => 24178,
+14410 => 29976, 14411 => 26438, 14412 => 26577, 14413 => 31487, 14414 => 32925,
+14415 => 36214, 14416 => 24863, 14417 => 31174, 14418 => 25954, 14419 => 36195,
+14420 => 20872, 14421 => 21018, 14422 => 38050, 14423 => 32568, 14424 => 32923,
+14425 => 32434, 14426 => 23703, 14427 => 28207, 14428 => 26464, 14429 => 31705,
+14430 => 30347, 14431 => 39640, 14432 => 33167, 14433 => 32660, 14434 => 31957,
+14435 => 25630, 14436 => 38224, 14437 => 31295, 14438 => 21578, 14439 => 21733,
+14440 => 27468, 14441 => 25601, 14442 => 25096, 14443 => 40509, 14444 => 33011,
+14445 => 30105, 14446 => 21106, 14447 => 38761, 14448 => 33883, 14449 => 26684,
+14450 => 34532, 14451 => 38401, 14452 => 38548, 14453 => 38124, 14454 => 20010,
+14455 => 21508, 14456 => 32473, 14457 => 26681, 14458 => 36319, 14459 => 32789,
+14460 => 26356, 14461 => 24218, 14462 => 32697, 14625 => 22466, 14626 => 32831,
+14627 => 26775, 14628 => 24037, 14629 => 25915, 14630 => 21151, 14631 => 24685,
+14632 => 40858, 14633 => 20379, 14634 => 36524, 14635 => 20844, 14636 => 23467,
+14637 => 24339, 14638 => 24041, 14639 => 27742, 14640 => 25329, 14641 => 36129,
+14642 => 20849, 14643 => 38057, 14644 => 21246, 14645 => 27807, 14646 => 33503,
+14647 => 29399, 14648 => 22434, 14649 => 26500, 14650 => 36141, 14651 => 22815,
+14652 => 36764, 14653 => 33735, 14654 => 21653, 14655 => 31629, 14656 => 20272,
+14657 => 27837, 14658 => 23396, 14659 => 22993, 14660 => 40723, 14661 => 21476,
+14662 => 34506, 14663 => 39592, 14664 => 35895, 14665 => 32929, 14666 => 25925,
+14667 => 39038, 14668 => 22266, 14669 => 38599, 14670 => 21038, 14671 => 29916,
+14672 => 21072, 14673 => 23521, 14674 => 25346, 14675 => 35074, 14676 => 20054,
+14677 => 25296, 14678 => 24618, 14679 => 26874, 14680 => 20851, 14681 => 23448,
+14682 => 20896, 14683 => 35266, 14684 => 31649, 14685 => 39302, 14686 => 32592,
+14687 => 24815, 14688 => 28748, 14689 => 36143, 14690 => 20809, 14691 => 24191,
+14692 => 36891, 14693 => 29808, 14694 => 35268, 14695 => 22317, 14696 => 30789,
+14697 => 24402, 14698 => 40863, 14699 => 38394, 14700 => 36712, 14701 => 39740,
+14702 => 35809, 14703 => 30328, 14704 => 26690, 14705 => 26588, 14706 => 36330,
+14707 => 36149, 14708 => 21053, 14709 => 36746, 14710 => 28378, 14711 => 26829,
+14712 => 38149, 14713 => 37101, 14714 => 22269, 14715 => 26524, 14716 => 35065,
+14717 => 36807, 14718 => 21704, 14881 => 39608, 14882 => 23401, 14883 => 28023,
+14884 => 27686, 14885 => 20133, 14886 => 23475, 14887 => 39559, 14888 => 37219,
+14889 => 25000, 14890 => 37039, 14891 => 38889, 14892 => 21547, 14893 => 28085,
+14894 => 23506, 14895 => 20989, 14896 => 21898, 14897 => 32597, 14898 => 32752,
+14899 => 25788, 14900 => 25421, 14901 => 26097, 14902 => 25022, 14903 => 24717,
+14904 => 28938, 14905 => 27735, 14906 => 27721, 14907 => 22831, 14908 => 26477,
+14909 => 33322, 14910 => 22741, 14911 => 22158, 14912 => 35946, 14913 => 27627,
+14914 => 37085, 14915 => 22909, 14916 => 32791, 14917 => 21495, 14918 => 28009,
+14919 => 21621, 14920 => 21917, 14921 => 33655, 14922 => 33743, 14923 => 26680,
+14924 => 31166, 14925 => 21644, 14926 => 20309, 14927 => 21512, 14928 => 30418,
+14929 => 35977, 14930 => 38402, 14931 => 27827, 14932 => 28088, 14933 => 36203,
+14934 => 35088, 14935 => 40548, 14936 => 36154, 14937 => 22079, 14938 => 40657,
+14939 => 30165, 14940 => 24456, 14941 => 29408, 14942 => 24680, 14943 => 21756,
+14944 => 20136, 14945 => 27178, 14946 => 34913, 14947 => 24658, 14948 => 36720,
+14949 => 21700, 14950 => 28888, 14951 => 34425, 14952 => 40511, 14953 => 27946,
+14954 => 23439, 14955 => 24344, 14956 => 32418, 14957 => 21897, 14958 => 20399,
+14959 => 29492, 14960 => 21564, 14961 => 21402, 14962 => 20505, 14963 => 21518,
+14964 => 21628, 14965 => 20046, 14966 => 24573, 14967 => 29786, 14968 => 22774,
+14969 => 33899, 14970 => 32993, 14971 => 34676, 14972 => 29392, 14973 => 31946,
+14974 => 28246, 15137 => 24359, 15138 => 34382, 15139 => 21804, 15140 => 25252,
+15141 => 20114, 15142 => 27818, 15143 => 25143, 15144 => 33457, 15145 => 21719,
+15146 => 21326, 15147 => 29502, 15148 => 28369, 15149 => 30011, 15150 => 21010,
+15151 => 21270, 15152 => 35805, 15153 => 27088, 15154 => 24458, 15155 => 24576,
+15156 => 28142, 15157 => 22351, 15158 => 27426, 15159 => 29615, 15160 => 26707,
+15161 => 36824, 15162 => 32531, 15163 => 25442, 15164 => 24739, 15165 => 21796,
+15166 => 30186, 15167 => 35938, 15168 => 28949, 15169 => 28067, 15170 => 23462,
+15171 => 24187, 15172 => 33618, 15173 => 24908, 15174 => 40644, 15175 => 30970,
+15176 => 34647, 15177 => 31783, 15178 => 30343, 15179 => 20976, 15180 => 24822,
+15181 => 29004, 15182 => 26179, 15183 => 24140, 15184 => 24653, 15185 => 35854,
+15186 => 28784, 15187 => 25381, 15188 => 36745, 15189 => 24509, 15190 => 24674,
+15191 => 34516, 15192 => 22238, 15193 => 27585, 15194 => 24724, 15195 => 24935,
+15196 => 21321, 15197 => 24800, 15198 => 26214, 15199 => 36159, 15200 => 31229,
+15201 => 20250, 15202 => 28905, 15203 => 27719, 15204 => 35763, 15205 => 35826,
+15206 => 32472, 15207 => 33636, 15208 => 26127, 15209 => 23130, 15210 => 39746,
+15211 => 27985, 15212 => 28151, 15213 => 35905, 15214 => 27963, 15215 => 20249,
+15216 => 28779, 15217 => 33719, 15218 => 25110, 15219 => 24785, 15220 => 38669,
+15221 => 36135, 15222 => 31096, 15223 => 20987, 15224 => 22334, 15225 => 22522,
+15226 => 26426, 15227 => 30072, 15228 => 31293, 15229 => 31215, 15230 => 31637,
+15393 => 32908, 15394 => 39269, 15395 => 36857, 15396 => 28608, 15397 => 35749,
+15398 => 40481, 15399 => 23020, 15400 => 32489, 15401 => 32521, 15402 => 21513,
+15403 => 26497, 15404 => 26840, 15405 => 36753, 15406 => 31821, 15407 => 38598,
+15408 => 21450, 15409 => 24613, 15410 => 30142, 15411 => 27762, 15412 => 21363,
+15413 => 23241, 15414 => 32423, 15415 => 25380, 15416 => 20960, 15417 => 33034,
+15418 => 24049, 15419 => 34015, 15420 => 25216, 15421 => 20864, 15422 => 23395,
+15423 => 20238, 15424 => 31085, 15425 => 21058, 15426 => 24760, 15427 => 27982,
+15428 => 23492, 15429 => 23490, 15430 => 35745, 15431 => 35760, 15432 => 26082,
+15433 => 24524, 15434 => 38469, 15435 => 22931, 15436 => 32487, 15437 => 32426,
+15438 => 22025, 15439 => 26551, 15440 => 22841, 15441 => 20339, 15442 => 23478,
+15443 => 21152, 15444 => 33626, 15445 => 39050, 15446 => 36158, 15447 => 30002,
+15448 => 38078, 15449 => 20551, 15450 => 31292, 15451 => 20215, 15452 => 26550,
+15453 => 39550, 15454 => 23233, 15455 => 27516, 15456 => 30417, 15457 => 22362,
+15458 => 23574, 15459 => 31546, 15460 => 38388, 15461 => 29006, 15462 => 20860,
+15463 => 32937, 15464 => 33392, 15465 => 22904, 15466 => 32516, 15467 => 33575,
+15468 => 26816, 15469 => 26604, 15470 => 30897, 15471 => 30839, 15472 => 25315,
+15473 => 25441, 15474 => 31616, 15475 => 20461, 15476 => 21098, 15477 => 20943,
+15478 => 33616, 15479 => 27099, 15480 => 37492, 15481 => 36341, 15482 => 36145,
+15483 => 35265, 15484 => 38190, 15485 => 31661, 15486 => 20214, 15649 => 20581,
+15650 => 33328, 15651 => 21073, 15652 => 39279, 15653 => 28176, 15654 => 28293,
+15655 => 28071, 15656 => 24314, 15657 => 20725, 15658 => 23004, 15659 => 23558,
+15660 => 27974, 15661 => 27743, 15662 => 30086, 15663 => 33931, 15664 => 26728,
+15665 => 22870, 15666 => 35762, 15667 => 21280, 15668 => 37233, 15669 => 38477,
+15670 => 34121, 15671 => 26898, 15672 => 30977, 15673 => 28966, 15674 => 33014,
+15675 => 20132, 15676 => 37066, 15677 => 27975, 15678 => 39556, 15679 => 23047,
+15680 => 22204, 15681 => 25605, 15682 => 38128, 15683 => 30699, 15684 => 20389,
+15685 => 33050, 15686 => 29409, 15687 => 35282, 15688 => 39290, 15689 => 32564,
+15690 => 32478, 15691 => 21119, 15692 => 25945, 15693 => 37237, 15694 => 36735,
+15695 => 36739, 15696 => 21483, 15697 => 31382, 15698 => 25581, 15699 => 25509,
+15700 => 30342, 15701 => 31224, 15702 => 34903, 15703 => 38454, 15704 => 25130,
+15705 => 21163, 15706 => 33410, 15707 => 26708, 15708 => 26480, 15709 => 25463,
+15710 => 30571, 15711 => 31469, 15712 => 27905, 15713 => 32467, 15714 => 35299,
+15715 => 22992, 15716 => 25106, 15717 => 34249, 15718 => 33445, 15719 => 30028,
+15720 => 20511, 15721 => 20171, 15722 => 30117, 15723 => 35819, 15724 => 23626,
+15725 => 24062, 15726 => 31563, 15727 => 26020, 15728 => 37329, 15729 => 20170,
+15730 => 27941, 15731 => 35167, 15732 => 32039, 15733 => 38182, 15734 => 20165,
+15735 => 35880, 15736 => 36827, 15737 => 38771, 15738 => 26187, 15739 => 31105,
+15740 => 36817, 15741 => 28908, 15742 => 28024, 15905 => 23613, 15906 => 21170,
+15907 => 33606, 15908 => 20834, 15909 => 33550, 15910 => 30555, 15911 => 26230,
+15912 => 40120, 15913 => 20140, 15914 => 24778, 15915 => 31934, 15916 => 31923,
+15917 => 32463, 15918 => 20117, 15919 => 35686, 15920 => 26223, 15921 => 39048,
+15922 => 38745, 15923 => 22659, 15924 => 25964, 15925 => 38236, 15926 => 24452,
+15927 => 30153, 15928 => 38742, 15929 => 31455, 15930 => 31454, 15931 => 20928,
+15932 => 28847, 15933 => 31384, 15934 => 25578, 15935 => 31350, 15936 => 32416,
+15937 => 29590, 15938 => 38893, 15939 => 20037, 15940 => 28792, 15941 => 20061,
+15942 => 37202, 15943 => 21417, 15944 => 25937, 15945 => 26087, 15946 => 33276,
+15947 => 33285, 15948 => 21646, 15949 => 23601, 15950 => 30106, 15951 => 38816,
+15952 => 25304, 15953 => 29401, 15954 => 30141, 15955 => 23621, 15956 => 39545,
+15957 => 33738, 15958 => 23616, 15959 => 21632, 15960 => 30697, 15961 => 20030,
+15962 => 27822, 15963 => 32858, 15964 => 25298, 15965 => 25454, 15966 => 24040,
+15967 => 20855, 15968 => 36317, 15969 => 36382, 15970 => 38191, 15971 => 20465,
+15972 => 21477, 15973 => 24807, 15974 => 28844, 15975 => 21095, 15976 => 25424,
+15977 => 40515, 15978 => 23071, 15979 => 20518, 15980 => 30519, 15981 => 21367,
+15982 => 32482, 15983 => 25733, 15984 => 25899, 15985 => 25225, 15986 => 25496,
+15987 => 20500, 15988 => 29237, 15989 => 35273, 15990 => 20915, 15991 => 35776,
+15992 => 32477, 15993 => 22343, 15994 => 33740, 15995 => 38055, 15996 => 20891,
+15997 => 21531, 15998 => 23803, 16161 => 20426, 16162 => 31459, 16163 => 27994,
+16164 => 37089, 16165 => 39567, 16166 => 21888, 16167 => 21654, 16168 => 21345,
+16169 => 21679, 16170 => 24320, 16171 => 25577, 16172 => 26999, 16173 => 20975,
+16174 => 24936, 16175 => 21002, 16176 => 22570, 16177 => 21208, 16178 => 22350,
+16179 => 30733, 16180 => 30475, 16181 => 24247, 16182 => 24951, 16183 => 31968,
+16184 => 25179, 16185 => 25239, 16186 => 20130, 16187 => 28821, 16188 => 32771,
+16189 => 25335, 16190 => 28900, 16191 => 38752, 16192 => 22391, 16193 => 33499,
+16194 => 26607, 16195 => 26869, 16196 => 30933, 16197 => 39063, 16198 => 31185,
+16199 => 22771, 16200 => 21683, 16201 => 21487, 16202 => 28212, 16203 => 20811,
+16204 => 21051, 16205 => 23458, 16206 => 35838, 16207 => 32943, 16208 => 21827,
+16209 => 22438, 16210 => 24691, 16211 => 22353, 16212 => 21549, 16213 => 31354,
+16214 => 24656, 16215 => 23380, 16216 => 25511, 16217 => 25248, 16218 => 21475,
+16219 => 25187, 16220 => 23495, 16221 => 26543, 16222 => 21741, 16223 => 31391,
+16224 => 33510, 16225 => 37239, 16226 => 24211, 16227 => 35044, 16228 => 22840,
+16229 => 22446, 16230 => 25358, 16231 => 36328, 16232 => 33007, 16233 => 22359,
+16234 => 31607, 16235 => 20393, 16236 => 24555, 16237 => 23485, 16238 => 27454,
+16239 => 21281, 16240 => 31568, 16241 => 29378, 16242 => 26694, 16243 => 30719,
+16244 => 30518, 16245 => 26103, 16246 => 20917, 16247 => 20111, 16248 => 30420,
+16249 => 23743, 16250 => 31397, 16251 => 33909, 16252 => 22862, 16253 => 39745,
+16254 => 20608, 16417 => 39304, 16418 => 24871, 16419 => 28291, 16420 => 22372,
+16421 => 26118, 16422 => 25414, 16423 => 22256, 16424 => 25324, 16425 => 25193,
+16426 => 24275, 16427 => 38420, 16428 => 22403, 16429 => 25289, 16430 => 21895,
+16431 => 34593, 16432 => 33098, 16433 => 36771, 16434 => 21862, 16435 => 33713,
+16436 => 26469, 16437 => 36182, 16438 => 34013, 16439 => 23146, 16440 => 26639,
+16441 => 25318, 16442 => 31726, 16443 => 38417, 16444 => 20848, 16445 => 28572,
+16446 => 35888, 16447 => 25597, 16448 => 35272, 16449 => 25042, 16450 => 32518,
+16451 => 28866, 16452 => 28389, 16453 => 29701, 16454 => 27028, 16455 => 29436,
+16456 => 24266, 16457 => 37070, 16458 => 26391, 16459 => 28010, 16460 => 25438,
+16461 => 21171, 16462 => 29282, 16463 => 32769, 16464 => 20332, 16465 => 23013,
+16466 => 37226, 16467 => 28889, 16468 => 28061, 16469 => 21202, 16470 => 20048,
+16471 => 38647, 16472 => 38253, 16473 => 34174, 16474 => 30922, 16475 => 32047,
+16476 => 20769, 16477 => 22418, 16478 => 25794, 16479 => 32907, 16480 => 31867,
+16481 => 27882, 16482 => 26865, 16483 => 26974, 16484 => 20919, 16485 => 21400,
+16486 => 26792, 16487 => 29313, 16488 => 40654, 16489 => 31729, 16490 => 29432,
+16491 => 31163, 16492 => 28435, 16493 => 29702, 16494 => 26446, 16495 => 37324,
+16496 => 40100, 16497 => 31036, 16498 => 33673, 16499 => 33620, 16500 => 21519,
+16501 => 26647, 16502 => 20029, 16503 => 21385, 16504 => 21169, 16505 => 30782,
+16506 => 21382, 16507 => 21033, 16508 => 20616, 16509 => 20363, 16510 => 20432,
+16673 => 30178, 16674 => 31435, 16675 => 31890, 16676 => 27813, 16677 => 38582,
+16678 => 21147, 16679 => 29827, 16680 => 21737, 16681 => 20457, 16682 => 32852,
+16683 => 33714, 16684 => 36830, 16685 => 38256, 16686 => 24265, 16687 => 24604,
+16688 => 28063, 16689 => 24088, 16690 => 25947, 16691 => 33080, 16692 => 38142,
+16693 => 24651, 16694 => 28860, 16695 => 32451, 16696 => 31918, 16697 => 20937,
+16698 => 26753, 16699 => 31921, 16700 => 33391, 16701 => 20004, 16702 => 36742,
+16703 => 37327, 16704 => 26238, 16705 => 20142, 16706 => 35845, 16707 => 25769,
+16708 => 32842, 16709 => 20698, 16710 => 30103, 16711 => 29134, 16712 => 23525,
+16713 => 36797, 16714 => 28518, 16715 => 20102, 16716 => 25730, 16717 => 38243,
+16718 => 24278, 16719 => 26009, 16720 => 21015, 16721 => 35010, 16722 => 28872,
+16723 => 21155, 16724 => 29454, 16725 => 29747, 16726 => 26519, 16727 => 30967,
+16728 => 38678, 16729 => 20020, 16730 => 37051, 16731 => 40158, 16732 => 28107,
+16733 => 20955, 16734 => 36161, 16735 => 21533, 16736 => 25294, 16737 => 29618,
+16738 => 33777, 16739 => 38646, 16740 => 40836, 16741 => 38083, 16742 => 20278,
+16743 => 32666, 16744 => 20940, 16745 => 28789, 16746 => 38517, 16747 => 23725,
+16748 => 39046, 16749 => 21478, 16750 => 20196, 16751 => 28316, 16752 => 29705,
+16753 => 27060, 16754 => 30827, 16755 => 39311, 16756 => 30041, 16757 => 21016,
+16758 => 30244, 16759 => 27969, 16760 => 26611, 16761 => 20845, 16762 => 40857,
+16763 => 32843, 16764 => 21657, 16765 => 31548, 16766 => 31423, 16929 => 38534,
+16930 => 22404, 16931 => 25314, 16932 => 38471, 16933 => 27004, 16934 => 23044,
+16935 => 25602, 16936 => 31699, 16937 => 28431, 16938 => 38475, 16939 => 33446,
+16940 => 21346, 16941 => 39045, 16942 => 24208, 16943 => 28809, 16944 => 25523,
+16945 => 21348, 16946 => 34383, 16947 => 40065, 16948 => 40595, 16949 => 30860,
+16950 => 38706, 16951 => 36335, 16952 => 36162, 16953 => 40575, 16954 => 28510,
+16955 => 31108, 16956 => 24405, 16957 => 38470, 16958 => 25134, 16959 => 39540,
+16960 => 21525, 16961 => 38109, 16962 => 20387, 16963 => 26053, 16964 => 23653,
+16965 => 23649, 16966 => 32533, 16967 => 34385, 16968 => 27695, 16969 => 24459,
+16970 => 29575, 16971 => 28388, 16972 => 32511, 16973 => 23782, 16974 => 25371,
+16975 => 23402, 16976 => 28390, 16977 => 21365, 16978 => 20081, 16979 => 25504,
+16980 => 30053, 16981 => 25249, 16982 => 36718, 16983 => 20262, 16984 => 20177,
+16985 => 27814, 16986 => 32438, 16987 => 35770, 16988 => 33821, 16989 => 34746,
+16990 => 32599, 16991 => 36923, 16992 => 38179, 16993 => 31657, 16994 => 39585,
+16995 => 35064, 16996 => 33853, 16997 => 27931, 16998 => 39558, 16999 => 32476,
+17000 => 22920, 17001 => 40635, 17002 => 29595, 17003 => 30721, 17004 => 34434,
+17005 => 39532, 17006 => 39554, 17007 => 22043, 17008 => 21527, 17009 => 22475,
+17010 => 20080, 17011 => 40614, 17012 => 21334, 17013 => 36808, 17014 => 33033,
+17015 => 30610, 17016 => 39314, 17017 => 34542, 17018 => 28385, 17019 => 34067,
+17020 => 26364, 17021 => 24930, 17022 => 28459, 17185 => 35881, 17186 => 33426,
+17187 => 33579, 17188 => 30450, 17189 => 27667, 17190 => 24537, 17191 => 33725,
+17192 => 29483, 17193 => 33541, 17194 => 38170, 17195 => 27611, 17196 => 30683,
+17197 => 38086, 17198 => 21359, 17199 => 33538, 17200 => 20882, 17201 => 24125,
+17202 => 35980, 17203 => 36152, 17204 => 20040, 17205 => 29611, 17206 => 26522,
+17207 => 26757, 17208 => 37238, 17209 => 38665, 17210 => 29028, 17211 => 27809,
+17212 => 30473, 17213 => 23186, 17214 => 38209, 17215 => 27599, 17216 => 32654,
+17217 => 26151, 17218 => 23504, 17219 => 22969, 17220 => 23194, 17221 => 38376,
+17222 => 38391, 17223 => 20204, 17224 => 33804, 17225 => 33945, 17226 => 27308,
+17227 => 30431, 17228 => 38192, 17229 => 29467, 17230 => 26790, 17231 => 23391,
+17232 => 30511, 17233 => 37274, 17234 => 38753, 17235 => 31964, 17236 => 36855,
+17237 => 35868, 17238 => 24357, 17239 => 31859, 17240 => 31192, 17241 => 35269,
+17242 => 27852, 17243 => 34588, 17244 => 23494, 17245 => 24130, 17246 => 26825,
+17247 => 30496, 17248 => 32501, 17249 => 20885, 17250 => 20813, 17251 => 21193,
+17252 => 23081, 17253 => 32517, 17254 => 38754, 17255 => 33495, 17256 => 25551,
+17257 => 30596, 17258 => 34256, 17259 => 31186, 17260 => 28218, 17261 => 24217,
+17262 => 22937, 17263 => 34065, 17264 => 28781, 17265 => 27665, 17266 => 25279,
+17267 => 30399, 17268 => 25935, 17269 => 24751, 17270 => 38397, 17271 => 26126,
+17272 => 34719, 17273 => 40483, 17274 => 38125, 17275 => 21517, 17276 => 21629,
+17277 => 35884, 17278 => 25720, 17441 => 25721, 17442 => 34321, 17443 => 27169,
+17444 => 33180, 17445 => 30952, 17446 => 25705, 17447 => 39764, 17448 => 25273,
+17449 => 26411, 17450 => 33707, 17451 => 22696, 17452 => 40664, 17453 => 27819,
+17454 => 28448, 17455 => 23518, 17456 => 38476, 17457 => 35851, 17458 => 29279,
+17459 => 26576, 17460 => 25287, 17461 => 29281, 17462 => 20137, 17463 => 22982,
+17464 => 27597, 17465 => 22675, 17466 => 26286, 17467 => 24149, 17468 => 21215,
+17469 => 24917, 17470 => 26408, 17471 => 30446, 17472 => 30566, 17473 => 29287,
+17474 => 31302, 17475 => 25343, 17476 => 21738, 17477 => 21584, 17478 => 38048,
+17479 => 37027, 17480 => 23068, 17481 => 32435, 17482 => 27670, 17483 => 20035,
+17484 => 22902, 17485 => 32784, 17486 => 22856, 17487 => 21335, 17488 => 30007,
+17489 => 38590, 17490 => 22218, 17491 => 25376, 17492 => 33041, 17493 => 24700,
+17494 => 38393, 17495 => 28118, 17496 => 21602, 17497 => 39297, 17498 => 20869,
+17499 => 23273, 17500 => 33021, 17501 => 22958, 17502 => 38675, 17503 => 20522,
+17504 => 27877, 17505 => 23612, 17506 => 25311, 17507 => 20320, 17508 => 21311,
+17509 => 33147, 17510 => 36870, 17511 => 28346, 17512 => 34091, 17513 => 25288,
+17514 => 24180, 17515 => 30910, 17516 => 25781, 17517 => 25467, 17518 => 24565,
+17519 => 23064, 17520 => 37247, 17521 => 40479, 17522 => 23615, 17523 => 25423,
+17524 => 32834, 17525 => 23421, 17526 => 21870, 17527 => 38218, 17528 => 38221,
+17529 => 28037, 17530 => 24744, 17531 => 26592, 17532 => 29406, 17533 => 20957,
+17534 => 23425, 17697 => 25319, 17698 => 27870, 17699 => 29275, 17700 => 25197,
+17701 => 38062, 17702 => 32445, 17703 => 33043, 17704 => 27987, 17705 => 20892,
+17706 => 24324, 17707 => 22900, 17708 => 21162, 17709 => 24594, 17710 => 22899,
+17711 => 26262, 17712 => 34384, 17713 => 30111, 17714 => 25386, 17715 => 25062,
+17716 => 31983, 17717 => 35834, 17718 => 21734, 17719 => 27431, 17720 => 40485,
+17721 => 27572, 17722 => 34261, 17723 => 21589, 17724 => 20598, 17725 => 27812,
+17726 => 21866, 17727 => 36276, 17728 => 29228, 17729 => 24085, 17730 => 24597,
+17731 => 29750, 17732 => 25293, 17733 => 25490, 17734 => 29260, 17735 => 24472,
+17736 => 28227, 17737 => 27966, 17738 => 25856, 17739 => 28504, 17740 => 30424,
+17741 => 30928, 17742 => 30460, 17743 => 30036, 17744 => 21028, 17745 => 21467,
+17746 => 20051, 17747 => 24222, 17748 => 26049, 17749 => 32810, 17750 => 32982,
+17751 => 25243, 17752 => 21638, 17753 => 21032, 17754 => 28846, 17755 => 34957,
+17756 => 36305, 17757 => 27873, 17758 => 21624, 17759 => 32986, 17760 => 22521,
+17761 => 35060, 17762 => 36180, 17763 => 38506, 17764 => 37197, 17765 => 20329,
+17766 => 27803, 17767 => 21943, 17768 => 30406, 17769 => 30768, 17770 => 25256,
+17771 => 28921, 17772 => 28558, 17773 => 24429, 17774 => 34028, 17775 => 26842,
+17776 => 30844, 17777 => 31735, 17778 => 33192, 17779 => 26379, 17780 => 40527,
+17781 => 25447, 17782 => 30896, 17783 => 22383, 17784 => 30738, 17785 => 38713,
+17786 => 25209, 17787 => 25259, 17788 => 21128, 17789 => 29749, 17790 => 27607,
+17953 => 21860, 17954 => 33086, 17955 => 30130, 17956 => 30382, 17957 => 21305,
+17958 => 30174, 17959 => 20731, 17960 => 23617, 17961 => 35692, 17962 => 31687,
+17963 => 20559, 17964 => 29255, 17965 => 39575, 17966 => 39128, 17967 => 28418,
+17968 => 29922, 17969 => 31080, 17970 => 25735, 17971 => 30629, 17972 => 25340,
+17973 => 39057, 17974 => 36139, 17975 => 21697, 17976 => 32856, 17977 => 20050,
+17978 => 22378, 17979 => 33529, 17980 => 33805, 17981 => 24179, 17982 => 20973,
+17983 => 29942, 17984 => 35780, 17985 => 23631, 17986 => 22369, 17987 => 27900,
+17988 => 39047, 17989 => 23110, 17990 => 30772, 17991 => 39748, 17992 => 36843,
+17993 => 31893, 17994 => 21078, 17995 => 25169, 17996 => 38138, 17997 => 20166,
+17998 => 33670, 17999 => 33889, 18000 => 33769, 18001 => 33970, 18002 => 22484,
+18003 => 26420, 18004 => 22275, 18005 => 26222, 18006 => 28006, 18007 => 35889,
+18008 => 26333, 18009 => 28689, 18010 => 26399, 18011 => 27450, 18012 => 26646,
+18013 => 25114, 18014 => 22971, 18015 => 19971, 18016 => 20932, 18017 => 28422,
+18018 => 26578, 18019 => 27791, 18020 => 20854, 18021 => 26827, 18022 => 22855,
+18023 => 27495, 18024 => 30054, 18025 => 23822, 18026 => 33040, 18027 => 40784,
+18028 => 26071, 18029 => 31048, 18030 => 31041, 18031 => 39569, 18032 => 36215,
+18033 => 23682, 18034 => 20062, 18035 => 20225, 18036 => 21551, 18037 => 22865,
+18038 => 30732, 18039 => 22120, 18040 => 27668, 18041 => 36804, 18042 => 24323,
+18043 => 27773, 18044 => 27875, 18045 => 35755, 18046 => 25488, 18209 => 24688,
+18210 => 27965, 18211 => 29301, 18212 => 25190, 18213 => 38030, 18214 => 38085,
+18215 => 21315, 18216 => 36801, 18217 => 31614, 18218 => 20191, 18219 => 35878,
+18220 => 20094, 18221 => 40660, 18222 => 38065, 18223 => 38067, 18224 => 21069,
+18225 => 28508, 18226 => 36963, 18227 => 27973, 18228 => 35892, 18229 => 22545,
+18230 => 23884, 18231 => 27424, 18232 => 27465, 18233 => 26538, 18234 => 21595,
+18235 => 33108, 18236 => 32652, 18237 => 22681, 18238 => 34103, 18239 => 24378,
+18240 => 25250, 18241 => 27207, 18242 => 38201, 18243 => 25970, 18244 => 24708,
+18245 => 26725, 18246 => 30631, 18247 => 20052, 18248 => 20392, 18249 => 24039,
+18250 => 38808, 18251 => 25772, 18252 => 32728, 18253 => 23789, 18254 => 20431,
+18255 => 31373, 18256 => 20999, 18257 => 33540, 18258 => 19988, 18259 => 24623,
+18260 => 31363, 18261 => 38054, 18262 => 20405, 18263 => 20146, 18264 => 31206,
+18265 => 29748, 18266 => 21220, 18267 => 33465, 18268 => 25810, 18269 => 31165,
+18270 => 23517, 18271 => 27777, 18272 => 38738, 18273 => 36731, 18274 => 27682,
+18275 => 20542, 18276 => 21375, 18277 => 28165, 18278 => 25806, 18279 => 26228,
+18280 => 27696, 18281 => 24773, 18282 => 39031, 18283 => 35831, 18284 => 24198,
+18285 => 29756, 18286 => 31351, 18287 => 31179, 18288 => 19992, 18289 => 37041,
+18290 => 29699, 18291 => 27714, 18292 => 22234, 18293 => 37195, 18294 => 27845,
+18295 => 36235, 18296 => 21306, 18297 => 34502, 18298 => 26354, 18299 => 36527,
+18300 => 23624, 18301 => 39537, 18302 => 28192, 18465 => 21462, 18466 => 23094,
+18467 => 40843, 18468 => 36259, 18469 => 21435, 18470 => 22280, 18471 => 39079,
+18472 => 26435, 18473 => 37275, 18474 => 27849, 18475 => 20840, 18476 => 30154,
+18477 => 25331, 18478 => 29356, 18479 => 21048, 18480 => 21149, 18481 => 32570,
+18482 => 28820, 18483 => 30264, 18484 => 21364, 18485 => 40522, 18486 => 27063,
+18487 => 30830, 18488 => 38592, 18489 => 35033, 18490 => 32676, 18491 => 28982,
+18492 => 29123, 18493 => 20873, 18494 => 26579, 18495 => 29924, 18496 => 22756,
+18497 => 25880, 18498 => 22199, 18499 => 35753, 18500 => 39286, 18501 => 25200,
+18502 => 32469, 18503 => 24825, 18504 => 28909, 18505 => 22764, 18506 => 20161,
+18507 => 20154, 18508 => 24525, 18509 => 38887, 18510 => 20219, 18511 => 35748,
+18512 => 20995, 18513 => 22922, 18514 => 32427, 18515 => 25172, 18516 => 20173,
+18517 => 26085, 18518 => 25102, 18519 => 33592, 18520 => 33993, 18521 => 33635,
+18522 => 34701, 18523 => 29076, 18524 => 28342, 18525 => 23481, 18526 => 32466,
+18527 => 20887, 18528 => 25545, 18529 => 26580, 18530 => 32905, 18531 => 33593,
+18532 => 34837, 18533 => 20754, 18534 => 23418, 18535 => 22914, 18536 => 36785,
+18537 => 20083, 18538 => 27741, 18539 => 20837, 18540 => 35109, 18541 => 36719,
+18542 => 38446, 18543 => 34122, 18544 => 29790, 18545 => 38160, 18546 => 38384,
+18547 => 28070, 18548 => 33509, 18549 => 24369, 18550 => 25746, 18551 => 27922,
+18552 => 33832, 18553 => 33134, 18554 => 40131, 18555 => 22622, 18556 => 36187,
+18557 => 19977, 18558 => 21441, 18721 => 20254, 18722 => 25955, 18723 => 26705,
+18724 => 21971, 18725 => 20007, 18726 => 25620, 18727 => 39578, 18728 => 25195,
+18729 => 23234, 18730 => 29791, 18731 => 33394, 18732 => 28073, 18733 => 26862,
+18734 => 20711, 18735 => 33678, 18736 => 30722, 18737 => 26432, 18738 => 21049,
+18739 => 27801, 18740 => 32433, 18741 => 20667, 18742 => 21861, 18743 => 29022,
+18744 => 31579, 18745 => 26194, 18746 => 29642, 18747 => 33515, 18748 => 26441,
+18749 => 23665, 18750 => 21024, 18751 => 29053, 18752 => 34923, 18753 => 38378,
+18754 => 38485, 18755 => 25797, 18756 => 36193, 18757 => 33203, 18758 => 21892,
+18759 => 27733, 18760 => 25159, 18761 => 32558, 18762 => 22674, 18763 => 20260,
+18764 => 21830, 18765 => 36175, 18766 => 26188, 18767 => 19978, 18768 => 23578,
+18769 => 35059, 18770 => 26786, 18771 => 25422, 18772 => 31245, 18773 => 28903,
+18774 => 33421, 18775 => 21242, 18776 => 38902, 18777 => 23569, 18778 => 21736,
+18779 => 37045, 18780 => 32461, 18781 => 22882, 18782 => 36170, 18783 => 34503,
+18784 => 33292, 18785 => 33293, 18786 => 36198, 18787 => 25668, 18788 => 23556,
+18789 => 24913, 18790 => 28041, 18791 => 31038, 18792 => 35774, 18793 => 30775,
+18794 => 30003, 18795 => 21627, 18796 => 20280, 18797 => 36523, 18798 => 28145,
+18799 => 23072, 18800 => 32453, 18801 => 31070, 18802 => 27784, 18803 => 23457,
+18804 => 23158, 18805 => 29978, 18806 => 32958, 18807 => 24910, 18808 => 28183,
+18809 => 22768, 18810 => 29983, 18811 => 29989, 18812 => 29298, 18813 => 21319,
+18814 => 32499, 18977 => 30465, 18978 => 30427, 18979 => 21097, 18980 => 32988,
+18981 => 22307, 18982 => 24072, 18983 => 22833, 18984 => 29422, 18985 => 26045,
+18986 => 28287, 18987 => 35799, 18988 => 23608, 18989 => 34417, 18990 => 21313,
+18991 => 30707, 18992 => 25342, 18993 => 26102, 18994 => 20160, 18995 => 39135,
+18996 => 34432, 18997 => 23454, 18998 => 35782, 18999 => 21490, 19000 => 30690,
+19001 => 20351, 19002 => 23630, 19003 => 39542, 19004 => 22987, 19005 => 24335,
+19006 => 31034, 19007 => 22763, 19008 => 19990, 19009 => 26623, 19010 => 20107,
+19011 => 25325, 19012 => 35475, 19013 => 36893, 19014 => 21183, 19015 => 26159,
+19016 => 21980, 19017 => 22124, 19018 => 36866, 19019 => 20181, 19020 => 20365,
+19021 => 37322, 19022 => 39280, 19023 => 27663, 19024 => 24066, 19025 => 24643,
+19026 => 23460, 19027 => 35270, 19028 => 35797, 19029 => 25910, 19030 => 25163,
+19031 => 39318, 19032 => 23432, 19033 => 23551, 19034 => 25480, 19035 => 21806,
+19036 => 21463, 19037 => 30246, 19038 => 20861, 19039 => 34092, 19040 => 26530,
+19041 => 26803, 19042 => 27530, 19043 => 25234, 19044 => 36755, 19045 => 21460,
+19046 => 33298, 19047 => 28113, 19048 => 30095, 19049 => 20070, 19050 => 36174,
+19051 => 23408, 19052 => 29087, 19053 => 34223, 19054 => 26257, 19055 => 26329,
+19056 => 32626, 19057 => 34560, 19058 => 40653, 19059 => 40736, 19060 => 23646,
+19061 => 26415, 19062 => 36848, 19063 => 26641, 19064 => 26463, 19065 => 25101,
+19066 => 31446, 19067 => 22661, 19068 => 24246, 19069 => 25968, 19070 => 28465,
+19233 => 24661, 19234 => 21047, 19235 => 32781, 19236 => 25684, 19237 => 34928,
+19238 => 29993, 19239 => 24069, 19240 => 26643, 19241 => 25332, 19242 => 38684,
+19243 => 21452, 19244 => 29245, 19245 => 35841, 19246 => 27700, 19247 => 30561,
+19248 => 31246, 19249 => 21550, 19250 => 30636, 19251 => 39034, 19252 => 33308,
+19253 => 35828, 19254 => 30805, 19255 => 26388, 19256 => 28865, 19257 => 26031,
+19258 => 25749, 19259 => 22070, 19260 => 24605, 19261 => 31169, 19262 => 21496,
+19263 => 19997, 19264 => 27515, 19265 => 32902, 19266 => 23546, 19267 => 21987,
+19268 => 22235, 19269 => 20282, 19270 => 20284, 19271 => 39282, 19272 => 24051,
+19273 => 26494, 19274 => 32824, 19275 => 24578, 19276 => 39042, 19277 => 36865,
+19278 => 23435, 19279 => 35772, 19280 => 35829, 19281 => 25628, 19282 => 33368,
+19283 => 25822, 19284 => 22013, 19285 => 33487, 19286 => 37221, 19287 => 20439,
+19288 => 32032, 19289 => 36895, 19290 => 31903, 19291 => 20723, 19292 => 22609,
+19293 => 28335, 19294 => 23487, 19295 => 35785, 19296 => 32899, 19297 => 37240,
+19298 => 33948, 19299 => 31639, 19300 => 34429, 19301 => 38539, 19302 => 38543,
+19303 => 32485, 19304 => 39635, 19305 => 30862, 19306 => 23681, 19307 => 31319,
+19308 => 36930, 19309 => 38567, 19310 => 31071, 19311 => 23385, 19312 => 25439,
+19313 => 31499, 19314 => 34001, 19315 => 26797, 19316 => 21766, 19317 => 32553,
+19318 => 29712, 19319 => 32034, 19320 => 38145, 19321 => 25152, 19322 => 22604,
+19323 => 20182, 19324 => 23427, 19325 => 22905, 19326 => 22612, 19489 => 29549,
+19490 => 25374, 19491 => 36427, 19492 => 36367, 19493 => 32974, 19494 => 33492,
+19495 => 25260, 19496 => 21488, 19497 => 27888, 19498 => 37214, 19499 => 22826,
+19500 => 24577, 19501 => 27760, 19502 => 22349, 19503 => 25674, 19504 => 36138,
+19505 => 30251, 19506 => 28393, 19507 => 22363, 19508 => 27264, 19509 => 30192,
+19510 => 28525, 19511 => 35885, 19512 => 35848, 19513 => 22374, 19514 => 27631,
+19515 => 34962, 19516 => 30899, 19517 => 25506, 19518 => 21497, 19519 => 28845,
+19520 => 27748, 19521 => 22616, 19522 => 25642, 19523 => 22530, 19524 => 26848,
+19525 => 33179, 19526 => 21776, 19527 => 31958, 19528 => 20504, 19529 => 36538,
+19530 => 28108, 19531 => 36255, 19532 => 28907, 19533 => 25487, 19534 => 28059,
+19535 => 28372, 19536 => 32486, 19537 => 33796, 19538 => 26691, 19539 => 36867,
+19540 => 28120, 19541 => 38518, 19542 => 35752, 19543 => 22871, 19544 => 29305,
+19545 => 34276, 19546 => 33150, 19547 => 30140, 19548 => 35466, 19549 => 26799,
+19550 => 21076, 19551 => 36386, 19552 => 38161, 19553 => 25552, 19554 => 39064,
+19555 => 36420, 19556 => 21884, 19557 => 20307, 19558 => 26367, 19559 => 22159,
+19560 => 24789, 19561 => 28053, 19562 => 21059, 19563 => 23625, 19564 => 22825,
+19565 => 28155, 19566 => 22635, 19567 => 30000, 19568 => 29980, 19569 => 24684,
+19570 => 33300, 19571 => 33094, 19572 => 25361, 19573 => 26465, 19574 => 36834,
+19575 => 30522, 19576 => 36339, 19577 => 36148, 19578 => 38081, 19579 => 24086,
+19580 => 21381, 19581 => 21548, 19582 => 28867, 19745 => 27712, 19746 => 24311,
+19747 => 20572, 19748 => 20141, 19749 => 24237, 19750 => 25402, 19751 => 33351,
+19752 => 36890, 19753 => 26704, 19754 => 37230, 19755 => 30643, 19756 => 21516,
+19757 => 38108, 19758 => 24420, 19759 => 31461, 19760 => 26742, 19761 => 25413,
+19762 => 31570, 19763 => 32479, 19764 => 30171, 19765 => 20599, 19766 => 25237,
+19767 => 22836, 19768 => 36879, 19769 => 20984, 19770 => 31171, 19771 => 31361,
+19772 => 22270, 19773 => 24466, 19774 => 36884, 19775 => 28034, 19776 => 23648,
+19777 => 22303, 19778 => 21520, 19779 => 20820, 19780 => 28237, 19781 => 22242,
+19782 => 25512, 19783 => 39059, 19784 => 33151, 19785 => 34581, 19786 => 35114,
+19787 => 36864, 19788 => 21534, 19789 => 23663, 19790 => 33216, 19791 => 25302,
+19792 => 25176, 19793 => 33073, 19794 => 40501, 19795 => 38464, 19796 => 39534,
+19797 => 39548, 19798 => 26925, 19799 => 22949, 19800 => 25299, 19801 => 21822,
+19802 => 25366, 19803 => 21703, 19804 => 34521, 19805 => 27964, 19806 => 23043,
+19807 => 29926, 19808 => 34972, 19809 => 27498, 19810 => 22806, 19811 => 35916,
+19812 => 24367, 19813 => 28286, 19814 => 29609, 19815 => 39037, 19816 => 20024,
+19817 => 28919, 19818 => 23436, 19819 => 30871, 19820 => 25405, 19821 => 26202,
+19822 => 30358, 19823 => 24779, 19824 => 23451, 19825 => 23113, 19826 => 19975,
+19827 => 33109, 19828 => 27754, 19829 => 29579, 19830 => 20129, 19831 => 26505,
+19832 => 32593, 19833 => 24448, 19834 => 26106, 19835 => 26395, 19836 => 24536,
+19837 => 22916, 19838 => 23041, 20001 => 24013, 20002 => 24494, 20003 => 21361,
+20004 => 38886, 20005 => 36829, 20006 => 26693, 20007 => 22260, 20008 => 21807,
+20009 => 24799, 20010 => 20026, 20011 => 28493, 20012 => 32500, 20013 => 33479,
+20014 => 33806, 20015 => 22996, 20016 => 20255, 20017 => 20266, 20018 => 23614,
+20019 => 32428, 20020 => 26410, 20021 => 34074, 20022 => 21619, 20023 => 30031,
+20024 => 32963, 20025 => 21890, 20026 => 39759, 20027 => 20301, 20028 => 28205,
+20029 => 35859, 20030 => 23561, 20031 => 24944, 20032 => 21355, 20033 => 30239,
+20034 => 28201, 20035 => 34442, 20036 => 25991, 20037 => 38395, 20038 => 32441,
+20039 => 21563, 20040 => 31283, 20041 => 32010, 20042 => 38382, 20043 => 21985,
+20044 => 32705, 20045 => 29934, 20046 => 25373, 20047 => 34583, 20048 => 28065,
+20049 => 31389, 20050 => 25105, 20051 => 26017, 20052 => 21351, 20053 => 25569,
+20054 => 27779, 20055 => 24043, 20056 => 21596, 20057 => 38056, 20058 => 20044,
+20059 => 27745, 20060 => 35820, 20061 => 23627, 20062 => 26080, 20063 => 33436,
+20064 => 26791, 20065 => 21566, 20066 => 21556, 20067 => 27595, 20068 => 27494,
+20069 => 20116, 20070 => 25410, 20071 => 21320, 20072 => 33310, 20073 => 20237,
+20074 => 20398, 20075 => 22366, 20076 => 25098, 20077 => 38654, 20078 => 26212,
+20079 => 29289, 20080 => 21247, 20081 => 21153, 20082 => 24735, 20083 => 35823,
+20084 => 26132, 20085 => 29081, 20086 => 26512, 20087 => 35199, 20088 => 30802,
+20089 => 30717, 20090 => 26224, 20091 => 22075, 20092 => 21560, 20093 => 38177,
+20094 => 29306, 20257 => 31232, 20258 => 24687, 20259 => 24076, 20260 => 24713,
+20261 => 33181, 20262 => 22805, 20263 => 24796, 20264 => 29060, 20265 => 28911,
+20266 => 28330, 20267 => 27728, 20268 => 29312, 20269 => 27268, 20270 => 34989,
+20271 => 24109, 20272 => 20064, 20273 => 23219, 20274 => 21916, 20275 => 38115,
+20276 => 27927, 20277 => 31995, 20278 => 38553, 20279 => 25103, 20280 => 32454,
+20281 => 30606, 20282 => 34430, 20283 => 21283, 20284 => 38686, 20285 => 36758,
+20286 => 26247, 20287 => 23777, 20288 => 20384, 20289 => 29421, 20290 => 19979,
+20291 => 21414, 20292 => 22799, 20293 => 21523, 20294 => 25472, 20295 => 38184,
+20296 => 20808, 20297 => 20185, 20298 => 40092, 20299 => 32420, 20300 => 21688,
+20301 => 36132, 20302 => 34900, 20303 => 33335, 20304 => 38386, 20305 => 28046,
+20306 => 24358, 20307 => 23244, 20308 => 26174, 20309 => 38505, 20310 => 29616,
+20311 => 29486, 20312 => 21439, 20313 => 33146, 20314 => 39301, 20315 => 32673,
+20316 => 23466, 20317 => 38519, 20318 => 38480, 20319 => 32447, 20320 => 30456,
+20321 => 21410, 20322 => 38262, 20323 => 39321, 20324 => 31665, 20325 => 35140,
+20326 => 28248, 20327 => 20065, 20328 => 32724, 20329 => 31077, 20330 => 35814,
+20331 => 24819, 20332 => 21709, 20333 => 20139, 20334 => 39033, 20335 => 24055,
+20336 => 27233, 20337 => 20687, 20338 => 21521, 20339 => 35937, 20340 => 33831,
+20341 => 30813, 20342 => 38660, 20343 => 21066, 20344 => 21742, 20345 => 22179,
+20346 => 38144, 20347 => 28040, 20348 => 23477, 20349 => 28102, 20350 => 26195,
+20513 => 23567, 20514 => 23389, 20515 => 26657, 20516 => 32918, 20517 => 21880,
+20518 => 31505, 20519 => 25928, 20520 => 26964, 20521 => 20123, 20522 => 27463,
+20523 => 34638, 20524 => 38795, 20525 => 21327, 20526 => 25375, 20527 => 25658,
+20528 => 37034, 20529 => 26012, 20530 => 32961, 20531 => 35856, 20532 => 20889,
+20533 => 26800, 20534 => 21368, 20535 => 34809, 20536 => 25032, 20537 => 27844,
+20538 => 27899, 20539 => 35874, 20540 => 23633, 20541 => 34218, 20542 => 33455,
+20543 => 38156, 20544 => 27427, 20545 => 36763, 20546 => 26032, 20547 => 24571,
+20548 => 24515, 20549 => 20449, 20550 => 34885, 20551 => 26143, 20552 => 33125,
+20553 => 29481, 20554 => 24826, 20555 => 20852, 20556 => 21009, 20557 => 22411,
+20558 => 24418, 20559 => 37026, 20560 => 34892, 20561 => 37266, 20562 => 24184,
+20563 => 26447, 20564 => 24615, 20565 => 22995, 20566 => 20804, 20567 => 20982,
+20568 => 33016, 20569 => 21256, 20570 => 27769, 20571 => 38596, 20572 => 29066,
+20573 => 20241, 20574 => 20462, 20575 => 32670, 20576 => 26429, 20577 => 21957,
+20578 => 38152, 20579 => 31168, 20580 => 34966, 20581 => 32483, 20582 => 22687,
+20583 => 25100, 20584 => 38656, 20585 => 34394, 20586 => 22040, 20587 => 39035,
+20588 => 24464, 20589 => 35768, 20590 => 33988, 20591 => 37207, 20592 => 21465,
+20593 => 26093, 20594 => 24207, 20595 => 30044, 20596 => 24676, 20597 => 32110,
+20598 => 23167, 20599 => 32490, 20600 => 32493, 20601 => 36713, 20602 => 21927,
+20603 => 23459, 20604 => 24748, 20605 => 26059, 20606 => 29572, 20769 => 36873,
+20770 => 30307, 20771 => 30505, 20772 => 32474, 20773 => 38772, 20774 => 34203,
+20775 => 23398, 20776 => 31348, 20777 => 38634, 20778 => 34880, 20779 => 21195,
+20780 => 29071, 20781 => 24490, 20782 => 26092, 20783 => 35810, 20784 => 23547,
+20785 => 39535, 20786 => 24033, 20787 => 27529, 20788 => 27739, 20789 => 35757,
+20790 => 35759, 20791 => 36874, 20792 => 36805, 20793 => 21387, 20794 => 25276,
+20795 => 40486, 20796 => 40493, 20797 => 21568, 20798 => 20011, 20799 => 33469,
+20800 => 29273, 20801 => 34460, 20802 => 23830, 20803 => 34905, 20804 => 28079,
+20805 => 38597, 20806 => 21713, 20807 => 20122, 20808 => 35766, 20809 => 28937,
+20810 => 21693, 20811 => 38409, 20812 => 28895, 20813 => 28153, 20814 => 30416,
+20815 => 20005, 20816 => 30740, 20817 => 34578, 20818 => 23721, 20819 => 24310,
+20820 => 35328, 20821 => 39068, 20822 => 38414, 20823 => 28814, 20824 => 27839,
+20825 => 22852, 20826 => 25513, 20827 => 30524, 20828 => 34893, 20829 => 28436,
+20830 => 33395, 20831 => 22576, 20832 => 29141, 20833 => 21388, 20834 => 30746,
+20835 => 38593, 20836 => 21761, 20837 => 24422, 20838 => 28976, 20839 => 23476,
+20840 => 35866, 20841 => 39564, 20842 => 27523, 20843 => 22830, 20844 => 40495,
+20845 => 31207, 20846 => 26472, 20847 => 25196, 20848 => 20335, 20849 => 30113,
+20850 => 32650, 20851 => 27915, 20852 => 38451, 20853 => 27687, 20854 => 20208,
+20855 => 30162, 20856 => 20859, 20857 => 26679, 20858 => 28478, 20859 => 36992,
+20860 => 33136, 20861 => 22934, 20862 => 29814, 21025 => 25671, 21026 => 23591,
+21027 => 36965, 21028 => 31377, 21029 => 35875, 21030 => 23002, 21031 => 21676,
+21032 => 33280, 21033 => 33647, 21034 => 35201, 21035 => 32768, 21036 => 26928,
+21037 => 22094, 21038 => 32822, 21039 => 29239, 21040 => 37326, 21041 => 20918,
+21042 => 20063, 21043 => 39029, 21044 => 25494, 21045 => 19994, 21046 => 21494,
+21047 => 26355, 21048 => 33099, 21049 => 22812, 21050 => 28082, 21051 => 19968,
+21052 => 22777, 21053 => 21307, 21054 => 25558, 21055 => 38129, 21056 => 20381,
+21057 => 20234, 21058 => 34915, 21059 => 39056, 21060 => 22839, 21061 => 36951,
+21062 => 31227, 21063 => 20202, 21064 => 33008, 21065 => 30097, 21066 => 27778,
+21067 => 23452, 21068 => 23016, 21069 => 24413, 21070 => 26885, 21071 => 34433,
+21072 => 20506, 21073 => 24050, 21074 => 20057, 21075 => 30691, 21076 => 20197,
+21077 => 33402, 21078 => 25233, 21079 => 26131, 21080 => 37009, 21081 => 23673,
+21082 => 20159, 21083 => 24441, 21084 => 33222, 21085 => 36920, 21086 => 32900,
+21087 => 30123, 21088 => 20134, 21089 => 35028, 21090 => 24847, 21091 => 27589,
+21092 => 24518, 21093 => 20041, 21094 => 30410, 21095 => 28322, 21096 => 35811,
+21097 => 35758, 21098 => 35850, 21099 => 35793, 21100 => 24322, 21101 => 32764,
+21102 => 32716, 21103 => 32462, 21104 => 33589, 21105 => 33643, 21106 => 22240,
+21107 => 27575, 21108 => 38899, 21109 => 38452, 21110 => 23035, 21111 => 21535,
+21112 => 38134, 21113 => 28139, 21114 => 23493, 21115 => 39278, 21116 => 23609,
+21117 => 24341, 21118 => 38544, 21281 => 21360, 21282 => 33521, 21283 => 27185,
+21284 => 23156, 21285 => 40560, 21286 => 24212, 21287 => 32552, 21288 => 33721,
+21289 => 33828, 21290 => 33829, 21291 => 33639, 21292 => 34631, 21293 => 36814,
+21294 => 36194, 21295 => 30408, 21296 => 24433, 21297 => 39062, 21298 => 30828,
+21299 => 26144, 21300 => 21727, 21301 => 25317, 21302 => 20323, 21303 => 33219,
+21304 => 30152, 21305 => 24248, 21306 => 38605, 21307 => 36362, 21308 => 34553,
+21309 => 21647, 21310 => 27891, 21311 => 28044, 21312 => 27704, 21313 => 24703,
+21314 => 21191, 21315 => 29992, 21316 => 24189, 21317 => 20248, 21318 => 24736,
+21319 => 24551, 21320 => 23588, 21321 => 30001, 21322 => 37038, 21323 => 38080,
+21324 => 29369, 21325 => 27833, 21326 => 28216, 21327 => 37193, 21328 => 26377,
+21329 => 21451, 21330 => 21491, 21331 => 20305, 21332 => 37321, 21333 => 35825,
+21334 => 21448, 21335 => 24188, 21336 => 36802, 21337 => 28132, 21338 => 20110,
+21339 => 30402, 21340 => 27014, 21341 => 34398, 21342 => 24858, 21343 => 33286,
+21344 => 20313, 21345 => 20446, 21346 => 36926, 21347 => 40060, 21348 => 24841,
+21349 => 28189, 21350 => 28180, 21351 => 38533, 21352 => 20104, 21353 => 23089,
+21354 => 38632, 21355 => 19982, 21356 => 23679, 21357 => 31161, 21358 => 23431,
+21359 => 35821, 21360 => 32701, 21361 => 29577, 21362 => 22495, 21363 => 33419,
+21364 => 37057, 21365 => 21505, 21366 => 36935, 21367 => 21947, 21368 => 23786,
+21369 => 24481, 21370 => 24840, 21371 => 27442, 21372 => 29425, 21373 => 32946,
+21374 => 35465, 21537 => 28020, 21538 => 23507, 21539 => 35029, 21540 => 39044,
+21541 => 35947, 21542 => 39533, 21543 => 40499, 21544 => 28170, 21545 => 20900,
+21546 => 20803, 21547 => 22435, 21548 => 34945, 21549 => 21407, 21550 => 25588,
+21551 => 36757, 21552 => 22253, 21553 => 21592, 21554 => 22278, 21555 => 29503,
+21556 => 28304, 21557 => 32536, 21558 => 36828, 21559 => 33489, 21560 => 24895,
+21561 => 24616, 21562 => 38498, 21563 => 26352, 21564 => 32422, 21565 => 36234,
+21566 => 36291, 21567 => 38053, 21568 => 23731, 21569 => 31908, 21570 => 26376,
+21571 => 24742, 21572 => 38405, 21573 => 32792, 21574 => 20113, 21575 => 37095,
+21576 => 21248, 21577 => 38504, 21578 => 20801, 21579 => 36816, 21580 => 34164,
+21581 => 37213, 21582 => 26197, 21583 => 38901, 21584 => 23381, 21585 => 21277,
+21586 => 30776, 21587 => 26434, 21588 => 26685, 21589 => 21705, 21590 => 28798,
+21591 => 23472, 21592 => 36733, 21593 => 20877, 21594 => 22312, 21595 => 21681,
+21596 => 25874, 21597 => 26242, 21598 => 36190, 21599 => 36163, 21600 => 33039,
+21601 => 33900, 21602 => 36973, 21603 => 31967, 21604 => 20991, 21605 => 34299,
+21606 => 26531, 21607 => 26089, 21608 => 28577, 21609 => 34468, 21610 => 36481,
+21611 => 22122, 21612 => 36896, 21613 => 30338, 21614 => 28790, 21615 => 29157,
+21616 => 36131, 21617 => 25321, 21618 => 21017, 21619 => 27901, 21620 => 36156,
+21621 => 24590, 21622 => 22686, 21623 => 24974, 21624 => 26366, 21625 => 36192,
+21626 => 25166, 21627 => 21939, 21628 => 28195, 21629 => 26413, 21630 => 36711,
+21793 => 38113, 21794 => 38392, 21795 => 30504, 21796 => 26629, 21797 => 27048,
+21798 => 21643, 21799 => 20045, 21800 => 28856, 21801 => 35784, 21802 => 25688,
+21803 => 25995, 21804 => 23429, 21805 => 31364, 21806 => 20538, 21807 => 23528,
+21808 => 30651, 21809 => 27617, 21810 => 35449, 21811 => 31896, 21812 => 27838,
+21813 => 30415, 21814 => 26025, 21815 => 36759, 21816 => 23853, 21817 => 23637,
+21818 => 34360, 21819 => 26632, 21820 => 21344, 21821 => 25112, 21822 => 31449,
+21823 => 28251, 21824 => 32509, 21825 => 27167, 21826 => 31456, 21827 => 24432,
+21828 => 28467, 21829 => 24352, 21830 => 25484, 21831 => 28072, 21832 => 26454,
+21833 => 19976, 21834 => 24080, 21835 => 36134, 21836 => 20183, 21837 => 32960,
+21838 => 30260, 21839 => 38556, 21840 => 25307, 21841 => 26157, 21842 => 25214,
+21843 => 27836, 21844 => 36213, 21845 => 29031, 21846 => 32617, 21847 => 20806,
+21848 => 32903, 21849 => 21484, 21850 => 36974, 21851 => 25240, 21852 => 21746,
+21853 => 34544, 21854 => 36761, 21855 => 32773, 21856 => 38167, 21857 => 34071,
+21858 => 36825, 21859 => 27993, 21860 => 29645, 21861 => 26015, 21862 => 30495,
+21863 => 29956, 21864 => 30759, 21865 => 33275, 21866 => 36126, 21867 => 38024,
+21868 => 20390, 21869 => 26517, 21870 => 30137, 21871 => 35786, 21872 => 38663,
+21873 => 25391, 21874 => 38215, 21875 => 38453, 21876 => 33976, 21877 => 25379,
+21878 => 30529, 21879 => 24449, 21880 => 29424, 21881 => 20105, 21882 => 24596,
+21883 => 25972, 21884 => 25327, 21885 => 27491, 21886 => 25919, 22049 => 24103,
+22050 => 30151, 22051 => 37073, 22052 => 35777, 22053 => 33437, 22054 => 26525,
+22055 => 25903, 22056 => 21553, 22057 => 34584, 22058 => 30693, 22059 => 32930,
+22060 => 33026, 22061 => 27713, 22062 => 20043, 22063 => 32455, 22064 => 32844,
+22065 => 30452, 22066 => 26893, 22067 => 27542, 22068 => 25191, 22069 => 20540,
+22070 => 20356, 22071 => 22336, 22072 => 25351, 22073 => 27490, 22074 => 36286,
+22075 => 21482, 22076 => 26088, 22077 => 32440, 22078 => 24535, 22079 => 25370,
+22080 => 25527, 22081 => 33267, 22082 => 33268, 22083 => 32622, 22084 => 24092,
+22085 => 23769, 22086 => 21046, 22087 => 26234, 22088 => 31209, 22089 => 31258,
+22090 => 36136, 22091 => 28825, 22092 => 30164, 22093 => 28382, 22094 => 27835,
+22095 => 31378, 22096 => 20013, 22097 => 30405, 22098 => 24544, 22099 => 38047,
+22100 => 34935, 22101 => 32456, 22102 => 31181, 22103 => 32959, 22104 => 37325,
+22105 => 20210, 22106 => 20247, 22107 => 33311, 22108 => 21608, 22109 => 24030,
+22110 => 27954, 22111 => 35788, 22112 => 31909, 22113 => 36724, 22114 => 32920,
+22115 => 24090, 22116 => 21650, 22117 => 30385, 22118 => 23449, 22119 => 26172,
+22120 => 39588, 22121 => 29664, 22122 => 26666, 22123 => 34523, 22124 => 26417,
+22125 => 29482, 22126 => 35832, 22127 => 35803, 22128 => 36880, 22129 => 31481,
+22130 => 28891, 22131 => 29038, 22132 => 25284, 22133 => 30633, 22134 => 22065,
+22135 => 20027, 22136 => 33879, 22137 => 26609, 22138 => 21161, 22139 => 34496,
+22140 => 36142, 22141 => 38136, 22142 => 31569, 22305 => 20303, 22306 => 27880,
+22307 => 31069, 22308 => 39547, 22309 => 25235, 22310 => 29226, 22311 => 25341,
+22312 => 19987, 22313 => 30742, 22314 => 36716, 22315 => 25776, 22316 => 36186,
+22317 => 31686, 22318 => 26729, 22319 => 24196, 22320 => 35013, 22321 => 22918,
+22322 => 25758, 22323 => 22766, 22324 => 29366, 22325 => 26894, 22326 => 38181,
+22327 => 36861, 22328 => 36184, 22329 => 22368, 22330 => 32512, 22331 => 35846,
+22332 => 20934, 22333 => 25417, 22334 => 25305, 22335 => 21331, 22336 => 26700,
+22337 => 29730, 22338 => 33537, 22339 => 37196, 22340 => 21828, 22341 => 30528,
+22342 => 28796, 22343 => 27978, 22344 => 20857, 22345 => 21672, 22346 => 36164,
+22347 => 23039, 22348 => 28363, 22349 => 28100, 22350 => 23388, 22351 => 32043,
+22352 => 20180, 22353 => 31869, 22354 => 28371, 22355 => 23376, 22356 => 33258,
+22357 => 28173, 22358 => 23383, 22359 => 39683, 22360 => 26837, 22361 => 36394,
+22362 => 23447, 22363 => 32508, 22364 => 24635, 22365 => 32437, 22366 => 37049,
+22367 => 36208, 22368 => 22863, 22369 => 25549, 22370 => 31199, 22371 => 36275,
+22372 => 21330, 22373 => 26063, 22374 => 31062, 22375 => 35781, 22376 => 38459,
+22377 => 32452, 22378 => 38075, 22379 => 32386, 22380 => 22068, 22381 => 37257,
+22382 => 26368, 22383 => 32618, 22384 => 23562, 22385 => 36981, 22386 => 26152,
+22387 => 24038, 22388 => 20304, 22389 => 26590, 22390 => 20570, 22391 => 20316,
+22392 => 22352, 22393 => 24231, 22561 => 20109, 22562 => 19980, 22563 => 20800,
+22564 => 19984, 22565 => 24319, 22566 => 21317, 22567 => 19989, 22568 => 20120,
+22569 => 19998, 22570 => 39730, 22571 => 23404, 22572 => 22121, 22573 => 20008,
+22574 => 31162, 22575 => 20031, 22576 => 21269, 22577 => 20039, 22578 => 22829,
+22579 => 29243, 22580 => 21358, 22581 => 27664, 22582 => 22239, 22583 => 32996,
+22584 => 39319, 22585 => 27603, 22586 => 30590, 22587 => 40727, 22588 => 20022,
+22589 => 20127, 22590 => 40720, 22591 => 20060, 22592 => 20073, 22593 => 20115,
+22594 => 33416, 22595 => 23387, 22596 => 21868, 22597 => 22031, 22598 => 20164,
+22599 => 21389, 22600 => 21405, 22601 => 21411, 22602 => 21413, 22603 => 21422,
+22604 => 38757, 22605 => 36189, 22606 => 21274, 22607 => 21493, 22608 => 21286,
+22609 => 21294, 22610 => 21310, 22611 => 36188, 22612 => 21350, 22613 => 21347,
+22614 => 20994, 22615 => 21000, 22616 => 21006, 22617 => 21037, 22618 => 21043,
+22619 => 21055, 22620 => 21056, 22621 => 21068, 22622 => 21086, 22623 => 21089,
+22624 => 21084, 22625 => 33967, 22626 => 21117, 22627 => 21122, 22628 => 21121,
+22629 => 21136, 22630 => 21139, 22631 => 20866, 22632 => 32596, 22633 => 20155,
+22634 => 20163, 22635 => 20169, 22636 => 20162, 22637 => 20200, 22638 => 20193,
+22639 => 20203, 22640 => 20190, 22641 => 20251, 22642 => 20211, 22643 => 20258,
+22644 => 20324, 22645 => 20213, 22646 => 20261, 22647 => 20263, 22648 => 20233,
+22649 => 20267, 22650 => 20318, 22651 => 20327, 22652 => 25912, 22653 => 20314,
+22654 => 20317, 22817 => 20319, 22818 => 20311, 22819 => 20274, 22820 => 20285,
+22821 => 20342, 22822 => 20340, 22823 => 20369, 22824 => 20361, 22825 => 20355,
+22826 => 20367, 22827 => 20350, 22828 => 20347, 22829 => 20394, 22830 => 20348,
+22831 => 20396, 22832 => 20372, 22833 => 20454, 22834 => 20456, 22835 => 20458,
+22836 => 20421, 22837 => 20442, 22838 => 20451, 22839 => 20444, 22840 => 20433,
+22841 => 20447, 22842 => 20472, 22843 => 20521, 22844 => 20556, 22845 => 20467,
+22846 => 20524, 22847 => 20495, 22848 => 20526, 22849 => 20525, 22850 => 20478,
+22851 => 20508, 22852 => 20492, 22853 => 20517, 22854 => 20520, 22855 => 20606,
+22856 => 20547, 22857 => 20565, 22858 => 20552, 22859 => 20558, 22860 => 20588,
+22861 => 20603, 22862 => 20645, 22863 => 20647, 22864 => 20649, 22865 => 20666,
+22866 => 20694, 22867 => 20742, 22868 => 20717, 22869 => 20716, 22870 => 20710,
+22871 => 20718, 22872 => 20743, 22873 => 20747, 22874 => 20189, 22875 => 27709,
+22876 => 20312, 22877 => 20325, 22878 => 20430, 22879 => 40864, 22880 => 27718,
+22881 => 31860, 22882 => 20846, 22883 => 24061, 22884 => 40649, 22885 => 39320,
+22886 => 20865, 22887 => 22804, 22888 => 21241, 22889 => 21261, 22890 => 35335,
+22891 => 21264, 22892 => 20971, 22893 => 22809, 22894 => 20821, 22895 => 20128,
+22896 => 20822, 22897 => 20147, 22898 => 34926, 22899 => 34980, 22900 => 20149,
+22901 => 33044, 22902 => 35026, 22903 => 31104, 22904 => 23348, 22905 => 34819,
+22906 => 32696, 22907 => 20907, 22908 => 20913, 22909 => 20925, 22910 => 20924,
+23073 => 20935, 23074 => 20886, 23075 => 20898, 23076 => 20901, 23077 => 35744,
+23078 => 35750, 23079 => 35751, 23080 => 35754, 23081 => 35764, 23082 => 35765,
+23083 => 35767, 23084 => 35778, 23085 => 35779, 23086 => 35787, 23087 => 35791,
+23088 => 35790, 23089 => 35794, 23090 => 35795, 23091 => 35796, 23092 => 35798,
+23093 => 35800, 23094 => 35801, 23095 => 35804, 23096 => 35807, 23097 => 35808,
+23098 => 35812, 23099 => 35816, 23100 => 35817, 23101 => 35822, 23102 => 35824,
+23103 => 35827, 23104 => 35830, 23105 => 35833, 23106 => 35836, 23107 => 35839,
+23108 => 35840, 23109 => 35842, 23110 => 35844, 23111 => 35847, 23112 => 35852,
+23113 => 35855, 23114 => 35857, 23115 => 35858, 23116 => 35860, 23117 => 35861,
+23118 => 35862, 23119 => 35865, 23120 => 35867, 23121 => 35864, 23122 => 35869,
+23123 => 35871, 23124 => 35872, 23125 => 35873, 23126 => 35877, 23127 => 35879,
+23128 => 35882, 23129 => 35883, 23130 => 35886, 23131 => 35887, 23132 => 35890,
+23133 => 35891, 23134 => 35893, 23135 => 35894, 23136 => 21353, 23137 => 21370,
+23138 => 38429, 23139 => 38434, 23140 => 38433, 23141 => 38449, 23142 => 38442,
+23143 => 38461, 23144 => 38460, 23145 => 38466, 23146 => 38473, 23147 => 38484,
+23148 => 38495, 23149 => 38503, 23150 => 38508, 23151 => 38514, 23152 => 38516,
+23153 => 38536, 23154 => 38541, 23155 => 38551, 23156 => 38576, 23157 => 37015,
+23158 => 37019, 23159 => 37021, 23160 => 37017, 23161 => 37036, 23162 => 37025,
+23163 => 37044, 23164 => 37043, 23165 => 37046, 23166 => 37050, 23329 => 37048,
+23330 => 37040, 23331 => 37071, 23332 => 37061, 23333 => 37054, 23334 => 37072,
+23335 => 37060, 23336 => 37063, 23337 => 37075, 23338 => 37094, 23339 => 37090,
+23340 => 37084, 23341 => 37079, 23342 => 37083, 23343 => 37099, 23344 => 37103,
+23345 => 37118, 23346 => 37124, 23347 => 37154, 23348 => 37150, 23349 => 37155,
+23350 => 37169, 23351 => 37167, 23352 => 37177, 23353 => 37187, 23354 => 37190,
+23355 => 21005, 23356 => 22850, 23357 => 21154, 23358 => 21164, 23359 => 21165,
+23360 => 21182, 23361 => 21759, 23362 => 21200, 23363 => 21206, 23364 => 21232,
+23365 => 21471, 23366 => 29166, 23367 => 30669, 23368 => 24308, 23369 => 20981,
+23370 => 20988, 23371 => 39727, 23372 => 21430, 23373 => 24321, 23374 => 30042,
+23375 => 24047, 23376 => 22348, 23377 => 22441, 23378 => 22433, 23379 => 22654,
+23380 => 22716, 23381 => 22725, 23382 => 22737, 23383 => 22313, 23384 => 22316,
+23385 => 22314, 23386 => 22323, 23387 => 22329, 23388 => 22318, 23389 => 22319,
+23390 => 22364, 23391 => 22331, 23392 => 22338, 23393 => 22377, 23394 => 22405,
+23395 => 22379, 23396 => 22406, 23397 => 22396, 23398 => 22395, 23399 => 22376,
+23400 => 22381, 23401 => 22390, 23402 => 22387, 23403 => 22445, 23404 => 22436,
+23405 => 22412, 23406 => 22450, 23407 => 22479, 23408 => 22439, 23409 => 22452,
+23410 => 22419, 23411 => 22432, 23412 => 22485, 23413 => 22488, 23414 => 22490,
+23415 => 22489, 23416 => 22482, 23417 => 22456, 23418 => 22516, 23419 => 22511,
+23420 => 22520, 23421 => 22500, 23422 => 22493, 23585 => 22539, 23586 => 22541,
+23587 => 22525, 23588 => 22509, 23589 => 22528, 23590 => 22558, 23591 => 22553,
+23592 => 22596, 23593 => 22560, 23594 => 22629, 23595 => 22636, 23596 => 22657,
+23597 => 22665, 23598 => 22682, 23599 => 22656, 23600 => 39336, 23601 => 40729,
+23602 => 25087, 23603 => 33401, 23604 => 33405, 23605 => 33407, 23606 => 33423,
+23607 => 33418, 23608 => 33448, 23609 => 33412, 23610 => 33422, 23611 => 33425,
+23612 => 33431, 23613 => 33433, 23614 => 33451, 23615 => 33464, 23616 => 33470,
+23617 => 33456, 23618 => 33480, 23619 => 33482, 23620 => 33507, 23621 => 33432,
+23622 => 33463, 23623 => 33454, 23624 => 33483, 23625 => 33484, 23626 => 33473,
+23627 => 33449, 23628 => 33460, 23629 => 33441, 23630 => 33450, 23631 => 33439,
+23632 => 33476, 23633 => 33486, 23634 => 33444, 23635 => 33505, 23636 => 33545,
+23637 => 33527, 23638 => 33508, 23639 => 33551, 23640 => 33543, 23641 => 33500,
+23642 => 33524, 23643 => 33490, 23644 => 33496, 23645 => 33548, 23646 => 33531,
+23647 => 33491, 23648 => 33553, 23649 => 33562, 23650 => 33542, 23651 => 33556,
+23652 => 33557, 23653 => 33504, 23654 => 33493, 23655 => 33564, 23656 => 33617,
+23657 => 33627, 23658 => 33628, 23659 => 33544, 23660 => 33682, 23661 => 33596,
+23662 => 33588, 23663 => 33585, 23664 => 33691, 23665 => 33630, 23666 => 33583,
+23667 => 33615, 23668 => 33607, 23669 => 33603, 23670 => 33631, 23671 => 33600,
+23672 => 33559, 23673 => 33632, 23674 => 33581, 23675 => 33594, 23676 => 33587,
+23677 => 33638, 23678 => 33637, 23841 => 33640, 23842 => 33563, 23843 => 33641,
+23844 => 33644, 23845 => 33642, 23846 => 33645, 23847 => 33646, 23848 => 33712,
+23849 => 33656, 23850 => 33715, 23851 => 33716, 23852 => 33696, 23853 => 33706,
+23854 => 33683, 23855 => 33692, 23856 => 33669, 23857 => 33660, 23858 => 33718,
+23859 => 33705, 23860 => 33661, 23861 => 33720, 23862 => 33659, 23863 => 33688,
+23864 => 33694, 23865 => 33704, 23866 => 33722, 23867 => 33724, 23868 => 33729,
+23869 => 33793, 23870 => 33765, 23871 => 33752, 23872 => 22535, 23873 => 33816,
+23874 => 33803, 23875 => 33757, 23876 => 33789, 23877 => 33750, 23878 => 33820,
+23879 => 33848, 23880 => 33809, 23881 => 33798, 23882 => 33748, 23883 => 33759,
+23884 => 33807, 23885 => 33795, 23886 => 33784, 23887 => 33785, 23888 => 33770,
+23889 => 33733, 23890 => 33728, 23891 => 33830, 23892 => 33776, 23893 => 33761,
+23894 => 33884, 23895 => 33873, 23896 => 33882, 23897 => 33881, 23898 => 33907,
+23899 => 33927, 23900 => 33928, 23901 => 33914, 23902 => 33929, 23903 => 33912,
+23904 => 33852, 23905 => 33862, 23906 => 33897, 23907 => 33910, 23908 => 33932,
+23909 => 33934, 23910 => 33841, 23911 => 33901, 23912 => 33985, 23913 => 33997,
+23914 => 34000, 23915 => 34022, 23916 => 33981, 23917 => 34003, 23918 => 33994,
+23919 => 33983, 23920 => 33978, 23921 => 34016, 23922 => 33953, 23923 => 33977,
+23924 => 33972, 23925 => 33943, 23926 => 34021, 23927 => 34019, 23928 => 34060,
+23929 => 29965, 23930 => 34104, 23931 => 34032, 23932 => 34105, 23933 => 34079,
+23934 => 34106, 24097 => 34134, 24098 => 34107, 24099 => 34047, 24100 => 34044,
+24101 => 34137, 24102 => 34120, 24103 => 34152, 24104 => 34148, 24105 => 34142,
+24106 => 34170, 24107 => 30626, 24108 => 34115, 24109 => 34162, 24110 => 34171,
+24111 => 34212, 24112 => 34216, 24113 => 34183, 24114 => 34191, 24115 => 34169,
+24116 => 34222, 24117 => 34204, 24118 => 34181, 24119 => 34233, 24120 => 34231,
+24121 => 34224, 24122 => 34259, 24123 => 34241, 24124 => 34268, 24125 => 34303,
+24126 => 34343, 24127 => 34309, 24128 => 34345, 24129 => 34326, 24130 => 34364,
+24131 => 24318, 24132 => 24328, 24133 => 22844, 24134 => 22849, 24135 => 32823,
+24136 => 22869, 24137 => 22874, 24138 => 22872, 24139 => 21263, 24140 => 23586,
+24141 => 23589, 24142 => 23596, 24143 => 23604, 24144 => 25164, 24145 => 25194,
+24146 => 25247, 24147 => 25275, 24148 => 25290, 24149 => 25306, 24150 => 25303,
+24151 => 25326, 24152 => 25378, 24153 => 25334, 24154 => 25401, 24155 => 25419,
+24156 => 25411, 24157 => 25517, 24158 => 25590, 24159 => 25457, 24160 => 25466,
+24161 => 25486, 24162 => 25524, 24163 => 25453, 24164 => 25516, 24165 => 25482,
+24166 => 25449, 24167 => 25518, 24168 => 25532, 24169 => 25586, 24170 => 25592,
+24171 => 25568, 24172 => 25599, 24173 => 25540, 24174 => 25566, 24175 => 25550,
+24176 => 25682, 24177 => 25542, 24178 => 25534, 24179 => 25669, 24180 => 25665,
+24181 => 25611, 24182 => 25627, 24183 => 25632, 24184 => 25612, 24185 => 25638,
+24186 => 25633, 24187 => 25694, 24188 => 25732, 24189 => 25709, 24190 => 25750,
+24353 => 25722, 24354 => 25783, 24355 => 25784, 24356 => 25753, 24357 => 25786,
+24358 => 25792, 24359 => 25808, 24360 => 25815, 24361 => 25828, 24362 => 25826,
+24363 => 25865, 24364 => 25893, 24365 => 25902, 24366 => 24331, 24367 => 24530,
+24368 => 29977, 24369 => 24337, 24370 => 21343, 24371 => 21489, 24372 => 21501,
+24373 => 21481, 24374 => 21480, 24375 => 21499, 24376 => 21522, 24377 => 21526,
+24378 => 21510, 24379 => 21579, 24380 => 21586, 24381 => 21587, 24382 => 21588,
+24383 => 21590, 24384 => 21571, 24385 => 21537, 24386 => 21591, 24387 => 21593,
+24388 => 21539, 24389 => 21554, 24390 => 21634, 24391 => 21652, 24392 => 21623,
+24393 => 21617, 24394 => 21604, 24395 => 21658, 24396 => 21659, 24397 => 21636,
+24398 => 21622, 24399 => 21606, 24400 => 21661, 24401 => 21712, 24402 => 21677,
+24403 => 21698, 24404 => 21684, 24405 => 21714, 24406 => 21671, 24407 => 21670,
+24408 => 21715, 24409 => 21716, 24410 => 21618, 24411 => 21667, 24412 => 21717,
+24413 => 21691, 24414 => 21695, 24415 => 21708, 24416 => 21721, 24417 => 21722,
+24418 => 21724, 24419 => 21673, 24420 => 21674, 24421 => 21668, 24422 => 21725,
+24423 => 21711, 24424 => 21726, 24425 => 21787, 24426 => 21735, 24427 => 21792,
+24428 => 21757, 24429 => 21780, 24430 => 21747, 24431 => 21794, 24432 => 21795,
+24433 => 21775, 24434 => 21777, 24435 => 21799, 24436 => 21802, 24437 => 21863,
+24438 => 21903, 24439 => 21941, 24440 => 21833, 24441 => 21869, 24442 => 21825,
+24443 => 21845, 24444 => 21823, 24445 => 21840, 24446 => 21820, 24609 => 21815,
+24610 => 21846, 24611 => 21877, 24612 => 21878, 24613 => 21879, 24614 => 21811,
+24615 => 21808, 24616 => 21852, 24617 => 21899, 24618 => 21970, 24619 => 21891,
+24620 => 21937, 24621 => 21945, 24622 => 21896, 24623 => 21889, 24624 => 21919,
+24625 => 21886, 24626 => 21974, 24627 => 21905, 24628 => 21883, 24629 => 21983,
+24630 => 21949, 24631 => 21950, 24632 => 21908, 24633 => 21913, 24634 => 21994,
+24635 => 22007, 24636 => 21961, 24637 => 22047, 24638 => 21969, 24639 => 21995,
+24640 => 21996, 24641 => 21972, 24642 => 21990, 24643 => 21981, 24644 => 21956,
+24645 => 21999, 24646 => 21989, 24647 => 22002, 24648 => 22003, 24649 => 21964,
+24650 => 21965, 24651 => 21992, 24652 => 22005, 24653 => 21988, 24654 => 36756,
+24655 => 22046, 24656 => 22024, 24657 => 22028, 24658 => 22017, 24659 => 22052,
+24660 => 22051, 24661 => 22014, 24662 => 22016, 24663 => 22055, 24664 => 22061,
+24665 => 22104, 24666 => 22073, 24667 => 22103, 24668 => 22060, 24669 => 22093,
+24670 => 22114, 24671 => 22105, 24672 => 22108, 24673 => 22092, 24674 => 22100,
+24675 => 22150, 24676 => 22116, 24677 => 22129, 24678 => 22123, 24679 => 22139,
+24680 => 22140, 24681 => 22149, 24682 => 22163, 24683 => 22191, 24684 => 22228,
+24685 => 22231, 24686 => 22237, 24687 => 22241, 24688 => 22261, 24689 => 22251,
+24690 => 22265, 24691 => 22271, 24692 => 22276, 24693 => 22282, 24694 => 22281,
+24695 => 22300, 24696 => 24079, 24697 => 24089, 24698 => 24084, 24699 => 24081,
+24700 => 24113, 24701 => 24123, 24702 => 24124, 24865 => 24119, 24866 => 24132,
+24867 => 24148, 24868 => 24155, 24869 => 24158, 24870 => 24161, 24871 => 23692,
+24872 => 23674, 24873 => 23693, 24874 => 23696, 24875 => 23702, 24876 => 23688,
+24877 => 23704, 24878 => 23705, 24879 => 23697, 24880 => 23706, 24881 => 23708,
+24882 => 23733, 24883 => 23714, 24884 => 23741, 24885 => 23724, 24886 => 23723,
+24887 => 23729, 24888 => 23715, 24889 => 23745, 24890 => 23735, 24891 => 23748,
+24892 => 23762, 24893 => 23780, 24894 => 23755, 24895 => 23781, 24896 => 23810,
+24897 => 23811, 24898 => 23847, 24899 => 23846, 24900 => 23854, 24901 => 23844,
+24902 => 23838, 24903 => 23814, 24904 => 23835, 24905 => 23896, 24906 => 23870,
+24907 => 23860, 24908 => 23869, 24909 => 23916, 24910 => 23899, 24911 => 23919,
+24912 => 23901, 24913 => 23915, 24914 => 23883, 24915 => 23882, 24916 => 23913,
+24917 => 23924, 24918 => 23938, 24919 => 23961, 24920 => 23965, 24921 => 35955,
+24922 => 23991, 24923 => 24005, 24924 => 24435, 24925 => 24439, 24926 => 24450,
+24927 => 24455, 24928 => 24457, 24929 => 24460, 24930 => 24469, 24931 => 24473,
+24932 => 24476, 24933 => 24488, 24934 => 24493, 24935 => 24501, 24936 => 24508,
+24937 => 34914, 24938 => 24417, 24939 => 29357, 24940 => 29360, 24941 => 29364,
+24942 => 29367, 24943 => 29368, 24944 => 29379, 24945 => 29377, 24946 => 29390,
+24947 => 29389, 24948 => 29394, 24949 => 29416, 24950 => 29423, 24951 => 29417,
+24952 => 29426, 24953 => 29428, 24954 => 29431, 24955 => 29441, 24956 => 29427,
+24957 => 29443, 24958 => 29434, 25121 => 29435, 25122 => 29463, 25123 => 29459,
+25124 => 29473, 25125 => 29450, 25126 => 29470, 25127 => 29469, 25128 => 29461,
+25129 => 29474, 25130 => 29497, 25131 => 29477, 25132 => 29484, 25133 => 29496,
+25134 => 29489, 25135 => 29520, 25136 => 29517, 25137 => 29527, 25138 => 29536,
+25139 => 29548, 25140 => 29551, 25141 => 29566, 25142 => 33307, 25143 => 22821,
+25144 => 39143, 25145 => 22820, 25146 => 22786, 25147 => 39267, 25148 => 39271,
+25149 => 39272, 25150 => 39273, 25151 => 39274, 25152 => 39275, 25153 => 39276,
+25154 => 39284, 25155 => 39287, 25156 => 39293, 25157 => 39296, 25158 => 39300,
+25159 => 39303, 25160 => 39306, 25161 => 39309, 25162 => 39312, 25163 => 39313,
+25164 => 39315, 25165 => 39316, 25166 => 39317, 25167 => 24192, 25168 => 24209,
+25169 => 24203, 25170 => 24214, 25171 => 24229, 25172 => 24224, 25173 => 24249,
+25174 => 24245, 25175 => 24254, 25176 => 24243, 25177 => 36179, 25178 => 24274,
+25179 => 24273, 25180 => 24283, 25181 => 24296, 25182 => 24298, 25183 => 33210,
+25184 => 24516, 25185 => 24521, 25186 => 24534, 25187 => 24527, 25188 => 24579,
+25189 => 24558, 25190 => 24580, 25191 => 24545, 25192 => 24548, 25193 => 24574,
+25194 => 24581, 25195 => 24582, 25196 => 24554, 25197 => 24557, 25198 => 24568,
+25199 => 24601, 25200 => 24629, 25201 => 24614, 25202 => 24603, 25203 => 24591,
+25204 => 24589, 25205 => 24617, 25206 => 24619, 25207 => 24586, 25208 => 24639,
+25209 => 24609, 25210 => 24696, 25211 => 24697, 25212 => 24699, 25213 => 24698,
+25214 => 24642, 25377 => 24682, 25378 => 24701, 25379 => 24726, 25380 => 24730,
+25381 => 24749, 25382 => 24733, 25383 => 24707, 25384 => 24722, 25385 => 24716,
+25386 => 24731, 25387 => 24812, 25388 => 24763, 25389 => 24753, 25390 => 24797,
+25391 => 24792, 25392 => 24774, 25393 => 24794, 25394 => 24756, 25395 => 24864,
+25396 => 24870, 25397 => 24853, 25398 => 24867, 25399 => 24820, 25400 => 24832,
+25401 => 24846, 25402 => 24875, 25403 => 24906, 25404 => 24949, 25405 => 25004,
+25406 => 24980, 25407 => 24999, 25408 => 25015, 25409 => 25044, 25410 => 25077,
+25411 => 24541, 25412 => 38579, 25413 => 38377, 25414 => 38379, 25415 => 38385,
+25416 => 38387, 25417 => 38389, 25418 => 38390, 25419 => 38396, 25420 => 38398,
+25421 => 38403, 25422 => 38404, 25423 => 38406, 25424 => 38408, 25425 => 38410,
+25426 => 38411, 25427 => 38412, 25428 => 38413, 25429 => 38415, 25430 => 38418,
+25431 => 38421, 25432 => 38422, 25433 => 38423, 25434 => 38425, 25435 => 38426,
+25436 => 20012, 25437 => 29247, 25438 => 25109, 25439 => 27701, 25440 => 27732,
+25441 => 27740, 25442 => 27722, 25443 => 27811, 25444 => 27781, 25445 => 27792,
+25446 => 27796, 25447 => 27788, 25448 => 27752, 25449 => 27753, 25450 => 27764,
+25451 => 27766, 25452 => 27782, 25453 => 27817, 25454 => 27856, 25455 => 27860,
+25456 => 27821, 25457 => 27895, 25458 => 27896, 25459 => 27889, 25460 => 27863,
+25461 => 27826, 25462 => 27872, 25463 => 27862, 25464 => 27898, 25465 => 27883,
+25466 => 27886, 25467 => 27825, 25468 => 27859, 25469 => 27887, 25470 => 27902,
+25633 => 27961, 25634 => 27943, 25635 => 27916, 25636 => 27971, 25637 => 27976,
+25638 => 27911, 25639 => 27908, 25640 => 27929, 25641 => 27918, 25642 => 27947,
+25643 => 27981, 25644 => 27950, 25645 => 27957, 25646 => 27930, 25647 => 27983,
+25648 => 27986, 25649 => 27988, 25650 => 27955, 25651 => 28049, 25652 => 28015,
+25653 => 28062, 25654 => 28064, 25655 => 27998, 25656 => 28051, 25657 => 28052,
+25658 => 27996, 25659 => 28000, 25660 => 28028, 25661 => 28003, 25662 => 28186,
+25663 => 28103, 25664 => 28101, 25665 => 28126, 25666 => 28174, 25667 => 28095,
+25668 => 28128, 25669 => 28177, 25670 => 28134, 25671 => 28125, 25672 => 28121,
+25673 => 28182, 25674 => 28075, 25675 => 28172, 25676 => 28078, 25677 => 28203,
+25678 => 28270, 25679 => 28238, 25680 => 28267, 25681 => 28338, 25682 => 28255,
+25683 => 28294, 25684 => 28243, 25685 => 28244, 25686 => 28210, 25687 => 28197,
+25688 => 28228, 25689 => 28383, 25690 => 28337, 25691 => 28312, 25692 => 28384,
+25693 => 28461, 25694 => 28386, 25695 => 28325, 25696 => 28327, 25697 => 28349,
+25698 => 28347, 25699 => 28343, 25700 => 28375, 25701 => 28340, 25702 => 28367,
+25703 => 28303, 25704 => 28354, 25705 => 28319, 25706 => 28514, 25707 => 28486,
+25708 => 28487, 25709 => 28452, 25710 => 28437, 25711 => 28409, 25712 => 28463,
+25713 => 28470, 25714 => 28491, 25715 => 28532, 25716 => 28458, 25717 => 28425,
+25718 => 28457, 25719 => 28553, 25720 => 28557, 25721 => 28556, 25722 => 28536,
+25723 => 28530, 25724 => 28540, 25725 => 28538, 25726 => 28625, 25889 => 28617,
+25890 => 28583, 25891 => 28601, 25892 => 28598, 25893 => 28610, 25894 => 28641,
+25895 => 28654, 25896 => 28638, 25897 => 28640, 25898 => 28655, 25899 => 28698,
+25900 => 28707, 25901 => 28699, 25902 => 28729, 25903 => 28725, 25904 => 28751,
+25905 => 28766, 25906 => 23424, 25907 => 23428, 25908 => 23445, 25909 => 23443,
+25910 => 23461, 25911 => 23480, 25912 => 29999, 25913 => 39582, 25914 => 25652,
+25915 => 23524, 25916 => 23534, 25917 => 35120, 25918 => 23536, 25919 => 36423,
+25920 => 35591, 25921 => 36790, 25922 => 36819, 25923 => 36821, 25924 => 36837,
+25925 => 36846, 25926 => 36836, 25927 => 36841, 25928 => 36838, 25929 => 36851,
+25930 => 36840, 25931 => 36869, 25932 => 36868, 25933 => 36875, 25934 => 36902,
+25935 => 36881, 25936 => 36877, 25937 => 36886, 25938 => 36897, 25939 => 36917,
+25940 => 36918, 25941 => 36909, 25942 => 36911, 25943 => 36932, 25944 => 36945,
+25945 => 36946, 25946 => 36944, 25947 => 36968, 25948 => 36952, 25949 => 36962,
+25950 => 36955, 25951 => 26297, 25952 => 36980, 25953 => 36989, 25954 => 36994,
+25955 => 37000, 25956 => 36995, 25957 => 37003, 25958 => 24400, 25959 => 24407,
+25960 => 24406, 25961 => 24408, 25962 => 23611, 25963 => 21675, 25964 => 23632,
+25965 => 23641, 25966 => 23409, 25967 => 23651, 25968 => 23654, 25969 => 32700,
+25970 => 24362, 25971 => 24361, 25972 => 24365, 25973 => 33396, 25974 => 24380,
+25975 => 39739, 25976 => 23662, 25977 => 22913, 25978 => 22915, 25979 => 22925,
+25980 => 22953, 25981 => 22954, 25982 => 22947, 26145 => 22935, 26146 => 22986,
+26147 => 22955, 26148 => 22942, 26149 => 22948, 26150 => 22994, 26151 => 22962,
+26152 => 22959, 26153 => 22999, 26154 => 22974, 26155 => 23045, 26156 => 23046,
+26157 => 23005, 26158 => 23048, 26159 => 23011, 26160 => 23000, 26161 => 23033,
+26162 => 23052, 26163 => 23049, 26164 => 23090, 26165 => 23092, 26166 => 23057,
+26167 => 23075, 26168 => 23059, 26169 => 23104, 26170 => 23143, 26171 => 23114,
+26172 => 23125, 26173 => 23100, 26174 => 23138, 26175 => 23157, 26176 => 33004,
+26177 => 23210, 26178 => 23195, 26179 => 23159, 26180 => 23162, 26181 => 23230,
+26182 => 23275, 26183 => 23218, 26184 => 23250, 26185 => 23252, 26186 => 23224,
+26187 => 23264, 26188 => 23267, 26189 => 23281, 26190 => 23254, 26191 => 23270,
+26192 => 23256, 26193 => 23260, 26194 => 23305, 26195 => 23319, 26196 => 23318,
+26197 => 23346, 26198 => 23351, 26199 => 23360, 26200 => 23573, 26201 => 23580,
+26202 => 23386, 26203 => 23397, 26204 => 23411, 26205 => 23377, 26206 => 23379,
+26207 => 23394, 26208 => 39541, 26209 => 39543, 26210 => 39544, 26211 => 39546,
+26212 => 39551, 26213 => 39549, 26214 => 39552, 26215 => 39553, 26216 => 39557,
+26217 => 39560, 26218 => 39562, 26219 => 39568, 26220 => 39570, 26221 => 39571,
+26222 => 39574, 26223 => 39576, 26224 => 39579, 26225 => 39580, 26226 => 39581,
+26227 => 39583, 26228 => 39584, 26229 => 39586, 26230 => 39587, 26231 => 39589,
+26232 => 39591, 26233 => 32415, 26234 => 32417, 26235 => 32419, 26236 => 32421,
+26237 => 32424, 26238 => 32425, 26401 => 32429, 26402 => 32432, 26403 => 32446,
+26404 => 32448, 26405 => 32449, 26406 => 32450, 26407 => 32457, 26408 => 32459,
+26409 => 32460, 26410 => 32464, 26411 => 32468, 26412 => 32471, 26413 => 32475,
+26414 => 32480, 26415 => 32481, 26416 => 32488, 26417 => 32491, 26418 => 32494,
+26419 => 32495, 26420 => 32497, 26421 => 32498, 26422 => 32525, 26423 => 32502,
+26424 => 32506, 26425 => 32507, 26426 => 32510, 26427 => 32513, 26428 => 32514,
+26429 => 32515, 26430 => 32519, 26431 => 32520, 26432 => 32523, 26433 => 32524,
+26434 => 32527, 26435 => 32529, 26436 => 32530, 26437 => 32535, 26438 => 32537,
+26439 => 32540, 26440 => 32539, 26441 => 32543, 26442 => 32545, 26443 => 32546,
+26444 => 32547, 26445 => 32548, 26446 => 32549, 26447 => 32550, 26448 => 32551,
+26449 => 32554, 26450 => 32555, 26451 => 32556, 26452 => 32557, 26453 => 32559,
+26454 => 32560, 26455 => 32561, 26456 => 32562, 26457 => 32563, 26458 => 32565,
+26459 => 24186, 26460 => 30079, 26461 => 24027, 26462 => 30014, 26463 => 37013,
+26464 => 29582, 26465 => 29585, 26466 => 29614, 26467 => 29602, 26468 => 29599,
+26469 => 29647, 26470 => 29634, 26471 => 29649, 26472 => 29623, 26473 => 29619,
+26474 => 29632, 26475 => 29641, 26476 => 29640, 26477 => 29669, 26478 => 29657,
+26479 => 39036, 26480 => 29706, 26481 => 29673, 26482 => 29671, 26483 => 29662,
+26484 => 29626, 26485 => 29682, 26486 => 29711, 26487 => 29738, 26488 => 29787,
+26489 => 29734, 26490 => 29733, 26491 => 29736, 26492 => 29744, 26493 => 29742,
+26494 => 29740, 26657 => 29723, 26658 => 29722, 26659 => 29761, 26660 => 29788,
+26661 => 29783, 26662 => 29781, 26663 => 29785, 26664 => 29815, 26665 => 29805,
+26666 => 29822, 26667 => 29852, 26668 => 29838, 26669 => 29824, 26670 => 29825,
+26671 => 29831, 26672 => 29835, 26673 => 29854, 26674 => 29864, 26675 => 29865,
+26676 => 29840, 26677 => 29863, 26678 => 29906, 26679 => 29882, 26680 => 38890,
+26681 => 38891, 26682 => 38892, 26683 => 26444, 26684 => 26451, 26685 => 26462,
+26686 => 26440, 26687 => 26473, 26688 => 26533, 26689 => 26503, 26690 => 26474,
+26691 => 26483, 26692 => 26520, 26693 => 26535, 26694 => 26485, 26695 => 26536,
+26696 => 26526, 26697 => 26541, 26698 => 26507, 26699 => 26487, 26700 => 26492,
+26701 => 26608, 26702 => 26633, 26703 => 26584, 26704 => 26634, 26705 => 26601,
+26706 => 26544, 26707 => 26636, 26708 => 26585, 26709 => 26549, 26710 => 26586,
+26711 => 26547, 26712 => 26589, 26713 => 26624, 26714 => 26563, 26715 => 26552,
+26716 => 26594, 26717 => 26638, 26718 => 26561, 26719 => 26621, 26720 => 26674,
+26721 => 26675, 26722 => 26720, 26723 => 26721, 26724 => 26702, 26725 => 26722,
+26726 => 26692, 26727 => 26724, 26728 => 26755, 26729 => 26653, 26730 => 26709,
+26731 => 26726, 26732 => 26689, 26733 => 26727, 26734 => 26688, 26735 => 26686,
+26736 => 26698, 26737 => 26697, 26738 => 26665, 26739 => 26805, 26740 => 26767,
+26741 => 26740, 26742 => 26743, 26743 => 26771, 26744 => 26731, 26745 => 26818,
+26746 => 26990, 26747 => 26876, 26748 => 26911, 26749 => 26912, 26750 => 26873,
+26913 => 26916, 26914 => 26864, 26915 => 26891, 26916 => 26881, 26917 => 26967,
+26918 => 26851, 26919 => 26896, 26920 => 26993, 26921 => 26937, 26922 => 26976,
+26923 => 26946, 26924 => 26973, 26925 => 27012, 26926 => 26987, 26927 => 27008,
+26928 => 27032, 26929 => 27000, 26930 => 26932, 26931 => 27084, 26932 => 27015,
+26933 => 27016, 26934 => 27086, 26935 => 27017, 26936 => 26982, 26937 => 26979,
+26938 => 27001, 26939 => 27035, 26940 => 27047, 26941 => 27067, 26942 => 27051,
+26943 => 27053, 26944 => 27092, 26945 => 27057, 26946 => 27073, 26947 => 27082,
+26948 => 27103, 26949 => 27029, 26950 => 27104, 26951 => 27021, 26952 => 27135,
+26953 => 27183, 26954 => 27117, 26955 => 27159, 26956 => 27160, 26957 => 27237,
+26958 => 27122, 26959 => 27204, 26960 => 27198, 26961 => 27296, 26962 => 27216,
+26963 => 27227, 26964 => 27189, 26965 => 27278, 26966 => 27257, 26967 => 27197,
+26968 => 27176, 26969 => 27224, 26970 => 27260, 26971 => 27281, 26972 => 27280,
+26973 => 27305, 26974 => 27287, 26975 => 27307, 26976 => 29495, 26977 => 29522,
+26978 => 27521, 26979 => 27522, 26980 => 27527, 26981 => 27524, 26982 => 27538,
+26983 => 27539, 26984 => 27533, 26985 => 27546, 26986 => 27547, 26987 => 27553,
+26988 => 27562, 26989 => 36715, 26990 => 36717, 26991 => 36721, 26992 => 36722,
+26993 => 36723, 26994 => 36725, 26995 => 36726, 26996 => 36728, 26997 => 36727,
+26998 => 36729, 26999 => 36730, 27000 => 36732, 27001 => 36734, 27002 => 36737,
+27003 => 36738, 27004 => 36740, 27005 => 36743, 27006 => 36747, 27169 => 36749,
+27170 => 36750, 27171 => 36751, 27172 => 36760, 27173 => 36762, 27174 => 36558,
+27175 => 25099, 27176 => 25111, 27177 => 25115, 27178 => 25119, 27179 => 25122,
+27180 => 25121, 27181 => 25125, 27182 => 25124, 27183 => 25132, 27184 => 33255,
+27185 => 29935, 27186 => 29940, 27187 => 29951, 27188 => 29967, 27189 => 29969,
+27190 => 29971, 27191 => 25908, 27192 => 26094, 27193 => 26095, 27194 => 26096,
+27195 => 26122, 27196 => 26137, 27197 => 26482, 27198 => 26115, 27199 => 26133,
+27200 => 26112, 27201 => 28805, 27202 => 26359, 27203 => 26141, 27204 => 26164,
+27205 => 26161, 27206 => 26166, 27207 => 26165, 27208 => 32774, 27209 => 26207,
+27210 => 26196, 27211 => 26177, 27212 => 26191, 27213 => 26198, 27214 => 26209,
+27215 => 26199, 27216 => 26231, 27217 => 26244, 27218 => 26252, 27219 => 26279,
+27220 => 26269, 27221 => 26302, 27222 => 26331, 27223 => 26332, 27224 => 26342,
+27225 => 26345, 27226 => 36146, 27227 => 36147, 27228 => 36150, 27229 => 36155,
+27230 => 36157, 27231 => 36160, 27232 => 36165, 27233 => 36166, 27234 => 36168,
+27235 => 36169, 27236 => 36167, 27237 => 36173, 27238 => 36181, 27239 => 36185,
+27240 => 35271, 27241 => 35274, 27242 => 35275, 27243 => 35276, 27244 => 35278,
+27245 => 35279, 27246 => 35280, 27247 => 35281, 27248 => 29294, 27249 => 29343,
+27250 => 29277, 27251 => 29286, 27252 => 29295, 27253 => 29310, 27254 => 29311,
+27255 => 29316, 27256 => 29323, 27257 => 29325, 27258 => 29327, 27259 => 29330,
+27260 => 25352, 27261 => 25394, 27262 => 25520, 27425 => 25663, 27426 => 25816,
+27427 => 32772, 27428 => 27626, 27429 => 27635, 27430 => 27645, 27431 => 27637,
+27432 => 27641, 27433 => 27653, 27434 => 27655, 27435 => 27654, 27436 => 27661,
+27437 => 27669, 27438 => 27672, 27439 => 27673, 27440 => 27674, 27441 => 27681,
+27442 => 27689, 27443 => 27684, 27444 => 27690, 27445 => 27698, 27446 => 25909,
+27447 => 25941, 27448 => 25963, 27449 => 29261, 27450 => 29266, 27451 => 29270,
+27452 => 29232, 27453 => 34402, 27454 => 21014, 27455 => 32927, 27456 => 32924,
+27457 => 32915, 27458 => 32956, 27459 => 26378, 27460 => 32957, 27461 => 32945,
+27462 => 32939, 27463 => 32941, 27464 => 32948, 27465 => 32951, 27466 => 32999,
+27467 => 33000, 27468 => 33001, 27469 => 33002, 27470 => 32987, 27471 => 32962,
+27472 => 32964, 27473 => 32985, 27474 => 32973, 27475 => 32983, 27476 => 26384,
+27477 => 32989, 27478 => 33003, 27479 => 33009, 27480 => 33012, 27481 => 33005,
+27482 => 33037, 27483 => 33038, 27484 => 33010, 27485 => 33020, 27486 => 26389,
+27487 => 33042, 27488 => 35930, 27489 => 33078, 27490 => 33054, 27491 => 33068,
+27492 => 33048, 27493 => 33074, 27494 => 33096, 27495 => 33100, 27496 => 33107,
+27497 => 33140, 27498 => 33113, 27499 => 33114, 27500 => 33137, 27501 => 33120,
+27502 => 33129, 27503 => 33148, 27504 => 33149, 27505 => 33133, 27506 => 33127,
+27507 => 22605, 27508 => 23221, 27509 => 33160, 27510 => 33154, 27511 => 33169,
+27512 => 28373, 27513 => 33187, 27514 => 33194, 27515 => 33228, 27516 => 26406,
+27517 => 33226, 27518 => 33211, 27681 => 33217, 27682 => 33190, 27683 => 27428,
+27684 => 27447, 27685 => 27449, 27686 => 27459, 27687 => 27462, 27688 => 27481,
+27689 => 39121, 27690 => 39122, 27691 => 39123, 27692 => 39125, 27693 => 39129,
+27694 => 39130, 27695 => 27571, 27696 => 24384, 27697 => 27586, 27698 => 35315,
+27699 => 26000, 27700 => 40785, 27701 => 26003, 27702 => 26044, 27703 => 26054,
+27704 => 26052, 27705 => 26051, 27706 => 26060, 27707 => 26062, 27708 => 26066,
+27709 => 26070, 27710 => 28800, 27711 => 28828, 27712 => 28822, 27713 => 28829,
+27714 => 28859, 27715 => 28864, 27716 => 28855, 27717 => 28843, 27718 => 28849,
+27719 => 28904, 27720 => 28874, 27721 => 28944, 27722 => 28947, 27723 => 28950,
+27724 => 28975, 27725 => 28977, 27726 => 29043, 27727 => 29020, 27728 => 29032,
+27729 => 28997, 27730 => 29042, 27731 => 29002, 27732 => 29048, 27733 => 29050,
+27734 => 29080, 27735 => 29107, 27736 => 29109, 27737 => 29096, 27738 => 29088,
+27739 => 29152, 27740 => 29140, 27741 => 29159, 27742 => 29177, 27743 => 29213,
+27744 => 29224, 27745 => 28780, 27746 => 28952, 27747 => 29030, 27748 => 29113,
+27749 => 25150, 27750 => 25149, 27751 => 25155, 27752 => 25160, 27753 => 25161,
+27754 => 31035, 27755 => 31040, 27756 => 31046, 27757 => 31049, 27758 => 31067,
+27759 => 31068, 27760 => 31059, 27761 => 31066, 27762 => 31074, 27763 => 31063,
+27764 => 31072, 27765 => 31087, 27766 => 31079, 27767 => 31098, 27768 => 31109,
+27769 => 31114, 27770 => 31130, 27771 => 31143, 27772 => 31155, 27773 => 24529,
+27774 => 24528, 27937 => 24636, 27938 => 24669, 27939 => 24666, 27940 => 24679,
+27941 => 24641, 27942 => 24665, 27943 => 24675, 27944 => 24747, 27945 => 24838,
+27946 => 24845, 27947 => 24925, 27948 => 25001, 27949 => 24989, 27950 => 25035,
+27951 => 25041, 27952 => 25094, 27953 => 32896, 27954 => 32895, 27955 => 27795,
+27956 => 27894, 27957 => 28156, 27958 => 30710, 27959 => 30712, 27960 => 30720,
+27961 => 30729, 27962 => 30743, 27963 => 30744, 27964 => 30737, 27965 => 26027,
+27966 => 30765, 27967 => 30748, 27968 => 30749, 27969 => 30777, 27970 => 30778,
+27971 => 30779, 27972 => 30751, 27973 => 30780, 27974 => 30757, 27975 => 30764,
+27976 => 30755, 27977 => 30761, 27978 => 30798, 27979 => 30829, 27980 => 30806,
+27981 => 30807, 27982 => 30758, 27983 => 30800, 27984 => 30791, 27985 => 30796,
+27986 => 30826, 27987 => 30875, 27988 => 30867, 27989 => 30874, 27990 => 30855,
+27991 => 30876, 27992 => 30881, 27993 => 30883, 27994 => 30898, 27995 => 30905,
+27996 => 30885, 27997 => 30932, 27998 => 30937, 27999 => 30921, 28000 => 30956,
+28001 => 30962, 28002 => 30981, 28003 => 30964, 28004 => 30995, 28005 => 31012,
+28006 => 31006, 28007 => 31028, 28008 => 40859, 28009 => 40697, 28010 => 40699,
+28011 => 40700, 28012 => 30449, 28013 => 30468, 28014 => 30477, 28015 => 30457,
+28016 => 30471, 28017 => 30472, 28018 => 30490, 28019 => 30498, 28020 => 30489,
+28021 => 30509, 28022 => 30502, 28023 => 30517, 28024 => 30520, 28025 => 30544,
+28026 => 30545, 28027 => 30535, 28028 => 30531, 28029 => 30554, 28030 => 30568,
+28193 => 30562, 28194 => 30565, 28195 => 30591, 28196 => 30605, 28197 => 30589,
+28198 => 30592, 28199 => 30604, 28200 => 30609, 28201 => 30623, 28202 => 30624,
+28203 => 30640, 28204 => 30645, 28205 => 30653, 28206 => 30010, 28207 => 30016,
+28208 => 30030, 28209 => 30027, 28210 => 30024, 28211 => 30043, 28212 => 30066,
+28213 => 30073, 28214 => 30083, 28215 => 32600, 28216 => 32609, 28217 => 32607,
+28218 => 35400, 28219 => 32616, 28220 => 32628, 28221 => 32625, 28222 => 32633,
+28223 => 32641, 28224 => 32638, 28225 => 30413, 28226 => 30437, 28227 => 34866,
+28228 => 38021, 28229 => 38022, 28230 => 38023, 28231 => 38027, 28232 => 38026,
+28233 => 38028, 28234 => 38029, 28235 => 38031, 28236 => 38032, 28237 => 38036,
+28238 => 38039, 28239 => 38037, 28240 => 38042, 28241 => 38043, 28242 => 38044,
+28243 => 38051, 28244 => 38052, 28245 => 38059, 28246 => 38058, 28247 => 38061,
+28248 => 38060, 28249 => 38063, 28250 => 38064, 28251 => 38066, 28252 => 38068,
+28253 => 38070, 28254 => 38071, 28255 => 38072, 28256 => 38073, 28257 => 38074,
+28258 => 38076, 28259 => 38077, 28260 => 38079, 28261 => 38084, 28262 => 38088,
+28263 => 38089, 28264 => 38090, 28265 => 38091, 28266 => 38092, 28267 => 38093,
+28268 => 38094, 28269 => 38096, 28270 => 38097, 28271 => 38098, 28272 => 38101,
+28273 => 38102, 28274 => 38103, 28275 => 38105, 28276 => 38104, 28277 => 38107,
+28278 => 38110, 28279 => 38111, 28280 => 38112, 28281 => 38114, 28282 => 38116,
+28283 => 38117, 28284 => 38119, 28285 => 38120, 28286 => 38122, 28449 => 38121,
+28450 => 38123, 28451 => 38126, 28452 => 38127, 28453 => 38131, 28454 => 38132,
+28455 => 38133, 28456 => 38135, 28457 => 38137, 28458 => 38140, 28459 => 38141,
+28460 => 38143, 28461 => 38147, 28462 => 38146, 28463 => 38150, 28464 => 38151,
+28465 => 38153, 28466 => 38154, 28467 => 38157, 28468 => 38158, 28469 => 38159,
+28470 => 38162, 28471 => 38163, 28472 => 38164, 28473 => 38165, 28474 => 38166,
+28475 => 38168, 28476 => 38171, 28477 => 38173, 28478 => 38174, 28479 => 38175,
+28480 => 38178, 28481 => 38186, 28482 => 38187, 28483 => 38185, 28484 => 38188,
+28485 => 38193, 28486 => 38194, 28487 => 38196, 28488 => 38198, 28489 => 38199,
+28490 => 38200, 28491 => 38204, 28492 => 38206, 28493 => 38207, 28494 => 38210,
+28495 => 38197, 28496 => 38212, 28497 => 38213, 28498 => 38214, 28499 => 38217,
+28500 => 38220, 28501 => 38222, 28502 => 38223, 28503 => 38226, 28504 => 38227,
+28505 => 38228, 28506 => 38230, 28507 => 38231, 28508 => 38232, 28509 => 38233,
+28510 => 38235, 28511 => 38238, 28512 => 38239, 28513 => 38237, 28514 => 38241,
+28515 => 38242, 28516 => 38244, 28517 => 38245, 28518 => 38246, 28519 => 38247,
+28520 => 38248, 28521 => 38249, 28522 => 38250, 28523 => 38251, 28524 => 38252,
+28525 => 38255, 28526 => 38257, 28527 => 38258, 28528 => 38259, 28529 => 38202,
+28530 => 30695, 28531 => 30700, 28532 => 38601, 28533 => 31189, 28534 => 31213,
+28535 => 31203, 28536 => 31211, 28537 => 31238, 28538 => 23879, 28539 => 31235,
+28540 => 31234, 28541 => 31262, 28542 => 31252, 28705 => 31289, 28706 => 31287,
+28707 => 31313, 28708 => 40655, 28709 => 39333, 28710 => 31344, 28711 => 30344,
+28712 => 30350, 28713 => 30355, 28714 => 30361, 28715 => 30372, 28716 => 29918,
+28717 => 29920, 28718 => 29996, 28719 => 40480, 28720 => 40482, 28721 => 40488,
+28722 => 40489, 28723 => 40490, 28724 => 40491, 28725 => 40492, 28726 => 40498,
+28727 => 40497, 28728 => 40502, 28729 => 40504, 28730 => 40503, 28731 => 40505,
+28732 => 40506, 28733 => 40510, 28734 => 40513, 28735 => 40514, 28736 => 40516,
+28737 => 40518, 28738 => 40519, 28739 => 40520, 28740 => 40521, 28741 => 40523,
+28742 => 40524, 28743 => 40526, 28744 => 40529, 28745 => 40533, 28746 => 40535,
+28747 => 40538, 28748 => 40539, 28749 => 40540, 28750 => 40542, 28751 => 40547,
+28752 => 40550, 28753 => 40551, 28754 => 40552, 28755 => 40553, 28756 => 40554,
+28757 => 40555, 28758 => 40556, 28759 => 40561, 28760 => 40557, 28761 => 40563,
+28762 => 30098, 28763 => 30100, 28764 => 30102, 28765 => 30112, 28766 => 30109,
+28767 => 30124, 28768 => 30115, 28769 => 30131, 28770 => 30132, 28771 => 30136,
+28772 => 30148, 28773 => 30129, 28774 => 30128, 28775 => 30147, 28776 => 30146,
+28777 => 30166, 28778 => 30157, 28779 => 30179, 28780 => 30184, 28781 => 30182,
+28782 => 30180, 28783 => 30187, 28784 => 30183, 28785 => 30211, 28786 => 30193,
+28787 => 30204, 28788 => 30207, 28789 => 30224, 28790 => 30208, 28791 => 30213,
+28792 => 30220, 28793 => 30231, 28794 => 30218, 28795 => 30245, 28796 => 30232,
+28797 => 30229, 28798 => 30233, 28961 => 30235, 28962 => 30268, 28963 => 30242,
+28964 => 30240, 28965 => 30272, 28966 => 30253, 28967 => 30256, 28968 => 30271,
+28969 => 30261, 28970 => 30275, 28971 => 30270, 28972 => 30259, 28973 => 30285,
+28974 => 30302, 28975 => 30292, 28976 => 30300, 28977 => 30294, 28978 => 30315,
+28979 => 30319, 28980 => 32714, 28981 => 31462, 28982 => 31352, 28983 => 31353,
+28984 => 31360, 28985 => 31366, 28986 => 31368, 28987 => 31381, 28988 => 31398,
+28989 => 31392, 28990 => 31404, 28991 => 31400, 28992 => 31405, 28993 => 31411,
+28994 => 34916, 28995 => 34921, 28996 => 34930, 28997 => 34941, 28998 => 34943,
+28999 => 34946, 29000 => 34978, 29001 => 35014, 29002 => 34999, 29003 => 35004,
+29004 => 35017, 29005 => 35042, 29006 => 35022, 29007 => 35043, 29008 => 35045,
+29009 => 35057, 29010 => 35098, 29011 => 35068, 29012 => 35048, 29013 => 35070,
+29014 => 35056, 29015 => 35105, 29016 => 35097, 29017 => 35091, 29018 => 35099,
+29019 => 35082, 29020 => 35124, 29021 => 35115, 29022 => 35126, 29023 => 35137,
+29024 => 35174, 29025 => 35195, 29026 => 30091, 29027 => 32997, 29028 => 30386,
+29029 => 30388, 29030 => 30684, 29031 => 32786, 29032 => 32788, 29033 => 32790,
+29034 => 32796, 29035 => 32800, 29036 => 32802, 29037 => 32805, 29038 => 32806,
+29039 => 32807, 29040 => 32809, 29041 => 32808, 29042 => 32817, 29043 => 32779,
+29044 => 32821, 29045 => 32835, 29046 => 32838, 29047 => 32845, 29048 => 32850,
+29049 => 32873, 29050 => 32881, 29051 => 35203, 29052 => 39032, 29053 => 39040,
+29054 => 39043, 29217 => 39049, 29218 => 39052, 29219 => 39053, 29220 => 39055,
+29221 => 39060, 29222 => 39066, 29223 => 39067, 29224 => 39070, 29225 => 39071,
+29226 => 39073, 29227 => 39074, 29228 => 39077, 29229 => 39078, 29230 => 34381,
+29231 => 34388, 29232 => 34412, 29233 => 34414, 29234 => 34431, 29235 => 34426,
+29236 => 34428, 29237 => 34427, 29238 => 34472, 29239 => 34445, 29240 => 34443,
+29241 => 34476, 29242 => 34461, 29243 => 34471, 29244 => 34467, 29245 => 34474,
+29246 => 34451, 29247 => 34473, 29248 => 34486, 29249 => 34500, 29250 => 34485,
+29251 => 34510, 29252 => 34480, 29253 => 34490, 29254 => 34481, 29255 => 34479,
+29256 => 34505, 29257 => 34511, 29258 => 34484, 29259 => 34537, 29260 => 34545,
+29261 => 34546, 29262 => 34541, 29263 => 34547, 29264 => 34512, 29265 => 34579,
+29266 => 34526, 29267 => 34548, 29268 => 34527, 29269 => 34520, 29270 => 34513,
+29271 => 34563, 29272 => 34567, 29273 => 34552, 29274 => 34568, 29275 => 34570,
+29276 => 34573, 29277 => 34569, 29278 => 34595, 29279 => 34619, 29280 => 34590,
+29281 => 34597, 29282 => 34606, 29283 => 34586, 29284 => 34622, 29285 => 34632,
+29286 => 34612, 29287 => 34609, 29288 => 34601, 29289 => 34615, 29290 => 34623,
+29291 => 34690, 29292 => 34594, 29293 => 34685, 29294 => 34686, 29295 => 34683,
+29296 => 34656, 29297 => 34672, 29298 => 34636, 29299 => 34670, 29300 => 34699,
+29301 => 34643, 29302 => 34659, 29303 => 34684, 29304 => 34660, 29305 => 34649,
+29306 => 34661, 29307 => 34707, 29308 => 34735, 29309 => 34728, 29310 => 34770,
+29473 => 34758, 29474 => 34696, 29475 => 34693, 29476 => 34733, 29477 => 34711,
+29478 => 34691, 29479 => 34731, 29480 => 34789, 29481 => 34732, 29482 => 34741,
+29483 => 34739, 29484 => 34763, 29485 => 34771, 29486 => 34749, 29487 => 34769,
+29488 => 34752, 29489 => 34762, 29490 => 34779, 29491 => 34794, 29492 => 34784,
+29493 => 34798, 29494 => 34838, 29495 => 34835, 29496 => 34814, 29497 => 34826,
+29498 => 34843, 29499 => 34849, 29500 => 34873, 29501 => 34876, 29502 => 32566,
+29503 => 32578, 29504 => 32580, 29505 => 32581, 29506 => 33296, 29507 => 31482,
+29508 => 31485, 29509 => 31496, 29510 => 31491, 29511 => 31492, 29512 => 31509,
+29513 => 31498, 29514 => 31531, 29515 => 31503, 29516 => 31559, 29517 => 31544,
+29518 => 31530, 29519 => 31513, 29520 => 31534, 29521 => 31537, 29522 => 31520,
+29523 => 31525, 29524 => 31524, 29525 => 31539, 29526 => 31550, 29527 => 31518,
+29528 => 31576, 29529 => 31578, 29530 => 31557, 29531 => 31605, 29532 => 31564,
+29533 => 31581, 29534 => 31584, 29535 => 31598, 29536 => 31611, 29537 => 31586,
+29538 => 31602, 29539 => 31601, 29540 => 31632, 29541 => 31654, 29542 => 31655,
+29543 => 31672, 29544 => 31660, 29545 => 31645, 29546 => 31656, 29547 => 31621,
+29548 => 31658, 29549 => 31644, 29550 => 31650, 29551 => 31659, 29552 => 31668,
+29553 => 31697, 29554 => 31681, 29555 => 31692, 29556 => 31709, 29557 => 31706,
+29558 => 31717, 29559 => 31718, 29560 => 31722, 29561 => 31756, 29562 => 31742,
+29563 => 31740, 29564 => 31759, 29565 => 31766, 29566 => 31755, 29729 => 31775,
+29730 => 31786, 29731 => 31782, 29732 => 31800, 29733 => 31809, 29734 => 31808,
+29735 => 33278, 29736 => 33281, 29737 => 33282, 29738 => 33284, 29739 => 33260,
+29740 => 34884, 29741 => 33313, 29742 => 33314, 29743 => 33315, 29744 => 33325,
+29745 => 33327, 29746 => 33320, 29747 => 33323, 29748 => 33336, 29749 => 33339,
+29750 => 33331, 29751 => 33332, 29752 => 33342, 29753 => 33348, 29754 => 33353,
+29755 => 33355, 29756 => 33359, 29757 => 33370, 29758 => 33375, 29759 => 33384,
+29760 => 34942, 29761 => 34949, 29762 => 34952, 29763 => 35032, 29764 => 35039,
+29765 => 35166, 29766 => 32669, 29767 => 32671, 29768 => 32679, 29769 => 32687,
+29770 => 32688, 29771 => 32690, 29772 => 31868, 29773 => 25929, 29774 => 31889,
+29775 => 31901, 29776 => 31900, 29777 => 31902, 29778 => 31906, 29779 => 31922,
+29780 => 31932, 29781 => 31933, 29782 => 31937, 29783 => 31943, 29784 => 31948,
+29785 => 31949, 29786 => 31944, 29787 => 31941, 29788 => 31959, 29789 => 31976,
+29790 => 33390, 29791 => 26280, 29792 => 32703, 29793 => 32718, 29794 => 32725,
+29795 => 32741, 29796 => 32737, 29797 => 32742, 29798 => 32745, 29799 => 32750,
+29800 => 32755, 29801 => 31992, 29802 => 32119, 29803 => 32166, 29804 => 32174,
+29805 => 32327, 29806 => 32411, 29807 => 40632, 29808 => 40628, 29809 => 36211,
+29810 => 36228, 29811 => 36244, 29812 => 36241, 29813 => 36273, 29814 => 36199,
+29815 => 36205, 29816 => 35911, 29817 => 35913, 29818 => 37194, 29819 => 37200,
+29820 => 37198, 29821 => 37199, 29822 => 37220, 29985 => 37218, 29986 => 37217,
+29987 => 37232, 29988 => 37225, 29989 => 37231, 29990 => 37245, 29991 => 37246,
+29992 => 37234, 29993 => 37236, 29994 => 37241, 29995 => 37260, 29996 => 37253,
+29997 => 37264, 29998 => 37261, 29999 => 37265, 30000 => 37282, 30001 => 37283,
+30002 => 37290, 30003 => 37293, 30004 => 37294, 30005 => 37295, 30006 => 37301,
+30007 => 37300, 30008 => 37306, 30009 => 35925, 30010 => 40574, 30011 => 36280,
+30012 => 36331, 30013 => 36357, 30014 => 36441, 30015 => 36457, 30016 => 36277,
+30017 => 36287, 30018 => 36284, 30019 => 36282, 30020 => 36292, 30021 => 36310,
+30022 => 36311, 30023 => 36314, 30024 => 36318, 30025 => 36302, 30026 => 36303,
+30027 => 36315, 30028 => 36294, 30029 => 36332, 30030 => 36343, 30031 => 36344,
+30032 => 36323, 30033 => 36345, 30034 => 36347, 30035 => 36324, 30036 => 36361,
+30037 => 36349, 30038 => 36372, 30039 => 36381, 30040 => 36383, 30041 => 36396,
+30042 => 36398, 30043 => 36387, 30044 => 36399, 30045 => 36410, 30046 => 36416,
+30047 => 36409, 30048 => 36405, 30049 => 36413, 30050 => 36401, 30051 => 36425,
+30052 => 36417, 30053 => 36418, 30054 => 36433, 30055 => 36434, 30056 => 36426,
+30057 => 36464, 30058 => 36470, 30059 => 36476, 30060 => 36463, 30061 => 36468,
+30062 => 36485, 30063 => 36495, 30064 => 36500, 30065 => 36496, 30066 => 36508,
+30067 => 36510, 30068 => 35960, 30069 => 35970, 30070 => 35978, 30071 => 35973,
+30072 => 35992, 30073 => 35988, 30074 => 26011, 30075 => 35286, 30076 => 35294,
+30077 => 35290, 30078 => 35292, 30241 => 35301, 30242 => 35307, 30243 => 35311,
+30244 => 35390, 30245 => 35622, 30246 => 38739, 30247 => 38633, 30248 => 38643,
+30249 => 38639, 30250 => 38662, 30251 => 38657, 30252 => 38664, 30253 => 38671,
+30254 => 38670, 30255 => 38698, 30256 => 38701, 30257 => 38704, 30258 => 38718,
+30259 => 40832, 30260 => 40835, 30261 => 40837, 30262 => 40838, 30263 => 40839,
+30264 => 40840, 30265 => 40841, 30266 => 40842, 30267 => 40844, 30268 => 40702,
+30269 => 40715, 30270 => 40717, 30271 => 38585, 30272 => 38588, 30273 => 38589,
+30274 => 38606, 30275 => 38610, 30276 => 30655, 30277 => 38624, 30278 => 37518,
+30279 => 37550, 30280 => 37576, 30281 => 37694, 30282 => 37738, 30283 => 37834,
+30284 => 37775, 30285 => 37950, 30286 => 37995, 30287 => 40063, 30288 => 40066,
+30289 => 40069, 30290 => 40070, 30291 => 40071, 30292 => 40072, 30293 => 31267,
+30294 => 40075, 30295 => 40078, 30296 => 40080, 30297 => 40081, 30298 => 40082,
+30299 => 40084, 30300 => 40085, 30301 => 40090, 30302 => 40091, 30303 => 40094,
+30304 => 40095, 30305 => 40096, 30306 => 40097, 30307 => 40098, 30308 => 40099,
+30309 => 40101, 30310 => 40102, 30311 => 40103, 30312 => 40104, 30313 => 40105,
+30314 => 40107, 30315 => 40109, 30316 => 40110, 30317 => 40112, 30318 => 40113,
+30319 => 40114, 30320 => 40115, 30321 => 40116, 30322 => 40117, 30323 => 40118,
+30324 => 40119, 30325 => 40122, 30326 => 40123, 30327 => 40124, 30328 => 40125,
+30329 => 40132, 30330 => 40133, 30331 => 40134, 30332 => 40135, 30333 => 40138,
+30334 => 40139, 30497 => 40140, 30498 => 40141, 30499 => 40142, 30500 => 40143,
+30501 => 40144, 30502 => 40147, 30503 => 40148, 30504 => 40149, 30505 => 40151,
+30506 => 40152, 30507 => 40153, 30508 => 40156, 30509 => 40157, 30510 => 40159,
+30511 => 40162, 30512 => 38780, 30513 => 38789, 30514 => 38801, 30515 => 38802,
+30516 => 38804, 30517 => 38831, 30518 => 38827, 30519 => 38819, 30520 => 38834,
+30521 => 38836, 30522 => 39601, 30523 => 39600, 30524 => 39607, 30525 => 40536,
+30526 => 39606, 30527 => 39610, 30528 => 39612, 30529 => 39617, 30530 => 39616,
+30531 => 39621, 30532 => 39618, 30533 => 39627, 30534 => 39628, 30535 => 39633,
+30536 => 39749, 30537 => 39747, 30538 => 39751, 30539 => 39753, 30540 => 39752,
+30541 => 39757, 30542 => 39761, 30543 => 39144, 30544 => 39181, 30545 => 39214,
+30546 => 39253, 30547 => 39252, 30548 => 39647, 30549 => 39649, 30550 => 39654,
+30551 => 39663, 30552 => 39659, 30553 => 39675, 30554 => 39661, 30555 => 39673,
+30556 => 39688, 30557 => 39695, 30558 => 39699, 30559 => 39711, 30560 => 39715,
+30561 => 40637, 30562 => 40638, 30563 => 32315, 30564 => 40578, 30565 => 40583,
+30566 => 40584, 30567 => 40587, 30568 => 40594, 30569 => 37846, 30570 => 40605,
+30571 => 40607, 30572 => 40667, 30573 => 40668, 30574 => 40669, 30575 => 40672,
+30576 => 40671, 30577 => 40674, 30578 => 40681, 30579 => 40679, 30580 => 40677,
+30581 => 40682, 30582 => 40687, 30583 => 40738, 30584 => 40748, 30585 => 40751,
+30586 => 40761, 30587 => 40759, 30588 => 40765, 30589 => 40766, 30590 => 40772,
+0 => 0 );
public function gb2utf8($gb)
{
@@ -1526,7 +1526,7 @@ class GB2312toUTF8
}
return $utf8;
}
-
+
public function u2utf8($c)
{
$str='';
diff --git a/onyx2/include/jpgraph/jpgraph_gradient.php b/onyx2/include/jpgraph/jpgraph_gradient.php
index 4468f76..7afd4a2 100644
--- a/onyx2/include/jpgraph/jpgraph_gradient.php
+++ b/onyx2/include/jpgraph/jpgraph_gradient.php
@@ -1,28 +1,28 @@
img = $img;
}
@@ -48,287 +48,286 @@ class Gradient
// PUBLIC METHODS
// Produce a gradient filled rectangle with a smooth transition between
// two colors.
- // ($xl,$yt) Top left corner
- // ($xr,$yb) Bottom right
- // $from_color Starting color in gradient
- // $to_color End color in the gradient
- // $style Which way is the gradient oriented?
+ // ($xl,$yt) Top left corner
+ // ($xr,$yb) Bottom right
+ // $from_color Starting color in gradient
+ // $to_color End color in the gradient
+ // $style Which way is the gradient oriented?
public function FilledRectangle($xl, $yt, $xr, $yb, $from_color, $to_color, $style=1)
{
- $this->img->SetLineWeight(1);
switch ($style) {
- case GRAD_VER:
- $steps = ceil(abs($xr-$xl)+1);
- $delta = $xr>=$xl ? 1 : -1;
- $this->GetColArray($from_color, $to_color, $steps, $colors, $this->numcolors);
- for ($i=0, $x=$xl; $i < $steps; ++$i) {
- $this->img->current_color = $colors[$i];
- $this->img->Line($x, $yt, $x, $yb);
- $x += $delta;
- }
- break;
-
- case GRAD_HOR:
- $steps = ceil(abs($yb-$yt)+1);
- $delta = $yb >= $yt ? 1 : -1;
- $this->GetColArray($from_color, $to_color, $steps, $colors, $this->numcolors);
- for ($i=0,$y=$yt; $i < $steps; ++$i) {
- $this->img->current_color = $colors[$i];
- $this->img->Line($xl, $y, $xr, $y);
- $y += $delta;
- }
- break;
-
- case GRAD_MIDHOR:
- $steps = ceil(abs($yb-$yt)/2);
- $delta = $yb >= $yt ? 1 : -1;
- $this->GetColArray($from_color, $to_color, $steps, $colors, $this->numcolors);
- for ($y=$yt, $i=0; $i < $steps; ++$i) {
- $this->img->current_color = $colors[$i];
- $this->img->Line($xl, $y, $xr, $y);
- $y += $delta;
- }
- --$i;
- if (abs($yb-$yt) % 2 == 1) {
- --$steps;
- }
- for ($j=0; $j < $steps; ++$j, --$i) {
- $this->img->current_color = $colors[$i];
- $this->img->Line($xl, $y, $xr, $y);
- $y += $delta;
- }
- $this->img->Line($xl, $y, $xr, $y);
- break;
-
- case GRAD_MIDVER:
- $steps = ceil(abs($xr-$xl)/2);
- $delta = $xr>=$xl ? 1 : -1;
- $this->GetColArray($from_color, $to_color, $steps, $colors, $this->numcolors);
- for ($x=$xl, $i=0; $i < $steps; ++$i) {
- $this->img->current_color = $colors[$i];
- $this->img->Line($x, $yb, $x, $yt);
- $x += $delta;
- }
- --$i;
- if (abs($xr-$xl) % 2 == 1) {
- --$steps;
- }
- for ($j=0; $j < $steps; ++$j, --$i) {
- $this->img->current_color = $colors[$i];
- $this->img->Line($x, $yb, $x, $yt);
- $x += $delta;
- }
- $this->img->Line($x, $yb, $x, $yt);
- break;
-
- case GRAD_WIDE_MIDVER:
- $diff = ceil(abs($xr-$xl));
- $steps = floor(abs($diff)/3);
- $firststep = $diff - 2*$steps ;
- $delta = $xr >= $xl ? 1 : -1;
- $this->GetColArray($from_color, $to_color, $firststep, $colors, $this->numcolors);
- for ($x=$xl, $i=0; $i < $firststep; ++$i) {
- $this->img->current_color = $colors[$i];
- $this->img->Line($x, $yb, $x, $yt);
- $x += $delta;
- }
- --$i;
- $this->img->current_color = $colors[$i];
- for ($j=0; $j< $steps; ++$j) {
- $this->img->Line($x, $yb, $x, $yt);
- $x += $delta;
- }
-
- for ($j=0; $j < $steps; ++$j, --$i) {
- $this->img->current_color = $colors[$i];
- $this->img->Line($x, $yb, $x, $yt);
- $x += $delta;
- }
- break;
-
- case GRAD_WIDE_MIDHOR:
- $diff = ceil(abs($yb-$yt));
- $steps = floor(abs($diff)/3);
- $firststep = $diff - 2*$steps ;
- $delta = $yb >= $yt? 1 : -1;
- $this->GetColArray($from_color, $to_color, $firststep, $colors, $this->numcolors);
- for ($y=$yt, $i=0; $i < $firststep; ++$i) {
- $this->img->current_color = $colors[$i];
- $this->img->Line($xl, $y, $xr, $y);
- $y += $delta;
- }
- --$i;
- $this->img->current_color = $colors[$i];
- for ($j=0; $j < $steps; ++$j) {
- $this->img->Line($xl, $y, $xr, $y);
- $y += $delta;
- }
- for ($j=0; $j < $steps; ++$j, --$i) {
- $this->img->current_color = $colors[$i];
- $this->img->Line($xl, $y, $xr, $y);
- $y += $delta;
- }
- break;
-
- case GRAD_LEFT_REFLECTION:
- $steps1 = ceil(0.3*abs($xr-$xl));
- $delta = $xr>=$xl ? 1 : -1;
-
- $from_color = $this->img->rgb->Color($from_color);
- $adj = 1.4;
- $m = ($adj-1.0)*(255-min(255, min($from_color[0], min($from_color[1], $from_color[2]))));
- $from_color2 = array(min(255, $from_color[0]+$m),
- min(255, $from_color[1]+$m), min(255, $from_color[2]+$m));
-
- $this->GetColArray($from_color2, $to_color, $steps1, $colors, $this->numcolors);
- $n = count($colors);
- for ($x=$xl, $i=0; $i < $steps1 && $i < $n; ++$i) {
- $this->img->current_color = $colors[$i];
- $this->img->Line($x, $yb, $x, $yt);
- $x += $delta;
- }
- $steps2 = max(1, ceil(0.08*abs($xr-$xl)));
- $this->img->SetColor($to_color);
- for ($j=0; $j< $steps2; ++$j) {
- $this->img->Line($x, $yb, $x, $yt);
- $x += $delta;
- }
- $steps = abs($xr-$xl)-$steps1-$steps2;
- $this->GetColArray($to_color, $from_color, $steps, $colors, $this->numcolors);
- $n = count($colors);
- for ($i=0; $i < $steps && $i < $n; ++$i) {
- $this->img->current_color = $colors[$i];
- $this->img->Line($x, $yb, $x, $yt);
- $x += $delta;
- }
- break;
-
- case GRAD_RIGHT_REFLECTION:
- $steps1 = ceil(0.7*abs($xr-$xl));
- $delta = $xr>=$xl ? 1 : -1;
-
- $this->GetColArray($from_color, $to_color, $steps1, $colors, $this->numcolors);
- $n = count($colors);
- for ($x=$xl, $i=0; $i < $steps1 && $i < $n; ++$i) {
- $this->img->current_color = $colors[$i];
- $this->img->Line($x, $yb, $x, $yt);
- $x += $delta;
- }
- $steps2 = max(1, ceil(0.08*abs($xr-$xl)));
- $this->img->SetColor($to_color);
- for ($j=0; $j< $steps2; ++$j) {
- $this->img->Line($x, $yb, $x, $yt);
- $x += $delta;
- }
-
- $from_color = $this->img->rgb->Color($from_color);
- $adj = 1.4;
- $m = ($adj-1.0)*(255-min(255, min($from_color[0], min($from_color[1], $from_color[2]))));
- $from_color = array(min(255, $from_color[0]+$m),
- min(255, $from_color[1]+$m), min(255, $from_color[2]+$m));
-
- $steps = abs($xr-$xl)-$steps1-$steps2;
- $this->GetColArray($to_color, $from_color, $steps, $colors, $this->numcolors);
- $n = count($colors);
- for ($i=0; $i < $steps && $i < $n; ++$i) {
- $this->img->current_color = $colors[$i];
- $this->img->Line($x, $yb, $x, $yt);
- $x += $delta;
- }
- break;
-
- case GRAD_CENTER:
- $steps = ceil(min(($yb-$yt)+1, ($xr-$xl)+1)/2);
- $this->GetColArray($from_color, $to_color, $steps, $colors, $this->numcolors);
- $dx = ($xr-$xl)/2;
- $dy = ($yb-$yt)/2;
- $x=$xl;$y=$yt;$x2=$xr;$y2=$yb;
- $n = count($colors);
- for ($x=$xl, $i=0; $x < $xl+$dx && $y < $yt+$dy && $i < $n; ++$x, ++$y, --$x2, --$y2, ++$i) {
- $this->img->current_color = $colors[$i];
- $this->img->Rectangle($x, $y, $x2, $y2);
- }
- $this->img->Line($x, $y, $x2, $y2);
- break;
-
- case GRAD_RAISED_PANEL:
- // right to left
- $steps1 = $xr-$xl;
- $delta = $xr>=$xl ? 1 : -1;
- $this->GetColArray($to_color, $from_color, $steps1, $colors, $this->numcolors);
- $n = count($colors);
- for ($x=$xl, $i=0; $i < $steps1 && $i < $n; ++$i) {
- $this->img->current_color = $colors[$i];
- $this->img->Line($x, $yb, $x, $yt);
- $x += $delta;
- }
-
- // left to right
- $xr -= 3;
- $xl += 3;
- $yb -= 3;
- $yt += 3;
- $steps2 = $xr-$xl;
- $delta = $xr>=$xl ? 1 : -1;
- for ($x=$xl, $j=$steps2; $j >= 0; --$j) {
- $this->img->current_color = $colors[$j];
- $this->img->Line($x, $yb, $x, $yt);
- $x += $delta;
- }
- break;
-
- case GRAD_DIAGONAL:
- // use the longer dimension to determine the required number of steps.
- // first loop draws from one corner to the mid-diagonal and the second
- // loop draws from the mid-diagonal to the opposing corner.
- if ($xr-$xl > $yb - $yt) {
- // width is greater than height -> use x-dimension for steps
- $steps = $xr-$xl;
- $delta = $xr>=$xl ? 1 : -1;
- $this->GetColArray($from_color, $to_color, $steps*2, $colors, $this->numcolors);
- $n = count($colors);
-
- for ($x=$xl, $i=0; $i < $steps && $i < $n; ++$i) {
- $this->img->current_color = $colors[$i];
- $y = $yt+($i/$steps)*($yb-$yt)*$delta;
- $this->img->Line($x, $yt, $xl, $y);
- $x += $delta;
- }
-
- for ($x=$xl, $i = 0; $i < $steps && $i < $n; ++$i) {
- $this->img->current_color = $colors[$steps+$i];
- $y = $yt+($i/$steps)*($yb-$yt)*$delta;
- $this->img->Line($x, $yb, $xr, $y);
- $x += $delta;
- }
- } else {
- // height is greater than width -> use y-dimension for steps
- $steps = $yb-$yt;
- $delta = $yb>=$yt ? 1 : -1;
- $this->GetColArray($from_color, $to_color, $steps*2, $colors, $this->numcolors);
- $n = count($colors);
-
- for ($y=$yt, $i=0; $i < $steps && $i < $n; ++$i) {
- $this->img->current_color = $colors[$i];
- $x = $xl+($i/$steps)*($xr-$xl)*$delta;
- $this->img->Line($x, $yt, $xl, $y);
- $y += $delta;
- }
-
- for ($y=$yt, $i = 0; $i < $steps && $i < $n; ++$i) {
- $this->img->current_color = $colors[$steps+$i];
- $x = $xl+($i/$steps)*($xr-$xl)*$delta;
- $this->img->Line($x, $yb, $xr, $y);
- $x += $delta;
- }
- }
- break;
-
- default:
- JpGraphError::RaiseL(7001, $style);
- //("Unknown gradient style (=$style).");
- break;
+ case GRAD_VER:
+ $steps = ceil(abs($xr-$xl));
+ $delta = $xr>=$xl ? 1 : -1;
+ $this->GetColArray($from_color, $to_color, $steps, $colors, $this->numcolors);
+ for ($i=0, $x=$xl; $i < $steps; ++$i) {
+ $this->img->current_color = $colors[$i];
+ $this->img->Line($x, $yt, $x, $yb);
+ $x += $delta;
}
+ break;
+
+ case GRAD_HOR:
+ $steps = ceil(abs($yb-$yt));
+ $delta = $yb>=$yt ? 1 : -1;
+ $this->GetColArray($from_color, $to_color, $steps, $colors, $this->numcolors);
+ for ($i=0,$y=$yt; $i < $steps; ++$i) {
+ $this->img->current_color = $colors[$i];
+ $this->img->Line($xl, $y, $xr, $y);
+ $y += $delta;
+ }
+ break;
+
+ case GRAD_MIDHOR:
+ $steps = ceil(abs($yb-$yt)/2);
+ $delta = $yb >= $yt ? 1 : -1;
+ $this->GetColArray($from_color, $to_color, $steps, $colors, $this->numcolors);
+ for ($y=$yt, $i=0; $i < $steps; ++$i) {
+ $this->img->current_color = $colors[$i];
+ $this->img->Line($xl, $y, $xr, $y);
+ $y += $delta;
+ }
+ --$i;
+ if (abs($yb-$yt) % 2 == 1) {
+ --$steps;
+ }
+ for ($j=0; $j < $steps; ++$j, --$i) {
+ $this->img->current_color = $colors[$i];
+ $this->img->Line($xl, $y, $xr, $y);
+ $y += $delta;
+ }
+ $this->img->Line($xl, $y, $xr, $y);
+ break;
+
+ case GRAD_MIDVER:
+ $steps = ceil(abs($xr-$xl)/2);
+ $delta = $xr>=$xl ? 1 : -1;
+ $this->GetColArray($from_color, $to_color, $steps, $colors, $this->numcolors);
+ for ($x=$xl, $i=0; $i < $steps; ++$i) {
+ $this->img->current_color = $colors[$i];
+ $this->img->Line($x, $yb, $x, $yt);
+ $x += $delta;
+ }
+ --$i;
+ if (abs($xr-$xl) % 2 == 1) {
+ --$steps;
+ }
+ for ($j=0; $j < $steps; ++$j, --$i) {
+ $this->img->current_color = $colors[$i];
+ $this->img->Line($x, $yb, $x, $yt);
+ $x += $delta;
+ }
+ $this->img->Line($x, $yb, $x, $yt);
+ break;
+
+ case GRAD_WIDE_MIDVER:
+ $diff = ceil(abs($xr-$xl));
+ $steps = floor(abs($diff)/3);
+ $firststep = $diff - 2*$steps ;
+ $delta = $xr >= $xl ? 1 : -1;
+ $this->GetColArray($from_color, $to_color, $firststep, $colors, $this->numcolors);
+ for ($x=$xl, $i=0; $i < $firststep; ++$i) {
+ $this->img->current_color = $colors[$i];
+ $this->img->Line($x, $yb, $x, $yt);
+ $x += $delta;
+ }
+ --$i;
+ $this->img->current_color = $colors[$i];
+ for ($j=0; $j< $steps; ++$j) {
+ $this->img->Line($x, $yb, $x, $yt);
+ $x += $delta;
+ }
+
+ for ($j=0; $j < $steps; ++$j, --$i) {
+ $this->img->current_color = $colors[$i];
+ $this->img->Line($x, $yb, $x, $yt);
+ $x += $delta;
+ }
+ break;
+
+ case GRAD_WIDE_MIDHOR:
+ $diff = ceil(abs($yb-$yt));
+ $steps = floor(abs($diff)/3);
+ $firststep = $diff - 2*$steps ;
+ $delta = $yb >= $yt? 1 : -1;
+ $this->GetColArray($from_color, $to_color, $firststep, $colors, $this->numcolors);
+ for ($y=$yt, $i=0; $i < $firststep; ++$i) {
+ $this->img->current_color = $colors[$i];
+ $this->img->Line($xl, $y, $xr, $y);
+ $y += $delta;
+ }
+ --$i;
+ $this->img->current_color = $colors[$i];
+ for ($j=0; $j < $steps; ++$j) {
+ $this->img->Line($xl, $y, $xr, $y);
+ $y += $delta;
+ }
+ for ($j=0; $j < $steps; ++$j, --$i) {
+ $this->img->current_color = $colors[$i];
+ $this->img->Line($xl, $y, $xr, $y);
+ $y += $delta;
+ }
+ break;
+
+ case GRAD_LEFT_REFLECTION:
+ $steps1 = ceil(0.3*abs($xr-$xl));
+ $delta = $xr>=$xl ? 1 : -1;
+
+ $from_color = $this->img->rgb->Color($from_color);
+ $adj = 1.4;
+ $m = ($adj-1.0)*(255-min(255, min($from_color[0], min($from_color[1], $from_color[2]))));
+ $from_color2 = array(min(255, $from_color[0]+$m),
+ min(255, $from_color[1]+$m), min(255, $from_color[2]+$m));
+
+ $this->GetColArray($from_color2, $to_color, $steps1, $colors, $this->numcolors);
+ $n = count($colors);
+ for ($x=$xl, $i=0; $i < $steps1 && $i < $n; ++$i) {
+ $this->img->current_color = $colors[$i];
+ $this->img->Line($x, $yb, $x, $yt);
+ $x += $delta;
+ }
+ $steps2 = max(1, ceil(0.08*abs($xr-$xl)));
+ $this->img->SetColor($to_color);
+ for ($j=0; $j< $steps2; ++$j) {
+ $this->img->Line($x, $yb, $x, $yt);
+ $x += $delta;
+ }
+ $steps = abs($xr-$xl)-$steps1-$steps2;
+ $this->GetColArray($to_color, $from_color, $steps, $colors, $this->numcolors);
+ $n = count($colors);
+ for ($i=0; $i < $steps && $i < $n; ++$i) {
+ $this->img->current_color = $colors[$i];
+ $this->img->Line($x, $yb, $x, $yt);
+ $x += $delta;
+ }
+ break;
+
+ case GRAD_RIGHT_REFLECTION:
+ $steps1 = ceil(0.7*abs($xr-$xl));
+ $delta = $xr>=$xl ? 1 : -1;
+
+ $this->GetColArray($from_color, $to_color, $steps1, $colors, $this->numcolors);
+ $n = count($colors);
+ for ($x=$xl, $i=0; $i < $steps1 && $i < $n; ++$i) {
+ $this->img->current_color = $colors[$i];
+ $this->img->Line($x, $yb, $x, $yt);
+ $x += $delta;
+ }
+ $steps2 = max(1, ceil(0.08*abs($xr-$xl)));
+ $this->img->SetColor($to_color);
+ for ($j=0; $j< $steps2; ++$j) {
+ $this->img->Line($x, $yb, $x, $yt);
+ $x += $delta;
+ }
+
+ $from_color = $this->img->rgb->Color($from_color);
+ $adj = 1.4;
+ $m = ($adj-1.0)*(255-min(255, min($from_color[0], min($from_color[1], $from_color[2]))));
+ $from_color = array(min(255, $from_color[0]+$m),
+ min(255, $from_color[1]+$m), min(255, $from_color[2]+$m));
+
+ $steps = abs($xr-$xl)-$steps1-$steps2;
+ $this->GetColArray($to_color, $from_color, $steps, $colors, $this->numcolors);
+ $n = count($colors);
+ for ($i=0; $i < $steps && $i < $n; ++$i) {
+ $this->img->current_color = $colors[$i];
+ $this->img->Line($x, $yb, $x, $yt);
+ $x += $delta;
+ }
+ break;
+
+ case GRAD_CENTER:
+ $steps = ceil(min(($yb-$yt)+1, ($xr-$xl)+1)/2);
+ $this->GetColArray($from_color, $to_color, $steps, $colors, $this->numcolors);
+ $dx = ($xr-$xl)/2;
+ $dy = ($yb-$yt)/2;
+ $x=$xl;$y=$yt;$x2=$xr;$y2=$yb;
+ $n = count($colors);
+ for ($x=$xl, $i=0; $x < $xl+$dx && $y < $yt+$dy && $i < $n; ++$x, ++$y, --$x2, --$y2, ++$i) {
+ $this->img->current_color = $colors[$i];
+ $this->img->Rectangle($x, $y, $x2, $y2);
+ }
+ $this->img->Line($x, $y, $x2, $y2);
+ break;
+
+ case GRAD_RAISED_PANEL:
+ // right to left
+ $steps1 = $xr-$xl;
+ $delta = $xr>=$xl ? 1 : -1;
+ $this->GetColArray($to_color, $from_color, $steps1, $colors, $this->numcolors);
+ $n = count($colors);
+ for ($x=$xl, $i=0; $i < $steps1 && $i < $n; ++$i) {
+ $this->img->current_color = $colors[$i];
+ $this->img->Line($x, $yb, $x, $yt);
+ $x += $delta;
+ }
+
+ // left to right
+ $xr -= 3;
+ $xl += 3;
+ $yb -= 3;
+ $yt += 3;
+ $steps2 = $xr-$xl;
+ $delta = $xr>=$xl ? 1 : -1;
+ for ($x=$xl, $j=$steps2; $j >= 0; --$j) {
+ $this->img->current_color = $colors[$j];
+ $this->img->Line($x, $yb, $x, $yt);
+ $x += $delta;
+ }
+ break;
+
+ case GRAD_DIAGONAL:
+ // use the longer dimension to determine the required number of steps.
+ // first loop draws from one corner to the mid-diagonal and the second
+ // loop draws from the mid-diagonal to the opposing corner.
+ if ($xr-$xl > $yb - $yt) {
+ // width is greater than height -> use x-dimension for steps
+ $steps = $xr-$xl;
+ $delta = $xr>=$xl ? 1 : -1;
+ $this->GetColArray($from_color, $to_color, $steps*2, $colors, $this->numcolors);
+ $n = count($colors);
+
+ for ($x=$xl, $i=0; $i < $steps && $i < $n; ++$i) {
+ $this->img->current_color = $colors[$i];
+ $y = $yt+($i/$steps)*($yb-$yt)*$delta;
+ $this->img->Line($x, $yt, $xl, $y);
+ $x += $delta;
+ }
+
+ for ($x=$xl, $i = 0; $i < $steps && $i < $n; ++$i) {
+ $this->img->current_color = $colors[$steps+$i];
+ $y = $yt+($i/$steps)*($yb-$yt)*$delta;
+ $this->img->Line($x, $yb, $xr, $y);
+ $x += $delta;
+ }
+ } else {
+ // height is greater than width -> use y-dimension for steps
+ $steps = $yb-$yt;
+ $delta = $yb>=$yt ? 1 : -1;
+ $this->GetColArray($from_color, $to_color, $steps*2, $colors, $this->numcolors);
+ $n = count($colors);
+
+ for ($y=$yt, $i=0; $i < $steps && $i < $n; ++$i) {
+ $this->img->current_color = $colors[$i];
+ $x = $xl+($i/$steps)*($xr-$xl)*$delta;
+ $this->img->Line($x, $yt, $xl, $y);
+ $y += $delta;
+ }
+
+ for ($y=$yt, $i = 0; $i < $steps && $i < $n; ++$i) {
+ $this->img->current_color = $colors[$steps+$i];
+ $x = $xl+($i/$steps)*($xr-$xl)*$delta;
+ $this->img->Line($x, $yb, $xr, $y);
+ $x += $delta;
+ }
+ }
+ break;
+
+ default:
+ JpGraphError::RaiseL(7001, $style);
+//("Unknown gradient style (=$style).");
+ break;
+ }
}
// Fill a special case of a polygon with a flat bottom
@@ -341,7 +340,7 @@ class Gradient
if (count($pts) == 0) {
return;
}
-
+
$maxy=$pts[1];
$miny=$pts[1];
$n = count($pts) ;
@@ -351,7 +350,7 @@ class Gradient
$miny = min($miny, $y);
$maxy = max($maxy, $y);
}
-
+
$colors = array();
$this->GetColArray($from_color, $to_color, abs($maxy-$miny)+1, $colors, $this->numcolors);
for ($i=$miny, $idx=0; $i <= $maxy; ++$i) {
@@ -363,14 +362,14 @@ class Gradient
while ($idx < $n-1) {
$p1 = array(round($pts[$idx*2]),round($pts[$idx*2+1]));
$p2 = array(round($pts[++$idx*2]),round($pts[$idx*2+1]));
-
+
// Find the largest rectangle we can fill
$y = max($p1[1], $p2[1]) ;
for ($yy=$maxy; $yy > $y; --$yy) {
$this->img->current_color = $colmap[$yy];
$this->img->Line($p1[0], $yy, $p2[0]-1, $yy);
}
-
+
if ($p1[1] == $p2[1]) {
continue;
}
@@ -407,23 +406,22 @@ class Gradient
if ($arr_size==0) {
return;
}
-
// If color is given as text get it's corresponding r,g,b values
$from_color = $this->img->rgb->Color($from_color);
$to_color = $this->img->rgb->Color($to_color);
-
+
$rdelta=($to_color[0]-$from_color[0])/$numcols;
$gdelta=($to_color[1]-$from_color[1])/$numcols;
$bdelta=($to_color[2]-$from_color[2])/$numcols;
- $colorsperstep = $numcols/$arr_size;
- $prevcolnum = -1;
- $from_alpha = floatval($from_color[3]);
- $to_alpha = floatval($to_color[3]);
+ $colorsperstep = $numcols/$arr_size;
+ $prevcolnum = -1;
+ $from_alpha = $from_color[3];
+ $to_alpha = $to_color[3];
$adelta = ($to_alpha - $from_alpha) / $numcols ;
for ($i=0; $i < $arr_size; ++$i) {
$colnum = floor($colorsperstep*$i);
if ($colnum == $prevcolnum) {
- $colors[$i] = $colidx;
+ $colors[$i] = $colidx;
} else {
$r = floor($from_color[0] + $colnum*$rdelta);
$g = floor($from_color[1] + $colnum*$gdelta);
diff --git a/onyx2/include/jpgraph/jpgraph_iconplot.php b/onyx2/include/jpgraph/jpgraph_iconplot.php
index 8413741..4b66c21 100644
--- a/onyx2/include/jpgraph/jpgraph_iconplot.php
+++ b/onyx2/include/jpgraph/jpgraph_iconplot.php
@@ -1,11 +1,11 @@
iFile = $aFile;
$this->iX=$aX;
@@ -95,7 +95,7 @@ class IconPlot
$this->iHorAnchor=$aXAnchor;
$this->iVertAnchor=$aYAnchor;
}
-
+
public function PreStrokeAdjust($aGraph)
{
// Nothing to do ...
@@ -143,15 +143,15 @@ class IconPlot
return true;
}
- public function Stroke($aImg, $axscale=null, $ayscale=null)
+ public function Stroke($aImg, $axscale, $ayscale)
{
$this->StrokeWithScale($aImg, $axscale, $ayscale);
}
public function StrokeWithScale($aImg, $axscale, $ayscale)
{
- if ($this->iScalePosX === null || $this->iScalePosY === null ||
- $axscale === null || $ayscale === null) {
+ if ($this->iScalePosX === null ||
+ $this->iScalePosY === null) {
$this->_Stroke($aImg);
} else {
$this->_Stroke(
@@ -188,7 +188,7 @@ class IconPlot
$iconw = imagesx($gdimg);
$iconh = imagesy($gdimg);
-
+
if ($aReturnWidthHeight) {
return array(round($iconw*$this->iScale),round($iconh*$this->iScale));
}
diff --git a/onyx2/include/jpgraph/jpgraph_imgtrans.php b/onyx2/include/jpgraph/jpgraph_imgtrans.php
index ced8746..910aa82 100644
--- a/onyx2/include/jpgraph/jpgraph_imgtrans.php
+++ b/onyx2/include/jpgraph/jpgraph_imgtrans.php
@@ -1,11 +1,11 @@
gdImg = $aGdImg;
@@ -30,7 +30,7 @@ class ImgTrans
{
- // Parameter check
+ // Parameter check
if ($aHorizonPos < 0 || $aHorizonPos > 1.0) {
JpGraphError::RaiseL(9001);
//("Value for image transformation out of bounds.\nVanishing point on horizon must be specified as a value between 0 and 1.");
@@ -46,7 +46,7 @@ class ImgTrans
} else {
$hh = $h;
}
-
+
$newgdh = imagecreatetruecolor($ww, $hh);
$crgb = new RGB($newgdh);
$fillColor = $crgb->Allocate($aFillColor);
@@ -58,7 +58,7 @@ class ImgTrans
}
$mid = round($w * $aHorizonPos);
-
+
$last=$h;
for ($y=0; $y < $h; ++$y) {
$yp = $h-$y-1;
@@ -127,7 +127,7 @@ class ImgTrans
} else {
$ww = $w;
}
-
+
$newgdh = imagecreatetruecolor($ww, $hh);
$crgb = new RGB($newgdh);
$fillColor = $crgb->Allocate($aFillColor);
diff --git a/onyx2/include/jpgraph/jpgraph_led.php b/onyx2/include/jpgraph/jpgraph_led.php
index ac68d04..01e77cf 100644
--- a/onyx2/include/jpgraph/jpgraph_led.php
+++ b/onyx2/include/jpgraph/jpgraph_led.php
@@ -1,16 +1,53 @@
'L', Cyrilic, other symbols and special symbols for
+// simulation some latin and cyrilic chars.
+// Added: New Color schemas.
+// Deleted: Some minor bugs (StrokeNumber first parameter may be eq empty string,
+// false or null - added check see line 294;
+// change color schema check for easy maintenance: 291;
+// change check on key exist in chars array: moved from StrokeNumber
+// function to _GetLED: 251;
+//
//========================================================================
-// Constants for color schema
+// Samples for troubled chars: "ԡ \r \r | \r >\n< W\r"
+// W
+
+//----------------------------------------------------------------------------
+// Each character is encoded line by line with the "On"-LEDs corresponding to
+// a '1' in the bianry mask of 4 bits.
+//
+// 4-bit mask:
+//
+// 0 ____
+// 1 ___x
+// 2 __x_
+// 3 __xx
+// 4 _x__
+// 5 _x_x
+// 6 _xx_
+// 7 _xxx
+// 8 x___
+// 9 x__x
+// 10 x_x_
+// 11 x_xx
+// 12 xx__
+// 13 xx_x
+// 14 xxx_
+// 15 xxxx
+//----------------------------------------------------------------------------
+
+// Constants for color schema. See definition of iColorSchema below
DEFINE('LEDC_RED', 0);
DEFINE('LEDC_GREEN', 1);
DEFINE('LEDC_BLUE', 2);
@@ -27,13 +64,7 @@ DEFINE('LEDC_TEAL', 12);
DEFINE('LEDC_STEELBLUE', 13);
DEFINE('LEDC_NAVY', 14);
DEFINE('LEDC_INVERTGRAY', 15);
-
-// Check that mb_strlen() is available
-if (! function_exists('mb_strlen')) {
- JpGraphError::RaiseL(25500);
- //'Multibyte strings must be enabled in the PHP installation in order to run the LED module
- // so that the function mb_strlen() is available. See PHP documentation for more information.'
-}
+// ! It correlate with two-dimensional array $iColorSchema
//========================================================================
// CLASS DigitalLED74
@@ -47,171 +78,156 @@ class DigitalLED74
private $iLED_Y=7;
// fg-up, fg-down, bg
private $iColorSchema = array(
- LEDC_RED => array('red','darkred:0.9','red:0.3'),// 0
- LEDC_GREEN => array('green','darkgreen','green:0.3'),// 1
- LEDC_BLUE => array('lightblue:0.9','darkblue:0.85','darkblue:0.7'),// 2
- LEDC_YELLOW => array('yellow','yellow:0.4','yellow:0.3'),// 3
- LEDC_GRAY => array('gray:1.4','darkgray:0.85','darkgray:0.7'),
- LEDC_CHOCOLATE => array('chocolate','chocolate:0.7','chocolate:0.5'),
- LEDC_PERU => array('peru:0.95','peru:0.6','peru:0.5'),
- LEDC_GOLDENROD => array('goldenrod','goldenrod:0.6','goldenrod:0.5'),
- LEDC_KHAKI => array('khaki:0.7','khaki:0.4','khaki:0.3'),
- LEDC_OLIVE => array('#808000','#808000:0.7','#808000:0.6'),
- LEDC_LIMEGREEN => array('limegreen:0.9','limegreen:0.5','limegreen:0.4'),
- LEDC_FORESTGREEN => array('forestgreen','forestgreen:0.7','forestgreen:0.5'),
- LEDC_TEAL => array('teal','teal:0.7','teal:0.5'),
- LEDC_STEELBLUE => array('steelblue','steelblue:0.65','steelblue:0.5'),
- LEDC_NAVY => array('navy:1.3','navy:0.95','navy:0.8'),//14
- LEDC_INVERTGRAY => array('darkgray','lightgray:1.5','white')//15
- );
- /* Each line of the character is encoded as a 4 bit value
- 0 ____
- 1 ___x
- 2 __x_
- 3 __xx
- 4 _x__
- 5 _x_x
- 6 _xx_
- 7 _xxx
- 8 x___
- 9 x__x
- 10 x_x_
- 11 x_xx
- 12 xx__
- 13 xx_x
- 14 xxx_
- 15 xxxx
- */
-
+ LEDC_RED => array('red','darkred:0.9','red:0.3'),// 0
+ LEDC_GREEN => array('green','darkgreen','green:0.3'),// 1
+ LEDC_BLUE => array('lightblue:0.9','darkblue:0.85','darkblue:0.7'),// 2
+ LEDC_YELLOW => array('yellow','yellow:0.4','yellow:0.3'),// 3
+ LEDC_GRAY => array('gray:1.4','darkgray:0.85','darkgray:0.7'),
+ LEDC_CHOCOLATE => array('chocolate','chocolate:0.7','chocolate:0.5'),
+ LEDC_PERU => array('peru:0.95','peru:0.6','peru:0.5'),
+ LEDC_GOLDENROD => array('goldenrod','goldenrod:0.6','goldenrod:0.5'),
+ LEDC_KHAKI => array('khaki:0.7','khaki:0.4','khaki:0.3'),
+ LEDC_OLIVE => array('#808000','#808000:0.7','#808000:0.6'),
+ LEDC_LIMEGREEN => array('limegreen:0.9','limegreen:0.5','limegreen:0.4'),
+ LEDC_FORESTGREEN => array('forestgreen','forestgreen:0.7','forestgreen:0.5'),
+ LEDC_TEAL => array('teal','teal:0.7','teal:0.5'),
+ LEDC_STEELBLUE => array('steelblue','steelblue:0.65','steelblue:0.5'),
+ LEDC_NAVY => array('navy:1.3','navy:0.95','navy:0.8'),//14
+ LEDC_INVERTGRAY => array('darkgray','lightgray:1.5','white')//15
+ );
private $iLEDSpec = array(
- 0 => array(6,9,11,15,13,9,6),
- 1 => array(2,6,10,2,2,2,2),
- 2 => array(6,9,1,2,4,8,15),
- 3 => array(6,9,1,6,1,9,6),
- 4 => array(1,3,5,9,15,1,1),
- 5 => array(15,8,8,14,1,9,6),
- 6 => array(6,8,8,14,9,9,6),
- 7 => array(15,1,1,2,4,4,4),
- 8 => array(6,9,9,6,9,9,6),
- 9 => array(6,9,9,7,1,1,6),
- '!' => array(4,4,4,4,4,0,4),
- '?' => array(6,9,1,2,2,0,2),
- '#' => array(0,9,15,9,15,9,0),
- '@' => array(6,9,11,11,10,9,6),
- '-' => array(0,0,0,15,0,0,0),
- '_' => array(0,0,0,0,0,0,15),
- '=' => array(0,0,15,0,15,0,0),
- '+' => array(0,0,4,14,4,0,0),
- '|' => array(4,4,4,4,4,4,4), //vertical line, used for simulate rus 'Ы'
- ',' => array(0,0,0,0,0,12,4),
- '.' => array(0,0,0,0,0,12,12),
- ':' => array(12,12,0,0,0,12,12),
- ';' => array(12,12,0,0,0,12,4),
- '[' => array(3,2,2,2,2,2,3),
- ']' => array(12,4,4,4,4,4,12),
- '(' => array(1,2,2,2,2,2,1),
- ')' => array(8,4,4,4,4,4,8),
- '{' => array(3,2,2,6,2,2,3),
- '}' => array(12,4,4,6,4,4,12),
- '<' => array(1,2,4,8,4,2,1),
- '>' => array(8,4,2,1,2,4,8),
- '*' => array(9,6,15,6,9,0,0),
- '"' => array(10,10,0,0,0,0,0),
- '\'' => array(4,4,0,0,0,0,0),
- '`' => array(4,2,0,0,0,0,0),
- '~' => array(13,11,0,0,0,0,0),
- '^' => array(4,10,0,0,0,0,0),
- '\\' => array(8,8,4,6,2,1,1),
- '/' => array(1,1,2,6,4,8,8),
- '%' => array(1,9,2,6,4,9,8),
- '&' => array(0,4,10,4,11,10,5),
- '$' => array(2,7,8,6,1,14,4),
- ' ' => array(0,0,0,0,0,0,0),
- '•' => array(0,0,6,6,0,0,0), //149
- '°' => array(14,10,14,0,0,0,0), //176
- '†' => array(4,4,14,4,4,4,4), //134
- '‡' => array(4,4,14,4,14,4,4), //135
- '±' => array(0,4,14,4,0,14,0), //177
- '‰' => array(0,4,2,15,2,4,0), //137 show right arrow
- '™' => array(0,2,4,15,4,2,0), //156 show left arrow
- 'Ў' => array(0,0,8,8,0,0,0), //159 show small hi-stick - that need for simulate rus 'Ф'
- "\t" => array(8,8,8,0,0,0,0), //show hi-stick - that need for simulate rus 'У'
- "\r" => array(8,8,8,8,8,8,8), //vertical line - that need for simulate 'M', 'W' and rus 'М','Ш' ,'Щ'
- "\n" => array(15,15,15,15,15,15,15), //fill up - that need for simulate rus 'Ж'
- "Ґ" => array(10,5,10,5,10,5,10), //chess
- "µ" => array(15,0,15,0,15,0,15), //4 horizontal lines
- // latin
- 'A' => array(6,9,9,15,9,9,9),
- 'B' => array(14,9,9,14,9,9,14),
- 'C' => array(6,9,8,8,8,9,6),
- 'D' => array(14,9,9,9,9,9,14),
- 'E' => array(15,8,8,14,8,8,15),
- 'F' => array(15,8,8,14,8,8,8),
- 'G' => array(6,9,8,8,11,9,6),
- 'H' => array(9,9,9,15,9,9,9),
- 'I' => array(14,4,4,4,4,4,14),
- 'J' => array(15,1,1,1,1,9,6),
- 'K' => array(8,9,10,12,12,10,9),
- 'L' => array(8,8,8,8,8,8,15),
- 'M' => array(8,13,10,8,8,8,8),// need to add \r
- 'N' => array(9,9,13,11,9,9,9),
- 'O' => array(6,9,9,9,9,9,6),
- 'P' => array(14,9,9,14,8,8,8),
- 'Q' => array(6,9,9,9,13,11,6),
- 'R' => array(14,9,9,14,12,10,9),
- 'S' => array(6,9,8,6,1,9,6),
- 'T' => array(14,4,4,4,4,4,4),
- 'U' => array(9,9,9,9,9,9,6),
- 'V' => array(0,0,0,10,10,10,4),
- 'W' => array(8,8,8,8,10,13,8),// need to add \r
- 'X' => array(9,9,6,6,6,9,9),
- 'Y' => array(10,10,10,10,4,4,4),
- 'Z' => array(15,1,2,6,4,8,15),
- // russian utf-8
- 'А' => array(6,9,9,15,9,9,9),
- 'Б' => array(14,8,8,14,9,9,14),
- 'В' => array(14,9,9,14,9,9,14),
- 'Г' => array(15,8,8,8,8,8,8),
- 'Д' => array(14,9,9,9,9,9,14),
- 'Е' => array(15,8,8,14,8,8,15),
- 'Ё' => array(6,15,8,14,8,8,15),
- //Ж is combine: >\n<
- 'З' => array(6,9,1,2,1,9,6),
- 'И' => array(9,9,9,11,13,9,9),
- 'Й' => array(13,9,9,11,13,9,9),
- 'К' => array(9,10,12,10,9,9,9),
- 'Л' => array(7,9,9,9,9,9,9),
- 'М' => array(8,13,10,8,8,8,8),// need to add \r
- 'Н' => array(9,9,9,15,9,9,9),
- 'О' => array(6,9,9,9,9,9,6),
- 'П' => array(15,9,9,9,9,9,9),
- 'Р' => array(14,9,9,14,8,8,8),
- 'С' => array(6,9,8,8,8,9,6),
- 'Т' => array(14,4,4,4,4,4,4),
- 'У' => array(9,9,9,7,1,9,6),
- 'Ф' => array(2,7,10,10,7,2,2),// need to add Ў
- 'Х' => array(9,9,6,6,6,9,9),
- 'Ц' => array(10,10,10,10,10,15,1),
- 'Ч' => array(9,9,9,7,1,1,1),
- 'Ш' => array(10,10,10,10,10,10,15),// \r
- 'Щ' => array(10,10,10,10,10,15,0),// need to add \r
- 'Ъ' => array(12,4,4,6,5,5,6),
- 'Ы' => array(8,8,8,14,9,9,14),// need to add |
- 'Ь' => array(8,8,8,14,9,9,14),
- 'Э' => array(6,9,1,7,1,9,6),
- 'Ю' => array(2,2,2,3,2,2,2),// need to add O
- 'Я' => array(7,9,9,7,3,5,9)
- );
+ 0 => array(6,9,11,15,13,9,6),
+ //0 => array(6,9,9,9,9,9,6),
+ //0 => array(15,9,9,9,9,9,15),
+ 1 => array(2,6,10,2,2,2,2),
+ 2 => array(6,9,1,2,4,8,15),
+ 3 => array(6,9,1,6,1,9,6),
+ 4 => array(1,3,5,9,15,1,1),
+ 5 => array(15,8,8,14,1,9,6),
+ 6 => array(6,8,8,14,9,9,6),
+ 7 => array(15,1,1,2,4,4,4),
+ 8 => array(6,9,9,6,9,9,6),
+ 9 => array(6,9,9,7,1,1,6),
+ '!' => array(4,4,4,4,4,0,4),
+ '?' => array(6,9,1,2,2,0,2),
+ '#' => array(0,9,15,9,15,9,0),
+ '@' => array(6,9,11,11,10,9,6),
+ '-' => array(0,0,0,15,0,0,0),
+ '_' => array(0,0,0,0,0,0,15),
+ '=' => array(0,0,15,0,15,0,0),
+ '+' => array(0,0,4,14,4,0,0),
+ '|' => array(4,4,4,4,4,4,4), //vertical line, used for simulate rus ''
+ ',' => array(0,0,0,0,0,12,4),
+ '.' => array(0,0,0,0,0,12,12),
+ ':' => array(12,12,0,0,0,12,12),
+ ';' => array(12,12,0,0,0,12,4),
+ '[' => array(3,2,2,2,2,2,3),
+ ']' => array(12,4,4,4,4,4,12),
+ '(' => array(1,2,2,2,2,2,1),
+ ')' => array(8,4,4,4,4,4,8),
+ '{' => array(3,2,2,6,2,2,3),
+ '}' => array(12,4,4,6,4,4,12),
+ '<' => array(1,2,4,8,4,2,1),
+ '>' => array(8,4,2,1,2,4,8),
+ '*' => array(9,6,15,6,9,0,0),
+ '"' => array(10,10,0,0,0,0,0),
+ '\'' => array(4,4,0,0,0,0,0),
+ '`' => array(4,2,0,0,0,0,0),
+ '~' => array(13,11,0,0,0,0,0),
+ '^' => array(4,10,0,0,0,0,0),
+ '\\' => array(8,8,4,6,2,1,1),
+ '/' => array(1,1,2,6,4,8,8),
+ '%' => array(1,9,2,6,4,9,8),
+ '&' => array(0,4,10,4,11,10,5),
+ '$' => array(2,7,8,6,1,14,4),
+ ' ' => array(0,0,0,0,0,0,0),
+ '' => array(0,0,6,6,0,0,0), //149
+ '' => array(14,10,14,0,0,0,0), //176
+ '' => array(4,4,14,4,4,4,4), //134
+ '' => array(4,4,14,4,14,4,4), //135
+ '' => array(0,4,14,4,0,14,0), //177
+ '' => array(0,4,2,15,2,4,0), //137 show right arrow
+ '' => array(0,2,4,15,4,2,0), //156 show left arrow
+ '' => array(0,0,8,8,0,0,0), //159 show small hi-stick - that need for simulate rus ''
+ "\t" => array(8,8,8,0,0,0,0), //show hi-stick - that need for simulate rus ''
+ "\r" => array(8,8,8,8,8,8,8), //vertical line - that need for simulate 'M', 'W' and rus '','' ,''
+ "\n" => array(15,15,15,15,15,15,15), //fill up - that need for simulate rus ''
+ "" => array(10,5,10,5,10,5,10), //chess
+ "" => array(15,0,15,0,15,0,15), //4 horizontal lines
+// latin
+ 'A' => array(6,9,9,15,9,9,9),
+ 'B' => array(14,9,9,14,9,9,14),
+ 'C' => array(6,9,8,8,8,9,6),
+ 'D' => array(14,9,9,9,9,9,14),
+ 'E' => array(15,8,8,14,8,8,15),
+ 'F' => array(15,8,8,14,8,8,8),
+ 'G' => array(6,9,8,8,11,9,6),
+ 'H' => array(9,9,9,15,9,9,9),
+ 'I' => array(14,4,4,4,4,4,14),
+ 'J' => array(15,1,1,1,1,9,6),
+ 'K' => array(8,9,10,12,12,10,9),
+ 'L' => array(8,8,8,8,8,8,15),
+ 'M' => array(8,13,10,8,8,8,8),// need to add \r
+ 'N' => array(9,9,13,11,9,9,9),
+ //'O' => array(0,6,9,9,9,9,6),
+ 'O' => array(6,9,9,9,9,9,6),
+ 'P' => array(14,9,9,14,8,8,8),
+ 'Q' => array(6,9,9,9,13,11,6),
+ 'R' => array(14,9,9,14,12,10,9),
+ 'S' => array(6,9,8,6,1,9,6),
+ 'T' => array(14,4,4,4,4,4,4),
+ 'U' => array(9,9,9,9,9,9,6),
+ 'V' => array(0,0,0,10,10,10,4),
+ 'W' => array(8,8,8,8,10,13,8),// need to add \r
+ 'X' => array(9,9,6,6,6,9,9),
+ //'Y' => array(9,9,9,9,6,6,6),
+ 'Y' => array(10,10,10,10,4,4,4),
+ 'Z' => array(15,1,2,6,4,8,15),
+// russian cp1251
+ '' => array(6,9,9,15,9,9,9),
+ '' => array(14,8,8,14,9,9,14),
+ '' => array(14,9,9,14,9,9,14),
+ '' => array(15,8,8,8,8,8,8),
+ '' => array(14,9,9,9,9,9,14),
+ '' => array(15,8,8,14,8,8,15),
+ '' => array(6,15,8,14,8,8,15),
+ // is combine: >\n<
+ '' => array(6,9,1,2,1,9,6),
+ '' => array(9,9,9,11,13,9,9),
+ '' => array(13,9,9,11,13,9,9),
+ '' => array(9,10,12,10,9,9,9),
+ '' => array(7,9,9,9,9,9,9),
+ '' => array(8,13,10,8,8,8,8),// need to add \r
+ '' => array(9,9,9,15,9,9,9),
+ '' => array(6,9,9,9,9,9,6),
+ '' => array(15,9,9,9,9,9,9),
+ '' => array(14,9,9,14,8,8,8),
+ '' => array(6,9,8,8,8,9,6),
+ '' => array(14,4,4,4,4,4,4),
+ '' => array(9,9,9,7,1,9,6),
+ '' => array(2,7,10,10,7,2,2),// need to add
+ '' => array(9,9,6,6,6,9,9),
+ '' => array(10,10,10,10,10,15,1),
+ '' => array(9,9,9,7,1,1,1),
+ '' => array(10,10,10,10,10,10,15),// \r
+ '' => array(10,10,10,10,10,15,0),// need to add \r
+ '' => array(12,4,4,6,5,5,6),
+ '' => array(8,8,8,14,9,9,14),// need to add |
+ '' => array(8,8,8,14,9,9,14),
+ '' => array(6,9,1,7,1,9,6),
+ '' => array(2,2,2,3,2,2,2),// need to add O
+ '' => array(7,9,9,7,3,5,9)
+ );
private $iSuperSampling = 3;
private $iMarg = 1;
private $iRad = 4;
-
- public function __construct($aRadius = 2, $aMargin= 0.6)
+
+ public function DigitalLED74($aRadius = 2, $aMargin= 0.6)
{
$this->iRad = $aRadius;
$this->iMarg = $aMargin;
}
-
+
public function SetSupersampling($aSuperSampling = 2)
{
$this->iSuperSampling = $aSuperSampling;
@@ -227,7 +243,7 @@ class DigitalLED74
// Margin in between "Led" dots
$marg = $this->iMarg * $this->iSuperSampling;
-
+
$swidth = $width*$this->iSuperSampling;
$sheight = $height*$this->iSuperSampling;
@@ -265,27 +281,20 @@ class DigitalLED74
return $img;
}
-
- public function Stroke($aValStr, $aColor = 0, $aFileName = '')
- {
- $this->StrokeNumber($aValStr, $aColor, $aFileName);
- }
-
-
- public function StrokeNumber($aValStr, $aColor = 0, $aFileName = '')
+ public function StrokeNumber($aValStr, $aColor = 0)
{
if ($aColor < 0 || $aColor >= sizeof($this->iColorSchema)) {
$aColor = 0;
}
- if (($n = mb_strlen($aValStr, 'utf8')) == 0) {
+ if (($n = strlen($aValStr)) == 0) {
$aValStr = ' ';
$n = 1;
}
for ($i = 0; $i < $n; ++$i) {
- $d = mb_substr($aValStr, $i, 1, 'utf8');
- if (ctype_digit($d)) {
+ $d = substr($aValStr, $i, 1);
+ if ($d >= '0' && $d <= '9') {
$d = (int)$d;
} else {
$d = strtoupper($d);
@@ -302,11 +311,7 @@ class DigitalLED74
$number_img->Copy($digit_img[$i]->img, $i*$w, 0, 0, 0, $w, $h, $w, $h);
}
- if ($aFileName != '') {
- $number_img->Stream($aFileName);
- } else {
- $number_img->Headers();
- $number_img->Stream();
- }
+ $number_img->Headers();
+ $number_img->Stream();
}
}
diff --git a/onyx2/include/jpgraph/jpgraph_legend.inc.php b/onyx2/include/jpgraph/jpgraph_legend.inc.php
deleted file mode 100755
index 09ba7da..0000000
--- a/onyx2/include/jpgraph/jpgraph_legend.inc.php
+++ /dev/null
@@ -1,557 +0,0 @@
-hide=$aHide;
- }
-
- public function SetHColMargin($aXMarg)
- {
- $this->xmargin = $aXMarg;
- }
-
- public function SetVColMargin($aSpacing)
- {
- $this->ylinespacing = $aSpacing ;
- }
-
- public function SetLeftMargin($aXMarg)
- {
- $this->xlmargin = $aXMarg;
- }
-
- // Synonym
- public function SetLineSpacing($aSpacing)
- {
- $this->ylinespacing = $aSpacing ;
- }
-
- public function SetShadow($aShow='gray', $aWidth=4)
- {
- if (is_string($aShow)) {
- $this->shadow_color = $aShow;
- $this->shadow=true;
- } else {
- $this->shadow = $aShow;
- }
- $this->shadow_width = $aWidth;
- }
-
- public function SetMarkAbsSize($aSize)
- {
- $this->mark_abs_vsize = $aSize ;
- $this->mark_abs_hsize = $aSize ;
- }
-
- public function SetMarkAbsVSize($aSize)
- {
- $this->mark_abs_vsize = $aSize ;
- }
-
- public function SetMarkAbsHSize($aSize)
- {
- $this->mark_abs_hsize = $aSize ;
- }
-
- public function SetLineWeight($aWeight)
- {
- $this->weight = $aWeight;
- }
-
- public function SetFrameWeight($aWeight)
- {
- $this->frameweight = $aWeight;
- }
-
- public function SetLayout($aDirection=LEGEND_VERT)
- {
- $this->layout_n = $aDirection==LEGEND_VERT ? 1 : 99 ;
- }
-
- public function SetColumns($aCols)
- {
- $this->layout_n = $aCols ;
- }
-
- public function SetReverse($f=true)
- {
- $this->reverse = $f ;
- }
-
- // Set color on frame around box
- public function SetColor($aFontColor, $aColor='black')
- {
- $this->font_color=$aFontColor;
- $this->color=$aColor;
- }
-
- public function SetFont($aFamily, $aStyle=FS_NORMAL, $aSize=10)
- {
- $this->font_family = $aFamily;
- $this->font_style = $aStyle;
- $this->font_size = $aSize;
- }
-
- public function SetPos($aX, $aY, $aHAlign='right', $aVAlign='top')
- {
- $this->Pos($aX, $aY, $aHAlign, $aVAlign);
- }
-
- public function SetAbsPos($aX, $aY, $aHAlign='right', $aVAlign='top')
- {
- $this->xabspos=$aX;
- $this->yabspos=$aY;
- $this->halign=$aHAlign;
- $this->valign=$aVAlign;
- }
-
- public function Pos($aX, $aY, $aHAlign='right', $aVAlign='top')
- {
- if (!($aX<1 && $aY<1)) {
- JpGraphError::RaiseL(25120);//(" Position for legend must be given as percentage in range 0-1");
- }
- $this->xpos=$aX;
- $this->ypos=$aY;
- $this->halign=$aHAlign;
- $this->valign=$aVAlign;
- }
-
- public function SetFillColor($aColor)
- {
- $this->fill_color=$aColor;
- }
-
- public function Clear()
- {
- $this->txtcol = array();
- }
-
- public function Add($aTxt, $aColor, $aPlotmark='', $aLinestyle=0, $csimtarget='', $csimalt='', $csimwintarget='')
- {
- $this->txtcol[]=array($aTxt,$aColor,$aPlotmark,$aLinestyle,$csimtarget,$csimalt,$csimwintarget);
- }
-
- public function GetCSIMAreas()
- {
- return $this->csimareas;
- }
-
- public function SetBackgroundGradient($aFrom='navy', $aTo='silver', $aGradType=2)
- {
- $this->bkg_gradtype=$aGradType;
- $this->bkg_gradfrom = $aFrom;
- $this->bkg_gradto = $aTo;
- }
-
- public function HasItems()
- {
- return (boolean)(count($this->txtcol));
- }
-
- public function Stroke($aImg)
- {
- // Constant
- $fillBoxFrameWeight=1;
-
- if ($this->hide) {
- return;
- }
-
- $aImg->SetFont($this->font_family, $this->font_style, $this->font_size);
-
- if ($this->reverse) {
- $this->txtcol = array_reverse($this->txtcol);
- }
-
- $n=count($this->txtcol);
- if ($n == 0) {
- return;
- }
-
- // Find out the max width and height of each column to be able
- // to size the legend box.
- $numcolumns = ($n > $this->layout_n ? $this->layout_n : $n);
- for ($i=0; $i < $numcolumns; ++$i) {
- $colwidth[$i] = $aImg->GetTextWidth($this->txtcol[$i][0]) +
- 2*$this->xmargin + 2*$this->mark_abs_hsize;
- $colheight[$i] = 0;
- }
-
- // Find our maximum height in each row
- $rows = 0 ;
- $rowheight[0] = 0;
- for ($i=0; $i < $n; ++$i) {
- $h = max($this->mark_abs_vsize, $aImg->GetTextHeight($this->txtcol[$i][0]))+$this->ylinespacing;
-
- // Makes sure we always have a minimum of 1/4 (1/2 on each side) of the mark as space
- // between two vertical legend entries
- //$h = round(max($h,$this->mark_abs_vsize+$this->ymargin));
- //echo "Textheight #$i: tetxheight=".$aImg->GetTextHeight($this->txtcol[$i][0]).', ';
- //echo "h=$h ({$this->mark_abs_vsize},{$this->ymargin})
";
- if ($i % $numcolumns == 0) {
- $rows++;
- $rowheight[$rows-1] = 0;
- }
- $rowheight[$rows-1] = max($rowheight[$rows-1], $h)+1;
- }
-
- $abs_height = 0;
- for ($i=0; $i < $rows; ++$i) {
- $abs_height += $rowheight[$i] ;
- }
-
- // Make sure that the height is at least as high as mark size + ymargin
- $abs_height = max($abs_height, $this->mark_abs_vsize);
- $abs_height += $this->ybottom_margin;
-
- // Find out the maximum width in each column
- for ($i=$numcolumns; $i < $n; ++$i) {
- $colwidth[$i % $numcolumns] = max(
- $aImg->GetTextWidth($this->txtcol[$i][0])+2*$this->xmargin+2*$this->mark_abs_hsize,
- $colwidth[$i % $numcolumns]
- );
- }
-
- // Get the total width
- $mtw = 0;
- for ($i=0; $i < $numcolumns; ++$i) {
- $mtw += $colwidth[$i] ;
- }
-
- // remove the last rows interpace margin (since there is no next row)
- $abs_height -= $this->ylinespacing;
-
-
- // Find out maximum width we need for legend box
- $abs_width = $mtw+$this->xlmargin+($numcolumns-1)*$this->mark_abs_hsize;
-
- if ($this->xabspos === -1 && $this->yabspos === -1) {
- $this->xabspos = $this->xpos*$aImg->width ;
- $this->yabspos = $this->ypos*$aImg->height ;
- }
-
- // Positioning of the legend box
- if ($this->halign == 'left') {
- $xp = $this->xabspos;
- } elseif ($this->halign == 'center') {
- $xp = $this->xabspos - $abs_width/2;
- } else {
- $xp = $aImg->width - $this->xabspos - $abs_width;
- }
-
- $yp=$this->yabspos;
- if ($this->valign == 'center') {
- $yp-=$abs_height/2;
- } elseif ($this->valign == 'bottom') {
- $yp-=$abs_height;
- }
-
- // Stroke legend box
- $aImg->SetColor($this->color);
- $aImg->SetLineWeight($this->frameweight);
- $aImg->SetLineStyle('solid');
-
- if ($this->shadow) {
- $aImg->ShadowRectangle(
- $xp,
- $yp,
- $xp+$abs_width+$this->shadow_width+2,
- $yp+$abs_height+$this->shadow_width+2,
- $this->fill_color,
- $this->shadow_width+2,
- $this->shadow_color
- );
- } else {
- $aImg->SetColor($this->fill_color);
- $aImg->FilledRectangle($xp, $yp, $xp+$abs_width, $yp+$abs_height);
- $aImg->SetColor($this->color);
- $aImg->Rectangle($xp, $yp, $xp+$abs_width, $yp+$abs_height);
- }
-
- if ($this->bkg_gradtype >= 0) {
- $grad = new Gradient($aImg);
- $grad->FilledRectangle(
- $xp+1,
- $yp+1,
- $xp+$abs_width-3,
- $yp+$abs_height-3,
- $this->bkg_gradfrom,
- $this->bkg_gradto,
- $this->bkg_gradtype
- );
- }
-
- // x1,y1 is the position for the legend marker + text
- // The vertical position is the baseline position for the text
- // and every marker is adjusted acording to that.
-
- // For multiline texts this get more complicated.
-
- $x1 = $xp + $this->xlmargin;
- $y1 = $yp + $rowheight[0] - $this->ylinespacing + 2 ; // The ymargin is included in rowheight
-
- // Now, y1 is the bottom vertical position of the first legend, i.e if
- // the legend has multiple lines it is the bottom line.
-
- $grad = new Gradient($aImg);
- $patternFactory = null;
-
- // Now stroke each legend in turn
- // Each plot has added the following information to the legend
- // p[0] = Legend text
- // p[1] = Color,
- // p[2] = For markers a reference to the PlotMark object
- // p[3] = For lines the line style, for gradient the negative gradient style
- // p[4] = CSIM target
- // p[5] = CSIM Alt text
- $i = 1 ;
- $row = 0;
- foreach ($this->txtcol as $p) {
-
- // STROKE DEBUG BOX
- if (_JPG_DEBUG) {
- $aImg->SetLineWeight(1);
- $aImg->SetColor('red');
- $aImg->SetLineStyle('solid');
- $aImg->Rectangle($x1, $y1, $xp+$abs_width-1, $y1-$rowheight[$row]);
- }
-
- $aImg->SetLineWeight($this->weight);
- $x1 = round($x1)+1; // We add one to not collide with the border
- $y1=round($y1);
-
- // This is the center offset up from the baseline which is
- // considered the "center" of the marks. This gets slightly complicated since
- // we need to consider if the text is a multiline paragraph or if it is only
- // a single line. The reason is that for single line the y1 corresponds to the baseline
- // and that is fine. However for a multiline paragraph there is no single baseline
- // and in that case the y1 corresponds to the lowest y for the bounding box. In that
- // case we center the mark in the middle of the paragraph
- if (!preg_match('/\n/', $p[0])) {
- // Single line
- $marky = ceil($y1-$this->mark_abs_vsize/2)-1;
- } else {
- // Paragraph
- $marky = $y1 - $aImg->GetTextHeight($p[0])/2;
-
- // echo "y1=$y1, p[o]={$p[0]}, marky=$marky
";
- }
-
- //echo "
Mark #$i: marky=$marky
";
-
- $x1 += $this->mark_abs_hsize;
-
- if (!empty($p[2]) && $p[2]->GetType() > -1) {
-
-
- // Make a plot mark legend. This is constructed with a mark which
- // is run through with a line
-
- // First construct a bit of the line that looks exactly like the
- // line in the plot
- $aImg->SetColor($p[1]);
- if (is_string($p[3]) || $p[3]>0) {
- $aImg->SetLineStyle($p[3]);
- $aImg->StyleLine($x1-$this->mark_abs_hsize, $marky, $x1+$this->mark_abs_hsize, $marky);
- }
-
- // Stroke a mark using image
- if ($p[2]->GetType() == MARK_IMG) {
- $p[2]->Stroke($aImg, $x1, $marky);
- }
-
- // Stroke a mark with the standard size
- // (As long as it is not an image mark )
- if ($p[2]->GetType() != MARK_IMG) {
-
- // Clear any user callbacks since we ont want them called for
- // the legend marks
- $p[2]->iFormatCallback = '';
- $p[2]->iFormatCallback2 = '';
-
- // Since size for circles is specified as the radius
- // this means that we must half the size to make the total
- // width behave as the other marks
- if ($p[2]->GetType() == MARK_FILLEDCIRCLE || $p[2]->GetType() == MARK_CIRCLE) {
- $p[2]->SetSize(min($this->mark_abs_vsize, $this->mark_abs_hsize)/2);
- $p[2]->Stroke($aImg, $x1, $marky);
- } else {
- $p[2]->SetSize(min($this->mark_abs_vsize, $this->mark_abs_hsize));
- $p[2]->Stroke($aImg, $x1, $marky);
- }
- }
- } elseif (!empty($p[2]) && (is_string($p[3]) || $p[3]>0)) {
- // Draw a styled line
- $aImg->SetColor($p[1]);
- $aImg->SetLineStyle($p[3]);
- $aImg->StyleLine($x1-$this->mark_abs_hsize, $marky, $x1+$this->mark_abs_hsize, $marky);
- $aImg->StyleLine($x1-$this->mark_abs_hsize, $marky+1, $x1+$this->mark_abs_hsize, $marky+1);
- } else {
- // Draw a colored box
- $color = $p[1] ;
-
- // We make boxes slightly larger to better show
- $boxsize = max($this->mark_abs_vsize, $this->mark_abs_hsize) + 2 ;
-
- $ym = $marky-ceil($boxsize/2) ; // Marker y-coordinate
-
- // We either need to plot a gradient or a
- // pattern. To differentiate we use a kludge.
- // Patterns have a p[3] value of < -100
- if ($p[3] < -100) {
- // p[1][0] == iPattern, p[1][1] == iPatternColor, p[1][2] == iPatternDensity
- if ($patternFactory == null) {
- $patternFactory = new RectPatternFactory();
- }
- $prect = $patternFactory->Create($p[1][0], $p[1][1], 1);
- $prect->SetBackground($p[1][3]);
- $prect->SetDensity($p[1][2]+1);
- $prect->SetPos(new Rectangle($x1, $ym, $boxsize, $boxsize));
- $prect->Stroke($aImg);
- $prect=null;
- } else {
- if (is_array($color) && count($color)==2) {
- // The client want a gradient color
- $grad->FilledRectangle(
- $x1-$boxsize/2,
- $ym,
- $x1+$boxsize/2,
- $ym+$boxsize,
- $color[0],
- $color[1],
- -$p[3]
- );
- } else {
- $aImg->SetColor($p[1]);
- $aImg->FilledRectangle($x1-$boxsize/2, $ym, $x1+$boxsize/2, $ym+$boxsize);
- }
-
- // Draw a plot frame line
- $aImg->SetColor($this->color);
- $aImg->SetLineWeight($fillBoxFrameWeight);
- $aImg->Rectangle(
- $x1-$boxsize/2,
- $ym,
- $x1+$boxsize/2,
- $ym+$boxsize
- );
- }
- }
- $aImg->SetColor($this->font_color);
- $aImg->SetFont($this->font_family, $this->font_style, $this->font_size);
- $aImg->SetTextAlign('left', 'baseline');
-
- $debug=false;
- $aImg->StrokeText(
- $x1+$this->mark_abs_hsize+$this->xmargin,
- $y1,
- $p[0],
- 0,
- 'left',
- $debug
- );
-
- // Add CSIM for Legend if defined
- if (!empty($p[4])) {
- $xs = $x1 - $this->mark_abs_hsize ;
- $ys = $y1 + 1 ;
- $xe = $x1 + $aImg->GetTextWidth($p[0]) + $this->mark_abs_hsize + $this->xmargin ;
- $ye = $y1-$rowheight[$row]+1;
- $coords = "$xs,$ys,$xe,$y1,$xe,$ye,$xs,$ye";
- if (! empty($p[4])) {
- $this->csimareas .= "csimareas .= " target=\"".$p[6]."\"";
- }
-
- if (!empty($p[5])) {
- $tmp=sprintf($p[5], $p[0]);
- $this->csimareas .= " title=\"$tmp\" alt=\"$tmp\" ";
- }
- $this->csimareas .= " />\n";
- }
- }
-
- if ($i >= $this->layout_n) {
- $x1 = $xp+$this->xlmargin;
- $row++;
- if (!empty($rowheight[$row])) {
- $y1 += $rowheight[$row];
- }
- $i = 1;
- } else {
- $x1 += $colwidth[($i-1) % $numcolumns] ;
- ++$i;
- }
- }
- }
-} // Class
diff --git a/onyx2/include/jpgraph/jpgraph_line.php b/onyx2/include/jpgraph/jpgraph_line.php
index a05df1a..f09fe74 100644
--- a/onyx2/include/jpgraph/jpgraph_line.php
+++ b/onyx2/include/jpgraph/jpgraph_line.php
@@ -1,13 +1,13 @@
Plot($datay, $datax);
$this->mark = new PlotMark() ;
- $this->color = ColorFactory::getColor();
- $this->fill_color = $this->color;
}
//---------------
// PUBLIC METHODS
- public function SetFilled($aFlg=true)
+ // Set style, filled or open
+ public function SetFilled($aFlag=true)
{
- $this->filled = $aFlg;
+ JpGraphError::RaiseL(10001);//('LinePlot::SetFilled() is deprecated. Use SetFillColor()');
}
-
+
public function SetBarCenter($aFlag=true)
{
$this->barcenter=$aFlag;
@@ -65,30 +63,24 @@ class LinePlot extends Plot
{
$this->line_style=$aStyle;
}
-
+
public function SetStepStyle($aFlag=true)
{
$this->step_style = $aFlag;
}
-
+
public function SetColor($aColor)
{
parent::SetColor($aColor);
}
-
+
public function SetFillFromYMin($f=true)
{
$this->fillFromMin = $f ;
}
-
- public function SetFillFromYMax($f=true)
- {
- $this->fillFromMax = $f ;
- }
-
+
public function SetFillColor($aColor, $aFilled=true)
{
- //$this->color = $aColor;
$this->fill_color=$aColor;
$this->filled=$aFilled;
}
@@ -101,7 +93,7 @@ class LinePlot extends Plot
$this->filled = $aFilled;
$this->fillgrad = true;
}
-
+
public function Legend($graph)
{
if ($this->legend!="") {
@@ -151,16 +143,17 @@ class LinePlot extends Plot
}
$this->filledAreas[] = array($aMin,$aMax,$aColor,$aFilled,$aBorder);
}
-
+
// Gets called before any axis are stroked
public function PreStrokeAdjust($graph)
{
- // If another plot type have already adjusted the
+ // If another plot type have already adjusted the
// offset we don't touch it.
// (We check for empty in case the scale is a log scale
// and hence doesn't contain any xlabel_offset)
- if (empty($graph->xaxis->scale->ticks->xlabel_offset) || $graph->xaxis->scale->ticks->xlabel_offset == 0) {
+ if (empty($graph->xaxis->scale->ticks->xlabel_offset) ||
+ $graph->xaxis->scale->ticks->xlabel_offset == 0) {
if ($this->center) {
++$this->numpoints;
$a=0.5;
@@ -174,7 +167,7 @@ class LinePlot extends Plot
//$graph->xaxis->scale->ticks->SupressMinorTickMarks();
}
}
-
+
public function SetFastStroke($aFlg=true)
{
$this->iFastStroke = $aFlg;
@@ -217,7 +210,7 @@ class LinePlot extends Plot
$img->Polygon($cord, false, true);
}
-
+
public function Stroke($img, $xscale, $yscale)
{
$idx=0;
@@ -225,8 +218,9 @@ class LinePlot extends Plot
if (isset($this->coords[1])) {
if (count($this->coords[1])!=$numpoints) {
JpGraphError::RaiseL(2003, count($this->coords[1]), $numpoints);
+ }
//("Number of X and Y points are not equal. Number of X-points:".count($this->coords[1])." Number of Y-points:$numpoints");
- } else {
+ else {
$exist_x = true;
}
} else {
@@ -266,22 +260,18 @@ class LinePlot extends Plot
$yscale->Translate($this->coords[0][$startpoint])
);
+
if ($this->filled) {
- if ($this->fillFromMax) {
- //$max = $yscale->GetMaxVal();
- $cord[$idx++] = $xscale->Translate($xs);
- $cord[$idx++] = $yscale->scale_abs[1];
- } else {
- $min = $yscale->GetMinVal();
- if ($min > 0 || $this->fillFromMin) {
- $fillmin = $yscale->scale_abs[0];//Translate($min);
- } else {
- $fillmin = $yscale->Translate(0);
- }
-
- $cord[$idx++] = $xscale->Translate($xs);
- $cord[$idx++] = $fillmin;
+ $min = $yscale->GetMinVal();
+ if ($min > 0 || $this->fillFromMin) {
+ $fillmin = $yscale->scale_abs[0];
+ }//Translate($min);
+ else {
+ $fillmin = $yscale->Translate(0);
}
+
+ $cord[$idx++] = $xscale->Translate($xs);
+ $cord[$idx++] = $fillmin;
}
$xt = $xscale->Translate($xs);
$yt = $yscale->Translate($this->coords[0][$startpoint]);
@@ -308,7 +298,7 @@ class LinePlot extends Plot
}
$xt = $xscale->Translate($x);
$yt = $yscale->Translate($this->coords[0][$pnts]);
-
+
$y=$this->coords[0][$pnts];
if ($this->step_style) {
// To handle null values within step style we need to record the
@@ -383,14 +373,10 @@ class LinePlot extends Plot
if ($this->filled) {
$cord[$idx++] = $xt;
- if ($this->fillFromMax) {
- $cord[$idx++] = $yscale->scale_abs[1];
+ if ($min > 0 || $this->fillFromMin) {
+ $cord[$idx++] = $yscale->Translate($min);
} else {
- if ($min > 0 || $this->fillFromMin) {
- $cord[$idx++] = $yscale->Translate($min);
- } else {
- $cord[$idx++] = $yscale->Translate(0);
- }
+ $cord[$idx++] = $yscale->Translate(0);
}
if ($this->fillgrad) {
$img->SetLineWeight(1);
@@ -402,13 +388,9 @@ class LinePlot extends Plot
$img->SetColor($this->fill_color);
$img->FilledPolygon($cord);
}
- if ($this->weight > 0) {
- $img->SetLineWeight($this->weight);
+ if ($this->line_weight > 0) {
$img->SetColor($this->color);
- // Remove first and last coordinate before drawing the line
- // sine we otherwise get the vertical start and end lines which
- // doesn't look appropriate
- $img->Polygon(array_slice($cord, 2, count($cord)-4));
+ $img->Polygon($cord);
}
}
@@ -423,26 +405,28 @@ class LinePlot extends Plot
$areaCoords[] = $minY;
$areaCoords =
- array_merge(
- $areaCoords,
- array_slice(
- $cord,
- $this->filledAreas[$i][0] * $factor,
- ($this->filledAreas[$i][1] - $this->filledAreas[$i][0] + ($this->step_style ? 0 : 1)) * $factor
- )
- );
+ array_merge(
+ $areaCoords,
+ array_slice(
+ $cord,
+ $this->filledAreas[$i][0] * $factor,
+ ($this->filledAreas[$i][1] - $this->filledAreas[$i][0] + ($this->step_style ? 0 : 1)) * $factor
+ )
+ );
$areaCoords[] = $areaCoords[sizeof($areaCoords)-2]; // last x
- $areaCoords[] = $minY; // last y
-
- if ($this->filledAreas[$i][3]) {
- $img->SetColor($this->filledAreas[$i][2]);
- $img->FilledPolygon($areaCoords);
- $img->SetColor($this->color);
- }
+ $areaCoords[] = $minY; // last y
+
+ if ($this->filledAreas[$i][3]) {
+ $img->SetColor($this->filledAreas[$i][2]);
+ $img->FilledPolygon($areaCoords);
+ $img->SetColor($this->color);
+ }
// Check if we should draw the frame.
// If not we still re-draw the line since it might have been
// partially overwritten by the filled area and it doesn't look
// very good.
+ // TODO: The behaviour is undefined if the line does not have
+ // any line at the position of the area.
if ($this->filledAreas[$i][4]) {
$img->Polygon($areaCoords);
} else {
@@ -500,7 +484,7 @@ class AccLinePlot extends Plot
private $iStartEndZero=true;
//---------------
// CONSTRUCTOR
- public function __construct($plots)
+ public function AccLinePlot($plots)
{
$this->plots = $plots;
$this->nbrplots = count($plots);
@@ -526,7 +510,7 @@ class AccLinePlot extends Plot
$p->DoLegend($graph);
}
}
-
+
public function Max()
{
list($xmax) = $this->plots[0]->Max();
@@ -586,11 +570,11 @@ class AccLinePlot extends Plot
public function PreStrokeAdjust($graph)
{
- // If another plot type have already adjusted the
+ // If another plot type have already adjusted the
// offset we don't touch it.
// (We check for empty in case the scale is a log scale
// and hence doesn't contain any xlabel_offset)
-
+
if (empty($graph->xaxis->scale->ticks->xlabel_offset) ||
$graph->xaxis->scale->ticks->xlabel_offset == 0) {
if ($this->center) {
@@ -619,7 +603,7 @@ class AccLinePlot extends Plot
{
$n=count($aData);
$i=0;
-
+
// If first point is undefined we will set it to the same as the first
// valid data
if ($aData[$i]==='-') {
@@ -677,6 +661,8 @@ class AccLinePlot extends Plot
return true;
}
+
+
// To avoid duplicate of line drawing code here we just
// change the y-values for each plot and then restore it
// after we have made the stroke. We must do this copy since
diff --git a/onyx2/include/jpgraph/jpgraph_log.php b/onyx2/include/jpgraph/jpgraph_log.php
index c0eaa23..4be33f5 100644
--- a/onyx2/include/jpgraph/jpgraph_log.php
+++ b/onyx2/include/jpgraph/jpgraph_log.php
@@ -1,13 +1,13 @@
LinearScale($min, $max, $type);
$this->ticks = new LogTicks();
$this->name = 'log';
}
@@ -38,8 +38,8 @@ class LogScale extends LinearScale
if (!is_numeric($a)) {
if ($a != '' && $a != '-' && $a != 'x') {
JpGraphError::RaiseL(11001);
- // ('Your data contains non-numeric values.');
}
+ //('Your data contains non-numeric values.');
return 1;
}
if ($a < 0) {
@@ -61,8 +61,8 @@ class LogScale extends LinearScale
if (!is_numeric($a)) {
if ($a != '' && $a != '-' && $a != 'x') {
JpGraphError::RaiseL(11001);
- //('Your data contains non-numeric values.');
}
+ //('Your data contains non-numeric values.');
return 1;
}
if ($a==0) {
@@ -71,7 +71,7 @@ class LogScale extends LinearScale
$a=log10($a);
return round(($a*1.0 - $this->scale[0]) * $this->scale_factor);
}
-
+
// Use bcpow() for increased precision
public function GetMinVal()
{
@@ -81,7 +81,7 @@ class LogScale extends LinearScale
return round(pow(10, $this->scale[0]), 14);
}
}
-
+
public function GetMaxVal()
{
if (function_exists("bcpow")) {
@@ -90,7 +90,7 @@ class LogScale extends LinearScale
return round(pow(10, $this->scale[1]), 14);
}
}
-
+
// Logarithmic autoscaling is much simplier since we just
// set the min and max to logs of the min and max values.
// Note that for log autoscale the "maxstep" the fourth argument
@@ -101,7 +101,7 @@ class LogScale extends LinearScale
if ($min==0) {
$min=1;
}
-
+
if ($max <= 0) {
JpGraphError::RaiseL(11004);
//('Scale error for logarithmic scale. You have a problem with your data values. The max value must be greater than 0. It is mathematically impossible to have 0 in a logarithmic scale.');
@@ -127,7 +127,7 @@ class LogScale extends LinearScale
$this->Update($img, $smin, $smax);
}
//---------------
- // PRIVATE METHODS
+// PRIVATE METHODS
} // Class
//===================================================
@@ -140,7 +140,7 @@ class LogTicks extends Ticks
private $ticklabels_pos = array();
//---------------
// CONSTRUCTOR
- public function __construct()
+ public function LogTicks()
{
}
//---------------
@@ -154,7 +154,7 @@ class LogTicks extends Ticks
{
$this->label_logtype = $aType;
}
-
+
// For log scale it's meaningless to speak about a major step
// We just return -1 to make the framework happy (specifically
// StrokeLabels() )
@@ -184,16 +184,16 @@ class LogTicks extends Ticks
$limit = $scale->GetMaxVal();
$nextMajor = 10*$start;
$step = $nextMajor / 10.0;
-
-
+
+
$img->SetLineWeight($this->weight);
-
+
if ($scale->type == "y") {
// member direction specified if the ticks should be on
// left or right side.
$a=$pos + $this->direction*$this->GetMinTickAbsSize();
$a2=$pos + $this->direction*$this->GetMajTickAbsSize();
-
+
$count=1;
$this->maj_ticks_pos[0]=$scale->Translate($start);
$this->maj_ticklabels_pos[0]=$scale->Translate($start);
@@ -227,7 +227,7 @@ class LogTicks extends Ticks
$this->maj_ticks_pos[$i]=$ys;
$this->maj_ticklabels_pos[$i]=$ys;
-
+
if ($this->label_formfunc != '') {
$f = $this->label_formfunc;
$this->maj_ticks_label[$i]=call_user_func($f, $nextMajor);
diff --git a/onyx2/include/jpgraph/jpgraph_meshinterpolate.inc.php b/onyx2/include/jpgraph/jpgraph_meshinterpolate.inc.php
deleted file mode 100755
index 1c8dc91..0000000
--- a/onyx2/include/jpgraph/jpgraph_meshinterpolate.inc.php
+++ /dev/null
@@ -1,108 +0,0 @@
-Linear($aData, $aFactor);
-}
-
-/**
- * Utility class to interpolate a given data matrix
- *
- */
-class MeshInterpolate
-{
- private $data = array();
-
- /**
- * Calculate the mid points of the given rectangle which has its top left
- * corner at $row,$col. The $aFactordecides how many spliots should be done.
- * i.e. how many more divisions should be done recursively
- *
- * @param $row Top left corner of square to work with
- * @param $col Top left corner of square to work with
- * $param $aFactor In how many subsquare should we split this square. A value of 1 indicates that no action
- */
- public function IntSquare($aRow, $aCol, $aFactor)
- {
- if ($aFactor <= 1) {
- return;
- }
-
- $step = pow(2, $aFactor-1);
-
- $v0 = $this->data[$aRow][$aCol];
- $v1 = $this->data[$aRow][$aCol + $step];
- $v2 = $this->data[$aRow + $step][$aCol];
- $v3 = $this->data[$aRow + $step][$aCol + $step];
-
- $this->data[$aRow][$aCol + $step / 2] = ($v0 + $v1) / 2;
- $this->data[$aRow + $step / 2][$aCol] = ($v0 + $v2) / 2;
- $this->data[$aRow + $step][$aCol + $step / 2] = ($v2 + $v3) / 2;
- $this->data[$aRow + $step / 2][$aCol + $step] = ($v1 + $v3) / 2;
- $this->data[$aRow + $step / 2][$aCol + $step / 2] = ($v0 + $v1 + $v2 + $v3) / 4;
-
- $this->IntSquare($aRow, $aCol, $aFactor-1);
- $this->IntSquare($aRow, $aCol + $step / 2, $aFactor-1);
- $this->IntSquare($aRow + $step / 2, $aCol, $aFactor-1);
- $this->IntSquare($aRow + $step / 2, $aCol + $step / 2, $aFactor-1);
- }
-
- /**
- * Interpolate values in a matrice so that the total number of data points
- * in vert and horizontal axis are $aIntNbr more. For example $aIntNbr=2 will
- * make the data matrice have tiwce as many vertical and horizontal dta points.
- *
- * Note: This will blow up the matrcide in memory size in the order of $aInNbr^2
- *
- * @param $ &$aData The original data matricde
- * @param $aInNbr Interpolation factor
- * @return the interpolated matrice
- */
- public function Linear(&$aData, $aIntFactor)
- {
- $step = pow(2, $aIntFactor-1);
-
- $orig_cols = count($aData[0]);
- $orig_rows = count($aData);
- // Number of new columns/rows
- // N = (a-1) * 2^(f-1) + 1
- $p = pow(2, $aIntFactor-1);
- $new_cols = $p * ($orig_cols - 1) + 1;
- $new_rows = $p * ($orig_rows - 1) + 1;
-
- $this->data = array_fill(0, $new_rows, array_fill(0, $new_cols, 0));
- // Initialize the new matrix with the values that we know
- for ($i = 0; $i < $new_rows; $i++) {
- for ($j = 0; $j < $new_cols; $j++) {
- $v = 0 ;
- if (($i % $step == 0) && ($j % $step == 0)) {
- $v = $aData[$i / $step][$j / $step];
- }
- $this->data[$i][$j] = $v;
- }
- }
-
- for ($i = 0; $i < $new_rows-1; $i += $step) {
- for ($j = 0; $j < $new_cols-1; $j += $step) {
- $this->IntSquare($i, $j, $aIntFactor);
- }
- }
-
- return $this->data;
- }
-}
diff --git a/onyx2/include/jpgraph/jpgraph_mgraph.php b/onyx2/include/jpgraph/jpgraph_mgraph.php
index 32b1c53..e43a2d9 100644
--- a/onyx2/include/jpgraph/jpgraph_mgraph.php
+++ b/onyx2/include/jpgraph/jpgraph_mgraph.php
@@ -1,13 +1,13 @@
iWidth = $aWidth;
$this->iHeight = $aHeight;
-
- // If the cached version exist just read it directly from the
- // cache, stream it back to browser and exit
- if ($aCachedName!='' && READ_CACHE && $aInline) {
- $this->cache = new ImgStreamCache();
- $this->cache->SetTimeOut($aTimeOut);
- $image = new Image();
- if ($this->cache->GetAndStream($image, $aCachedName)) {
- exit();
- }
- }
- $this->inline = $aInline;
- $this->cache_name = $aCachedName;
-
- $this->title = new Text();
- $this->title->ParagraphAlign('center');
- $this->title->SetFont(FF_FONT2, FS_BOLD);
- $this->title->SetMargin(3);
- $this->title->SetAlign('center');
-
- $this->subtitle = new Text();
- $this->subtitle->ParagraphAlign('center');
- $this->subtitle->SetFont(FF_FONT1, FS_BOLD);
- $this->subtitle->SetMargin(3);
- $this->subtitle->SetAlign('center');
-
- $this->subsubtitle = new Text();
- $this->subsubtitle->ParagraphAlign('center');
- $this->subsubtitle->SetFont(FF_FONT1, FS_NORMAL);
- $this->subsubtitle->SetMargin(3);
- $this->subsubtitle->SetAlign('center');
-
- $this->footer = new Footer();
}
// Specify background fill color for the combined graph
@@ -120,6 +75,10 @@ class MGraph
$aCenter=true;
$aX=null;
+ if ($GLOBALS['gd2'] && !USE_TRUECOLOR) {
+ JpGraphError::RaiseL(12001);
+ //("You are using GD 2.x and are trying to use a background images on a non truecolor image. To use background images with GD 2.x you must enable truecolor by setting the USE_TRUECOLOR constant to TRUE. Due to a bug in GD 2.0.1 using any truetype fonts with truecolor images will result in very poor quality fonts.");
+ }
if (is_numeric($aCenter_aX)) {
$aX=$aCenter_aX;
}
@@ -130,7 +89,7 @@ class MGraph
JpGraphError::RaiseL(12002, $aFileName);
//('Incorrect file name for MGraph::SetBackgroundImage() : '.$aFileName.' Must have a valid image extension (jpg,gif,png) when using autodetection of image type');
}
-
+
$valid_formats = array('png', 'jpg', 'gif');
$aImgFormat = strtolower($e[count($e)-1]);
if ($aImgFormat == 'jpeg') {
@@ -147,27 +106,62 @@ class MGraph
$this->background_image_y = $aY;
}
+
+ // Private helper function for backgound image
+ public function _loadBkgImage($aFile='')
+ {
+ if ($aFile == '') {
+ $aFile = $this->background_image;
+ }
+
+ // Remove case sensitivity and setup appropriate function to create image
+ // Get file extension. This should be the LAST '.' separated part of the filename
+ $e = explode('.', $aFile);
+ $ext = strtolower($e[count($e)-1]);
+ if ($ext == "jpeg") {
+ $ext = "jpg";
+ }
+
+ if (trim($ext) == '') {
+ $ext = 'png';
+ } // Assume PNG if no extension specified
+
+ $supported = imagetypes();
+ if (($ext == 'jpg' && !($supported & IMG_JPG)) ||
+ ($ext == 'gif' && !($supported & IMG_GIF)) ||
+ ($ext == 'png' && !($supported & IMG_PNG))) {
+ JpGraphError::RaiseL(12004, $aFile);//('The image format of your background image ('.$aFile.') is not supported in your system configuration. ');
+ }
+
+ if ($ext == "jpg" || $ext == "jpeg") {
+ $f = "imagecreatefromjpeg";
+ $ext = "jpg";
+ } else {
+ $f = "imagecreatefrom".$ext;
+ }
+
+ $img = @$f($aFile);
+ if (!$img) {
+ JpGraphError::RaiseL(12005, $aFile);
+ //(" Can't read background image: '".$aFile."'");
+ }
+ return $img;
+ }
+
public function _strokeBackgroundImage()
{
if ($this->background_image == '') {
return;
}
- $bkgimg = Graph::LoadBkgImage('', $this->background_image);
-
+ $bkgimg = $this->_loadBkgImage();
// Background width & Heoght
$bw = imagesx($bkgimg);
$bh = imagesy($bkgimg);
-
// Canvas width and height
$cw = imagesx($this->img);
$ch = imagesy($this->img);
- if ($this->doshadow) {
- $cw -= $this->shadow_width;
- $ch -= $this->shadow_width;
- }
-
if ($this->background_image_x === null || $this->background_image_y === null) {
if ($this->background_image_center) {
// Center original image in the plot area
@@ -182,14 +176,87 @@ class MGraph
$x = $this->background_image_x;
$y = $this->background_image_y;
}
- imagecopymerge($this->img, $bkgimg, $x, $y, 0, 0, $bw, $bh, $this->background_image_mix);
+ $this->_imageCp($bkgimg, $x, $y, 0, 0, $bw, $bh, $this->background_image_mix);
+ }
+
+ public function _imageCp($aSrcImg, $x, $y, $fx, $fy, $w, $h, $mix=100)
+ {
+ imagecopymerge($this->img, $aSrcImg, $x, $y, $fx, $fy, $w, $h, $mix);
+ }
+
+ public function _imageCreate($aWidth, $aHeight)
+ {
+ if ($aWidth <= 1 || $aHeight <= 1) {
+ JpGraphError::RaiseL(12006, $aWidth, $aHeight);
+ //("Illegal sizes specified for width or height when creating an image, (width=$aWidth, height=$aHeight)");
+ }
+ if (@$GLOBALS['gd2']==true && USE_TRUECOLOR) {
+ $this->img = @imagecreatetruecolor($aWidth, $aHeight);
+ if ($this->img < 1) {
+ JpGraphError::RaiseL(12011);
+ // die("JpGraph Error: Can't create truecolor image. Check that you really have GD2 library installed.");
+ }
+ ImageAlphaBlending($this->img, true);
+ } else {
+ $this->img = @imagecreate($aWidth, $aHeight);
+ if ($this->img < 1) {
+ JpGraphError::RaiseL(12012);
+ // die("JpGraph Error: Can't create image. Check that you really have the GD library installed.");
+ }
+ }
+ }
+
+ public function _polygon($p, $closed=false)
+ {
+ if ($this->iLineWeight==0) {
+ return;
+ }
+ $n=count($p);
+ $oldx = $p[0];
+ $oldy = $p[1];
+ for ($i=2; $i < $n; $i+=2) {
+ imageline($this->img, $oldx, $oldy, $p[$i], $p[$i+1], $this->iCurrentColor);
+ $oldx = $p[$i];
+ $oldy = $p[$i+1];
+ }
+ if ($closed) {
+ imageline($this->img, $p[$n*2-2], $p[$n*2-1], $p[0], $p[1], $this->iCurrentColor);
+ }
+ }
+
+ public function _filledPolygon($pts)
+ {
+ $n=count($pts);
+ for ($i=0; $i < $n; ++$i) {
+ $pts[$i] = round($pts[$i]);
+ }
+ imagefilledpolygon($this->img, $pts, count($pts)/2, $this->iCurrentColor);
+ }
+
+ public function _rectangle($xl, $yu, $xr, $yl)
+ {
+ for ($i=0; $i < $this->iLineWeight; ++$i) {
+ $this->_polygon(array($xl+$i,$yu+$i,$xr-$i,$yu+$i,
+ $xr-$i,$yl-$i,$xl+$i,$yl-$i,
+ $xl+$i,$yu+$i));
+ }
+ }
+
+ public function _filledRectangle($xl, $yu, $xr, $yl)
+ {
+ $this->_filledPolygon(array($xl,$yu,$xr,$yu,$xr,$yl,$xl,$yl));
+ }
+
+ public function _setColor($aColor)
+ {
+ $this->iCurrentColor = $this->iRGB->Allocate($aColor);
}
public function AddMix($aGraph, $x=0, $y=0, $mix=100, $fx=0, $fy=0, $w=0, $h=0)
{
$this->_gdImgHandle($aGraph->Stroke(_IMG_HANDLER), $x, $y, $fx=0, $fy=0, $w, $h, $mix);
}
-
+
public function Add($aGraph, $x=0, $y=0, $fx=0, $fy=0, $w=0, $h=0)
{
$this->_gdImgHandle($aGraph->Stroke(_IMG_HANDLER), $x, $y, $fx=0, $fy=0, $w, $h);
@@ -224,74 +291,92 @@ class MGraph
$this->expired = $aFlg;
}
+ // Generate image header
+ public function Headers()
+ {
+
+ // In case we are running from the command line with the client version of
+ // PHP we can't send any headers.
+ $sapi = php_sapi_name();
+ if ($sapi == 'cli') {
+ return;
+ }
+
+ if (headers_sent()) {
+ echo "
JpGraph Error: +HTTP headers have already been sent. |
Explanation: HTTP headers have already been sent back to the browser indicating the data as text before the library got a chance to send it's image HTTP header to this browser. This makes it impossible for the library to send back image data to the browser (since that would be interpretated as text by the browser and show up as junk text). Most likely you have some text in your script before the call to Graph::Stroke(). If this texts gets sent back to the browser the browser will assume that all data is plain text. Look for any text, even spaces and newlines, that might have been sent back to the browser. For example it is a common mistake to leave a blank line before the opening \"<?php\". |
+ If this is not the case you might have stumbled upon a bug in JpGraph. + Please report this and if possible include the data that caused the + problem."); } - + $this->major_step=$aMajStep; $this->minor_step=$aMinStep; $this->is_set = true; @@ -150,26 +154,25 @@ class RadarLinearTicks extends Ticks // Prepare to draw linear ticks $maj_step_abs = abs($aScale->scale_factor*$this->major_step); $min_step_abs = abs($aScale->scale_factor*$this->minor_step); - $nbrmaj = round($aScale->world_abs_size/$maj_step_abs); - $nbrmin = round($aScale->world_abs_size/$min_step_abs); - $skip = round($nbrmin/$nbrmaj); // Don't draw minor on top of major + $nbrmaj = floor(($aScale->world_abs_size)/$maj_step_abs); + $nbrmin = floor(($aScale->world_abs_size)/$min_step_abs); + $skip = round($nbrmin/$nbrmaj); // Don't draw minor ontop of major // Draw major ticks $ticklen2=$this->major_abs_size; $dx=round(sin($aAxisAngle)*$ticklen2); $dy=round(cos($aAxisAngle)*$ticklen2); $label=$aScale->scale[0]+$this->major_step; - + $aImg->SetLineWeight($this->weight); - + // NEW $aMajPos = array(); $aMajLabel = array(); - for ($i=1; $i<=$nbrmaj; ++$i) { $xt=round($i*$maj_step_abs*cos($aAxisAngle))+$aScale->scale_abs[0]; $yt=$aPos-round($i*$maj_step_abs*sin($aAxisAngle)); - if ($this->label_formfunc != '') { + if ($this->label_formfunc != "") { $f=$this->label_formfunc; $l = call_user_func($f, $label); } else { @@ -183,11 +186,11 @@ class RadarLinearTicks extends Ticks $aMajPos[($i-1)*2]=$xt+2*$dx; $aMajPos[($i-1)*2+1]=$yt-$aImg->GetFontheight()/2; if (!$this->supress_tickmarks) { - if ($this->majcolor != '') { + if ($this->majcolor!="") { $aImg->PushColor($this->majcolor); } $aImg->Line($xt+$dx, $yt+$dy, $xt-$dx, $yt-$dy); - if ($this->majcolor != '') { + if ($this->majcolor!="") { $aImg->PopColor(); } } @@ -198,7 +201,7 @@ class RadarLinearTicks extends Ticks $dx=round(sin($aAxisAngle)*$ticklen2); $dy=round(cos($aAxisAngle)*$ticklen2); if (!$this->supress_tickmarks && !$this->supress_minor_tickmarks) { - if ($this->mincolor != '') { + if ($this->mincolor!="") { $aImg->PushColor($this->mincolor); } for ($i=1; $i<=$nbrmin; ++$i) { @@ -209,13 +212,14 @@ class RadarLinearTicks extends Ticks $yt=$aPos-round($i*$min_step_abs*sin($aAxisAngle)); $aImg->Line($xt+$dx, $yt+$dy, $xt-$dx, $yt-$dy); } - if ($this->mincolor != '') { + if ($this->mincolor!="") { $aImg->PopColor(); } } } } + //=================================================== // CLASS RadarAxis @@ -224,50 +228,59 @@ class RadarLinearTicks extends Ticks class RadarAxis extends AxisPrototype { public $title=null; - private $title_color='navy'; + private $title_color="navy"; private $len=0; - - public function __construct($img, $aScale, $color=array(0,0,0)) + //--------------- + // CONSTRUCTOR + public function RadarAxis($img, $aScale, $color=array(0,0,0)) { - parent::__construct($img, $aScale, $color); - $this->len = $img->plotheight; + parent::Axis($img, $aScale, $color); + $this->len=$img->plotheight; $this->title = new Text(); $this->title->SetFont(FF_FONT1, FS_BOLD); $this->color = array(0,0,0); } - + //--------------- + // PUBLIC METHODS + public function SetTickLabels($aLabelArray, $aLabelColorArray=null) + { + $this->ticks_label = $aLabelArray; + $this->ticks_label_colors = $aLabelColorArray; + } + + // Stroke the axis - // $pos = Vertical position of axis + // $pos = Vertical position of axis // $aAxisAngle = Axis angle - // $grid = Returns an array with positions used to draw the grid - // $lf = Label flag, TRUE if the axis should have labels + // $grid = Returns an array with positions used to draw the grid + // $lf = Label flag, TRUE if the axis should have labels public function Stroke($pos, $aAxisAngle, &$grid, $title, $lf) { $this->img->SetColor($this->color); - + // Determine end points for the axis $x=round($this->scale->world_abs_size*cos($aAxisAngle)+$this->scale->scale_abs[0]); $y=round($pos-$this->scale->world_abs_size*sin($aAxisAngle)); - + // Draw axis $this->img->SetColor($this->color); $this->img->SetLineWeight($this->weight); if (!$this->hide) { $this->img->Line($this->scale->scale_abs[0], $pos, $x, $y); } - + $this->scale->ticks->Stroke($this->img, $grid, $pos, $aAxisAngle, $this->scale, $majpos, $majlabel); $ncolor=0; if (isset($this->ticks_label_colors)) { $ncolor=count($this->ticks_label_colors); } - + // Draw labels if ($lf && !$this->hide) { $this->img->SetFont($this->font_family, $this->font_style, $this->font_size); - $this->img->SetTextAlign('left', 'top'); + $this->img->SetTextAlign("left", "top"); $this->img->SetColor($this->label_color); - + // majpos contains (x,y) coordinates for labels if (! $this->hide_labels) { $n = floor(count($majpos)/2); @@ -276,7 +289,7 @@ class RadarAxis extends AxisPrototype if ($ncolor > 0) { $this->img->SetColor($this->ticks_label_colors[$i % $ncolor]); } - + if ($this->ticks_label != null && isset($this->ticks_label[$i])) { $this->img->StrokeText($majpos[$i*2], $majpos[$i*2+1], $this->ticks_label[$i]); } else { @@ -287,7 +300,9 @@ class RadarAxis extends AxisPrototype } $this->_StrokeAxisTitle($pos, $aAxisAngle, $title); } - + //--------------- + // PRIVATE METHODS + public function _StrokeAxisTitle($pos, $aAxisAngle, $title) { $this->title->Set($title); @@ -310,27 +325,24 @@ class RadarAxis extends AxisPrototype while ($aAxisAngle > 2*M_PI) { $aAxisAngle -= 2*M_PI; } - + // Around 3 a'clock if ($aAxisAngle>=7*M_PI/4 || $aAxisAngle <= M_PI/4) { $dx=-0.15; } // Small trimming to make the dist to the axis more even - // Around 12 a'clock if ($aAxisAngle>=M_PI/4 && $aAxisAngle <= 3*M_PI/4) { $dx=($aAxisAngle-M_PI/4)*2/M_PI; } - // Around 9 a'clock if ($aAxisAngle>=3*M_PI/4 && $aAxisAngle <= 5*M_PI/4) { $dx=1; } - // Around 6 a'clock if ($aAxisAngle>=5*M_PI/4 && $aAxisAngle <= 7*M_PI/4) { $dx=(1-($aAxisAngle-M_PI*5/4)*2/M_PI); } - + if ($aAxisAngle>=7*M_PI/4) { $dy=(($aAxisAngle-M_PI)-3*M_PI/4)*2/M_PI; } @@ -349,7 +361,7 @@ class RadarAxis extends AxisPrototype if ($aAxisAngle>=5*M_PI/4 && $aAxisAngle <= 7*M_PI/4) { $dy=0; } - + if (!$this->hide) { $this->title->Stroke($this->img, $xt-$dx*$w, $yt-$dy*$h, $title); } @@ -368,44 +380,46 @@ class RadarGrid private $show=false; private $weight=1; - public function __construct() + //------------ + // CONSTRUCTOR + public function RadarGrid() { - // Empty } + // PUBLIC METHODS public function SetColor($aMajColor) { $this->grid_color = $aMajColor; } - + public function SetWeight($aWeight) { $this->weight=$aWeight; } - + // Specify if grid should be dashed, dotted or solid public function SetLineStyle($aType) { $this->type = $aType; } - + // Decide if both major and minor grid should be displayed public function Show($aShowMajor=true) { $this->show=$aShowMajor; } - + + //---------------- + // PRIVATE METHODS public function Stroke($img, $grid) { if (!$this->show) { return; } - $nbrticks = count($grid[0])/2; $nbrpnts = count($grid); $img->SetColor($this->grid_color); $img->SetLineWeight($this->weight); - for ($i=0; $i<$nbrticks; ++$i) { for ($j=0; $j<$nbrpnts; ++$j) { $pnts[$j*2]=$grid[$j][$i*2]; @@ -413,13 +427,13 @@ class RadarGrid } for ($k=0; $k<$nbrpnts; ++$k) { $l=($k+1)%$nbrpnts; - if ($this->type == 'solid') { + if ($this->type == "solid") { $img->Line($pnts[$k*2], $pnts[$k*2+1], $pnts[$l*2], $pnts[$l*2+1]); - } elseif ($this->type == 'dotted') { + } elseif ($this->type == "dotted") { $img->DashedLine($pnts[$k*2], $pnts[$k*2+1], $pnts[$l*2], $pnts[$l*2+1], 1, 6); - } elseif ($this->type == 'dashed') { + } elseif ($this->type == "dashed") { $img->DashedLine($pnts[$k*2], $pnts[$k*2+1], $pnts[$l*2], $pnts[$l*2+1], 2, 4); - } elseif ($this->type == 'longdashed') { + } elseif ($this->type == "longdashed") { $img->DashedLine($pnts[$k*2], $pnts[$k*2+1], $pnts[$l*2], $pnts[$l*2+1], 8, 6); } } @@ -436,37 +450,33 @@ class RadarGrid class RadarPlot { public $mark=null; - public $legend=''; - public $legendcsimtarget=''; - public $legendcsimalt=''; - public $csimtargets=array(); // Array of targets for CSIM - public $csimareas=""; // Resultant CSIM area tags - public $csimalts=null; // ALT:s for corresponding target + public $legend=""; private $data=array(); private $fill=false; private $fill_color=array(200,170,180); private $color=array(0,0,0); private $weight=1; private $linestyle='solid'; - //--------------- // CONSTRUCTOR - public function __construct($data) + public function RadarPlot($data) { $this->data = $data; $this->mark = new PlotMark(); } + //--------------- + // PUBLIC METHODS public function Min() { return Min($this->data); } - + public function Max() { return Max($this->data); } - + public function SetLegend($legend) { $this->legend=$legend; @@ -476,23 +486,23 @@ class RadarPlot { $this->linestyle=$aStyle; } - + public function SetLineWeight($w) { $this->weight=$w; } - + public function SetFillColor($aColor) { $this->fill_color = $aColor; $this->fill = true; } - + public function SetFill($f=true) { $this->fill = $f; } - + public function SetColor($aColor, $aFillColor=false) { $this->color = $aColor; @@ -501,92 +511,64 @@ class RadarPlot $this->fill = true; } } - - // Set href targets for CSIM - public function SetCSIMTargets($aTargets, $aAlts=null) - { - $this->csimtargets=$aTargets; - $this->csimalts=$aAlts; - } - - // Get all created areas + public function GetCSIMareas() { - return $this->csimareas; + JpGraphError::RaiseL(18001); + //("Client side image maps not supported for RadarPlots."); } - + public function Stroke($img, $pos, $scale, $startangle) { $nbrpnts = count($this->data); $astep=2*M_PI/$nbrpnts; $a=$startangle; - + + // Rotate each point to the correct axis-angle + // TODO: Update for LogScale for ($i=0; $i<$nbrpnts; ++$i) { - - // Rotate each non null point to the correct axis-angle + //$c=$this->data[$i]; $cs=$scale->RelTranslate($this->data[$i]); $x=round($cs*cos($a)+$scale->scale_abs[0]); $y=round($pos-$cs*sin($a)); - + /* + $c=log10($c); + $x=round(($c-$scale->scale[0])*$scale->scale_factor*cos($a)+$scale->scale_abs[0]); + $y=round($pos-($c-$scale->scale[0])*$scale->scale_factor*sin($a)); + */ $pnts[$i*2]=$x; $pnts[$i*2+1]=$y; - - // If the next point is null then we draw this polygon segment - // to the center, skip the next and draw the next segment from - // the center up to the point on the axis with the first non-null - // value and continues from that point. Some additoinal logic is necessary - // to handle the boundary conditions - if ($i < $nbrpnts-1) { - if (is_null($this->data[$i+1])) { - $cs = 0; - $x=round($cs*cos($a)+$scale->scale_abs[0]); - $y=round($pos-$cs*sin($a)); - $pnts[$i*2]=$x; - $pnts[$i*2+1]=$y; - $a += $astep; - } - } - $a += $astep; } - if ($this->fill) { $img->SetColor($this->fill_color); $img->FilledPolygon($pnts); } - $img->SetLineWeight($this->weight); $img->SetColor($this->color); $img->SetLineStyle($this->linestyle); - $pnts[] = $pnts[0]; - $pnts[] = $pnts[1]; + $pnts[]=$pnts[0]; + $pnts[]=$pnts[1]; $img->Polygon($pnts); $img->SetLineStyle('solid'); // Reset line style to default - // Add plotmarks on top if ($this->mark->show) { for ($i=0; $i < $nbrpnts; ++$i) { - if (isset($this->csimtargets[$i])) { - $this->mark->SetCSIMTarget($this->csimtargets[$i]); - $this->mark->SetCSIMAlt($this->csimalts[$i]); - $this->mark->SetCSIMAltVal($pnts[$i*2], $pnts[$i*2+1]); - $this->mark->Stroke($img, $pnts[$i*2], $pnts[$i*2+1]); - $this->csimareas .= $this->mark->GetCSIMAreas(); - } else { - $this->mark->Stroke($img, $pnts[$i*2], $pnts[$i*2+1]); - } + $this->mark->Stroke($img, $pnts[$i*2], $pnts[$i*2+1]); } } } - + + //--------------- + // PRIVATE METHODS public function GetCount() { return count($this->data); } - + public function Legend($graph) { - if ($this->legend == '') { + if ($this->legend=="") { return; } if ($this->fill) { @@ -609,44 +591,56 @@ class RadarGraph extends Graph private $posy; private $len; private $axis_title=null; - - public function __construct($width=300, $height=200, $cachedName="", $timeout=0, $inline=1) + //--------------- + // CONSTRUCTOR + public function RadarGraph($width=300, $height=200, $cachedName="", $timeout=0, $inline=1) { - parent::__construct($width, $height, $cachedName, $timeout, $inline); - $this->posx = $width/2; - $this->posy = $height/2; - $this->len = min($width, $height)*0.35; + $this->Graph($width, $height, $cachedName, $timeout, $inline); + $this->posx=$width/2; + $this->posy=$height/2; + $this->len=min($width, $height)*0.35; $this->SetColor(array(255,255,255)); $this->SetTickDensity(TICKD_NORMAL); - $this->SetScale('lin'); + $this->SetScale("lin"); $this->SetGridDepth(DEPTH_FRONT); } + //--------------- + // PUBLIC METHODS + public function SupressTickMarks($f=true) + { + if (ERR_DEPRECATED) { + JpGraphError::RaiseL(18002); + } + //('RadarGraph::SupressTickMarks() is deprecated. Use HideTickMarks() instead.'); + $this->axis->scale->ticks->SupressTickMarks($f); + } + public function HideTickMarks($aFlag=true) { $this->axis->scale->ticks->SupressTickMarks($aFlag); } - + public function ShowMinorTickmarks($aFlag=true) { $this->yscale->ticks->SupressMinorTickMarks(!$aFlag); } - + public function SetScale($axtype, $ymin=1, $ymax=1, $dummy1=null, $dumy2=null) { - if ($axtype != 'lin' && $axtype != 'log') { + if ($axtype != "lin" && $axtype != "log") { JpGraphError::RaiseL(18003, $axtype); //("Illegal scale for radarplot ($axtype). Must be \"lin\" or \"log\""); } - if ($axtype == 'lin') { + if ($axtype=="lin") { $this->yscale = new LinearScale($ymin, $ymax); $this->yscale->ticks = new RadarLinearTicks(); $this->yscale->ticks->SupressMinorTickMarks(); - } elseif ($axtype == 'log') { + } elseif ($axtype=="log") { $this->yscale = new LogScale($ymin, $ymax); $this->yscale->ticks = new RadarLogTicks(); } - + $this->axis = new RadarAxis($this->img, $this->yscale); $this->grid = new RadarGrid(); } @@ -655,8 +649,8 @@ class RadarGraph extends Graph { if ($aSize < 0.1 || $aSize>1) { JpGraphError::RaiseL(18004, $aSize); - //("Radar Plot size must be between 0.1 and 1. (Your value=$s)"); } + //("Radar Plot size must be between 0.1 and 1. (Your value=$s)"); $this->len=min($this->img->width, $this->img->height)*$aSize/2; } @@ -669,22 +663,22 @@ class RadarGraph extends Graph { $this->ytick_factor=25; switch ($densy) { - case TICKD_DENSE: - $this->ytick_factor=12; - break; - case TICKD_NORMAL: - $this->ytick_factor=25; - break; - case TICKD_SPARSE: - $this->ytick_factor=40; - break; - case TICKD_VERYSPARSE: - $this->ytick_factor=70; - break; - default: - JpGraphError::RaiseL(18005, $densy); - //("RadarPlot Unsupported Tick density: $densy"); - } + case TICKD_DENSE: + $this->ytick_factor=12; + break; + case TICKD_NORMAL: + $this->ytick_factor=25; + break; + case TICKD_SPARSE: + $this->ytick_factor=40; + break; + case TICKD_VERYSPARSE: + $this->ytick_factor=70; + break; + default: + JpGraphError::RaiseL(18005, $densy); +//("RadarPlot Unsupported Tick density: $densy"); + } } public function SetPos($px, $py=0.5) @@ -694,48 +688,26 @@ class RadarGraph extends Graph public function SetCenter($px, $py=0.5) { - if ($px >= 0 && $px <= 1) { - $this->posx = $this->img->width*$px; - } else { - $this->posx = $px; - } - if ($py >= 0 && $py <= 1) { - $this->posy = $this->img->height*$py; - } else { - $this->posy = $py; - } + assert($px > 0 && $py > 0); + $this->posx=$this->img->width*$px; + $this->posy=$this->img->height*$py; } - public function SetColor($aColor) + public function SetColor($c) { - $this->SetMarginColor($aColor); + $this->SetMarginColor($c); } - - public function SetTitles($aTitleArray) + + public function SetTitles($title) { - $this->axis_title = $aTitleArray; + $this->axis_title = $title; } - public function Add($aPlot) + public function Add($splot) { - if ($aPlot == null) { - JpGraphError::RaiseL(25010);//("Graph::Add() You tried to add a null plot to the graph."); - } - if (is_array($aPlot) && count($aPlot) > 0) { - $cl = $aPlot[0]; - } else { - $cl = $aPlot; - } - - if ($cl instanceof Text) { - $this->AddText($aPlot); - } elseif (class_exists('IconPlot', false) && ($cl instanceof IconPlot)) { - $this->AddIcon($aPlot); - } else { - $this->plots[] = $aPlot; - } + $this->plots[]=$splot; } - + public function GetPlotsYMinMax($aPlots) { $min=$aPlots[0]->Min(); @@ -746,59 +718,21 @@ class RadarGraph extends Graph } if ($min < 0) { JpGraphError::RaiseL(18006, $min); - //("Minimum data $min (Radar plots should only be used when all data points > 0)"); } + //("Minimum data $min (Radar plots should only be used when all data points > 0)"); return array($min,$max); } - public function StrokeIcons() - { - if ($this->iIcons != null) { - $n = count($this->iIcons); - for ($i=0; $i < $n; ++$i) { - $this->iIcons[$i]->Stroke($this->img); - } - } - } - - public function StrokeTexts() - { - if ($this->texts != null) { - $n = count($this->texts); - for ($i=0; $i < $n; ++$i) { - $this->texts[$i]->Stroke($this->img); - } - } - } - // Stroke the Radar graph - public function Stroke($aStrokeFileName='') + public function Stroke($aStrokeFileName="") { - - // If the filename is the predefined value = '_csim_special_' - // we assume that the call to stroke only needs to do enough - // to correctly generate the CSIM maps. - // We use this variable to skip things we don't strictly need - // to do to generate the image map to improve performance - // a best we can. Therefor you will see a lot of tests !$_csim in the - // code below. - $_csim = ($aStrokeFileName === _CSIM_SPECIALFILE); - - // We need to know if we have stroked the plot in the - // GetCSIMareas. Otherwise the CSIM hasn't been generated - // and in the case of GetCSIM called before stroke to generate - // CSIM without storing an image to disk GetCSIM must call Stroke. - $this->iHasStroked = true; - $n = count($this->plots); // Set Y-scale - - if (!$this->yscale->IsSpecified() && count($this->plots) > 0) { + if (!$this->yscale->IsSpecified() && count($this->plots)>0) { list($min, $max) = $this->GetPlotsYMinMax($this->plots); $this->yscale->AutoScale($this->img, 0, $max, $this->len/$this->ytick_factor); } elseif ($this->yscale->IsSpecified() && - ($this->yscale->auto_ticks || !$this->yscale->ticks->IsSpecified())) { - + ($this->yscale->auto_ticks || !$this->yscale->ticks->IsSpecified())) { // The tick calculation will use the user suplied min/max values to determine // the ticks. If auto_ticks is false the exact user specifed min and max // values will be used for the scale. @@ -817,91 +751,75 @@ class RadarGraph extends Graph // Set start position end length of scale (in absolute pixels) $this->yscale->SetConstants($this->posx, $this->len); - + // We need as many axis as there are data points $nbrpnts=$this->plots[0]->GetCount(); - + // If we have no titles just number the axis 1,2,3,... if ($this->axis_title==null) { for ($i=0; $i < $nbrpnts; ++$i) { $this->axis_title[$i] = $i+1; } - } elseif (count($this->axis_title) < $nbrpnts) { + } elseif (count($this->axis_title)<$nbrpnts) { JpGraphError::RaiseL(18007); - // ("Number of titles does not match number of points in plot."); } + //("Number of titles does not match number of points in plot."); for ($i=0; $i < $n; ++$i) { if ($nbrpnts != $this->plots[$i]->GetCount()) { JpGraphError::RaiseL(18008); - //("Each radar plot must have the same number of data points."); } } + //("Each radar plot must have the same number of data points."); - if (!$_csim) { - if ($this->background_image != '') { - $this->StrokeFrameBackground(); - } else { - $this->StrokeFrame(); - $this->StrokeBackgroundGrad(); - } + if ($this->background_image != "") { + $this->StrokeFrameBackground(); + } else { + $this->StrokeFrame(); } $astep=2*M_PI/$nbrpnts; - if (!$_csim) { - if ($this->iIconDepth == DEPTH_BACK) { - $this->StrokeIcons(); - } - - - // Prepare legends - for ($i=0; $i < $n; ++$i) { - $this->plots[$i]->Legend($this); - } - $this->legend->Stroke($this->img); - $this->footer->Stroke($this->img); + // Prepare legends + for ($i=0; $i < $n; ++$i) { + $this->plots[$i]->Legend($this); } + $this->legend->Stroke($this->img); + $this->footer->Stroke($this->img); - if (!$_csim) { - if ($this->grid_depth == DEPTH_BACK) { - // Draw axis and grid - for ($i=0,$a=M_PI/2; $i < $nbrpnts; ++$i, $a += $astep) { - $this->axis->Stroke($this->posy, $a, $grid[$i], $this->axis_title[$i], $i==0); - } - $this->grid->Stroke($this->img, $grid); - } - if ($this->iIconDepth == DEPTH_BACK) { - $this->StrokeIcons(); + if ($this->grid_depth == DEPTH_BACK) { + // Draw axis and grid + for ($i=0,$a=M_PI/2; $i < $nbrpnts; ++$i, $a += $astep) { + $this->axis->Stroke($this->posy, $a, $grid[$i], $this->axis_title[$i], $i==0); } } - + // Plot points $a=M_PI/2; for ($i=0; $i < $n; ++$i) { $this->plots[$i]->Stroke($this->img, $this->posy, $this->yscale, $a); } - - if (!$_csim) { - if ($this->grid_depth != DEPTH_BACK) { - // Draw axis and grid - for ($i=0,$a=M_PI/2; $i < $nbrpnts; ++$i, $a += $astep) { - $this->axis->Stroke($this->posy, $a, $grid[$i], $this->axis_title[$i], $i==0); - } - $this->grid->Stroke($this->img, $grid); + + if ($this->grid_depth != DEPTH_BACK) { + // Draw axis and grid + for ($i=0,$a=M_PI/2; $i < $nbrpnts; ++$i, $a += $astep) { + $this->axis->Stroke($this->posy, $a, $grid[$i], $this->axis_title[$i], $i==0); } - - $this->StrokeTitles(); - $this->StrokeTexts(); - if ($this->iIconDepth == DEPTH_FRONT) { - $this->StrokeIcons(); + } + $this->grid->Stroke($this->img, $grid); + $this->StrokeTitles(); + + // Stroke texts + if ($this->texts != null) { + foreach ($this->texts as $t) { + $t->Stroke($this->img); } } // Should we do any final image transformation - if ($this->iImgTrans && !$_csim) { + if ($this->iImgTrans) { if (!class_exists('ImgTrans', false)) { require_once('jpgraph_imgtrans.php'); } - + $tform = new ImgTrans($this->img->img); $this->img->img = $tform->Skew3D( $this->iImgTransHorizon, @@ -913,17 +831,20 @@ class RadarGraph extends Graph $this->iImgTransBorder ); } - - if (!$_csim) { - // If the filename is given as the special "__handle" - // then the image handler is returned and the image is NOT - // streamed back - if ($aStrokeFileName == _IMG_HANDLER) { - return $this->img->img; - } else { - // Finally stream the generated picture - $this->cache->PutAndStream($this->img, $this->cache_name, $this->inline, $aStrokeFileName); - } + + // If the filename is given as the special "__handle" + // then the image handler is returned and the image is NOT + // streamed back + if ($aStrokeFileName == _IMG_HANDLER) { + return $this->img->img; + } else { + // Finally stream the generated picture + $this->cache->PutAndStream( + $this->img, + $this->cache_name, + $this->inline, + $aStrokeFileName + ); } } } // Class diff --git a/onyx2/include/jpgraph/jpgraph_regstat.php b/onyx2/include/jpgraph/jpgraph_regstat.php index e15b061..b5b9891 100644 --- a/onyx2/include/jpgraph/jpgraph_regstat.php +++ b/onyx2/include/jpgraph/jpgraph_regstat.php @@ -1,13 +1,13 @@ y2 = array(); $this->xdata = $xdata; @@ -52,7 +52,7 @@ class Spline $p = $s*$this->y2[$i-1]+2.0; $this->y2[$i] = ($s-1.0)/$p; $delta[$i] = ($ydata[$i+1]-$ydata[$i])/($xdata[$i+1]-$xdata[$i]) - - ($ydata[$i]-$ydata[$i-1])/($xdata[$i]-$xdata[$i-1]); + ($ydata[$i]-$ydata[$i-1])/($xdata[$i]-$xdata[$i-1]); $delta[$i] = (6.0*$delta[$i]/($xdata[$i+1]-$xdata[$i-1])-$s*$delta[$i-1])/$p; } @@ -106,7 +106,7 @@ class Spline $a = ($this->xdata[$max]-$xpoint)/$h; $b = ($xpoint-$this->xdata[$min])/$h; return $a*$this->ydata[$min]+$b*$this->ydata[$max]+ - (($a*$a*$a-$a)*$this->y2[$min]+($b*$b*$b-$b)*$this->y2[$max])*($h*$h)/6.0; + (($a*$a*$a-$a)*$this->y2[$min]+($b*$b*$b-$b)*$this->y2[$max])*($h*$h)/6.0; } } @@ -121,13 +121,13 @@ class Bezier * @license released under QPL * @abstract Bezier interoplated point generation, * computed from control points data sets, based on Paul Bourke algorithm : - * http://local.wasp.uwa.edu.au/~pbourke/geometry/bezier/index2.html + * http://astronomy.swin.edu.au/~pbourke/curves/bezier/ */ private $datax = array(); private $datay = array(); private $n=0; - - public function __construct($datax, $datay, $attraction_factor = 1) + + public function Bezier($datax, $datay, $attraction_factor = 1) { // Adding control point multiple time will raise their attraction power over the curve $this->n = count($datax); @@ -150,35 +150,22 @@ class Bezier $this->n *= $attraction_factor; } - /** - * Return a set of data points that specifies the bezier curve with $steps points - * @param $steps Number of new points to return - * @return array($datax, $datay) - */ public function Get($steps) { $datax = array(); $datay = array(); for ($i = 0; $i < $steps; $i++) { list($datumx, $datumy) = $this->GetPoint((double) $i / (double) $steps); - $datax[$i] = $datumx; - $datay[$i] = $datumy; + $datax[] = $datumx; + $datay[] = $datumy; } - + $datax[] = end($this->datax); $datay[] = end($this->datay); - + return array($datax, $datay); } - - /** - * Return one point on the bezier curve. $mu is the position on the curve where $mu is in the - * range 0 $mu < 1 where 0 is tha start point and 1 is the end point. Note that every newly computed - * point depends on all the existing points - * - * @param $mu Position on the bezier curve - * @return array($x, $y) - */ + public function GetPoint($mu) { $n = $this->n - 1; diff --git a/onyx2/include/jpgraph/jpgraph_rgb.inc.php b/onyx2/include/jpgraph/jpgraph_rgb.inc.php deleted file mode 100755 index 929b1c4..0000000 --- a/onyx2/include/jpgraph/jpgraph_rgb.inc.php +++ /dev/null @@ -1,615 +0,0 @@ -img = $aImg; - - // Conversion array between color names and RGB - $this->rgb_table = array( - 'aqua'=> array(0,255,255), - 'lime'=> array(0,255,0), - 'teal'=> array(0,128,128), - 'whitesmoke'=>array(245,245,245), - 'gainsboro'=>array(220,220,220), - 'oldlace'=>array(253,245,230), - 'linen'=>array(250,240,230), - 'antiquewhite'=>array(250,235,215), - 'papayawhip'=>array(255,239,213), - 'blanchedalmond'=>array(255,235,205), - 'bisque'=>array(255,228,196), - 'peachpuff'=>array(255,218,185), - 'navajowhite'=>array(255,222,173), - 'moccasin'=>array(255,228,181), - 'cornsilk'=>array(255,248,220), - 'ivory'=>array(255,255,240), - 'lemonchiffon'=>array(255,250,205), - 'seashell'=>array(255,245,238), - 'mintcream'=>array(245,255,250), - 'azure'=>array(240,255,255), - 'aliceblue'=>array(240,248,255), - 'lavender'=>array(230,230,250), - 'lavenderblush'=>array(255,240,245), - 'mistyrose'=>array(255,228,225), - 'white'=>array(255,255,255), - 'black'=>array(0,0,0), - 'darkslategray'=>array(47,79,79), - 'dimgray'=>array(105,105,105), - 'slategray'=>array(112,128,144), - 'lightslategray'=>array(119,136,153), - 'gray'=>array(190,190,190), - 'lightgray'=>array(211,211,211), - 'midnightblue'=>array(25,25,112), - 'navy'=>array(0,0,128), - 'indigo'=>array(75,0,130), - 'electricindigo'=>array(102,0,255), - 'deepindigo'=>array(138,43,226), - 'pigmentindigo'=>array(75,0,130), - 'indigodye'=>array(0,65,106), - 'cornflowerblue'=>array(100,149,237), - 'darkslateblue'=>array(72,61,139), - 'slateblue'=>array(106,90,205), - 'mediumslateblue'=>array(123,104,238), - 'lightslateblue'=>array(132,112,255), - 'mediumblue'=>array(0,0,205), - 'royalblue'=>array(65,105,225), - 'blue'=>array(0,0,255), - 'dodgerblue'=>array(30,144,255), - 'deepskyblue'=>array(0,191,255), - 'skyblue'=>array(135,206,235), - 'lightskyblue'=>array(135,206,250), - 'steelblue'=>array(70,130,180), - 'lightred'=>array(211,167,168), - 'lightsteelblue'=>array(176,196,222), - 'lightblue'=>array(173,216,230), - 'powderblue'=>array(176,224,230), - 'paleturquoise'=>array(175,238,238), - 'darkturquoise'=>array(0,206,209), - 'mediumturquoise'=>array(72,209,204), - 'turquoise'=>array(64,224,208), - 'cyan'=>array(0,255,255), - 'lightcyan'=>array(224,255,255), - 'cadetblue'=>array(95,158,160), - 'mediumaquamarine'=>array(102,205,170), - 'aquamarine'=>array(127,255,212), - 'darkgreen'=>array(0,100,0), - 'darkolivegreen'=>array(85,107,47), - 'darkseagreen'=>array(143,188,143), - 'seagreen'=>array(46,139,87), - 'mediumseagreen'=>array(60,179,113), - 'lightseagreen'=>array(32,178,170), - 'palegreen'=>array(152,251,152), - 'springgreen'=>array(0,255,127), - 'lawngreen'=>array(124,252,0), - 'green'=>array(0,255,0), - 'chartreuse'=>array(127,255,0), - 'mediumspringgreen'=>array(0,250,154), - 'greenyellow'=>array(173,255,47), - 'limegreen'=>array(50,205,50), - 'yellowgreen'=>array(154,205,50), - 'forestgreen'=>array(34,139,34), - 'olivedrab'=>array(107,142,35), - 'darkkhaki'=>array(189,183,107), - 'khaki'=>array(240,230,140), - 'palegoldenrod'=>array(238,232,170), - 'lightgoldenrodyellow'=>array(250,250,210), - 'lightyellow'=>array(255,255,200), - 'yellow'=>array(255,255,0), - 'gold'=>array(255,215,0), - 'lightgoldenrod'=>array(238,221,130), - 'goldenrod'=>array(218,165,32), - 'darkgoldenrod'=>array(184,134,11), - 'rosybrown'=>array(188,143,143), - 'indianred'=>array(205,92,92), - 'saddlebrown'=>array(139,69,19), - 'sienna'=>array(160,82,45), - 'peru'=>array(205,133,63), - 'burlywood'=>array(222,184,135), - 'beige'=>array(245,245,220), - 'wheat'=>array(245,222,179), - 'sandybrown'=>array(244,164,96), - 'tan'=>array(210,180,140), - 'chocolate'=>array(210,105,30), - 'firebrick'=>array(178,34,34), - 'brown'=>array(165,42,42), - 'darksalmon'=>array(233,150,122), - 'salmon'=>array(250,128,114), - 'lightsalmon'=>array(255,160,122), - 'orange'=>array(255,165,0), - 'darkorange'=>array(255,140,0), - 'coral'=>array(255,127,80), - 'lightcoral'=>array(240,128,128), - 'tomato'=>array(255,99,71), - 'orangered'=>array(255,69,0), - 'red'=>array(255,0,0), - 'hotpink'=>array(255,105,180), - 'deeppink'=>array(255,20,147), - 'pink'=>array(255,192,203), - 'lightpink'=>array(255,182,193), - 'palevioletred'=>array(219,112,147), - 'maroon'=>array(176,48,96), - 'mediumvioletred'=>array(199,21,133), - 'violetred'=>array(208,32,144), - 'magenta'=>array(255,0,255), - 'violet'=>array(238,130,238), - 'plum'=>array(221,160,221), - 'orchid'=>array(218,112,214), - 'mediumorchid'=>array(186,85,211), - 'darkorchid'=>array(153,50,204), - 'darkviolet'=>array(148,0,211), - 'blueviolet'=>array(138,43,226), - 'purple'=>array(160,32,240), - 'mediumpurple'=>array(147,112,219), - 'thistle'=>array(216,191,216), - 'snow1'=>array(255,250,250), - 'snow2'=>array(238,233,233), - 'snow3'=>array(205,201,201), - 'snow4'=>array(139,137,137), - 'seashell1'=>array(255,245,238), - 'seashell2'=>array(238,229,222), - 'seashell3'=>array(205,197,191), - 'seashell4'=>array(139,134,130), - 'AntiqueWhite1'=>array(255,239,219), - 'AntiqueWhite2'=>array(238,223,204), - 'AntiqueWhite3'=>array(205,192,176), - 'AntiqueWhite4'=>array(139,131,120), - 'bisque1'=>array(255,228,196), - 'bisque2'=>array(238,213,183), - 'bisque3'=>array(205,183,158), - 'bisque4'=>array(139,125,107), - 'peachPuff1'=>array(255,218,185), - 'peachpuff2'=>array(238,203,173), - 'peachpuff3'=>array(205,175,149), - 'peachpuff4'=>array(139,119,101), - 'navajowhite1'=>array(255,222,173), - 'navajowhite2'=>array(238,207,161), - 'navajowhite3'=>array(205,179,139), - 'navajowhite4'=>array(139,121,94), - 'lemonchiffon1'=>array(255,250,205), - 'lemonchiffon2'=>array(238,233,191), - 'lemonchiffon3'=>array(205,201,165), - 'lemonchiffon4'=>array(139,137,112), - 'ivory1'=>array(255,255,240), - 'ivory2'=>array(238,238,224), - 'ivory3'=>array(205,205,193), - 'ivory4'=>array(139,139,131), - 'honeydew'=>array(193,205,193), - 'lavenderblush1'=>array(255,240,245), - 'lavenderblush2'=>array(238,224,229), - 'lavenderblush3'=>array(205,193,197), - 'lavenderblush4'=>array(139,131,134), - 'mistyrose1'=>array(255,228,225), - 'mistyrose2'=>array(238,213,210), - 'mistyrose3'=>array(205,183,181), - 'mistyrose4'=>array(139,125,123), - 'azure1'=>array(240,255,255), - 'azure2'=>array(224,238,238), - 'azure3'=>array(193,205,205), - 'azure4'=>array(131,139,139), - 'slateblue1'=>array(131,111,255), - 'slateblue2'=>array(122,103,238), - 'slateblue3'=>array(105,89,205), - 'slateblue4'=>array(71,60,139), - 'royalblue1'=>array(72,118,255), - 'royalblue2'=>array(67,110,238), - 'royalblue3'=>array(58,95,205), - 'royalblue4'=>array(39,64,139), - 'dodgerblue1'=>array(30,144,255), - 'dodgerblue2'=>array(28,134,238), - 'dodgerblue3'=>array(24,116,205), - 'dodgerblue4'=>array(16,78,139), - 'steelblue1'=>array(99,184,255), - 'steelblue2'=>array(92,172,238), - 'steelblue3'=>array(79,148,205), - 'steelblue4'=>array(54,100,139), - 'deepskyblue1'=>array(0,191,255), - 'deepskyblue2'=>array(0,178,238), - 'deepskyblue3'=>array(0,154,205), - 'deepskyblue4'=>array(0,104,139), - 'skyblue1'=>array(135,206,255), - 'skyblue2'=>array(126,192,238), - 'skyblue3'=>array(108,166,205), - 'skyblue4'=>array(74,112,139), - 'lightskyblue1'=>array(176,226,255), - 'lightskyblue2'=>array(164,211,238), - 'lightskyblue3'=>array(141,182,205), - 'lightskyblue4'=>array(96,123,139), - 'slategray1'=>array(198,226,255), - 'slategray2'=>array(185,211,238), - 'slategray3'=>array(159,182,205), - 'slategray4'=>array(108,123,139), - 'lightsteelblue1'=>array(202,225,255), - 'lightsteelblue2'=>array(188,210,238), - 'lightsteelblue3'=>array(162,181,205), - 'lightsteelblue4'=>array(110,123,139), - 'lightblue1'=>array(191,239,255), - 'lightblue2'=>array(178,223,238), - 'lightblue3'=>array(154,192,205), - 'lightblue4'=>array(104,131,139), - 'lightcyan1'=>array(224,255,255), - 'lightcyan2'=>array(209,238,238), - 'lightcyan3'=>array(180,205,205), - 'lightcyan4'=>array(122,139,139), - 'paleturquoise1'=>array(187,255,255), - 'paleturquoise2'=>array(174,238,238), - 'paleturquoise3'=>array(150,205,205), - 'paleturquoise4'=>array(102,139,139), - 'cadetblue1'=>array(152,245,255), - 'cadetblue2'=>array(142,229,238), - 'cadetblue3'=>array(122,197,205), - 'cadetblue4'=>array(83,134,139), - 'turquoise1'=>array(0,245,255), - 'turquoise2'=>array(0,229,238), - 'turquoise3'=>array(0,197,205), - 'turquoise4'=>array(0,134,139), - 'cyan1'=>array(0,255,255), - 'cyan2'=>array(0,238,238), - 'cyan3'=>array(0,205,205), - 'cyan4'=>array(0,139,139), - 'darkslategray1'=>array(151,255,255), - 'darkslategray2'=>array(141,238,238), - 'darkslategray3'=>array(121,205,205), - 'darkslategray4'=>array(82,139,139), - 'aquamarine1'=>array(127,255,212), - 'aquamarine2'=>array(118,238,198), - 'aquamarine3'=>array(102,205,170), - 'aquamarine4'=>array(69,139,116), - 'darkseagreen1'=>array(193,255,193), - 'darkseagreen2'=>array(180,238,180), - 'darkseagreen3'=>array(155,205,155), - 'darkseagreen4'=>array(105,139,105), - 'seagreen1'=>array(84,255,159), - 'seagreen2'=>array(78,238,148), - 'seagreen3'=>array(67,205,128), - 'seagreen4'=>array(46,139,87), - 'palegreen1'=>array(154,255,154), - 'palegreen2'=>array(144,238,144), - 'palegreen3'=>array(124,205,124), - 'palegreen4'=>array(84,139,84), - 'springgreen1'=>array(0,255,127), - 'springgreen2'=>array(0,238,118), - 'springgreen3'=>array(0,205,102), - 'springgreen4'=>array(0,139,69), - 'chartreuse1'=>array(127,255,0), - 'chartreuse2'=>array(118,238,0), - 'chartreuse3'=>array(102,205,0), - 'chartreuse4'=>array(69,139,0), - 'olivedrab1'=>array(192,255,62), - 'olivedrab2'=>array(179,238,58), - 'olivedrab3'=>array(154,205,50), - 'olivedrab4'=>array(105,139,34), - 'darkolivegreen1'=>array(202,255,112), - 'darkolivegreen2'=>array(188,238,104), - 'darkolivegreen3'=>array(162,205,90), - 'darkolivegreen4'=>array(110,139,61), - 'khaki1'=>array(255,246,143), - 'khaki2'=>array(238,230,133), - 'khaki3'=>array(205,198,115), - 'khaki4'=>array(139,134,78), - 'lightgoldenrod1'=>array(255,236,139), - 'lightgoldenrod2'=>array(238,220,130), - 'lightgoldenrod3'=>array(205,190,112), - 'lightgoldenrod4'=>array(139,129,76), - 'yellow1'=>array(255,255,0), - 'yellow2'=>array(238,238,0), - 'yellow3'=>array(205,205,0), - 'yellow4'=>array(139,139,0), - 'gold1'=>array(255,215,0), - 'gold2'=>array(238,201,0), - 'gold3'=>array(205,173,0), - 'gold4'=>array(139,117,0), - 'goldenrod1'=>array(255,193,37), - 'goldenrod2'=>array(238,180,34), - 'goldenrod3'=>array(205,155,29), - 'goldenrod4'=>array(139,105,20), - 'darkgoldenrod1'=>array(255,185,15), - 'darkgoldenrod2'=>array(238,173,14), - 'darkgoldenrod3'=>array(205,149,12), - 'darkgoldenrod4'=>array(139,101,8), - 'rosybrown1'=>array(255,193,193), - 'rosybrown2'=>array(238,180,180), - 'rosybrown3'=>array(205,155,155), - 'rosybrown4'=>array(139,105,105), - 'indianred1'=>array(255,106,106), - 'indianred2'=>array(238,99,99), - 'indianred3'=>array(205,85,85), - 'indianred4'=>array(139,58,58), - 'sienna1'=>array(255,130,71), - 'sienna2'=>array(238,121,66), - 'sienna3'=>array(205,104,57), - 'sienna4'=>array(139,71,38), - 'burlywood1'=>array(255,211,155), - 'burlywood2'=>array(238,197,145), - 'burlywood3'=>array(205,170,125), - 'burlywood4'=>array(139,115,85), - 'wheat1'=>array(255,231,186), - 'wheat2'=>array(238,216,174), - 'wheat3'=>array(205,186,150), - 'wheat4'=>array(139,126,102), - 'tan1'=>array(255,165,79), - 'tan2'=>array(238,154,73), - 'tan3'=>array(205,133,63), - 'tan4'=>array(139,90,43), - 'chocolate1'=>array(255,127,36), - 'chocolate2'=>array(238,118,33), - 'chocolate3'=>array(205,102,29), - 'chocolate4'=>array(139,69,19), - 'firebrick1'=>array(255,48,48), - 'firebrick2'=>array(238,44,44), - 'firebrick3'=>array(205,38,38), - 'firebrick4'=>array(139,26,26), - 'brown1'=>array(255,64,64), - 'brown2'=>array(238,59,59), - 'brown3'=>array(205,51,51), - 'brown4'=>array(139,35,35), - 'salmon1'=>array(255,140,105), - 'salmon2'=>array(238,130,98), - 'salmon3'=>array(205,112,84), - 'salmon4'=>array(139,76,57), - 'lightsalmon1'=>array(255,160,122), - 'lightsalmon2'=>array(238,149,114), - 'lightsalmon3'=>array(205,129,98), - 'lightsalmon4'=>array(139,87,66), - 'orange1'=>array(255,165,0), - 'orange2'=>array(238,154,0), - 'orange3'=>array(205,133,0), - 'orange4'=>array(139,90,0), - 'darkorange1'=>array(255,127,0), - 'darkorange2'=>array(238,118,0), - 'darkorange3'=>array(205,102,0), - 'darkorange4'=>array(139,69,0), - 'coral1'=>array(255,114,86), - 'coral2'=>array(238,106,80), - 'coral3'=>array(205,91,69), - 'coral4'=>array(139,62,47), - 'tomato1'=>array(255,99,71), - 'tomato2'=>array(238,92,66), - 'tomato3'=>array(205,79,57), - 'tomato4'=>array(139,54,38), - 'orangered1'=>array(255,69,0), - 'orangered2'=>array(238,64,0), - 'orangered3'=>array(205,55,0), - 'orangered4'=>array(139,37,0), - 'deeppink1'=>array(255,20,147), - 'deeppink2'=>array(238,18,137), - 'deeppink3'=>array(205,16,118), - 'deeppink4'=>array(139,10,80), - 'hotpink1'=>array(255,110,180), - 'hotpink2'=>array(238,106,167), - 'hotpink3'=>array(205,96,144), - 'hotpink4'=>array(139,58,98), - 'pink1'=>array(255,181,197), - 'pink2'=>array(238,169,184), - 'pink3'=>array(205,145,158), - 'pink4'=>array(139,99,108), - 'lightpink1'=>array(255,174,185), - 'lightpink2'=>array(238,162,173), - 'lightpink3'=>array(205,140,149), - 'lightpink4'=>array(139,95,101), - 'palevioletred1'=>array(255,130,171), - 'palevioletred2'=>array(238,121,159), - 'palevioletred3'=>array(205,104,137), - 'palevioletred4'=>array(139,71,93), - 'maroon1'=>array(255,52,179), - 'maroon2'=>array(238,48,167), - 'maroon3'=>array(205,41,144), - 'maroon4'=>array(139,28,98), - 'violetred1'=>array(255,62,150), - 'violetred2'=>array(238,58,140), - 'violetred3'=>array(205,50,120), - 'violetred4'=>array(139,34,82), - 'magenta1'=>array(255,0,255), - 'magenta2'=>array(238,0,238), - 'magenta3'=>array(205,0,205), - 'magenta4'=>array(139,0,139), - 'mediumred'=>array(140,34,34), - 'orchid1'=>array(255,131,250), - 'orchid2'=>array(238,122,233), - 'orchid3'=>array(205,105,201), - 'orchid4'=>array(139,71,137), - 'plum1'=>array(255,187,255), - 'plum2'=>array(238,174,238), - 'plum3'=>array(205,150,205), - 'plum4'=>array(139,102,139), - 'mediumorchid1'=>array(224,102,255), - 'mediumorchid2'=>array(209,95,238), - 'mediumorchid3'=>array(180,82,205), - 'mediumorchid4'=>array(122,55,139), - 'darkorchid1'=>array(191,62,255), - 'darkorchid2'=>array(178,58,238), - 'darkorchid3'=>array(154,50,205), - 'darkorchid4'=>array(104,34,139), - 'purple1'=>array(155,48,255), - 'purple2'=>array(145,44,238), - 'purple3'=>array(125,38,205), - 'purple4'=>array(85,26,139), - 'mediumpurple1'=>array(171,130,255), - 'mediumpurple2'=>array(159,121,238), - 'mediumpurple3'=>array(137,104,205), - 'mediumpurple4'=>array(93,71,139), - 'thistle1'=>array(255,225,255), - 'thistle2'=>array(238,210,238), - 'thistle3'=>array(205,181,205), - 'thistle4'=>array(139,123,139), - 'gray1'=>array(10,10,10), - 'gray2'=>array(40,40,30), - 'gray3'=>array(70,70,70), - 'gray4'=>array(100,100,100), - 'gray5'=>array(130,130,130), - 'gray6'=>array(160,160,160), - 'gray7'=>array(190,190,190), - 'gray8'=>array(210,210,210), - 'gray9'=>array(240,240,240), - 'darkgray'=>array(100,100,100), - 'darkblue'=>array(0,0,139), - 'darkcyan'=>array(0,139,139), - 'darkmagenta'=>array(139,0,139), - 'darkred'=>array(139,0,0), - 'silver'=>array(192, 192, 192), - 'eggplant'=>array(144,176,168), - 'lightgreen'=>array(144,238,144)); - } - - - //---------------- - // PUBLIC METHODS - // Colors can be specified as either - // 1. #xxxxxx HTML style - // 2. "colorname" as a named color - // 3. array(r,g,b) RGB triple - // This function translates this to a native RGB format and returns an - // RGB triple. - - public function Color($aColor) - { - if (is_string($aColor)) { - $matches = array(); - // this regex will parse a color string and fill the $matches array as such: - // 0: the full match if any - // 1: a hex string preceded by a hash, can be 3 characters (#fff) or 6 (#ffffff) (4 or 5 also accepted but...) - // 2,3,4: r,g,b values in hex if the first character of the string is # - // 5: all alpha-numeric characters at the beginning of the string if string does not start with # - // 6: alpha value prefixed by @ if supplied - // 7: alpha value with @ stripped - // 8: adjust value prefixed with : if supplied - // 9: adjust value with : stripped - $regex = '/(#([0-9a-fA-F]{1,2})([0-9a-fA-F]{1,2})([0-9a-fA-F]{1,2}))?([\w]+)?(@([\d\.,]+))?(:([\d\.,]+))?/'; - if (!preg_match($regex, $aColor, $matches)) { - JpGraphError::RaiseL(25078, $aColor);//(" Unknown color: $aColor"); - } - if (empty($matches[5])) { - $r = strlen($matches[2]) == 1 ? $matches[2].$matches[2] : $matches[2]; - $g = strlen($matches[3]) == 1 ? $matches[3].$matches[3] : $matches[3]; - $b = strlen($matches[4]) == 1 ? $matches[4].$matches[4] : $matches[4]; - $r = hexdec($r); - $g = hexdec($g); - $b = hexdec($b); - } else { - if (!isset($this->rgb_table[$matches[5]])) { - JpGraphError::RaiseL(25078, $aColor);//(" Unknown color: $aColor"); - } - $r = $this->rgb_table[$matches[5]][0]; - $g = $this->rgb_table[$matches[5]][1]; - $b = $this->rgb_table[$matches[5]][2]; - } - $alpha = isset($matches[7]) ? str_replace(',', '.', $matches[7]) : 0; - $adj = isset($matches[9]) ? str_replace(',', '.', $matches[9]) : 1.0; - - if ($adj < 0) { - JpGraphError::RaiseL(25077);//('Adjustment factor for color must be > 0'); - } - - // Scale adj so that an adj=2 always - // makes the color 100% white (i.e. 255,255,255. - // and adj=1 neutral and adj=0 black. - if ($adj == 1) { - return array($r,$g,$b,$alpha); - } elseif ($adj > 1) { - $m = ($adj-1.0)*(255-min(255, min($r, min($g, $b)))); - return array(min(255, $r+$m), min(255, $g+$m), min(255, $b+$m),$alpha); - } elseif ($adj < 1) { - $m = ($adj-1.0)*max(255, max($r, max($g, $b))); - return array(max(0, $r+$m), max(0, $g+$m), max(0, $b+$m),$alpha); - } - } elseif (is_array($aColor)) { - if (!isset($aColor[3])) { - $aColor[3] = 0; - } - return $aColor; - } else { - JpGraphError::RaiseL(25079, $aColor, count($aColor));//(" Unknown color specification: $aColor , size=".count($aColor)); - } - } - - // Compare two colors - // return true if equal - public function Equal($aCol1, $aCol2) - { - $c1 = $this->Color($aCol1); - $c2 = $this->Color($aCol2); - return $c1[0]==$c2[0] && $c1[1]==$c2[1] && $c1[2]==$c2[2] ; - } - - // Allocate a new color in the current image - // Return new color index, -1 if no more colors could be allocated - public function Allocate($aColor, $aAlpha=0.0) - { - list($r, $g, $b, $a) = $this->color($aColor); - // If alpha is specified in the color string then this - // takes precedence over the second argument - if ($a > 0) { - $aAlpha = $a; - } - if ($aAlpha < 0 || $aAlpha > 1) { - JpGraphError::RaiseL(25080);//('Alpha parameter for color must be between 0.0 and 1.0'); - } - return imagecolorresolvealpha($this->img, $r, $g, $b, round($aAlpha * 127)); - } - - // Try to convert an array with three valid numbers to the corresponding hex array - // This is currenly only used in processing the colors for barplots in order to be able - // to handle the case where the color might be specified as an array of colros as well. - // In that case we must be able to find out if an array of values should be interpretated as - // a single color (specifeid as an RGB triple) - public static function tryHexConversion($aColor) - { - if (is_array($aColor)) { - if (count($aColor) == 3) { - if (is_numeric($aColor[0]) && is_numeric($aColor[1]) && is_numeric($aColor[2])) { - if (($aColor[0] >= 0 && $aColor[0] <= 255) && - ($aColor[1] >= 0 && $aColor[1] <= 255) && - ($aColor[2] >= 0 && $aColor[2] <= 255)) { - return sprintf('#%02x%02x%02x', $aColor[0], $aColor[1], $aColor[2]); - } - } - } - } - return $aColor; - } - - // Return a RGB tripple corresponding to a position in the normal light spectrum - // The argumen values is in the range [0, 1] where a value of 0 correponds to blue and - // a value of 1 corresponds to red. Values in betwen is mapped to a linear interpolation - // of the constituting colors in the visible color spectra. - // The $aDynamicRange specified how much of the dynamic range we shold use - // a value of 1.0 give the full dyanmic range and a lower value give more dark - // colors. In the extreme of 0.0 then all colors will be black. - public static function GetSpectrum($aVal, $aDynamicRange=1.0) - { - if ($aVal < 0 || $aVal > 1.0001) { - return array(0,0,0); // Invalid case - just return black - } - - $sat = round(255*$aDynamicRange); - $a = 0.25; - if ($aVal <= 0.25) { - return array(0, round($sat*$aVal/$a), $sat); - } elseif ($aVal <= 0.5) { - return array(0, $sat, round($sat-$sat*($aVal-0.25)/$a)); - } elseif ($aVal <= 0.75) { - return array(round($sat*($aVal-0.5)/$a), $sat, 0); - } else { - return array($sat, round($sat-$sat*($aVal-0.75)/$a), 0); - } - } -} // Class diff --git a/onyx2/include/jpgraph/jpgraph_scatter.php b/onyx2/include/jpgraph/jpgraph_scatter.php index 550338e..eb0c6be 100644 --- a/onyx2/include/jpgraph/jpgraph_scatter.php +++ b/onyx2/include/jpgraph/jpgraph_scatter.php @@ -1,13 +1,13 @@ iAngles = $angles; - parent::__construct($datay, $datax); + $this->Plot($datay, $datax); $this->value->SetAlign('center', 'center'); $this->value->SetMargin(15); @@ -99,7 +97,7 @@ class FieldPlot extends Plot public function Stroke($img, $xscale, $yscale) { - // Remeber base color and size + // Remeber base color and size $bc = $this->arrow->iColor; $bs = $this->arrow->iSize; $bas = $this->arrow->iArrowSize; @@ -134,7 +132,7 @@ class FieldPlot extends Plot $this->value->Stroke($img, $this->coords[0][$i], $xt, $yt); } } - + // Framework function public function Legend($aGraph) { @@ -158,24 +156,24 @@ class FieldPlot extends Plot //=================================================== class ScatterPlot extends Plot { - public $mark; - public $link; + public $mark = ''; private $impuls = false; + private $linkpoints = false; + private $linkpointweight=1; + private $linkpointcolor="black"; //--------------- // CONSTRUCTOR - public function __construct($datay, $datax=false) + public function ScatterPlot($datay, $datax=false) { - if (is_array($datax) && (count($datax) != count($datay))) { - JpGraphError::RaiseL(20003);//("Scatterplot must have equal number of X and Y points."); - } - parent::__construct($datay, $datax); + if ((count($datax) != count($datay)) && is_array($datax)) { + JpGraphError::RaiseL(20003); + }//("Scatterplot must have equal number of X and Y points."); + $this->Plot($datay, $datax); $this->mark = new PlotMark(); $this->mark->SetType(MARK_SQUARE); $this->mark->SetColor($this->color); $this->value->SetAlign('center', 'center'); $this->value->SetMargin(0); - $this->link = new LineProperty(1, 'black', 'solid'); - $this->link->iShow = false; } //--------------- @@ -185,18 +183,12 @@ class ScatterPlot extends Plot $this->impuls = $f; } - public function SetStem($f=true) - { - $this->impuls = $f; - } - // Combine the scatter plot points with a line - public function SetLinkPoints($aFlag=true, $aColor="black", $aWeight=1, $aStyle='solid') + public function SetLinkPoints($aFlag=true, $aColor="black", $aWeight=1) { - $this->link->iShow = $aFlag; - $this->link->iColor = $aColor; - $this->link->iWeight = $aWeight; - $this->link->iStyle = $aStyle; + $this->linkpoints=$aFlag; + $this->linkpointcolor=$aColor; + $this->linkpointweight=$aWeight; } public function Stroke($img, $xscale, $yscale) @@ -207,11 +199,11 @@ class ScatterPlot extends Plot } else { $yzero=$yscale->scale_abs[0]; } - + $this->csimareas = ''; for ($i=0; $i<$this->numpoints; ++$i) { - // Skip null values + // Skip null values if ($this->coords[0][$i]==='' || $this->coords[0][$i]==='-' || $this->coords[0][$i]==='x') { continue; } @@ -224,12 +216,10 @@ class ScatterPlot extends Plot $yt = $yscale->Translate($this->coords[0][$i]); - if ($this->link->iShow && isset($yt_old)) { - $img->SetColor($this->link->iColor); - $img->SetLineWeight($this->link->iWeight); - $old = $img->SetLineStyle($this->link->iStyle); - $img->StyleLine($xt_old, $yt_old, $xt, $yt); - $img->SetLineStyle($old); + if ($this->linkpoints && isset($yt_old)) { + $img->SetColor($this->linkpointcolor); + $img->SetLineWeight($this->linkpointweight); + $img->Line($xt_old, $yt_old, $xt, $yt); } if ($this->impuls) { @@ -237,7 +227,7 @@ class ScatterPlot extends Plot $img->SetLineWeight($this->weight); $img->Line($xt, $yzero, $xt, $yt); } - + if (!empty($this->csimtargets[$i])) { if (!empty($this->csimwintargets[$i])) { $this->mark->SetCSIMTarget($this->csimtargets[$i], $this->csimwintargets[$i]); @@ -246,7 +236,7 @@ class ScatterPlot extends Plot } $this->mark->SetCSIMAlt($this->csimalts[$i]); } - + if (isset($this->coords[1])) { $this->mark->SetCSIMAltVal($this->coords[0][$i], $this->coords[1][$i]); } else { @@ -254,7 +244,7 @@ class ScatterPlot extends Plot } $this->mark->Stroke($img, $xt, $yt); - + $this->csimareas .= $this->mark->GetCSIMAreas(); $this->value->Stroke($img, $this->coords[0][$i], $xt, $yt); @@ -262,7 +252,7 @@ class ScatterPlot extends Plot $yt_old = $yt; } } - + // Framework function public function Legend($aGraph) { diff --git a/onyx2/include/jpgraph/jpgraph_stock.php b/onyx2/include/jpgraph/jpgraph_stock.php index c5d6120..8943ad4 100644 --- a/onyx2/include/jpgraph/jpgraph_stock.php +++ b/onyx2/include/jpgraph/jpgraph_stock.php @@ -1,13 +1,13 @@ iTupleSize) { JpGraphError::RaiseL(21001, $this->iTupleSize); //('Data values for Stock charts must contain an even multiple of '.$this->iTupleSize.' data points.'); } - parent::__construct($datay, $datax); + $this->Plot($datay, $datax); $this->numpoints /= $this->iTupleSize; } //--------------- // PUBLIC METHODS - + public function SetColor($aColor, $aColor1='white', $aColor2='darkred', $aColor3='darkred') { $this->color = $aColor; @@ -67,7 +67,7 @@ class StockPlot extends Plot $graph->xaxis->scale->ticks->SetXLabelOffset($a); $graph->SetTextScaleOff($b); } - + // Method description public function Stroke($img, $xscale, $yscale) { @@ -78,8 +78,9 @@ class StockPlot extends Plot if (isset($this->coords[1])) { if (count($this->coords[1])!=$n) { JpGraphError::RaiseL(2003, count($this->coords[1]), $n); - // ("Number of X and Y points are not equal. Number of X-points:".count($this->coords[1])." Number of Y-points:$numpoints"); - } else { + } + //("Number of X and Y points are not equal. Number of X-points:".count($this->coords[1])." Number of Y-points:$numpoints"); + else { $exist_x = true; } } else { @@ -91,26 +92,23 @@ class StockPlot extends Plot } else { $xs=0; } - + $ts = $this->iTupleSize; $this->csimareas = ''; for ($i=0; $i<$n; ++$i) { - //If value is NULL, then don't draw a bar at all - if ($this->coords[0][$i*$ts] === null) { + //If value is NULL, then don't draw a bar at all + if ($this->coords[0][$i] === null) { continue; } if ($exist_x) { $x=$this->coords[1][$i]; - if ($x === null) { - continue; - } } else { $x=$i; } $xt = $xscale->Translate($x); - + $neg = $this->coords[0][$i*$ts] > $this->coords[0][$i*$ts+1] ; $yopen = $yscale->Translate($this->coords[0][$i*$ts]); $yclose = $yscale->Translate($this->coords[0][$i*$ts+1]); @@ -133,7 +131,7 @@ class StockPlot extends Plot } else { $img->SetColor($this->color); } - + $img->Rectangle($xl, $yopen, $xr, $yclose); if ($yopen < $yclose) { @@ -159,8 +157,8 @@ class StockPlot extends Plot // Setup image maps if (!empty($this->csimtargets[$i])) { $this->csimareas.= 'csimareas .= ' href="'.$this->csimtargets[$i].'"'; if (!empty($this->csimalts[$i])) { $sval=$this->csimalts[$i]; @@ -185,11 +183,10 @@ class BoxPlot extends StockPlot { private $iPColor='black'; private $iNColor='white'; - - public function __construct($datay, $datax=false) + public function BoxPlot($datay, $datax=false) { $this->iTupleSize=5; - parent::__construct($datay, $datax); + parent::StockPlot($datay, $datax); } public function SetMedianColor($aPos, $aNeg) @@ -205,7 +202,7 @@ class BoxPlot extends StockPlot } else { $img->SetColor($this->iPColor); } - + $y = $yscale->Translate($this->coords[0][$i*5+4]); $img->Line($xl, $y, $xr, $y); } diff --git a/onyx2/include/jpgraph/jpgraph_table.php b/onyx2/include/jpgraph/jpgraph_table.php deleted file mode 100755 index b6d8de5..0000000 --- a/onyx2/include/jpgraph/jpgraph_table.php +++ /dev/null @@ -1,1502 +0,0 @@ -iVal = new Text($aVal); - $this->iRow = $aRow; - $this->iCol = $aCol; - $this->iPRow = $aRow; // Initialiy each cell is its own parent - $this->iPCol = $aCol; - $this->iIconConstrain = array(-1,-1); - } - - public function Init($aTable) - { - $this->iTable = $aTable; - } - - public function SetCSIMTarget($aTarget, $aAlt='', $aWinTarget='') - { - $this->iCSIMtarget = $aTarget; - $this->iCSIMwintarget = $aWinTarget; - $this->iCSIMalt = $aAlt; - } - - public function GetCSIMArea() - { - if ($this->iCSIMtarget !== '') { - return $this->iCSIMArea; - } else { - return ''; - } - } - - public function SetImageConstrain($aType, $aVal) - { - if (!in_array($aType, array(TIMG_WIDTH, TIMG_HEIGHT))) { - JpGraphError::RaiseL(27015); - } - $this->iIconConstrain = array($aType,$aVal); - } - - public function SetCountryFlag($aFlag, $aScale=1.0, $aMix=100, $aStdSize=3) - { - $this->iIcon = new IconPlot(); - $this->iIcon->SetCountryFlag($aFlag, 0, 0, $aScale, $aMix, $aStdSize); - } - - public function SetImage($aFile, $aScale=1.0, $aMix=100) - { - $this->iIcon = new IconPlot($aFile, 0, 0, $aScale, $aMix); - } - - public function SetImageFromString($aStr, $aScale=1.0, $aMix=100) - { - $this->iIcon = new IconPlot("", 0, 0, $aScale, $aMix); - $this->iIcon->CreateFromString($aStr); - } - - public function SetRowColSpan($aRowSpan, $aColSpan) - { - $this->iRowSpan = $aRowSpan; - $this->iColSpan = $aColSpan; - $this->iMerged = true; - } - - public function SetMerged($aPRow, $aPCol, $aFlg=true) - { - $this->iMerged = $aFlg; - $this->iPRow=$aPRow; - $this->iPCol=$aPCol; - } - - public function IsMerged() - { - return $this->iMerged; - } - - public function SetNumberFormat($aF) - { - $this->iNumberFormat = $aF; - } - - public function Set($aTxt) - { - $this->iVal->Set($aTxt); - } - - public function SetFont($aFF, $aFS, $aFSize) - { - $this->iFF = $aFF; - $this->iFS = $aFS; - $this->iFSize = $aFSize; - $this->iVal->SetFont($aFF, $aFS, $aFSize); - } - - public function SetFillColor($aColor) - { - $this->iBGColor=$aColor; - } - - public function SetFontColor($aColor) - { - $this->iFontColor=$aColor; - } - - public function SetGridColor($aLeft, $aTop=null, $aBottom=null, $aRight=null) - { - if ($aLeft !== null) { - $this->iGridColor[0] = $aLeft; - } - if ($aTop !== null) { - $this->iGridColor[1] = $aTop; - } - if ($aBottom !== null) { - $this->iGridColor[2] = $aBottom; - } - if ($aRight !== null) { - $this->iGridColor[3] = $aRight; - } - } - - public function SetGridStyle($aLeft, $aTop=null, $aBottom=null, $aRight=null) - { - if ($aLeft !== null) { - $this->iGridStyle[0] = $aLeft; - } - if ($aTop !== null) { - $this->iGridStyle[1] = $aTop; - } - if ($aBottom !== null) { - $this->iGridStyle[2] = $aBottom; - } - if ($aRight !== null) { - $this->iGridStyle[3] = $aRight; - } - } - - public function SetGridWeight($aLeft=null, $aTop=null, $aBottom=null, $aRight=null) - { - $weight_arr = array($aLeft, $aTop, $aBottom, $aRight); - for ($i = 0; $i < count($weight_arr); $i++) { - if ($weight_arr[$i] === "") { - $weight_arr[$i] = 0; - } - } - if ($aLeft !== null) { - $this->iGridWeight[0] = $weight_arr[0]; - } - if ($aTop !== null) { - $this->iGridWeight[1] = $weight_arr[1]; - } - if ($aBottom !== null) { - $this->iGridWeight[2] = $weight_arr[2]; - } - if ($aRight !== null) { - $this->iGridWeight[3] = $weight_arr[3]; - } - } - - public function SetMargin($aLeft, $aRight, $aTop, $aBottom) - { - $this->iMarginLeft=$aLeft; - $this->iMarginRight=$aRight; - $this->iMarginTop=$aTop; - $this->iMarginBottom=$aBottom; - } - - public function GetWidth($aImg) - { - if ($this->iIcon !== null) { - if ($this->iIconConstrain[0] == TIMG_WIDTH) { - $this->iIcon->SetScale(1); - $tmp = $this->iIcon->GetWidthHeight(); - $this->iIcon->SetScale($this->iIconConstrain[1]/$tmp[0]); - } elseif ($this->iIconConstrain[0] == TIMG_HEIGHT) { - $this->iIcon->SetScale(1); - $tmp = $this->iIcon->GetWidthHeight(); - $this->iIcon->SetScale($this->iIconConstrain[1]/$tmp[1]); - } - $tmp = $this->iIcon->GetWidthHeight(); - $iwidth = $tmp[0]; - } else { - $iwidth=0; - } - if ($this->iTable->iCells[$this->iPRow][$this->iPCol]->iVal->dir == 0) { - $pwidth = $this->iTable->iCells[$this->iPRow][$this->iPCol]->iVal->GetWidth($aImg); - } elseif ($this->iTable->iCells[$this->iPRow][$this->iPCol]->iVal->dir == 90) { - $pwidth = $this->iTable->iCells[$this->iPRow][$this->iPCol]->iVal->GetFontHeight($aImg)+2; - } else { - $pwidth = $this->iTable->iCells[$this->iPRow][$this->iPCol]->iVal->GetWidth($aImg)+2; - } - - $pcolspan = $this->iTable->iCells[$this->iPRow][$this->iPCol]->iColSpan; - return round(max($iwidth, $pwidth)/$pcolspan) + $this->iMarginLeft + $this->iMarginRight; - } - - public function GetHeight($aImg) - { - if ($this->iIcon !== null) { - if ($this->iIconConstrain[0] == TIMG_WIDTH) { - $this->iIcon->SetScale(1); - $tmp = $this->iIcon->GetWidthHeight(); - $this->iIcon->SetScale($this->iIconConstrain[1]/$tmp[0]); - } elseif ($this->iIconConstrain[0] == TIMG_HEIGHT) { - $this->iIcon->SetScale(1); - $tmp = $this->iIcon->GetWidthHeight(); - $this->iIcon->SetScale($this->iIconConstrain[1]/$tmp[1]); - } - $tmp = $this->iIcon->GetWidthHeight(); - $iheight = $tmp[1]; - } else { - $iheight = 0; - } - if ($this->iTable->iCells[$this->iPRow][$this->iPCol]->iVal->dir == 0) { - $pheight = $this->iTable->iCells[$this->iPRow][$this->iPCol]->iVal->GetHeight($aImg); - } else { - $pheight = $this->iTable->iCells[$this->iPRow][$this->iPCol]->iVal->GetHeight($aImg)+1; - } - $prowspan = $this->iTable->iCells[$this->iPRow][$this->iPCol]->iRowSpan; - return round(max($iheight, $pheight)/$prowspan) + $this->iMarginTop + $this->iMarginBottom; - } - - public function SetAlign($aHorAlign='left', $aVertAlign='bottom') - { - $aHorAlign = strtolower($aHorAlign); - $aVertAlign = strtolower($aVertAlign); - $chk = array('left','right','center','bottom','top','middle'); - if (!in_array($aHorAlign, $chk) || !in_array($aVertAlign, $chk)) { - JpGraphError::RaiseL(27011, $aHorAlign, $aVertAlign); - } - $this->iVertAlign = $aVertAlign; - $this->iHorAlign = $aHorAlign; - } - - public function AdjustMarginsForGrid() - { - if ($this->iCol > 0) { - switch ($this->iGridStyle[0]) { - case TGRID_SINGLE: $wf=1; break; - case TGRID_DOUBLE: $wf=3; break; - case TGRID_DOUBLE2: $wf=4; break; - } - $this->iMarginLeft += $this->iGridWeight[0]*$wf; - } - if ($this->iRow > 0) { - switch ($this->iGridStyle[1]) { - case TGRID_SINGLE: $wf=1; break; - case TGRID_DOUBLE: $wf=3; break; - case TGRID_DOUBLE2: $wf=4; break; - } - $this->iMarginTop += $this->iGridWeight[1]*$wf; - } - if ($this->iRow+$this->iRowSpan-1 < $this->iTable->iSize[0]-1) { - switch ($this->iGridStyle[2]) { - case TGRID_SINGLE: $wf=1; break; - case TGRID_DOUBLE: $wf=3; break; - case TGRID_DOUBLE2: $wf=4; break; - } - $this->iMarginBottom += $this->iGridWeight[2]*$wf; - } - if ($this->iCol+$this->iColSpan-1 < $this->iTable->iSize[1]-1) { - switch ($this->iGridStyle[3]) { - case TGRID_SINGLE: $wf=1; break; - case TGRID_DOUBLE: $wf=3; break; - case TGRID_DOUBLE2: $wf=4; break; - } - $this->iMarginRight += $this->iGridWeight[3]*$wf; - } - } - - public function StrokeVGrid($aImg, $aX, $aY, $aWidth, $aHeight, $aDir=1) - { - // Left or right grid line - // For the right we increase the X-pos and for the right we decrease it. This is - // determined by the direction argument. - $idx = $aDir==1 ? 0 : 3; - - // We don't stroke the grid lines that are on the edge of the table since this is - // the place of the border. - if ((($this->iCol > 0 && $idx==0) || ($this->iCol+$this->iColSpan-1 < $this->iTable->iSize[1]-1 && $idx==3)) - && $this->iGridWeight[$idx] > 0) { - $x = $aDir==1 ? $aX : $aX + $aWidth-1; - $y = $aY+$aHeight-1; - $aImg->SetColor($this->iGridColor[$idx]); - switch ($this->iGridStyle[$idx]) { - case TGRID_SINGLE: - for ($i=0; $i < $this->iGridWeight[$idx]; ++$i) { - $aImg->Line($x+$i*$aDir, $aY, $x+$i*$aDir, $y); - } - break; - - case TGRID_DOUBLE: - for ($i=0; $i < $this->iGridWeight[$idx]; ++$i) { - $aImg->Line($x+$i*$aDir, $aY, $x+$i*$aDir, $y); - } - $x += $this->iGridWeight[$idx]*2; - for ($i=0; $i < $this->iGridWeight[$idx]; ++$i) { - $aImg->Line($x+$i*$aDir, $aY, $x+$i*$aDir, $y); - } - break; - - case TGRID_DOUBLE2: - for ($i=0; $i < $this->iGridWeight[$idx]*2; ++$i) { - $aImg->Line($x+$i*$aDir, $aY, $x+$i*$aDir, $y); - } - $x += $this->iGridWeight[$idx]*3; - for ($i=0; $i < $this->iGridWeight[$idx]; ++$i) { - $aImg->Line($x+$i*$aDir, $aY, $x+$i*$aDir, $y); - } - break; - } - } - } - - public function StrokeHGrid($aImg, $aX, $aY, $aWidth, $aHeight, $aDir=1) - { - // Top or bottom grid line - // For the left we increase the X-pos and for the right we decrease it. This is - // determined by the direction argument. - $idx = $aDir==1 ? 1 : 2; - - // We don't stroke the grid lines that are on the edge of the table since this is - // the place of the border. - if ((($this->iRow > 0 && $idx==1) || ($this->iRow+$this->iRowSpan-1 < $this->iTable->iSize[0]-1 && $idx==2)) - && $this->iGridWeight[$idx] > 0) { - $y = $aDir==1 ? $aY : $aY+$aHeight-1; - $x = $aX+$aWidth-1; - $aImg->SetColor($this->iGridColor[$idx]); - switch ($this->iGridStyle[$idx]) { - case TGRID_SINGLE: - for ($i=0; $i < $this->iGridWeight[$idx]; ++$i) { - $aImg->Line($aX, $y+$i, $x, $y+$i); - } - break; - - case TGRID_DOUBLE: - for ($i=0; $i < $this->iGridWeight[$idx]; ++$i) { - $aImg->Line($aX, $y+$i, $x, $y+$i); - } - $y += $this->iGridWeight[$idx]*2; - for ($i=0; $i < $this->iGridWeight[$idx]; ++$i) { - $aImg->Line($aX, $y+$i, $x, $y+$i); - } - break; - - case TGRID_DOUBLE2: - for ($i=0; $i < $this->iGridWeight[$idx]*2; ++$i) { - $aImg->Line($aX, $y+$i, $x, $y+$i); - } - $y += $this->iGridWeight[$idx]*3; - for ($i=0; $i < $this->iGridWeight[$idx]; ++$i) { - $aImg->Line($aX, $y+$i, $x, $y+$i); - } - break; - } - } - } - - public function Stroke($aImg, $aX, $aY, $aWidth, $aHeight) - { - // If this is a merged cell we only stroke if it is the parent cell. - // The parent cell holds the merged cell block - if ($this->iMerged && ($this->iRow != $this->iPRow || $this->iCol != $this->iPCol)) { - return; - } - - if ($this->iBGColor != '') { - $aImg->SetColor($this->iBGColor); - $aImg->FilledRectangle($aX, $aY, $aX+$aWidth-1, $aY+$aHeight-1); - } - - $coords = $aX.','.$aY.','.($aX+$aWidth-1).','.$aY.','.($aX+$aWidth-1).','.($aY+$aHeight-1).','.$aX.','.($aY+$aHeight-1); - if (! empty($this->iCSIMtarget)) { - $this->iCSIMArea = 'iCSIMwintarget)) { - $this->iCSIMArea .= " target=\"".$this->iCSIMwintarget."\""; - } - if (! empty($this->iCSIMalt)) { - $this->iCSIMArea .= ' alt="'.$this->iCSIMalt.'" title="'.$this->iCSIMalt."\" "; - } - $this->iCSIMArea .= " />\n"; - } - - $this->StrokeVGrid($aImg, $aX, $aY, $aWidth, $aHeight); - $this->StrokeVGrid($aImg, $aX, $aY, $aWidth, $aHeight, -1); - $this->StrokeHGrid($aImg, $aX, $aY, $aWidth, $aHeight); - $this->StrokeHGrid($aImg, $aX, $aY, $aWidth, $aHeight, -1); - - if ($this->iIcon !== null) { - switch ($this->iHorAlign) { - case 'left': - $x = $aX+$this->iMarginLeft; - $hanchor='left'; - break; - case 'center': - case 'middle': - $x = $aX+$this->iMarginLeft+round(($aWidth-$this->iMarginLeft-$this->iMarginRight)/2); - $hanchor='center'; - break; - case 'right': - $x = $aX+$aWidth-$this->iMarginRight-1; - $hanchor='right'; - break; - default: - JpGraphError::RaiseL(27012, $this->iHorAlign); - } - - switch ($this->iVertAlign) { - case 'top': - $y = $aY+$this->iMarginTop; - $vanchor='top'; - break; - case 'center': - case 'middle': - $y = $aY+$this->iMarginTop+round(($aHeight-$this->iMarginTop-$this->iMarginBottom)/2); - $vanchor='center'; - break; - case 'bottom': - $y = $aY+$aHeight-1-$this->iMarginBottom; - $vanchor='bottom'; - break; - default: - JpGraphError::RaiseL(27012, $this->iVertAlign); - } - $this->iIcon->SetAnchor($hanchor, $vanchor); - $this->iIcon->_Stroke($aImg, $x, $y); - } - $this->iVal->SetColor($this->iFontColor); - $this->iVal->SetFont($this->iFF, $this->iFS, $this->iFSize); - switch ($this->iHorAlign) { - case 'left': - $x = $aX+$this->iMarginLeft; - break; - case 'center': - case 'middle': - $x = $aX+$this->iMarginLeft+round(($aWidth-$this->iMarginLeft-$this->iMarginRight)/2); - break; - case 'right': - $x = $aX+$aWidth-$this->iMarginRight-1; - break; - default: - JpGraphError::RaiseL(27012, $this->iHorAlign); - } - // A workaround for the shortcomings in the TTF font handling in GD - // The anchor position for rotated text (=90) is to "short" so we add - // an offset based on the actual font size - if ($this->iVal->dir != 0 && $this->iVal->font_family >= 10) { - $aY += 4 + round($this->iVal->font_size*0.8); - } - switch ($this->iVertAlign) { - case 'top': - $y = $aY+$this->iMarginTop; - break; - case 'center': - case 'middle': - $y = $aY+$this->iMarginTop+round(($aHeight-$this->iMarginTop-$this->iMarginBottom)/2); - //$y -= round($this->iVal->GetFontHeight($aImg)/2); - $y -= round($this->iVal->GetHeight($aImg)/2); - break; - case 'bottom': - //$y = $aY+$aHeight-1-$this->iMarginBottom-$this->iVal->GetFontHeight($aImg); - $y = $aY+$aHeight-$this->iMarginBottom-$this->iVal->GetHeight($aImg); - break; - default: - JpGraphError::RaiseL(27012, $this->iVertAlign); - } - $this->iVal->SetAlign($this->iHorAlign, 'top'); - if ($this->iNumberFormat !== null && is_numeric($this->iVal->t)) { - $this->iVal->t = sprintf($this->iNumberFormat, $this->iVal->t); - } - $this->iVal->Stroke($aImg, $x, $y); - } -} - -//--------------------------------------------------------------------- -// CLASS GTextTable -// Description: -// Graphic text table -//--------------------------------------------------------------------- -class GTextTable -{ - public $iCells = array(); - public $iSize=array(0,0); // Need to be public since they are used by the cell - private $iWidth=0; - private $iHeight=0; - private $iColWidth=null; - private $iRowHeight=null; - private $iImg=null; - private $iXPos=0; - private $iYPos=0; - private $iScaleXPos=null; - private $iScaleYPos=null; - private $iBGColor=''; - private $iBorderColor='black'; - private $iBorderWeight=1; - private $iInit=false; - private $iYAnchor='top'; - private $iXAnchor='left'; - /*----------------------------------------------------------------- - * First and second phase constructors - *----------------------------------------------------------------- - */ - public function __construct() - { - // Empty - } - - public function Init($aRows=0, $aCols=0, $aFillText='') - { - $this->iSize[0] = $aRows; - $this->iSize[1] = $aCols; - for ($i=0; $i < $this->iSize[0]; ++$i) { - for ($j=0; $j < $this->iSize[1]; ++$j) { - $this->iCells[$i][$j] = new GTextTableCell($aFillText, $i, $j); - $this->iCells[$i][$j]->Init($this); - } - } - $this->iInit=true; - } - - /*----------------------------------------------------------------- - * Outer border of table - *----------------------------------------------------------------- - */ - public function SetBorder($aWeight=1, $aColor='black') - { - $this->iBorderColor=$aColor; - $this->iBorderWeight = $aWeight; - } - - - /*----------------------------------------------------------------- - * Position in graph of table - *----------------------------------------------------------------- - */ - public function SetPos($aX, $aY) - { - $this->iXPos = $aX; - $this->iYPos = $aY; - } - - public function SetScalePos($aX, $aY) - { - $this->iScaleXPos = $aX; - $this->iScaleYPos = $aY; - } - - public function SetAnchorPos($aXAnchor, $aYAnchor='top') - { - $this->iXAnchor = $aXAnchor; - $this->iYAnchor = $aYAnchor; - } - - /*----------------------------------------------------------------- - * Setup country flag in a cell - *----------------------------------------------------------------- - */ - public function SetCellCountryFlag($aRow, $aCol, $aFlag, $aScale=1.0, $aMix=100, $aStdSize=3) - { - $this->_chkR($aRow); - $this->_chkC($aCol); - $this->iCells[$aRow][$aCol]->SetCountryFlag($aFlag, $aScale, $aMix, $aStdSize); - } - - /*----------------------------------------------------------------- - * Setup image in a cell - *----------------------------------------------------------------- - */ - public function SetCellImage($aRow, $aCol, $aFile, $aScale=1.0, $aMix=100) - { - $this->_chkR($aRow); - $this->_chkC($aCol); - $this->iCells[$aRow][$aCol]->SetImage($aFile, $aScale, $aMix); - } - - public function SetRowImage($aRow, $aFile, $aScale=1.0, $aMix=100) - { - $this->_chkR($aRow); - for ($j=0; $j < $this->iSize[1]; ++$j) { - $this->iCells[$aRow][$j]->SetImage($aFile, $aScale, $aMix); - } - } - - public function SetColImage($aCol, $aFile, $aScale=1.0, $aMix=100) - { - $this->_chkC($aCol); - for ($j=0; $j < $this->iSize[0]; ++$j) { - $this->iCells[$j][$aCol]->SetImage($aFile, $aScale, $aMix); - } - } - - public function SetImage($aFileR1, $aScaleC1=null, $aMixR2=null, $aC2=null, $aFile=null, $aScale=1.0, $aMix=100) - { - if ($aScaleC1 !== null && $aMixR2!==null && $aC2!==null && $aFile!==null) { - $this->_chkR($aArgR1); - $this->_chkC($aC1); - $this->_chkR($aR2); - $this->_chkC($aC2); - } else { - if ($aScaleC1 !== null) { - $aScale = $aScaleC1; - } - if ($aMixR2 !== null) { - $aMix = $aMixR2; - } - $aFile = $aFileR1; - $aMixR2 = $this->iSize[0]-1; - $aFileR1 = 0; - $aC2 = $this->iSize[1]-1; - $aScaleC1 = 0; - } - for ($i=$aArgR1; $i <= $aR2; ++$i) { - for ($j=$aC1; $j <= $aC2; ++$j) { - $this->iCells[$i][$j]->SetImage($aFile, $aScale, $aMix); - } - } - } - - public function SetCellImageConstrain($aRow, $aCol, $aType, $aVal) - { - $this->_chkR($aRow); - $this->_chkC($aCol); - $this->iCells[$aRow][$aCol]->SetImageConstrain($aType, $aVal); - } - - /*----------------------------------------------------------------- - * Generate a HTML version of the table - *----------------------------------------------------------------- - */ - public function toString() - { - $t = '
'; - if ($this->iCells[$i][$j]->iMerged) { - $t .= 'M '; - } - $t .= 'val='.$this->iCells[$i][$j]->iVal->t; - $t .= ' (cs='.$this->iCells[$i][$j]->iColSpan. - ', rs='.$this->iCells[$i][$j]->iRowSpan.')'; - $t .= ' | '; - } - $t .= '
JpGraph Fehler:
-HTTP header wurden bereits gesendet. Fehler in der Datei %s in der Zeile %d. |
Erklärung: HTTP header wurden bereits zum Browser gesendet, wobei die Daten als Text gekennzeichnet wurden, bevor die Bibliothek die Chance hatte, seinen Bild-HTTP-Header zum Browser zu schicken. Dies verhindert, dass die Bibliothek Bilddaten zum Browser schicken kann (weil sie vom Browser als Text interpretiert würden und daher nur Mist dargestellt würde). Wahrscheinlich steht Text im Skript bevor Graph::Stroke() aufgerufen wird. Wenn dieser Text zum Browser gesendet wird, nimmt dieser an, dass die gesamten Daten aus Text bestehen. Such nach irgendwelchem Text, auch nach Leerzeichen und Zeilenumbrüchen, die eventuell bereits zum Browser gesendet wurden. Zum Beispiel ist ein oft auftretender Fehler, eine Leerzeile am Anfang der Datei oder vor Graph::Stroke() zu lassen."<?php". |
Wahrscheinlich steht Text im Skript bevor Graph::Stroke() aufgerufen wird. Wenn dieser Text zum Browser gesendet wird, nimmt dieser an, dass die gesamten Daten aus Text bestehen. Such nach irgendwelchem Text, auch nach Leerzeichen und Zeilenumbrchen, die eventuell bereits zum Browser gesendet wurden.
Zum Beispiel ist ein oft auftretender Fehler, eine Leerzeile am Anfang der Datei oder vor Graph::Stroke() zu lassen."<?php".
JpGraph Error:
+10 => array('
Caused by output from file %s at 2012 => array('One of the objects submitted to AccBar is not a BarPlot. Make sure that you create the AccBar plot from an array of BarPlot objects. (Class=%s)',1), 2013 => array('You have specified an empty array for shadow colors in the bar plot.',0), 2014 => array('Number of datapoints for each data set in accbarplot must be the same',0), -2015 => array('Individual bar plots in an AccBarPlot or GroupBarPlot can not have specified X-coordinates',0), /* @@ -102,7 +101,6 @@ HTTP headers have already been sent. Caused by output from file %s at 6030 => array('Unknown arrow direction for link.',0), 6031 => array('Unknown arrow type for link.',0), 6032 => array('Internal error: Unknown path type (=%d) specified for link.',1), -6033 => array('Array of fonts must contain arrays with 3 elements, i.e. (Family, Style, Size)',0), /* ** jpgraph_gradient @@ -187,7 +185,6 @@ HTTP headers have already been sent. Caused by output from file %s at 15009 => array('Illegal pie plot. Sum of all data is zero for Pie Plot',0), 15010 => array('Sum of all data is 0 for Pie.',0), 15011 => array('In order to use image transformation you must include the file jpgraph_imgtrans.php in your script.',0), -15012 => array('PiePlot::SetTheme() is no longer supported. Use PieGraph::SetTheme()',0), /* ** jpgraph_plotband @@ -258,7 +255,6 @@ HTTP headers have already been sent. Caused by output from file %s at 24001 => array('FuncGenerator : No function specified. ',0), 24002 => array('FuncGenerator : Syntax error in function specification ',0), 24003 => array('DateScaleUtils: Unknown tick type specified in call to GetTicks()',0), -24004 => array('ReadCSV2: Column count mismatch in %s line %d',2), /* ** jpgraph */ @@ -402,17 +398,7 @@ HTTP headers have already been sent. Caused by output from file %s at 25127 => array('The library has been configured for automatic encoding conversion of Japanese fonts. This requires that PHP has the mb_convert_encoding() function. Your PHP installation lacks this function (PHP needs the "--enable-mbstring" when compiled).',0), 25128 => array('The function imageantialias() is not available in your PHP installation. Use the GD version that comes with PHP and not the standalone version.',0), 25129 => array('Anti-alias can not be used with dashed lines. Please disable anti-alias or use solid lines.',0), -25130 => array('Too small plot area. (%d x %d). With the given image size and margins there is to little space left for the plot. Increase the plot size or reduce the margins.',2), -25131 => array('StrokeBoxedText2() only supports TTF fonts and not built-in bitmap fonts.',0), -25132 => array('Undefined property %s.',1), -25133 => array('Use Graph::SetTheme() after Graph::SetScale().',0), - -/* -** jpgraph_led -*/ - -25500 => array('Multibyte strings must be enabled in the PHP installation in order to run the LED module so that the function mb_strlen() is available. See PHP documentation for more information.',0), /* **--------------------------------------------------------------------------------------------- @@ -490,7 +476,7 @@ HTTP headers have already been sent. Caused by output from file %s at /* ** PDF417 */ -26000 => array('PDF417: The PDF417 module requires that the PHP installation must support the function bcmod(). This is normally enabled at compile time. See documentation for more information.',0), + 26001 => array('PDF417: Number of Columns must be >= 1 and <= 30',0), 26002 => array('PDF417: Error level must be between 0 and 8',0), 26003 => array('PDF417: Invalid format for input data to encode with PDF417',0), @@ -508,36 +494,5 @@ HTTP headers have already been sent. Caused by output from file %s at 26015 => array('PDF417: Internal error. State transition table entry 0 is NULL. Entry 1 = (%s)',1), 26016 => array('PDF417: Internal error: Unrecognized state transition mode in decode.',0), -/* -** jpgraph_contour -*/ - -28001 => array('Third argument to Contour must be an array of colors.',0), -28002 => array('Number of colors must equal the number of isobar lines specified',0), -28003 => array('ContourPlot Internal Error: isobarHCrossing: Coloumn index too large (%d)',1), -28004 => array('ContourPlot Internal Error: isobarHCrossing: Row index too large (%d)',1), -28005 => array('ContourPlot Internal Error: isobarVCrossing: Row index too large (%d)',1), -28006 => array('ContourPlot Internal Error: isobarVCrossing: Col index too large (%d)',1), -28007 => array('ContourPlot interpolation factor is too large (>5)',0), - -/* - * jpgraph_matrix and colormap -*/ -29201 => array('Min range value must be less or equal to max range value for colormaps',0), -29202 => array('The distance between min and max value is too small for numerical precision',0), -29203 => array('Number of color quantification level must be at least %d',1), -29204 => array('Number of colors (%d) is invalid for this colormap. It must be a number that can be written as: %d + k*%d',3), -29205 => array('Colormap specification out of range. Must be an integer in range [0,%d]',1), -29206 => array('Invalid object added to MatrixGraph',0), -29207 => array('Empty input data specified for MatrixPlot',0), -29208 => array('Unknown side specifiction for matrix labels "%s"',1), -29209 => array('CSIM Target matrix must be the same size as the data matrix (csim=%d x %d, data=%d x %d)',4), -29210 => array('CSIM Target for matrix labels does not match the number of labels (csim=%d, labels=%d)',2), - - -/* -* jpgraph_theme -*/ -30001 => array("Theme::%s() is not defined. \nPlease make %s(\$graph) function in your theme classs.",2), ); diff --git a/onyx2/include/jpgraph/lang/prod.inc.php b/onyx2/include/jpgraph/lang/prod.inc.php index ab7ea87..f7d4569 100644 --- a/onyx2/include/jpgraph/lang/prod.inc.php +++ b/onyx2/include/jpgraph/lang/prod.inc.php @@ -4,9 +4,9 @@ // Description: Special localization file with the same error messages // for all errors. // Created: 2006-02-18 -// Ver: $Id: prod.inc.php 1886 2009-10-01 23:30:16Z ljp $ +// Ver: $Id: prod.inc.php 993 2008-03-30 21:17:41Z ljp $ // -// Copyright (c) Asial Corporation. All rights reserved. +// Copyright (c) Aditus Consulting. All rights reserved. //======================================================================== */ @@ -19,7 +19,7 @@ $_jpg_messages = array( /* ** Headers already sent error. This is formatted as HTML different since this will be sent back directly as text */ -10 => array('
- Liste des planètes existantes-
Infos{if $smarty.const.SURFACE == "planete"}{php}dDonnees::nameVilles($this->_tpl_vars['planete']->batiments[17]){/php}-Diamètre: {$diametre|separerNombres} km ({$planete->casesRest} case{if $planete->casesRest > 1}s{/if} disponible{if $planete->casesRest > 1}s{/if} sur {$planete->cases})+Diamètre: {$diametre|separerNombres} km ({$planete->casesRest} case{if $planete->casesRest > 1}s{/if} disponible{if $planete->casesRest > 1}s{/if} sur {php}dDonnees::capaciteVilles($this->_tpl_vars['planete']){/php}){/if}Race : {$planete->race}position: {$planete->galaxie}.{$planete->ss}.{$planete->position}@@ -111,4 +111,4 @@Infos de l'alliance{$planete->details.texte_interne} {/if} -{include file='game/footer.tpl'} +{include file='game/footer.tpl'} \ No newline at end of file diff --git a/onyx2/tpl/game/flotte1.tpl b/onyx2/tpl/game/flotte1.tpl index b161ca0..c1b685c 100644 --- a/onyx2/tpl/game/flotte1.tpl +++ b/onyx2/tpl/game/flotte1.tpl @@ -8,7 +8,7 @@ {if $flottesEC} {foreach from=$flottesEC item=flotteEC} | |||||||||||||
{$flotteEC->nom|escape} | +{$flotteEC->nom|escape} | {$flotteEC->txtMission($flotteEC->mission)} | {$flotteEC->nb_vais} | {if $flotteEC->end_type == "2"}{$flotteEC->end_planete->nom_alliance} [{$flotteEC->end_planete->galaxie}:{$flotteEC->end_planete->ss}:A]{elseif $flotteEC->end_type == "1"}[{$flotteEC->end_planete}]{elseif $flotteEC->end_type == "3"}[{$flotteEC->end_planete}:A]{else}{$flotteEC->end_planete->nom_planete} [{$flotteEC->end_planete->galaxie}:{$flotteEC->end_planete->ss}:{$flotteEC->end_planete->position}]{/if} | @@ -69,4 +69,4 @@