summaryrefslogtreecommitdiffstats
path: root/admin/exportclases
diff options
context:
space:
mode:
Diffstat (limited to 'admin/exportclases')
-rw-r--r--admin/exportclases/PHPPowerPoint.php283
-rw-r--r--admin/exportclases/PHPPowerPoint/DocumentProperties.php299
-rw-r--r--admin/exportclases/PHPPowerPoint/HashTable.php220
-rw-r--r--admin/exportclases/PHPPowerPoint/IComparable.php62
-rw-r--r--admin/exportclases/PHPPowerPoint/IOFactory.php187
-rw-r--r--admin/exportclases/PHPPowerPoint/Reader/IReader.php53
-rw-r--r--admin/exportclases/PHPPowerPoint/Reader/Serialized.php125
-rw-r--r--admin/exportclases/PHPPowerPoint/Shape.php358
-rw-r--r--admin/exportclases/PHPPowerPoint/Shape/BaseDrawing.php272
-rw-r--r--admin/exportclases/PHPPowerPoint/Shape/Drawing.php185
-rw-r--r--admin/exportclases/PHPPowerPoint/Shape/MemoryDrawing.php235
-rw-r--r--admin/exportclases/PHPPowerPoint/Shape/RichText.php264
-rw-r--r--admin/exportclases/PHPPowerPoint/Shape/RichText/Break.php88
-rw-r--r--admin/exportclases/PHPPowerPoint/Shape/RichText/ITextElement.php67
-rw-r--r--admin/exportclases/PHPPowerPoint/Shape/RichText/Run.php110
-rw-r--r--admin/exportclases/PHPPowerPoint/Shape/RichText/TextElement.php113
-rw-r--r--admin/exportclases/PHPPowerPoint/Shape/Shadow.php314
-rw-r--r--admin/exportclases/PHPPowerPoint/Shared/Drawing.php109
-rw-r--r--admin/exportclases/PHPPowerPoint/Shared/File.php98
-rw-r--r--admin/exportclases/PHPPowerPoint/Shared/Font.php67
-rw-r--r--admin/exportclases/PHPPowerPoint/Shared/String.php270
-rw-r--r--admin/exportclases/PHPPowerPoint/Shared/XMLWriter.php141
-rw-r--r--admin/exportclases/PHPPowerPoint/Shared/ZipStreamWrapper.php182
-rw-r--r--admin/exportclases/PHPPowerPoint/Slide.php261
-rw-r--r--admin/exportclases/PHPPowerPoint/Slide/Layout.php50
-rw-r--r--admin/exportclases/PHPPowerPoint/SlideIterator.php118
-rw-r--r--admin/exportclases/PHPPowerPoint/Style/Alignment.php243
-rw-r--r--admin/exportclases/PHPPowerPoint/Style/Color.php170
-rw-r--r--admin/exportclases/PHPPowerPoint/Style/Fill.php245
-rw-r--r--admin/exportclases/PHPPowerPoint/Style/Font.php411
-rw-r--r--admin/exportclases/PHPPowerPoint/Style/_notused_Border.php331
-rw-r--r--admin/exportclases/PHPPowerPoint/Style/_notused_Borders.php577
-rw-r--r--admin/exportclases/PHPPowerPoint/Writer/IWriter.php45
-rw-r--r--admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007.php411
-rw-r--r--admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007/ContentTypes.php219
-rw-r--r--admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007/DocProps.php218
-rw-r--r--admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007/Drawing.php94
-rw-r--r--admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007/LayoutPack.php124
-rw-r--r--admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007/LayoutPack/Default.php2983
-rw-r--r--admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007/Presentation.php151
-rw-r--r--admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007/Rels.php347
-rw-r--r--admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007/Slide.php520
-rw-r--r--admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007/Theme.php1215
-rw-r--r--admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007/WriterPart.php72
-rw-r--r--admin/exportclases/PHPPowerPoint/Writer/Serialized.php187
-rw-r--r--admin/exportclases/class.enka.pdf.php476
-rw-r--r--admin/exportclases/class.enka.rtf.php936
-rw-r--r--admin/exportclases/class.imageIzvozHeatmap.php103
-rw-r--r--admin/exportclases/class.pdfIzvoz.php2639
-rw-r--r--admin/exportclases/class.pdfIzvozAnalizaBreak.php1396
-rw-r--r--admin/exportclases/class.pdfIzvozAnalizaCReport.php1640
-rw-r--r--admin/exportclases/class.pdfIzvozAnalizaCharts.php547
-rw-r--r--admin/exportclases/class.pdfIzvozAnalizaCrosstab.php749
-rw-r--r--admin/exportclases/class.pdfIzvozAnalizaFrekvenca.php540
-rw-r--r--admin/exportclases/class.pdfIzvozAnalizaFunctions.php3309
-rw-r--r--admin/exportclases/class.pdfIzvozAnalizaMean.php451
-rw-r--r--admin/exportclases/class.pdfIzvozAnalizaMultiCrosstab.php1355
-rw-r--r--admin/exportclases/class.pdfIzvozAnalizaOpisne.php532
-rw-r--r--admin/exportclases/class.pdfIzvozAnalizaSums.php2169
-rw-r--r--admin/exportclases/class.pdfIzvozAnalizaTTest.php404
-rw-r--r--admin/exportclases/class.pdfIzvozEditsAnalysis.php1064
-rw-r--r--admin/exportclases/class.pdfIzvozHeatmapImage.php451
-rw-r--r--admin/exportclases/class.pdfIzvozList.php514
-rw-r--r--admin/exportclases/class.pdfIzvozResults.php3822
-rw-r--r--admin/exportclases/class.pdfIzvozStatus.php1052
-rw-r--r--admin/exportclases/class.pptIzvozAnalizaCharts.php1060
-rw-r--r--admin/exportclases/class.pptIzvozHeatmapImage.php1008
-rw-r--r--admin/exportclases/class.rtf.php430
-rw-r--r--admin/exportclases/class.rtfIzvoz.php2106
-rw-r--r--admin/exportclases/class.rtfIzvozAnalizaBreak.php1552
-rw-r--r--admin/exportclases/class.rtfIzvozAnalizaCReport.php1616
-rw-r--r--admin/exportclases/class.rtfIzvozAnalizaCharts.php494
-rw-r--r--admin/exportclases/class.rtfIzvozAnalizaCrosstab.php867
-rw-r--r--admin/exportclases/class.rtfIzvozAnalizaFrekvenca.php541
-rw-r--r--admin/exportclases/class.rtfIzvozAnalizaFunctions.php4193
-rw-r--r--admin/exportclases/class.rtfIzvozAnalizaMean.php407
-rw-r--r--admin/exportclases/class.rtfIzvozAnalizaMultiCrosstab.php1316
-rw-r--r--admin/exportclases/class.rtfIzvozAnalizaOpisne.php495
-rw-r--r--admin/exportclases/class.rtfIzvozAnalizaSums.php2532
-rw-r--r--admin/exportclases/class.rtfIzvozAnalizaTTest.php395
-rw-r--r--admin/exportclases/class.rtfIzvozHeatmapImage.php371
-rw-r--r--admin/exportclases/class.rtfIzvozList.php568
-rw-r--r--admin/exportclases/class.rtfIzvozResults.php2824
-rw-r--r--admin/exportclases/class.tcpdf.php13321
-rw-r--r--admin/exportclases/class.xls.php35
-rw-r--r--admin/exportclases/class.xlsIzvozAnalizaBreak.php1189
-rw-r--r--admin/exportclases/class.xlsIzvozAnalizaCrosstab.php666
-rw-r--r--admin/exportclases/class.xlsIzvozAnalizaFrekvenca.php688
-rw-r--r--admin/exportclases/class.xlsIzvozAnalizaMean.php294
-rw-r--r--admin/exportclases/class.xlsIzvozAnalizaMultiCrosstab.php1173
-rw-r--r--admin/exportclases/class.xlsIzvozAnalizaStatistics.php394
-rw-r--r--admin/exportclases/class.xlsIzvozAnalizaSums.php2319
-rw-r--r--admin/exportclases/class.xlsIzvozAnalizaTTest.php286
-rw-r--r--admin/exportclases/class.xlsIzvozList.php373
-rw-r--r--admin/exportclases/class.xlsIzvozSpeeder.php187
-rw-r--r--admin/exportclases/class.xlsIzvozTextAnalysis.php264
-rw-r--r--admin/exportclases/class.xlsIzvozUsable.php322
-rw-r--r--admin/exportclases/config/lang/eng.php50
-rw-r--r--admin/exportclases/config/tcpdf_config.php167
-rw-r--r--admin/exportclases/fonts/arial1250.php25
-rw-r--r--admin/exportclases/fonts/arialbd1250.php25
-rw-r--r--admin/exportclases/fonts/arialbi1250.php25
-rw-r--r--admin/exportclases/fonts/ariali1250.php25
-rw-r--r--admin/exportclases/fonts/arialunicid0.php1768
-rw-r--r--admin/exportclases/fonts/courier.php33
-rw-r--r--admin/exportclases/fonts/freemono.php285
-rw-r--r--admin/exportclases/fonts/freemonob.php170
-rw-r--r--admin/exportclases/fonts/freemonobi.php115
-rw-r--r--admin/exportclases/fonts/freemonoi.php193
-rw-r--r--admin/exportclases/fonts/freesans.ctg.zbin0 -> 5922 bytes
-rw-r--r--admin/exportclases/fonts/freesans.php312
-rw-r--r--admin/exportclases/fonts/freesans.zbin0 -> 477760 bytes
-rw-r--r--admin/exportclases/fonts/freesansb.ctg.zbin0 -> 3613 bytes
-rw-r--r--admin/exportclases/fonts/freesansb.php194
-rw-r--r--admin/exportclases/fonts/freesansb.zbin0 -> 84806 bytes
-rw-r--r--admin/exportclases/fonts/freesansbi.ctg.zbin0 -> 2750 bytes
-rw-r--r--admin/exportclases/fonts/freesansbi.php152
-rw-r--r--admin/exportclases/fonts/freesansbi.zbin0 -> 64813 bytes
-rw-r--r--admin/exportclases/fonts/freesansi.ctg.zbin0 -> 3012 bytes
-rw-r--r--admin/exportclases/fonts/freesansi.php166
-rw-r--r--admin/exportclases/fonts/freesansi.zbin0 -> 144971 bytes
-rw-r--r--admin/exportclases/fonts/freeserif.ctg.zbin0 -> 8178 bytes
-rw-r--r--admin/exportclases/fonts/freeserif.php427
-rw-r--r--admin/exportclases/fonts/freeserif.zbin0 -> 1031592 bytes
-rw-r--r--admin/exportclases/fonts/freeserifb.ctg.zbin0 -> 4692 bytes
-rw-r--r--admin/exportclases/fonts/freeserifb.php254
-rw-r--r--admin/exportclases/fonts/freeserifb.zbin0 -> 222822 bytes
-rw-r--r--admin/exportclases/fonts/freeserifbi.ctg.zbin0 -> 3290 bytes
-rw-r--r--admin/exportclases/fonts/freeserifbi.php182
-rw-r--r--admin/exportclases/fonts/freeserifbi.zbin0 -> 141109 bytes
-rw-r--r--admin/exportclases/fonts/freeserifi.ctg.zbin0 -> 3607 bytes
-rw-r--r--admin/exportclases/fonts/freeserifi.php196
-rw-r--r--admin/exportclases/fonts/freeserifi.zbin0 -> 318049 bytes
-rw-r--r--admin/exportclases/fonts/helvetica.php33
-rw-r--r--admin/exportclases/fonts/helveticab.php33
-rw-r--r--admin/exportclases/fonts/helveticabi.php33
-rw-r--r--admin/exportclases/fonts/helveticai.php33
-rw-r--r--admin/exportclases/fonts/symbol.php32
-rw-r--r--admin/exportclases/fonts/times.php33
-rw-r--r--admin/exportclases/fonts/timesb.php33
-rw-r--r--admin/exportclases/fonts/timesbi.php33
-rw-r--r--admin/exportclases/fonts/timesi.php33
-rw-r--r--admin/exportclases/fonts/uni2cid_ac15.php23613
-rw-r--r--admin/exportclases/fonts/uni2cid_ag15.php30222
-rw-r--r--admin/exportclases/fonts/uni2cid_aj16.php15705
-rw-r--r--admin/exportclases/fonts/uni2cid_ak12.php17530
-rw-r--r--admin/exportclases/fonts/zapfdingbats.php32
-rw-r--r--admin/exportclases/htmlcolors.php208
-rw-r--r--admin/exportclases/sumniktest.php16
-rw-r--r--admin/exportclases/unicode_data.php18360
150 files changed, 192275 insertions, 0 deletions
diff --git a/admin/exportclases/PHPPowerPoint.php b/admin/exportclases/PHPPowerPoint.php
new file mode 100644
index 0000000..486a5a6
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint.php
@@ -0,0 +1,283 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * Copyright (c) 2009 - 2010 PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/** PHPPowerPoint_Slide */
+require_once 'PHPPowerPoint/Slide.php';
+
+/** PHPPowerPoint_DocumentProperties */
+require_once 'PHPPowerPoint/DocumentProperties.php';
+
+/** PHPPowerPoint_Shared_ZipStreamWrapper */
+require_once 'PHPPowerPoint/Shared/ZipStreamWrapper.php';
+
+/** PHPPowerPoint_SlideIterator */
+require_once 'PHPPowerPoint/SlideIterator.php';
+
+
+/**
+ * PHPPowerPoint
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+class PHPPowerPoint
+{
+ /**
+ * Document properties
+ *
+ * @var PHPPowerPoint_DocumentProperties
+ */
+ private $_properties;
+
+ /**
+ * Collection of Slide objects
+ *
+ * @var PHPPowerPoint_Slide[]
+ */
+ private $_slideCollection = array();
+
+ /**
+ * Active slide index
+ *
+ * @var int
+ */
+ private $_activeSlideIndex = 0;
+
+ /**
+ * Create a new PHPPowerPoint with one Slide
+ */
+ public function __construct()
+ {
+ // Initialise slide collection and add one slide
+ $this->_slideCollection = array();
+ $this->_slideCollection[] = new PHPPowerPoint_Slide($this);
+ $this->_activeSlideIndex = 0;
+
+ // Create document properties
+ $this->_properties = new PHPPowerPoint_DocumentProperties();
+ }
+
+ /**
+ * Get properties
+ *
+ * @return PHPPowerPoint_DocumentProperties
+ */
+ public function getProperties()
+ {
+ return $this->_properties;
+ }
+
+ /**
+ * Set properties
+ *
+ * @param PHPPowerPoint_DocumentProperties $value
+ */
+ public function setProperties(PHPPowerPoint_DocumentProperties $value)
+ {
+ $this->_properties = $value;
+ }
+
+ /**
+ * Get active slide
+ *
+ * @return PHPPowerPoint_Slide
+ */
+ public function getActiveSlide()
+ {
+ return $this->_slideCollection[$this->_activeSlideIndex];
+ }
+
+ /**
+ * Create slide and add it to this presentation
+ *
+ * @return PHPPowerPoint_Slide
+ */
+ public function createSlide()
+ {
+ $newSlide = new PHPPowerPoint_Slide($this);
+
+ $this->addSlide($newSlide);
+
+ return $newSlide;
+ }
+
+ /**
+ * Add slide
+ *
+ * @param PHPPowerPoint_Slide $slide
+ * @throws Exception
+ */
+ public function addSlide(PHPPowerPoint_Slide $slide = null)
+ {
+ $this->_slideCollection[] = $slide;
+ }
+
+ /**
+ * Remove slide by index
+ *
+ * @param int $index Slide index
+ * @throws Exception
+ */
+ public function removeSlideByIndex($index = 0)
+ {
+ if ($index > count($this->_slideCollection) - 1) {
+ throw new Exception("Slide index is out of bounds.");
+ } else {
+ array_splice($this->_slideCollection, $index, 1);
+ }
+ }
+
+ /**
+ * Get slide by index
+ *
+ * @param int $index Slide index
+ * @return PHPPowerPoint_Slide
+ * @throws Exception
+ */
+ public function getSlide($index = 0)
+ {
+ if ($index > count($this->_slideCollection) - 1) {
+ throw new Exception("Slide index is out of bounds.");
+ } else {
+ return $this->_slideCollection[$index];
+ }
+ }
+
+ /**
+ * Get all slides
+ *
+ * @return PHPPowerPoint_Slide[]
+ */
+ public function getAllSlides()
+ {
+ return $this->_slideCollection;
+ }
+
+ /**
+ * Get index for slide
+ *
+ * @param PHPPowerPoint_Slide $slide
+ * @return Slide index
+ * @throws Exception
+ */
+ public function getIndex(PHPPowerPoint_Slide $slide)
+ {
+ foreach ($this->_slideCollection as $key => $value) {
+ if ($value->getHashCode() == $slide->getHashCode()) {
+ return $key;
+ }
+ }
+ }
+
+ /**
+ * Get slide count
+ *
+ * @return int
+ */
+ public function getSlideCount()
+ {
+ return count($this->_slideCollection);
+ }
+
+ /**
+ * Get active slide index
+ *
+ * @return int Active slide index
+ */
+ public function getActiveSlideIndex()
+ {
+ return $this->_activeSlideIndex;
+ }
+
+ /**
+ * Set active slide index
+ *
+ * @param int $index Active slide index
+ * @throws Exception
+ */
+ public function setActiveSlideIndex($index = 0)
+ {
+ if ($index > count($this->_slideCollection) - 1) {
+ throw new Exception("Active slide index is out of bounds.");
+ } else {
+ $this->_activeSlideIndex = $index;
+ }
+ }
+
+ /**
+ * Add external slide
+ *
+ * @param PHPPowerPoint_Slide $slide External slide to add
+ * @throws Exception
+ */
+ public function addExternalSheet(PHPPowerPoint_Slide $slide) {
+ $slide->rebindParent($this);
+ $this->addSheet($slide);
+ }
+
+ /**
+ * Get slide iterator
+ *
+ * @return PHPPowerPoint_SlideIterator
+ */
+ public function getSlideIterator() {
+ return new PHPPowerPoint_SlideIterator($this);
+ }
+
+ /**
+ * Copy presentation (!= clone!)
+ *
+ * @return PHPPowerPoint
+ */
+ public function copy() {
+ $copied = clone $this;
+
+ $slideCount = count($this->_slideCollection);
+ for ($i = 0; $i < $slideCount; ++$i) {
+ $this->_slideCollection[$i] = $this->_slideCollection[$i]->copy();
+ $this->_slideCollection[$i]->rebindParent($this);
+ }
+
+ return $copied;
+ }
+
+ /**
+ * Implement PHP __clone to create a deep clone, not just a shallow copy.
+ */
+ public function __clone() {
+ $vars = get_object_vars($this);
+ foreach ($vars as $key => $value) {
+ if (is_object($value)) {
+ $this->$key = clone $value;
+ } else {
+ $this->$key = $value;
+ }
+ }
+ }
+}
diff --git a/admin/exportclases/PHPPowerPoint/DocumentProperties.php b/admin/exportclases/PHPPowerPoint/DocumentProperties.php
new file mode 100644
index 0000000..78d7977
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/DocumentProperties.php
@@ -0,0 +1,299 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * Copyright (c) 2009 - 2010 PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/**
+ * PHPPowerPoint_DocumentProperties
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+class PHPPowerPoint_DocumentProperties
+{
+ /**
+ * Creator
+ *
+ * @var string
+ */
+ private $_creator;
+
+ /**
+ * LastModifiedBy
+ *
+ * @var string
+ */
+ private $_lastModifiedBy;
+
+ /**
+ * Created
+ *
+ * @var datetime
+ */
+ private $_created;
+
+ /**
+ * Modified
+ *
+ * @var datetime
+ */
+ private $_modified;
+
+ /**
+ * Title
+ *
+ * @var string
+ */
+ private $_title;
+
+ /**
+ * Description
+ *
+ * @var string
+ */
+ private $_description;
+
+ /**
+ * Subject
+ *
+ * @var string
+ */
+ private $_subject;
+
+ /**
+ * Keywords
+ *
+ * @var string
+ */
+ private $_keywords;
+
+ /**
+ * Category
+ *
+ * @var string
+ */
+ private $_category;
+
+ /**
+ * Create a new PHPPowerPoint_DocumentProperties
+ */
+ public function __construct()
+ {
+ // Initialise values
+ $this->_creator = 'Unknown Creator';
+ $this->_lastModifiedBy = $this->_creator;
+ $this->_created = time();
+ $this->_modified = time();
+ $this->_title = "Untitled Presentation";
+ $this->_subject = '';
+ $this->_description = '';
+ $this->_keywords = '';
+ $this->_category = '';
+ }
+
+ /**
+ * Get Creator
+ *
+ * @return string
+ */
+ public function getCreator() {
+ return $this->_creator;
+ }
+
+ /**
+ * Set Creator
+ *
+ * @param string $pValue
+ */
+ public function setCreator($pValue = '') {
+ $this->_creator = $pValue;
+ }
+
+ /**
+ * Get Last Modified By
+ *
+ * @return string
+ */
+ public function getLastModifiedBy() {
+ return $this->_lastModifiedBy;
+ }
+
+ /**
+ * Set Last Modified By
+ *
+ * @param string $pValue
+ */
+ public function setLastModifiedBy($pValue = '') {
+ $this->_lastModifiedBy = $pValue;
+ }
+
+ /**
+ * Get Created
+ *
+ * @return datetime
+ */
+ public function getCreated() {
+ return $this->_created;
+ }
+
+ /**
+ * Set Created
+ *
+ * @param datetime $pValue
+ */
+ public function setCreated($pValue = null) {
+ if (is_null($pValue)) {
+ $pValue = time();
+ }
+ $this->_created = $pValue;
+ }
+
+ /**
+ * Get Modified
+ *
+ * @return datetime
+ */
+ public function getModified() {
+ return $this->_modified;
+ }
+
+ /**
+ * Set Modified
+ *
+ * @param datetime $pValue
+ */
+ public function setModified($pValue = null) {
+ if (is_null($pValue)) {
+ $pValue = time();
+ }
+ $this->_modified = $pValue;
+ }
+
+ /**
+ * Get Title
+ *
+ * @return string
+ */
+ public function getTitle() {
+ return $this->_title;
+ }
+
+ /**
+ * Set Title
+ *
+ * @param string $pValue
+ */
+ public function setTitle($pValue = '') {
+ $this->_title = $pValue;
+ }
+
+ /**
+ * Get Description
+ *
+ * @return string
+ */
+ public function getDescription() {
+ return $this->_description;
+ }
+
+ /**
+ * Set Description
+ *
+ * @param string $pValue
+ */
+ public function setDescription($pValue = '') {
+ $this->_description = $pValue;
+ }
+
+ /**
+ * Get Subject
+ *
+ * @return string
+ */
+ public function getSubject() {
+ return $this->_subject;
+ }
+
+ /**
+ * Set Subject
+ *
+ * @param string $pValue
+ */
+ public function setSubject($pValue = '') {
+ $this->_subject = $pValue;
+ }
+
+ /**
+ * Get Keywords
+ *
+ * @return string
+ */
+ public function getKeywords() {
+ return $this->_keywords;
+ }
+
+ /**
+ * Set Keywords
+ *
+ * @param string $pValue
+ */
+ public function setKeywords($pValue = '') {
+ $this->_keywords = $pValue;
+ }
+
+ /**
+ * Get Category
+ *
+ * @return string
+ */
+ public function getCategory() {
+ return $this->_category;
+ }
+
+ /**
+ * Set Category
+ *
+ * @param string $pValue
+ */
+ public function setCategory($pValue = '') {
+ $this->_category = $pValue;
+ }
+
+ /**
+ * Implement PHP __clone to create a deep clone, not just a shallow copy.
+ */
+ public function __clone() {
+ $vars = get_object_vars($this);
+ foreach ($vars as $key => $value) {
+ if (is_object($value)) {
+ $this->$key = clone $value;
+ } else {
+ $this->$key = $value;
+ }
+ }
+ }
+}
diff --git a/admin/exportclases/PHPPowerPoint/HashTable.php b/admin/exportclases/PHPPowerPoint/HashTable.php
new file mode 100644
index 0000000..7eb1b27
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/HashTable.php
@@ -0,0 +1,220 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * Copyright (c) 2009 - 2010 PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/** PHPPowerPoint_IComparable */
+require_once 'PHPPowerPoint/IComparable.php';
+
+
+/**
+ * PHPPowerPoint_HashTable
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+class PHPPowerPoint_HashTable
+{
+ /**
+ * HashTable elements
+ *
+ * @var array
+ */
+ public $_items = array();
+
+ /**
+ * HashTable key map
+ *
+ * @var array
+ */
+ public $_keyMap = array();
+
+ /**
+ * Create a new PHPPowerPoint_HashTable
+ *
+ * @param PHPPowerPoint_IComparable[] $pSource Optional source array to create HashTable from
+ * @throws Exception
+ */
+ public function __construct($pSource = null)
+ {
+ if (!is_null($pSource)) {
+ // Create HashTable
+ $this->addFromSource($pSource);
+ }
+ }
+
+ /**
+ * Add HashTable items from source
+ *
+ * @param PHPPowerPoint_IComparable[] $pSource Source array to create HashTable from
+ * @throws Exception
+ */
+ public function addFromSource($pSource = null) {
+ // Check if an array was passed
+ if ($pSource == null) {
+ return;
+ } else if (!is_array($pSource)) {
+ throw new Exception('Invalid array parameter passed.');
+ }
+
+ foreach ($pSource as $item) {
+ $this->add($item);
+ }
+ }
+
+ /**
+ * Add HashTable item
+ *
+ * @param PHPPowerPoint_IComparable $pSource Item to add
+ * @throws Exception
+ */
+ public function add(PHPPowerPoint_IComparable $pSource = null) {
+ // Determine hashcode
+ $hashCode = null;
+ $hashIndex = $pSource->getHashIndex();
+ if ( is_null ( $hashIndex ) ) {
+ $hashCode = $pSource->getHashCode();
+ } else if ( isset ( $this->_keyMap[$hashIndex] ) ) {
+ $hashCode = $this->_keyMap[$hashIndex];
+ } else {
+ $hashCode = $pSource->getHashCode();
+ }
+
+ // Add value
+ if (!isset($this->_items[ $hashCode ])) {
+ $this->_items[ $hashCode ] = $pSource;
+ $index = count($this->_items) - 1;
+ $this->_keyMap[ $index ] = $hashCode;
+ $pSource->setHashIndex( $index );
+ } else {
+ $pSource->setHashIndex( $this->_items[ $hashCode ]->getHashIndex() );
+ }
+ }
+
+ /**
+ * Remove HashTable item
+ *
+ * @param PHPPowerPoint_IComparable $pSource Item to remove
+ * @throws Exception
+ */
+ public function remove(PHPPowerPoint_IComparable $pSource = null) {
+ if (isset($this->_items[ $pSource->getHashCode() ])) {
+ unset($this->_items[ $pSource->getHashCode() ]);
+
+ $deleteKey = -1;
+ foreach ($this->_keyMap as $key => $value) {
+ if ($deleteKey >= 0) {
+ $this->_keyMap[$key - 1] = $value;
+ }
+
+ if ($value == $pSource->getHashCode()) {
+ $deleteKey = $key;
+ }
+ }
+ unset($this->_keyMap[ count($this->_keyMap) - 1 ]);
+ }
+ }
+
+ /**
+ * Clear HashTable
+ *
+ */
+ public function clear() {
+ $this->_items = array();
+ $this->_keyMap = array();
+ }
+
+ /**
+ * Count
+ *
+ * @return int
+ */
+ public function count() {
+ return count($this->_items);
+ }
+
+ /**
+ * Get index for hash code
+ *
+ * @param string $pHashCode
+ * @return int Index
+ */
+ public function getIndexForHashCode($pHashCode = '') {
+ return array_search($pHashCode, $this->_keyMap);
+ }
+
+ /**
+ * Get by index
+ *
+ * @param int $pIndex
+ * @return PHPPowerPoint_IComparable
+ *
+ */
+ public function getByIndex($pIndex = 0) {
+ if (isset($this->_keyMap[$pIndex])) {
+ return $this->getByHashCode( $this->_keyMap[$pIndex] );
+ }
+
+ return null;
+ }
+
+ /**
+ * Get by hashcode
+ *
+ * @param string $pHashCode
+ * @return PHPPowerPoint_IComparable
+ *
+ */
+ public function getByHashCode($pHashCode = '') {
+ if (isset($this->_items[$pHashCode])) {
+ return $this->_items[$pHashCode];
+ }
+
+ return null;
+ }
+
+ /**
+ * HashTable to array
+ *
+ * @return PHPPowerPoint_IComparable[]
+ */
+ public function toArray() {
+ return $this->_items;
+ }
+
+ /**
+ * Implement PHP __clone to create a deep clone, not just a shallow copy.
+ */
+ public function __clone() {
+ $vars = get_object_vars($this);
+ foreach ($vars as $key => $value) {
+ if (is_object($value)) {
+ $this->$key = clone $value;
+ }
+ }
+ }
+}
diff --git a/admin/exportclases/PHPPowerPoint/IComparable.php b/admin/exportclases/PHPPowerPoint/IComparable.php
new file mode 100644
index 0000000..3870d55
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/IComparable.php
@@ -0,0 +1,62 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/**
+ * PHPPowerPoint_IComparable
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+interface PHPPowerPoint_IComparable
+{
+ /**
+ * Get hash code
+ *
+ * @return string Hash code
+ */
+ public function getHashCode();
+
+ /**
+ * Get hash index
+ *
+ * Note that this index may vary during script execution! Only reliable moment is
+ * while doing a write of a workbook and when changes are not allowed.
+ *
+ * @return string Hash index
+ */
+ public function getHashIndex();
+
+ /**
+ * Set hash index
+ *
+ * Note that this index may vary during script execution! Only reliable moment is
+ * while doing a write of a workbook and when changes are not allowed.
+ *
+ * @param string $value Hash index
+ */
+ public function setHashIndex($value);
+}
diff --git a/admin/exportclases/PHPPowerPoint/IOFactory.php b/admin/exportclases/PHPPowerPoint/IOFactory.php
new file mode 100644
index 0000000..b987b34
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/IOFactory.php
@@ -0,0 +1,187 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * Copyright (c) 2009 - 2010 PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/** PHPPowerPoint */
+require_once 'PHPPowerPoint.php';
+
+/** PHPPowerPoint_IWriter */
+require_once 'PHPPowerPoint/Writer/IWriter.php';
+
+/** PHPPowerPoint_IReader */
+require_once 'PHPPowerPoint/Reader/IReader.php';
+
+
+/**
+ * PHPPowerPoint_IOFactory
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+class PHPPowerPoint_IOFactory
+{
+ /**
+ * Search locations
+ *
+ * @var array
+ */
+ private static $_searchLocations = array(
+ array( 'type' => 'IWriter', 'path' => 'PHPPowerPoint/Writer/{0}.php', 'class' => 'PHPPowerPoint_Writer_{0}' ),
+ array( 'type' => 'IReader', 'path' => 'PHPPowerPoint/Reader/{0}.php', 'class' => 'PHPPowerPoint_Reader_{0}' )
+ );
+
+ /**
+ * Autoresolve classes
+ *
+ * @var array
+ */
+ private static $_autoResolveClasses = array(
+ 'Serialized'
+ );
+
+ /**
+ * Private constructor for PHPPowerPoint_IOFactory
+ */
+ private function __construct() { }
+
+ /**
+ * Get search locations
+ *
+ * @return array
+ */
+ public static function getSearchLocations() {
+ return self::$_searchLocations;
+ }
+
+ /**
+ * Set search locations
+ *
+ * @param array $value
+ * @throws Exception
+ */
+ public static function setSearchLocations($value) {
+ if (is_array($value)) {
+ self::$_searchLocations = $value;
+ } else {
+ throw new Exception('Invalid parameter passed.');
+ }
+ }
+
+ /**
+ * Add search location
+ *
+ * @param string $type Example: IWriter
+ * @param string $location Example: PHPPowerPoint/Writer/{0}.php
+ * @param string $classname Example: PHPPowerPoint_Writer_{0}
+ */
+ public static function addSearchLocation($type = '', $location = '', $classname = '') {
+ self::$_searchLocations[] = array( 'type' => $type, 'path' => $location, 'class' => $classname );
+ }
+
+ /**
+ * Create PHPPowerPoint_Writer_IWriter
+ *
+ * @param PHPPowerPoint $PHPPowerPoint
+ * @param string $writerType Example: PowerPoint2007
+ * @return PHPPowerPoint_Writer_IWriter
+ */
+ public static function createWriter(PHPPowerPoint $PHPPowerPoint, $writerType = '') {
+ // Search type
+ $searchType = 'IWriter';
+
+ // Include class
+ foreach (self::$_searchLocations as $searchLocation) {
+ if ($searchLocation['type'] == $searchType) {
+ $className = str_replace('{0}', $writerType, $searchLocation['class']);
+ $classFile = str_replace('{0}', $writerType, $searchLocation['path']);
+
+ if (!class_exists($className)) {
+ require_once($classFile);
+ }
+
+ $instance = new $className($PHPPowerPoint);
+ if (!is_null($instance)) {
+ return $instance;
+ }
+ }
+ }
+
+ // Nothing found...
+ throw new Exception("No $searchType found for type $writerType");
+ }
+
+ /**
+ * Create PHPPowerPoint_Reader_IReader
+ *
+ * @param string $readerType Example: PowerPoint2007
+ * @return PHPPowerPoint_Reader_IReader
+ */
+ public static function createReader($readerType = '') {
+ // Search type
+ $searchType = 'IReader';
+
+ // Include class
+ foreach (self::$_searchLocations as $searchLocation) {
+ if ($searchLocation['type'] == $searchType) {
+ $className = str_replace('{0}', $readerType, $searchLocation['class']);
+ $classFile = str_replace('{0}', $readerType, $searchLocation['path']);
+
+ if (!class_exists($className)) {
+ require_once($classFile);
+ }
+
+ $instance = new $className();
+ if (!is_null($instance)) {
+ return $instance;
+ }
+ }
+ }
+
+ // Nothing found...
+ throw new Exception("No $searchType found for type $readerType");
+ }
+
+ /**
+ * Loads PHPPowerPoint from file using automatic PHPPowerPoint_Reader_IReader resolution
+ *
+ * @param string $pFileName
+ * @return PHPPowerPoint
+ * @throws Exception
+ */
+ public static function load($pFilename) {
+ // Try loading using self::$_autoResolveClasses
+ foreach (self::$_autoResolveClasses as $autoResolveClass) {
+ $reader = self::createReader($autoResolveClass);
+ if ($reader->canRead($pFilename)) {
+ return $reader->load($pFilename);
+ }
+ }
+
+ throw new Exception("Could not automatically determine PHPPowerPoint_Reader_IReader for file.");
+ }
+}
diff --git a/admin/exportclases/PHPPowerPoint/Reader/IReader.php b/admin/exportclases/PHPPowerPoint/Reader/IReader.php
new file mode 100644
index 0000000..b6e7ae3
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/Reader/IReader.php
@@ -0,0 +1,53 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * Copyright (c) 2009 - 2010 PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Reader
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/**
+ * PHPPowerPoint_Reader_IReader
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Reader
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+interface PHPPowerPoint_Reader_IReader
+{
+ /**
+ * Can the current PHPPowerPoint_Reader_IReader read the file?
+ *
+ * @param string $pFileName
+ * @return boolean
+ */
+ public function canRead($pFilename);
+
+ /**
+ * Loads PHPPowerPoint from file
+ *
+ * @param string $pFileName
+ * @throws Exception
+ */
+ public function load($pFilename);
+}
diff --git a/admin/exportclases/PHPPowerPoint/Reader/Serialized.php b/admin/exportclases/PHPPowerPoint/Reader/Serialized.php
new file mode 100644
index 0000000..fc7eaa1
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/Reader/Serialized.php
@@ -0,0 +1,125 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * Copyright (c) 2009 - 2010 PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Reader
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/** PHPPowerPoint */
+require_once 'PHPPowerPoint.php';
+
+/** PHPPowerPoint_Reader_IReader */
+require_once 'PHPPowerPoint/Reader/IReader.php';
+
+/** PHPPowerPoint_Shared_File */
+require_once 'PHPPowerPoint/Shared/File.php';
+
+
+/**
+ * PHPPowerPoint_Reader_Serialized
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Reader
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+class PHPPowerPoint_Reader_Serialized implements PHPPowerPoint_Reader_IReader
+{
+ /**
+ * Can the current PHPPowerPoint_Reader_IReader read the file?
+ *
+ * @param string $pFileName
+ * @return boolean
+ */
+ public function canRead($pFilename)
+ {
+ // Check if file exists
+ if (!file_exists($pFilename)) {
+ throw new Exception("Could not open " . $pFilename . " for reading! File does not exist.");
+ }
+
+ return $this->fileSupportsUnserializePHPPowerPoint($pFilename);
+ }
+
+ /**
+ * Loads PHPPowerPoint Serialized file
+ *
+ * @param string $pFilename
+ * @return PHPPowerPoint
+ * @throws Exception
+ */
+ public function load($pFilename)
+ {
+ // Check if file exists
+ if (!file_exists($pFilename)) {
+ throw new Exception("Could not open " . $pFilename . " for reading! File does not exist.");
+ }
+
+ // Unserialize... First make sure the file supports it!
+ if (!$this->fileSupportsUnserializePHPPowerPoint($pFilename)) {
+ throw new Exception("Invalid file format for PHPPowerPoint_Reader_Serialized: " . $pFilename . ".");
+ }
+
+ return $this->_loadSerialized($pFilename);
+ }
+
+ /**
+ * Load PHPPowerPoint Serialized file
+ *
+ * @param string $pFilename
+ * @return PHPPowerPoint
+ */
+ private function _loadSerialized($pFilename) {
+ $xmlData = simplexml_load_string(file_get_contents("zip://$pFilename#PHPPowerPoint.xml"));
+ $excel = unserialize(base64_decode((string)$xmlData->data));
+
+ // Update media links
+ for ($i = 0; $i < $excel->getSlideCount(); ++$i) {
+ for ($j = 0; $j < $excel->getSlide($i)->getShapeCollection()->count(); ++$j) {
+ if ($excel->getSlide($i)->getShapeCollection()->offsetGet($j) instanceof PHPExcl_Shape_BaseDrawing) {
+ $imgTemp =& $excel->getSlide($i)->getShapeCollection()->offsetGet($j);
+ $imgTemp->setPath('zip://' . $pFilename . '#media/' . $imgTemp->getFilename(), false);
+ }
+ }
+ }
+
+ return $excel;
+ }
+
+ /**
+ * Does a file support UnserializePHPPowerPoint ?
+ *
+ * @param string $pFilename
+ * @throws Exception
+ * @return boolean
+ */
+ public function fileSupportsUnserializePHPPowerPoint($pFilename = '') {
+ // Check if file exists
+ if (!file_exists($pFilename)) {
+ throw new Exception("Could not open " . $pFilename . " for reading! File does not exist.");
+ }
+
+ // File exists, does it contain PHPPowerPoint.xml?
+ return PHPPowerPoint_Shared_File::file_exists("zip://$pFilename#PHPPowerPoint.xml");
+ }
+}
diff --git a/admin/exportclases/PHPPowerPoint/Shape.php b/admin/exportclases/PHPPowerPoint/Shape.php
new file mode 100644
index 0000000..8ad3b0f
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/Shape.php
@@ -0,0 +1,358 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * Copyright (c) 2009 - 2010 PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Shape
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/** PHPPowerPoint_IComparable */
+require_once 'PHPPowerPoint/IComparable.php';
+
+/** PHPPowerPoint_Slide */
+require_once 'PHPPowerPoint/Slide.php';
+
+/** PHPPowerPoint_Style_Fill */
+require_once 'PHPPowerPoint/Style/Fill.php';
+
+/** PHPPowerPoint_Shape_Shadow */
+require_once 'PHPPowerPoint/Shape/Shadow.php';
+
+
+/**
+ * PHPPowerPoint_Shape
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Shape
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+abstract class PHPPowerPoint_Shape implements PHPPowerPoint_IComparable
+{
+ /**
+ * Slide
+ *
+ * @var PHPPowerPoint_Slide
+ */
+ protected $_slide;
+
+ /**
+ * Offset X
+ *
+ * @var int
+ */
+ protected $_offsetX;
+
+ /**
+ * Offset Y
+ *
+ * @var int
+ */
+ protected $_offsetY;
+
+ /**
+ * Width
+ *
+ * @var int
+ */
+ protected $_width;
+
+ /**
+ * Height
+ *
+ * @var int
+ */
+ protected $_height;
+
+ /**
+ * Fill
+ *
+ * @var PHPPowerPoint_Style_Fill
+ */
+ private $_fill;
+
+ /**
+ * Rotation
+ *
+ * @var int
+ */
+ protected $_rotation;
+
+ /**
+ * Shadow
+ *
+ * @var PHPPowerPoint_Shape_Shadow
+ */
+ protected $_shadow;
+
+ /**
+ * Create a new PHPPowerPoint_Shape
+ */
+ public function __construct()
+ {
+ // Initialise values
+ $this->_slide = null;
+ $this->_offsetX = 0;
+ $this->_offsetY = 0;
+ $this->_width = 0;
+ $this->_height = 0;
+ $this->_rotation = 0;
+ $this->_fill = new PHPPowerPoint_Style_Fill();
+ $this->_shadow = new PHPPowerPoint_Shape_Shadow();
+ }
+
+ /**
+ * Get Slide
+ *
+ * @return PHPPowerPoint_Slide
+ */
+ public function getSlide() {
+ return $this->_slide;
+ }
+
+ /**
+ * Set Slide
+ *
+ * @param PHPPowerPoint_Slide $pValue
+ * @param bool $pOverrideOld If a Slide has already been assigned, overwrite it and remove image from old Slide?
+ * @throws Exception
+ */
+ public function setSlide(PHPPowerPoint_slide $pValue = null, $pOverrideOld = false) {
+ if (is_null($this->_slide)) {
+ // Add drawing to PHPPowerPoint_Slide
+ $this->_slide = $pValue;
+ $this->_slide->getShapeCollection()->append($this);
+ } else {
+ if ($pOverrideOld) {
+ // Remove drawing from old PHPPowerPoint_Slide
+ $iterator = $this->_slide->getShapeCollection()->getIterator();
+
+ while ($iterator->valid()) {
+ if ($iterator->current()->getHashCode() == $this->getHashCode()) {
+ $this->_slide->getShapeCollection()->offsetUnset( $iterator->key() );
+ $this->_slide = null;
+ break;
+ }
+ }
+
+ // Set new PHPPowerPoint_Slide
+ $this->setSlide($pValue);
+ } else {
+ throw new Exception("A PHPPowerPoint_Slide has already been assigned. Shapes can only exist on one PHPPowerPoint_Slide.");
+ }
+ }
+ }
+
+ /**
+ * Get OffsetX
+ *
+ * @return int
+ */
+ public function getOffsetX() {
+ return $this->_offsetX;
+ }
+
+ /**
+ * Set OffsetX
+ *
+ * @param int $pValue
+ */
+ public function setOffsetX($pValue = 0) {
+ $this->_offsetX = $pValue;
+ }
+
+ /**
+ * Get OffsetY
+ *
+ * @return int
+ */
+ public function getOffsetY() {
+ return $this->_offsetY;
+ }
+
+ /**
+ * Set OffsetY
+ *
+ * @param int $pValue
+ */
+ public function setOffsetY($pValue = 0) {
+ $this->_offsetY = $pValue;
+ }
+
+ /**
+ * Get Width
+ *
+ * @return int
+ */
+ public function getWidth() {
+ return $this->_width;
+ }
+
+ /**
+ * Set Width
+ *
+ * @param int $pValue
+ */
+ public function setWidth($pValue = 0) {
+ $this->_width = $pValue;
+ }
+
+ /**
+ * Get Height
+ *
+ * @return int
+ */
+ public function getHeight() {
+ return $this->_height;
+ }
+
+ /**
+ * Set Height
+ *
+ * @param int $pValue
+ */
+ public function setHeight($pValue = 0) {
+ $this->_height = $pValue;
+ }
+
+ /**
+ * Set width and height with proportional resize
+ *
+ * @param int $width
+ * @param int $height
+ * @example $objDrawing->setWidthAndHeight(160,120);
+ */
+ public function setWidthAndHeight($width = 0, $height = 0) {
+ $this->_width = $width;
+ $this->_height = $height;
+ }
+
+ /**
+ * Get Rotation
+ *
+ * @return int
+ */
+ public function getRotation() {
+ return $this->_rotation;
+ }
+
+ /**
+ * Set Rotation
+ *
+ * @param int $pValue
+ */
+ public function setRotation($pValue = 0) {
+ $this->_rotation = $pValue;
+ }
+
+ /**
+ * Get Fill
+ *
+ * @return PHPPowerPoint_Style_Fill
+ */
+ public function getFill() {
+ return $this->_fill;
+ }
+
+ /**
+ * Get Shadow
+ *
+ * @return PHPPowerPoint_Shape_Shadow
+ */
+ public function getShadow() {
+ return $this->_shadow;
+ }
+
+ /**
+ * Set Shadow
+ *
+ * @param PHPPowerPoint_Shape_Shadow $pValue
+ * @throws Exception
+ */
+ public function setShadow(PHPPowerPoint_Shape_Shadow $pValue = null) {
+ $this->_shadow = $pValue;
+ }
+
+ /**
+ * Get hash code
+ *
+ * @return string Hash code
+ */
+ public function getHashCode() {
+ return md5(
+ $this->_slide->getHashCode()
+ . $this->_offsetX
+ . $this->_offsetY
+ . $this->_width
+ . $this->_height
+ . $this->_rotation
+ . $this->getFill()->getHashCode()
+ . $this->_shadow->getHashCode()
+ . __CLASS__
+ );
+ }
+
+ /**
+ * Hash index
+ *
+ * @var string
+ */
+ private $_hashIndex;
+
+ /**
+ * Get hash index
+ *
+ * Note that this index may vary during script execution! Only reliable moment is
+ * while doing a write of a workbook and when changes are not allowed.
+ *
+ * @return string Hash index
+ */
+ public function getHashIndex() {
+ return $this->_hashIndex;
+ }
+
+ /**
+ * Set hash index
+ *
+ * Note that this index may vary during script execution! Only reliable moment is
+ * while doing a write of a workbook and when changes are not allowed.
+ *
+ * @param string $value Hash index
+ */
+ public function setHashIndex($value) {
+ $this->_hashIndex = $value;
+ }
+
+ /**
+ * Implement PHP __clone to create a deep clone, not just a shallow copy.
+ */
+ public function __clone() {
+ $vars = get_object_vars($this);
+ foreach ($vars as $key => $value) {
+ if (is_object($value)) {
+ $this->$key = clone $value;
+ } else {
+ $this->$key = $value;
+ }
+ }
+ }
+}
diff --git a/admin/exportclases/PHPPowerPoint/Shape/BaseDrawing.php b/admin/exportclases/PHPPowerPoint/Shape/BaseDrawing.php
new file mode 100644
index 0000000..6ce6d94
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/Shape/BaseDrawing.php
@@ -0,0 +1,272 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * Copyright (c) 2009 - 2010 PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Shape
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/** PHPPowerPoint_IComparable */
+require_once 'PHPPowerPoint/IComparable.php';
+
+/** PHPPowerPoint_Shape */
+require_once 'PHPPowerPoint/Shape.php';
+
+/**
+ * PHPPowerPoint_Shape_BaseDrawing
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Shape
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+abstract class PHPPowerPoint_Shape_BaseDrawing extends PHPPowerPoint_Shape implements PHPPowerPoint_IComparable
+{
+ /**
+ * Image counter
+ *
+ * @var int
+ */
+ private static $_imageCounter = 0;
+
+ /**
+ * Image index
+ *
+ * @var int
+ */
+ private $_imageIndex = 0;
+
+ /**
+ * Name
+ *
+ * @var string
+ */
+ protected $_name;
+
+ /**
+ * Description
+ *
+ * @var string
+ */
+ protected $_description;
+
+ /**
+ * Proportional resize
+ *
+ * @var boolean
+ */
+ protected $_resizeProportional;
+
+ /**
+ * Create a new PHPPowerPoint_Slide_BaseDrawing
+ */
+ public function __construct()
+ {
+ // Initialise values
+ $this->_name = '';
+ $this->_description = '';
+ $this->_resizeProportional = true;
+
+ // Set image index
+ self::$_imageCounter++;
+ $this->_imageIndex = self::$_imageCounter;
+
+ // Initialize parent
+ parent::__construct();
+ }
+
+ /**
+ * Get image index
+ *
+ * @return int
+ */
+ public function getImageIndex() {
+ return $this->_imageIndex;
+ }
+
+ /**
+ * Get Name
+ *
+ * @return string
+ */
+ public function getName() {
+ return $this->_name;
+ }
+
+ /**
+ * Set Name
+ *
+ * @param string $pValue
+ */
+ public function setName($pValue = '') {
+ $this->_name = $pValue;
+ }
+
+ /**
+ * Get Description
+ *
+ * @return string
+ */
+ public function getDescription() {
+ return $this->_description;
+ }
+
+ /**
+ * Set Description
+ *
+ * @param string $pValue
+ */
+ public function setDescription($pValue = '') {
+ $this->_description = $pValue;
+ }
+
+ /**
+ * Set Width
+ *
+ * @param int $pValue
+ */
+ public function setWidth($pValue = 0) {
+ // Resize proportional?
+ if ($this->_resizeProportional && $pValue != 0) {
+ $ratio = $this->_height / $this->_width;
+ $this->_height = round($ratio * $pValue);
+ }
+
+ // Set width
+ $this->_width = $pValue;
+ }
+
+ /**
+ * Set Height
+ *
+ * @param int $pValue
+ */
+ public function setHeight($pValue = 0) {
+ // Resize proportional?
+ if ($this->_resizeProportional && $pValue != 0) {
+ $ratio = $this->_width / $this->_height;
+ $this->_width = round($ratio * $pValue);
+ }
+
+ // Set height
+ $this->_height = $pValue;
+ }
+
+ /**
+ * Set width and height with proportional resize
+ * @author Vincent@luo MSN:kele_100@hotmail.com
+ * @param int $width
+ * @param int $height
+ * @example $objDrawing->setResizeProportional(true);
+ * @example $objDrawing->setWidthAndHeight(160,120);
+ */
+ public function setWidthAndHeight($width = 0, $height = 0) {
+ $xratio = $width / $this->_width;
+ $yratio = $height / $this->_height;
+ if ($this->_resizeProportional && !($width == 0 || $height == 0)) {
+ if (($xratio * $this->_height) < $height) {
+ $this->_height = ceil($xratio * $this->_height);
+ $this->_width = $width;
+ } else {
+ $this->_width = ceil($yratio * $this->_width);
+ $this->_height = $height;
+ }
+ }
+ }
+
+ /**
+ * Get ResizeProportional
+ *
+ * @return boolean
+ */
+ public function getResizeProportional() {
+ return $this->_resizeProportional;
+ }
+
+ /**
+ * Set ResizeProportional
+ *
+ * @param boolean $pValue
+ */
+ public function setResizeProportional($pValue = true) {
+ $this->_resizeProportional = $pValue;
+ }
+
+ /**
+ * Get hash code
+ *
+ * @return string Hash code
+ */
+ public function getHashCode() {
+ return md5(
+ $this->_name
+ . $this->_description
+ . parent::getHashCode()
+ . __CLASS__
+ );
+ }
+
+ /**
+ * Hash index
+ *
+ * @var string
+ */
+ private $_hashIndex;
+
+ /**
+ * Get hash index
+ *
+ * Note that this index may vary during script execution! Only reliable moment is
+ * while doing a write of a workbook and when changes are not allowed.
+ *
+ * @return string Hash index
+ */
+ public function getHashIndex() {
+ return $this->_hashIndex;
+ }
+
+ /**
+ * Set hash index
+ *
+ * Note that this index may vary during script execution! Only reliable moment is
+ * while doing a write of a workbook and when changes are not allowed.
+ *
+ * @param string $value Hash index
+ */
+ public function setHashIndex($value) {
+ $this->_hashIndex = $value;
+ }
+
+ /**
+ * Implement PHP __clone to create a deep clone, not just a shallow copy.
+ */
+ public function __clone() {
+ $vars = get_object_vars($this);
+ foreach ($vars as $key => $value) {
+ if (is_object($value)) {
+ $this->$key = clone $value;
+ } else {
+ $this->$key = $value;
+ }
+ }
+ }
+}
diff --git a/admin/exportclases/PHPPowerPoint/Shape/Drawing.php b/admin/exportclases/PHPPowerPoint/Shape/Drawing.php
new file mode 100644
index 0000000..feeab3c
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/Shape/Drawing.php
@@ -0,0 +1,185 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * Copyright (c) 2009 - 2010 PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Shape
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/** PHPPowerPoint_IComparable */
+require_once 'PHPPowerPoint/IComparable.php';
+
+/** PHPPowerPoint_Shape*/
+require_once 'PHPPowerPoint/Shape.php';
+
+/** PHPPowerPoint_Shape_BaseDrawing */
+require_once 'PHPPowerPoint/Shape/BaseDrawing.php';
+
+
+/**
+ * PHPPowerPoint_Shape_Drawing
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Shape
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+class PHPPowerPoint_Shape_Drawing extends PHPPowerPoint_Shape_BaseDrawing implements PHPPowerPoint_IComparable
+{
+ /**
+ * Path
+ *
+ * @var string
+ */
+ private $_path;
+
+ /**
+ * Create a new PHPPowerPoint_Slide_Drawing
+ */
+ public function __construct()
+ {
+ // Initialise values
+ $this->_path = '';
+
+ // Initialize parent
+ parent::__construct();
+ }
+
+ /**
+ * Get Filename
+ *
+ * @return string
+ */
+ public function getFilename() {
+ return basename($this->_path);
+ }
+
+ /**
+ * Get indexed filename (using image index)
+ *
+ * @return string
+ */
+ public function getIndexedFilename() {
+ return str_replace('.' . $this->getExtension(), '', $this->getFilename()) . $this->getImageIndex() . '.' . $this->getExtension();
+ }
+
+ /**
+ * Get Extension
+ *
+ * @return string
+ */
+ public function getExtension() {
+ $exploded = explode(".", basename($this->_path));
+ return $exploded[count($exploded) - 1];
+ }
+
+ /**
+ * Get Path
+ *
+ * @return string
+ */
+ public function getPath() {
+ return $this->_path;
+ }
+
+ /**
+ * Set Path
+ *
+ * @param string $pValue File path
+ * @param boolean $pVerifyFile Verify file
+ * @throws Exception
+ */
+ public function setPath($pValue = '', $pVerifyFile = true) {
+ if ($pVerifyFile) {
+ if (file_exists($pValue)) {
+ $this->_path = $pValue;
+
+ if ($this->_width == 0 && $this->_height == 0) {
+ // Get width/height
+ list($this->_width, $this->_height) = getimagesize($pValue);
+ }
+ } else {
+ throw new Exception("File $pValue not found!");
+ }
+ } else {
+ $this->_path = $pValue;
+ }
+ }
+
+ /**
+ * Get hash code
+ *
+ * @return string Hash code
+ */
+ public function getHashCode() {
+ return md5(
+ $this->_path
+ . parent::getHashCode()
+ . __CLASS__
+ );
+ }
+
+ /**
+ * Hash index
+ *
+ * @var string
+ */
+ private $_hashIndex;
+
+ /**
+ * Get hash index
+ *
+ * Note that this index may vary during script execution! Only reliable moment is
+ * while doing a write of a workbook and when changes are not allowed.
+ *
+ * @return string Hash index
+ */
+ public function getHashIndex() {
+ return $this->_hashIndex;
+ }
+
+ /**
+ * Set hash index
+ *
+ * Note that this index may vary during script execution! Only reliable moment is
+ * while doing a write of a workbook and when changes are not allowed.
+ *
+ * @param string $value Hash index
+ */
+ public function setHashIndex($value) {
+ $this->_hashIndex = $value;
+ }
+
+ /**
+ * Implement PHP __clone to create a deep clone, not just a shallow copy.
+ */
+ public function __clone() {
+ $vars = get_object_vars($this);
+ foreach ($vars as $key => $value) {
+ if (is_object($value)) {
+ $this->$key = clone $value;
+ } else {
+ $this->$key = $value;
+ }
+ }
+ }
+}
diff --git a/admin/exportclases/PHPPowerPoint/Shape/MemoryDrawing.php b/admin/exportclases/PHPPowerPoint/Shape/MemoryDrawing.php
new file mode 100644
index 0000000..604b671
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/Shape/MemoryDrawing.php
@@ -0,0 +1,235 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * Copyright (c) 2009 - 2010 PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Shape
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/** PHPPowerPoint_IComparable */
+require_once 'PHPPowerPoint/IComparable.php';
+
+/** PHPPowerPoint_Shape */
+require_once 'PHPPowerPoint/Shape.php';
+
+/** PHPPowerPoint_Shape_BaseDrawing */
+require_once 'PHPPowerPoint/Shape/BaseDrawing.php';
+
+
+/**
+ * PHPPowerPoint_Shape_MemoryDrawing
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Shape
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+class PHPPowerPoint_Shape_MemoryDrawing extends PHPPowerPoint_Shape_BaseDrawing implements PHPPowerPoint_IComparable
+{
+ /* Rendering functions */
+ const RENDERING_DEFAULT = 'imagepng';
+ const RENDERING_PNG = 'imagepng';
+ const RENDERING_GIF = 'imagegif';
+ const RENDERING_JPEG = 'imagejpeg';
+
+ /* MIME types */
+ const MIMETYPE_DEFAULT = 'image/png';
+ const MIMETYPE_PNG = 'image/png';
+ const MIMETYPE_GIF = 'image/gif';
+ const MIMETYPE_JPEG = 'image/jpeg';
+
+ /**
+ * Image resource
+ *
+ * @var resource
+ */
+ private $_imageResource;
+
+ /**
+ * Rendering function
+ *
+ * @var string
+ */
+ private $_renderingFunction;
+
+ /**
+ * Mime type
+ *
+ * @var string
+ */
+ private $_mimeType;
+
+ /**
+ * Unique name
+ *
+ * @var string
+ */
+ private $_uniqueName;
+
+ /**
+ * Create a new PHPPowerPoint_Slide_MemoryDrawing
+ */
+ public function __construct()
+ {
+ // Initialise values
+ $this->_imageResource = null;
+ $this->_renderingFunction = self::RENDERING_DEFAULT;
+ $this->_mimeType = self::MIMETYPE_DEFAULT;
+ $this->_uniqueName = md5(rand(0, 9999). time() . rand(0, 9999));
+
+ // Initialize parent
+ parent::__construct();
+ }
+
+ /**
+ * Get image resource
+ *
+ * @return resource
+ */
+ public function getImageResource() {
+ return $this->_imageResource;
+ }
+
+ /**
+ * Set image resource
+ *
+ * @param $value resource
+ */
+ public function setImageResource($value = null) {
+ $this->_imageResource = $value;
+
+ if (!is_null($this->_imageResource)) {
+ // Get width/height
+ $this->_width = imagesx($this->_imageResource);
+ $this->_height = imagesy($this->_imageResource);
+ }
+ }
+
+ /**
+ * Get rendering function
+ *
+ * @return string
+ */
+ public function getRenderingFunction() {
+ return $this->_renderingFunction;
+ }
+
+ /**
+ * Set rendering function
+ *
+ * @param string $value
+ */
+ public function setRenderingFunction($value = PHPPowerPoint_Slide_MemoryDrawing::RENDERING_DEFAULT) {
+ $this->_renderingFunction = $value;
+ }
+
+ /**
+ * Get mime type
+ *
+ * @return string
+ */
+ public function getMimeType() {
+ return $this->_mimeType;
+ }
+
+ /**
+ * Set mime type
+ *
+ * @param string $value
+ */
+ public function setMimeType($value = PHPPowerPoint_Slide_MemoryDrawing::MIMETYPE_DEFAULT) {
+ $this->_mimeType = $value;
+ }
+
+ /**
+ * Get indexed filename (using image index)
+ *
+ * @return string
+ */
+ public function getIndexedFilename() {
+ $extension = strtolower($this->getMimeType());
+ $extension = explode('/', $extension);
+ $extension = $extension[1];
+
+ return $this->_uniqueName . $this->getImageIndex() . '.' . $extension;
+ }
+
+ /**
+ * Get hash code
+ *
+ * @return string Hash code
+ */
+ public function getHashCode() {
+ return md5(
+ $this->_renderingFunction
+ . $this->_mimeType
+ . $this->_uniqueName
+ . parent::getHashCode()
+ . __CLASS__
+ );
+ }
+
+ /**
+ * Hash index
+ *
+ * @var string
+ */
+ private $_hashIndex;
+
+ /**
+ * Get hash index
+ *
+ * Note that this index may vary during script execution! Only reliable moment is
+ * while doing a write of a workbook and when changes are not allowed.
+ *
+ * @return string Hash index
+ */
+ public function getHashIndex() {
+ return $this->_hashIndex;
+ }
+
+ /**
+ * Set hash index
+ *
+ * Note that this index may vary during script execution! Only reliable moment is
+ * while doing a write of a workbook and when changes are not allowed.
+ *
+ * @param string $value Hash index
+ */
+ public function setHashIndex($value) {
+ $this->_hashIndex = $value;
+ }
+
+ /**
+ * Implement PHP __clone to create a deep clone, not just a shallow copy.
+ */
+ public function __clone() {
+ $vars = get_object_vars($this);
+ foreach ($vars as $key => $value) {
+ if (is_object($value)) {
+ $this->$key = clone $value;
+ } else {
+ $this->$key = $value;
+ }
+ }
+ }
+}
diff --git a/admin/exportclases/PHPPowerPoint/Shape/RichText.php b/admin/exportclases/PHPPowerPoint/Shape/RichText.php
new file mode 100644
index 0000000..ee2929c
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/Shape/RichText.php
@@ -0,0 +1,264 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * Copyright (c) 2009 - 2010 PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Shape
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/** PHPPowerPoint_IComparable */
+require_once 'PHPPowerPoint/IComparable.php';
+
+/** PHPPowerPoint_Shape */
+require_once 'PHPPowerPoint/Shape.php';
+
+/** PHPPowerPoint_Shape_RichText_ITextElement */
+require_once 'PHPPowerPoint/Shape/RichText/ITextElement.php';
+
+/** PHPPowerPoint_Shape_RichText_TextElement */
+require_once 'PHPPowerPoint/Shape/RichText/TextElement.php';
+
+/** PHPPowerPoint_Shape_RichText_Run */
+require_once 'PHPPowerPoint/Shape/RichText/Run.php';
+
+/** PHPPowerPoint_Shape_RichText_Break */
+require_once 'PHPPowerPoint/Shape/RichText/Break.php';
+
+/** PHPPowerPoint_Style_Alignment */
+require_once 'PHPPowerPoint/Style/Alignment.php';
+
+/**
+ * PHPPowerPoint_Shape_RichText
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_RichText
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+class PHPPowerPoint_Shape_RichText extends PHPPowerPoint_Shape implements PHPPowerPoint_IComparable
+{
+ /**
+ * Rich text elements
+ *
+ * @var PHPPowerPoint_Shape_RichText_ITextElement[]
+ */
+ private $_richTextElements;
+
+ /**
+ * Alignment
+ *
+ * @var PHPPowerPoint_Style_Alignment
+ */
+ private $_alignment;
+
+ /**
+ * Create a new PHPPowerPoint_Shape_RichText instance
+ */
+ public function __construct()
+ {
+ // Initialise variables
+ $this->_richTextElements = array();
+ $this->_alignment = new PHPPowerPoint_Style_Alignment();
+
+ // Initialize parent
+ parent::__construct();
+ }
+
+ /**
+ * Get alignment
+ *
+ * @return PHPPowerPoint_Style_Alignment
+ */
+ public function getAlignment()
+ {
+ return $this->_alignment;
+ }
+
+ /**
+ * Add text
+ *
+ * @param PHPPowerPoint_Shape_RichText_ITextElement $pText Rich text element
+ * @throws Exception
+ */
+ public function addText(PHPPowerPoint_Shape_RichText_ITextElement $pText = null)
+ {
+ $this->_richTextElements[] = $pText;
+ }
+
+ /**
+ * Create text (can not be formatted !)
+ *
+ * @param string $pText Text
+ * @return PHPPowerPoint_Shape_RichText_TextElement
+ * @throws Exception
+ */
+ public function createText($pText = '')
+ {
+ $objText = new PHPPowerPoint_Shape_RichText_TextElement($pText);
+ $this->addText($objText);
+ return $objText;
+ }
+
+ /**
+ * Create break
+ *
+ * @return PHPPowerPoint_Shape_RichText_Break
+ * @throws Exception
+ */
+ public function createBreak()
+ {
+ $objText = new PHPPowerPoint_Shape_RichText_Break();
+ $this->addText($objText);
+ return $objText;
+ }
+
+ /**
+ * Create text run (can be formatted)
+ *
+ * @param string $pText Text
+ * @return PHPPowerPoint_Shape_RichText_Run
+ * @throws Exception
+ */
+ public function createTextRun($pText = '')
+ {
+ $objText = new PHPPowerPoint_Shape_RichText_Run($pText);
+ $this->addText($objText);
+ return $objText;
+ }
+
+ /**
+ * Get plain text
+ *
+ * @return string
+ */
+ public function getPlainText()
+ {
+ // Return value
+ $returnValue = '';
+
+ // Loop trough all PHPPowerPoint_Shape_RichText_ITextElement
+ foreach ($this->_richTextElements as $text) {
+ $returnValue .= $text->getText();
+ }
+
+ // Return
+ return $returnValue;
+ }
+
+ /**
+ * Convert to string
+ *
+ * @return string
+ */
+ public function __toString() {
+ return $this->getPlainText();
+ }
+
+ /**
+ * Get Rich Text elements
+ *
+ * @return PHPPowerPoint_Shape_RichText_ITextElement[]
+ */
+ public function getRichTextElements()
+ {
+ return $this->_richTextElements;
+ }
+
+ /**
+ * Set Rich Text elements
+ *
+ * @param PHPPowerPoint_Shape_RichText_ITextElement[] $pElements Array of elements
+ * @throws Exception
+ */
+ public function setRichTextElements($pElements = null)
+ {
+ if (is_array($pElements)) {
+ $this->_richTextElements = $pElements;
+ } else {
+ throw new Exception("Invalid PHPPowerPoint_Shape_RichText_ITextElement[] array passed.");
+ }
+ }
+
+ /**
+ * Get hash code
+ *
+ * @return string Hash code
+ */
+ public function getHashCode() {
+ $hashElements = '';
+ foreach ($this->_richTextElements as $element) {
+ $hashElements .= $element->getHashCode();
+ }
+
+ return md5(
+ $hashElements
+ . __CLASS__
+ );
+ }
+
+ /**
+ * Hash index
+ *
+ * @var string
+ */
+ private $_hashIndex;
+
+ /**
+ * Get hash index
+ *
+ * Note that this index may vary during script execution! Only reliable moment is
+ * while doing a write of a workbook and when changes are not allowed.
+ *
+ * @return string Hash index
+ */
+ public function getHashIndex() {
+ return $this->_hashIndex;
+ }
+
+ /**
+ * Set hash index
+ *
+ * Note that this index may vary during script execution! Only reliable moment is
+ * while doing a write of a workbook and when changes are not allowed.
+ *
+ * @param string $value Hash index
+ */
+ public function setHashIndex($value) {
+ $this->_hashIndex = $value;
+ }
+
+ /**
+ * Implement PHP __clone to create a deep clone, not just a shallow copy.
+ */
+ public function __clone() {
+ $vars = get_object_vars($this);
+ foreach ($vars as $key => $value) {
+ if ($key == '_parent') continue;
+
+ if (is_object($value)) {
+ $this->$key = clone $value;
+ } else {
+ $this->$key = $value;
+ }
+ }
+ }
+}
diff --git a/admin/exportclases/PHPPowerPoint/Shape/RichText/Break.php b/admin/exportclases/PHPPowerPoint/Shape/RichText/Break.php
new file mode 100644
index 0000000..2cef083
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/Shape/RichText/Break.php
@@ -0,0 +1,88 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_RichText
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/** PHPPowerPoint_Shape_RichText_ITextElement */
+require_once 'PHPPowerPoint/Shape/RichText/ITextElement.php';
+
+/** PHPPowerPoint_Style_Font */
+require_once 'PHPPowerPoint/Style/Font.php';
+
+
+/**
+ * PHPPowerPoint_Shape_RichText_Break
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Shape
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+class PHPPowerPoint_Shape_RichText_Break implements PHPPowerPoint_Shape_RichText_ITextElement
+{
+ /**
+ * Create a new PHPPowerPoint_Shape_RichText_Break instance
+ */
+ public function __construct()
+ {
+ }
+
+ /**
+ * Get text
+ *
+ * @return string Text
+ */
+ public function getText()
+ {
+ return "\r\n";
+ }
+
+ /**
+ * Set text
+ *
+ * @param $pText string Text
+ */
+ public function setText($pText = '')
+ {
+ }
+
+ /**
+ * Get font
+ *
+ * @return PHPPowerPoint_Style_Font
+ */
+ public function getFont() {
+ return null;
+ }
+
+ /**
+ * Get hash code
+ *
+ * @return string Hash code
+ */
+ public function getHashCode() {
+ return md5(
+ __CLASS__
+ );
+ }
+}
diff --git a/admin/exportclases/PHPPowerPoint/Shape/RichText/ITextElement.php b/admin/exportclases/PHPPowerPoint/Shape/RichText/ITextElement.php
new file mode 100644
index 0000000..5b0b42d
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/Shape/RichText/ITextElement.php
@@ -0,0 +1,67 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Shape
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/** PHPPowerPoint_Style_Font */
+require_once 'PHPPowerPoint/Style/Font.php';
+
+
+/**
+ * PHPPowerPoint_Shape_RichText_ITextElement
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Shape
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+interface PHPPowerPoint_Shape_RichText_ITextElement
+{
+ /**
+ * Get text
+ *
+ * @return string Text
+ */
+ public function getText();
+
+ /**
+ * Set text
+ *
+ * @param $pText string Text
+ */
+ public function setText($pText = '');
+
+ /**
+ * Get font
+ *
+ * @return PHPPowerPoint_Style_Font
+ */
+ public function getFont();
+
+ /**
+ * Get hash code
+ *
+ * @return string Hash code
+ */
+ public function getHashCode();
+}
diff --git a/admin/exportclases/PHPPowerPoint/Shape/RichText/Run.php b/admin/exportclases/PHPPowerPoint/Shape/RichText/Run.php
new file mode 100644
index 0000000..5ea5525
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/Shape/RichText/Run.php
@@ -0,0 +1,110 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Shape
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/** PHPPowerPoint_Shape_RichText_ITextElement */
+require_once 'PHPPowerPoint/Shape/RichText/ITextElement.php';
+
+/** PHPPowerPoint_Shape_RichText_TextElement */
+require_once 'PHPPowerPoint/Shape/RichText/TextElement.php';
+
+/** PHPPowerPoint_Style_Font */
+require_once 'PHPPowerPoint/Style/Font.php';
+
+
+/**
+ * PHPPowerPoint_Shape_RichText_Run
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Shape
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+class PHPPowerPoint_Shape_RichText_Run extends PHPPowerPoint_Shape_RichText_TextElement implements PHPPowerPoint_Shape_RichText_ITextElement
+{
+ /**
+ * Font
+ *
+ * @var PHPPowerPoint_Style_Font
+ */
+ private $_font;
+
+ /**
+ * Create a new PHPPowerPoint_Shape_RichText_Run instance
+ *
+ * @param string $pText Text
+ */
+ public function __construct($pText = '')
+ {
+ // Initialise variables
+ $this->setText($pText);
+ $this->_font = new PHPPowerPoint_Style_Font();
+ }
+
+ /**
+ * Get font
+ *
+ * @return PHPPowerPoint_Style_Font
+ */
+ public function getFont() {
+ return $this->_font;
+ }
+
+ /**
+ * Set font
+ *
+ * @param PHPPowerPoint_Style_Font $pFont Font
+ * @throws Exception
+ */
+ public function setFont(PHPPowerPoint_Style_Font $pFont = null) {
+ $this->_font = $pFont;
+ }
+
+ /**
+ * Get hash code
+ *
+ * @return string Hash code
+ */
+ public function getHashCode() {
+ return md5(
+ $this->getText()
+ . $this->_font->getHashCode()
+ . __CLASS__
+ );
+ }
+
+ /**
+ * Implement PHP __clone to create a deep clone, not just a shallow copy.
+ */
+ public function __clone() {
+ $vars = get_object_vars($this);
+ foreach ($vars as $key => $value) {
+ if (is_object($value)) {
+ $this->$key = clone $value;
+ } else {
+ $this->$key = $value;
+ }
+ }
+ }
+}
diff --git a/admin/exportclases/PHPPowerPoint/Shape/RichText/TextElement.php b/admin/exportclases/PHPPowerPoint/Shape/RichText/TextElement.php
new file mode 100644
index 0000000..b92f607
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/Shape/RichText/TextElement.php
@@ -0,0 +1,113 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_RichText
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/** PHPPowerPoint_Shape_RichText_ITextElement */
+require_once 'PHPPowerPoint/Shape/RichText/ITextElement.php';
+
+/** PHPPowerPoint_Style_Font */
+require_once 'PHPPowerPoint/Style/Font.php';
+
+
+/**
+ * PHPPowerPoint_Shape_RichText_TextElement
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Shape
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+class PHPPowerPoint_Shape_RichText_TextElement implements PHPPowerPoint_Shape_RichText_ITextElement
+{
+ /**
+ * Text
+ *
+ * @var string
+ */
+ private $_text;
+
+ /**
+ * Create a new PHPPowerPoint_Shape_RichText_TextElement instance
+ *
+ * @param string $pText Text
+ */
+ public function __construct($pText = '')
+ {
+ // Initialise variables
+ $this->_text = $pText;
+ }
+
+ /**
+ * Get text
+ *
+ * @return string Text
+ */
+ public function getText() {
+ return $this->_text;
+ }
+
+ /**
+ * Set text
+ *
+ * @param $pText string Text
+ */
+ public function setText($pText = '') {
+ $this->_text = $pText;
+ }
+
+ /**
+ * Get font
+ *
+ * @return PHPPowerPoint_Style_Font
+ */
+ public function getFont() {
+ return null;
+ }
+
+ /**
+ * Get hash code
+ *
+ * @return string Hash code
+ */
+ public function getHashCode() {
+ return md5(
+ $this->_text
+ . __CLASS__
+ );
+ }
+
+ /**
+ * Implement PHP __clone to create a deep clone, not just a shallow copy.
+ */
+ public function __clone() {
+ $vars = get_object_vars($this);
+ foreach ($vars as $key => $value) {
+ if (is_object($value)) {
+ $this->$key = clone $value;
+ } else {
+ $this->$key = $value;
+ }
+ }
+ }
+}
diff --git a/admin/exportclases/PHPPowerPoint/Shape/Shadow.php b/admin/exportclases/PHPPowerPoint/Shape/Shadow.php
new file mode 100644
index 0000000..c3a1e6d
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/Shape/Shadow.php
@@ -0,0 +1,314 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * Copyright (c) 2009 - 2010 PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Shape
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/** PHPPowerPoint_IComparable */
+require_once 'PHPPowerPoint/IComparable.php';
+
+/** PHPPowerPoint_Slide */
+require_once 'PHPPowerPoint/Slide.php';
+
+/** PHPPowerPoint_Style_Color */
+require_once 'PHPPowerPoint/Style/Color.php';
+
+/**
+ * PHPPowerPoint_Shape_Shadow
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Shape
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+class PHPPowerPoint_Shape_Shadow implements PHPPowerPoint_IComparable
+{
+ /* Shadow alignment */
+ const SHADOW_BOTTOM = 'b';
+ const SHADOW_BOTTOM_LEFT = 'bl';
+ const SHADOW_BOTTOM_RIGHT = 'br';
+ const SHADOW_CENTER = 'ctr';
+ const SHADOW_LEFT = 'l';
+ const SHADOW_TOP = 't';
+ const SHADOW_TOP_LEFT = 'tl';
+ const SHADOW_TOP_RIGHT = 'tr';
+
+ /**
+ * Visible
+ *
+ * @var boolean
+ */
+ private $_visible;
+
+ /**
+ * Blur radius
+ *
+ * Defaults to 6
+ *
+ * @var int
+ */
+ private $_blurRadius;
+
+ /**
+ * Shadow distance
+ *
+ * Defaults to 2
+ *
+ * @var int
+ */
+ private $_distance;
+
+ /**
+ * Shadow direction (in degrees)
+ *
+ * @var int
+ */
+ private $_direction;
+
+ /**
+ * Shadow alignment
+ *
+ * @var int
+ */
+ private $_alignment;
+
+ /**
+ * Color
+ *
+ * @var PHPPowerPoint_Style_Color
+ */
+ private $_color;
+
+ /**
+ * Alpha
+ *
+ * @var int
+ */
+ private $_alpha;
+
+ /**
+ * Create a new PHPPowerPoint_Shape_Shadow
+ */
+ public function __construct()
+ {
+ // Initialise values
+ $this->_visible = false;
+ $this->_blurRadius = 6;
+ $this->_distance = 2;
+ $this->_direction = 0;
+ $this->_alignment = self::SHADOW_BOTTOM_RIGHT;
+ $this->_color = new PHPPowerPoint_Style_Color(PHPPowerPoint_Style_Color::COLOR_BLACK);
+ $this->_alpha = 50;
+ }
+
+ /**
+ * Get Visible
+ *
+ * @return boolean
+ */
+ public function getVisible() {
+ return $this->_visible;
+ }
+
+ /**
+ * Set Visible
+ *
+ * @param boolean $pValue
+ */
+ public function setVisible($pValue = false) {
+ $this->_visible = $pValue;
+ }
+
+ /**
+ * Get Blur radius
+ *
+ * @return int
+ */
+ public function getBlurRadius() {
+ return $this->_blurRadius;
+ }
+
+ /**
+ * Set Blur radius
+ *
+ * @param int $pValue
+ */
+ public function setBlurRadius($pValue = 6) {
+ $this->_blurRadius = $pValue;
+ }
+
+ /**
+ * Get Shadow distance
+ *
+ * @return int
+ */
+ public function getDistance() {
+ return $this->_distance;
+ }
+
+ /**
+ * Set Shadow distance
+ *
+ * @param int $pValue
+ */
+ public function setDistance($pValue = 2) {
+ $this->_distance = $pValue;
+ }
+
+ /**
+ * Get Shadow direction (in degrees)
+ *
+ * @return int
+ */
+ public function getDirection() {
+ return $this->_direction;
+ }
+
+ /**
+ * Set Shadow direction (in degrees)
+ *
+ * @param int $pValue
+ */
+ public function setDirection($pValue = 0) {
+ $this->_direction = $pValue;
+ }
+
+ /**
+ * Get Shadow alignment
+ *
+ * @return int
+ */
+ public function getAlignment() {
+ return $this->_alignment;
+ }
+
+ /**
+ * Set Shadow alignment
+ *
+ * @param int $pValue
+ */
+ public function setAlignment($pValue = 0) {
+ $this->_alignment = $pValue;
+ }
+
+ /**
+ * Get Color
+ *
+ * @return PHPPowerPoint_Style_Color
+ */
+ public function getColor() {
+ return $this->_color;
+ }
+
+ /**
+ * Set Color
+ *
+ * @param PHPPowerPoint_Style_Color $pValue
+ * @throws Exception
+ */
+ public function setColor(PHPPowerPoint_Style_Color $pValue = null) {
+ $this->_color = $pValue;
+ }
+
+ /**
+ * Get Alpha
+ *
+ * @return int
+ */
+ public function getAlpha() {
+ return $this->_alpha;
+ }
+
+ /**
+ * Set Alpha
+ *
+ * @param int $pValue
+ */
+ public function setAlpha($pValue = 0) {
+ $this->_alpha = $pValue;
+ }
+
+ /**
+ * Get hash code
+ *
+ * @return string Hash code
+ */
+ public function getHashCode() {
+ return md5(
+ ($this->_visible ? 't' : 'f')
+ . $this->_blurRadius
+ . $this->_distance
+ . $this->_direction
+ . $this->_alignment
+ . $this->_color->getHashCode()
+ . $this->_alpha
+ . __CLASS__
+ );
+ }
+
+ /**
+ * Hash index
+ *
+ * @var string
+ */
+ private $_hashIndex;
+
+ /**
+ * Get hash index
+ *
+ * Note that this index may vary during script execution! Only reliable moment is
+ * while doing a write of a workbook and when changes are not allowed.
+ *
+ * @return string Hash index
+ */
+ public function getHashIndex() {
+ return $this->_hashIndex;
+ }
+
+ /**
+ * Set hash index
+ *
+ * Note that this index may vary during script execution! Only reliable moment is
+ * while doing a write of a workbook and when changes are not allowed.
+ *
+ * @param string $value Hash index
+ */
+ public function setHashIndex($value) {
+ $this->_hashIndex = $value;
+ }
+
+ /**
+ * Implement PHP __clone to create a deep clone, not just a shallow copy.
+ */
+ public function __clone() {
+ $vars = get_object_vars($this);
+ foreach ($vars as $key => $value) {
+ if (is_object($value)) {
+ $this->$key = clone $value;
+ } else {
+ $this->$key = $value;
+ }
+ }
+ }
+}
diff --git a/admin/exportclases/PHPPowerPoint/Shared/Drawing.php b/admin/exportclases/PHPPowerPoint/Shared/Drawing.php
new file mode 100644
index 0000000..e3727fc
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/Shared/Drawing.php
@@ -0,0 +1,109 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * Copyright (c) 2009 - 2010 PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Shared
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/**
+ * PHPPowerPoint_Shared_Drawing
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Shared
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+class PHPPowerPoint_Shared_Drawing
+{
+ /**
+ * Convert pixels to EMU
+ *
+ * @param int $pValue Value in pixels
+ * @return int Value in EMU
+ */
+ public static function pixelsToEMU($pValue = 0) {
+ return round($pValue * 9525);
+ }
+
+ /**
+ * Convert EMU to pixels
+ *
+ * @param int $pValue Value in EMU
+ * @return int Value in pixels
+ */
+ public static function EMUToPixels($pValue = 0) {
+ if ($pValue != 0) {
+ return round($pValue / 9525);
+ } else {
+ return 0;
+ }
+ }
+
+ /**
+ * Convert pixels to points
+ *
+ * @param int $pValue Value in pixels
+ * @return int Value in points
+ */
+ public static function pixelsToPoints($pValue = 0) {
+ return $pValue * 0.67777777;
+ }
+
+ /**
+ * Convert points width to pixels
+ *
+ * @param int $pValue Value in points
+ * @return int Value in pixels
+ */
+ public static function pointsToPixels($pValue = 0) {
+ if ($pValue != 0) {
+ return $pValue * 1.333333333;
+ } else {
+ return 0;
+ }
+ }
+
+ /**
+ * Convert degrees to angle
+ *
+ * @param int $pValue Degrees
+ * @return int Angle
+ */
+ public static function degreesToAngle($pValue = 0) {
+ return (int)round($pValue * 60000);
+ }
+
+ /**
+ * Convert angle to degrees
+ *
+ * @param int $pValue Angle
+ * @return int Degrees
+ */
+ public static function angleToDegrees($pValue = 0) {
+ if ($pValue != 0) {
+ return round($pValue / 60000);
+ } else {
+ return 0;
+ }
+ }
+}
diff --git a/admin/exportclases/PHPPowerPoint/Shared/File.php b/admin/exportclases/PHPPowerPoint/Shared/File.php
new file mode 100644
index 0000000..c912a04
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/Shared/File.php
@@ -0,0 +1,98 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * Copyright (c) 2009 - 2010 PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Shared
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/**
+ * PHPPowerPoint_Shared_File
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Shared
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+class PHPPowerPoint_Shared_File
+{
+ /**
+ * Verify if a file exists
+ *
+ * @param string $pFilename Filename
+ * @return bool
+ */
+ public static function file_exists($pFilename) {
+ // Sick construction, but it seems that
+ // file_exists returns strange values when
+ // doing the original file_exists on ZIP archives...
+ if ( strtolower(substr($pFilename, 0, 3)) == 'zip' ) {
+ // Open ZIP file and verify if the file exists
+ $zipFile = substr($pFilename, 6, strpos($pFilename, '#') - 6);
+ $archiveFile = substr($pFilename, strpos($pFilename, '#') + 1);
+
+ $zip = new ZipArchive();
+ if ($zip->open($zipFile) === true) {
+ $returnValue = ($zip->getFromName($archiveFile) !== false);
+ $zip->close();
+ return $returnValue;
+ } else {
+ return false;
+ }
+ } else {
+ // Regular file_exists
+ return file_exists($pFilename);
+ }
+ }
+
+ /**
+ * Returns canonicalized absolute pathname, also for ZIP archives
+ *
+ * @param string $pFilename
+ * @return string
+ */
+ public static function realpath($pFilename) {
+ // Returnvalue
+ $returnValue = '';
+
+ // Try using realpath()
+ $returnValue = realpath($pFilename);
+
+ // Found something?
+ if ($returnValue == '' || is_null($returnValue)) {
+ $pathArray = split('/' , $pFilename);
+ while(in_array('..', $pathArray) && $pathArray[0] != '..') {
+ for ($i = 0; $i < count($pathArray); ++$i) {
+ if ($pathArray[$i] == '..' && $i > 0) {
+ unset($pathArray[$i]);
+ unset($pathArray[$i - 1]);
+ break;
+ }
+ }
+ }
+ $returnValue = implode('/', $pathArray);
+ }
+
+ // Return
+ return $returnValue;
+ }
+}
diff --git a/admin/exportclases/PHPPowerPoint/Shared/Font.php b/admin/exportclases/PHPPowerPoint/Shared/Font.php
new file mode 100644
index 0000000..342146a
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/Shared/Font.php
@@ -0,0 +1,67 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * Copyright (c) 2009 - 2010 PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Shared
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/**
+ * PHPPowerPoint_Shared_Font
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Shared
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+class PHPPowerPoint_Shared_Font
+{
+ /**
+ * Calculate an (approximate) pixel size, based on a font points size
+ *
+ * @param int $fontSizeInPoints Font size (in points)
+ * @return int Font size (in pixels)
+ */
+ public static function fontSizeToPixels($fontSizeInPoints = 12) {
+ return ((16 / 12) * $fontSizeInPoints);
+ }
+
+ /**
+ * Calculate an (approximate) pixel size, based on inch size
+ *
+ * @param int $sizeInInch Font size (in inch)
+ * @return int Size (in pixels)
+ */
+ public static function inchSizeToPixels($sizeInInch = 1) {
+ return ($sizeInInch * 96);
+ }
+
+ /**
+ * Calculate an (approximate) pixel size, based on centimeter size
+ *
+ * @param int $sizeInCm Font size (in centimeters)
+ * @return int Size (in pixels)
+ */
+ public static function centimeterSizeToPixels($sizeInCm = 1) {
+ return ($sizeInCm * 37.795275591);
+ }
+}
diff --git a/admin/exportclases/PHPPowerPoint/Shared/String.php b/admin/exportclases/PHPPowerPoint/Shared/String.php
new file mode 100644
index 0000000..0310056
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/Shared/String.php
@@ -0,0 +1,270 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * Copyright (c) 2009 - 2010 PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Shared
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/**
+ * PHPPowerPoint_Shared_String
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Shared
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+class PHPPowerPoint_Shared_String
+{
+ /**
+ * Control characters array
+ *
+ * @var string[]
+ */
+ private static $_controlCharacters = array();
+
+ /**
+ * Is mbstring extension avalable?
+ *
+ * @var boolean
+ */
+ private static $_isMbstringEnabled;
+
+ /**
+ * Is iconv extension avalable?
+ *
+ * @var boolean
+ */
+ private static $_isIconvEnabled;
+
+ /**
+ * Build control characters array
+ */
+ private static function _buildControlCharacters() {
+ for ($i = 0; $i <= 19; ++$i) {
+ if ($i != 9 && $i != 10 && $i != 13) {
+ $find = '_x' . sprintf('%04s' , strtoupper(dechex($i))) . '_';
+ $replace = chr($i);
+ self::$_controlCharacters[$find] = $replace;
+ }
+ }
+ }
+
+ /**
+ * Get whether mbstring extension is available
+ *
+ * @return boolean
+ */
+ public static function getIsMbstringEnabled()
+ {
+ if (isset(self::$_isMbstringEnabled)) {
+ return self::$_isMbstringEnabled;
+ }
+
+ self::$_isMbstringEnabled = function_exists('mb_convert_encoding') ?
+ true : false;
+
+ return self::$_isMbstringEnabled;
+ }
+
+ /**
+ * Get whether iconv extension is available
+ *
+ * @return boolean
+ */
+ public static function getIsIconvEnabled()
+ {
+ if (isset(self::$_isIconvEnabled)) {
+ return self::$_isIconvEnabled;
+ }
+
+ self::$_isIconvEnabled = function_exists('iconv') ?
+ true : false;
+
+ return self::$_isIconvEnabled;
+ }
+
+ /**
+ * Convert from OpenXML escaped control character to PHP control character
+ *
+ * Excel 2007 team:
+ * ----------------
+ * That's correct, control characters are stored directly in the shared-strings table.
+ * We do encode characters that cannot be represented in XML using the following escape sequence:
+ * _xHHHH_ where H represents a hexadecimal character in the character's value...
+ * So you could end up with something like _x0008_ in a string (either in a cell value (<v>)
+ * element or in the shared string <t> element.
+ *
+ * @param string $value Value to unescape
+ * @return string
+ */
+ public static function ControlCharacterOOXML2PHP($value = '') {
+ if(empty(self::$_controlCharacters)) {
+ self::_buildControlCharacters();
+ }
+
+ return str_replace( array_keys(self::$_controlCharacters), array_values(self::$_controlCharacters), $value );
+ }
+
+ /**
+ * Convert from PHP control character to OpenXML escaped control character
+ *
+ * Excel 2007 team:
+ * ----------------
+ * That's correct, control characters are stored directly in the shared-strings table.
+ * We do encode characters that cannot be represented in XML using the following escape sequence:
+ * _xHHHH_ where H represents a hexadecimal character in the character's value...
+ * So you could end up with something like _x0008_ in a string (either in a cell value (<v>)
+ * element or in the shared string <t> element.
+ *
+ * @param string $value Value to escape
+ * @return string
+ */
+ public static function ControlCharacterPHP2OOXML($value = '') {
+ if(empty(self::$_controlCharacters)) {
+ self::_buildControlCharacters();
+ }
+
+ return str_replace( array_values(self::$_controlCharacters), array_keys(self::$_controlCharacters), $value );
+ }
+
+ /**
+ * Check if a string contains UTF8 data
+ *
+ * @param string $value
+ * @return boolean
+ */
+ public static function IsUTF8($value = '') {
+ return utf8_encode(utf8_decode($value)) === $value;
+ }
+
+ /**
+ * Formats a numeric value as a string for output in various output writers
+ *
+ * @param mixed $value
+ * @return string
+ */
+ public static function FormatNumber($value) {
+ return number_format($value, 2, '.', '');
+ }
+
+ /**
+ * Converts a UTF-8 string into BIFF8 Unicode string data (8-bit string length)
+ * Writes the string using uncompressed notation, no rich text, no Asian phonetics
+ * If mbstring extension is not available, ASCII is assumed, and compressed notation is used
+ * although this will give wrong results for non-ASCII strings
+ * see OpenOffice.org's Documentation of the Microsoft Excel File Format, sect. 2.5.3
+ *
+ * @param string $value UTF-8 encoded string
+ * @return string
+ */
+ public static function UTF8toBIFF8UnicodeShort($value)
+ {
+ // character count
+ $ln = self::CountCharacters($value, 'UTF-8');
+
+ // option flags
+ $opt = (self::getIsMbstringEnabled() || self::getIsIconvEnabled()) ?
+ 0x0001 : 0x0000;
+
+ // characters
+ $chars = self::ConvertEncoding($value, 'UTF-16LE', 'UTF-8');
+
+ $data = pack('CC', $ln, $opt) . $chars;
+ return $data;
+ }
+
+ /**
+ * Converts a UTF-8 string into BIFF8 Unicode string data (16-bit string length)
+ * Writes the string using uncompressed notation, no rich text, no Asian phonetics
+ * If mbstring extension is not available, ASCII is assumed, and compressed notation is used
+ * although this will give wrong results for non-ASCII strings
+ * see OpenOffice.org's Documentation of the Microsoft Excel File Format, sect. 2.5.3
+ *
+ * @param string $value UTF-8 encoded string
+ * @return string
+ */
+ public static function UTF8toBIFF8UnicodeLong($value)
+ {
+ // character count
+ $ln = self::CountCharacters($value, 'UTF-8');
+
+ // option flags
+ $opt = (self::getIsMbstringEnabled() || self::getIsIconvEnabled()) ?
+ 0x0001 : 0x0000;
+
+ // characters
+ $chars = self::ConvertEncoding($value, 'UTF-16LE', 'UTF-8');
+
+ $data = pack('vC', $ln, $opt) . $chars;
+ return $data;
+ }
+
+ /**
+ * Convert string from one encoding to another. First try mbstring, then iconv, or no convertion
+ *
+ * @param string $value
+ * @param string $to Encoding to convert to, e.g. 'UTF-8'
+ * @param string $from Encoding to convert from, e.g. 'UTF-16LE'
+ * @return string
+ */
+ public static function ConvertEncoding($value, $to, $from)
+ {
+ if (self::getIsMbstringEnabled()) {
+ $value = mb_convert_encoding($value, $to, $from);
+ return $value;
+ }
+
+ if (self::getIsIconvEnabled()) {
+ $value = iconv($from, $to, $value);
+ return $value;
+ }
+
+ // else, no conversion
+ return $value;
+ }
+
+ /**
+ * Get character count. First try mbstring, then iconv, finally strlen
+ *
+ * @param string $value
+ * @param string $enc Encoding
+ * @return int Character count
+ */
+ public static function CountCharacters($value, $enc = 'UTF-8')
+ {
+ if (self::getIsMbstringEnabled()) {
+ $count = mb_strlen($value, $enc);
+ return $count;
+ }
+
+ if (self::getIsIconvEnabled()) {
+ $count = iconv_strlen($value, $enc);
+ return $count;
+ }
+
+ // else strlen
+ $count = strlen($value);
+ return $count;
+ }
+
+}
diff --git a/admin/exportclases/PHPPowerPoint/Shared/XMLWriter.php b/admin/exportclases/PHPPowerPoint/Shared/XMLWriter.php
new file mode 100644
index 0000000..da434a5
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/Shared/XMLWriter.php
@@ -0,0 +1,141 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * Copyright (c) 2009 - 2010 PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Shared
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+if (!defined('DATE_W3C')) {
+ define('DATE_W3C', 'Y-m-d\TH:i:sP');
+}
+
+/**
+ * PHPPowerPoint_Shared_XMLWriter
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Shared
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+class PHPPowerPoint_Shared_XMLWriter {
+ /** Temporary storage method */
+ const STORAGE_MEMORY = 1;
+ const STORAGE_DISK = 2;
+
+ /**
+ * Internal XMLWriter
+ *
+ * @var XMLWriter
+ */
+ private $_xmlWriter;
+
+ /**
+ * Temporary filename
+ *
+ * @var string
+ */
+ private $_tempFileName = '';
+
+ /**
+ * Create a new PHPPowerPoint_Shared_XMLWriter instance
+ *
+ * @param int $pTemporaryStorage Temporary storage location
+ * @param string $pTemporaryStorageFolder Temporary storage folder
+ */
+ public function __construct($pTemporaryStorage = self::STORAGE_MEMORY, $pTemporaryStorageFolder = './') {
+ // Create internal XMLWriter
+ $this->_xmlWriter = new XMLWriter();
+
+ // Open temporary storage
+ if ($pTemporaryStorage == self::STORAGE_MEMORY) {
+ $this->_xmlWriter->openMemory();
+ } else {
+ // Create temporary filename
+ $this->_tempFileName = @tempnam($pTemporaryStorageFolder, 'xml');
+
+ // Open storage
+ if ($this->_xmlWriter->openUri($this->_tempFileName) === false) {
+ // Fallback to memory...
+ $this->_xmlWriter->openMemory();
+ }
+ }
+
+ // Set default values
+ $this->_xmlWriter->setIndent(true);
+ }
+
+ /**
+ * Destructor
+ */
+ public function __destruct() {
+ // Desctruct XMLWriter
+ unset($this->_xmlWriter);
+
+ // Unlink temporary files
+ if ($this->_tempFileName != '') {
+ @unlink($this->_tempFileName);
+ }
+ }
+
+ /**
+ * Get written data
+ *
+ * @return $data
+ */
+ public function getData() {
+ if ($this->_tempFileName == '') {
+ return $this->_xmlWriter->outputMemory(true);
+ } else {
+ $this->_xmlWriter->flush();
+ return file_get_contents($this->_tempFileName);
+ }
+ }
+
+ /**
+ * Catch function calls (and pass them to internal XMLWriter)
+ *
+ * @param unknown_type $function
+ * @param unknown_type $args
+ */
+ public function __call($function, $args) {
+ try {
+ @call_user_func_array(array($this->_xmlWriter, $function), $args);
+ } catch (Exception $ex) {
+ // Do nothing!
+ }
+ }
+
+ /**
+ * Fallback method for writeRaw, introduced in PHP 5.2
+ *
+ * @param string $text
+ * @return string
+ */
+ public function writeRaw($text)
+ {
+ if (isset($this->_xmlWriter) && is_object($this->_xmlWriter) && (method_exists($this->_xmlWriter, 'writeRaw'))) {
+ return $this->_xmlWriter->writeRaw($text);
+ }
+
+ return $this->text($text);
+ }
+}
diff --git a/admin/exportclases/PHPPowerPoint/Shared/ZipStreamWrapper.php b/admin/exportclases/PHPPowerPoint/Shared/ZipStreamWrapper.php
new file mode 100644
index 0000000..1d5a5f5
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/Shared/ZipStreamWrapper.php
@@ -0,0 +1,182 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * Copyright (c) 2009 - 2010 PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Shared
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/** Register new zip wrapper */
+PHPPowerPoint_Shared_ZipStreamWrapper::register();
+
+
+/**
+ * PHPPowerPoint_Shared_ZipStreamWrapper
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Shared
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+class PHPPowerPoint_Shared_ZipStreamWrapper {
+ /**
+ * Internal ZipAcrhive
+ *
+ * @var ZipAcrhive
+ */
+ private $_archive;
+
+ /**
+ * Filename in ZipAcrhive
+ *
+ * @var string
+ */
+ private $_fileNameInArchive = '';
+
+ /**
+ * Position in file
+ *
+ * @var int
+ */
+ private $_position = 0;
+
+ /**
+ * Data
+ *
+ * @var mixed
+ */
+ private $_data = '';
+
+ /**
+ * Register wrapper
+ */
+ public static function register() {
+ @stream_wrapper_unregister("zip");
+ @stream_wrapper_register("zip", __CLASS__);
+ }
+
+ /**
+ * Open stream
+ */
+ public function stream_open($path, $mode, $options, &$opened_path) {
+ // Check for mode
+ if ($mode{0} != 'r') {
+ throw new Exception('Mode ' . $mode . ' is not supported. Only read mode is supported.');
+ }
+
+ // Parse URL
+ $url = @parse_url($path);
+
+ // Fix URL
+ if (!is_array($url)) {
+ $url['host'] = substr($path, strlen('zip://'));
+ $url['path'] = '';
+ }
+ if (strpos($url['host'], '#') !== false) {
+ if (!isset($url['fragment'])) {
+ $url['fragment'] = substr($url['host'], strpos($url['host'], '#') + 1) . $url['path'];
+ $url['host'] = substr($url['host'], 0, strpos($url['host'], '#'));
+ unset($url['path']);
+ }
+ } else {
+ $url['host'] = $url['host'] . $url['path'];
+ unset($url['path']);
+ }
+
+ // Open archive
+ $this->_archive = new ZipArchive();
+ $this->_archive->open($url['host']);
+
+ $this->_fileNameInArchive = $url['fragment'];
+ $this->_position = 0;
+ $this->_data = $this->_archive->getFromName( $this->_fileNameInArchive );
+
+ return true;
+ }
+
+ /**
+ * Stat stream
+ */
+ public function stream_stat() {
+ return $this->_archive->statName( $this->_fileNameInArchive );
+ }
+
+ /**
+ * Read stream
+ */
+ function stream_read($count) {
+ $ret = substr($this->_data, $this->_position, $count);
+ $this->_position += strlen($ret);
+ return $ret;
+ }
+
+ /**
+ * Tell stream
+ */
+ public function stream_tell() {
+ return $this->_position;
+ }
+
+ /**
+ * EOF stream
+ */
+ public function stream_eof() {
+ return $this->_position >= strlen($this->_data);
+ }
+
+ /**
+ * Seek stream
+ */
+ public function stream_seek($offset, $whence) {
+ switch ($whence) {
+ case SEEK_SET:
+ if ($offset < strlen($this->_data) && $offset >= 0) {
+ $this->_position = $offset;
+ return true;
+ } else {
+ return false;
+ }
+ break;
+
+ case SEEK_CUR:
+ if ($offset >= 0) {
+ $this->_position += $offset;
+ return true;
+ } else {
+ return false;
+ }
+ break;
+
+ case SEEK_END:
+ if (strlen($this->_data) + $offset >= 0) {
+ $this->_position = strlen($this->_data) + $offset;
+ return true;
+ } else {
+ return false;
+ }
+ break;
+
+ default:
+ return false;
+ }
+ }
+}
diff --git a/admin/exportclases/PHPPowerPoint/Slide.php b/admin/exportclases/PHPPowerPoint/Slide.php
new file mode 100644
index 0000000..6037cbe
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/Slide.php
@@ -0,0 +1,261 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * Copyright (c) 2009 - 2010 PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Slide
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/** PHPPowerPoint */
+require_once 'PHPPowerPoint.php';
+
+/** PHPPowerPoint_Slide_Layout */
+require_once 'PHPPowerPoint/Slide/Layout.php';
+
+/** PHPPowerPoint_Shape */
+require_once 'PHPPowerPoint/Shape.php';
+
+/** PHPPowerPoint_Shape_RichText */
+require_once 'PHPPowerPoint/Shape/RichText.php';
+
+/** PHPPowerPoint_Shape_BaseDrawing */
+require_once 'PHPPowerPoint/Shape/BaseDrawing.php';
+
+/** PHPPowerPoint_Shape_Drawing */
+require_once 'PHPPowerPoint/Shape/Drawing.php';
+
+/** PHPPowerPoint_Shape_MemoryDrawing */
+require_once 'PHPPowerPoint/Shape/MemoryDrawing.php';
+
+/** PHPPowerPoint_IComparable */
+require_once 'PHPPowerPoint/IComparable.php';
+
+/** PHPPowerPoint_Shared_Font */
+require_once 'PHPPowerPoint/Shared/Font.php';
+
+/** PHPPowerPoint_Shared_String */
+require_once 'PHPPowerPoint/Shared/String.php';
+
+
+/**
+ * PHPPowerPoint_Slide
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Slide
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+class PHPPowerPoint_Slide implements PHPPowerPoint_IComparable
+{
+ /**
+ * Parent presentation
+ *
+ * @var PHPPowerPoint
+ */
+ private $_parent;
+
+ /**
+ * Collection of shapes
+ *
+ * @var PHPPowerPoint_Shape[]
+ */
+ private $_shapeCollection = null;
+
+ /**
+ * Slide identifier
+ *
+ * @var string
+ */
+ private $_identifier;
+
+ /**
+ * Slide layout
+ *
+ * @var string
+ */
+ private $_slideLayout = PHPPowerPoint_Slide_Layout::BLANK;
+
+ /**
+ * Create a new slide
+ *
+ * @param PHPPowerPoint $pParent
+ */
+ public function __construct(PHPPowerPoint $pParent = null)
+ {
+ // Set parent
+ $this->_parent = $pParent;
+
+ // Shape collection
+ $this->_shapeCollection = new ArrayObject();
+
+ // Set identifier
+ $this->_identifier = md5(rand(0,9999) . time());
+ }
+
+ /**
+ * Get collection of shapes
+ *
+ * @return PHPPowerPoint_Shape[]
+ */
+ public function getShapeCollection()
+ {
+ return $this->_shapeCollection;
+ }
+
+ /**
+ * Add shape to slide
+ *
+ * @param PHPPowerPoint_Shape $shape
+ */
+ public function addShape(PHPPowerPoint_Shape $shape)
+ {
+ $shape->setSlide($this);
+ }
+
+ /**
+ * Create rich text shape
+ *
+ * @return PHPPowerPoint_Shape_RichText
+ */
+ public function createRichTextShape()
+ {
+ $shape = new PHPPowerPoint_Shape_RichText();
+ $this->addShape($shape);
+ return $shape;
+ }
+
+ /**
+ * Create drawing shape
+ *
+ * @return PHPPowerPoint_Shape_Drawing
+ */
+ public function createDrawingShape()
+ {
+ $shape = new PHPPowerPoint_Shape_Drawing();
+ $this->addShape($shape);
+ return $shape;
+ }
+
+ /**
+ * Get parent
+ *
+ * @return PHPPowerPoint
+ */
+ public function getParent() {
+ return $this->_parent;
+ }
+
+ /**
+ * Re-bind parent
+ *
+ * @param PHPPowerPoint $parent
+ */
+ public function rebindParent(PHPPowerPoint $parent) {
+ $this->_parent->removeSlideByIndex(
+ $this->_parent->getIndex($this)
+ );
+ $this->_parent = $parent;
+ }
+
+ /**
+ * Get slide layout
+ *
+ * @return string
+ */
+ public function getSlideLayout() {
+ return $this->_slideLayout;
+ }
+
+ /**
+ * Set slide layout
+ *
+ * @param string $layout
+ */
+ public function setSlideLayout($layout = PHPPowerPoint_Slide_Layout::BLANK) {
+ $this->_slideLayout = $layout;
+ }
+
+ /**
+ * Get hash code
+ *
+ * @return string Hash code
+ */
+ public function getHashCode() {
+ return md5(
+ $this->_identifier
+ . __CLASS__
+ );
+ }
+
+ /**
+ * Hash index
+ *
+ * @var string
+ */
+ private $_hashIndex;
+
+ /**
+ * Get hash index
+ *
+ * Note that this index may vary during script execution! Only reliable moment is
+ * while doing a write of a workbook and when changes are not allowed.
+ *
+ * @return string Hash index
+ */
+ public function getHashIndex() {
+ return $this->_hashIndex;
+ }
+
+ /**
+ * Set hash index
+ *
+ * Note that this index may vary during script execution! Only reliable moment is
+ * while doing a write of a workbook and when changes are not allowed.
+ *
+ * @param string $value Hash index
+ */
+ public function setHashIndex($value) {
+ $this->_hashIndex = $value;
+ }
+
+ /**
+ * Copy slide (!= clone!)
+ *
+ * @return PHPPowerPoint_Slide
+ */
+ public function copy() {
+ $copied = clone $this;
+
+ return $copied;
+ }
+
+ /**
+ * Implement PHP __clone to create a deep clone, not just a shallow copy.
+ */
+ public function __clone() {
+ foreach ($this as $key => $val) {
+ if (is_object($val) || (is_array($val))) {
+ $this->{$key} = unserialize(serialize($val));
+ }
+ }
+ }
+}
diff --git a/admin/exportclases/PHPPowerPoint/Slide/Layout.php b/admin/exportclases/PHPPowerPoint/Slide/Layout.php
new file mode 100644
index 0000000..46548c8
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/Slide/Layout.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * Copyright (c) 2009 - 2010 PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Slide
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/**
+ * PHPPowerPoint_Slide_Layout
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Slide
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+class PHPPowerPoint_Slide_Layout
+{
+ /** Layout constants */
+ const TITLE_SLIDE = 'Title Slide';
+ const TITLE_AND_CONTENT = 'Title and Content';
+ const SECTION_HEADER = 'Section Header';
+ const TWO_CONTENT = 'Two Content';
+ const COMPARISON = 'Comparison';
+ const TITLE_ONLY = 'Title Only';
+ const BLANK = 'Blank';
+ const CONTENT_WITH_CAPTION = 'Content with Caption';
+ const PICTURE_WITH_CAPTION = 'Picture with Caption';
+ const TITLE_AND_VERTICAL_TEXT = 'Title and Vertical Text';
+ const VERTICAL_TITLE_AND_TEXT = 'Vertical Title and Text';
+}
diff --git a/admin/exportclases/PHPPowerPoint/SlideIterator.php b/admin/exportclases/PHPPowerPoint/SlideIterator.php
new file mode 100644
index 0000000..4aed489
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/SlideIterator.php
@@ -0,0 +1,118 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * Copyright (c) 2009 - 2010 PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/** PHPPowerPoint */
+require_once 'PHPPowerPoint.php';
+
+/** PHPPowerPoint_Slide */
+require_once 'PHPPowerPoint/Slide.php';
+
+
+/**
+ * PHPPowerPoint_SlideIterator
+ *
+ * Used to iterate slides in PHPPowerPoint
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+class PHPPowerPoint_SlideIterator extends IteratorIterator
+{
+ /**
+ * Presentation to iterate
+ *
+ * @var PHPPowerPoint
+ */
+ private $_subject;
+
+ /**
+ * Current iterator position
+ *
+ * @var int
+ */
+ private $_position = 0;
+
+ /**
+ * Create a new slide iterator
+ *
+ * @param PHPPowerPoint $subject
+ */
+ public function __construct(PHPPowerPoint $subject = null) {
+ // Set subject
+ $this->_subject = $subject;
+ }
+
+ /**
+ * Destructor
+ */
+ public function __destruct() {
+ unset($this->_subject);
+ }
+
+ /**
+ * Rewind iterator
+ */
+ public function rewind() {
+ $this->_position = 0;
+ }
+
+ /**
+ * Current PHPPowerPoint_Slide
+ *
+ * @return PHPPowerPoint_Slide
+ */
+ public function current() {
+ return $this->_subject->getSlide($this->_position);
+ }
+
+ /**
+ * Current key
+ *
+ * @return int
+ */
+ public function key() {
+ return $this->_position;
+ }
+
+ /**
+ * Next value
+ */
+ public function next() {
+ ++$this->_position;
+ }
+
+ /**
+ * More PHPPowerPoint_Slide instances available?
+ *
+ * @return boolean
+ */
+ public function valid() {
+ return $this->_position < $this->_subject->getSlideCount();
+ }
+}
diff --git a/admin/exportclases/PHPPowerPoint/Style/Alignment.php b/admin/exportclases/PHPPowerPoint/Style/Alignment.php
new file mode 100644
index 0000000..996d064
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/Style/Alignment.php
@@ -0,0 +1,243 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * Copyright (c) 2009 - 2010 PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Style
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/** PHPPowerPoint_IComparable */
+require_once 'PHPPowerPoint/IComparable.php';
+
+
+/**
+ * PHPPowerPoint_Style_Alignment
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Style
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+class PHPPowerPoint_Style_Alignment implements PHPPowerPoint_IComparable
+{
+ /* Horizontal alignment styles */
+ const HORIZONTAL_LEFT = 'l';
+ const HORIZONTAL_RIGHT = 'r';
+ const HORIZONTAL_CENTER = 'ctr';
+ const HORIZONTAL_JUSTIFY = 'just';
+ const HORIZONTAL_DISTRIBUTED = 'dist';
+
+ /* Vertical alignment styles */
+ const VERTICAL_BASE = 'base';
+ const VERTICAL_AUTO = 'auto';
+ const VERTICAL_BOTTOM = 'b';
+ const VERTICAL_TOP = 't';
+ const VERTICAL_CENTER = 'ctr';
+
+ /**
+ * Horizontal
+ *
+ * @var string
+ */
+ private $_horizontal;
+
+ /**
+ * Vertical
+ *
+ * @var string
+ */
+ private $_vertical;
+
+ /**
+ * Level
+ *
+ * @var int
+ */
+ private $_level;
+
+ /**
+ * Indent - only possible with horizontal alignment left and right
+ *
+ * @var int
+ */
+ private $_indent;
+
+ /**
+ * Create a new PHPPowerPoint_Style_Alignment
+ */
+ public function __construct()
+ {
+ // Initialise values
+ $this->_horizontal = PHPPowerPoint_Style_Alignment::HORIZONTAL_LEFT;
+ $this->_vertical = PHPPowerPoint_Style_Alignment::VERTICAL_BASE;
+ $this->_level = 0;
+ $this->_indent = 0;
+ }
+
+ /**
+ * Get Horizontal
+ *
+ * @return string
+ */
+ public function getHorizontal() {
+ return $this->_horizontal;
+ }
+
+ /**
+ * Set Horizontal
+ *
+ * @param string $pValue
+ */
+ public function setHorizontal($pValue = PHPPowerPoint_Style_Alignment::HORIZONTAL_LEF) {
+ if ($pValue == '') {
+ $pValue = PHPPowerPoint_Style_Alignment::HORIZONTAL_LEFT;
+ }
+ $this->_horizontal = $pValue;
+ }
+
+ /**
+ * Get Vertical
+ *
+ * @return string
+ */
+ public function getVertical() {
+ return $this->_vertical;
+ }
+
+ /**
+ * Set Vertical
+ *
+ * @param string $pValue
+ */
+ public function setVertical($pValue = PHPPowerPoint_Style_Alignment::VERTICAL_BASE) {
+ if ($pValue == '') {
+ $pValue = PHPPowerPoint_Style_Alignment::VERTICAL_BASE;
+ }
+ $this->_vertical = $pValue;
+ }
+
+ /**
+ * Get Level
+ *
+ * @return int
+ */
+ public function getLevel() {
+ return $this->_level;
+ }
+
+ /**
+ * Set Level
+ *
+ * @param int $pValue Ranging 0 - 8
+ * @throws Exception
+ */
+ public function setLevel($pValue = 0) {
+ if ($pValue < 0 || $pValue > 8) {
+ throw new Exception("Invalid value: shoul be range 0 - 8.");
+ }
+ $this->_level = $pValue;
+ }
+
+ /**
+ * Get indent
+ *
+ * @return int
+ */
+ public function getIndent() {
+ return $this->_indent;
+ }
+
+ /**
+ * Set indent
+ *
+ * @param int $pValue
+ */
+ public function setIndent($pValue = 0) {
+ if ($pValue > 0) {
+ if ($this->getHorizontal() != self::HORIZONTAL_GENERAL && $this->getHorizontal() != self::HORIZONTAL_LEFT && $this->getHorizontal() != self::HORIZONTAL_RIGHT) {
+ $pValue = 0; // indent not supported
+ }
+ }
+
+ $this->_indent = $pValue;
+ }
+
+ /**
+ * Get hash code
+ *
+ * @return string Hash code
+ */
+ public function getHashCode() {
+ return md5(
+ $this->_horizontal
+ . $this->_vertical
+ . $this->_level
+ . $this->_indent
+ . __CLASS__
+ );
+ }
+
+ /**
+ * Hash index
+ *
+ * @var string
+ */
+ private $_hashIndex;
+
+ /**
+ * Get hash index
+ *
+ * Note that this index may vary during script execution! Only reliable moment is
+ * while doing a write of a workbook and when changes are not allowed.
+ *
+ * @return string Hash index
+ */
+ public function getHashIndex() {
+ return $this->_hashIndex;
+ }
+
+ /**
+ * Set hash index
+ *
+ * Note that this index may vary during script execution! Only reliable moment is
+ * while doing a write of a workbook and when changes are not allowed.
+ *
+ * @param string $value Hash index
+ */
+ public function setHashIndex($value) {
+ $this->_hashIndex = $value;
+ }
+
+ /**
+ * Implement PHP __clone to create a deep clone, not just a shallow copy.
+ */
+ public function __clone() {
+ $vars = get_object_vars($this);
+ foreach ($vars as $key => $value) {
+ if (is_object($value)) {
+ $this->$key = clone $value;
+ } else {
+ $this->$key = $value;
+ }
+ }
+ }
+}
diff --git a/admin/exportclases/PHPPowerPoint/Style/Color.php b/admin/exportclases/PHPPowerPoint/Style/Color.php
new file mode 100644
index 0000000..4f73c31
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/Style/Color.php
@@ -0,0 +1,170 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * Copyright (c) 2009 - 2010 PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Style
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/** PHPPowerPoint_IComparable */
+require_once 'PHPPowerPoint/IComparable.php';
+
+
+/**
+ * PHPPowerPoint_Style_Color
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Style
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+class PHPPowerPoint_Style_Color implements PHPPowerPoint_IComparable
+{
+ /* Colors */
+ const COLOR_BLACK = 'FF000000';
+ const COLOR_WHITE = 'FFFFFFFF';
+ const COLOR_RED = 'FFFF0000';
+ const COLOR_DARKRED = 'FF800000';
+ const COLOR_BLUE = 'FF0000FF';
+ const COLOR_DARKBLUE = 'FF000080';
+ const COLOR_GREEN = 'FF00FF00';
+ const COLOR_DARKGREEN = 'FF008000';
+ const COLOR_YELLOW = 'FFFFFF00';
+ const COLOR_DARKYELLOW = 'FF808000';
+
+ /**
+ * ARGB - Alpha RGB
+ *
+ * @var string
+ */
+ private $_argb;
+
+ /**
+ * Create a new PHPPowerPoint_Style_Color
+ *
+ * @param string $pARGB
+ */
+ public function __construct($pARGB = PHPPowerPoint_Style_Color::COLOR_BLACK)
+ {
+ // Initialise values
+ $this->_argb = $pARGB;
+ }
+
+ /**
+ * Get ARGB
+ *
+ * @return string
+ */
+ public function getARGB() {
+ return $this->_argb;
+ }
+
+ /**
+ * Set ARGB
+ *
+ * @param string $pValue
+ */
+ public function setARGB($pValue = PHPPowerPoint_Style_Color::COLOR_BLACK) {
+ if ($pValue == '') {
+ $pValue = PHPPowerPoint_Style_Color::COLOR_BLACK;
+ }
+ $this->_argb = $pValue;
+ }
+
+ /**
+ * Get RGB
+ *
+ * @return string
+ */
+ public function getRGB() {
+ return substr($this->_argb, 2);
+ }
+
+ /**
+ * Set RGB
+ *
+ * @param string $pValue
+ */
+ public function setRGB($pValue = '000000') {
+ if ($pValue == '') {
+ $pValue = '000000';
+ }
+ $this->_argb = 'FF' . $pValue;
+ }
+
+ /**
+ * Get hash code
+ *
+ * @return string Hash code
+ */
+ public function getHashCode() {
+ return md5(
+ $this->_argb
+ . __CLASS__
+ );
+ }
+
+ /**
+ * Hash index
+ *
+ * @var string
+ */
+ private $_hashIndex;
+
+ /**
+ * Get hash index
+ *
+ * Note that this index may vary during script execution! Only reliable moment is
+ * while doing a write of a workbook and when changes are not allowed.
+ *
+ * @return string Hash index
+ */
+ public function getHashIndex() {
+ return $this->_hashIndex;
+ }
+
+ /**
+ * Set hash index
+ *
+ * Note that this index may vary during script execution! Only reliable moment is
+ * while doing a write of a workbook and when changes are not allowed.
+ *
+ * @param string $value Hash index
+ */
+ public function setHashIndex($value) {
+ $this->_hashIndex = $value;
+ }
+
+ /**
+ * Implement PHP __clone to create a deep clone, not just a shallow copy.
+ */
+ public function __clone() {
+ $vars = get_object_vars($this);
+ foreach ($vars as $key => $value) {
+ if (is_object($value)) {
+ $this->$key = clone $value;
+ } else {
+ $this->$key = $value;
+ }
+ }
+ }
+}
diff --git a/admin/exportclases/PHPPowerPoint/Style/Fill.php b/admin/exportclases/PHPPowerPoint/Style/Fill.php
new file mode 100644
index 0000000..9c3120a
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/Style/Fill.php
@@ -0,0 +1,245 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * Copyright (c) 2009 - 2010 PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Style
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/** PHPPowerPoint_Style_Color */
+require_once 'PHPPowerPoint/Style/Color.php';
+
+/** PHPPowerPoint_IComparable */
+require_once 'PHPPowerPoint/IComparable.php';
+
+
+/**
+ * PHPPowerPoint_Style_Fill
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Style
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+class PHPPowerPoint_Style_Fill implements PHPPowerPoint_IComparable
+{
+ /* Fill types */
+ const FILL_NONE = 'none';
+ const FILL_SOLID = 'solid';
+ const FILL_GRADIENT_LINEAR = 'linear';
+ const FILL_GRADIENT_PATH = 'path';
+ const FILL_PATTERN_DARKDOWN = 'darkDown';
+ const FILL_PATTERN_DARKGRAY = 'darkGray';
+ const FILL_PATTERN_DARKGRID = 'darkGrid';
+ const FILL_PATTERN_DARKHORIZONTAL = 'darkHorizontal';
+ const FILL_PATTERN_DARKTRELLIS = 'darkTrellis';
+ const FILL_PATTERN_DARKUP = 'darkUp';
+ const FILL_PATTERN_DARKVERTICAL = 'darkVertical';
+ const FILL_PATTERN_GRAY0625 = 'gray0625';
+ const FILL_PATTERN_GRAY125 = 'gray125';
+ const FILL_PATTERN_LIGHTDOWN = 'lightDown';
+ const FILL_PATTERN_LIGHTGRAY = 'lightGray';
+ const FILL_PATTERN_LIGHTGRID = 'lightGrid';
+ const FILL_PATTERN_LIGHTHORIZONTAL = 'lightHorizontal';
+ const FILL_PATTERN_LIGHTTRELLIS = 'lightTrellis';
+ const FILL_PATTERN_LIGHTUP = 'lightUp';
+ const FILL_PATTERN_LIGHTVERTICAL = 'lightVertical';
+ const FILL_PATTERN_MEDIUMGRAY = 'mediumGray';
+
+ /**
+ * Fill type
+ *
+ * @var string
+ */
+ private $_fillType;
+
+ /**
+ * Rotation
+ *
+ * @var double
+ */
+ private $_rotation;
+
+ /**
+ * Start color
+ *
+ * @var PHPPowerPoint_Style_Color
+ */
+ private $_startColor;
+
+ /**
+ * End color
+ *
+ * @var PHPPowerPoint_Style_Color
+ */
+ private $_endColor;
+
+ /**
+ * Create a new PHPPowerPoint_Style_Fill
+ */
+ public function __construct()
+ {
+ // Initialise values
+ $this->_fillType = PHPPowerPoint_Style_Fill::FILL_NONE;
+ $this->_rotation = 0;
+ $this->_startColor = new PHPPowerPoint_Style_Color(PHPPowerPoint_Style_Color::COLOR_WHITE);
+ $this->_endColor = new PHPPowerPoint_Style_Color(PHPPowerPoint_Style_Color::COLOR_BLACK);
+ }
+
+ /**
+ * Get Fill Type
+ *
+ * @return string
+ */
+ public function getFillType() {
+ $this->_fillType;
+ }
+
+ /**
+ * Set Fill Type
+ *
+ * @param string $pValue PHPPowerPoint_Style_Fill fill type
+ */
+ public function setFillType($pValue = PHPPowerPoint_Style_Fill::FILL_NONE) {
+ $this->_fillType = $pValue;
+ }
+
+ /**
+ * Get Rotation
+ *
+ * @return double
+ */
+ public function getRotation() {
+ return $this->_rotation;
+ }
+
+ /**
+ * Set Rotation
+ *
+ * @param double $pValue
+ */
+ public function setRotation($pValue = 0) {
+ $this->_rotation = $pValue;
+ }
+
+ /**
+ * Get Start Color
+ *
+ * @return PHPPowerPoint_Style_Color
+ */
+ public function getStartColor() {
+ // It's a get but it may lead to a modified color which we won't detect but in which case we must bind.
+ // So bind as an assurance.
+ return $this->_startColor;
+ }
+
+ /**
+ * Set Start Color
+ *
+ * @param PHPPowerPoint_Style_Color $pValue
+ * @throws Exception
+ */
+ public function setStartColor(PHPPowerPoint_Style_Color $pValue = null) {
+ $this->_startColor = $pValue;
+ }
+
+ /**
+ * Get End Color
+ *
+ * @return PHPPowerPoint_Style_Color
+ */
+ public function getEndColor() {
+ // It's a get but it may lead to a modified color which we won't detect but in which case we must bind.
+ // So bind as an assurance.
+ return $this->_endColor;
+ }
+
+ /**
+ * Set End Color
+ *
+ * @param PHPPowerPoint_Style_Color $pValue
+ * @throws Exception
+ */
+ public function setEndColor(PHPPowerPoint_Style_Color $pValue = null) {
+ $this->_endColor = $pValue;
+ }
+
+ /**
+ * Get hash code
+ *
+ * @return string Hash code
+ */
+ public function getHashCode() {
+ return md5(
+ $this->getFillType()
+ . $this->getRotation()
+ . $this->getStartColor()->getHashCode()
+ . $this->getEndColor()->getHashCode()
+ . __CLASS__
+ );
+ }
+
+ /**
+ * Hash index
+ *
+ * @var string
+ */
+ private $_hashIndex;
+
+ /**
+ * Get hash index
+ *
+ * Note that this index may vary during script execution! Only reliable moment is
+ * while doing a write of a workbook and when changes are not allowed.
+ *
+ * @return string Hash index
+ */
+ public function getHashIndex() {
+ return $this->_hashIndex;
+ }
+
+ /**
+ * Set hash index
+ *
+ * Note that this index may vary during script execution! Only reliable moment is
+ * while doing a write of a workbook and when changes are not allowed.
+ *
+ * @param string $value Hash index
+ */
+ public function setHashIndex($value) {
+ $this->_hashIndex = $value;
+ }
+
+ /**
+ * Implement PHP __clone to create a deep clone, not just a shallow copy.
+ */
+ public function __clone() {
+ $vars = get_object_vars($this);
+ foreach ($vars as $key => $value) {
+ if (is_object($value)) {
+ $this->$key = clone $value;
+ } else {
+ $this->$key = $value;
+ }
+ }
+ }
+}
diff --git a/admin/exportclases/PHPPowerPoint/Style/Font.php b/admin/exportclases/PHPPowerPoint/Style/Font.php
new file mode 100644
index 0000000..8376dfb
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/Style/Font.php
@@ -0,0 +1,411 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * Copyright (c) 2009 - 2010 PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Style
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/** PHPPowerPoint_Style_Color */
+require_once 'PHPPowerPoint/Style/Color.php';
+
+/** PHPPowerPoint_IComparable */
+require_once 'PHPPowerPoint/IComparable.php';
+
+
+/**
+ * PHPPowerPoint_Style_Font
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Style
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+class PHPPowerPoint_Style_Font implements PHPPowerPoint_IComparable
+{
+ /* Underline types */
+ const UNDERLINE_NONE = 'none';
+ const UNDERLINE_DASH = 'dash';
+ const UNDERLINE_DASHHEAVY = 'dashHeavy';
+ const UNDERLINE_DASHLONG = 'dashLong';
+ const UNDERLINE_DASHLONGHEAVY = 'dashLongHeavy';
+ const UNDERLINE_DOUBLE = 'dbl';
+ const UNDERLINE_DOTHASH = 'dotDash';
+ const UNDERLINE_DOTHASHHEAVY = 'dotDashHeavy';
+ const UNDERLINE_DOTDOTDASH = 'dotDotDash';
+ const UNDERLINE_DOTDOTDASHHEAVY = 'dotDotDashHeavy';
+ const UNDERLINE_DOTTED = 'dotted';
+ const UNDERLINE_DOTTEDHEAVY = 'dottedHeavy';
+ const UNDERLINE_HEAVY = 'heavy';
+ const UNDERLINE_SINGLE = 'sng';
+ const UNDERLINE_WAVY = 'wavy';
+ const UNDERLINE_WAVYDOUBLE = 'wavyDbl';
+ const UNDERLINE_WAVYHEAVY = 'wavyHeavy';
+ const UNDERLINE_WORDS = 'words';
+
+ /**
+ * Name
+ *
+ * @var string
+ */
+ private $_name;
+
+ /**
+ * Bold
+ *
+ * @var boolean
+ */
+ private $_bold;
+
+ /**
+ * Italic
+ *
+ * @var boolean
+ */
+ private $_italic;
+
+ /**
+ * Superscript
+ *
+ * @var boolean
+ */
+ private $_superScript;
+
+ /**
+ * Subscript
+ *
+ * @var boolean
+ */
+ private $_subScript;
+
+ /**
+ * Underline
+ *
+ * @var string
+ */
+ private $_underline;
+
+ /**
+ * Strikethrough
+ *
+ * @var boolean
+ */
+ private $_strikethrough;
+
+ /**
+ * Foreground color
+ *
+ * @var PHPPowerPoint_Style_Color
+ */
+ private $_color;
+
+ /**
+ * Create a new PHPPowerPoint_Style_Font
+ */
+ public function __construct()
+ {
+ // Initialise values
+ $this->_name = 'Calibri';
+ $this->_size = 10;
+ $this->_bold = false;
+ $this->_italic = false;
+ $this->_superScript = false;
+ $this->_subScript = false;
+ $this->_underline = PHPPowerPoint_Style_Font::UNDERLINE_NONE;
+ $this->_strikethrough = false;
+ $this->_color = new PHPPowerPoint_Style_Color(PHPPowerPoint_Style_Color::COLOR_BLACK);
+ }
+
+ /**
+ * Get Name
+ *
+ * @return string
+ */
+ public function getName() {
+ return $this->_name;
+ }
+
+ /**
+ * Set Name
+ *
+ * @param string $pValue
+ */
+ public function setName($pValue = 'Calibri') {
+ if ($pValue == '') {
+ $pValue = 'Calibri';
+ }
+ $this->_name = $pValue;
+ }
+
+ /**
+ * Get Size
+ *
+ * @return double
+ */
+ public function getSize() {
+ return $this->_size;
+ }
+
+ /**
+ * Set Size
+ *
+ * @param double $pValue
+ */
+ public function setSize($pValue = 10) {
+ if ($pValue == '') {
+ $pValue = 10;
+ }
+ $this->_size = $pValue;
+ }
+
+ /**
+ * Get Bold
+ *
+ * @return boolean
+ */
+ public function getBold() {
+ return $this->_bold;
+ }
+
+ /**
+ * Set Bold
+ *
+ * @param boolean $pValue
+ */
+ public function setBold($pValue = false) {
+ if ($pValue == '') {
+ $pValue = false;
+ }
+ $this->_bold = $pValue;
+ }
+
+ /**
+ * Get Italic
+ *
+ * @return boolean
+ */
+ public function getItalic() {
+ return $this->_italic;
+ }
+
+ /**
+ * Set Italic
+ *
+ * @param boolean $pValue
+ */
+ public function setItalic($pValue = false) {
+ if ($pValue == '') {
+ $pValue = false;
+ }
+ $this->_italic = $pValue;
+ }
+
+ /**
+ * Get SuperScript
+ *
+ * @return boolean
+ */
+ public function getSuperScript() {
+ return $this->_superScript;
+ }
+
+ /**
+ * Set SuperScript
+ *
+ * @param boolean $pValue
+ */
+ public function setSuperScript($pValue = false) {
+ if ($pValue == '') {
+ $pValue = false;
+ }
+ $this->_superScript = $pValue;
+ $this->_subScript = !$pValue;
+ }
+
+ /**
+ * Get SubScript
+ *
+ * @return boolean
+ */
+ public function getSubScript() {
+ return $this->_subScript;
+ }
+
+ /**
+ * Set SubScript
+ *
+ * @param boolean $pValue
+ */
+ public function setSubScript($pValue = false) {
+ if ($pValue == '') {
+ $pValue = false;
+ }
+ $this->_subScript = $pValue;
+ $this->_superScript = !$pValue;
+ }
+
+ /**
+ * Get Underline
+ *
+ * @return string
+ */
+ public function getUnderline() {
+ return $this->_underline;
+ }
+
+ /**
+ * Set Underline
+ *
+ * @param string $pValue PHPPowerPoint_Style_Font underline type
+ */
+ public function setUnderline($pValue = PHPPowerPoint_Style_Font::UNDERLINE_NONE) {
+ if ($pValue == '') {
+ $pValue = PHPPowerPoint_Style_Font::UNDERLINE_NONE;
+ }
+ $this->_underline = $pValue;
+ }
+
+ /**
+ * Get Striketrough
+ *
+ * @deprecated Use getStrikethrough() instead.
+ * @return boolean
+ */
+ public function getStriketrough() {
+ return $this->getStrikethrough();
+ }
+
+ /**
+ * Set Striketrough
+ *
+ * @deprecated Use setStrikethrough() instead.
+ * @param boolean $pValue
+ */
+ public function setStriketrough($pValue = false) {
+ $this->setStrikethrough($pValue);
+ }
+
+ /**
+ * Get Strikethrough
+ *
+ * @return boolean
+ */
+ public function getStrikethrough() {
+ return $this->_strikethrough;
+ }
+
+ /**
+ * Set Strikethrough
+ *
+ * @param boolean $pValue
+ */
+ public function setStrikethrough($pValue = false) {
+ if ($pValue == '') {
+ $pValue = false;
+ }
+ $this->_strikethrough = $pValue;
+ }
+
+ /**
+ * Get Color
+ *
+ * @return PHPPowerPoint_Style_Color
+ */
+ public function getColor() {
+ return $this->_color;
+ }
+
+ /**
+ * Set Color
+ *
+ * @param PHPPowerPoint_Style_Color $pValue
+ * @throws Exception
+ */
+ public function setColor(PHPPowerPoint_Style_Color $pValue = null) {
+ $this->_color = $pValue;
+ }
+
+ /**
+ * Get hash code
+ *
+ * @return string Hash code
+ */
+ public function getHashCode() {
+ return md5(
+ $this->_name
+ . $this->_size
+ . ($this->_bold ? 't' : 'f')
+ . ($this->_italic ? 't' : 'f')
+ . ($this->_superScript ? 't' : 'f')
+ . ($this->_subScript ? 't' : 'f')
+ . $this->_underline
+ . ($this->_strikethrough ? 't' : 'f')
+ . $this->_color->getHashCode()
+ . __CLASS__
+ );
+ }
+
+ /**
+ * Hash index
+ *
+ * @var string
+ */
+ private $_hashIndex;
+
+ /**
+ * Get hash index
+ *
+ * Note that this index may vary during script execution! Only reliable moment is
+ * while doing a write of a workbook and when changes are not allowed.
+ *
+ * @return string Hash index
+ */
+ public function getHashIndex() {
+ return $this->_hashIndex;
+ }
+
+ /**
+ * Set hash index
+ *
+ * Note that this index may vary during script execution! Only reliable moment is
+ * while doing a write of a workbook and when changes are not allowed.
+ *
+ * @param string $value Hash index
+ */
+ public function setHashIndex($value) {
+ $this->_hashIndex = $value;
+ }
+
+ /**
+ * Implement PHP __clone to create a deep clone, not just a shallow copy.
+ */
+ public function __clone() {
+ $vars = get_object_vars($this);
+ foreach ($vars as $key => $value) {
+ if (is_object($value)) {
+ $this->$key = clone $value;
+ } else {
+ $this->$key = $value;
+ }
+ }
+ }
+}
diff --git a/admin/exportclases/PHPPowerPoint/Style/_notused_Border.php b/admin/exportclases/PHPPowerPoint/Style/_notused_Border.php
new file mode 100644
index 0000000..4867328
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/Style/_notused_Border.php
@@ -0,0 +1,331 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * Copyright (c) 2009 - 2010 PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Style
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/** PHPPowerPoint_Style_Color */
+require_once 'PHPPowerPoint/Style/Color.php';
+
+/** PHPPowerPoint_IComparable */
+require_once 'PHPPowerPoint/IComparable.php';
+
+
+/**
+ * PHPPowerPoint_Style_Border
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Style
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+class PHPPowerPoint_Style_Border implements PHPPowerPoint_IComparable
+{
+ /* Border style */
+ const BORDER_NONE = 'none';
+ const BORDER_DASHDOT = 'dashDot';
+ const BORDER_DASHDOTDOT = 'dashDotDot';
+ const BORDER_DASHED = 'dashed';
+ const BORDER_DOTTED = 'dotted';
+ const BORDER_DOUBLE = 'double';
+ const BORDER_HAIR = 'hair';
+ const BORDER_MEDIUM = 'medium';
+ const BORDER_MEDIUMDASHDOT = 'mediumDashDot';
+ const BORDER_MEDIUMDASHDOTDOT = 'mediumDashDotDot';
+ const BORDER_MEDIUMDASHED = 'mediumDashed';
+ const BORDER_SLANTDASHDOT = 'slantDashDot';
+ const BORDER_THICK = 'thick';
+ const BORDER_THIN = 'thin';
+
+ /**
+ * Border style
+ *
+ * @var string
+ */
+ private $_borderStyle;
+
+ /**
+ * Border color
+ *
+ * @var PHPPowerPoint_Style_Color
+ */
+ private $_borderColor;
+
+ /**
+ * Parent
+ *
+ * @var PHPPowerPoint_Style_Borders
+ */
+ private $_parent;
+
+ /**
+ * Parent Property Name
+ *
+ * @var string
+ */
+ private $_parentPropertyName;
+
+ /**
+ * Create a new PHPPowerPoint_Style_Border
+ */
+ public function __construct()
+ {
+ // Initialise values
+ $this->_borderStyle = PHPPowerPoint_Style_Border::BORDER_NONE;
+ $this->_borderColor = new PHPPowerPoint_Style_Color(PHPPowerPoint_Style_Color::COLOR_BLACK);
+ }
+
+ /**
+ * Property Prepare bind
+ *
+ * Configures this object for late binding as a property of a parent object
+ *
+ * @param $parent
+ * @param $parentPropertyName
+ */
+ public function propertyPrepareBind($parent, $parentPropertyName)
+ {
+ // Initialize parent PHPPowerPoint_Style for late binding. This relationship purposely ends immediately when this object
+ // is bound to the PHPPowerPoint_Style object pointed to so as to prevent circular references.
+ $this->_parent = $parent;
+ $this->_parentPropertyName = $parentPropertyName;
+ }
+
+ /**
+ * Property Get Bound
+ *
+ * Returns the PHPPowerPoint_Style_Border that is actual bound to PHPPowerPoint_Style_Borders
+ *
+ * @return PHPPowerPoint_Style_Border
+ */
+ private function propertyGetBound() {
+ if(!isset($this->_parent))
+ return $this; // I am bound
+
+ if($this->_parent->propertyIsBound($this->_parentPropertyName))
+ {
+ switch($this->_parentPropertyName) // Another one is bound
+ {
+ case "_left":
+ return $this->_parent->getLeft();
+
+ case "_right":
+ return $this->_parent->getRight();
+
+ case "_top":
+ return $this->_parent->getTop();
+
+ case "_bottom":
+ return $this->_parent->getBottom();
+
+ case "_diagonal":
+ return $this->_parent->getDiagonal();
+
+ case "_vertical":
+ return $this->_parent->getVertical();
+
+ case "_horizontal":
+ return $this->_parent->getHorizontal();
+ }
+ }
+
+ return $this; // No one is bound yet
+ }
+
+ /**
+ * Property Begin Bind
+ *
+ * If no PHPPowerPoint_Style_Border has been bound to PHPPowerPoint_Style_Borders then bind this one. Return the actual bound one.
+ *
+ * @return PHPPowerPoint_Style_Border
+ */
+ private function propertyBeginBind() {
+
+ if(!isset($this->_parent))
+ return $this; // I am already bound
+
+ if($this->_parent->propertyIsBound($this->_parentPropertyName))
+ {
+ switch($this->_parentPropertyName) // Another one is already bound
+ {
+ case "_left":
+ return $this->_parent->getLeft();
+
+ case "_right":
+ return $this->_parent->getRight();
+
+ case "_top":
+ return $this->_parent->getTop();
+
+ case "_bottom":
+ return $this->_parent->getBottom();
+
+ case "_diagonal":
+ return $this->_parent->getDiagonal();
+
+ case "_vertical":
+ return $this->_parent->getVertical();
+
+ case "_horizontal":
+ return $this->_parent->getHorizontal();
+ }
+ }
+
+ $this->_parent->propertyCompleteBind($this, $this->_parentPropertyName); // Bind myself
+ $this->_parent = null;
+ return $this;
+ }
+
+ /**
+ * Apply styles from array
+ *
+ * <code>
+ * $objPHPPowerPoint->getActiveSheet()->getStyle('B2')->getBorders()->getTop()->applyFromArray(
+ * array(
+ * 'style' => PHPPowerPoint_Style_Border::BORDER_DASHDOT,
+ * 'color' => array(
+ * 'rgb' => '808080'
+ * )
+ * )
+ * );
+ * </code>
+ *
+ * @param array $pStyles Array containing style information
+ * @throws Exception
+ */
+ public function applyFromArray($pStyles = null) {
+ if (is_array($pStyles)) {
+ if (array_key_exists('style', $pStyles)) {
+ $this->setBorderStyle($pStyles['style']);
+ }
+ if (array_key_exists('color', $pStyles)) {
+ $this->getColor()->applyFromArray($pStyles['color']);
+ }
+ } else {
+ throw new Exception("Invalid style array passed.");
+ }
+ }
+
+ /**
+ * Get Border style
+ *
+ * @return string
+ */
+ public function getBorderStyle() {
+ return $this->propertyGetBound()->_borderStyle;
+ }
+
+ /**
+ * Set Border style
+ *
+ * @param string $pValue
+ */
+ public function setBorderStyle($pValue = PHPPowerPoint_Style_Border::BORDER_NONE) {
+
+ if ($pValue == '') {
+ $pValue = PHPPowerPoint_Style_Border::BORDER_NONE;
+ }
+ $this->propertyBeginBind()->_borderStyle = $pValue;
+ }
+
+ /**
+ * Get Border Color
+ *
+ * @return PHPPowerPoint_Style_Color
+ */
+ public function getColor() {
+ // It's a get but it may lead to a modified color which we won't detect but in which case we must bind.
+ // So bind as an assurance.
+ return $this->propertyBeginBind()->_borderColor;
+ }
+
+ /**
+ * Set Border Color
+ *
+ * @param PHPPowerPoint_Style_Color $pValue
+ * @throws Exception
+ */
+ public function setColor(PHPPowerPoint_Style_Color $pValue = null) {
+ $this->propertyBeginBind()->_borderColor = $pValue;
+ }
+
+ /**
+ * Get hash code
+ *
+ * @return string Hash code
+ */
+ public function getHashCode() {
+ $property = $this->propertyGetBound();
+ return md5(
+ $property->_borderStyle
+ . $property->_borderColor->getHashCode()
+ . __CLASS__
+ );
+ }
+
+ /**
+ * Hash index
+ *
+ * @var string
+ */
+ private $_hashIndex;
+
+ /**
+ * Get hash index
+ *
+ * Note that this index may vary during script execution! Only reliable moment is
+ * while doing a write of a workbook and when changes are not allowed.
+ *
+ * @return string Hash index
+ */
+ public function getHashIndex() {
+ return $this->_hashIndex;
+ }
+
+ /**
+ * Set hash index
+ *
+ * Note that this index may vary during script execution! Only reliable moment is
+ * while doing a write of a workbook and when changes are not allowed.
+ *
+ * @param string $value Hash index
+ */
+ public function setHashIndex($value) {
+ $this->_hashIndex = $value;
+ }
+
+ /**
+ * Implement PHP __clone to create a deep clone, not just a shallow copy.
+ */
+ public function __clone() {
+ $vars = get_object_vars($this);
+ foreach ($vars as $key => $value) {
+ if (is_object($value)) {
+ $this->$key = clone $value;
+ } else {
+ $this->$key = $value;
+ }
+ }
+ }
+}
diff --git a/admin/exportclases/PHPPowerPoint/Style/_notused_Borders.php b/admin/exportclases/PHPPowerPoint/Style/_notused_Borders.php
new file mode 100644
index 0000000..f2ad8b7
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/Style/_notused_Borders.php
@@ -0,0 +1,577 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * Copyright (c) 2009 - 2010 PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Style
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/** PHPPowerPoint_Style_Border */
+require_once 'PHPPowerPoint/Style/Border.php';
+
+/** PHPPowerPoint_IComparable */
+require_once 'PHPPowerPoint/IComparable.php';
+
+
+/**
+ * PHPPowerPoint_Style_Borders
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Style
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+class PHPPowerPoint_Style_Borders implements PHPPowerPoint_IComparable
+{
+ /* Diagonal directions */
+ const DIAGONAL_NONE = 0;
+ const DIAGONAL_UP = 1;
+ const DIAGONAL_DOWN = 2;
+
+ /**
+ * Left
+ *
+ * @var PHPPowerPoint_Style_Border
+ */
+ private $_left;
+
+ /**
+ * Right
+ *
+ * @var PHPPowerPoint_Style_Border
+ */
+ private $_right;
+
+ /**
+ * Top
+ *
+ * @var PHPPowerPoint_Style_Border
+ */
+ private $_top;
+
+ /**
+ * Bottom
+ *
+ * @var PHPPowerPoint_Style_Border
+ */
+ private $_bottom;
+
+ /**
+ * Diagonal
+ *
+ * @var PHPPowerPoint_Style_Border
+ */
+ private $_diagonal;
+
+ /**
+ * Vertical
+ *
+ * @var PHPPowerPoint_Style_Border
+ */
+ private $_vertical;
+
+ /**
+ * Horizontal
+ *
+ * @var PHPPowerPoint_Style_Border
+ */
+ private $_horizontal;
+
+ /**
+ * DiagonalDirection
+ *
+ * @var int
+ */
+ private $_diagonalDirection;
+
+ /**
+ * Outline, defaults to true
+ *
+ * @var boolean
+ */
+ private $_outline;
+
+ /**
+ * Parent
+ *
+ * @var PHPPowerPoint_Style
+ */
+
+ private $_parent;
+
+ /**
+ * Parent Borders
+ *
+ * @var _parentPropertyName string
+ */
+ private $_parentPropertyName;
+
+ /**
+ * Create a new PHPPowerPoint_Style_Borders
+ */
+ public function __construct()
+ {
+ // Initialise values
+
+ /**
+ * The following properties are late bound. Binding is initiated by property classes when they are modified.
+ *
+ * _left
+ * _right
+ * _top
+ * _bottom
+ * _diagonal
+ * _vertical
+ * _horizontal
+ *
+ */
+
+ $this->_diagonalDirection = PHPPowerPoint_Style_Borders::DIAGONAL_NONE;
+ $this->_outline = true;
+ }
+
+ /**
+ * Property Prepare bind
+ *
+ * Configures this object for late binding as a property of a parent object
+ *
+ * @param $parent
+ * @param $parentPropertyName
+ */
+ public function propertyPrepareBind($parent, $parentPropertyName)
+ {
+ // Initialize parent PHPPowerPoint_Style for late binding. This relationship purposely ends immediately when this object
+ // is bound to the PHPPowerPoint_Style object pointed to so as to prevent circular references.
+ $this->_parent = $parent;
+ $this->_parentPropertyName = $parentPropertyName;
+ }
+
+ /**
+ * Property Get Bound
+ *
+ * Returns the PHPPowerPoint_Style_Borders that is actual bound to PHPPowerPoint_Style
+ *
+ * @return PHPPowerPoint_Style_Borders
+ */
+ private function propertyGetBound() {
+ if(!isset($this->_parent))
+ return $this; // I am bound
+
+ if($this->_parent->propertyIsBound($this->_parentPropertyName))
+ return $this->_parent->getBorders(); // Another one is bound
+
+ return $this; // No one is bound yet
+ }
+
+ /**
+ * Property Begin Bind
+ *
+ * If no PHPPowerPoint_Style_Borders has been bound to PHPPowerPoint_Style then bind this one. Return the actual bound one.
+ *
+ * @return PHPPowerPoint_Style_Borders
+ */
+ private function propertyBeginBind() {
+ if(!isset($this->_parent))
+ return $this; // I am already bound
+
+ if($this->_parent->propertyIsBound($this->_parentPropertyName))
+ return $this->_parent->getBorders(); // Another one is already bound
+
+ $this->_parent->propertyCompleteBind($this, $this->_parentPropertyName); // Bind myself
+ $this->_parent = null;
+
+ return $this;
+ }
+
+
+ /**
+ * Property Complete Bind
+ *
+ * Complete the binding process a child property object started
+ *
+ * @param $propertyObject
+ * @param $propertyName Name of this property in the parent object
+ */
+ public function propertyCompleteBind($propertyObject, $propertyName) {
+ switch($propertyName) {
+ case "_left":
+ $this->propertyBeginBind()->_left = $propertyObject;
+ break;
+
+ case "_right":
+ $this->propertyBeginBind()->_right = $propertyObject;
+ break;
+
+ case "_top":
+ $this->propertyBeginBind()->_top = $propertyObject;
+ break;
+
+ case "_bottom":
+ $this->propertyBeginBind()->_bottom = $propertyObject;
+ break;
+
+ case "_diagonal":
+ $this->propertyBeginBind()->_diagonal = $propertyObject;
+ break;
+
+ case "_vertical":
+ $this->propertyBeginBind()->_vertical = $propertyObject;
+ break;
+
+ case "_horizontal":
+ $this->propertyBeginBind()->_horizontal = $propertyObject;
+ break;
+
+ default:
+ throw new Exception("Invalid property passed.");
+ }
+ }
+
+ /**
+ * Property Is Bound
+ *
+ * Determines if a child property is bound to this one
+ *
+ * @param $propertyName Name of this property in the parent object
+ *
+ * @return boolean
+ */
+ public function propertyIsBound($propertyName) {
+ switch($propertyName) {
+ case "_left":
+ return isset($this->propertyGetBound()->_left);
+
+ case "_right":
+ return isset($this->propertyGetBound()->_right);
+
+ case "_top":
+ return isset($this->propertyGetBound()->_top);
+
+ case "_bottom":
+ return isset($this->propertyGetBound()->_bottom);
+
+ case "_diagonal":
+ return isset($this->propertyGetBound()->_diagonal);
+
+ case "_vertical":
+ return isset($this->propertyGetBound()->_vertical);
+
+ case "_horizontal":
+ return isset($this->propertyGetBound()->_horizontal);
+
+ default:
+ throw new Exception("Invalid property passed.");
+ }
+ }
+
+ /**
+ * Apply styles from array
+ *
+ * <code>
+ * $objPHPPowerPoint->getActiveSheet()->getStyle('B2')->getBorders()->applyFromArray(
+ * array(
+ * 'bottom' => array(
+ * 'style' => PHPPowerPoint_Style_Border::BORDER_DASHDOT,
+ * 'color' => array(
+ * 'rgb' => '808080'
+ * )
+ * ),
+ * 'top' => array(
+ * 'style' => PHPPowerPoint_Style_Border::BORDER_DASHDOT,
+ * 'color' => array(
+ * 'rgb' => '808080'
+ * )
+ * )
+ * )
+ * );
+ * </code>
+ * <code>
+ * $objPHPPowerPoint->getActiveSheet()->getStyle('B2')->getBorders()->applyFromArray(
+ * array(
+ * 'allborders' => array(
+ * 'style' => PHPPowerPoint_Style_Border::BORDER_DASHDOT,
+ * 'color' => array(
+ * 'rgb' => '808080'
+ * )
+ * )
+ * )
+ * );
+ * </code>
+ *
+ * @param array $pStyles Array containing style information
+ * @throws Exception
+ */
+ public function applyFromArray($pStyles = null) {
+ if (is_array($pStyles)) {
+ if (array_key_exists('allborders', $pStyles)) {
+ $this->getLeft()->applyFromArray($pStyles['allborders']);
+ $this->getRight()->applyFromArray($pStyles['allborders']);
+ $this->getTop()->applyFromArray($pStyles['allborders']);
+ $this->getBottom()->applyFromArray($pStyles['allborders']);
+ }
+ if (array_key_exists('left', $pStyles)) {
+ $this->getLeft()->applyFromArray($pStyles['left']);
+ }
+ if (array_key_exists('right', $pStyles)) {
+ $this->getRight()->applyFromArray($pStyles['right']);
+ }
+ if (array_key_exists('top', $pStyles)) {
+ $this->getTop()->applyFromArray($pStyles['top']);
+ }
+ if (array_key_exists('bottom', $pStyles)) {
+ $this->getBottom()->applyFromArray($pStyles['bottom']);
+ }
+ if (array_key_exists('diagonal', $pStyles)) {
+ $this->getDiagonal()->applyFromArray($pStyles['diagonal']);
+ }
+ if (array_key_exists('vertical', $pStyles)) {
+ $this->getVertical()->applyFromArray($pStyles['vertical']);
+ }
+ if (array_key_exists('horizontal', $pStyles)) {
+ $this->getHorizontal()->applyFromArray($pStyles['horizontal']);
+ }
+ if (array_key_exists('diagonaldirection', $pStyles)) {
+ $this->setDiagonalDirection($pStyles['diagonaldirection']);
+ }
+ if (array_key_exists('outline', $pStyles)) {
+ $this->setOutline($pStyles['outline']);
+ }
+ } else {
+ throw new Exception("Invalid style array passed.");
+ }
+ }
+
+ /**
+ * Get Left
+ *
+ * @return PHPPowerPoint_Style_Border
+ */
+ public function getLeft() {
+ $property = $this->propertyGetBound();
+ if(isset($property->_left))
+ return $property->_left;
+
+ $property = new PHPPowerPoint_Style_Border();
+ $property->propertyPrepareBind($this, "_left");
+ return $property;
+ }
+
+ /**
+ * Get Right
+ *
+ * @return PHPPowerPoint_Style_Border
+ */
+ public function getRight() {
+ $property = $this->propertyGetBound();
+ if(isset($property->_right))
+ return $property->_right;
+
+
+ $property = new PHPPowerPoint_Style_Border();
+ $property->propertyPrepareBind($this, "_right");
+ return $property;
+ }
+
+ /**
+ * Get Top
+ *
+ * @return PHPPowerPoint_Style_Border
+ */
+ public function getTop() {
+ $property = $this->propertyGetBound();
+ if(isset($property->_top))
+ return $property->_top;
+
+
+ $property = new PHPPowerPoint_Style_Border();
+ $property->propertyPrepareBind($this, "_top");
+ return $property;
+ }
+
+ /**
+ * Get Bottom
+ *
+ * @return PHPPowerPoint_Style_Border
+ */
+ public function getBottom() {
+ $property = $this->propertyGetBound();
+ if(isset($property->_bottom))
+ return $property->_bottom;
+
+ $property = new PHPPowerPoint_Style_Border();
+ $property->propertyPrepareBind($this, "_bottom");
+ return $property;
+ }
+
+ /**
+ * Get Diagonal
+ *
+ * @return PHPPowerPoint_Style_Border
+ */
+ public function getDiagonal() {
+ $property = $this->propertyGetBound();
+ if(isset($property->_diagonal))
+ return $property->_diagonal;
+
+ $property = new PHPPowerPoint_Style_Border();
+ $property->propertyPrepareBind($this, "_diagonal");
+ return $property;
+ }
+
+ /**
+ * Get Vertical
+ *
+ * @return PHPPowerPoint_Style_Border
+ */
+ public function getVertical() {
+ $property = $this->propertyGetBound();
+ if(isset($property->_vertical))
+ return $property->_vertical;
+
+ $property = new PHPPowerPoint_Style_Border();
+ $property->propertyPrepareBind($this, "_vertical");
+ return $property;
+ }
+
+ /**
+ * Get Horizontal
+ *
+ * @return PHPPowerPoint_Style_Border
+ */
+ public function getHorizontal() {
+ $property = $this->propertyGetBound();
+ if(isset($property->_horizontal))
+ return $property->_horizontal;
+
+ $property = new PHPPowerPoint_Style_Border();
+ $property->propertyPrepareBind($this, "_horizontal");
+ return $property;
+ }
+
+ /**
+ * Get DiagonalDirection
+ *
+ * @return int
+ */
+ public function getDiagonalDirection() {
+ return $this->propertyGetBound()->_diagonalDirection;
+ }
+
+ /**
+ * Set DiagonalDirection
+ *
+ * @param int $pValue
+ */
+ public function setDiagonalDirection($pValue = PHPPowerPoint_Style_Borders::DIAGONAL_NONE) {
+ if ($pValue == '') {
+ $pValue = PHPPowerPoint_Style_Borders::DIAGONAL_NONE;
+ }
+ $this->propertyBeginBind()->_diagonalDirection = $pValue;
+ }
+
+ /**
+ * Get Outline
+ *
+ * @return boolean
+ */
+ public function getOutline() {
+ return $this->propertyGetBound()->_outline;
+ }
+
+ /**
+ * Set Outline
+ *
+ * @param boolean $pValue
+ */
+ public function setOutline($pValue = true) {
+ if ($pValue == '') {
+ $pValue = true;
+ }
+ $this->propertyBeginBind()->_outline = $pValue;
+ }
+
+ /**
+ * Get hash code
+ *
+ * @return string Hash code
+ */
+ public function getHashCode() {
+ $property = $this->propertyGetBound();
+ return md5(
+ $property->getLeft()->getHashCode()
+ . $property->getRight()->getHashCode()
+ . $property->getTop()->getHashCode()
+ . $property->getBottom()->getHashCode()
+ . $property->getDiagonal()->getHashCode()
+ . $property->getVertical()->getHashCode()
+ . $property->getHorizontal()->getHashCode()
+ . $property->getDiagonalDirection()
+ . ($property->getOutline() ? 't' : 'f')
+ . __CLASS__
+ );
+ }
+
+ /**
+ * Hash index
+ *
+ * @var string
+ */
+ private $_hashIndex;
+
+ /**
+ * Get hash index
+ *
+ * Note that this index may vary during script execution! Only reliable moment is
+ * while doing a write of a workbook and when changes are not allowed.
+ *
+ * @return string Hash index
+ */
+ public function getHashIndex() {
+ return $this->_hashIndex;
+ }
+
+ /**
+ * Set hash index
+ *
+ * Note that this index may vary during script execution! Only reliable moment is
+ * while doing a write of a workbook and when changes are not allowed.
+ *
+ * @param string $value Hash index
+ */
+ public function setHashIndex($value) {
+ $this->_hashIndex = $value;
+ }
+
+ /**
+ * Implement PHP __clone to create a deep clone, not just a shallow copy.
+ */
+ public function __clone() {
+ $vars = get_object_vars($this);
+ foreach ($vars as $key => $value) {
+ if (is_object($value)) {
+ $this->$key = clone $value;
+ } else {
+ $this->$key = $value;
+ }
+ }
+ }
+}
diff --git a/admin/exportclases/PHPPowerPoint/Writer/IWriter.php b/admin/exportclases/PHPPowerPoint/Writer/IWriter.php
new file mode 100644
index 0000000..51bd757
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/Writer/IWriter.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * Copyright (c) 2009 - 2010 PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Writer
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/**
+ * PHPPowerPoint_Writer_IWriter
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Writer
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+interface PHPPowerPoint_Writer_IWriter
+{
+ /**
+ * Save PHPPowerPoint to file
+ *
+ * @param string $pFileName
+ * @throws Exception
+ */
+ public function save($pFilename = null);
+}
diff --git a/admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007.php b/admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007.php
new file mode 100644
index 0000000..73310c9
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007.php
@@ -0,0 +1,411 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * Copyright (c) 2009 - 2010 PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Writer_PowerPoint2007
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/** PHPPowerPoint */
+require_once 'PHPPowerPoint.php';
+
+/** PHPPowerPoint_HashTable */
+require_once 'PHPPowerPoint/HashTable.php';
+
+/** PHPPowerPoint_IComparable */
+require_once 'PHPPowerPoint/IComparable.php';
+
+/** PHPPowerPoint_Slide */
+require_once 'PHPPowerPoint/Slide.php';
+
+/** PHPPowerPoint_IWriter */
+require_once 'PHPPowerPoint/Writer/IWriter.php';
+
+/** PHPPowerPoint_Shared_XMLWriter */
+require_once 'PHPPowerPoint/Shared/XMLWriter.php';
+
+/** PHPPowerPoint_Writer_PowerPoint2007_WriterPart */
+require_once 'PHPPowerPoint/Writer/PowerPoint2007/WriterPart.php';
+
+/** PHPPowerPoint_Writer_PowerPoint2007_ContentTypes */
+require_once 'PHPPowerPoint/Writer/PowerPoint2007/ContentTypes.php';
+
+/** PHPPowerPoint_Writer_PowerPoint2007_DocProps */
+require_once 'PHPPowerPoint/Writer/PowerPoint2007/DocProps.php';
+
+/** PHPPowerPoint_Writer_PowerPoint2007_Rels */
+require_once 'PHPPowerPoint/Writer/PowerPoint2007/Rels.php';
+
+/** PHPPowerPoint_Writer_PowerPoint2007_Theme */
+require_once 'PHPPowerPoint/Writer/PowerPoint2007/Theme.php';
+
+/** PHPPowerPoint_Writer_PowerPoint2007_Presentation */
+require_once 'PHPPowerPoint/Writer/PowerPoint2007/Presentation.php';
+
+/** PHPPowerPoint_Writer_PowerPoint2007_Slide */
+require_once 'PHPPowerPoint/Writer/PowerPoint2007/Slide.php';
+
+/** PHPPowerPoint_Writer_PowerPoint2007_Drawing */
+require_once 'PHPPowerPoint/Writer/PowerPoint2007/Drawing.php';
+
+/** PHPPowerPoint_Writer_PowerPoint2007_LayoutPack */
+require_once 'PHPPowerPoint/Writer/PowerPoint2007/LayoutPack.php';
+
+/** PHPPowerPoint_Writer_PowerPoint2007_LayoutPack_Default */
+require_once 'PHPPowerPoint/Writer/PowerPoint2007/LayoutPack/Default.php';
+
+
+/**
+ * PHPPowerPoint_Writer_PowerPoint2007
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Writer_PowerPoint2007
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+class PHPPowerPoint_Writer_PowerPoint2007 implements PHPPowerPoint_Writer_IWriter
+{
+ /**
+ * Office2003 compatibility
+ *
+ * @var boolean
+ */
+ private $_office2003compatibility = false;
+
+ /**
+ * Private writer parts
+ *
+ * @var PHPPowerPoint_Writer_PowerPoint2007_WriterPart[]
+ */
+ private $_writerParts;
+
+ /**
+ * Private PHPPowerPoint
+ *
+ * @var PHPPowerPoint
+ */
+ private $_presentation;
+
+ /**
+ * Private unique PHPPowerPoint_Worksheet_BaseDrawing HashTable
+ *
+ * @var PHPPowerPoint_HashTable
+ */
+ private $_drawingHashTable;
+
+ /**
+ * Use disk caching where possible?
+ *
+ * @var boolean
+ */
+ private $_useDiskCaching = false;
+
+ /**
+ * Disk caching directory
+ *
+ * @var string
+ */
+ private $_diskCachingDirectory;
+
+ /**
+ * Layout pack to use
+ *
+ * @var PHPPowerPoint_Writer_PowerPoint2007_LayoutPack
+ */
+ private $_layoutPack;
+
+ /**
+ * Create a new PHPPowerPoint_Writer_PowerPoint2007
+ *
+ * @param PHPPowerPoint $pPHPPowerPoint
+ */
+ public function __construct(PHPPowerPoint $pPHPPowerPoint = null)
+ {
+ // Assign PHPPowerPoint
+ $this->setPHPPowerPoint($pPHPPowerPoint);
+
+ // Set up disk caching location
+ $this->_diskCachingDirectory = './';
+
+ // Set layout pack
+ $this->_layoutPack = new PHPPowerPoint_Writer_PowerPoint2007_LayoutPack_Default();
+
+ // Initialise writer parts
+ $this->_writerParts['contenttypes'] = new PHPPowerPoint_Writer_PowerPoint2007_ContentTypes();
+ $this->_writerParts['docprops'] = new PHPPowerPoint_Writer_PowerPoint2007_DocProps();
+ $this->_writerParts['rels'] = new PHPPowerPoint_Writer_PowerPoint2007_Rels();
+ $this->_writerParts['theme'] = new PHPPowerPoint_Writer_PowerPoint2007_Theme();
+ $this->_writerParts['presentation'] = new PHPPowerPoint_Writer_PowerPoint2007_Presentation();
+ $this->_writerParts['slide'] = new PHPPowerPoint_Writer_PowerPoint2007_Slide();
+ $this->_writerParts['drawing'] = new PHPPowerPoint_Writer_PowerPoint2007_Drawing();
+
+ // Assign parent IWriter
+ foreach ($this->_writerParts as $writer) {
+ $writer->setParentWriter($this);
+ }
+
+ // Set HashTable variables
+ $this->_drawingHashTable = new PHPPowerPoint_HashTable();
+ }
+
+ /**
+ * Get writer part
+ *
+ * @param string $pPartName Writer part name
+ * @return PHPPowerPoint_Writer_PowerPoint2007_WriterPart
+ */
+ function getWriterPart($pPartName = '') {
+ if ($pPartName != '' && isset($this->_writerParts[strtolower($pPartName)])) {
+ return $this->_writerParts[strtolower($pPartName)];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Save PHPPowerPoint to file
+ *
+ * @param string $pFileName
+ * @throws Exception
+ */
+ public function save($pFilename = null)
+ {
+ if (!is_null($this->_presentation)) {
+ // If $pFilename is php://output or php://stdout, make it a temporary file...
+ $originalFilename = $pFilename;
+ if (strtolower($pFilename) == 'php://output' || strtolower($pFilename) == 'php://stdout') {
+ $pFilename = @tempnam('./', 'phppttmp');
+ if ($pFilename == '') {
+ $pFilename = $originalFilename;
+ }
+ }
+
+ // Create drawing dictionary
+ $this->_drawingHashTable->addFromSource( $this->getWriterPart('Drawing')->allDrawings($this->_presentation) );
+
+ // Create new ZIP file and open it for writing
+ $objZip = new ZipArchive();
+
+ // Try opening the ZIP file
+ if ($objZip->open($pFilename, ZIPARCHIVE::OVERWRITE) !== true) {
+ if ($objZip->open($pFilename, ZIPARCHIVE::CREATE) !== true) {
+ throw new Exception("Could not open " . $pFilename . " for writing.");
+ }
+ }
+
+ // Add [Content_Types].xml to ZIP file
+ $objZip->addFromString('[Content_Types].xml', $this->getWriterPart('ContentTypes')->writeContentTypes($this->_presentation));
+
+ // Add relationships to ZIP file
+ $objZip->addFromString('_rels/.rels', $this->getWriterPart('Rels')->writeRelationships($this->_presentation));
+ $objZip->addFromString('ppt/_rels/presentation.xml.rels', $this->getWriterPart('Rels')->writePresentationRelationships($this->_presentation));
+
+ // Add document properties to ZIP file
+ $objZip->addFromString('docProps/app.xml', $this->getWriterPart('DocProps')->writeDocPropsApp($this->_presentation));
+ $objZip->addFromString('docProps/core.xml', $this->getWriterPart('DocProps')->writeDocPropsCore($this->_presentation));
+
+ // Add theme to ZIP file
+ $objZip->addFromString('ppt/theme/theme1.xml', $this->getWriterPart('Theme')->writeTheme($this->_presentation));
+
+ // Add slide master to ZIP file
+ $masterSlide = $this->getLayoutPack()->getMasterSlide();
+ $objZip->addFromString('ppt/slideMasters/_rels/slideMaster1.xml.rels', $this->getWriterPart('Rels')->writeSlideMasterRelationships());
+ $objZip->addFromString('ppt/slideMasters/slideMaster1.xml', $masterSlide['body']);
+
+ // Add slide layouts to ZIP file
+ $slideLayouts = $this->getLayoutPack()->getLayouts();
+ for ($i = 0; $i < count($slideLayouts); ++$i) {
+ $objZip->addFromString('ppt/slideLayouts/_rels/slideLayout' . ($i + 1) . '.xml.rels', $this->getWriterPart('Rels')->writeSlideLayoutRelationships());
+ $objZip->addFromString('ppt/slideLayouts/slideLayout' . ($i + 1) . '.xml', $slideLayouts[$i]['body']);
+ }
+
+ // Add presentation to ZIP file
+ $objZip->addFromString('ppt/presentation.xml', $this->getWriterPart('Presentation')->writePresentation($this->_presentation));
+
+ // Add slides (drawings, ...)
+ for ($i = 0; $i < $this->_presentation->getSlideCount(); ++$i) {
+ // Add slide
+ $objZip->addFromString('ppt/slides/slide' . ($i + 1) . '.xml', $this->getWriterPart('Slide')->writeSlide($this->_presentation->getSlide($i)));
+ }
+
+ // Add slide relationships (drawings, ...)
+ for ($i = 0; $i < $this->_presentation->getSlideCount(); ++$i) {
+ // Add relationships
+ $objZip->addFromString('ppt/slides/_rels/slide' . ($i + 1) . '.xml.rels', $this->getWriterPart('Rels')->writeSlideRelationships($this->_presentation->getSlide($i), ($i + 1)));
+ }
+
+ // Add media
+ for ($i = 0; $i < $this->getDrawingHashTable()->count(); ++$i) {
+ if ($this->getDrawingHashTable()->getByIndex($i) instanceof PHPPowerPoint_Shape_Drawing) {
+ $imageContents = null;
+ $imagePath = $this->getDrawingHashTable()->getByIndex($i)->getPath();
+
+ if (strpos($imagePath, 'zip://') !== false) {
+ $imagePath = substr($imagePath, 6);
+ $imagePathSplitted = explode('#', $imagePath);
+
+ $imageZip = new ZipArchive();
+ $imageZip->open($imagePathSplitted[0]);
+ $imageContents = $imageZip->getFromName($imagePathSplitted[1]);
+ $imageZip->close();
+ unset($imageZip);
+ } else {
+ $imageContents = file_get_contents($imagePath);
+ }
+
+ $objZip->addFromString('ppt/media/' . str_replace(' ', '_', $this->getDrawingHashTable()->getByIndex($i)->getIndexedFilename()), $imageContents);
+ } else if ($this->getDrawingHashTable()->getByIndex($i) instanceof PHPPowerPoint_Shape_MemoryDrawing) {
+ ob_start();
+ call_user_func(
+ $this->getDrawingHashTable()->getByIndex($i)->getRenderingFunction(),
+ $this->getDrawingHashTable()->getByIndex($i)->getImageResource()
+ );
+ $imageContents = ob_get_contents();
+ ob_end_clean();
+
+ $objZip->addFromString('ppt/media/' . str_replace(' ', '_', $this->getDrawingHashTable()->getByIndex($i)->getIndexedFilename()), $imageContents);
+ }
+ }
+
+ // Close file
+ if ($objZip->close() === false) {
+ throw new Exception("Could not close zip file $pFilename.");
+ }
+
+ // If a temporary file was used, copy it to the correct file stream
+ if ($originalFilename != $pFilename) {
+ if (copy($pFilename, $originalFilename) === false) {
+ throw new Exception("Could not copy temporary zip file $pFilename to $originalFilename.");
+ }
+ @unlink($pFilename);
+ }
+ } else {
+ throw new Exception("PHPPowerPoint object unassigned.");
+ }
+ }
+
+ /**
+ * Get PHPPowerPoint object
+ *
+ * @return PHPPowerPoint
+ * @throws Exception
+ */
+ public function getPHPPowerPoint() {
+ if (!is_null($this->_presentation)) {
+ return $this->_presentation;
+ } else {
+ throw new Exception("No PHPPowerPoint assigned.");
+ }
+ }
+
+ /**
+ * Get PHPPowerPoint object
+ *
+ * @param PHPPowerPoint $pPHPPowerPoint PHPPowerPoint object
+ * @throws Exception
+ */
+ public function setPHPPowerPoint(PHPPowerPoint $pPHPPowerPoint = null) {
+ $this->_presentation = $pPHPPowerPoint;
+ }
+
+ /**
+ * Get PHPPowerPoint_Worksheet_BaseDrawing HashTable
+ *
+ * @return PHPPowerPoint_HashTable
+ */
+ public function getDrawingHashTable() {
+ return $this->_drawingHashTable;
+ }
+
+ /**
+ * Get Office2003 compatibility
+ *
+ * @return boolean
+ */
+ public function getOffice2003Compatibility() {
+ return $this->_office2003compatibility;
+ }
+
+ /**
+ * Set Pre-Calculate Formulas
+ *
+ * @param boolean $pValue Office2003 compatibility?
+ */
+ public function setOffice2003Compatibility($pValue = false) {
+ $this->_office2003compatibility = $pValue;
+ }
+
+ /**
+ * Get use disk caching where possible?
+ *
+ * @return boolean
+ */
+ public function getUseDiskCaching() {
+ return $this->_useDiskCaching;
+ }
+
+ /**
+ * Set use disk caching where possible?
+ *
+ * @param boolean $pValue
+ * @param string $pDirectory Disk caching directory
+ * @throws Exception Exception when directory does not exist
+ */
+ public function setUseDiskCaching($pValue = false, $pDirectory = null) {
+ $this->_useDiskCaching = $pValue;
+
+ if (!is_null($pDirectory)) {
+ if (is_dir($pDirectory)) {
+ $this->_diskCachingDirectory = $pDirectory;
+ } else {
+ throw new Exception("Directory does not exist: $pDirectory");
+ }
+ }
+ }
+
+ /**
+ * Get disk caching directory
+ *
+ * @return string
+ */
+ public function getDiskCachingDirectory() {
+ return $this->_diskCachingDirectory;
+ }
+
+ /**
+ * Get layout pack to use
+ *
+ * @return PHPPowerPoint_Writer_PowerPoint2007_LayoutPack
+ */
+ public function getLayoutPack() {
+ return $this->_layoutPack;
+ }
+
+ /**
+ * Set layout pack to use
+ *
+ * @param PHPPowerPoint_Writer_PowerPoint2007_LayoutPack $pValue
+ */
+ public function setLayoutPack(PHPPowerPoint_Writer_PowerPoint2007_LayoutPack $pValue = null) {
+ $this->_layoutPack = $pValue;
+ }
+}
diff --git a/admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007/ContentTypes.php b/admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007/ContentTypes.php
new file mode 100644
index 0000000..ed50033
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007/ContentTypes.php
@@ -0,0 +1,219 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * Copyright (c) 2009 - 2010 PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Writer_PowerPoint2007
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/** PHPPowerPoint */
+require_once 'PHPPowerPoint.php';
+
+/** PHPPowerPoint_Writer_PowerPoint2007 */
+require_once 'PHPPowerPoint/Writer/PowerPoint2007.php';
+
+/** PHPPowerPoint_Writer_PowerPoint2007_WriterPart */
+require_once 'PHPPowerPoint/Writer/PowerPoint2007/WriterPart.php';
+
+/** PHPPowerPoint_Shared_File */
+require_once 'PHPPowerPoint/Shared/File.php';
+
+/** PHPPowerPoint_Shared_XMLWriter */
+require_once 'PHPPowerPoint/Shared/XMLWriter.php';
+
+
+/**
+ * PHPPowerPoint_Writer_PowerPoint2007_ContentTypes
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Writer_PowerPoint2007
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+class PHPPowerPoint_Writer_PowerPoint2007_ContentTypes extends PHPPowerPoint_Writer_PowerPoint2007_WriterPart
+{
+ /**
+ * Write content types to XML format
+ *
+ * @param PHPPowerPoint $pPHPPowerPoint
+ * @return string XML Output
+ * @throws Exception
+ */
+ public function writeContentTypes(PHPPowerPoint $pPHPPowerPoint = null)
+ {
+ // Create XML writer
+ $objWriter = null;
+ if ($this->getParentWriter()->getUseDiskCaching()) {
+ $objWriter = new PHPPowerPoint_Shared_XMLWriter(PHPPowerPoint_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory());
+ } else {
+ $objWriter = new PHPPowerPoint_Shared_XMLWriter(PHPPowerPoint_Shared_XMLWriter::STORAGE_MEMORY);
+ }
+
+ // XML header
+ $objWriter->startDocument('1.0','UTF-8','yes');
+
+ // Types
+ $objWriter->startElement('Types');
+ $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/package/2006/content-types');
+
+ // Rels
+ $this->_writeDefaultContentType(
+ $objWriter, 'rels', 'application/vnd.openxmlformats-package.relationships+xml'
+ );
+
+ // XML
+ $this->_writeDefaultContentType(
+ $objWriter, 'xml', 'application/xml'
+ );
+
+ // Theme
+ $this->_writeOverrideContentType(
+ $objWriter, '/ppt/theme/theme1.xml', 'application/vnd.openxmlformats-officedocument.theme+xml'
+ );
+
+ // Presentation
+ $this->_writeOverrideContentType(
+ $objWriter, '/ppt/presentation.xml', 'application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml'
+ );
+
+ // DocProps
+ $this->_writeOverrideContentType(
+ $objWriter, '/docProps/app.xml', 'application/vnd.openxmlformats-officedocument.extended-properties+xml'
+ );
+
+ $this->_writeOverrideContentType(
+ $objWriter, '/docProps/core.xml', 'application/vnd.openxmlformats-package.core-properties+xml'
+ );
+
+ // Slide master
+ $this->_writeOverrideContentType(
+ $objWriter, '/ppt/slideMasters/slideMaster1.xml', 'application/vnd.openxmlformats-officedocument.presentationml.slideMaster+xml'
+ );
+
+ // Slide layouts
+ $slideLayouts = $this->getParentWriter()->getLayoutPack()->getLayouts();
+ for ($i = 0; $i < count($slideLayouts); ++$i) {
+ $this->_writeOverrideContentType(
+ $objWriter, '/ppt/slideLayouts/slideLayout' . ($i + 1) . '.xml', 'application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml'
+ );
+ }
+
+ // Slides
+ $slideCount = $pPHPPowerPoint->getSlideCount();
+ for ($i = 0; $i < $slideCount; ++$i) {
+ $this->_writeOverrideContentType(
+ $objWriter, '/ppt/slides/slide' . ($i + 1) . '.xml', 'application/vnd.openxmlformats-officedocument.presentationml.slide+xml'
+ );
+ }
+
+ // Add media content-types
+ $aMediaContentTypes = array();
+ $mediaCount = $this->getParentWriter()->getDrawingHashTable()->count();
+ for ($i = 0; $i < $mediaCount; ++$i) {
+ $extension = '';
+ $mimeType = '';
+
+ if ($this->getParentWriter()->getDrawingHashTable()->getByIndex($i) instanceof PHPPowerPoint_Shape_Drawing) {
+ $extension = strtolower($this->getParentWriter()->getDrawingHashTable()->getByIndex($i)->getExtension());
+ $mimeType = $this->_getImageMimeType( $this->getParentWriter()->getDrawingHashTable()->getByIndex($i)->getPath() );
+ } else if ($this->getParentWriter()->getDrawingHashTable()->getByIndex($i) instanceof PHPPowerPoint_Shape_MemoryDrawing) {
+ $extension = strtolower($this->getParentWriter()->getDrawingHashTable()->getByIndex($i)->getMimeType());
+ $extension = explode('/', $extension);
+ $extension = $extension[1];
+
+ $mimeType = $this->getParentWriter()->getDrawingHashTable()->getByIndex($i)->getMimeType();
+ }
+
+ if (!isset( $aMediaContentTypes[$extension]) ) {
+ $aMediaContentTypes[$extension] = $mimeType;
+
+ $this->_writeDefaultContentType(
+ $objWriter, $extension, $mimeType
+ );
+ }
+ }
+
+ $objWriter->endElement();
+
+ // Return
+ return $objWriter->getData();
+ }
+
+ /**
+ * Get image mime type
+ *
+ * @param string $pFile Filename
+ * @return string Mime Type
+ * @throws Exception
+ */
+ private function _getImageMimeType($pFile = '')
+ {
+ if (PHPPowerPoint_Shared_File::file_exists($pFile)) {
+ $image = getimagesize($pFile);
+ return image_type_to_mime_type($image[2]);
+ } else {
+ throw new Exception("File $pFile does not exist");
+ }
+ }
+
+ /**
+ * Write Default content type
+ *
+ * @param PHPPowerPoint_Shared_XMLWriter $objWriter XML Writer
+ * @param string $pPartname Part name
+ * @param string $pContentType Content type
+ * @throws Exception
+ */
+ private function _writeDefaultContentType(PHPPowerPoint_Shared_XMLWriter $objWriter = null, $pPartname = '', $pContentType = '')
+ {
+ if ($pPartname != '' && $pContentType != '') {
+ // Write content type
+ $objWriter->startElement('Default');
+ $objWriter->writeAttribute('Extension', $pPartname);
+ $objWriter->writeAttribute('ContentType', $pContentType);
+ $objWriter->endElement();
+ } else {
+ throw new Exception("Invalid parameters passed.");
+ }
+ }
+
+ /**
+ * Write Override content type
+ *
+ * @param PHPPowerPoint_Shared_XMLWriter $objWriter XML Writer
+ * @param string $pPartname Part name
+ * @param string $pContentType Content type
+ * @throws Exception
+ */
+ private function _writeOverrideContentType(PHPPowerPoint_Shared_XMLWriter $objWriter = null, $pPartname = '', $pContentType = '')
+ {
+ if ($pPartname != '' && $pContentType != '') {
+ // Write content type
+ $objWriter->startElement('Override');
+ $objWriter->writeAttribute('PartName', $pPartname);
+ $objWriter->writeAttribute('ContentType', $pContentType);
+ $objWriter->endElement();
+ } else {
+ throw new Exception("Invalid parameters passed.");
+ }
+ }
+}
diff --git a/admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007/DocProps.php b/admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007/DocProps.php
new file mode 100644
index 0000000..403ca03
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007/DocProps.php
@@ -0,0 +1,218 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * Copyright (c) 2009 - 2010 PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Writer_PowerPoint2007
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/** PHPPowerPoint */
+require_once 'PHPPowerPoint.php';
+
+/** PHPPowerPoint_Writer_PowerPoint2007 */
+require_once 'PHPPowerPoint/Writer/PowerPoint2007.php';
+
+/** PHPPowerPoint_Writer_PowerPoint2007_WriterPart */
+require_once 'PHPPowerPoint/Writer/PowerPoint2007/WriterPart.php';
+
+/** PHPPowerPoint_Shared_XMLWriter */
+require_once 'PHPPowerPoint/Shared/XMLWriter.php';
+
+
+/**
+ * PHPPowerPoint_Writer_PowerPoint2007_DocProps
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Writer_PowerPoint2007
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+class PHPPowerPoint_Writer_PowerPoint2007_DocProps extends PHPPowerPoint_Writer_PowerPoint2007_WriterPart
+{
+/**
+ * Write docProps/app.xml to XML format
+ *
+ * @param PHPPowerPoint $pPHPPowerPoint
+ * @return string XML Output
+ * @throws Exception
+ */
+ public function writeDocPropsApp(PHPPowerPoint $pPHPPowerPoint = null)
+ {
+ // Create XML writer
+ $objWriter = null;
+ if ($this->getParentWriter()->getUseDiskCaching()) {
+ $objWriter = new PHPPowerPoint_Shared_XMLWriter(PHPPowerPoint_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory());
+ } else {
+ $objWriter = new PHPPowerPoint_Shared_XMLWriter(PHPPowerPoint_Shared_XMLWriter::STORAGE_MEMORY);
+ }
+
+ // XML header
+ $objWriter->startDocument('1.0','UTF-8','yes');
+
+ // Properties
+ $objWriter->startElement('Properties');
+ $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/officeDocument/2006/extended-properties');
+ $objWriter->writeAttribute('xmlns:vt', 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes');
+
+ // Application
+ $objWriter->writeElement('Application', 'Microsoft Office PowerPoint');
+
+ // Slides
+ $objWriter->writeElement('Slides', $pPHPPowerPoint->getSlideCount());
+
+ // ScaleCrop
+ $objWriter->writeElement('ScaleCrop', 'false');
+
+ // HeadingPairs
+ $objWriter->startElement('HeadingPairs');
+
+ // Vector
+ $objWriter->startElement('vt:vector');
+ $objWriter->writeAttribute('size', '4');
+ $objWriter->writeAttribute('baseType', 'variant');
+
+ // Variant
+ $objWriter->startElement('vt:variant');
+ $objWriter->writeElement('vt:lpstr', 'Theme');
+ $objWriter->endElement();
+
+ // Variant
+ $objWriter->startElement('vt:variant');
+ $objWriter->writeElement('vt:i4', '1');
+ $objWriter->endElement();
+
+ // Variant
+ $objWriter->startElement('vt:variant');
+ $objWriter->writeElement('vt:lpstr', 'Slide Titles');
+ $objWriter->endElement();
+
+ // Variant
+ $objWriter->startElement('vt:variant');
+ $objWriter->writeElement('vt:i4', '1');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // TitlesOfParts
+ $objWriter->startElement('TitlesOfParts');
+
+ // Vector
+ $objWriter->startElement('vt:vector');
+ $objWriter->writeAttribute('size', '1');
+ $objWriter->writeAttribute('baseType', 'lpstr');
+
+ $objWriter->writeElement('vt:lpstr', 'Office Theme');
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // Company
+ $objWriter->writeElement('Company', 'Microsoft Corporation');
+
+ // LinksUpToDate
+ $objWriter->writeElement('LinksUpToDate', 'false');
+
+ // SharedDoc
+ $objWriter->writeElement('SharedDoc', 'false');
+
+ // HyperlinksChanged
+ $objWriter->writeElement('HyperlinksChanged', 'false');
+
+ // AppVersion
+ $objWriter->writeElement('AppVersion', '12.0000');
+
+ $objWriter->endElement();
+
+ // Return
+ return $objWriter->getData();
+ }
+
+ /**
+ * Write docProps/core.xml to XML format
+ *
+ * @param PHPPowerPoint $pPHPPowerPoint
+ * @return string XML Output
+ * @throws Exception
+ */
+ public function writeDocPropsCore(PHPPowerPoint $pPHPPowerPoint = null)
+ {
+ // Create XML writer
+ $objWriter = null;
+ if ($this->getParentWriter()->getUseDiskCaching()) {
+ $objWriter = new PHPPowerPoint_Shared_XMLWriter(PHPPowerPoint_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory());
+ } else {
+ $objWriter = new PHPPowerPoint_Shared_XMLWriter(PHPPowerPoint_Shared_XMLWriter::STORAGE_MEMORY);
+ }
+
+ // XML header
+ $objWriter->startDocument('1.0','UTF-8','yes');
+
+ // cp:coreProperties
+ $objWriter->startElement('cp:coreProperties');
+ $objWriter->writeAttribute('xmlns:cp', 'http://schemas.openxmlformats.org/package/2006/metadata/core-properties');
+ $objWriter->writeAttribute('xmlns:dc', 'http://purl.org/dc/elements/1.1/');
+ $objWriter->writeAttribute('xmlns:dcterms', 'http://purl.org/dc/terms/');
+ $objWriter->writeAttribute('xmlns:dcmitype', 'http://purl.org/dc/dcmitype/');
+ $objWriter->writeAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance');
+
+ // dc:creator
+ $objWriter->writeElement('dc:creator', $pPHPPowerPoint->getProperties()->getCreator());
+
+ // cp:lastModifiedBy
+ $objWriter->writeElement('cp:lastModifiedBy', $pPHPPowerPoint->getProperties()->getLastModifiedBy());
+
+ // dcterms:created
+ $objWriter->startElement('dcterms:created');
+ $objWriter->writeAttribute('xsi:type', 'dcterms:W3CDTF');
+ $objWriter->writeRaw(date(DATE_W3C, $pPHPPowerPoint->getProperties()->getCreated()));
+ $objWriter->endElement();
+
+ // dcterms:modified
+ $objWriter->startElement('dcterms:modified');
+ $objWriter->writeAttribute('xsi:type', 'dcterms:W3CDTF');
+ $objWriter->writeRaw(date(DATE_W3C, $pPHPPowerPoint->getProperties()->getModified()));
+ $objWriter->endElement();
+
+ // dc:title
+ $objWriter->writeElement('dc:title', $pPHPPowerPoint->getProperties()->getTitle());
+
+ // dc:description
+ $objWriter->writeElement('dc:description', $pPHPPowerPoint->getProperties()->getDescription());
+
+ // dc:subject
+ $objWriter->writeElement('dc:subject', $pPHPPowerPoint->getProperties()->getSubject());
+
+ // cp:keywords
+ $objWriter->writeElement('cp:keywords', $pPHPPowerPoint->getProperties()->getKeywords());
+
+ // cp:category
+ $objWriter->writeElement('cp:category', $pPHPPowerPoint->getProperties()->getCategory());
+
+ $objWriter->endElement();
+
+ // Return
+ return $objWriter->getData();
+ }
+}
diff --git a/admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007/Drawing.php b/admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007/Drawing.php
new file mode 100644
index 0000000..e1491b9
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007/Drawing.php
@@ -0,0 +1,94 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * Copyright (c) 2009 - 2010 PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Writer_PowerPoint2007
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/** PHPPowerPoint */
+require_once 'PHPPowerPoint.php';
+
+/** PHPPowerPoint_Writer_PowerPoint2007 */
+require_once 'PHPPowerPoint/Writer/PowerPoint2007.php';
+
+/** PHPPowerPoint_Writer_PowerPoint2007_WriterPart */
+require_once 'PHPPowerPoint/Writer/PowerPoint2007/WriterPart.php';
+
+/** PHPPowerPoint_Shape_BaseDrawing */
+require_once 'PHPPowerPoint/Shape/BaseDrawing.php';
+
+/** PHPPowerPoint_Shape_Drawing */
+require_once 'PHPPowerPoint/Shape/Drawing.php';
+
+/** PHPPowerPoint_Shape_MemoryDrawing */
+require_once 'PHPPowerPoint/Shape/MemoryDrawing.php';
+
+/** PHPPowerPoint_Slide */
+require_once 'PHPPowerPoint/Slide.php';
+
+/** PHPPowerPoint_Shared_Drawing */
+require_once 'PHPPowerPoint/Shared/Drawing.php';
+
+/** PHPPowerPoint_Shared_XMLWriter */
+require_once 'PHPPowerPoint/Shared/XMLWriter.php';
+
+
+/**
+ * PHPPowerPoint_Writer_PowerPoint2007_Drawing
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Writer_PowerPoint2007
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+class PHPPowerPoint_Writer_PowerPoint2007_Drawing extends PHPPowerPoint_Writer_PowerPoint2007_WriterPart
+{
+ /**
+ * Get an array of all drawings
+ *
+ * @param PHPPowerPoint $pPHPPowerPoint
+ * @return PHPPowerPoint_Slide_Drawing[] All drawings in PHPPowerPoint
+ * @throws Exception
+ */
+ public function allDrawings(PHPPowerPoint $pPHPPowerPoint = null)
+ {
+ // Get an array of all drawings
+ $aDrawings = array();
+
+ // Loop trough PHPPowerPoint
+ $slideCount = $pPHPPowerPoint->getSlideCount();
+ for ($i = 0; $i < $slideCount; ++$i) {
+ // Loop trough images and add to array
+ $iterator = $pPHPPowerPoint->getSlide($i)->getShapeCollection()->getIterator();
+ while ($iterator->valid()) {
+ if ($iterator->current() instanceof PHPPowerPoint_Shape_BaseDrawing) {
+ $aDrawings[] = $iterator->current();
+ }
+
+ $iterator->next();
+ }
+ }
+
+ return $aDrawings;
+ }
+}
diff --git a/admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007/LayoutPack.php b/admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007/LayoutPack.php
new file mode 100644
index 0000000..4448547
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007/LayoutPack.php
@@ -0,0 +1,124 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * Copyright (c) 2009 - 2010 PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Writer_PowerPoint2007
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/**
+ * PHPPowerPoint_Writer_PowerPoint2007_LayoutPack
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Writer_PowerPoint2007
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+abstract class PHPPowerPoint_Writer_PowerPoint2007_LayoutPack
+{
+ /**
+ * Master slide.
+ *
+ * @var array
+ */
+ protected $_masterSlide = array();
+
+ /**
+ * Array of slide layouts.
+ *
+ * These are all an array consisting of:
+ * - name (string)
+ * - body (string)
+ *
+ * @var array
+ */
+ protected $_layouts = array();
+
+ /**
+ * Get master slide.
+ *
+ * @return array
+ */
+ public function getMasterSlide()
+ {
+ return $this->_masterSlide;
+ }
+
+ /**
+ * Get array of slide layouts.
+ *
+ * These are all an array consisting of:
+ * - name (string)
+ * - body (string)
+ *
+ * @return array
+ */
+ public function getLayouts()
+ {
+ return $this->_layouts;
+ }
+
+ /**
+ * Find specific slide layout.
+ *
+ * This is an array consisting of:
+ * - name (string)
+ * - body (string)
+ *
+ * @return array
+ * @throws Exception
+ */
+ public function findLayout($name = '')
+ {
+ foreach ($this->_layouts as $layout)
+ {
+ if ($layout['name'] == $name)
+ {
+ return $layout;
+ }
+ }
+
+ throw new Exception("Could not find slide layout $name in current layout pack.");
+ }
+
+ /**
+ * Find specific slide layout index.
+ *
+ * @return int
+ * @throws Exception
+ */
+ public function findLayoutIndex($name = '')
+ {
+ $i = 0;
+ foreach ($this->_layouts as $layout)
+ {
+ if ($layout['name'] == $name)
+ {
+ return $i;
+ }
+
+ ++$i;
+ }
+
+ throw new Exception("Could not find slide layout $name in current layout pack.");
+ }
+}
diff --git a/admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007/LayoutPack/Default.php b/admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007/LayoutPack/Default.php
new file mode 100644
index 0000000..46df209
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007/LayoutPack/Default.php
@@ -0,0 +1,2983 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * Copyright (c) 2009 - 2010 PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Writer_PowerPoint2007
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/** PHPPowerPoint_Slide_Layout */
+require_once 'PHPPowerPoint/Slide/Layout.php';
+
+/** PHPPowerPoint_Writer_PowerPoint2007_LayoutPack */
+require_once 'PHPPowerPoint/Writer/PowerPoint2007/LayoutPack.php';
+
+
+/**
+ * PHPPowerPoint_Writer_PowerPoint2007_LayoutPack_Default
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Writer_PowerPoint2007
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+class PHPPowerPoint_Writer_PowerPoint2007_LayoutPack_Default extends PHPPowerPoint_Writer_PowerPoint2007_LayoutPack
+{
+ /**
+ * PHPPowerPoint_Writer_PowerPoint2007_LayoutPack_Default
+ */
+ public function __construct() {
+ // Master slide
+ $this->_masterSlide = array(
+ 'body' => '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<p:sldMaster xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main">
+ <p:cSld>
+ <p:bg>
+ <p:bgRef idx="1001">
+ <a:schemeClr val="bg1" />
+ </p:bgRef>
+ </p:bg>
+ <p:spTree>
+ <p:nvGrpSpPr>
+ <p:cNvPr id="1" name="" />
+ <p:cNvGrpSpPr />
+ <p:nvPr />
+ </p:nvGrpSpPr>
+ <p:grpSpPr>
+ <a:xfrm>
+ <a:off x="0" y="0" />
+ <a:ext cx="0" cy="0" />
+ <a:chOff x="0" y="0" />
+ <a:chExt cx="0" cy="0" />
+ </a:xfrm>
+ </p:grpSpPr>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="2" name="Title Placeholder 1" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="title" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr>
+ <a:xfrm>
+ <a:off x="457200" y="274638" />
+ <a:ext cx="8229600" cy="1143000" />
+ </a:xfrm>
+ <a:prstGeom prst="rect">
+ <a:avLst />
+ </a:prstGeom>
+ </p:spPr>
+ <p:txBody>
+ <a:bodyPr vert="horz" lIns="91440" tIns="45720" rIns="91440" bIns="45720" rtlCol="0" anchor="ctr">
+ <a:normAutofit />
+ </a:bodyPr>
+ <a:lstStyle />
+ <a:p>
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Click to edit Master title style</a:t>
+ </a:r>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="3" name="Text Placeholder 2" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="body" idx="1" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr>
+ <a:xfrm>
+ <a:off x="457200" y="1600200" />
+ <a:ext cx="8229600" cy="4525963" />
+ </a:xfrm>
+ <a:prstGeom prst="rect">
+ <a:avLst />
+ </a:prstGeom>
+ </p:spPr>
+ <p:txBody>
+ <a:bodyPr vert="horz" lIns="91440" tIns="45720" rIns="91440" bIns="45720" rtlCol="0">
+ <a:normAutofit />
+ </a:bodyPr>
+ <a:lstStyle />
+ <a:p>
+ <a:pPr lvl="0" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Click to edit Master text styles</a:t>
+ </a:r>
+ </a:p>
+ <a:p>
+ <a:pPr lvl="1" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Second level</a:t>
+ </a:r>
+ </a:p>
+ <a:p>
+ <a:pPr lvl="2" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Third level</a:t>
+ </a:r>
+ </a:p>
+ <a:p>
+ <a:pPr lvl="3" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Fourth level</a:t>
+ </a:r>
+ </a:p>
+ <a:p>
+ <a:pPr lvl="4" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Fifth level</a:t>
+ </a:r>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="4" name="Date Placeholder 3" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="dt" sz="half" idx="2" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr>
+ <a:xfrm>
+ <a:off x="457200" y="6356350" />
+ <a:ext cx="2133600" cy="365125" />
+ </a:xfrm>
+ <a:prstGeom prst="rect">
+ <a:avLst />
+ </a:prstGeom>
+ </p:spPr>
+ <p:txBody>
+ <a:bodyPr vert="horz" lIns="91440" tIns="45720" rIns="91440" bIns="45720" rtlCol="0" anchor="ctr" />
+ <a:lstStyle>
+ <a:lvl1pPr algn="l">
+ <a:defRPr sz="1200">
+ <a:solidFill>
+ <a:schemeClr val="tx1">
+ <a:tint val="75000" />
+ </a:schemeClr>
+ </a:solidFill>
+ </a:defRPr>
+ </a:lvl1pPr>
+ </a:lstStyle>
+ <a:p>
+ <a:fld id="{C6430DBB-9FD5-43E7-88F1-55A569E9525E}" type="datetimeFigureOut">
+ <a:rPr lang="nl-BE" smtClean="0" />
+ <a:t>16/04/2009</a:t>
+ </a:fld>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="5" name="Footer Placeholder 4" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="ftr" sz="quarter" idx="3" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr>
+ <a:xfrm>
+ <a:off x="3124200" y="6356350" />
+ <a:ext cx="2895600" cy="365125" />
+ </a:xfrm>
+ <a:prstGeom prst="rect">
+ <a:avLst />
+ </a:prstGeom>
+ </p:spPr>
+ <p:txBody>
+ <a:bodyPr vert="horz" lIns="91440" tIns="45720" rIns="91440" bIns="45720" rtlCol="0" anchor="ctr" />
+ <a:lstStyle>
+ <a:lvl1pPr algn="ctr">
+ <a:defRPr sz="1200">
+ <a:solidFill>
+ <a:schemeClr val="tx1">
+ <a:tint val="75000" />
+ </a:schemeClr>
+ </a:solidFill>
+ </a:defRPr>
+ </a:lvl1pPr>
+ </a:lstStyle>
+ <a:p>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="6" name="Slide Number Placeholder 5" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="sldNum" sz="quarter" idx="4" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr>
+ <a:xfrm>
+ <a:off x="6553200" y="6356350" />
+ <a:ext cx="2133600" cy="365125" />
+ </a:xfrm>
+ <a:prstGeom prst="rect">
+ <a:avLst />
+ </a:prstGeom>
+ </p:spPr>
+ <p:txBody>
+ <a:bodyPr vert="horz" lIns="91440" tIns="45720" rIns="91440" bIns="45720" rtlCol="0" anchor="ctr" />
+ <a:lstStyle>
+ <a:lvl1pPr algn="r">
+ <a:defRPr sz="1200">
+ <a:solidFill>
+ <a:schemeClr val="tx1">
+ <a:tint val="75000" />
+ </a:schemeClr>
+ </a:solidFill>
+ </a:defRPr>
+ </a:lvl1pPr>
+ </a:lstStyle>
+ <a:p>
+ <a:fld id="{EE336665-E7E9-4861-9ADF-F11A47CBAD79}" type="slidenum">
+ <a:rPr lang="nl-BE" smtClean="0" />
+ <a:t>&lt;#&gt;</a:t>
+ </a:fld>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ </p:spTree>
+ </p:cSld>
+ <p:clrMap bg1="lt1" tx1="dk1" bg2="lt2" tx2="dk2" accent1="accent1" accent2="accent2" accent3="accent3" accent4="accent4" accent5="accent5" accent6="accent6" hlink="hlink" folHlink="folHlink" />
+ <p:sldLayoutIdLst>
+ <p:sldLayoutId id="2147483649" r:id="rId1" />
+ <p:sldLayoutId id="2147483650" r:id="rId2" />
+ <p:sldLayoutId id="2147483651" r:id="rId3" />
+ <p:sldLayoutId id="2147483652" r:id="rId4" />
+ <p:sldLayoutId id="2147483653" r:id="rId5" />
+ <p:sldLayoutId id="2147483654" r:id="rId6" />
+ <p:sldLayoutId id="2147483655" r:id="rId7" />
+ <p:sldLayoutId id="2147483656" r:id="rId8" />
+ <p:sldLayoutId id="2147483657" r:id="rId9" />
+ <p:sldLayoutId id="2147483658" r:id="rId10" />
+ <p:sldLayoutId id="2147483659" r:id="rId11" />
+ </p:sldLayoutIdLst>
+ <p:txStyles>
+ <p:titleStyle>
+ <a:lvl1pPr algn="ctr" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1">
+ <a:spcBef>
+ <a:spcPct val="0" />
+ </a:spcBef>
+ <a:buNone />
+ <a:defRPr sz="4400" kern="1200">
+ <a:solidFill>
+ <a:schemeClr val="tx1" />
+ </a:solidFill>
+ <a:latin typeface="+mj-lt" />
+ <a:ea typeface="+mj-ea" />
+ <a:cs typeface="+mj-cs" />
+ </a:defRPr>
+ </a:lvl1pPr>
+ </p:titleStyle>
+ <p:bodyStyle>
+ <a:lvl1pPr marL="342900" indent="-342900" algn="l" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1">
+ <a:spcBef>
+ <a:spcPct val="20000" />
+ </a:spcBef>
+ <a:buFont typeface="Arial" pitchFamily="34" charset="0" />
+ <a:buChar char="&#149;" />
+ <a:defRPr sz="3200" kern="1200">
+ <a:solidFill>
+ <a:schemeClr val="tx1" />
+ </a:solidFill>
+ <a:latin typeface="+mn-lt" />
+ <a:ea typeface="+mn-ea" />
+ <a:cs typeface="+mn-cs" />
+ </a:defRPr>
+ </a:lvl1pPr>
+ <a:lvl2pPr marL="742950" indent="-285750" algn="l" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1">
+ <a:spcBef>
+ <a:spcPct val="20000" />
+ </a:spcBef>
+ <a:buFont typeface="Arial" pitchFamily="34" charset="0" />
+ <a:buChar char="-" />
+ <a:defRPr sz="2800" kern="1200">
+ <a:solidFill>
+ <a:schemeClr val="tx1" />
+ </a:solidFill>
+ <a:latin typeface="+mn-lt" />
+ <a:ea typeface="+mn-ea" />
+ <a:cs typeface="+mn-cs" />
+ </a:defRPr>
+ </a:lvl2pPr>
+ <a:lvl3pPr marL="1143000" indent="-228600" algn="l" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1">
+ <a:spcBef>
+ <a:spcPct val="20000" />
+ </a:spcBef>
+ <a:buFont typeface="Arial" pitchFamily="34" charset="0" />
+ <a:buChar char="&#149;" />
+ <a:defRPr sz="2400" kern="1200">
+ <a:solidFill>
+ <a:schemeClr val="tx1" />
+ </a:solidFill>
+ <a:latin typeface="+mn-lt" />
+ <a:ea typeface="+mn-ea" />
+ <a:cs typeface="+mn-cs" />
+ </a:defRPr>
+ </a:lvl3pPr>
+ <a:lvl4pPr marL="1600200" indent="-228600" algn="l" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1">
+ <a:spcBef>
+ <a:spcPct val="20000" />
+ </a:spcBef>
+ <a:buFont typeface="Arial" pitchFamily="34" charset="0" />
+ <a:buChar char="-" />
+ <a:defRPr sz="2000" kern="1200">
+ <a:solidFill>
+ <a:schemeClr val="tx1" />
+ </a:solidFill>
+ <a:latin typeface="+mn-lt" />
+ <a:ea typeface="+mn-ea" />
+ <a:cs typeface="+mn-cs" />
+ </a:defRPr>
+ </a:lvl4pPr>
+ <a:lvl5pPr marL="2057400" indent="-228600" algn="l" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1">
+ <a:spcBef>
+ <a:spcPct val="20000" />
+ </a:spcBef>
+ <a:buFont typeface="Arial" pitchFamily="34" charset="0" />
+ <a:buChar char="&#187;" />
+ <a:defRPr sz="2000" kern="1200">
+ <a:solidFill>
+ <a:schemeClr val="tx1" />
+ </a:solidFill>
+ <a:latin typeface="+mn-lt" />
+ <a:ea typeface="+mn-ea" />
+ <a:cs typeface="+mn-cs" />
+ </a:defRPr>
+ </a:lvl5pPr>
+ <a:lvl6pPr marL="2514600" indent="-228600" algn="l" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1">
+ <a:spcBef>
+ <a:spcPct val="20000" />
+ </a:spcBef>
+ <a:buFont typeface="Arial" pitchFamily="34" charset="0" />
+ <a:buChar char="&#149;" />
+ <a:defRPr sz="2000" kern="1200">
+ <a:solidFill>
+ <a:schemeClr val="tx1" />
+ </a:solidFill>
+ <a:latin typeface="+mn-lt" />
+ <a:ea typeface="+mn-ea" />
+ <a:cs typeface="+mn-cs" />
+ </a:defRPr>
+ </a:lvl6pPr>
+ <a:lvl7pPr marL="2971800" indent="-228600" algn="l" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1">
+ <a:spcBef>
+ <a:spcPct val="20000" />
+ </a:spcBef>
+ <a:buFont typeface="Arial" pitchFamily="34" charset="0" />
+ <a:buChar char="&#149;" />
+ <a:defRPr sz="2000" kern="1200">
+ <a:solidFill>
+ <a:schemeClr val="tx1" />
+ </a:solidFill>
+ <a:latin typeface="+mn-lt" />
+ <a:ea typeface="+mn-ea" />
+ <a:cs typeface="+mn-cs" />
+ </a:defRPr>
+ </a:lvl7pPr>
+ <a:lvl8pPr marL="3429000" indent="-228600" algn="l" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1">
+ <a:spcBef>
+ <a:spcPct val="20000" />
+ </a:spcBef>
+ <a:buFont typeface="Arial" pitchFamily="34" charset="0" />
+ <a:buChar char="&#149;" />
+ <a:defRPr sz="2000" kern="1200">
+ <a:solidFill>
+ <a:schemeClr val="tx1" />
+ </a:solidFill>
+ <a:latin typeface="+mn-lt" />
+ <a:ea typeface="+mn-ea" />
+ <a:cs typeface="+mn-cs" />
+ </a:defRPr>
+ </a:lvl8pPr>
+ <a:lvl9pPr marL="3886200" indent="-228600" algn="l" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1">
+ <a:spcBef>
+ <a:spcPct val="20000" />
+ </a:spcBef>
+ <a:buFont typeface="Arial" pitchFamily="34" charset="0" />
+ <a:buChar char="&#149;" />
+ <a:defRPr sz="2000" kern="1200">
+ <a:solidFill>
+ <a:schemeClr val="tx1" />
+ </a:solidFill>
+ <a:latin typeface="+mn-lt" />
+ <a:ea typeface="+mn-ea" />
+ <a:cs typeface="+mn-cs" />
+ </a:defRPr>
+ </a:lvl9pPr>
+ </p:bodyStyle>
+ <p:otherStyle>
+ <a:defPPr>
+ <a:defRPr lang="nl-BE" />
+ </a:defPPr>
+ <a:lvl1pPr marL="0" algn="l" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1">
+ <a:defRPr sz="1800" kern="1200">
+ <a:solidFill>
+ <a:schemeClr val="tx1" />
+ </a:solidFill>
+ <a:latin typeface="+mn-lt" />
+ <a:ea typeface="+mn-ea" />
+ <a:cs typeface="+mn-cs" />
+ </a:defRPr>
+ </a:lvl1pPr>
+ <a:lvl2pPr marL="457200" algn="l" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1">
+ <a:defRPr sz="1800" kern="1200">
+ <a:solidFill>
+ <a:schemeClr val="tx1" />
+ </a:solidFill>
+ <a:latin typeface="+mn-lt" />
+ <a:ea typeface="+mn-ea" />
+ <a:cs typeface="+mn-cs" />
+ </a:defRPr>
+ </a:lvl2pPr>
+ <a:lvl3pPr marL="914400" algn="l" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1">
+ <a:defRPr sz="1800" kern="1200">
+ <a:solidFill>
+ <a:schemeClr val="tx1" />
+ </a:solidFill>
+ <a:latin typeface="+mn-lt" />
+ <a:ea typeface="+mn-ea" />
+ <a:cs typeface="+mn-cs" />
+ </a:defRPr>
+ </a:lvl3pPr>
+ <a:lvl4pPr marL="1371600" algn="l" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1">
+ <a:defRPr sz="1800" kern="1200">
+ <a:solidFill>
+ <a:schemeClr val="tx1" />
+ </a:solidFill>
+ <a:latin typeface="+mn-lt" />
+ <a:ea typeface="+mn-ea" />
+ <a:cs typeface="+mn-cs" />
+ </a:defRPr>
+ </a:lvl4pPr>
+ <a:lvl5pPr marL="1828800" algn="l" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1">
+ <a:defRPr sz="1800" kern="1200">
+ <a:solidFill>
+ <a:schemeClr val="tx1" />
+ </a:solidFill>
+ <a:latin typeface="+mn-lt" />
+ <a:ea typeface="+mn-ea" />
+ <a:cs typeface="+mn-cs" />
+ </a:defRPr>
+ </a:lvl5pPr>
+ <a:lvl6pPr marL="2286000" algn="l" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1">
+ <a:defRPr sz="1800" kern="1200">
+ <a:solidFill>
+ <a:schemeClr val="tx1" />
+ </a:solidFill>
+ <a:latin typeface="+mn-lt" />
+ <a:ea typeface="+mn-ea" />
+ <a:cs typeface="+mn-cs" />
+ </a:defRPr>
+ </a:lvl6pPr>
+ <a:lvl7pPr marL="2743200" algn="l" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1">
+ <a:defRPr sz="1800" kern="1200">
+ <a:solidFill>
+ <a:schemeClr val="tx1" />
+ </a:solidFill>
+ <a:latin typeface="+mn-lt" />
+ <a:ea typeface="+mn-ea" />
+ <a:cs typeface="+mn-cs" />
+ </a:defRPr>
+ </a:lvl7pPr>
+ <a:lvl8pPr marL="3200400" algn="l" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1">
+ <a:defRPr sz="1800" kern="1200">
+ <a:solidFill>
+ <a:schemeClr val="tx1" />
+ </a:solidFill>
+ <a:latin typeface="+mn-lt" />
+ <a:ea typeface="+mn-ea" />
+ <a:cs typeface="+mn-cs" />
+ </a:defRPr>
+ </a:lvl8pPr>
+ <a:lvl9pPr marL="3657600" algn="l" defTabSz="914400" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1">
+ <a:defRPr sz="1800" kern="1200">
+ <a:solidFill>
+ <a:schemeClr val="tx1" />
+ </a:solidFill>
+ <a:latin typeface="+mn-lt" />
+ <a:ea typeface="+mn-ea" />
+ <a:cs typeface="+mn-cs" />
+ </a:defRPr>
+ </a:lvl9pPr>
+ </p:otherStyle>
+ </p:txStyles>
+</p:sldMaster>');
+
+ // Layouts - PHPPowerPoint_Slide_Layout::TITLE_SLIDE
+ $this->_layouts[] = array(
+ 'name' => PHPPowerPoint_Slide_Layout::TITLE_SLIDE,
+ 'body' => '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="title" preserve="1">
+ <p:cSld name="Title Slide">
+ <p:spTree>
+ <p:nvGrpSpPr>
+ <p:cNvPr id="1" name="" />
+ <p:cNvGrpSpPr />
+ <p:nvPr />
+ </p:nvGrpSpPr>
+ <p:grpSpPr>
+ <a:xfrm>
+ <a:off x="0" y="0" />
+ <a:ext cx="0" cy="0" />
+ <a:chOff x="0" y="0" />
+ <a:chExt cx="0" cy="0" />
+ </a:xfrm>
+ </p:grpSpPr>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="2" name="Title 1" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="ctrTitle" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr>
+ <a:xfrm>
+ <a:off x="685800" y="2130425" />
+ <a:ext cx="7772400" cy="1470025" />
+ </a:xfrm>
+ </p:spPr>
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle />
+ <a:p>
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Click to edit Master title style</a:t>
+ </a:r>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="3" name="Subtitle 2" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="subTitle" idx="1" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr>
+ <a:xfrm>
+ <a:off x="1371600" y="3886200" />
+ <a:ext cx="6400800" cy="1752600" />
+ </a:xfrm>
+ </p:spPr>
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle>
+ <a:lvl1pPr marL="0" indent="0" algn="ctr">
+ <a:buNone />
+ <a:defRPr>
+ <a:solidFill>
+ <a:schemeClr val="tx1">
+ <a:tint val="75000" />
+ </a:schemeClr>
+ </a:solidFill>
+ </a:defRPr>
+ </a:lvl1pPr>
+ <a:lvl2pPr marL="457200" indent="0" algn="ctr">
+ <a:buNone />
+ <a:defRPr>
+ <a:solidFill>
+ <a:schemeClr val="tx1">
+ <a:tint val="75000" />
+ </a:schemeClr>
+ </a:solidFill>
+ </a:defRPr>
+ </a:lvl2pPr>
+ <a:lvl3pPr marL="914400" indent="0" algn="ctr">
+ <a:buNone />
+ <a:defRPr>
+ <a:solidFill>
+ <a:schemeClr val="tx1">
+ <a:tint val="75000" />
+ </a:schemeClr>
+ </a:solidFill>
+ </a:defRPr>
+ </a:lvl3pPr>
+ <a:lvl4pPr marL="1371600" indent="0" algn="ctr">
+ <a:buNone />
+ <a:defRPr>
+ <a:solidFill>
+ <a:schemeClr val="tx1">
+ <a:tint val="75000" />
+ </a:schemeClr>
+ </a:solidFill>
+ </a:defRPr>
+ </a:lvl4pPr>
+ <a:lvl5pPr marL="1828800" indent="0" algn="ctr">
+ <a:buNone />
+ <a:defRPr>
+ <a:solidFill>
+ <a:schemeClr val="tx1">
+ <a:tint val="75000" />
+ </a:schemeClr>
+ </a:solidFill>
+ </a:defRPr>
+ </a:lvl5pPr>
+ <a:lvl6pPr marL="2286000" indent="0" algn="ctr">
+ <a:buNone />
+ <a:defRPr>
+ <a:solidFill>
+ <a:schemeClr val="tx1">
+ <a:tint val="75000" />
+ </a:schemeClr>
+ </a:solidFill>
+ </a:defRPr>
+ </a:lvl6pPr>
+ <a:lvl7pPr marL="2743200" indent="0" algn="ctr">
+ <a:buNone />
+ <a:defRPr>
+ <a:solidFill>
+ <a:schemeClr val="tx1">
+ <a:tint val="75000" />
+ </a:schemeClr>
+ </a:solidFill>
+ </a:defRPr>
+ </a:lvl7pPr>
+ <a:lvl8pPr marL="3200400" indent="0" algn="ctr">
+ <a:buNone />
+ <a:defRPr>
+ <a:solidFill>
+ <a:schemeClr val="tx1">
+ <a:tint val="75000" />
+ </a:schemeClr>
+ </a:solidFill>
+ </a:defRPr>
+ </a:lvl8pPr>
+ <a:lvl9pPr marL="3657600" indent="0" algn="ctr">
+ <a:buNone />
+ <a:defRPr>
+ <a:solidFill>
+ <a:schemeClr val="tx1">
+ <a:tint val="75000" />
+ </a:schemeClr>
+ </a:solidFill>
+ </a:defRPr>
+ </a:lvl9pPr>
+ </a:lstStyle>
+ <a:p>
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Click to edit Master subtitle style</a:t>
+ </a:r>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="4" name="Date Placeholder 3" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="dt" sz="half" idx="10" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr />
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle />
+ <a:p>
+ <a:fld id="{6F0DA8BB-0D18-469F-8022-DD923457DE3A}" type="datetimeFigureOut">
+ <a:rPr lang="nl-BE" smtClean="0" />
+ <a:t>16/04/2009</a:t>
+ </a:fld>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="5" name="Footer Placeholder 4" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="ftr" sz="quarter" idx="11" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr />
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle />
+ <a:p>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="6" name="Slide Number Placeholder 5" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="sldNum" sz="quarter" idx="12" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr />
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle />
+ <a:p>
+ <a:fld id="{B5274F97-0F13-42E5-9A1D-07478243785D}" type="slidenum">
+ <a:rPr lang="nl-BE" smtClean="0" />
+ <a:t>?#?</a:t>
+ </a:fld>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ </p:spTree>
+ </p:cSld>
+ <p:clrMapOvr>
+ <a:masterClrMapping />
+ </p:clrMapOvr>
+</p:sldLayout>');
+
+ // Layouts - PHPPowerPoint_Slide_Layout::TITLE_AND_CONTENT
+ $this->_layouts[] = array(
+ 'name' => PHPPowerPoint_Slide_Layout::TITLE_AND_CONTENT,
+ 'body' => '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="obj" preserve="1">
+ <p:cSld name="Title and Content">
+ <p:spTree>
+ <p:nvGrpSpPr>
+ <p:cNvPr id="1" name="" />
+ <p:cNvGrpSpPr />
+ <p:nvPr />
+ </p:nvGrpSpPr>
+ <p:grpSpPr>
+ <a:xfrm>
+ <a:off x="0" y="0" />
+ <a:ext cx="0" cy="0" />
+ <a:chOff x="0" y="0" />
+ <a:chExt cx="0" cy="0" />
+ </a:xfrm>
+ </p:grpSpPr>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="2" name="Title 1" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="title" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr />
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle />
+ <a:p>
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Click to edit Master title style</a:t>
+ </a:r>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="3" name="Content Placeholder 2" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph idx="1" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr />
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle />
+ <a:p>
+ <a:pPr lvl="0" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Click to edit Master text styles</a:t>
+ </a:r>
+ </a:p>
+ <a:p>
+ <a:pPr lvl="1" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Second level</a:t>
+ </a:r>
+ </a:p>
+ <a:p>
+ <a:pPr lvl="2" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Third level</a:t>
+ </a:r>
+ </a:p>
+ <a:p>
+ <a:pPr lvl="3" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Fourth level</a:t>
+ </a:r>
+ </a:p>
+ <a:p>
+ <a:pPr lvl="4" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Fifth level</a:t>
+ </a:r>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="4" name="Date Placeholder 3" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="dt" sz="half" idx="10" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr />
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle />
+ <a:p>
+ <a:fld id="{6F0DA8BB-0D18-469F-8022-DD923457DE3A}" type="datetimeFigureOut">
+ <a:rPr lang="nl-BE" smtClean="0" />
+ <a:t>16/04/2009</a:t>
+ </a:fld>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="5" name="Footer Placeholder 4" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="ftr" sz="quarter" idx="11" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr />
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle />
+ <a:p>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="6" name="Slide Number Placeholder 5" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="sldNum" sz="quarter" idx="12" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr />
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle />
+ <a:p>
+ <a:fld id="{B5274F97-0F13-42E5-9A1D-07478243785D}" type="slidenum">
+ <a:rPr lang="nl-BE" smtClean="0" />
+ <a:t>?#?</a:t>
+ </a:fld>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ </p:spTree>
+ </p:cSld>
+ <p:clrMapOvr>
+ <a:masterClrMapping />
+ </p:clrMapOvr>
+</p:sldLayout>');
+
+ // Layouts - PHPPowerPoint_Slide_Layout::SECTION_HEADER
+ $this->_layouts[] = array(
+ 'name' => PHPPowerPoint_Slide_Layout::SECTION_HEADER,
+ 'body' => '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="secHead" preserve="1">
+ <p:cSld name="Section Header">
+ <p:spTree>
+ <p:nvGrpSpPr>
+ <p:cNvPr id="1" name="" />
+ <p:cNvGrpSpPr />
+ <p:nvPr />
+ </p:nvGrpSpPr>
+ <p:grpSpPr>
+ <a:xfrm>
+ <a:off x="0" y="0" />
+ <a:ext cx="0" cy="0" />
+ <a:chOff x="0" y="0" />
+ <a:chExt cx="0" cy="0" />
+ </a:xfrm>
+ </p:grpSpPr>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="2" name="Title 1" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="title" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr>
+ <a:xfrm>
+ <a:off x="722313" y="4406900" />
+ <a:ext cx="7772400" cy="1362075" />
+ </a:xfrm>
+ </p:spPr>
+ <p:txBody>
+ <a:bodyPr anchor="t" />
+ <a:lstStyle>
+ <a:lvl1pPr algn="l">
+ <a:defRPr sz="4000" b="1" cap="all" />
+ </a:lvl1pPr>
+ </a:lstStyle>
+ <a:p>
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Click to edit Master title style</a:t>
+ </a:r>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="3" name="Text Placeholder 2" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="body" idx="1" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr>
+ <a:xfrm>
+ <a:off x="722313" y="2906713" />
+ <a:ext cx="7772400" cy="1500187" />
+ </a:xfrm>
+ </p:spPr>
+ <p:txBody>
+ <a:bodyPr anchor="b" />
+ <a:lstStyle>
+ <a:lvl1pPr marL="0" indent="0">
+ <a:buNone />
+ <a:defRPr sz="2000">
+ <a:solidFill>
+ <a:schemeClr val="tx1">
+ <a:tint val="75000" />
+ </a:schemeClr>
+ </a:solidFill>
+ </a:defRPr>
+ </a:lvl1pPr>
+ <a:lvl2pPr marL="457200" indent="0">
+ <a:buNone />
+ <a:defRPr sz="1800">
+ <a:solidFill>
+ <a:schemeClr val="tx1">
+ <a:tint val="75000" />
+ </a:schemeClr>
+ </a:solidFill>
+ </a:defRPr>
+ </a:lvl2pPr>
+ <a:lvl3pPr marL="914400" indent="0">
+ <a:buNone />
+ <a:defRPr sz="1600">
+ <a:solidFill>
+ <a:schemeClr val="tx1">
+ <a:tint val="75000" />
+ </a:schemeClr>
+ </a:solidFill>
+ </a:defRPr>
+ </a:lvl3pPr>
+ <a:lvl4pPr marL="1371600" indent="0">
+ <a:buNone />
+ <a:defRPr sz="1400">
+ <a:solidFill>
+ <a:schemeClr val="tx1">
+ <a:tint val="75000" />
+ </a:schemeClr>
+ </a:solidFill>
+ </a:defRPr>
+ </a:lvl4pPr>
+ <a:lvl5pPr marL="1828800" indent="0">
+ <a:buNone />
+ <a:defRPr sz="1400">
+ <a:solidFill>
+ <a:schemeClr val="tx1">
+ <a:tint val="75000" />
+ </a:schemeClr>
+ </a:solidFill>
+ </a:defRPr>
+ </a:lvl5pPr>
+ <a:lvl6pPr marL="2286000" indent="0">
+ <a:buNone />
+ <a:defRPr sz="1400">
+ <a:solidFill>
+ <a:schemeClr val="tx1">
+ <a:tint val="75000" />
+ </a:schemeClr>
+ </a:solidFill>
+ </a:defRPr>
+ </a:lvl6pPr>
+ <a:lvl7pPr marL="2743200" indent="0">
+ <a:buNone />
+ <a:defRPr sz="1400">
+ <a:solidFill>
+ <a:schemeClr val="tx1">
+ <a:tint val="75000" />
+ </a:schemeClr>
+ </a:solidFill>
+ </a:defRPr>
+ </a:lvl7pPr>
+ <a:lvl8pPr marL="3200400" indent="0">
+ <a:buNone />
+ <a:defRPr sz="1400">
+ <a:solidFill>
+ <a:schemeClr val="tx1">
+ <a:tint val="75000" />
+ </a:schemeClr>
+ </a:solidFill>
+ </a:defRPr>
+ </a:lvl8pPr>
+ <a:lvl9pPr marL="3657600" indent="0">
+ <a:buNone />
+ <a:defRPr sz="1400">
+ <a:solidFill>
+ <a:schemeClr val="tx1">
+ <a:tint val="75000" />
+ </a:schemeClr>
+ </a:solidFill>
+ </a:defRPr>
+ </a:lvl9pPr>
+ </a:lstStyle>
+ <a:p>
+ <a:pPr lvl="0" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Click to edit Master text styles</a:t>
+ </a:r>
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="4" name="Date Placeholder 3" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="dt" sz="half" idx="10" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr />
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle />
+ <a:p>
+ <a:fld id="{6F0DA8BB-0D18-469F-8022-DD923457DE3A}" type="datetimeFigureOut">
+ <a:rPr lang="nl-BE" smtClean="0" />
+ <a:t>16/04/2009</a:t>
+ </a:fld>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="5" name="Footer Placeholder 4" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="ftr" sz="quarter" idx="11" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr />
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle />
+ <a:p>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="6" name="Slide Number Placeholder 5" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="sldNum" sz="quarter" idx="12" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr />
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle />
+ <a:p>
+ <a:fld id="{B5274F97-0F13-42E5-9A1D-07478243785D}" type="slidenum">
+ <a:rPr lang="nl-BE" smtClean="0" />
+ <a:t>?#?</a:t>
+ </a:fld>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ </p:spTree>
+ </p:cSld>
+ <p:clrMapOvr>
+ <a:masterClrMapping />
+ </p:clrMapOvr>
+</p:sldLayout>');
+
+ // Layouts - PHPPowerPoint_Slide_Layout::TWO_CONTENT
+ $this->_layouts[] = array(
+ 'name' => PHPPowerPoint_Slide_Layout::TWO_CONTENT,
+ 'body' => '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="twoObj" preserve="1">
+ <p:cSld name="Two Content">
+ <p:spTree>
+ <p:nvGrpSpPr>
+ <p:cNvPr id="1" name="" />
+ <p:cNvGrpSpPr />
+ <p:nvPr />
+ </p:nvGrpSpPr>
+ <p:grpSpPr>
+ <a:xfrm>
+ <a:off x="0" y="0" />
+ <a:ext cx="0" cy="0" />
+ <a:chOff x="0" y="0" />
+ <a:chExt cx="0" cy="0" />
+ </a:xfrm>
+ </p:grpSpPr>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="2" name="Title 1" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="title" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr />
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle />
+ <a:p>
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Click to edit Master title style</a:t>
+ </a:r>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="3" name="Content Placeholder 2" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph sz="half" idx="1" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr>
+ <a:xfrm>
+ <a:off x="457200" y="1600200" />
+ <a:ext cx="4038600" cy="4525963" />
+ </a:xfrm>
+ </p:spPr>
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle>
+ <a:lvl1pPr>
+ <a:defRPr sz="2800" />
+ </a:lvl1pPr>
+ <a:lvl2pPr>
+ <a:defRPr sz="2400" />
+ </a:lvl2pPr>
+ <a:lvl3pPr>
+ <a:defRPr sz="2000" />
+ </a:lvl3pPr>
+ <a:lvl4pPr>
+ <a:defRPr sz="1800" />
+ </a:lvl4pPr>
+ <a:lvl5pPr>
+ <a:defRPr sz="1800" />
+ </a:lvl5pPr>
+ <a:lvl6pPr>
+ <a:defRPr sz="1800" />
+ </a:lvl6pPr>
+ <a:lvl7pPr>
+ <a:defRPr sz="1800" />
+ </a:lvl7pPr>
+ <a:lvl8pPr>
+ <a:defRPr sz="1800" />
+ </a:lvl8pPr>
+ <a:lvl9pPr>
+ <a:defRPr sz="1800" />
+ </a:lvl9pPr>
+ </a:lstStyle>
+ <a:p>
+ <a:pPr lvl="0" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Click to edit Master text styles</a:t>
+ </a:r>
+ </a:p>
+ <a:p>
+ <a:pPr lvl="1" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Second level</a:t>
+ </a:r>
+ </a:p>
+ <a:p>
+ <a:pPr lvl="2" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Third level</a:t>
+ </a:r>
+ </a:p>
+ <a:p>
+ <a:pPr lvl="3" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Fourth level</a:t>
+ </a:r>
+ </a:p>
+ <a:p>
+ <a:pPr lvl="4" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Fifth level</a:t>
+ </a:r>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="4" name="Content Placeholder 3" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph sz="half" idx="2" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr>
+ <a:xfrm>
+ <a:off x="4648200" y="1600200" />
+ <a:ext cx="4038600" cy="4525963" />
+ </a:xfrm>
+ </p:spPr>
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle>
+ <a:lvl1pPr>
+ <a:defRPr sz="2800" />
+ </a:lvl1pPr>
+ <a:lvl2pPr>
+ <a:defRPr sz="2400" />
+ </a:lvl2pPr>
+ <a:lvl3pPr>
+ <a:defRPr sz="2000" />
+ </a:lvl3pPr>
+ <a:lvl4pPr>
+ <a:defRPr sz="1800" />
+ </a:lvl4pPr>
+ <a:lvl5pPr>
+ <a:defRPr sz="1800" />
+ </a:lvl5pPr>
+ <a:lvl6pPr>
+ <a:defRPr sz="1800" />
+ </a:lvl6pPr>
+ <a:lvl7pPr>
+ <a:defRPr sz="1800" />
+ </a:lvl7pPr>
+ <a:lvl8pPr>
+ <a:defRPr sz="1800" />
+ </a:lvl8pPr>
+ <a:lvl9pPr>
+ <a:defRPr sz="1800" />
+ </a:lvl9pPr>
+ </a:lstStyle>
+ <a:p>
+ <a:pPr lvl="0" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Click to edit Master text styles</a:t>
+ </a:r>
+ </a:p>
+ <a:p>
+ <a:pPr lvl="1" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Second level</a:t>
+ </a:r>
+ </a:p>
+ <a:p>
+ <a:pPr lvl="2" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Third level</a:t>
+ </a:r>
+ </a:p>
+ <a:p>
+ <a:pPr lvl="3" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Fourth level</a:t>
+ </a:r>
+ </a:p>
+ <a:p>
+ <a:pPr lvl="4" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Fifth level</a:t>
+ </a:r>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="5" name="Date Placeholder 4" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="dt" sz="half" idx="10" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr />
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle />
+ <a:p>
+ <a:fld id="{6F0DA8BB-0D18-469F-8022-DD923457DE3A}" type="datetimeFigureOut">
+ <a:rPr lang="nl-BE" smtClean="0" />
+ <a:t>16/04/2009</a:t>
+ </a:fld>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="6" name="Footer Placeholder 5" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="ftr" sz="quarter" idx="11" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr />
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle />
+ <a:p>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="7" name="Slide Number Placeholder 6" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="sldNum" sz="quarter" idx="12" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr />
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle />
+ <a:p>
+ <a:fld id="{B5274F97-0F13-42E5-9A1D-07478243785D}" type="slidenum">
+ <a:rPr lang="nl-BE" smtClean="0" />
+ <a:t>?#?</a:t>
+ </a:fld>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ </p:spTree>
+ </p:cSld>
+ <p:clrMapOvr>
+ <a:masterClrMapping />
+ </p:clrMapOvr>
+</p:sldLayout>');
+
+ // Layouts - PHPPowerPoint_Slide_Layout::COMPARISON
+ $this->_layouts[] = array(
+ 'name' => PHPPowerPoint_Slide_Layout::COMPARISON,
+ 'body' => '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="twoTxTwoObj" preserve="1">
+ <p:cSld name="Comparison">
+ <p:spTree>
+ <p:nvGrpSpPr>
+ <p:cNvPr id="1" name="" />
+ <p:cNvGrpSpPr />
+ <p:nvPr />
+ </p:nvGrpSpPr>
+ <p:grpSpPr>
+ <a:xfrm>
+ <a:off x="0" y="0" />
+ <a:ext cx="0" cy="0" />
+ <a:chOff x="0" y="0" />
+ <a:chExt cx="0" cy="0" />
+ </a:xfrm>
+ </p:grpSpPr>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="2" name="Title 1" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="title" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr />
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle>
+ <a:lvl1pPr>
+ <a:defRPr />
+ </a:lvl1pPr>
+ </a:lstStyle>
+ <a:p>
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Click to edit Master title style</a:t>
+ </a:r>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="3" name="Text Placeholder 2" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="body" idx="1" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr>
+ <a:xfrm>
+ <a:off x="457200" y="1535113" />
+ <a:ext cx="4040188" cy="639762" />
+ </a:xfrm>
+ </p:spPr>
+ <p:txBody>
+ <a:bodyPr anchor="b" />
+ <a:lstStyle>
+ <a:lvl1pPr marL="0" indent="0">
+ <a:buNone />
+ <a:defRPr sz="2400" b="1" />
+ </a:lvl1pPr>
+ <a:lvl2pPr marL="457200" indent="0">
+ <a:buNone />
+ <a:defRPr sz="2000" b="1" />
+ </a:lvl2pPr>
+ <a:lvl3pPr marL="914400" indent="0">
+ <a:buNone />
+ <a:defRPr sz="1800" b="1" />
+ </a:lvl3pPr>
+ <a:lvl4pPr marL="1371600" indent="0">
+ <a:buNone />
+ <a:defRPr sz="1600" b="1" />
+ </a:lvl4pPr>
+ <a:lvl5pPr marL="1828800" indent="0">
+ <a:buNone />
+ <a:defRPr sz="1600" b="1" />
+ </a:lvl5pPr>
+ <a:lvl6pPr marL="2286000" indent="0">
+ <a:buNone />
+ <a:defRPr sz="1600" b="1" />
+ </a:lvl6pPr>
+ <a:lvl7pPr marL="2743200" indent="0">
+ <a:buNone />
+ <a:defRPr sz="1600" b="1" />
+ </a:lvl7pPr>
+ <a:lvl8pPr marL="3200400" indent="0">
+ <a:buNone />
+ <a:defRPr sz="1600" b="1" />
+ </a:lvl8pPr>
+ <a:lvl9pPr marL="3657600" indent="0">
+ <a:buNone />
+ <a:defRPr sz="1600" b="1" />
+ </a:lvl9pPr>
+ </a:lstStyle>
+ <a:p>
+ <a:pPr lvl="0" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Click to edit Master text styles</a:t>
+ </a:r>
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="4" name="Content Placeholder 3" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph sz="half" idx="2" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr>
+ <a:xfrm>
+ <a:off x="457200" y="2174875" />
+ <a:ext cx="4040188" cy="3951288" />
+ </a:xfrm>
+ </p:spPr>
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle>
+ <a:lvl1pPr>
+ <a:defRPr sz="2400" />
+ </a:lvl1pPr>
+ <a:lvl2pPr>
+ <a:defRPr sz="2000" />
+ </a:lvl2pPr>
+ <a:lvl3pPr>
+ <a:defRPr sz="1800" />
+ </a:lvl3pPr>
+ <a:lvl4pPr>
+ <a:defRPr sz="1600" />
+ </a:lvl4pPr>
+ <a:lvl5pPr>
+ <a:defRPr sz="1600" />
+ </a:lvl5pPr>
+ <a:lvl6pPr>
+ <a:defRPr sz="1600" />
+ </a:lvl6pPr>
+ <a:lvl7pPr>
+ <a:defRPr sz="1600" />
+ </a:lvl7pPr>
+ <a:lvl8pPr>
+ <a:defRPr sz="1600" />
+ </a:lvl8pPr>
+ <a:lvl9pPr>
+ <a:defRPr sz="1600" />
+ </a:lvl9pPr>
+ </a:lstStyle>
+ <a:p>
+ <a:pPr lvl="0" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Click to edit Master text styles</a:t>
+ </a:r>
+ </a:p>
+ <a:p>
+ <a:pPr lvl="1" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Second level</a:t>
+ </a:r>
+ </a:p>
+ <a:p>
+ <a:pPr lvl="2" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Third level</a:t>
+ </a:r>
+ </a:p>
+ <a:p>
+ <a:pPr lvl="3" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Fourth level</a:t>
+ </a:r>
+ </a:p>
+ <a:p>
+ <a:pPr lvl="4" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Fifth level</a:t>
+ </a:r>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="5" name="Text Placeholder 4" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="body" sz="quarter" idx="3" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr>
+ <a:xfrm>
+ <a:off x="4645025" y="1535113" />
+ <a:ext cx="4041775" cy="639762" />
+ </a:xfrm>
+ </p:spPr>
+ <p:txBody>
+ <a:bodyPr anchor="b" />
+ <a:lstStyle>
+ <a:lvl1pPr marL="0" indent="0">
+ <a:buNone />
+ <a:defRPr sz="2400" b="1" />
+ </a:lvl1pPr>
+ <a:lvl2pPr marL="457200" indent="0">
+ <a:buNone />
+ <a:defRPr sz="2000" b="1" />
+ </a:lvl2pPr>
+ <a:lvl3pPr marL="914400" indent="0">
+ <a:buNone />
+ <a:defRPr sz="1800" b="1" />
+ </a:lvl3pPr>
+ <a:lvl4pPr marL="1371600" indent="0">
+ <a:buNone />
+ <a:defRPr sz="1600" b="1" />
+ </a:lvl4pPr>
+ <a:lvl5pPr marL="1828800" indent="0">
+ <a:buNone />
+ <a:defRPr sz="1600" b="1" />
+ </a:lvl5pPr>
+ <a:lvl6pPr marL="2286000" indent="0">
+ <a:buNone />
+ <a:defRPr sz="1600" b="1" />
+ </a:lvl6pPr>
+ <a:lvl7pPr marL="2743200" indent="0">
+ <a:buNone />
+ <a:defRPr sz="1600" b="1" />
+ </a:lvl7pPr>
+ <a:lvl8pPr marL="3200400" indent="0">
+ <a:buNone />
+ <a:defRPr sz="1600" b="1" />
+ </a:lvl8pPr>
+ <a:lvl9pPr marL="3657600" indent="0">
+ <a:buNone />
+ <a:defRPr sz="1600" b="1" />
+ </a:lvl9pPr>
+ </a:lstStyle>
+ <a:p>
+ <a:pPr lvl="0" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Click to edit Master text styles</a:t>
+ </a:r>
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="6" name="Content Placeholder 5" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph sz="quarter" idx="4" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr>
+ <a:xfrm>
+ <a:off x="4645025" y="2174875" />
+ <a:ext cx="4041775" cy="3951288" />
+ </a:xfrm>
+ </p:spPr>
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle>
+ <a:lvl1pPr>
+ <a:defRPr sz="2400" />
+ </a:lvl1pPr>
+ <a:lvl2pPr>
+ <a:defRPr sz="2000" />
+ </a:lvl2pPr>
+ <a:lvl3pPr>
+ <a:defRPr sz="1800" />
+ </a:lvl3pPr>
+ <a:lvl4pPr>
+ <a:defRPr sz="1600" />
+ </a:lvl4pPr>
+ <a:lvl5pPr>
+ <a:defRPr sz="1600" />
+ </a:lvl5pPr>
+ <a:lvl6pPr>
+ <a:defRPr sz="1600" />
+ </a:lvl6pPr>
+ <a:lvl7pPr>
+ <a:defRPr sz="1600" />
+ </a:lvl7pPr>
+ <a:lvl8pPr>
+ <a:defRPr sz="1600" />
+ </a:lvl8pPr>
+ <a:lvl9pPr>
+ <a:defRPr sz="1600" />
+ </a:lvl9pPr>
+ </a:lstStyle>
+ <a:p>
+ <a:pPr lvl="0" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Click to edit Master text styles</a:t>
+ </a:r>
+ </a:p>
+ <a:p>
+ <a:pPr lvl="1" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Second level</a:t>
+ </a:r>
+ </a:p>
+ <a:p>
+ <a:pPr lvl="2" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Third level</a:t>
+ </a:r>
+ </a:p>
+ <a:p>
+ <a:pPr lvl="3" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Fourth level</a:t>
+ </a:r>
+ </a:p>
+ <a:p>
+ <a:pPr lvl="4" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Fifth level</a:t>
+ </a:r>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="7" name="Date Placeholder 6" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="dt" sz="half" idx="10" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr />
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle />
+ <a:p>
+ <a:fld id="{6F0DA8BB-0D18-469F-8022-DD923457DE3A}" type="datetimeFigureOut">
+ <a:rPr lang="nl-BE" smtClean="0" />
+ <a:t>16/04/2009</a:t>
+ </a:fld>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="8" name="Footer Placeholder 7" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="ftr" sz="quarter" idx="11" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr />
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle />
+ <a:p>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="9" name="Slide Number Placeholder 8" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="sldNum" sz="quarter" idx="12" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr />
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle />
+ <a:p>
+ <a:fld id="{B5274F97-0F13-42E5-9A1D-07478243785D}" type="slidenum">
+ <a:rPr lang="nl-BE" smtClean="0" />
+ <a:t>?#?</a:t>
+ </a:fld>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ </p:spTree>
+ </p:cSld>
+ <p:clrMapOvr>
+ <a:masterClrMapping />
+ </p:clrMapOvr>
+</p:sldLayout>');
+
+ // Layouts - PHPPowerPoint_Slide_Layout::TITLE_ONLY
+ $this->_layouts[] = array(
+ 'name' => PHPPowerPoint_Slide_Layout::TITLE_ONLY,
+ 'body' => '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="titleOnly" preserve="1">
+ <p:cSld name="Title Only">
+ <p:spTree>
+ <p:nvGrpSpPr>
+ <p:cNvPr id="1" name="" />
+ <p:cNvGrpSpPr />
+ <p:nvPr />
+ </p:nvGrpSpPr>
+ <p:grpSpPr>
+ <a:xfrm>
+ <a:off x="0" y="0" />
+ <a:ext cx="0" cy="0" />
+ <a:chOff x="0" y="0" />
+ <a:chExt cx="0" cy="0" />
+ </a:xfrm>
+ </p:grpSpPr>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="2" name="Title 1" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="title" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr />
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle />
+ <a:p>
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Click to edit Master title style</a:t>
+ </a:r>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="3" name="Date Placeholder 2" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="dt" sz="half" idx="10" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr />
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle />
+ <a:p>
+ <a:fld id="{6F0DA8BB-0D18-469F-8022-DD923457DE3A}" type="datetimeFigureOut">
+ <a:rPr lang="nl-BE" smtClean="0" />
+ <a:t>16/04/2009</a:t>
+ </a:fld>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="4" name="Footer Placeholder 3" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="ftr" sz="quarter" idx="11" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr />
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle />
+ <a:p>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="5" name="Slide Number Placeholder 4" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="sldNum" sz="quarter" idx="12" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr />
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle />
+ <a:p>
+ <a:fld id="{B5274F97-0F13-42E5-9A1D-07478243785D}" type="slidenum">
+ <a:rPr lang="nl-BE" smtClean="0" />
+ <a:t>?#?</a:t>
+ </a:fld>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ </p:spTree>
+ </p:cSld>
+ <p:clrMapOvr>
+ <a:masterClrMapping />
+ </p:clrMapOvr>
+</p:sldLayout>');
+
+ // Layouts - PHPPowerPoint_Slide_Layout::BLANK
+ $this->_layouts[] = array(
+ 'name' => PHPPowerPoint_Slide_Layout::BLANK,
+ 'body' => '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="blank" preserve="1">
+ <p:cSld name="Blank">
+ <p:spTree>
+ <p:nvGrpSpPr>
+ <p:cNvPr id="1" name="" />
+ <p:cNvGrpSpPr />
+ <p:nvPr />
+ </p:nvGrpSpPr>
+ <p:grpSpPr>
+ <a:xfrm>
+ <a:off x="0" y="0" />
+ <a:ext cx="0" cy="0" />
+ <a:chOff x="0" y="0" />
+ <a:chExt cx="0" cy="0" />
+ </a:xfrm>
+ </p:grpSpPr>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="2" name="Date Placeholder 1" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="dt" sz="half" idx="10" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr />
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle />
+ <a:p>
+ <a:fld id="{6F0DA8BB-0D18-469F-8022-DD923457DE3A}" type="datetimeFigureOut">
+ <a:rPr lang="nl-BE" smtClean="0" />
+ <a:t>16/04/2009</a:t>
+ </a:fld>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="3" name="Footer Placeholder 2" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="ftr" sz="quarter" idx="11" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr />
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle />
+ <a:p>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="4" name="Slide Number Placeholder 3" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="sldNum" sz="quarter" idx="12" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr />
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle />
+ <a:p>
+ <a:fld id="{B5274F97-0F13-42E5-9A1D-07478243785D}" type="slidenum">
+ <a:rPr lang="nl-BE" smtClean="0" />
+ <a:t>?#?</a:t>
+ </a:fld>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ </p:spTree>
+ </p:cSld>
+ <p:clrMapOvr>
+ <a:masterClrMapping />
+ </p:clrMapOvr>
+</p:sldLayout>');
+
+ // Layouts - PHPPowerPoint_Slide_Layout::CONTENT_WITH_CAPTION
+ $this->_layouts[] = array(
+ 'name' => PHPPowerPoint_Slide_Layout::CONTENT_WITH_CAPTION,
+ 'body' => '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="objTx" preserve="1">
+ <p:cSld name="Content with Caption">
+ <p:spTree>
+ <p:nvGrpSpPr>
+ <p:cNvPr id="1" name="" />
+ <p:cNvGrpSpPr />
+ <p:nvPr />
+ </p:nvGrpSpPr>
+ <p:grpSpPr>
+ <a:xfrm>
+ <a:off x="0" y="0" />
+ <a:ext cx="0" cy="0" />
+ <a:chOff x="0" y="0" />
+ <a:chExt cx="0" cy="0" />
+ </a:xfrm>
+ </p:grpSpPr>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="2" name="Title 1" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="title" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr>
+ <a:xfrm>
+ <a:off x="457200" y="273050" />
+ <a:ext cx="3008313" cy="1162050" />
+ </a:xfrm>
+ </p:spPr>
+ <p:txBody>
+ <a:bodyPr anchor="b" />
+ <a:lstStyle>
+ <a:lvl1pPr algn="l">
+ <a:defRPr sz="2000" b="1" />
+ </a:lvl1pPr>
+ </a:lstStyle>
+ <a:p>
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Click to edit Master title style</a:t>
+ </a:r>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="3" name="Content Placeholder 2" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph idx="1" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr>
+ <a:xfrm>
+ <a:off x="3575050" y="273050" />
+ <a:ext cx="5111750" cy="5853113" />
+ </a:xfrm>
+ </p:spPr>
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle>
+ <a:lvl1pPr>
+ <a:defRPr sz="3200" />
+ </a:lvl1pPr>
+ <a:lvl2pPr>
+ <a:defRPr sz="2800" />
+ </a:lvl2pPr>
+ <a:lvl3pPr>
+ <a:defRPr sz="2400" />
+ </a:lvl3pPr>
+ <a:lvl4pPr>
+ <a:defRPr sz="2000" />
+ </a:lvl4pPr>
+ <a:lvl5pPr>
+ <a:defRPr sz="2000" />
+ </a:lvl5pPr>
+ <a:lvl6pPr>
+ <a:defRPr sz="2000" />
+ </a:lvl6pPr>
+ <a:lvl7pPr>
+ <a:defRPr sz="2000" />
+ </a:lvl7pPr>
+ <a:lvl8pPr>
+ <a:defRPr sz="2000" />
+ </a:lvl8pPr>
+ <a:lvl9pPr>
+ <a:defRPr sz="2000" />
+ </a:lvl9pPr>
+ </a:lstStyle>
+ <a:p>
+ <a:pPr lvl="0" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Click to edit Master text styles</a:t>
+ </a:r>
+ </a:p>
+ <a:p>
+ <a:pPr lvl="1" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Second level</a:t>
+ </a:r>
+ </a:p>
+ <a:p>
+ <a:pPr lvl="2" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Third level</a:t>
+ </a:r>
+ </a:p>
+ <a:p>
+ <a:pPr lvl="3" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Fourth level</a:t>
+ </a:r>
+ </a:p>
+ <a:p>
+ <a:pPr lvl="4" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Fifth level</a:t>
+ </a:r>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="4" name="Text Placeholder 3" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="body" sz="half" idx="2" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr>
+ <a:xfrm>
+ <a:off x="457200" y="1435100" />
+ <a:ext cx="3008313" cy="4691063" />
+ </a:xfrm>
+ </p:spPr>
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle>
+ <a:lvl1pPr marL="0" indent="0">
+ <a:buNone />
+ <a:defRPr sz="1400" />
+ </a:lvl1pPr>
+ <a:lvl2pPr marL="457200" indent="0">
+ <a:buNone />
+ <a:defRPr sz="1200" />
+ </a:lvl2pPr>
+ <a:lvl3pPr marL="914400" indent="0">
+ <a:buNone />
+ <a:defRPr sz="1000" />
+ </a:lvl3pPr>
+ <a:lvl4pPr marL="1371600" indent="0">
+ <a:buNone />
+ <a:defRPr sz="900" />
+ </a:lvl4pPr>
+ <a:lvl5pPr marL="1828800" indent="0">
+ <a:buNone />
+ <a:defRPr sz="900" />
+ </a:lvl5pPr>
+ <a:lvl6pPr marL="2286000" indent="0">
+ <a:buNone />
+ <a:defRPr sz="900" />
+ </a:lvl6pPr>
+ <a:lvl7pPr marL="2743200" indent="0">
+ <a:buNone />
+ <a:defRPr sz="900" />
+ </a:lvl7pPr>
+ <a:lvl8pPr marL="3200400" indent="0">
+ <a:buNone />
+ <a:defRPr sz="900" />
+ </a:lvl8pPr>
+ <a:lvl9pPr marL="3657600" indent="0">
+ <a:buNone />
+ <a:defRPr sz="900" />
+ </a:lvl9pPr>
+ </a:lstStyle>
+ <a:p>
+ <a:pPr lvl="0" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Click to edit Master text styles</a:t>
+ </a:r>
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="5" name="Date Placeholder 4" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="dt" sz="half" idx="10" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr />
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle />
+ <a:p>
+ <a:fld id="{6F0DA8BB-0D18-469F-8022-DD923457DE3A}" type="datetimeFigureOut">
+ <a:rPr lang="nl-BE" smtClean="0" />
+ <a:t>16/04/2009</a:t>
+ </a:fld>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="6" name="Footer Placeholder 5" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="ftr" sz="quarter" idx="11" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr />
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle />
+ <a:p>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="7" name="Slide Number Placeholder 6" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="sldNum" sz="quarter" idx="12" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr />
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle />
+ <a:p>
+ <a:fld id="{B5274F97-0F13-42E5-9A1D-07478243785D}" type="slidenum">
+ <a:rPr lang="nl-BE" smtClean="0" />
+ <a:t>?#?</a:t>
+ </a:fld>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ </p:spTree>
+ </p:cSld>
+ <p:clrMapOvr>
+ <a:masterClrMapping />
+ </p:clrMapOvr>
+</p:sldLayout>');
+
+ // Layouts - PHPPowerPoint_Slide_Layout::PICTURE_WITH_CAPTION
+ $this->_layouts[] = array(
+ 'name' => PHPPowerPoint_Slide_Layout::PICTURE_WITH_CAPTION,
+ 'body' => '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="picTx" preserve="1">
+ <p:cSld name="Picture with Caption">
+ <p:spTree>
+ <p:nvGrpSpPr>
+ <p:cNvPr id="1" name="" />
+ <p:cNvGrpSpPr />
+ <p:nvPr />
+ </p:nvGrpSpPr>
+ <p:grpSpPr>
+ <a:xfrm>
+ <a:off x="0" y="0" />
+ <a:ext cx="0" cy="0" />
+ <a:chOff x="0" y="0" />
+ <a:chExt cx="0" cy="0" />
+ </a:xfrm>
+ </p:grpSpPr>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="2" name="Title 1" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="title" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr>
+ <a:xfrm>
+ <a:off x="1792288" y="4800600" />
+ <a:ext cx="5486400" cy="566738" />
+ </a:xfrm>
+ </p:spPr>
+ <p:txBody>
+ <a:bodyPr anchor="b" />
+ <a:lstStyle>
+ <a:lvl1pPr algn="l">
+ <a:defRPr sz="2000" b="1" />
+ </a:lvl1pPr>
+ </a:lstStyle>
+ <a:p>
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Click to edit Master title style</a:t>
+ </a:r>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="3" name="Picture Placeholder 2" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="pic" idx="1" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr>
+ <a:xfrm>
+ <a:off x="1792288" y="612775" />
+ <a:ext cx="5486400" cy="4114800" />
+ </a:xfrm>
+ </p:spPr>
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle>
+ <a:lvl1pPr marL="0" indent="0">
+ <a:buNone />
+ <a:defRPr sz="3200" />
+ </a:lvl1pPr>
+ <a:lvl2pPr marL="457200" indent="0">
+ <a:buNone />
+ <a:defRPr sz="2800" />
+ </a:lvl2pPr>
+ <a:lvl3pPr marL="914400" indent="0">
+ <a:buNone />
+ <a:defRPr sz="2400" />
+ </a:lvl3pPr>
+ <a:lvl4pPr marL="1371600" indent="0">
+ <a:buNone />
+ <a:defRPr sz="2000" />
+ </a:lvl4pPr>
+ <a:lvl5pPr marL="1828800" indent="0">
+ <a:buNone />
+ <a:defRPr sz="2000" />
+ </a:lvl5pPr>
+ <a:lvl6pPr marL="2286000" indent="0">
+ <a:buNone />
+ <a:defRPr sz="2000" />
+ </a:lvl6pPr>
+ <a:lvl7pPr marL="2743200" indent="0">
+ <a:buNone />
+ <a:defRPr sz="2000" />
+ </a:lvl7pPr>
+ <a:lvl8pPr marL="3200400" indent="0">
+ <a:buNone />
+ <a:defRPr sz="2000" />
+ </a:lvl8pPr>
+ <a:lvl9pPr marL="3657600" indent="0">
+ <a:buNone />
+ <a:defRPr sz="2000" />
+ </a:lvl9pPr>
+ </a:lstStyle>
+ <a:p>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="4" name="Text Placeholder 3" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="body" sz="half" idx="2" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr>
+ <a:xfrm>
+ <a:off x="1792288" y="5367338" />
+ <a:ext cx="5486400" cy="804862" />
+ </a:xfrm>
+ </p:spPr>
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle>
+ <a:lvl1pPr marL="0" indent="0">
+ <a:buNone />
+ <a:defRPr sz="1400" />
+ </a:lvl1pPr>
+ <a:lvl2pPr marL="457200" indent="0">
+ <a:buNone />
+ <a:defRPr sz="1200" />
+ </a:lvl2pPr>
+ <a:lvl3pPr marL="914400" indent="0">
+ <a:buNone />
+ <a:defRPr sz="1000" />
+ </a:lvl3pPr>
+ <a:lvl4pPr marL="1371600" indent="0">
+ <a:buNone />
+ <a:defRPr sz="900" />
+ </a:lvl4pPr>
+ <a:lvl5pPr marL="1828800" indent="0">
+ <a:buNone />
+ <a:defRPr sz="900" />
+ </a:lvl5pPr>
+ <a:lvl6pPr marL="2286000" indent="0">
+ <a:buNone />
+ <a:defRPr sz="900" />
+ </a:lvl6pPr>
+ <a:lvl7pPr marL="2743200" indent="0">
+ <a:buNone />
+ <a:defRPr sz="900" />
+ </a:lvl7pPr>
+ <a:lvl8pPr marL="3200400" indent="0">
+ <a:buNone />
+ <a:defRPr sz="900" />
+ </a:lvl8pPr>
+ <a:lvl9pPr marL="3657600" indent="0">
+ <a:buNone />
+ <a:defRPr sz="900" />
+ </a:lvl9pPr>
+ </a:lstStyle>
+ <a:p>
+ <a:pPr lvl="0" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Click to edit Master text styles</a:t>
+ </a:r>
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="5" name="Date Placeholder 4" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="dt" sz="half" idx="10" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr />
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle />
+ <a:p>
+ <a:fld id="{6F0DA8BB-0D18-469F-8022-DD923457DE3A}" type="datetimeFigureOut">
+ <a:rPr lang="nl-BE" smtClean="0" />
+ <a:t>16/04/2009</a:t>
+ </a:fld>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="6" name="Footer Placeholder 5" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="ftr" sz="quarter" idx="11" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr />
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle />
+ <a:p>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="7" name="Slide Number Placeholder 6" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="sldNum" sz="quarter" idx="12" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr />
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle />
+ <a:p>
+ <a:fld id="{B5274F97-0F13-42E5-9A1D-07478243785D}" type="slidenum">
+ <a:rPr lang="nl-BE" smtClean="0" />
+ <a:t>?#?</a:t>
+ </a:fld>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ </p:spTree>
+ </p:cSld>
+ <p:clrMapOvr>
+ <a:masterClrMapping />
+ </p:clrMapOvr>
+</p:sldLayout>');
+
+ // Layouts - PHPPowerPoint_Slide_Layout::TITLE_AND_VERTICAL_TEXT
+ $this->_layouts[] = array(
+ 'name' => PHPPowerPoint_Slide_Layout::TITLE_AND_VERTICAL_TEXT,
+ 'body' => '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="vertTx" preserve="1">
+ <p:cSld name="Title and Vertical Text">
+ <p:spTree>
+ <p:nvGrpSpPr>
+ <p:cNvPr id="1" name="" />
+ <p:cNvGrpSpPr />
+ <p:nvPr />
+ </p:nvGrpSpPr>
+ <p:grpSpPr>
+ <a:xfrm>
+ <a:off x="0" y="0" />
+ <a:ext cx="0" cy="0" />
+ <a:chOff x="0" y="0" />
+ <a:chExt cx="0" cy="0" />
+ </a:xfrm>
+ </p:grpSpPr>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="2" name="Title 1" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="title" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr />
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle />
+ <a:p>
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Click to edit Master title style</a:t>
+ </a:r>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="3" name="Vertical Text Placeholder 2" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="body" orient="vert" idx="1" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr />
+ <p:txBody>
+ <a:bodyPr vert="eaVert" />
+ <a:lstStyle />
+ <a:p>
+ <a:pPr lvl="0" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Click to edit Master text styles</a:t>
+ </a:r>
+ </a:p>
+ <a:p>
+ <a:pPr lvl="1" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Second level</a:t>
+ </a:r>
+ </a:p>
+ <a:p>
+ <a:pPr lvl="2" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Third level</a:t>
+ </a:r>
+ </a:p>
+ <a:p>
+ <a:pPr lvl="3" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Fourth level</a:t>
+ </a:r>
+ </a:p>
+ <a:p>
+ <a:pPr lvl="4" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Fifth level</a:t>
+ </a:r>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="4" name="Date Placeholder 3" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="dt" sz="half" idx="10" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr />
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle />
+ <a:p>
+ <a:fld id="{6F0DA8BB-0D18-469F-8022-DD923457DE3A}" type="datetimeFigureOut">
+ <a:rPr lang="nl-BE" smtClean="0" />
+ <a:t>16/04/2009</a:t>
+ </a:fld>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="5" name="Footer Placeholder 4" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="ftr" sz="quarter" idx="11" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr />
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle />
+ <a:p>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="6" name="Slide Number Placeholder 5" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="sldNum" sz="quarter" idx="12" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr />
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle />
+ <a:p>
+ <a:fld id="{B5274F97-0F13-42E5-9A1D-07478243785D}" type="slidenum">
+ <a:rPr lang="nl-BE" smtClean="0" />
+ <a:t>?#?</a:t>
+ </a:fld>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ </p:spTree>
+ </p:cSld>
+ <p:clrMapOvr>
+ <a:masterClrMapping />
+ </p:clrMapOvr>
+</p:sldLayout>');
+
+ // Layouts - PHPPowerPoint_Slide_Layout::VERTICAL_TITLE_AND_TEXT
+ $this->_layouts[] = array(
+ 'name' => PHPPowerPoint_Slide_Layout::VERTICAL_TITLE_AND_TEXT,
+ 'body' => '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<p:sldLayout xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" type="vertTitleAndTx" preserve="1">
+ <p:cSld name="Vertical Title and Text">
+ <p:spTree>
+ <p:nvGrpSpPr>
+ <p:cNvPr id="1" name="" />
+ <p:cNvGrpSpPr />
+ <p:nvPr />
+ </p:nvGrpSpPr>
+ <p:grpSpPr>
+ <a:xfrm>
+ <a:off x="0" y="0" />
+ <a:ext cx="0" cy="0" />
+ <a:chOff x="0" y="0" />
+ <a:chExt cx="0" cy="0" />
+ </a:xfrm>
+ </p:grpSpPr>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="2" name="Vertical Title 1" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="title" orient="vert" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr>
+ <a:xfrm>
+ <a:off x="6629400" y="274638" />
+ <a:ext cx="2057400" cy="5851525" />
+ </a:xfrm>
+ </p:spPr>
+ <p:txBody>
+ <a:bodyPr vert="eaVert" />
+ <a:lstStyle />
+ <a:p>
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Click to edit Master title style</a:t>
+ </a:r>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="3" name="Vertical Text Placeholder 2" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="body" orient="vert" idx="1" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr>
+ <a:xfrm>
+ <a:off x="457200" y="274638" />
+ <a:ext cx="6019800" cy="5851525" />
+ </a:xfrm>
+ </p:spPr>
+ <p:txBody>
+ <a:bodyPr vert="eaVert" />
+ <a:lstStyle />
+ <a:p>
+ <a:pPr lvl="0" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Click to edit Master text styles</a:t>
+ </a:r>
+ </a:p>
+ <a:p>
+ <a:pPr lvl="1" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Second level</a:t>
+ </a:r>
+ </a:p>
+ <a:p>
+ <a:pPr lvl="2" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Third level</a:t>
+ </a:r>
+ </a:p>
+ <a:p>
+ <a:pPr lvl="3" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Fourth level</a:t>
+ </a:r>
+ </a:p>
+ <a:p>
+ <a:pPr lvl="4" />
+ <a:r>
+ <a:rPr lang="en-US" smtClean="0" />
+ <a:t>Fifth level</a:t>
+ </a:r>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="4" name="Date Placeholder 3" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="dt" sz="half" idx="10" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr />
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle />
+ <a:p>
+ <a:fld id="{6F0DA8BB-0D18-469F-8022-DD923457DE3A}" type="datetimeFigureOut">
+ <a:rPr lang="nl-BE" smtClean="0" />
+ <a:t>16/04/2009</a:t>
+ </a:fld>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="5" name="Footer Placeholder 4" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="ftr" sz="quarter" idx="11" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr />
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle />
+ <a:p>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ <p:sp>
+ <p:nvSpPr>
+ <p:cNvPr id="6" name="Slide Number Placeholder 5" />
+ <p:cNvSpPr>
+ <a:spLocks noGrp="1" />
+ </p:cNvSpPr>
+ <p:nvPr>
+ <p:ph type="sldNum" sz="quarter" idx="12" />
+ </p:nvPr>
+ </p:nvSpPr>
+ <p:spPr />
+ <p:txBody>
+ <a:bodyPr />
+ <a:lstStyle />
+ <a:p>
+ <a:fld id="{B5274F97-0F13-42E5-9A1D-07478243785D}" type="slidenum">
+ <a:rPr lang="nl-BE" smtClean="0" />
+ <a:t>?#?</a:t>
+ </a:fld>
+ <a:endParaRPr lang="nl-BE" />
+ </a:p>
+ </p:txBody>
+ </p:sp>
+ </p:spTree>
+ </p:cSld>
+ <p:clrMapOvr>
+ <a:masterClrMapping />
+ </p:clrMapOvr>
+</p:sldLayout>');
+ }
+}
diff --git a/admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007/Presentation.php b/admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007/Presentation.php
new file mode 100644
index 0000000..6badaa9
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007/Presentation.php
@@ -0,0 +1,151 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * Copyright (c) 2009 - 2010 PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Writer_PowerPoint2007
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/** PHPPowerPoint */
+require_once 'PHPPowerPoint.php';
+
+/** PHPPowerPoint_Writer_PowerPoint2007 */
+require_once 'PHPPowerPoint/Writer/PowerPoint2007.php';
+
+/** PHPPowerPoint_Writer_PowerPoint2007_WriterPart */
+require_once 'PHPPowerPoint/Writer/PowerPoint2007/WriterPart.php';
+
+/** PHPPowerPoint_Slide */
+require_once 'PHPPowerPoint/Slide.php';
+
+/** PHPPowerPoint_Shared_XMLWriter */
+require_once 'PHPPowerPoint/Shared/XMLWriter.php';
+
+
+/**
+ * PHPPowerPoint_Writer_PowerPoint2007_Workbook
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Writer_PowerPoint2007
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+class PHPPowerPoint_Writer_PowerPoint2007_Presentation extends PHPPowerPoint_Writer_PowerPoint2007_WriterPart
+{
+ /**
+ * Write presentation to XML format
+ *
+ * @param PHPPowerPoint $pPHPPowerPoint
+ * @return string XML Output
+ * @throws Exception
+ */
+ public function writePresentation(PHPPowerPoint $pPHPPowerPoint = null)
+ {
+ // Create XML writer
+ $objWriter = null;
+ if ($this->getParentWriter()->getUseDiskCaching()) {
+ $objWriter = new PHPPowerPoint_Shared_XMLWriter(PHPPowerPoint_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory());
+ } else {
+ $objWriter = new PHPPowerPoint_Shared_XMLWriter(PHPPowerPoint_Shared_XMLWriter::STORAGE_MEMORY);
+ }
+
+ // XML header
+ $objWriter->startDocument('1.0','UTF-8','yes');
+
+ // p:presentation
+ $objWriter->startElement('p:presentation');
+ $objWriter->writeAttribute('xmlns:a', 'http://schemas.openxmlformats.org/drawingml/2006/main');
+ $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships');
+ $objWriter->writeAttribute('xmlns:p', 'http://schemas.openxmlformats.org/presentationml/2006/main');
+
+ // p:sldMasterIdLst
+ $objWriter->startElement('p:sldMasterIdLst');
+
+ // p:sldMasterId
+ $objWriter->startElement('p:sldMasterId');
+ $objWriter->writeAttribute('id', '2147483648');
+ $objWriter->writeAttribute('r:id', 'rId1');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // p:sldIdLst
+ $objWriter->startElement('p:sldIdLst');
+ $this->_writeSlides($objWriter, $pPHPPowerPoint);
+ $objWriter->endElement();
+
+ // p:sldSz
+ $objWriter->startElement('p:sldSz');
+ $objWriter->writeAttribute('cx', '9144000');
+ $objWriter->writeAttribute('cy', '6858000');
+ $objWriter->endElement();
+
+ // p:notesSz
+ $objWriter->startElement('p:notesSz');
+ $objWriter->writeAttribute('cx', '6858000');
+ $objWriter->writeAttribute('cy', '9144000');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // Return
+ return $objWriter->getData();
+ }
+
+ /**
+ * Write slides
+ *
+ * @param PHPPowerPoint_Shared_XMLWriter $objWriter XML Writer
+ * @param PHPPowerPoint $pPHPPowerPoint
+ * @throws Exception
+ */
+ private function _writeSlides(PHPPowerPoint_Shared_XMLWriter $objWriter = null, PHPPowerPoint $pPHPPowerPoint = null)
+ {
+ // Write slides
+ $slideCount = $pPHPPowerPoint->getSlideCount();
+ for ($i = 0; $i < $slideCount; ++$i) {
+ // p:sldId
+ $this->_writeSlide(
+ $objWriter,
+ ($i + 256),
+ ($i + 1 + 2)
+ );
+ }
+ }
+
+ /**
+ * Write slide
+ *
+ * @param PHPPowerPoint_Shared_XMLWriter $objWriter XML Writer
+ * @param int $pSlideId Slide id
+ * @param int $pRelId Relationship ID
+ * @throws Exception
+ */
+ private function _writeSlide(PHPPowerPoint_Shared_XMLWriter $objWriter = null, $pSlideId = 1, $pRelId = 1)
+ {
+ // p:sldId
+ $objWriter->startElement('p:sldId');
+ $objWriter->writeAttribute('id', $pSlideId);
+ $objWriter->writeAttribute('r:id', 'rId' . $pRelId);
+ $objWriter->endElement();
+ }
+}
diff --git a/admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007/Rels.php b/admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007/Rels.php
new file mode 100644
index 0000000..cdab556
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007/Rels.php
@@ -0,0 +1,347 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * Copyright (c) 2009 - 2010 PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Writer_PowerPoint2007
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/** PHPPowerPoint */
+require_once 'PHPPowerPoint.php';
+
+/** PHPPowerPoint_Slide */
+require_once 'PHPPowerPoint/Slide.php';
+
+/** PHPPowerPoint_Writer_PowerPoint2007 */
+require_once 'PHPPowerPoint/Writer/PowerPoint2007.php';
+
+/** PHPPowerPoint_Writer_PowerPoint2007_WriterPart */
+require_once 'PHPPowerPoint/Writer/PowerPoint2007/WriterPart.php';
+
+/** PHPPowerPoint_Shared_XMLWriter */
+require_once 'PHPPowerPoint/Shared/XMLWriter.php';
+
+
+/**
+ * PHPPowerPoint_Writer_PowerPoint2007_Rels
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Writer_PowerPoint2007
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+class PHPPowerPoint_Writer_PowerPoint2007_Rels extends PHPPowerPoint_Writer_PowerPoint2007_WriterPart
+{
+ /**
+ * Write relationships to XML format
+ *
+ * @param PHPPowerPoint $pPHPPowerPoint
+ * @return string XML Output
+ * @throws Exception
+ */
+ public function writeRelationships(PHPPowerPoint $pPHPPowerPoint = null)
+ {
+ // Create XML writer
+ $objWriter = null;
+ if ($this->getParentWriter()->getUseDiskCaching()) {
+ $objWriter = new PHPPowerPoint_Shared_XMLWriter(PHPPowerPoint_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory());
+ } else {
+ $objWriter = new PHPPowerPoint_Shared_XMLWriter(PHPPowerPoint_Shared_XMLWriter::STORAGE_MEMORY);
+ }
+
+ // XML header
+ $objWriter->startDocument('1.0','UTF-8','yes');
+
+ // Relationships
+ $objWriter->startElement('Relationships');
+ $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/package/2006/relationships');
+
+ // Relationship docProps/app.xml
+ $this->_writeRelationship(
+ $objWriter,
+ 3,
+ 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties',
+ 'docProps/app.xml'
+ );
+
+ // Relationship docProps/core.xml
+ $this->_writeRelationship(
+ $objWriter,
+ 2,
+ 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties',
+ 'docProps/core.xml'
+ );
+
+ // Relationship ppt/presentation.xml
+ $this->_writeRelationship(
+ $objWriter,
+ 1,
+ 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument',
+ 'ppt/presentation.xml'
+ );
+
+ $objWriter->endElement();
+
+ // Return
+ return $objWriter->getData();
+ }
+
+ /**
+ * Write presentation relationships to XML format
+ *
+ * @param PHPPowerPoint $pPHPPowerPoint
+ * @return string XML Output
+ * @throws Exception
+ */
+ public function writePresentationRelationships(PHPPowerPoint $pPHPPowerPoint = null)
+ {
+ // Create XML writer
+ $objWriter = null;
+ if ($this->getParentWriter()->getUseDiskCaching()) {
+ $objWriter = new PHPPowerPoint_Shared_XMLWriter(PHPPowerPoint_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory());
+ } else {
+ $objWriter = new PHPPowerPoint_Shared_XMLWriter(PHPPowerPoint_Shared_XMLWriter::STORAGE_MEMORY);
+ }
+
+ // XML header
+ $objWriter->startDocument('1.0','UTF-8','yes');
+
+ // Relationships
+ $objWriter->startElement('Relationships');
+ $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/package/2006/relationships');
+
+ // Relationship slideMasters/slideMaster1.xml
+ $this->_writeRelationship(
+ $objWriter,
+ 1,
+ 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster',
+ 'slideMasters/slideMaster1.xml'
+ );
+
+ // Relationship theme/theme1.xml
+ $this->_writeRelationship(
+ $objWriter,
+ 2,
+ 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme',
+ 'theme/theme1.xml'
+ );
+
+ // Relationships with slides
+ $slideCount = $pPHPPowerPoint->getSlideCount();
+ for ($i = 0; $i < $slideCount; ++$i) {
+ $this->_writeRelationship(
+ $objWriter,
+ ($i + 1 + 2),
+ 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide',
+ 'slides/slide' . ($i + 1) . '.xml'
+ );
+ }
+
+ $objWriter->endElement();
+
+ // Return
+ return $objWriter->getData();
+ }
+
+ /**
+ * Write slide master relationships to XML format
+ *
+ * @return string XML Output
+ * @throws Exception
+ */
+ public function writeSlideMasterRelationships()
+ {
+ // Create XML writer
+ $objWriter = null;
+ if ($this->getParentWriter()->getUseDiskCaching()) {
+ $objWriter = new PHPPowerPoint_Shared_XMLWriter(PHPPowerPoint_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory());
+ } else {
+ $objWriter = new PHPPowerPoint_Shared_XMLWriter(PHPPowerPoint_Shared_XMLWriter::STORAGE_MEMORY);
+ }
+
+ // XML header
+ $objWriter->startDocument('1.0','UTF-8','yes');
+
+ // Relationships
+ $objWriter->startElement('Relationships');
+ $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/package/2006/relationships');
+
+ // Write slideLayout relationships
+ $layoutPack = $this->getParentWriter()->getLayoutPack();
+ for ($i = 0; $i < count($layoutPack->getLayouts()); ++$i) {
+ $this->_writeRelationship(
+ $objWriter,
+ $i + 1,
+ 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout',
+ '../slideLayouts/slideLayout' . ($i + 1) . '.xml'
+ );
+ }
+
+ // Relationship theme/theme1.xml
+ $this->_writeRelationship(
+ $objWriter,
+ count($layoutPack->getLayouts()) + 1,
+ 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme',
+ '../theme/theme1.xml'
+ );
+
+ $objWriter->endElement();
+
+ // Return
+ return $objWriter->getData();
+ }
+
+ /**
+ * Write slide layout relationships to XML format
+ *
+ * @return string XML Output
+ * @throws Exception
+ */
+ public function writeSlideLayoutRelationships()
+ {
+ // Create XML writer
+ $objWriter = null;
+ if ($this->getParentWriter()->getUseDiskCaching()) {
+ $objWriter = new PHPPowerPoint_Shared_XMLWriter(PHPPowerPoint_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory());
+ } else {
+ $objWriter = new PHPPowerPoint_Shared_XMLWriter(PHPPowerPoint_Shared_XMLWriter::STORAGE_MEMORY);
+ }
+
+ // XML header
+ $objWriter->startDocument('1.0','UTF-8','yes');
+
+ // Relationships
+ $objWriter->startElement('Relationships');
+ $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/package/2006/relationships');
+
+ // Write slideMaster relationship
+ $this->_writeRelationship(
+ $objWriter,
+ 1,
+ 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster',
+ '../slideMasters/slideMaster1.xml'
+ );
+
+ $objWriter->endElement();
+
+ // Return
+ return $objWriter->getData();
+ }
+
+ /**
+ * Write slide relationships to XML format
+ *
+ * Numbering is as follows:
+ * rId1 - Drawings
+ *
+ * @param PHPPowerPoint_Slide $pSlide
+ * @param int $pSlideId
+ * @return string XML Output
+ * @throws Exception
+ */
+ public function writeSlideRelationships(PHPPowerPoint_Slide $pSlide = null, $pSlideId = 1)
+ {
+ // Create XML writer
+ $objWriter = null;
+ if ($this->getParentWriter()->getUseDiskCaching()) {
+ $objWriter = new PHPPowerPoint_Shared_XMLWriter(PHPPowerPoint_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory());
+ } else {
+ $objWriter = new PHPPowerPoint_Shared_XMLWriter(PHPPowerPoint_Shared_XMLWriter::STORAGE_MEMORY);
+ }
+
+ // XML header
+ $objWriter->startDocument('1.0','UTF-8','yes');
+
+ // Relationships
+ $objWriter->startElement('Relationships');
+ $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/package/2006/relationships');
+
+ // Starting relation id
+ $relId = 1;
+
+ // Write slideLayout relationship
+ $layoutPack = $this->getParentWriter()->getLayoutPack();
+ $layoutIndex = $layoutPack->findlayoutIndex( $pSlide->getSlideLayout() );
+
+ $this->_writeRelationship(
+ $objWriter,
+ $relId++,
+ 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout',
+ '../slideLayouts/slideLayout' . ($layoutIndex + 1) . '.xml'
+ );
+
+ // Write drawing relationships?
+ if ($pSlide->getShapeCollection()->count() > 0) {
+ // Loop trough images and write relationships
+ $iterator = $pSlide->getShapeCollection()->getIterator();
+ while ($iterator->valid()) {
+ if ($iterator->current() instanceof PHPPowerPoint_Shape_Drawing
+ || $iterator->current() instanceof PHPPowerPoint_Shape_MemoryDrawing) {
+ // Write relationship for image drawing
+ $this->_writeRelationship(
+ $objWriter,
+ $relId,
+ 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image',
+ '../media/' . str_replace(' ', '', $iterator->current()->getIndexedFilename())
+ );
+ }
+
+ $iterator->next();
+ ++$relId;
+ }
+ }
+
+ $objWriter->endElement();
+
+ // Return
+ return $objWriter->getData();
+ }
+
+ /**
+ * Write Override content type
+ *
+ * @param PHPPowerPoint_Shared_XMLWriter $objWriter XML Writer
+ * @param int $pId Relationship ID. rId will be prepended!
+ * @param string $pType Relationship type
+ * @param string $pTarget Relationship target
+ * @param string $pTargetMode Relationship target mode
+ * @throws Exception
+ */
+ private function _writeRelationship(PHPPowerPoint_Shared_XMLWriter $objWriter = null, $pId = 1, $pType = '', $pTarget = '', $pTargetMode = '')
+ {
+ if ($pType != '' && $pTarget != '') {
+ // Write relationship
+ $objWriter->startElement('Relationship');
+ $objWriter->writeAttribute('Id', 'rId' . $pId);
+ $objWriter->writeAttribute('Type', $pType);
+ $objWriter->writeAttribute('Target', $pTarget);
+
+ if ($pTargetMode != '') {
+ $objWriter->writeAttribute('TargetMode', $pTargetMode);
+ }
+
+ $objWriter->endElement();
+ } else {
+ throw new Exception("Invalid parameters passed.");
+ }
+ }
+}
diff --git a/admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007/Slide.php b/admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007/Slide.php
new file mode 100644
index 0000000..45c0e4a
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007/Slide.php
@@ -0,0 +1,520 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * Copyright (c) 2009 - 2010 PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Writer_PowerPoint2007
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/** PHPPowerPoint_Writer_PowerPoint2007 */
+require_once 'PHPPowerPoint/Writer/PowerPoint2007.php';
+
+/** PHPPowerPoint_Writer_PowerPoint2007_WriterPart */
+require_once 'PHPPowerPoint/Writer/PowerPoint2007/WriterPart.php';
+
+/** PHPPowerPoint_Slide */
+require_once 'PHPPowerPoint/Slide.php';
+
+/** PHPPowerPoint_Shape */
+require_once 'PHPPowerPoint/Shape.php';
+
+/** PHPPowerPoint_Shape_RichText */
+require_once 'PHPPowerPoint/Shape/RichText.php';
+
+/** PHPPowerPoint_Shape_BaseDrawing */
+require_once 'PHPPowerPoint/Shape/BaseDrawing.php';
+
+/** PHPPowerPoint_Shape_Drawing */
+require_once 'PHPPowerPoint/Shape/Drawing.php';
+
+/** PHPPowerPoint_Shape_MemoryDrawing */
+require_once 'PHPPowerPoint/Shape/MemoryDrawing.php';
+
+/** PHPPowerPoint_Shared_Font */
+require_once 'PHPPowerPoint/Shared/Font.php';
+
+/** PHPPowerPoint_Shared_String */
+require_once 'PHPPowerPoint/Shared/String.php';
+
+/** PHPPowerPoint_Shared_XMLWriter */
+require_once 'PHPPowerPoint/Shared/XMLWriter.php';
+
+
+/**
+ * PHPPowerPoint_Writer_PowerPoint2007_Slide
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Writer_PowerPoint2007
+ * @copyright Copyright (c) 2006 - 2009 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+class PHPPowerPoint_Writer_PowerPoint2007_Slide extends PHPPowerPoint_Writer_PowerPoint2007_WriterPart
+{
+ /**
+ * Write slide to XML format
+ *
+ * @param PHPPowerPoint_Slide $pSlide
+ * @return string XML Output
+ * @throws Exception
+ */
+ public function writeSlide(PHPPowerPoint_Slide $pSlide = null)
+ {
+ // Check slide
+ if (is_null($pSlide))
+ throw new Exception("Invalid PHPPowerPoint_Slide object passed.");
+
+ // Create XML writer
+ $objWriter = null;
+ if ($this->getParentWriter()->getUseDiskCaching()) {
+ $objWriter = new PHPPowerPoint_Shared_XMLWriter(PHPPowerPoint_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory());
+ } else {
+ $objWriter = new PHPPowerPoint_Shared_XMLWriter(PHPPowerPoint_Shared_XMLWriter::STORAGE_MEMORY);
+ }
+
+ // XML header
+ $objWriter->startDocument('1.0','UTF-8','yes');
+
+ // p:sld
+ $objWriter->startElement('p:sld');
+ $objWriter->writeAttribute('xmlns:a', 'http://schemas.openxmlformats.org/drawingml/2006/main');
+ $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships');
+ $objWriter->writeAttribute('xmlns:p', 'http://schemas.openxmlformats.org/presentationml/2006/main');
+
+ // p:cSld
+ $objWriter->startElement('p:cSld');
+
+ // p:spTree
+ $objWriter->startElement('p:spTree');
+
+ // p:nvGrpSpPr
+ $objWriter->startElement('p:nvGrpSpPr');
+
+ // p:cNvPr
+ $objWriter->startElement('p:cNvPr');
+ $objWriter->writeAttribute('id', '1');
+ $objWriter->writeAttribute('name', '');
+ $objWriter->endElement();
+
+ // p:cNvGrpSpPr
+ $objWriter->writeElement('p:cNvGrpSpPr', null);
+
+ // p:nvPr
+ $objWriter->writeElement('p:nvPr', null);
+
+ $objWriter->endElement();
+
+ // p:grpSpPr
+ $objWriter->startElement('p:grpSpPr');
+
+ // a:xfrm
+ $objWriter->startElement('a:xfrm');
+
+ // a:off
+ $objWriter->startElement('a:off');
+ $objWriter->writeAttribute('x', '0');
+ $objWriter->writeAttribute('y', '0');
+ $objWriter->endElement();
+
+ // a:ext
+ $objWriter->startElement('a:ext');
+ $objWriter->writeAttribute('cx', '0');
+ $objWriter->writeAttribute('cy', '0');
+ $objWriter->endElement();
+
+ // a:chOff
+ $objWriter->startElement('a:chOff');
+ $objWriter->writeAttribute('x', '0');
+ $objWriter->writeAttribute('y', '0');
+ $objWriter->endElement();
+
+ // a:chExt
+ $objWriter->startElement('a:chExt');
+ $objWriter->writeAttribute('cx', '0');
+ $objWriter->writeAttribute('cy', '0');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // Loop shapes
+ $shapeId = 0;
+ $relationId = 1;
+ $shapes = $pSlide->getShapeCollection();
+ foreach ($shapes as $shape)
+ {
+ // Increment $shapeId
+ ++$shapeId;
+
+ // Check type
+ if ($shape instanceof PHPPowerPoint_Shape_BaseDrawing)
+ {
+ // Picture --> $relationId
+ ++$relationId;
+
+ $this->_writePic($objWriter, $shape, $shapeId, $relationId);
+ }
+ else if ($shape instanceof PHPPowerPoint_Shape_RichText)
+ {
+ $this->_writeTxt($objWriter, $shape, $shapeId);
+ }
+ }
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // p:clrMapOvr
+ $objWriter->startElement('p:clrMapOvr');
+
+ // a:masterClrMapping
+ $objWriter->writeElement('a:masterClrMapping', '');
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // Return
+ return $objWriter->getData();
+ }
+
+ /**
+ * Write pic
+ *
+ * @param PHPPowerPoint_Shared_XMLWriter $objWriter XML Writer
+ * @param PHPPowerPoint_Shape_BaseDrawing $shape
+ * @param int $shapeId
+ * @param int $relationId
+ * @throws Exception
+ */
+ private function _writePic(PHPPowerPoint_Shared_XMLWriter $objWriter = null, PHPPowerPoint_Shape_BaseDrawing $shape = null, $shapeId, $relationId)
+ {
+ // p:pic
+ $objWriter->startElement('p:pic');
+
+ // p:nvPicPr
+ $objWriter->startElement('p:nvPicPr');
+
+ // p:cNvPr
+ $objWriter->startElement('p:cNvPr');
+ $objWriter->writeAttribute('id', $shapeId);
+ $objWriter->writeAttribute('name', $shape->getName());
+ $objWriter->writeAttribute('descr', $shape->getDescription());
+ $objWriter->endElement();
+
+ // p:cNvPicPr
+ $objWriter->startElement('p:cNvPicPr');
+
+ // a:picLocks
+ $objWriter->startElement('a:picLocks');
+ $objWriter->writeAttribute('noChangeAspect', '1');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // p:nvPr
+ $objWriter->writeElement('p:nvPr', null);
+
+ $objWriter->endElement();
+
+ // p:blipFill
+ $objWriter->startElement('p:blipFill');
+
+ // a:blip
+ $objWriter->startElement('a:blip');
+ $objWriter->writeAttribute('r:embed', 'rId' . $relationId);
+ $objWriter->endElement();
+
+ // a:stretch
+ $objWriter->startElement('a:stretch');
+ $objWriter->writeElement('a:fillRect', null);
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // p:spPr
+ $objWriter->startElement('p:spPr');
+
+ // a:xfrm
+ $objWriter->startElement('a:xfrm');
+ $objWriter->writeAttribute('rot', PHPPowerPoint_Shared_Drawing::degreesToAngle($shape->getRotation()));
+
+ // a:off
+ $objWriter->startElement('a:off');
+ $objWriter->writeAttribute('x', PHPPowerPoint_Shared_Drawing::pixelsToEMU($shape->getOffsetX()));
+ $objWriter->writeAttribute('y', PHPPowerPoint_Shared_Drawing::pixelsToEMU($shape->getOffsetY()));
+ $objWriter->endElement();
+
+ // a:ext
+ $objWriter->startElement('a:ext');
+ $objWriter->writeAttribute('cx', PHPPowerPoint_Shared_Drawing::pixelsToEMU($shape->getWidth()));
+ $objWriter->writeAttribute('cy', PHPPowerPoint_Shared_Drawing::pixelsToEMU($shape->getHeight()));
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // a:prstGeom
+ $objWriter->startElement('a:prstGeom');
+ $objWriter->writeAttribute('prst', 'rect');
+
+ // a:avLst
+ $objWriter->writeElement('a:avLst', null);
+
+ $objWriter->endElement();
+
+ if ($shape->getShadow()->getVisible()) {
+ // a:effectLst
+ $objWriter->startElement('a:effectLst');
+
+ // a:outerShdw
+ $objWriter->startElement('a:outerShdw');
+ $objWriter->writeAttribute('blurRad', PHPPowerPoint_Shared_Drawing::pixelsToEMU($shape->getShadow()->getBlurRadius()));
+ $objWriter->writeAttribute('dist', PHPPowerPoint_Shared_Drawing::pixelsToEMU($shape->getShadow()->getDistance()));
+ $objWriter->writeAttribute('dir', PHPPowerPoint_Shared_Drawing::degreesToAngle($shape->getShadow()->getDirection()));
+ $objWriter->writeAttribute('algn', $shape->getShadow()->getAlignment());
+ $objWriter->writeAttribute('rotWithShape', '0');
+
+ // a:srgbClr
+ $objWriter->startElement('a:srgbClr');
+ $objWriter->writeAttribute('val', $shape->getShadow()->getColor()->getRGB());
+
+ // a:alpha
+ $objWriter->startElement('a:alpha');
+ $objWriter->writeAttribute('val', $shape->getShadow()->getAlpha() * 1000);
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+ }
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+ }
+
+ /**
+ * Write txt
+ *
+ * @param PHPPowerPoint_Shared_XMLWriter $objWriter XML Writer
+ * @param PHPPowerPoint_Shape_RichText $shape
+ * @param int $shapeId
+ * @throws Exception
+ */
+ private function _writeTxt(PHPPowerPoint_Shared_XMLWriter $objWriter = null, PHPPowerPoint_Shape_RichText $shape = null, $shapeId)
+ {
+ // p:sp
+ $objWriter->startElement('p:sp');
+
+ // p:nvSpPr
+ $objWriter->startElement('p:nvSpPr');
+
+ // p:cNvPr
+ $objWriter->startElement('p:cNvPr');
+ $objWriter->writeAttribute('id', $shapeId);
+ $objWriter->writeAttribute('name', '');
+ $objWriter->endElement();
+
+ // p:cNvSpPr
+ $objWriter->startElement('p:cNvSpPr');
+ $objWriter->writeAttribute('txBox', '1');
+ $objWriter->endElement();
+
+ // p:nvPr
+ $objWriter->writeElement('p:nvPr', null);
+
+ $objWriter->endElement();
+
+ // p:spPr
+ $objWriter->startElement('p:spPr');
+
+ // a:xfrm
+ $objWriter->startElement('a:xfrm');
+ $objWriter->writeAttribute('rot', PHPPowerPoint_Shared_Drawing::degreesToAngle($shape->getRotation()));
+
+ // a:off
+ $objWriter->startElement('a:off');
+ $objWriter->writeAttribute('x', PHPPowerPoint_Shared_Drawing::pixelsToEMU($shape->getOffsetX()));
+ $objWriter->writeAttribute('y', PHPPowerPoint_Shared_Drawing::pixelsToEMU($shape->getOffsetY()));
+ $objWriter->endElement();
+
+ // a:ext
+ $objWriter->startElement('a:ext');
+ $objWriter->writeAttribute('cx', PHPPowerPoint_Shared_Drawing::pixelsToEMU($shape->getWidth()));
+ $objWriter->writeAttribute('cy', PHPPowerPoint_Shared_Drawing::pixelsToEMU($shape->getHeight()));
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // a:prstGeom
+ $objWriter->startElement('a:prstGeom');
+ $objWriter->writeAttribute('prst', 'rect');
+ $objWriter->endElement();
+
+ // a:noFill
+ $objWriter->writeElement('a:noFill', null);
+
+ if ($shape->getShadow()->getVisible()) {
+ // a:effectLst
+ $objWriter->startElement('a:effectLst');
+
+ // a:outerShdw
+ $objWriter->startElement('a:outerShdw');
+ $objWriter->writeAttribute('blurRad', PHPPowerPoint_Shared_Drawing::pixelsToEMU($shape->getShadow()->getBlurRadius()));
+ $objWriter->writeAttribute('dist', PHPPowerPoint_Shared_Drawing::pixelsToEMU($shape->getShadow()->getDistance()));
+ $objWriter->writeAttribute('dir', PHPPowerPoint_Shared_Drawing::degreesToAngle($shape->getShadow()->getDirection()));
+ $objWriter->writeAttribute('algn', $shape->getShadow()->getAlignment());
+ $objWriter->writeAttribute('rotWithShape', '0');
+
+ // a:srgbClr
+ $objWriter->startElement('a:srgbClr');
+ $objWriter->writeAttribute('val', $shape->getShadow()->getColor()->getRGB());
+
+ // a:alpha
+ $objWriter->startElement('a:alpha');
+ $objWriter->writeAttribute('val', $shape->getShadow()->getAlpha() * 1000);
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+ }
+
+ $objWriter->endElement();
+
+ // p:txBody
+ $objWriter->startElement('p:txBody');
+
+ // a:bodyPr
+ $objWriter->startElement('a:bodyPr');
+ $objWriter->writeAttribute('wrap', 'square');
+ $objWriter->writeAttribute('rtlCol', '0');
+
+ // a:spAutoFit
+ $objWriter->writeElement('a:spAutoFit', null);
+
+ $objWriter->endElement();
+
+ // a:lstStyle
+ $objWriter->writeElement('a:lstStyle', null);
+
+ // a:p
+ $objWriter->startElement('a:p');
+
+ // a:pPr
+ $objWriter->startElement('a:pPr');
+ $objWriter->writeAttribute('algn', $shape->getAlignment()->getHorizontal());
+ $objWriter->writeAttribute('fontAlgn', $shape->getAlignment()->getVertical());
+ $objWriter->writeAttribute('indent', $shape->getAlignment()->getIndent());
+ $objWriter->writeAttribute('lvl', $shape->getAlignment()->getLevel());
+ $objWriter->endElement();
+
+ // Loop trough rich text elements
+ $elements = $shape->getRichTextElements();
+ foreach ($elements as $element) {
+ if ($element instanceof PHPPowerPoint_Shape_RichText_Break) {
+ // a:br
+ $objWriter->writeElement('a:br', null);
+ }
+ elseif ($element instanceof PHPPowerPoint_Shape_RichText_Run
+ || $element instanceof PHPPowerPoint_Shape_RichText_TextElement)
+ {
+ // a:r
+ $objWriter->startElement('a:r');
+
+ // a:rPr
+ if ($element instanceof PHPPowerPoint_Shape_RichText_Run) {
+ // a:rPr
+ $objWriter->startElement('a:rPr');
+
+ // Bold
+ $objWriter->writeAttribute('b', ($element->getFont()->getBold() ? 'true' : 'false'));
+
+ // Italic
+ $objWriter->writeAttribute('i', ($element->getFont()->getItalic() ? 'true' : 'false'));
+
+ // Strikethrough
+ $objWriter->writeAttribute('strike', ($element->getFont()->getStrikethrough() ? 'sngStrike' : 'noStrike'));
+
+ // Size
+ $objWriter->writeAttribute('sz', ($element->getFont()->getSize() * 100));
+
+ // Underline
+ $objWriter->writeAttribute('u', $element->getFont()->getUnderline());
+
+ // Superscript / subscript
+ if ($element->getFont()->getSuperScript() || $element->getFont()->getSubScript()) {
+ if ($element->getFont()->getSuperScript()) {
+ $objWriter->writeAttribute('baseline', '30000');
+ } else if ($element->getFont()->getSubScript()) {
+ $objWriter->writeAttribute('baseline', '-25000');
+ }
+ }
+
+ // Color - a:solidFill
+ $objWriter->startElement('a:solidFill');
+
+ // a:srgbClr
+ $objWriter->startElement('a:srgbClr');
+ $objWriter->writeAttribute('val', $element->getFont()->getColor()->getRGB());
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // Font - a:latin
+ $objWriter->startElement('a:latin');
+ $objWriter->writeAttribute('typeface', $element->getFont()->getName());
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+ }
+
+ // t
+ $objWriter->startElement('a:t');
+ $objWriter->writeRaw(PHPPowerPoint_Shared_String::ControlCharacterPHP2OOXML( htmlspecialchars($element->getText()) ));
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+ }
+ }
+
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+
+ /*
+
+ <a:r>
+ <a:rPr lang="en-US" dirty="0" err="1" smtClean="0" />
+ </a:r>
+
+ */
+
+ $objWriter->endElement();
+ }
+}
diff --git a/admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007/Theme.php b/admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007/Theme.php
new file mode 100644
index 0000000..088934e
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007/Theme.php
@@ -0,0 +1,1215 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * Copyright (c) 2006 - 2009 PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Writer_PowerPoint2007
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/** PHPPowerPoint */
+require_once 'PHPPowerPoint.php';
+
+/** PHPPowerPoint_Writer_PowerPoint2007 */
+require_once 'PHPPowerPoint/Writer/PowerPoint2007.php';
+
+/** PHPPowerPoint_Writer_PowerPoint2007_WriterPart */
+require_once 'PHPPowerPoint/Writer/PowerPoint2007/WriterPart.php';
+
+/** PHPPowerPoint_Shared_XMLWriter */
+require_once 'PHPPowerPoint/Shared/XMLWriter.php';
+
+
+/**
+ * PHPPowerPoint_Writer_PowerPoint2007_DocProps
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Writer_PowerPoint2007
+ * @copyright Copyright (c) 2006 - 2009 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+class PHPPowerPoint_Writer_PowerPoint2007_Theme extends PHPPowerPoint_Writer_PowerPoint2007_WriterPart
+{
+ /**
+ * Write theme to XML format
+ *
+ * @param PHPPowerPoint $pPHPPowerPoint
+ * @return string XML Output
+ * @throws Exception
+ */
+ public function writeTheme(PHPPowerPoint $pPHPPowerPoint = null)
+ {
+ // Create XML writer
+ $objWriter = null;
+ if ($this->getParentWriter()->getUseDiskCaching()) {
+ $objWriter = new PHPPowerPoint_Shared_XMLWriter(PHPPowerPoint_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory());
+ } else {
+ $objWriter = new PHPPowerPoint_Shared_XMLWriter(PHPPowerPoint_Shared_XMLWriter::STORAGE_MEMORY);
+ }
+
+ // XML header
+ $objWriter->startDocument('1.0','UTF-8','yes');
+
+ // a:theme
+ $objWriter->startElement('a:theme');
+ $objWriter->writeAttribute('xmlns:a', 'http://schemas.openxmlformats.org/drawingml/2006/main');
+ $objWriter->writeAttribute('name', 'Office Theme');
+
+ // a:themeElements
+ $objWriter->startElement('a:themeElements');
+
+ {
+ // a:clrScheme
+ $objWriter->startElement('a:clrScheme');
+ $objWriter->writeAttribute('name', 'Office');
+
+ // a:dk1
+ $objWriter->startElement('a:dk1');
+
+ // a:sysClr
+ $objWriter->startElement('a:sysClr');
+ $objWriter->writeAttribute('val', 'windowText');
+ $objWriter->writeAttribute('lastClr', '000000');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // a:lt1
+ $objWriter->startElement('a:lt1');
+
+ // a:sysClr
+ $objWriter->startElement('a:sysClr');
+ $objWriter->writeAttribute('val', 'window');
+ $objWriter->writeAttribute('lastClr', 'FFFFFF');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // a:dk2
+ $objWriter->startElement('a:dk2');
+
+ // a:sysClr
+ $objWriter->startElement('a:srgbClr');
+ $objWriter->writeAttribute('val', '1F497D');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // a:lt2
+ $objWriter->startElement('a:lt2');
+
+ // a:sysClr
+ $objWriter->startElement('a:srgbClr');
+ $objWriter->writeAttribute('val', 'EEECE1');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // a:accent1
+ $objWriter->startElement('a:accent1');
+
+ // a:sysClr
+ $objWriter->startElement('a:srgbClr');
+ $objWriter->writeAttribute('val', '4F81BD');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // a:accent2
+ $objWriter->startElement('a:accent2');
+
+ // a:sysClr
+ $objWriter->startElement('a:srgbClr');
+ $objWriter->writeAttribute('val', 'C0504D');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // a:accent3
+ $objWriter->startElement('a:accent3');
+
+ // a:sysClr
+ $objWriter->startElement('a:srgbClr');
+ $objWriter->writeAttribute('val', '9BBB59');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // a:accent4
+ $objWriter->startElement('a:accent4');
+
+ // a:sysClr
+ $objWriter->startElement('a:srgbClr');
+ $objWriter->writeAttribute('val', '8064A2');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // a:accent5
+ $objWriter->startElement('a:accent5');
+
+ // a:sysClr
+ $objWriter->startElement('a:srgbClr');
+ $objWriter->writeAttribute('val', '4BACC6');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // a:accent6
+ $objWriter->startElement('a:accent6');
+
+ // a:sysClr
+ $objWriter->startElement('a:srgbClr');
+ $objWriter->writeAttribute('val', 'F79646');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // a:hlink
+ $objWriter->startElement('a:hlink');
+
+ // a:sysClr
+ $objWriter->startElement('a:srgbClr');
+ $objWriter->writeAttribute('val', '0000FF');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // a:folHlink
+ $objWriter->startElement('a:folHlink');
+
+ // a:sysClr
+ $objWriter->startElement('a:srgbClr');
+ $objWriter->writeAttribute('val', '800080');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+ }
+
+ {
+ // a:fontScheme
+ $objWriter->startElement('a:fontScheme');
+ $objWriter->writeAttribute('name', 'Office');
+
+ // a:majorFont
+ $objWriter->startElement('a:majorFont');
+
+ // a:latin
+ $objWriter->startElement('a:latin');
+ $objWriter->writeAttribute('typeface', 'Calibri');
+ $objWriter->endElement();
+
+ // a:ea
+ $objWriter->startElement('a:ea');
+ $objWriter->writeAttribute('typeface', '');
+ $objWriter->endElement();
+
+ // a:cs
+ $objWriter->startElement('a:cs');
+ $objWriter->writeAttribute('typeface', '');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Jpan');
+ $objWriter->writeAttribute('typeface', '?? ?????');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Hang');
+ $objWriter->writeAttribute('typeface', '?? ??');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Hans');
+ $objWriter->writeAttribute('typeface', '??');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Hant');
+ $objWriter->writeAttribute('typeface', '????');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Arab');
+ $objWriter->writeAttribute('typeface', 'Times New Roman');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Hebr');
+ $objWriter->writeAttribute('typeface', 'Times New Roman');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Thai');
+ $objWriter->writeAttribute('typeface', 'Angsana New');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Ethi');
+ $objWriter->writeAttribute('typeface', 'Nyala');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Beng');
+ $objWriter->writeAttribute('typeface', 'Vrinda');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Gujr');
+ $objWriter->writeAttribute('typeface', 'Shruti');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Khmr');
+ $objWriter->writeAttribute('typeface', 'MoolBoran');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Knda');
+ $objWriter->writeAttribute('typeface', 'Tunga');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Guru');
+ $objWriter->writeAttribute('typeface', 'Raavi');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Cans');
+ $objWriter->writeAttribute('typeface', 'Euphemia');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Cher');
+ $objWriter->writeAttribute('typeface', 'Plantagenet Cherokee');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Yiii');
+ $objWriter->writeAttribute('typeface', 'Microsoft Yi Baiti');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Tibt');
+ $objWriter->writeAttribute('typeface', 'Microsoft Himalaya');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Thaa');
+ $objWriter->writeAttribute('typeface', 'MV Boli');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Deva');
+ $objWriter->writeAttribute('typeface', 'Mangal');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Telu');
+ $objWriter->writeAttribute('typeface', 'Gautami');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Taml');
+ $objWriter->writeAttribute('typeface', 'Latha');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Syrc');
+ $objWriter->writeAttribute('typeface', 'Estrangelo Edessa');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Orya');
+ $objWriter->writeAttribute('typeface', 'Kalinga');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Mlym');
+ $objWriter->writeAttribute('typeface', 'Kartika');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Laoo');
+ $objWriter->writeAttribute('typeface', 'DokChampa');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Sinh');
+ $objWriter->writeAttribute('typeface', 'Iskoola Pota');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Mong');
+ $objWriter->writeAttribute('typeface', 'Mongolian Baiti');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Viet');
+ $objWriter->writeAttribute('typeface', 'Times New Roman');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Uigh');
+ $objWriter->writeAttribute('typeface', 'Microsoft Uighur');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // a:minorFont
+ $objWriter->startElement('a:minorFont');
+
+ // a:latin
+ $objWriter->startElement('a:latin');
+ $objWriter->writeAttribute('typeface', 'Calibri');
+ $objWriter->endElement();
+
+ // a:ea
+ $objWriter->startElement('a:ea');
+ $objWriter->writeAttribute('typeface', '');
+ $objWriter->endElement();
+
+ // a:cs
+ $objWriter->startElement('a:cs');
+ $objWriter->writeAttribute('typeface', '');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Jpan');
+ $objWriter->writeAttribute('typeface', '?? ?????');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Hang');
+ $objWriter->writeAttribute('typeface', '?? ??');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Hans');
+ $objWriter->writeAttribute('typeface', '??');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Hant');
+ $objWriter->writeAttribute('typeface', '????');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Arab');
+ $objWriter->writeAttribute('typeface', 'Arial');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Hebr');
+ $objWriter->writeAttribute('typeface', 'Arial');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Thai');
+ $objWriter->writeAttribute('typeface', 'Cordia New');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Ethi');
+ $objWriter->writeAttribute('typeface', 'Nyala');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Beng');
+ $objWriter->writeAttribute('typeface', 'Vrinda');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Gujr');
+ $objWriter->writeAttribute('typeface', 'Shruti');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Khmr');
+ $objWriter->writeAttribute('typeface', 'DaunPenh');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Knda');
+ $objWriter->writeAttribute('typeface', 'Tunga');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Guru');
+ $objWriter->writeAttribute('typeface', 'Raavi');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Cans');
+ $objWriter->writeAttribute('typeface', 'Euphemia');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Cher');
+ $objWriter->writeAttribute('typeface', 'Plantagenet Cherokee');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Yiii');
+ $objWriter->writeAttribute('typeface', 'Microsoft Yi Baiti');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Tibt');
+ $objWriter->writeAttribute('typeface', 'Microsoft Himalaya');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Thaa');
+ $objWriter->writeAttribute('typeface', 'MV Boli');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Deva');
+ $objWriter->writeAttribute('typeface', 'Mangal');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Telu');
+ $objWriter->writeAttribute('typeface', 'Gautami');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Taml');
+ $objWriter->writeAttribute('typeface', 'Latha');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Syrc');
+ $objWriter->writeAttribute('typeface', 'Estrangelo Edessa');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Orya');
+ $objWriter->writeAttribute('typeface', 'Kalinga');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Mlym');
+ $objWriter->writeAttribute('typeface', 'Kartika');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Laoo');
+ $objWriter->writeAttribute('typeface', 'DokChampa');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Sinh');
+ $objWriter->writeAttribute('typeface', 'Iskoola Pota');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Mong');
+ $objWriter->writeAttribute('typeface', 'Mongolian Baiti');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Viet');
+ $objWriter->writeAttribute('typeface', 'Arial');
+ $objWriter->endElement();
+
+ // a:font
+ $objWriter->startElement('a:font');
+ $objWriter->writeAttribute('script', 'Uigh');
+ $objWriter->writeAttribute('typeface', 'Microsoft Uighur');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+ }
+
+ {
+ // a:fmtScheme
+ $objWriter->startElement('a:fmtScheme');
+ $objWriter->writeAttribute('name', 'Office');
+
+ // a:fillStyleLst
+ $objWriter->startElement('a:fillStyleLst');
+
+ // a:solidFill
+ $objWriter->startElement('a:solidFill');
+
+ // a:schemeClr
+ $objWriter->startElement('a:schemeClr');
+ $objWriter->writeAttribute('val', 'phClr');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // a:gradFill
+ $objWriter->startElement('a:gradFill');
+ $objWriter->writeAttribute('rotWithShape', '1');
+
+ // a:gsLst
+ $objWriter->startElement('a:gsLst');
+
+ // a:gs
+ $objWriter->startElement('a:gs');
+ $objWriter->writeAttribute('pos', '0');
+
+ // a:schemeClr
+ $objWriter->startElement('a:schemeClr');
+ $objWriter->writeAttribute('val', 'phClr');
+
+ // a:tint
+ $objWriter->startElement('a:tint');
+ $objWriter->writeAttribute('val', '50000');
+ $objWriter->endElement();
+
+ // a:satMod
+ $objWriter->startElement('a:satMod');
+ $objWriter->writeAttribute('val', '300000');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // a:gs
+ $objWriter->startElement('a:gs');
+ $objWriter->writeAttribute('pos', '35000');
+
+ // a:schemeClr
+ $objWriter->startElement('a:schemeClr');
+ $objWriter->writeAttribute('val', 'phClr');
+
+ // a:tint
+ $objWriter->startElement('a:tint');
+ $objWriter->writeAttribute('val', '37000');
+ $objWriter->endElement();
+
+ // a:satMod
+ $objWriter->startElement('a:satMod');
+ $objWriter->writeAttribute('val', '300000');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // a:gs
+ $objWriter->startElement('a:gs');
+ $objWriter->writeAttribute('pos', '100000');
+
+ // a:schemeClr
+ $objWriter->startElement('a:schemeClr');
+ $objWriter->writeAttribute('val', 'phClr');
+
+ // a:tint
+ $objWriter->startElement('a:tint');
+ $objWriter->writeAttribute('val', '15000');
+ $objWriter->endElement();
+
+ // a:satMod
+ $objWriter->startElement('a:satMod');
+ $objWriter->writeAttribute('val', '350000');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // a:lin
+ $objWriter->startElement('a:lin');
+ $objWriter->writeAttribute('ang', '16200000');
+ $objWriter->writeAttribute('scaled', '1');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // a:gradFill
+ $objWriter->startElement('a:gradFill');
+ $objWriter->writeAttribute('rotWithShape', '1');
+
+ // a:gsLst
+ $objWriter->startElement('a:gsLst');
+
+ // a:gs
+ $objWriter->startElement('a:gs');
+ $objWriter->writeAttribute('pos', '0');
+
+ // a:schemeClr
+ $objWriter->startElement('a:schemeClr');
+ $objWriter->writeAttribute('val', 'phClr');
+
+ // a:shade
+ $objWriter->startElement('a:shade');
+ $objWriter->writeAttribute('val', '51000');
+ $objWriter->endElement();
+
+ // a:satMod
+ $objWriter->startElement('a:satMod');
+ $objWriter->writeAttribute('val', '130000');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // a:gs
+ $objWriter->startElement('a:gs');
+ $objWriter->writeAttribute('pos', '80000');
+
+ // a:schemeClr
+ $objWriter->startElement('a:schemeClr');
+ $objWriter->writeAttribute('val', 'phClr');
+
+ // a:shade
+ $objWriter->startElement('a:shade');
+ $objWriter->writeAttribute('val', '93000');
+ $objWriter->endElement();
+
+ // a:satMod
+ $objWriter->startElement('a:satMod');
+ $objWriter->writeAttribute('val', '130000');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // a:gs
+ $objWriter->startElement('a:gs');
+ $objWriter->writeAttribute('pos', '100000');
+
+ // a:schemeClr
+ $objWriter->startElement('a:schemeClr');
+ $objWriter->writeAttribute('val', 'phClr');
+
+ // a:shade
+ $objWriter->startElement('a:shade');
+ $objWriter->writeAttribute('val', '94000');
+ $objWriter->endElement();
+
+ // a:satMod
+ $objWriter->startElement('a:satMod');
+ $objWriter->writeAttribute('val', '135000');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // a:lin
+ $objWriter->startElement('a:lin');
+ $objWriter->writeAttribute('ang', '16200000');
+ $objWriter->writeAttribute('scaled', '0');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // a:lnStyleLst
+ $objWriter->startElement('a:lnStyleLst');
+
+ // a:ln
+ $objWriter->startElement('a:ln');
+ $objWriter->writeAttribute('w', '9525');
+ $objWriter->writeAttribute('cap', 'flat');
+ $objWriter->writeAttribute('cmpd', 'sng');
+ $objWriter->writeAttribute('algn', 'ctr');
+
+ // a:solidFill
+ $objWriter->startElement('a:solidFill');
+
+ // a:schemeClr
+ $objWriter->startElement('a:schemeClr');
+ $objWriter->writeAttribute('val', 'phClr');
+
+ // a:shade
+ $objWriter->startElement('a:shade');
+ $objWriter->writeAttribute('val', '95000');
+ $objWriter->endElement();
+
+ // a:satMod
+ $objWriter->startElement('a:satMod');
+ $objWriter->writeAttribute('val', '105000');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // a:prstDash
+ $objWriter->startElement('a:prstDash');
+ $objWriter->writeAttribute('val', 'solid');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // a:ln
+ $objWriter->startElement('a:ln');
+ $objWriter->writeAttribute('w', '25400');
+ $objWriter->writeAttribute('cap', 'flat');
+ $objWriter->writeAttribute('cmpd', 'sng');
+ $objWriter->writeAttribute('algn', 'ctr');
+
+ // a:solidFill
+ $objWriter->startElement('a:solidFill');
+
+ // a:schemeClr
+ $objWriter->startElement('a:schemeClr');
+ $objWriter->writeAttribute('val', 'phClr');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // a:prstDash
+ $objWriter->startElement('a:prstDash');
+ $objWriter->writeAttribute('val', 'solid');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // a:ln
+ $objWriter->startElement('a:ln');
+ $objWriter->writeAttribute('w', '38100');
+ $objWriter->writeAttribute('cap', 'flat');
+ $objWriter->writeAttribute('cmpd', 'sng');
+ $objWriter->writeAttribute('algn', 'ctr');
+
+ // a:solidFill
+ $objWriter->startElement('a:solidFill');
+
+ // a:schemeClr
+ $objWriter->startElement('a:schemeClr');
+ $objWriter->writeAttribute('val', 'phClr');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // a:prstDash
+ $objWriter->startElement('a:prstDash');
+ $objWriter->writeAttribute('val', 'solid');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+
+
+ // a:effectStyleLst
+ $objWriter->startElement('a:effectStyleLst');
+
+ // a:effectStyle
+ $objWriter->startElement('a:effectStyle');
+
+ // a:effectLst
+ $objWriter->startElement('a:effectLst');
+
+ // a:outerShdw
+ $objWriter->startElement('a:outerShdw');
+ $objWriter->writeAttribute('blurRad', '40000');
+ $objWriter->writeAttribute('dist', '20000');
+ $objWriter->writeAttribute('dir', '5400000');
+ $objWriter->writeAttribute('rotWithShape', '0');
+
+ // a:srgbClr
+ $objWriter->startElement('a:srgbClr');
+ $objWriter->writeAttribute('val', '000000');
+
+ // a:alpha
+ $objWriter->startElement('a:alpha');
+ $objWriter->writeAttribute('val', '38000');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // a:effectStyle
+ $objWriter->startElement('a:effectStyle');
+
+ // a:effectLst
+ $objWriter->startElement('a:effectLst');
+
+ // a:outerShdw
+ $objWriter->startElement('a:outerShdw');
+ $objWriter->writeAttribute('blurRad', '40000');
+ $objWriter->writeAttribute('dist', '23000');
+ $objWriter->writeAttribute('dir', '5400000');
+ $objWriter->writeAttribute('rotWithShape', '0');
+
+ // a:srgbClr
+ $objWriter->startElement('a:srgbClr');
+ $objWriter->writeAttribute('val', '000000');
+
+ // a:alpha
+ $objWriter->startElement('a:alpha');
+ $objWriter->writeAttribute('val', '35000');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // a:effectStyle
+ $objWriter->startElement('a:effectStyle');
+
+ // a:effectLst
+ $objWriter->startElement('a:effectLst');
+
+ // a:outerShdw
+ $objWriter->startElement('a:outerShdw');
+ $objWriter->writeAttribute('blurRad', '40000');
+ $objWriter->writeAttribute('dist', '23000');
+ $objWriter->writeAttribute('dir', '5400000');
+ $objWriter->writeAttribute('rotWithShape', '0');
+
+ // a:srgbClr
+ $objWriter->startElement('a:srgbClr');
+ $objWriter->writeAttribute('val', '000000');
+
+ // a:alpha
+ $objWriter->startElement('a:alpha');
+ $objWriter->writeAttribute('val', '35000');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // a:scene3d
+ $objWriter->startElement('a:scene3d');
+
+ // a:camera
+ $objWriter->startElement('a:camera');
+ $objWriter->writeAttribute('prst', 'orthographicFront');
+
+ // a:rot
+ $objWriter->startElement('a:rot');
+ $objWriter->writeAttribute('lat', '0');
+ $objWriter->writeAttribute('lon', '0');
+ $objWriter->writeAttribute('rev', '0');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // a:lightRig
+ $objWriter->startElement('a:lightRig');
+ $objWriter->writeAttribute('rig', 'threePt');
+ $objWriter->writeAttribute('dir', 't');
+
+ // a:rot
+ $objWriter->startElement('a:rot');
+ $objWriter->writeAttribute('lat', '0');
+ $objWriter->writeAttribute('lon', '0');
+ $objWriter->writeAttribute('rev', '1200000');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // a:sp3d
+ $objWriter->startElement('a:sp3d');
+
+ // a:bevelT
+ $objWriter->startElement('a:bevelT');
+ $objWriter->writeAttribute('w', '63500');
+ $objWriter->writeAttribute('h', '25400');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // a:bgFillStyleLst
+ $objWriter->startElement('a:bgFillStyleLst');
+
+ // a:solidFill
+ $objWriter->startElement('a:solidFill');
+
+ // a:schemeClr
+ $objWriter->startElement('a:schemeClr');
+ $objWriter->writeAttribute('val', 'phClr');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // a:gradFill
+ $objWriter->startElement('a:gradFill');
+ $objWriter->writeAttribute('rotWithShape', '1');
+
+ // a:gsLst
+ $objWriter->startElement('a:gsLst');
+
+ // a:gs
+ $objWriter->startElement('a:gs');
+ $objWriter->writeAttribute('pos', '0');
+
+ // a:schemeClr
+ $objWriter->startElement('a:schemeClr');
+ $objWriter->writeAttribute('val', 'phClr');
+
+ // a:tint
+ $objWriter->startElement('a:tint');
+ $objWriter->writeAttribute('val', '40000');
+ $objWriter->endElement();
+
+ // a:satMod
+ $objWriter->startElement('a:satMod');
+ $objWriter->writeAttribute('val', '350000');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // a:gs
+ $objWriter->startElement('a:gs');
+ $objWriter->writeAttribute('pos', '40000');
+
+ // a:schemeClr
+ $objWriter->startElement('a:schemeClr');
+ $objWriter->writeAttribute('val', 'phClr');
+
+ // a:tint
+ $objWriter->startElement('a:tint');
+ $objWriter->writeAttribute('val', '45000');
+ $objWriter->endElement();
+
+ // a:shade
+ $objWriter->startElement('a:shade');
+ $objWriter->writeAttribute('val', '99000');
+ $objWriter->endElement();
+
+ // a:satMod
+ $objWriter->startElement('a:satMod');
+ $objWriter->writeAttribute('val', '350000');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // a:gs
+ $objWriter->startElement('a:gs');
+ $objWriter->writeAttribute('pos', '100000');
+
+ // a:schemeClr
+ $objWriter->startElement('a:schemeClr');
+ $objWriter->writeAttribute('val', 'phClr');
+
+ // a:shade
+ $objWriter->startElement('a:shade');
+ $objWriter->writeAttribute('val', '20000');
+ $objWriter->endElement();
+
+ // a:satMod
+ $objWriter->startElement('a:satMod');
+ $objWriter->writeAttribute('val', '255000');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // a:path
+ $objWriter->startElement('a:path');
+ $objWriter->writeAttribute('path', 'circle');
+
+ // a:fillToRect
+ $objWriter->startElement('a:fillToRect');
+ $objWriter->writeAttribute('l', '50000');
+ $objWriter->writeAttribute('t', '-80000');
+ $objWriter->writeAttribute('r', '50000');
+ $objWriter->writeAttribute('b', '180000');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // a:gradFill
+ $objWriter->startElement('a:gradFill');
+ $objWriter->writeAttribute('rotWithShape', '1');
+
+ // a:gsLst
+ $objWriter->startElement('a:gsLst');
+
+ // a:gs
+ $objWriter->startElement('a:gs');
+ $objWriter->writeAttribute('pos', '0');
+
+ // a:schemeClr
+ $objWriter->startElement('a:schemeClr');
+ $objWriter->writeAttribute('val', 'phClr');
+
+ // a:tint
+ $objWriter->startElement('a:tint');
+ $objWriter->writeAttribute('val', '80000');
+ $objWriter->endElement();
+
+ // a:satMod
+ $objWriter->startElement('a:satMod');
+ $objWriter->writeAttribute('val', '300000');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // a:gs
+ $objWriter->startElement('a:gs');
+ $objWriter->writeAttribute('pos', '100000');
+
+ // a:schemeClr
+ $objWriter->startElement('a:schemeClr');
+ $objWriter->writeAttribute('val', 'phClr');
+
+ // a:shade
+ $objWriter->startElement('a:shade');
+ $objWriter->writeAttribute('val', '30000');
+ $objWriter->endElement();
+
+ // a:satMod
+ $objWriter->startElement('a:satMod');
+ $objWriter->writeAttribute('val', '200000');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // a:path
+ $objWriter->startElement('a:path');
+ $objWriter->writeAttribute('path', 'circle');
+
+ // a:fillToRect
+ $objWriter->startElement('a:fillToRect');
+ $objWriter->writeAttribute('l', '50000');
+ $objWriter->writeAttribute('t', '50000');
+ $objWriter->writeAttribute('r', '50000');
+ $objWriter->writeAttribute('b', '50000');
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+ }
+
+ $objWriter->endElement();
+
+ // a:objectDefaults
+ $objWriter->writeElement('a:objectDefaults', null);
+
+ // a:extraClrSchemeLst
+ $objWriter->writeElement('a:extraClrSchemeLst', null);
+
+ $objWriter->endElement();
+
+ // Return
+ return $objWriter->getData();
+ }
+}
diff --git a/admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007/WriterPart.php b/admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007/WriterPart.php
new file mode 100644
index 0000000..0175fe4
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/Writer/PowerPoint2007/WriterPart.php
@@ -0,0 +1,72 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * Copyright (c) 2009 - 2010 PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Writer_PowerPoint2007
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/** PHPPowerPoint_IWriter */
+require_once 'PHPPowerPoint/Writer/IWriter.php';
+
+
+/**
+ * PHPPowerPoint_Writer_PowerPoint2007_WriterPart
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Writer_PowerPoint2007
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+abstract class PHPPowerPoint_Writer_PowerPoint2007_WriterPart
+{
+ /**
+ * Parent IWriter object
+ *
+ * @var PHPPowerPoint_Writer_IWriter
+ */
+ private $_parentWriter;
+
+ /**
+ * Set parent IWriter object
+ *
+ * @param PHPPowerPoint_Writer_IWriter $pWriter
+ * @throws Exception
+ */
+ public function setParentWriter(PHPPowerPoint_Writer_IWriter $pWriter = null) {
+ $this->_parentWriter = $pWriter;
+ }
+
+ /**
+ * Get parent IWriter object
+ *
+ * @return PHPPowerPoint_Writer_IWriter
+ * @throws Exception
+ */
+ public function getParentWriter() {
+ if (!is_null($this->_parentWriter)) {
+ return $this->_parentWriter;
+ } else {
+ throw new Exception("No parent PHPPowerPoint_Writer_IWriter assigned.");
+ }
+ }
+}
diff --git a/admin/exportclases/PHPPowerPoint/Writer/Serialized.php b/admin/exportclases/PHPPowerPoint/Writer/Serialized.php
new file mode 100644
index 0000000..edc9596
--- /dev/null
+++ b/admin/exportclases/PHPPowerPoint/Writer/Serialized.php
@@ -0,0 +1,187 @@
+<?php
+/**
+ * PHPPowerPoint
+ *
+ * Copyright (c) 2009 - 2010 PHPPowerPoint
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Writer
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
+ * @version 0.1.0, 2009-04-27
+ */
+
+
+/** PHPPowerPoint */
+require_once 'PHPPowerPoint.php';
+
+/** PHPPowerPoint_HashTable */
+require_once 'PHPPowerPoint/HashTable.php';
+
+/** PHPPowerPoint_IComparable */
+require_once 'PHPPowerPoint/IComparable.php';
+
+/** PHPPowerPoint_Slide */
+require_once 'PHPPowerPoint/Slide.php';
+
+/** PHPPowerPoint_IWriter */
+require_once 'PHPPowerPoint/Writer/IWriter.php';
+
+
+/**
+ * PHPPowerPoint_Writer_Serialized
+ *
+ * @category PHPPowerPoint
+ * @package PHPPowerPoint_Writer
+ * @copyright Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
+ */
+class PHPPowerPoint_Writer_Serialized implements PHPPowerPoint_Writer_IWriter
+{
+ /**
+ * Private PHPPowerPoint
+ *
+ * @var PHPPowerPoint
+ */
+ private $_presentation;
+
+ /**
+ * Create a new PHPPowerPoint_Writer_Serialized
+ *
+ * @param PHPPowerPoint $pPHPPowerPoint
+ */
+ public function __construct(PHPPowerPoint $pPHPPowerPoint = null)
+ {
+ // Assign PHPPowerPoint
+ $this->setPHPPowerPoint($pPHPPowerPoint);
+ }
+
+ /**
+ * Save PHPPowerPoint to file
+ *
+ * @param string $pFileName
+ * @throws Exception
+ */
+ public function save($pFilename = null)
+ {
+ if (!is_null($this->_presentation)) {
+ // Create new ZIP file and open it for writing
+ $objZip = new ZipArchive();
+
+ // Try opening the ZIP file
+ if ($objZip->open($pFilename, ZIPARCHIVE::OVERWRITE) !== true) {
+ if ($objZip->open($pFilename, ZIPARCHIVE::CREATE) !== true) {
+ throw new Exception("Could not open " . $pFilename . " for writing.");
+ }
+ }
+
+ // Add media
+ $slideCount = $this->_presentation->getSlideCount();
+ for ($i = 0; $i < $slideCount; ++$i) {
+ for ($j = 0; $j < $this->_presentation->getSlide($i)->getShapeCollection()->count(); ++$j) {
+ if ($this->_presentation->getSlide($i)->getShapeCollection()->offsetGet($j) instanceof PHPPowerPoint_Shape_BaseDrawing) {
+ $imgTemp = $this->_presentation->getSlide($i)->getShapeCollection()->offsetGet($j);
+ $objZip->addFromString('media/' . $imgTemp->getFilename(), file_get_contents($imgTemp->getPath()));
+ }
+ }
+ }
+
+ // Add PHPPowerPoint.xml to the document, which represents a PHP serialized PHPPowerPoint object
+ $objZip->addFromString('PHPPowerPoint.xml', $this->_writeSerialized($this->_presentation, $pFilename));
+
+ // Close file
+ if ($objZip->close() === false) {
+ throw new Exception("Could not close zip file $pFilename.");
+ }
+ } else {
+ throw new Exception("PHPPowerPoint object unassigned.");
+ }
+ }
+
+ /**
+ * Get PHPPowerPoint object
+ *
+ * @return PHPPowerPoint
+ * @throws Exception
+ */
+ public function getPHPPowerPoint() {
+ if (!is_null($this->_presentation)) {
+ return $this->_presentation;
+ } else {
+ throw new Exception("No PHPPowerPoint assigned.");
+ }
+ }
+
+ /**
+ * Get PHPPowerPoint object
+ *
+ * @param PHPPowerPoint $pPHPPowerPoint PHPPowerPoint object
+ * @throws Exception
+ */
+ public function setPHPPowerPoint(PHPPowerPoint $pPHPPowerPoint = null) {
+ $this->_presentation = $pPHPPowerPoint;
+ }
+
+ /**
+ * Serialize PHPPowerPoint object to XML
+ *
+ * @param PHPPowerPoint $pPHPPowerPoint
+ * @param string $pFilename
+ * @return string XML Output
+ * @throws Exception
+ */
+ private function _writeSerialized(PHPPowerPoint $pPHPPowerPoint = null, $pFilename = '')
+ {
+ // Clone $pPHPPowerPoint
+ $pPHPPowerPoint = clone $pPHPPowerPoint;
+
+ // Update media links
+ $slideCount = $pPHPPowerPoint->getSlideCount();
+ for ($i = 0; $i < $slideCount; ++$i) {
+ for ($j = 0; $j < $pPHPPowerPoint->getSlide($i)->getShapeCollection()->count(); ++$j) {
+ if ($pPHPPowerPoint->getSlide($i)->getShapeCollection()->offsetGet($j) instanceof PHPPowerPoint_Shape_BaseDrawing) {
+ $imgTemp =& $pPHPPowerPoint->getSlide($i)->getShapeCollection()->offsetGet($j);
+ $imgTemp->setPath('zip://' . $pFilename . '#media/' . $imgTemp->getFilename(), false);
+ }
+ }
+ }
+
+ // Create XML writer
+ $objWriter = new xmlWriter();
+ $objWriter->openMemory();
+ $objWriter->setIndent(true);
+
+ // XML header
+ $objWriter->startDocument('1.0','UTF-8','yes');
+
+ // PHPPowerPoint
+ $objWriter->startElement('PHPPowerPoint');
+ $objWriter->writeAttribute('version', '0.1.0');
+
+ // Comment
+ $objWriter->writeComment('This file has been generated using PHPPowerPoint v0.1.0 (http://www.codeplex.com/PHPPowerPoint). It contains a base64 encoded serialized version of the PHPPowerPoint internal object.');
+
+ // Data
+ $objWriter->startElement('data');
+ $objWriter->writeCData( base64_encode(serialize($pPHPPowerPoint)) );
+ $objWriter->endElement();
+
+ $objWriter->endElement();
+
+ // Return
+ return $objWriter->outputMemory(true);
+ }
+}
diff --git a/admin/exportclases/class.enka.pdf.php b/admin/exportclases/class.enka.pdf.php
new file mode 100644
index 0000000..12b0268
--- /dev/null
+++ b/admin/exportclases/class.enka.pdf.php
@@ -0,0 +1,476 @@
+<?php
+/*
+ * Created on 24.2.2009
+ *
+ * ahthor: Gorazd Veselic
+ *
+ * Za potrebe custom header in footer
+ */
+
+require_once('class.tcpdf.php');
+// Extend the TCPDF class to create custom Header and Footer
+ class enka_TCPDF extends TCPDF
+ {
+ /**
+ * @var Ce je true izpisemo header na prvi strani
+ * @access protected
+ */
+ protected $print_header_first_page = true;
+
+ /**
+ * @var @var Ce je true izpisemo footer na prvi strani
+ * @access protected
+ */
+ protected $print_footer_first_page = true;
+
+ /**
+ * @var @var datum, ki ga izpisemo v footerju
+ * @access protected
+ */
+ protected $footer_date = null;
+
+ /**
+ * Nastavimo ali printamo header na prvi strani.
+ * @param boolean $value set to true to print the page footer (default), false otherwise.
+ */
+ public function setPrintHeaderFirstPage($val=true) {
+ $this->print_header_first_page = $val;
+ }
+
+ /**
+ * Nastavimo ali printamo header na prvi strani.
+ * @param boolean $value set to true to print the page footer (default), false otherwise.
+ */
+ public function setPrintFooterFirstPage($val=true) {
+ $this->print_footer_first_page = $val;
+ }
+
+ /**
+ * Vrne ali printamo header na prvi strani
+ * @return boolean
+ */
+ public function doPrint_header_first_page() {
+ return $this->print_header_first_page;
+ }
+
+ /**
+ * Vrne ali printamo footer na prvi strani
+ * @return boolean
+ */
+ public function doPrint_footer_first_page() {
+ return $this->print_footer_first_page;
+ }
+
+ /**
+ * Nastavimo datum v footerju
+ */
+ public function setFooterDate($date=null) {
+ $this->footer_date = $date;
+ }
+
+ /** OVERRIDE
+ * This method is used to render the page header.
+ * It is automatically called by AddPage() and could be overwritten in your own inherited class.
+ */
+
+ public function Header() {
+ //ali izpise header
+ $doIzpis = true;
+ if ( !$this->doPrint_header_first_page())
+ $doIzpis = ( $this->PageNo() != 1);
+
+ if ($doIzpis)
+ {
+ $ormargins = $this->getOriginalMargins();
+ $headerfont = $this->getHeaderFont();
+ $headerdata = $this->getHeaderData();
+
+ $imgy = $this->GetY();
+ $cell_height = round(($this->getCellHeightRatio() * $headerfont[2]) / $this->getScaleFactor(), 2);
+ // set starting margin for text data cell
+ if ($this->getRTL()) {
+ $header_x = $ormargins['right'] + ($headerdata['logo_width'] * 1.1);
+ } else {
+ $header_x = $ormargins['left'] + ($headerdata['logo_width'] * 1.1);
+ }
+ $this->SetTextColor(0, 0, 0);
+ // header title
+// $this->SetFont($headerfont[0], 'B', $headerfont[2] + 1);
+ $this->SetX($header_x);
+ $this->SetFont($headerfont[0], $headerfont[1], $headerfont[2]);
+
+ $extend_width = ($this->CurOrientation == 'L') ? 1.4 : 1;
+
+ // Posebej header za gorenje
+ if(Common::checkModule('gorenje')){
+ // header string
+ $this->MultiCell(90*$extend_width, $cell_height, /*$headerdata['title']*/'', 0, 'L', 0, 0, 0 ,0, true);
+ $this->MultiCell(90*$extend_width, $cell_height, $headerdata['string'], 0, 'R', 0, 1, 0 ,0, true);
+
+ // print an ending header line
+ $this->SetLineStyle(array('width' => 0.85 / $this->getScaleFactor(), 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)));
+ $this->SetY((2.835 / $this->getScaleFactor()) + max($imgy, $this->GetY()));
+ if ($this->getRTL()) {
+ $this->SetX($ormargins['right']);
+ } else {
+ $this->SetX($ormargins['left']);
+ }
+ $this->Cell(0, 0, "".'', 'T', 0, 'C');
+
+ $image_file = '../survey/modules/mod_gorenje/img_new/logo.png';
+ $this->Image($image_file, 15, 8, 25, '', 'PNG', '', 'T', true, 300, '', false, false, 0, false, false, false);
+ }
+ else{
+ // header string
+ // Avk nima www.1ka.si texta v glavi
+ global $mysql_database_name;
+ if($mysql_database_name == "vprasalnikiavksi")
+ $this->MultiCell(90*$extend_width, $cell_height, '', 0, 'L', 0, 0, 0 ,0, true);
+ else
+ $this->MultiCell(90*$extend_width, $cell_height, $headerdata['title'], 0, 'L', 0, 0, 0 ,0, true);
+
+ $this->MultiCell(90*$extend_width, $cell_height, $headerdata['string'], 0, 'R', 0, 1, 0 ,0, true);
+
+ // print an ending header line
+ $this->SetLineStyle(array('width' => 0.85 / $this->getScaleFactor(), 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)));
+ $this->SetY((2.835 / $this->getScaleFactor()) + max($imgy, $this->GetY()));
+ if ($this->getRTL()) {
+ $this->SetX($ormargins['right']);
+ } else {
+ $this->SetX($ormargins['left']);
+ }
+ $this->Cell(0, 0, "".'', 'T', 0, 'C');
+ }
+ }
+ }
+
+ /** OVERRIDE
+ * This method is used to render the page footer.
+ * It is automatically called by AddPage() and could be overwritten in your own inherited class.
+ */
+ public function Footer() {
+
+ $cur_y = $this->GetY();
+ $ormargins = $this->getOriginalMargins();
+ $this->SetTextColor(0, 0, 0);
+ //set style for cell border
+ $line_width = 0.85 / $this->getScaleFactor();
+ $this->SetLineStyle(array('width' => $line_width, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)));
+
+ //ali izpise footer
+ $doIzpis = true;
+ if ( !$this->doPrint_footer_first_page())
+ $doIzpis = ( $this->PageNo() != 1);
+
+ if (empty($this->pagegroups))
+ {
+ $curr = $this->getAliasNumPage();
+ $all = $this->getAliasNbPages();
+ }
+ else
+ {
+ $curr = $this->getPageNumGroupAlias();
+ $all = $this->getPageGroupAlias();
+ }
+
+ $pagenumtxt = $this->l['w_page'].' '.$curr.' / '.$all;
+
+ $this->SetY($cur_y);
+
+ //print date
+ if($this->footer_date){
+ $this->SetX($ormargins['left']);
+ $this->Cell(0, 0, date('d.m.Y', strtotime($this->footer_date)), 'T', 0, 'L');
+ }
+
+ //Print page number
+ if ($doIzpis)
+ if ($this->getRTL()) {
+ $this->SetX($ormargins['right']);
+ $this->Cell(0, 0, $pagenumtxt, 'T', 0, 'L');
+ } else {
+ $this->SetX($ormargins['left']);
+ $this->Cell(0, 0, $pagenumtxt, 'T', 0, 'R');
+ }
+ }
+ /** OVERRIDE: z novo erzijo ne deluje veÄ javascript form elementi
+ * ker Adobe krešira
+ *
+ */
+ public function RadioButton($name, $w, $prop=array())
+ {
+ $prop['strokeColor'] = isset($prop['strokeColor'] ) ? $prop['strokeColor'] : 'black';
+ $prop['full'] = (isset( $prop['full'] ) && $prop['full'] == true) ? true : false;
+
+ $oldStyle = $this->GetLineStyle;
+ $this->SetLineStyle(array('width' => 0.25, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)));
+ $cy = $this->getY();
+ $cx = $this->getX();
+ $lch = $this->getLastH();
+ // $this->_addfield('radiobutton', $name, $this->x, $this->y, $w, $w, $prop);
+
+ // void Circle (float $x0, float $y0, float $r, $astart,
+ // [ $afinish = 360], [string $style = ""],
+ // [array $line_style = array()], [array $fill_color = array()], [integer $nc = 8], float $astart:, float $afinish:)
+ // narišemo krogec
+ $this->Circle($cx, $cy+($this->getLastH()/2), $w/2 );
+
+ // zapolnimo user vrednost
+ $this->SetFillColor(0, 0, 0);
+ ( $prop['full'] ) ? $this->Circle($cx, $cy+($this->getLastH()/2), $w/3.5,0,360,'F') : null;
+
+ $this->SetLineStyle = $oldStyle;
+ }
+ /** OVERRIDE: z novo verzijo ne deluje veÄ javascript form elementi
+ * ker Adobe krešira, zato sami narišemo škatlco
+ *
+ */
+ public function CheckBox($name, $w, $prop=array())
+ {
+// $prop['value'] = ($checked ? 'Yes' : 'Off');
+ $prop['strokeColor'] = isset($prop['strokeColor'] ) ? $prop['strokeColor'] : 'black';
+ $prop['full'] = (isset( $prop['full'] ) && $prop['full'] == true) ? true : false;
+
+ $oldStyle = $this->GetLineStyle;
+ $this->SetLineStyle(array('width' => 0.25, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)));
+ $cy = $this->getY();
+ $cx = $this->getX();
+ $lch = $this->getLastH();
+ // narišemo kvadratek
+ $styleBox = array('L' => array('width' => 0.25, 'cap' => 'butt', 'join' => 'miter', 'dash' => '0', 'color' => array(0, 0, 0)),
+ 'T' => array('width' => 0.25, 'cap' => 'butt', 'join' => 'miter', 'dash' => '0', 'color' => array(0, 0, 0)),
+ 'R' => array('width' => 0.25, 'cap' => 'butt', 'join' => 'miter', 'dash' => '0', 'color' => array(0, 0, 0)),
+ 'B' => array('width' => 0.25, 'cap' => 'butt', 'join' => 'miter', 'dash' => '0', 'color' => array(0, 0, 0)));
+
+ $this->Rect($cx-($w/2), $cy, $w, $w, 'DF', $styleBox, array(255, 255, 255));
+
+ // zapolnimo user vrednost
+ $this->SetFillColor(0, 0, 0);
+ $prop['full'] ? $this->Rect($cx-($w/2)+$w/4, $cy+$w/4, $w/2, $w/2, 'DF', $styleBox, array(0, 0, 0)) : null;
+ $this->SetLineStyle = $oldStyle;
+ }
+
+ /** Izrišemo okvir za text
+ *
+ */
+ public function TextBox($w, $h, $prop=array())
+ {
+ if (!isset($prop['strokeColor'])) {
+ $prop['strokeColor'] = 'black';
+ }
+ $cy = $this->getY();
+ $cx = $this->getX();
+ $lch = $this->getLastH();
+ // narišemo kvadratek
+ $styleBoxDotted = array('L' => array('width' => 0.25, 'cap' => 'butt', 'join' => 'miter', 'dash' => '0', 'color' => array(128, 128, 128)),
+ 'T' => array('width' => 0.25, 'cap' => 'butt', 'join' => 'miter', 'dash' => '0', 'color' => array(128, 128, 128)),
+ 'R' => array('width' => 0.25, 'cap' => 'butt', 'join' => 'miter', 'dash' => '0', 'color' => array(128, 128, 128)),
+ 'B' => array('width' => 0.25, 'cap' => 'butt', 'join' => 'miter', 'dash' => '0', 'color' => array(128, 128, 128)));
+
+ $cx = ( (PDF_MARGIN_LEFT) ? PDF_MARGIN_LEFT : 15 );
+ $this->Rect($cx, $cy, $w, $h, 'DF', $styleBoxDotted, array(255, 255, 255));
+ }
+ /** Izrišemo okvir za text - kjer jih je vec (multi...)
+ *
+ */
+ public function TextBoxes($w, $h, $prop=array())
+ {
+ if (!isset($prop['strokeColor'])) {
+ $prop['strokeColor'] = 'black';
+ }
+ $cy = $this->getY();
+ $cx = $this->getX();
+ $lch = $this->getLastH();
+ // narišemo kvadratek
+ $styleBoxDotted = array('L' => array('width' => 0.25, 'cap' => 'butt', 'join' => 'miter', 'dash' => '0', 'color' => array(128, 128, 128)),
+ 'T' => array('width' => 0.25, 'cap' => 'butt', 'join' => 'miter', 'dash' => '0', 'color' => array(128, 128, 128)),
+ 'R' => array('width' => 0.25, 'cap' => 'butt', 'join' => 'miter', 'dash' => '0', 'color' => array(128, 128, 128)),
+ 'B' => array('width' => 0.25, 'cap' => 'butt', 'join' => 'miter', 'dash' => '0', 'color' => array(128, 128, 128)));
+
+ //$cx = ( (PDF_MARGIN_LEFT) ? PDF_MARGIN_LEFT : 15 );
+ $this->Rect($cx, $cy, $w, $h, 'DF', $styleBoxDotted, array(255, 255, 255));
+ }
+ public function TabledTextBox($cols, $rows, $prop = array() )
+ {
+ $totalWidth = ( ( $prop['totalWidth'] ) ? $prop['totalWidth'] : 180 );
+ $spaceWidth = ( ( $prop['spaceWidth'] ) ? $prop['spaceWidth'] : 4 );
+ $rowHeaders = $prop['rowHeaders'];
+ $type = ( ( isset ( $prop['type'] ) ) ? $prop['type'] : 'box' ); // def. rišemo box
+ $drawRowHeader = ( ( isset( $prop['rowHeaders'] ) && is_array($prop['rowHeaders'])) ? 1 : 0 );
+ $cols += $drawRowHeader;
+ if ($type == povezave)
+ {
+ $cols ++;
+ $rows ++;
+ $headerBox = 1;
+ $drawRowHeader = 1;
+ }
+
+ $spaces = ($cols-1)*2*$spaceWidth;
+ $cellWidth = ( ( $prop['cellWidth'] ) ? $prop['cellWidth'] : (($totalWidth-$spaces) / $cols) );
+ $lineHeight = ( ( $prop['lineHeight'] ) ? $prop['lineHeight'] : 5 );
+ $lineStyle = ( ( isset( $prop['lineStyle'] ) && is_array($prop['lineStyle']) ) ? $prop['lineStyle'] : array('width' => 0.25, 'cap' => 'butt', 'join' => 'miter', 'dash' => '0', 'color' => array(128, 128, 128)) );
+ $headerStyle = ( ( isset( $prop['headerStyle'] ) && is_array($prop['headerStyle']) ) ? $prop['headerStyle'] : array('width' => 0.25, 'cap' => 'butt', 'join' => 'miter', 'dash' => '0', 'color' => array(0, 0, 0)) );
+ $headerBox = ( ( isset ( $prop['headerBox'] ) ) ? $prop['headerBox'] : 0 );
+ $vLine = ( ( isset( $prop['vLine'] ) ) ? $prop['vLine'] : 1 ); // po def. riÅ¡emo vertikalne Ärte
+ $hLine = ( ( isset( $prop['hLine'] ) && $headerBox ) ? $prop['hLine'] : 0 ); // Äe ni header boxa ne riÅ¡emo Ärte
+ $chkWidth = 3;
+
+ $startCy = $this->getY();
+ $cx = $this->getX();
+ $lineX = Array();
+ for ($i = 0; $i < $rows; $i++)
+ {
+ // nastavimo stil
+ $this->SetLineStyle((($headerBox == 1 && $i == 0)?$headerStyle:$lineStyle));
+
+ $cy = $this->getY();
+ // Äe riÅ¡emo rowHeaders cols poveÄamo za 1
+
+ for ($j = 0; $j < $cols; $j++)
+ {
+ $cellX = $cx+$j*$cellWidth+ ($j*2*$spaceWidth);
+ if ($i == 0 && $j != 0)
+ $lineX[] = $cellX-$spaceWidth;
+
+ if ( $drawRowHeader && $j == 0 )
+ { // v 0,0 ne riÅ¡emo niÄesar Äe imamo drawRowHeader
+ // v x>0,0 izpišemo text rowHeader
+ if ( $i > 0 )
+ {
+ if ( $type == 'radio' )
+ $this->Cell(0, 0, $rowHeaders[$i-1], '', 0, 'L');
+ else if ( $type == 'povezave')
+ {
+ $this->SetLineStyle($headerStyle);
+ $this->Rect($cellX, $cy, $cellWidth, $lineHeight, '', "", array(255, 255, 255));
+ }
+ }
+
+ }
+ //Äe je header riÅ¡emo header
+ else if ( $headerBox == 1 && $i == 0 )
+ $this->Rect($cellX, $cy, $cellWidth, $lineHeight, '', "", array(255, 255, 255));
+ else
+ {
+ // v odvisnosti od tipa narišemo box(tabelo), radio ali check
+ switch ( $type )
+ {
+ case 'radio':
+ $this->SetLineStyle($headerStyle);
+ $lch = $this->getLastH();
+ // narišemo krogec
+ $this->Circle($cellX+($cellWidth/2), $cy+($this->getLastH()/2), 1.5);
+ break;
+ case 'povezave':
+ $this->SetLineStyle($headerStyle);
+ $lch = $this->getLastH();
+ // Äe je potrebno nariÅ¡emo checkbox
+ if ( $j > $i )
+ {
+ $styleBox = array('L' => array('width' => 0.25, 'cap' => 'butt', 'join' => 'miter', 'dash' => '0', 'color' => array(0, 0, 0)),
+ 'T' => array('width' => 0.25, 'cap' => 'butt', 'join' => 'miter', 'dash' => '0', 'color' => array(0, 0, 0)),
+ 'R' => array('width' => 0.25, 'cap' => 'butt', 'join' => 'miter', 'dash' => '0', 'color' => array(0, 0, 0)),
+ 'B' => array('width' => 0.25, 'cap' => 'butt', 'join' => 'miter', 'dash' => '0', 'color' => array(0, 0, 0)));
+ $this->Rect($cellX+($cellWidth-$chkWidth)/2, $cy+$chkWidth/4, 3, 3, 'DF', $styleBox, array(255, 255, 255));
+ }
+
+ break;
+
+ default:
+ $this->Rect($cellX, $cy, $cellWidth, $lineHeight, '', "", array(255, 255, 255));
+ break;
+ }
+ }
+ }
+ // dodamo razmak
+ if ($i != $rows-1)
+ $this->setY($cy+$lineHeight *1.3);
+ }
+
+ $this->setY($cy+$lineHeight);
+
+ if ( $vLine )
+ foreach ( $lineX as $lx )
+ {
+ $this->Line($lx, $startCy , $lx, $this->getY() , array('width' => 0.25, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)));
+ }
+ // po svoje je hLine brezveze, ker je nepregledno
+ if ( $hLine )
+ $this->Line($cx, $startCy+$lineHeight*1.15 , $cellWidth *$cols+$spaces+$cx, $startCy+$lineHeight*1.15 , array('width' => 0.25, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)));
+
+ }
+
+ public function drawLine()
+ {
+ $this->currentStyle = array('width' => 0.1, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(128, 0, 0));
+ $cy = $this->getY();
+ $this->Line(15, $cy , 15, $cy , $this->currentStyle);
+ }
+
+ public function prepareHeatmapImage($data4Coords, $backgroundImg, $latInMm, $lngInMm, $ImgWidth, $ImgHeight, $heatmap_click_size, $heatmap_click_color, $heatmap_click_shape, $spr_id, $bgImageType, $uploadDir){
+ //global $site_path;
+ //define('UPLOAD_DIR', $site_path.'main/survey/uploads/');
+ //define('UPLOAD_DIR', $site_path.'admin/exportclases/temp/');
+ #izris tock na sliko######################################################################################
+
+ switch ($bgImageType){
+ case 'jpg':
+ $backgroundImg = imagecreatefromjpeg($backgroundImg); //nalozena slika ozadja
+ break;
+ case 'png':
+ $backgroundImg = imagecreatefrompng($backgroundImg); //nalozena slika ozadja
+ break;
+ case 'gif':
+ $backgroundImg = imagecreatefromgif($backgroundImg); //nalozena slika ozadja
+ break;
+ }
+
+ $orig_width = imagesx($backgroundImg);
+ $orig_height = imagesy($backgroundImg);
+
+ $backgroundImgResized = imagecreatetruecolor($ImgWidth, $ImgHeight); //ustvari sliko ustrezne velikosti
+ //imagecopyresized($backgroundImgResized, $backgroundImg, 0, 0, 0, 0, $ImgWidth, $ImgHeight, $orig_width, $orig_height); //kopiraj original (vecjo) sliko v sliko ustrezne velikosti, ki jo je izbral uporabnik
+ imagecopyresampled($backgroundImgResized, $backgroundImg, 0, 0, 0, 0, $ImgWidth, $ImgHeight, $orig_width, $orig_height); //kopiraj original (vecjo) sliko v sliko ustrezne velikosti, ki jo je izbral uporabnik
+
+ // barva oblike klika - pride v taki obliki #f26970
+ $barva = substr($heatmap_click_color, 1); //f26970
+ $rHex = '0x'.str_replace(substr($barva, 2),"",$barva); //f2
+ //error_log("rHex: $rHex");
+ $barvatmp = substr($barva, 2); //6970
+ $barvatmpG = str_replace(substr($barvatmp, 2),"",$barvatmp); //69
+ $gHex = '0x'.$barvatmpG;
+ //error_log("gHex: $gHex");
+ $barvatmpB = substr($barvatmp, 2); //70
+ $bHex = '0x'.$barvatmpB;
+ //error_log("bHex: $bHex");
+ $barvaOblike = imagecolorallocate($backgroundImgResized, $rHex, $gHex, $bHex);
+ // barva oblike klika - konec
+
+ // narisi obliko klika
+ foreach($data4Coords as $row){ //za vsako klikano tocko
+ if($heatmap_click_shape == 1){ //krog
+ imagefilledarc($backgroundImgResized, $row['lat'], $row['lng'], $heatmap_click_size*2, $heatmap_click_size*2, 0, 360, $barvaOblike, IMG_ARC_PIE);
+ }elseif($heatmap_click_shape == 2){ //kvadrat
+ $x1 = $row['lat'] - $heatmap_click_size/2;
+ $y1 = $row['lng'] - $heatmap_click_size/2;
+ $x2 = $row['lat'] + $heatmap_click_size/2;
+ $y2 = $row['lng'] + $heatmap_click_size/2;
+ imagefilledrectangle($backgroundImgResized, $x1, $y1, $x2, $y2, $barvaOblike);
+ }
+ }
+ // narisi obliko klika - konec
+
+ //$file = UPLOAD_DIR . $heatmapId . '.png';
+ //$file = UPLOAD_DIR . 'test_'.$spr_id.'.png';
+ $file = $uploadDir . 'results_'.$spr_id.'.png';
+ imagepng($backgroundImgResized, $file, 6, NULL);
+ imagedestroy($backgroundImgResized);
+
+ return $file;
+
+ #izris tock na sliko######################################################################################konec
+ }
+
+ }
+?>
diff --git a/admin/exportclases/class.enka.rtf.php b/admin/exportclases/class.enka.rtf.php
new file mode 100644
index 0000000..1c5169b
--- /dev/null
+++ b/admin/exportclases/class.enka.rtf.php
@@ -0,0 +1,936 @@
+<?php
+// USEFUL http://support.microsoft.com/kb/270906
+// ne tak dober: http://www.devx.com/asp/Article/17964/0/page/3
+
+/*
+ * Created on 28.2.2009
+ *
+ * ahthor: Gorazd Veselic
+ *
+ * Za potrebe razširitev rtf
+ */
+
+require_once('class.rtf.php');
+
+class enka_RTF extends RTF
+{
+
+ /** prekodiramo Å¡umnike
+ *
+ */
+ function enkaEncode($msg){
+
+ // Ce so slucajno znaki v cirilici
+ if(preg_match('/[Ð-Яа-ÑÐÑ‘]/u', $msg)){
+
+ // Pretvorimo encoding (cp1251 -> cirilica)
+ $msg = iconv ("UTF-8", "CP1251//IGNORE", $msg);
+
+ // Zamenjamo znake v cirilici
+ $newMsg = "";
+ for($i = 0; $i < strlen($msg); $i++){
+
+ $char = "";
+ switch ( ord($msg[$i]) ){
+
+ case /*Ð*/ 192: $char = "\\u1040x"; break;
+ case /*а*/ 224: $char = "\\u1072x"; break;
+ case /*Б*/ 193: $char = "\\u1041x"; break;
+ case /*б*/ 225: $char = "\\u1073x"; break;
+ case /*Ð’*/ 194: $char = "\\u1042x"; break;
+ case /*в*/ 226: $char = "\\u1074x"; break;
+ case /*Г*/ 195: $char = "\\u1043x"; break;
+ case /*г*/ 227: $char = "\\u1075x"; break;
+ case /*Д*/ 196: $char = "\\u1044x"; break;
+ case /*д*/ 228: $char = "\\u1076x"; break;
+ case /*Е*/ 197: $char = "\\u1045x"; break;
+ case /*е*/ 229: $char = "\\u1077x"; break;
+ case /*Ж*/ 198: $char = "\\u1046x"; break;
+ case /*ж*/ 230: $char = "\\u1078x"; break;
+ case /*З*/ 199: $char = "\\u1047x"; break;
+ case /*з*/ 231: $char = "\\u1079x"; break;
+ case /*И*/ 200: $char = "\\u1048x"; break;
+ case /*и*/ 232: $char = "\\u1080x"; break;
+ case /*Й*/ 201: $char = "\\u1049x"; break;
+ case /*й*/ 233: $char = "\\u1081x"; break;
+ case /*К*/ 202: $char = "\\u1050x"; break;
+ case /*к*/ 234: $char = "\\u1082x"; break;
+ case /*Л*/ 203: $char = "\\u1051x"; break;
+ case /*л*/ 235: $char = "\\u1083x"; break;
+ case /*М*/ 204: $char = "\\u1052x"; break;
+ case /*м*/ 236: $char = "\\u1084x"; break;
+ case /*Ð*/ 205: $char = "\\u1053x"; break;
+ case /*н*/ 237: $char = "\\u1085x"; break;
+ case /*О*/ 206: $char = "\\u1054x"; break;
+ case /*о*/ 238: $char = "\\u1086x"; break;
+ case /*П*/ 207: $char = "\\u1055x"; break;
+ case /*п*/ 239: $char = "\\u1087x"; break;
+ case /*Р*/ 208: $char = "\\u1056x"; break;
+ case /*Ñ€*/ 240: $char = "\\u1088x"; break;
+ case /*С*/ 209: $char = "\\u1057x"; break;
+ case /*Ñ*/ 241: $char = "\\u1089x"; break;
+ case /*Т*/ 210: $char = "\\u1058x"; break;
+ case /*Ñ‚*/ 242: $char = "\\u1090x"; break;
+ case /*У*/ 211: $char = "\\u1059x"; break;
+ case /*у*/ 243: $char = "\\u1091x"; break;
+ case /*Ф*/ 212: $char = "\\u1060x"; break;
+ case /*Ñ„*/ 244: $char = "\\u1092x"; break;
+ case /*Ð¥*/ 213: $char = "\\u1061x"; break;
+ case /*Ñ…*/ 245: $char = "\\u1093x"; break;
+ case /*Ц*/ 214: $char = "\\u1062x"; break;
+ case /*ц*/ 246: $char = "\\u1094x"; break;
+ case /*Ч*/ 215: $char = "\\u1063x"; break;
+ case /*ч*/ 247: $char = "\\u1095x"; break;
+ case /*Ш*/ 216: $char = "\\u1064x"; break;
+ case /*ш*/ 248: $char = "\\u1096x"; break;
+ case /*Щ*/ 217: $char = "\\u1065x"; break;
+ case /*щ*/ 249: $char = "\\u1097x"; break;
+ case /*Ъ*/ 218: $char = "\\u1066x"; break;
+ case /*ÑŠ*/ 250: $char = "\\u1098x"; break;
+ case /*Ы*/ 219: $char = "\\u1067x"; break;
+ case /*Ñ‹*/ 251: $char = "\\u1099x"; break;
+ case /*Ь*/ 220: $char = "\\u1068x"; break;
+ case /*ь*/ 252: $char = "\\u1100x"; break;
+ case /*Э*/ 221: $char = "\\u1069x"; break;
+ case /*Ñ*/ 253: $char = "\\u1101x"; break;
+ case /*Ю*/ 222: $char = "\\u1070x"; break;
+ case /*ÑŽ*/ 254: $char = "\\u1102x"; break;
+ case /*Я*/ 223: $char = "\\u1071x"; break;
+ case /*Ñ*/ 255: $char = "\\u1103x"; break;
+
+ default: $char = $msg[$i]; break;
+ }
+ $newMsg .= $char;
+ }
+ }
+ // Drugace popravljamo Äšž-je
+ else{
+ // Pretvorimo encoding
+ $msg = iconv ("UTF-8", "CP1250", $msg);
+
+ // Zamenjamo Äšž znake
+ $newMsg = "";
+ for($i = 0; $i < strlen($msg); $i++){
+
+ $char = "";
+ switch ( ord($msg[$i]) ){
+
+ /* TODO:
+ * Ä‘ -> 240
+ * ć -> 230
+ * Ä -> 208
+ * Ć -> 198
+ */
+
+ // Å¡ -> 154 => \\u0353s
+ case 154: $char = "\\u0353s"; break;
+ // Ä -> 232 => \\u0269c
+ case 232: $char = "\\u0269s"; break;
+ // ž -> 158 => \\u0382z
+ case 158: $char = "\\u0382z"; break;
+ // Å  -> 138 => \\u0352S
+ case 138: $char = "\\u0352S"; break;
+ // Č -> 200 => \\u0268C
+ case 200: $char = "\\u0268C"; break;
+ // Ž -> 142 => \\u0381Z
+ case 142: $char = "\\u0381Z"; break;
+ //263
+ case 230: $char = "\\u0263c"; break;
+
+ case 198: $char = "\\u0262C"; break;
+
+ default: $char = $msg[$i]; break;
+ }
+ $newMsg .= $char;
+ }
+ }
+
+ $msg = $newMsg;
+
+ $msg = str_replace ("&scaron;", "\u0353s", $msg);
+ $msg = str_replace ("&Scaron;", "\u0352S", $msg);
+ //$msg = str_replace (array("\'c4\u141\'8d", "\'c5\'be", "\'c5\'a1", "Č", "Ž", "Š"), array("\'e8", "\'9e", "\'9a", "\'c8", "\'8e", "\'8a"), $msg);
+
+ return $msg;
+ }
+
+ function add_text($msg, $align = 'left')
+ {
+
+ $this->align($align);
+ $this->MyRTF .= "{";
+
+ if (empty($this->TextDecoration))
+ {
+ $this->TextDecoration .= $this->_font($this->dfl_FontID);
+ $this->TextDecoration .= $this->_font_size($this->dfl_FontSize);
+ }
+
+ $this->MyRTF .= $this->TextDecoration;
+ $this->MyRTF .= "{";
+ $this->MyRTF .= $this->enkaEncode($msg);
+ $this->MyRTF .= "}} ";
+
+ $this->TextDecoration = '';
+
+ }
+
+ function draw_title($title, $align = 'left')
+ {
+ //global $this;
+
+ $this->set_font("Arial Black", 15);
+ $TITLE = $this->bold(1) . $this->underline(1) . $title . $this->underline(0) . $this->bold(0);
+ $this->new_line();
+ $this->add_text($TITLE, $align);
+ $this->new_line();
+ $this->new_line();
+ }
+
+ /** WriteTitle & author
+ * extending: Write the title and author for the document properties
+ *
+ */
+ function WriteTitle($title = 'http://www.1ka.si/', $author = 'http://www.1ka.si/')
+ {
+ $this->MyRTF .= "{\\info{\\title ".$this->enkaEncode($title)."}{\\author ".$this->enkaEncode($author)."}}";
+ }
+
+ /** WriteHeader
+ * extending: Write the page header
+ */
+ function WriteHeader($header = "", $align='center', $landscape=false)
+ {
+ /*$this->MyRTF .= "{\\header\\pard";
+ $this->align($align);
+ $this->MyRTF .= "{";
+ $this->WriteBorder('bottom');
+ $this->MyRTF .= "\\fs22 ".$this->enkaEncode($header)."\\par}}";*/
+
+ $extend_width = ($landscape) ? 1.5 : 1;
+
+ $this->MyRTF .= "{\\header\\fs22";
+
+ $tableHeader = '\trowd\trql\trrh400';
+ $table = '\clvertalc\clbrdrb\brdrs\brdrw10\cellx'.(5000*$extend_width);
+ $tableEnd = '\pard\intbl '.$this->enkaEncode('www.1ka.si').'\ql\cell';
+ $table .= '\clvertalc\clbrdrb\brdrs\brdrw10\cellx'.(9400*$extend_width);
+ $tableEnd .= '\pard\intbl '.$this->enkaEncode($header).'\qr\cell';
+ $tableEnd .= '\pard\intbl\row';
+ $this->MyRTF .= $this->enkaEncode($tableHeader.$table.$tableEnd);
+
+ $this->MyRTF .= "}";
+ }
+
+ /** WriteFooter
+ * extending: Write the page footer
+ */
+ function WriteFooter($footer = "", $align='right', $landscape=false)
+ {
+ $footer = str_replace("{PAGE}", "{\\field{\\*\\fldinst PAGE}{\\fldrslt 1}}", $footer);
+ $footer = str_replace("{NUMPAGES}", "{\\field{\\*\\fldinst NUMPAGES}{\\fldrslt 1}}", $footer);
+
+ $date = date("d.m.Y");
+
+
+ /*$this->MyRTF .= "{\\footer\\pard";
+ $this->align($align);
+ $this->WriteBorder('top');
+ $this->MyRTF .= "\\fs18 ". $this->enkaEncode($footer) .
+ "\\par}";*/
+
+ $extend_width = ($landscape) ? 1.5 : 1;
+
+ $this->MyRTF .= "{\\footer\\fs18";
+
+ $tableHeader = '\trowd\trql\trrh400';
+ $table = '\clvertalc\clbrdrt\brdrs\brdrw10\cellx'.(5000*$extend_width);
+ $tableEnd = '\pard\intbl '.$this->enkaEncode($date).'\ql\cell';
+ $table .= '\clvertalc\clbrdrt\brdrs\brdrw10\cellx'.(9400*$extend_width);
+ $tableEnd .= '\pard\intbl '.$this->enkaEncode($footer).'\qr\cell';
+ $tableEnd .= '\pard\intbl\row';
+ $this->MyRTF .= $this->enkaEncode($tableHeader.$table.$tableEnd);
+
+ $this->MyRTF .= "}";
+ }
+
+ /** WriteBorder
+ * extending: draw a border
+ */
+ function WriteBorder($borders)
+ {
+ if ( is_string ( $borders ) )
+ $borders = (array($borders));
+
+ if ( is_array( $borders ) )
+ foreach ( $borders as $border )
+ switch (strtolower($border))
+ {
+ case 'top': $this->MyRTF .= "\\brdrt\\brdrs\\brdrw10\\brsp100"; break;
+ case 'bottom': $this->MyRTF .= "\\brdrb\\brdrs\\brdrw10\\brsp100"; break;
+ case 'left': $this->MyRTF .= "\\brdrl\\brdrs\\brdrw10\\brsp100"; break;
+ case 'right': $this->MyRTF .= "\\brdrr\\brdrs\\brdrw10\\brsp100"; break;
+ }
+ }
+
+ function TextCell($text=null,$attribs=array() )
+ {
+// print_r($attribs);
+ $width = ( ( $attribs['width'] ) ? $attribs['width'] : 9500 );
+ $height = ( ( $attribs['height'] ) ? $attribs['height'] : 1 );
+ $align = ( ( $attribs['align'] ) ? $attribs['align'] : 'left' );
+ $valign = ( ( $attribs['valign'] ) ? $attribs['valign'] : 'center' );
+ $tableBorder = ( ( $attribs['border'] ) ? $attribs['border'] : array() );
+ $colorF = ( ( $attribs['colorF'] ) ? $attribs['colorF'] : "0" );
+ $colorB = ( ( $attribs['colorB'] ) ? $attribs['colorB'] : "0" );
+
+
+ // narišemo tabelo z eno celico in okvirjem
+ $this->MyRTF .= "\\par\\trowd\\trgaph12\\trleft0\\trrh".( $height*250 )."\\trleft0".$this->vAlignString($valign)
+ .$this->TableBorder($tableBorder)."\\cellx".$width."\\pard\\intbl".(($colorB)?" \\cb".$colorB:"").(($colorF)?" \\cf".$colorF:"").$this->alignString($align)." ".( ($text) ? "{".$this->enkaEncode($text)."}" : '{}').(($colorB)?" \\cb0":"").(($colorF)?" \\cf1":"")."\\cell\\pard\\intbl\\row\\pard";
+
+ }
+
+ function TextCells($text1=null,$text2=null )
+ {
+// print_r($attribs);
+ $width = ( ( $attribs['width'] ) ? $attribs['width'] : 4300 );
+ $height = ( ( $attribs['height'] ) ? $attribs['height'] : 1 );
+ $align = ( ( $attribs['align'] ) ? $attribs['align'] : 'left' );
+ $valign = ( ( $attribs['valign'] ) ? $attribs['valign'] : 'center' );
+ $tableBorder = ( ( $attribs['border'] ) ? $attribs['border'] : array() );
+ $colorF = ( ( $attribs['colorF'] ) ? $attribs['colorF'] : "0" );
+ $colorB = ( ( $attribs['colorB'] ) ? $attribs['colorB'] : "0" );
+ $width2 = 7000;
+
+ // narišemo tabelo z dvema celicama in okvirjem
+/* $this->MyRTF .= "\\par\\trowd\\trgaph12\\trleft0\\trrh".( $height*250 )."\\trleft0".$this->vAlignString($valign)
+ .$this->TableBorder($tableBorder)."\\cellx".$width."\\pard\\intbl".(($colorB)?" \\cb".$colorB:"").(($colorF)?" \\cf".$colorF:"").$this->alignString($align)." ".( ($text) ? "{".$this->enkaEncode($text)."}" : '{}').(($colorB)?" \\cb0":"").(($colorF)?" \\cf1":"")."\\cell\\pard\\intbl\\row\\pard"; */
+
+ $this->MyRTF .= "\\par\\trowd\\trgaph12\\trleft0\\trrh".( $height*250 )."\\trleft0".$this->vAlignString($valign)
+ .$this->TableBorder($tableBorder)."\\cellx".$width."\\cellx".$width2."\\pard\\intbl".(($colorB)?" \\cb".$colorB:"").(($colorF)?" \\cf".$colorF:"").$this->alignString($align)." ".( ($text1) ? "{".$this->enkaEncode($text1).": }" : '{}').(($colorB)?" \\cb0":"").(($colorF)?" \\cf1":"")."\\cell \\pard\\intbl ".$this->enkaEncode($text2).": \\cell \\row \\pard";
+
+ //$this->MyRTF .= "\\par\\trowd \\trgaph12 \\cellx4200\\cellx7000 \\pard\\intbl ".$this->enkaEncode($text1)."\\cell \\pard\\intbl ".$this->enkaEncode($text2)."\\cell \\row";
+
+ }
+
+ /**
+ * Vrne text za okvirje celice v tabeli
+ */
+ function TableBorder($borders)
+ {
+ $result = "";
+ if ( is_string ( $borders ) )
+ $borders = (array($borders));
+
+ if ( is_array( $borders ) )
+ foreach ( $borders as $border )
+ {
+ switch (strtolower($border))
+ {
+ case 'top': $result .= "\\clbrdrt\\brdrth"; break;
+ case 'bottom': $result .= "\\clbrdrb\\brdrth"; break;
+ case 'left': $result .= "\\clbrdrl\\brdrth"; break;
+ case 'right': $result .= "\\clbrdrr\\brdrth"; break;
+ }
+ }
+ return $result;
+ }
+
+ /**
+ * Align text and images
+ * (This is not intended to be used directly)
+ *
+ * @arg1 keyword (left|center|right|justify)
+ * @return: string
+ */
+ function alignString($where = 'left')
+ {
+ switch ( strtolower ($where) )
+ {
+ case 'left': return "\\ql "; break;
+ case 'center': return "\\qc "; break;
+ case 'right': return "\\qr "; break;
+ case 'justify': return "\\qj "; break;
+ default: $this->alignString('left'); break;
+ }
+ }
+
+// \vertalt Text is top-aligned (the default).
+// \vertalb Text is bottom-aligned.
+// \vertalc Text is centered vertically.
+// \vertalj Text is justified vertically.
+ /**
+ * Align text and images
+ * (This is not intended to be used directly)
+ *
+ * @arg1 keyword (left|center|right|justify)
+ * @return: string
+ */
+ function vAlignString( $where )
+ {
+ switch ( strtolower ($where) )
+ {
+ case 'top': return " \\clvertalt "; break;
+ case 'middle': return " \\clvertalc "; break;
+ case 'bottom': return " \\clvertalb "; break;
+ default: $this->vAlignString('middle'); break;
+ }
+ }
+ public function TableFromArray($cellWidths, $content, $prop = array())
+ {
+ $border = ( ( $prop['border'] && is_array( $prop['border'] ) )? $prop['border'] : null);
+ $headerBox = ( ( isset ( $prop['headerBox'] ) ) ? $prop['headerBox'] : 0 );
+ $headerBorder = ( ( isset ( $prop['headerBorder'] ) ) ? $prop['headerBorder'] : array('top','bottom', 'left','right') );
+ $spacer = ( ( isset ( $prop['spacer'] ) ) ? $prop['spacer'] : 1 );
+ $spacerWidth = ( ( isset ( $prop['spacerWidth'] ) ) ? $prop['spacerWidth'] : 300 );
+
+ $curWidth = 0;
+
+ $resultString = "{\\par\\fs22"
+ ."\\trowd\\trhdr\\trgaph20\\trleft0\\trrh162";
+
+ foreach ( $content as $contentKey => $contentValue )
+ {
+ $tableHeader_base = "\\trowd\\trgaph12\\trleft0\\trrh262";
+ $tableHeader_width = "";
+ $tableHeader_title = "";
+
+ $tableHeader_finish = "\\pard\\intbl\\row";
+ // $curWidth = 0
+ $curWidth = 0;
+
+ foreach ( $contentValue as $key => $value )
+ {
+ $curentBorder = "";
+ if ($contentKey == 0 && $headerBox)
+ $curentBorder = $headerBorder;
+ else
+ $curentBorder = $border[$key];
+ $curWidth += ( ( $cellWidths[$key] ) ? $cellWidths[$key] : "1000");
+
+ $tableHeader_width .= $this->TableBorder($curentBorder)."\\cellx". ( $curWidth );
+ $tableHeader_title .= "\\pard\\intbl\\ql{".$value."}\\cell";
+
+ // dodamo spacer (razen za zadnjo celico)
+ if ( $spacer && $key < sizeOf($contentValue)-1)
+ {
+ $curWidth += $spacerWidth;
+ $tableHeader_width .= "\\cellx". ( $curWidth );
+ $tableHeader_title .= "\\pard\\intbl\\ql{}\\cell";
+
+ }
+
+ }
+ $resultString .= $tableHeader_base.$tableHeader_width.$tableHeader_title.$tableHeader_finish;
+ }
+
+ $resultString .= "}";
+ $this->MyRTF .= $this->enkaEncode($resultString);
+ }
+
+ public function TableFromArraySelect($cellWidths, $content, $SeznamBorders = array(), $numOfRows, $prop = array())
+ {
+ $border = ( ( $prop['border'] && is_array( $prop['border'] ) )? $prop['border'] : null);
+ $headerBox = ( ( isset ( $prop['headerBox'] ) ) ? $prop['headerBox'] : 0 );
+ $headerBorder = ( ( isset ( $prop['headerBorder'] ) ) ? $prop['headerBorder'] : array('top','bottom', 'left','right') );
+ $spacer = ( ( isset ( $prop['spacer'] ) ) ? $prop['spacer'] : 1 );
+ $spacerWidth = ( ( isset ( $prop['spacerWidth'] ) ) ? $prop['spacerWidth'] : 300 );
+
+ $curWidth = 0;
+
+ $keyBorder = 0;
+ $resultString = "{\\par\\fs22"
+ ."\\trowd\\trhdr\\trgaph20\\trleft0\\trrh162";
+
+ foreach ( $content as $contentKey => $contentValue )
+ {
+ $tableHeader_base = "\\trowd\\trgaph12\\trleft0\\trrh262";
+ $tableHeader_width = "";
+ $tableHeader_title = "";
+
+ $tableHeader_finish = "\\pard\\intbl\\row";
+ // $curWidth = 0
+ $curWidth = 0;
+
+ foreach ( $contentValue as $key => $value )
+ {
+ $curentBorder = "";
+ if ($contentKey == 0 && $headerBox)
+ $curentBorder = $headerBorder;
+ else
+ $curentBorder = $SeznamBorders[$keyBorder];
+ $curWidth += ( ( $cellWidths[$key] ) ? $cellWidths[$key] : "1000");
+
+ //$tableHeader_width .= $this->TableBorder($curentBorder)."\\cellx". ( $curWidth );
+ //$tableHeader_title .= "\\pard\\intbl\\ql{".$value."}\\cell";
+
+ $tableHeader_width .= $this->TableBorder($curentBorder)."\\cellx". ( $curWidth )."\\cellx".( $curWidth + 300);
+ if($keyBorder == 0){ //ce je prva vrstica v tabeli
+ $tableHeader_title .= "\\pard\\intbl{".$value."}\\cell \\pard\\intbl{".$this->ImageToString("arrowUpSelect.png", "15")."}\\cell";
+ }elseif($keyBorder == ($numOfRows-1)){ //ce je zadnja vrstica v tabeli
+ $tableHeader_title .= "\\pard\\intbl{".$value."}\\cell \\pard\\intbl{".$this->ImageToString("arrowDownSelect.png", "15")."}\\cell";
+ }else{ //ce je vrstica, ki ni ne zadnja vrstica in ne prva v tabeli
+ $tableHeader_title .= "\\pard\\intbl{".$value."}\\cell \\pard\\intbl\\cell";
+ }
+
+
+ // dodamo spacer (razen za zadnjo celico)
+ if ( $spacer && $key < sizeOf($contentValue)-1)
+ {
+ $curWidth += $spacerWidth;
+ $tableHeader_width .= "\\cellx". ( $curWidth );
+ $tableHeader_title .= "\\pard\\intbl\\ql{}\\cell";
+
+ }
+ $keyBorder++;
+
+ }
+ $resultString .= $tableHeader_base.$tableHeader_width.$tableHeader_title.$tableHeader_finish;
+ }
+
+ $resultString .= "}";
+ $this->MyRTF .= $this->enkaEncode($resultString);
+ }
+
+ public function TableFromArrayDragDrop($cellWidths, $content, $SeznamBorders = array(), $numOfRows, $prop = array())
+ {
+ $border = ( ( $prop['border'] && is_array( $prop['border'] ) )? $prop['border'] : null);
+ $headerBox = ( ( isset ( $prop['headerBox'] ) ) ? $prop['headerBox'] : 0 );
+ $headerBorder = ( ( isset ( $prop['headerBorder'] ) ) ? $prop['headerBorder'] : array('top','bottom', 'left','right') );
+ $spacer = ( ( isset ( $prop['spacer'] ) ) ? $prop['spacer'] : 1 );
+ $spacerWidth = ( ( isset ( $prop['spacerWidth'] ) ) ? $prop['spacerWidth'] : 300 );
+
+ $curWidth = 0;
+
+
+ $width1 = 500;
+
+ $PredefinedSeznamBorders[0] = array('top', 'left', 'right');
+ $PredefinedSeznamBorders[1] = array('left', 'right');
+ $PredefinedSeznamBorders[2] = array('right', 'left', 'bottom');
+ $PredefinedSeznamBorders[3] = array('top', 'left', 'right', 'bottom');
+
+ $keyBorder = 0;
+ $resultString = "{\\par\\fs22"
+ ."\\trowd\\trhdr\\trgaph20\\trleft0\\trrh162";
+
+ foreach ( $content as $contentKey => $contentValue )
+ {
+ $tableHeader_base = "\\trowd\\trgaph12\\trleft0\\trrh262";
+ $tableHeader_width = "";
+ $tableHeader_title = "";
+ $tableHeader_finish = "\\pard\\intbl\\row";
+ // $curWidth = 0
+ $curWidth = 0;
+
+ //$tableBlankCells = "\\pard\\intbl\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell";
+ $numOfCells = 6;
+ $tableBlankCells = "";
+ $tableBlankCellsArrow = "";
+ for($i = 0; $i<$numOfCells; $i++){
+ $tableBlankCells .= "\\pard\\intbl\\cell ";
+/* if($i == 3){
+ $tableBlankCellsArrow .="\\pard\\intbl{".$this->ImageToString("arrow.png", "100")."}\\cell ";
+ }else{
+ $tableBlankCellsArrow .="\\pard\\intbl\\cell ";
+ } */
+ }
+ //$tableBlankCellsArrow = "\\pard\\intbl\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell \\pard\\intbl{".$this->ImageToString("arrow.png", "100")."}\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell ";
+
+ $tableBlank_width = "";
+
+ foreach ( $contentValue as $key => $value )
+ {
+ $curentBorder = "";
+ if ($contentKey == 0 && $headerBox)
+ $curentBorder = $headerBorder;
+ else
+ $curentBorder = $SeznamBorders[$keyBorder];
+
+ $curWidth += ( ( $cellWidths[$key] ) ? $cellWidths[$key] : "1000");
+
+
+ $tableBlank_width = "\\cellx".($width1)."\\cellx". ( $width1 + $curWidth )."\\cellx".( $width1 + $curWidth + 150)."\\cellx".( $width1 + $curWidth + 150 + 750)."\\cellx".( $width1 + $curWidth + 150 + 750 + 150).$this->TableBorder($PredefinedSeznamBorders[1])."\\cellx".( $width1 + $curWidth + 150 + 750 + 150 + $curWidth);
+
+ if($keyBorder == 0){ //ce je prva vrstica v tabeli
+ $tableHeader_width .= "\\cellx".($width1)." ".$this->TableBorder($PredefinedSeznamBorders[3])."\\cellx". ( $width1 + $curWidth )."\\cellx".( $width1 + $curWidth + 150)."\\cellx".( $width1 + $curWidth + 150 + 750)."\\cellx".( $width1 + $curWidth + 150 + 750 + 150).$this->TableBorder($PredefinedSeznamBorders[0])."\\cellx".( $width1 + $curWidth + 150 + 750 + 150 + $curWidth);
+ $tableHeader_title .= "\\pard\\intbl\\cell \\pard\\intbl{".$value."}\\cell \\pard\\intbl\\cell \\pard\\intbl{".$this->ImageToString("arrow.png", "100")."}\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell";
+ //$tableHeader_title .= "\\pard\\intbl\\cell \\pard\\intbl{".$value."}\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell";
+ }elseif($keyBorder == ($numOfRows-1)){ //ce je zadnja vrstica v tabeli
+ //$tableHeader_width .= "\\cellx".($width1)." ".$this->TableBorder($PredefinedSeznamBorders[3])."\\cellx". ( $width1 + $curWidth )."\\cellx".( $width1 + $curWidth + 300).$this->TableBorder($PredefinedSeznamBorders[2])."\\cellx".( $width1 + $curWidth + 300 + $curWidth);
+ $tableHeader_width .= "\\cellx".($width1)." ".$this->TableBorder($PredefinedSeznamBorders[3])."\\cellx". ( $width1 + $curWidth )."\\cellx".( $width1 + $curWidth + 150)."\\cellx".( $width1 + $curWidth + 150 + 750)."\\cellx".( $width1 + $curWidth + 150 + 750 + 150).$this->TableBorder($PredefinedSeznamBorders[2])."\\cellx".( $width1 + $curWidth + 150 + 750 + 150 + $curWidth);
+ $tableHeader_title .= "\\pard\\intbl\\cell \\pard\\intbl{".$value."}\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell";
+ }else{ //ce je vrstica, ki ni ne zadnja vrstica in ne prva v tabeli
+ //$tableHeader_width .= "\\cellx".($width1)." ".$this->TableBorder($PredefinedSeznamBorders[3])."\\cellx". ( $width1 + $curWidth )."\\cellx".( $width1 + $curWidth + 300).$this->TableBorder($PredefinedSeznamBorders[1])."\\cellx".( $width1 + $curWidth + 300 + $curWidth);
+ $tableHeader_width .= "\\cellx".($width1)." ".$this->TableBorder($PredefinedSeznamBorders[3])."\\cellx". ( $width1 + $curWidth )."\\cellx".( $width1 + $curWidth + 150)."\\cellx".( $width1 + $curWidth + 150 + 750)."\\cellx".( $width1 + $curWidth + 150 + 750 + 150).$this->TableBorder($PredefinedSeznamBorders[1])."\\cellx".( $width1 + $curWidth + 150 + 750 + 150 + $curWidth);
+ //$tableHeader_title .= "\\pard\\intbl\\cell \\pard\\intbl{".$value."}\\cell \\pard\\intbl\\cell \\pard\\intbl{".$value."}\\cell";
+ $tableHeader_title .= "\\pard\\intbl\\cell \\pard\\intbl{".$value."}\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell";
+ }
+
+
+ // dodamo spacer (razen za zadnjo celico)
+ if ( $spacer && $key < sizeOf($contentValue)-1)
+ {
+ $curWidth += $spacerWidth;
+ $tableHeader_width .= "\\cellx". ( $curWidth );
+ $tableHeader_title .= "\\pard\\intbl\\ql{}\\cell";
+
+ }
+
+ if($keyBorder != ($numOfRows-1)){ //ce ni zadnja vrstica v tabeli
+ $tableHeader_title .= $tableHeader_finish.$tableHeader_base.$tableBlank_width.$tableBlankCells;
+ }
+
+/* if($keyBorder != ($numOfRows-1) && $keyBorder != 1){ //ce ni zadnja vrstica v tabeli
+ $tableHeader_title .= $tableHeader_finish.$tableHeader_base.$tableBlank_width.$tableBlankCells;
+ }elseif($keyBorder == 1){
+ $tableHeader_title .= $tableHeader_finish.$tableHeader_base.$tableBlank_width.$tableBlankCellsArrow;
+ } */
+
+ $keyBorder++;
+
+ }
+ $resultString .= $tableHeader_base.$tableHeader_width.$tableHeader_title.$tableHeader_finish;
+ }
+
+ $resultString .= "}";
+ $this->MyRTF .= $this->enkaEncode($resultString);
+ }
+
+ //public function TableFromArrayDragDropGrid($cellWidths, $content, $SeznamBorders = array(), $numOfRows, $prop = array())
+ public function TableFromArrayDragDropGrid($cellWidths, $content, $numOfRows, $prop = array())
+ {
+ $border = ( ( $prop['border'] && is_array( $prop['border'] ) )? $prop['border'] : null);
+ $headerBox = ( ( isset ( $prop['headerBox'] ) ) ? $prop['headerBox'] : 0 );
+ $headerBorder = ( ( isset ( $prop['headerBorder'] ) ) ? $prop['headerBorder'] : array('top','bottom', 'left','right') );
+ $spacer = ( ( isset ( $prop['spacer'] ) ) ? $prop['spacer'] : 1 );
+ $spacerWidth = ( ( isset ( $prop['spacerWidth'] ) ) ? $prop['spacerWidth'] : 300 );
+
+ $curWidth = 0;
+
+
+ $width1 = 500;
+
+ $PredefinedSeznamBorders[0] = array('top', 'left', 'right');
+ $PredefinedSeznamBorders[1] = array('left', 'right');
+ $PredefinedSeznamBorders[2] = array('right', 'left', 'bottom');
+ $PredefinedSeznamBorders[3] = array('top', 'left', 'right', 'bottom');
+
+ $keyBorder = 0;
+ $resultString = "{\\par\\fs22"
+ ."\\trowd\\trhdr\\trgaph20\\trleft0\\trrh162";
+
+ foreach ( $content as $contentKey => $contentValue )
+ {
+ $tableHeader_base = "\\trowd\\trgaph12\\trleft0\\trrh262";
+ $tableHeader_width = "";
+ $tableHeader_title = "";
+ $tableHeader_finish = "\\pard\\intbl\\row";
+ // $curWidth = 0
+ $curWidth = 0;
+
+ //$tableBlankCells = "\\pard\\intbl\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell";
+ $numOfCells = 6;
+ $tableBlankCells = "";
+ $tableBlankCellsArrow = "";
+ for($i = 0; $i<$numOfCells; $i++){
+ $tableBlankCells .= "\\pard\\intbl\\cell ";
+/* if($i == 3){
+ $tableBlankCellsArrow .="\\pard\\intbl{".$this->ImageToString("arrow.png", "100")."}\\cell ";
+ }else{
+ $tableBlankCellsArrow .="\\pard\\intbl\\cell ";
+ } */
+ }
+ //$tableBlankCellsArrow = "\\pard\\intbl\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell \\pard\\intbl{".$this->ImageToString("arrow.png", "100")."}\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell ";
+
+ $tableBlank_width = "";
+
+ //foreach ( $contentValue as $key => $value )
+ for($z = 0; $z < $numOfRows; $z++)
+ {
+ $curentBorder = "";
+ if ($contentKey == 0 && $headerBox)
+ $curentBorder = $headerBorder;
+ else
+ $curentBorder = $SeznamBorders[$keyBorder];
+
+ $curWidth += ( ( $cellWidths[$z] ) ? $cellWidths[$z] : "1000");
+
+
+ $tableBlank_width = "\\cellx".($width1)."\\cellx". ( $width1 + $curWidth )."\\cellx".( $width1 + $curWidth + 150)."\\cellx".( $width1 + $curWidth + 150 + 750)."\\cellx".( $width1 + $curWidth + 150 + 750 + 150).$this->TableBorder($PredefinedSeznamBorders[1])."\\cellx".( $width1 + $curWidth + 150 + 750 + 150 + $curWidth);
+
+ if($keyBorder == 0){ //ce je prva vrstica v tabeli
+ $tableHeader_width .= "\\cellx".($width1)." ".$this->TableBorder($PredefinedSeznamBorders[3])."\\cellx". ( $width1 + $curWidth )."\\cellx".( $width1 + $curWidth + 150)."\\cellx".( $width1 + $curWidth + 150 + 750)."\\cellx".( $width1 + $curWidth + 150 + 750 + 150).$this->TableBorder($PredefinedSeznamBorders[0])."\\cellx".( $width1 + $curWidth + 150 + 750 + 150 + $curWidth);
+ $tableHeader_title .= "\\pard\\intbl\\cell \\pard\\intbl{".$content[$z]."}\\cell \\pard\\intbl\\cell \\pard\\intbl{".$this->ImageToString("arrow.png", "100")."}\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell";
+ //$tableHeader_title .= "\\pard\\intbl\\cell \\pard\\intbl{".$value."}\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell";
+ }elseif($keyBorder == ($numOfRows-1)){ //ce je zadnja vrstica v tabeli
+ //$tableHeader_width .= "\\cellx".($width1)." ".$this->TableBorder($PredefinedSeznamBorders[3])."\\cellx". ( $width1 + $curWidth )."\\cellx".( $width1 + $curWidth + 300).$this->TableBorder($PredefinedSeznamBorders[2])."\\cellx".( $width1 + $curWidth + 300 + $curWidth);
+ $tableHeader_width .= "\\cellx".($width1)." ".$this->TableBorder($PredefinedSeznamBorders[3])."\\cellx". ( $width1 + $curWidth )."\\cellx".( $width1 + $curWidth + 150)."\\cellx".( $width1 + $curWidth + 150 + 750)."\\cellx".( $width1 + $curWidth + 150 + 750 + 150).$this->TableBorder($PredefinedSeznamBorders[2])."\\cellx".( $width1 + $curWidth + 150 + 750 + 150 + $curWidth);
+ $tableHeader_title .= "\\pard\\intbl\\cell \\pard\\intbl{".$content[$z]."}\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell";
+ }else{ //ce je vrstica, ki ni ne zadnja vrstica in ne prva v tabeli
+ //$tableHeader_width .= "\\cellx".($width1)." ".$this->TableBorder($PredefinedSeznamBorders[3])."\\cellx". ( $width1 + $curWidth )."\\cellx".( $width1 + $curWidth + 300).$this->TableBorder($PredefinedSeznamBorders[1])."\\cellx".( $width1 + $curWidth + 300 + $curWidth);
+ $tableHeader_width .= "\\cellx".($width1)." ".$this->TableBorder($PredefinedSeznamBorders[3])."\\cellx". ( $width1 + $curWidth )."\\cellx".( $width1 + $curWidth + 150)."\\cellx".( $width1 + $curWidth + 150 + 750)."\\cellx".( $width1 + $curWidth + 150 + 750 + 150).$this->TableBorder($PredefinedSeznamBorders[1])."\\cellx".( $width1 + $curWidth + 150 + 750 + 150 + $curWidth);
+ //$tableHeader_title .= "\\pard\\intbl\\cell \\pard\\intbl{".$value."}\\cell \\pard\\intbl\\cell \\pard\\intbl{".$value."}\\cell";
+ $tableHeader_title .= "\\pard\\intbl\\cell \\pard\\intbl{".$content[$z]."}\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell \\pard\\intbl\\cell";
+ }
+
+
+ // dodamo spacer (razen za zadnjo celico)
+ if ( $spacer && $z < sizeOf($content)-1)
+ {
+ $curWidth += $spacerWidth;
+ $tableHeader_width .= "\\cellx". ( $curWidth );
+ $tableHeader_title .= "\\pard\\intbl\\ql{}\\cell";
+
+ }
+
+ if($keyBorder != ($numOfRows-1)){ //ce ni zadnja vrstica v tabeli
+ $tableHeader_title .= $tableHeader_finish.$tableHeader_base.$tableBlank_width.$tableBlankCells;
+ }
+
+/* if($keyBorder != ($numOfRows-1) && $keyBorder != 1){ //ce ni zadnja vrstica v tabeli
+ $tableHeader_title .= $tableHeader_finish.$tableHeader_base.$tableBlank_width.$tableBlankCells;
+ }elseif($keyBorder == 1){
+ $tableHeader_title .= $tableHeader_finish.$tableHeader_base.$tableBlank_width.$tableBlankCellsArrow;
+ } */
+
+ $keyBorder++;
+
+ }
+ $resultString .= $tableHeader_base.$tableHeader_width.$tableHeader_title.$tableHeader_finish;
+ }
+
+ $resultString .= "}";
+ $this->MyRTF .= $this->enkaEncode($resultString);
+ }
+
+ public function TableSNPodvprasanje($colHeaders, $rowHeaders, $prop = array())
+ {
+ $cols = sizeOf($colHeaders);
+ $rows = sizeOf($rowHeaders)+1;
+ $type = ( ( isset ( $prop['type'] ) ) ? $prop['type'] : 'box' ); //radio, povezave, def=box
+
+ // kalkulacije Å¡irin
+ $fullWidth = 9500;
+ $spaceWidth = 300;
+ $spacesWidth = round($spaceWidth * ($cols-1));
+ $cellWidth = round(($fullWidth - $spacesWidth) / $cols);
+
+ $resultString = "{\\par\\fs22"
+ ."\\trowd\\trhdr\\trgaph20\\trleft0\\trrh162";
+ for ($i = 0; $i < $rows; $i++)
+ {
+ $tableHeader_base = "\\trowd\\trgaph12\\trleft0\\trrh262";
+ $tableHeader_width = "";
+ $tableHeader_title = "";
+
+ $tableHeader_finish = "\\pard\\intbl\\row";
+
+ $curWidth = 0;
+ $index=0;
+ for ($j = 0; $j < $cols; $j++)
+ {
+ $border = "";
+ $value = "";
+ $align = "\\ql"; // left
+ if ($i == 0)
+ {
+ $value = $colHeaders[$j];
+ if ( $j != 0 )
+ $border = "bottom";
+ $align = "\\qc";
+ }
+ else if ( $j == 0)
+ {
+ $value = $rowHeaders[$i-1];
+ if ( $type == 'povezave')
+ $border = "bottom";
+ }
+ else
+ {
+ // v odvisnosti od tipa prikažemo
+ switch ( $type )
+ {
+ case 'radio': // radio button
+ $value = $this->ImageToString( "radio.png", "15");
+ break;
+ case 'povezave': // radio button
+ if ( $j > $i )
+ $value =$this->ImageToString( "checkbox.png", "15");
+// else $value = "";
+ break;
+
+ default: // box
+ $value =$this->ImageToString( "checkbox.png", "15");
+ break;
+}
+// $value = "v";
+ $align="\\qc";
+ }
+
+
+ $curWidth += $cellWidth;
+ $tableHeader_width .= $this->TableBorder($border)."\\cellx". ( $curWidth );
+ $tableHeader_title .= "\\pard\\intbl".$align."{".$value."}\\cell";
+
+ // dodamo spacer
+ if ($j < $cols-1)
+ {
+ $curWidth += $spaceWidth;
+ $tableHeader_width .= "\\cellx". ( $curWidth ); // space
+ $tableHeader_title .= "\\pard\\intbl\\ql{ }\\cell";
+ }
+
+ $index++;
+ }
+ $resultString .= $tableHeader_base.$tableHeader_width.$tableHeader_title.$tableHeader_finish;
+ }
+
+ $resultString .= "}";
+// print_r($resultString);
+ $this->MyRTF .= $this->enkaEncode($resultString);
+
+ }
+
+ /**
+ * Insert radio/checkbox image (it took it from folder: $site_path.'admin/survey/img_0/')
+ *
+ * @arg1 string (image filename)
+ * @arg2 int (int 1-100)
+ * @arg3 keyword (left|center|right|justify)
+ * @return void
+ */
+ function ImageToString($image, $ratio, $align = 'left')
+ {
+ global $site_path;
+
+ $file = @file_get_contents($site_path.'admin/survey/img_0/'.$image);
+
+ if (empty($file)) {
+ print_r("Error geting file:".$site_path.'admin/survey/img_0/'.$image);
+ return NULL;
+ }
+ $result = $this->alignString;
+ $result .= "{";
+ $result .= "\\pict\\jpegblip\\picscalex". $ratio ."\\picscaley". $ratio ."\\bliptag132000428 ";
+ $result .= trim(bin2hex($file));
+ $result .= "\n}\n";
+ return $result;
+ }
+
+
+ // Pretvori html v rtf string
+ function HTMLtoRTF($string) {
+
+ /*if(preg_match("/<UL>(.*?)<\/UL>/mi", $string) || preg_match("/<ul>(.*?)<\/ul>/mi", $string)
+ || preg_match("/<OL>(.*?)<\/OL>/mi", $string) || preg_match("/<ol>(.*?)<\/ol>/mi", $string)) {*/
+ $string = str_replace("<UL>", "", $string);
+ $string = str_replace("<ul>", "", $string);
+ $string = str_replace("</UL>", "", $string);
+ $string = str_replace("</ul>", "", $string);
+ $string = str_replace("<OL>", "", $string);
+ $string = str_replace("<ol>", "", $string);
+ $string = str_replace("</OL>", "", $string);
+ $string = str_replace("</ol>", "", $string);
+ $string = preg_replace("/<LI>(.*?)<\/LI>/mi", "\\f3\\'B7\\tab\\f{$this->dfl_FontID} \\1\\par", $string);
+ /*}*/
+
+ $string = preg_replace("/<P>(.*?)<\/P>/mi", "\\1\\par ", $string);
+ $string = preg_replace("/<STRONG>(.*?)<\/STRONG>/mi", "\\b \\1\\b0 ", $string);
+ $string = preg_replace("/<B>(.*?)<\/B>/mi", "\\b \\1\\b0 ", $string);
+ $string = preg_replace("/<EM>(.*?)<\/EM>/mi", "\\i \\1\\i0 ", $string);
+ $string = preg_replace("/<U>(.*?)<\/U>/mi", "\\ul \\1\\ul0 ", $string);
+ $string = preg_replace("/<STRIKE>(.*?)<\/STRIKE>/mi", "\\strike \\1\\strike0 ", $string);
+ $string = preg_replace("/<SUB>(.*?)<\/SUB>/mi", "{\\sub \\1}", $string);
+ $string = preg_replace("/<SUP>(.*?)<\/SUP>/mi", "{\\super \\1}", $string);
+
+ $string = preg_replace("/<H1>(.*?)<\/H1>/mi", "\\fs48\\b \\1\\b0\\fs{$this->_font_size($this->dfl_FontSize)}\\par ", $string);
+ $string = preg_replace("/<H2>(.*?)<\/H2>/mi", "\\fs36\\b \\1\\b0\\fs{$this->_font_size($this->dfl_FontSize)}\\par ", $string);
+ $string = preg_replace("/<H3>(.*?)<\/H3>/mi", "\\fs27\\b \\1\\b0\\fs{$this->_font_size($this->dfl_FontSize)}\\par ", $string);
+
+ $string = preg_replace("/<HR(.*?)>/i", "\\brdrb\\brdrs\\brdrw30\\brsp20 \\pard\\par ", $string);
+ $string = str_replace("<BR>", "\\par ", $string);
+ $string = str_replace("<TAB>", "\\tab ", $string);
+
+ //$string = $this->nl2par($string);
+
+ // Porezemo zadnji line break zaradi
+ $string = substr($string, 0, -2);
+
+ return $string;
+ }
+
+ // Convert newlines into \par
+ function nl2par($text) {
+ $text = str_replace("\n", "\\par ", $text);
+
+ return $text;
+ }
+
+ public function prepareHeatmapImage($data4Coords, $backgroundImg, $latInMm, $lngInMm, $ImgWidth, $ImgHeight, $heatmap_click_size, $heatmap_click_color, $heatmap_click_shape, $spr_id, $bgImageType, $uploadDir){
+ //global $site_path;
+ //define('UPLOAD_DIR', $site_path.'main/survey/uploads/');
+ #izris tock na sliko######################################################################################
+
+ switch ($bgImageType){
+ case 'jpg':
+ $backgroundImg = imagecreatefromjpeg($backgroundImg); //nalozena slika ozadja
+ break;
+ case 'png':
+ $backgroundImg = imagecreatefrompng($backgroundImg); //nalozena slika ozadja
+ break;
+ case 'gif':
+ $backgroundImg = imagecreatefromgif($backgroundImg); //nalozena slika ozadja
+ break;
+ }
+
+ $orig_width = imagesx($backgroundImg);
+ $orig_height = imagesy($backgroundImg);
+
+ $backgroundImgResized = imagecreatetruecolor($ImgWidth, $ImgHeight); //ustvari sliko ustrezne velikosti
+ //imagecopyresized($backgroundImgResized, $backgroundImg, 0, 0, 0, 0, $ImgWidth, $ImgHeight, $orig_width, $orig_height); //kopiraj original (vecjo) sliko v sliko ustrezne velikosti, ki jo je izbral uporabnik
+ imagecopyresampled($backgroundImgResized, $backgroundImg, 0, 0, 0, 0, $ImgWidth, $ImgHeight, $orig_width, $orig_height); //kopiraj original (vecjo) sliko v sliko ustrezne velikosti, ki jo je izbral uporabnik
+
+ // barva oblike klika - pride v taki obliki #f26970
+ $barva = substr($heatmap_click_color, 1); //f26970
+ $rHex = '0x'.str_replace(substr($barva, 2),"",$barva); //f2
+ //error_log("rHex: $rHex");
+ $barvatmp = substr($barva, 2); //6970
+ $barvatmpG = str_replace(substr($barvatmp, 2),"",$barvatmp); //69
+ $gHex = '0x'.$barvatmpG;
+ //error_log("gHex: $gHex");
+ $barvatmpB = substr($barvatmp, 2); //70
+ $bHex = '0x'.$barvatmpB;
+ //error_log("bHex: $bHex");
+ $barvaOblike = imagecolorallocate($backgroundImgResized, $rHex, $gHex, $bHex);
+ // barva oblike klika - konec
+
+ // narisi obliko klika
+ foreach($data4Coords as $row){ //za vsako klikano tocko
+ if($heatmap_click_shape == 1){ //krog
+ imagefilledarc($backgroundImgResized, $row['lat'], $row['lng'], $heatmap_click_size*2, $heatmap_click_size*2, 0, 360, $barvaOblike, IMG_ARC_PIE);
+ }elseif($heatmap_click_shape == 2){ //kvadrat
+ $x1 = $row['lat'] - $heatmap_click_size/2;
+ $y1 = $row['lng'] - $heatmap_click_size/2;
+ $x2 = $row['lat'] + $heatmap_click_size/2;
+ $y2 = $row['lng'] + $heatmap_click_size/2;
+ imagefilledrectangle($backgroundImgResized, $x1, $y1, $x2, $y2, $barvaOblike);
+ }
+ }
+ // narisi obliko klika - konec
+
+ //$file = UPLOAD_DIR . $heatmapId . '.png';
+ //$file = UPLOAD_DIR . 'test_'.$spr_id.'.png';
+ $file = $uploadDir . 'results_'.$spr_id.'.png';
+ imagepng($backgroundImgResized, $file, 6, NULL);
+ imagedestroy($backgroundImgResized);
+
+ return $file;
+
+ #izris tock na sliko######################################################################################konec
+ }
+
+
+}
+?> \ No newline at end of file
diff --git a/admin/exportclases/class.imageIzvozHeatmap.php b/admin/exportclases/class.imageIzvozHeatmap.php
new file mode 100644
index 0000000..6fec695
--- /dev/null
+++ b/admin/exportclases/class.imageIzvozHeatmap.php
@@ -0,0 +1,103 @@
+<?php
+
+ global $site_path;
+ global $site_url;
+
+ include_once('../../function.php');
+ include_once('../survey/definition.php');
+
+
+/**
+ * @desc Class za generacijo slike za heatmap
+ */
+class imageIzvozHeatmap {
+
+ var $anketa;// = array(); // trenutna anketa
+
+ var $pi=array('canCreate'=>false); // za shrambo parametrov in sporocil
+ var $pdf;
+
+
+ var $image;
+
+
+ var $currentStyle;
+
+ private $headFileName = null; # pot do header fajla
+ private $dataFileName = null; # pot do data fajla
+ private $dataFileStatus = null; # status data datoteke
+ private $CID = null; # class za inkrementalno dodajanje fajlov
+
+ var $current_loop = 'undefined';
+
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null, $sprID = null, $loop = null)
+ {
+ global $site_path;
+ global $global_user_id;
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) )
+ {
+ $this->anketa['id'] = $anketa;
+ $this->spremenljivka = $sprID;
+ SurveyAnalysis::Init($anketa);
+ SurveyAnalysis::$setUpJSAnaliza = false;
+ }
+ else
+ {
+ $this->pi['msg'] = "Anketa ni izbrana!";
+ $this->pi['canCreate'] = false;
+ return false;
+ }
+
+ if ( SurveyInfo::getInstance()->SurveyInit($this->anketa['id']) && $this->init())
+ {
+ $this->anketa['uid'] = $global_user_id;
+ SurveyUserSetting::getInstance()->Init($this->anketa['id'], $this->anketa['uid']);
+ }
+ else
+ return false;
+ // ce smo prisli do tu je vse ok
+ $this->pi['canCreate'] = true;
+
+ return true;
+ }
+
+ // SETTERS && GETTERS
+
+ function getFile($fileName)
+ {
+ global $site_path;
+ global $site_url;
+ //echo '<img alt="" src="'.$site_url.'main/survey/uploads/'.$fileName.'"></br>';
+ $src = $site_url.'main/survey/uploads/'.$fileName;
+ $image = imagecreatefrompng($src);
+
+ imagealphablending($image, false);
+ imagesavealpha($image, true);
+
+ //header('Content-Disposition: Attachment;filename='.$fileName);
+ header('Content-Disposition: Attachment;filename='.$fileName.';filename*=utf8'.$fileName);
+ header('Content-Type: image/png');
+ //header('Content-Type: image/png; charset=utf-8');
+ //header('Content-Type: application/force-download');
+
+ imagepng($image);
+ imagedestroy($image);
+ }
+
+
+ function init()
+ {
+ global $lang;
+
+ return true;
+ }
+
+
+}
+?> \ No newline at end of file
diff --git a/admin/exportclases/class.pdfIzvoz.php b/admin/exportclases/class.pdfIzvoz.php
new file mode 100644
index 0000000..798aff8
--- /dev/null
+++ b/admin/exportclases/class.pdfIzvoz.php
@@ -0,0 +1,2639 @@
+<?php
+/*
+ * Created on 31.3.2009
+ *
+ * To change the template for this generated file go to
+ * Window - Preferences - PHPeclipse - PHP - Code Templates
+ */
+//error_reporting(E_ALL);
+set_time_limit(1800);
+
+
+include_once('../../function.php');
+require_once('../exportclases/class.enka.pdf.php');
+require_once('../../vendor/autoload.php');
+
+
+define("FNT_FREESERIF", "freeserif", true);
+define("FNT_FREESANS", "freesans", true);
+define("FNT_HELVETICA", "helvetica", true);
+
+define("FNT_MAIN_TEXT", FNT_FREESANS, true);
+define("FNT_QUESTION_TEXT", FNT_FREESANS, true);
+define("FNT_HEADER_TEXT", FNT_FREESANS, true);
+
+define("FNT_MAIN_SIZE", 10, true);
+define("FNT_QUESTION_SIZE", 9, true);
+define("FNT_HEADER_SIZE", 10, true);
+
+define("RADIO_BTN_SIZE", 3, true);
+define("CHCK_BTN_SIZE", 3, true);
+define("LINE_BREAK", 6, true);
+
+define ('PDF_MARGIN_HEADER', 8);
+define ('PDF_MARGIN_FOOTER', 12);
+define ('PDF_MARGIN_TOP', 18);
+define ('PDF_MARGIN_BOTTOM', 18);
+define ('PDF_MARGIN_LEFT', 15);
+define ('PDF_MARGIN_RIGHT', 15);
+
+/** Class za generacijo pdf-a
+ *
+ * @desc: po novem je potrebno form elemente generirati roÄno kot slike
+ *
+ */
+class PdfIzvoz {
+
+ var $anketa;// = array(); // trenutna anketa
+
+ var $grupa = null; // trenutna grupa
+ var $usrId = null; // trenutni user
+ var $spremenljivka; // trenutna spremenljivka
+ var $printPreview = false; // ali kliÄe konstruktor
+ var $pi=array('canCreate'=>false); // za shrambo parametrov in sporocil
+ var $pdf;
+ var $currentStyle;
+
+ var $currentHeight = 0; // visina trenutnega vprasanja
+
+ var $SUS; //SurveyUserSettng
+ var $SA; //SurveyAnketa
+
+ var $db_table = '';
+
+ var $language = -1; // Katero verzijo prevoda izvazamo
+
+ var $type = 0; // tip izpisa - 0->navaden, 1->iz prve strani, 2->s komentarji
+ var $commentType = 1; // tip izpisa komentarjev
+ var $showIf = 0; // izpis if-ov
+ var $font = 10; // velikost pisave
+ var $numbering = 0; // ostevillcevanje vprasanj
+ var $showIntro = 0; // prikaz uvoda
+
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null, $type = 0, $commentType = 1){
+ global $site_path;
+ global $global_user_id;
+ global $site_url;
+ global $lang;
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) )
+ {
+ $this->anketa['id'] = $anketa;
+ $this->usrId = $_GET['usr_id'];
+
+ $this->type = $type;
+ $this->commentType = $commentType;
+
+ // Po novem imamo globalne nastavitve
+ SurveySetting::getInstance()->Init($anketa);
+ $this->font = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_font_size');
+ $this->showIf = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_show_if');
+ $this->numbering = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_numbering');
+ $this->showIntro = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_show_intro');
+
+ if(isset($_GET['language'])){
+ $this->language = $_GET['language'];
+
+ // Naložimo jezikovno datoteko
+ $file = '../../lang/'.$this->language.'.php';
+ include($file);
+ $_SESSION['langX'] = $site_url .'lang/'.$this->language.'.php';
+ }
+
+ // create new PDF document
+ $this->pdf = new enka_TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
+ }
+ else
+ {
+ $this->pi['msg'] = "Anketa ni izbrana!";
+ $this->pi['canCreate'] = false;
+ return false;
+ }
+
+ if ( SurveyInfo::getInstance()->SurveyInit($this->anketa['id']) && $this->init())
+ {
+ $this->anketa['uid'] = $global_user_id;
+ SurveyUserSetting::getInstance()->Init($this->anketa['id'], $this->anketa['uid']);
+
+ if (SurveyInfo::getInstance()->getSurveyColumn('db_table') == 1)
+ $this->db_table = '_active';
+ }
+ else
+ return false;
+ // ce smo prisli do tu je vse ok
+ $this->pi['canCreate'] = true;
+
+ return true;
+ }
+
+ // SETTERS && GETTERS
+
+ function checkCreate()
+ {
+ return $this->pi['canCreate'];
+ }
+ function getFile($fileName)
+ {
+ //Close and output PDF document
+ $this->pdf->Output($fileName, 'I');
+ }
+
+
+ function init()
+ {
+
+ // array used to define the language and charset of the pdf file to be generated
+ $language_meta = Array();
+ $language_meta['a_meta_charset'] = 'UTF-8';
+ $language_meta['a_meta_dir'] = 'ltr';
+ $language_meta['a_meta_language'] = 'sl';
+ $language_meta['w_page'] = 'stran';
+
+ //set some language-dependent strings
+ $this->pdf->setLanguageArray($language_meta);
+
+ //set margins
+ $this->pdf->setPrintHeaderFirstPage(false);
+ $this->pdf->setPrintFooterFirstPage(false);
+
+ $this->pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
+ $this->pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
+ $this->pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
+
+ // set header and footer fonts
+ $this->pdf->setHeaderFont(Array(FNT_HEADER_TEXT, "I", FNT_HEADER_SIZE));
+ $this->pdf->setFooterFont(Array(FNT_HEADER_TEXT, 'I', FNT_HEADER_SIZE));
+
+
+ // set document information
+ $this->pdf->SetAuthor('An Order Form');
+ $this->pdf->SetTitle('An Order');
+ $this->pdf->SetSubject('An Order');
+
+ // set default header data
+ //$this->pdf->SetHeaderData(null, null, "www.1ka.si", $this->encodeText(SurveyInfo::getInstance()->getSurveyTitle()));
+ if ($this->language != -1) {
+ SurveySetting::getInstance()->Init($this->anketa['id']);
+ $_lang = '_'.$this->language;
+ $srv_novaanketa_kratkoime = SurveySetting::getInstance()->getSurveyMiscSetting('srvlang_srv_novaanketa_kratkoime'.$_lang);
+ }
+ else{
+ $srv_novaanketa_kratkoime = SurveyInfo::getInstance()->getSurveyAkronim();
+ }
+ $this->pdf->SetHeaderData(null, null, "www.1ka.si", $this->encodeText($srv_novaanketa_kratkoime));
+
+ //set auto page breaks
+ $this->pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
+
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', $this->font);
+ //set image scale factor
+ $this->pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
+ return true;
+ }
+
+ function createPdf()
+ {
+ // Izpis vprasanj s komentarji
+ if($this->type == 2)
+ $this->outputCommentaries();
+
+ // Izpis vprasalnika oz odgovorov enega respondenta
+ else
+ $this->outputSurvey();
+ }
+
+ function createFrontPage(){
+ global $lang;
+
+ // dodamo prvo stran
+ $this->pdf->AddPage();
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', 16);
+
+ if ($this->language != -1) {
+ SurveySetting::getInstance()->Init($this->anketa['id']);
+ $_lang = '_'.$this->language;
+ $srv_anketa_naslov = SurveySetting::getInstance()->getSurveyMiscSetting('srvlang_srv_novaanketa_kratkoime'.$_lang);
+ }
+ else{
+ $srv_anketa_naslov = SurveyInfo::getInstance()->getSurveyAkronim();
+ }
+
+ // dodamo naslov
+ $this->pdf->SetFillColor(224, 235, 255);
+ $this->pdf->SetTextColor(0);
+ $this->pdf->SetDrawColor(128, 0, 0);
+ $this->pdf->SetLineWidth(0.1);
+ $this->pdf->Sety(100);
+
+ if($this->allResults == 1){
+ $this->pdf->Cell(0, 10, $this->encodeText($srv_anketa_naslov), 'TLR', 1,'C', 1, 0,0);
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', 13);
+ $this->pdf->Cell(0, 10, $this->encodeText($lang['export_firstpage_results']), 'BLR', 1,'C', 1, 0,0);
+ }
+ elseif($this->allResults == 2){
+ $this->pdf->Cell(0, 10, $this->encodeText($srv_anketa_naslov), 'TLR', 1,'C', 1, 0,0);
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', 13);
+ $this->pdf->Cell(0, 10, $this->encodeText($lang['srv_testiranje_komentarji']), 'BLR', 1,'C', 1, 0,0);
+ }
+ else{
+ $this->pdf->Cell(0, 16, $this->encodeText($srv_anketa_naslov), 1, 1,'C', 1, 0,0);
+ }
+
+ // dodamo info:
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', 12);
+ $this->currentStyle = array('width' => 0.1, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(128, 0, 0));
+ $this->pdf->ln(30);
+ // $this->pdf->Write (0, $this->encodeText("Info:"), '', 0, 'l', 1, 1);
+
+ $this->drawLine();
+ // avtorja, št vprašanj, datum kreiranja
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_shortname'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyTitle()), 0, 'L', 0, 1, 0 ,0, true);
+ if ( SurveyInfo::getInstance()->getSurveyTitle() != SurveyInfo::getInstance()->getSurveyAkronim())
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_longname'].': '.$this->encodeText($srv_anketa_naslov), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_qcount'].': '.SurveyInfo::getInstance()->getSurveyQuestionCount(), 0, 'L', 0, 1, 0 ,0, true);
+
+
+ // Aktiviranost
+ $activity = SurveyInfo:: getSurveyActivity();
+ $_last_active = end($activity);
+ if (SurveyInfo::getSurveyColumn('active') == 1) {
+ $this->pdf->SetTextColor(0,150,0);
+ $this->pdf->MultiCell(95, 5, $this->encodeText($lang['srv_anketa_active2']), 0, 'L', 0, 1, 0 ,0, true);
+ } else {
+ # preverimo ali je bila anketa že aktivirana
+ if (!isset($_last_active['starts'])) {
+ # anketa Å¡e sploh ni bila aktivirana
+ $this->pdf->SetTextColor(255,120,0);
+ $this->pdf->MultiCell(95, 5, $this->encodeText($lang['srv_survey_non_active_notActivated']), 0, 'L', 0, 1, 0 ,0, true);
+ } else {
+ # anketa je že bila aktivirna ampak je sedaj neaktivna
+ $this->pdf->SetTextColor(255,120,0);
+ $this->pdf->MultiCell(95, 5, $this->encodeText($lang['srv_survey_non_active']), 0, 'L', 0, 1, 0 ,0, true);
+ }
+ }
+ $this->pdf->SetTextColor(0);
+
+ // Aktivnost
+ if( count($activity) > 0 ){
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_active_from'].': '.SurveyInfo::getInstance()->getSurveyStartsDate(), 0, 'L', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_active_until'].': '.SurveyInfo::getInstance()->getSurveyExpireDate(), 0, 'L', 0, 1, 0 ,0, true);
+ }
+
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_author'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyInsertName()), 0, 'L', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_edit'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyEditName()), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_date'].': '.SurveyInfo::getInstance()->getSurveyInsertDate(), 0, 'L', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_date'].': '.SurveyInfo::getInstance()->getSurveyEditDate(), 0, 'L', 0, 1, 0 ,0, true);
+ if ( SurveyInfo::getInstance()->getSurveyInfo() )
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_desc'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyInfo()), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', $this->font);
+ $this->pdf->SetFillColor(0, 0, 0);
+ }
+
+
+ // Izpis vprasalnika (z ali brez odgovorov)
+ function outputSurvey(){
+ global $lang;
+
+ $rowA = SurveyInfo::getInstance()->getSurveyRow();
+
+ // izpišemo prvo stran
+ $this->createFrontPage();
+
+ // Izpisemo vprasalnik
+ $this->pdf->AddPage();
+
+ // filtriramo spremenljivke glede na profil
+ SurveyVariablesProfiles :: Init($this->anketa['id']);
+
+ $dvp = SurveyUserSetting :: getInstance()->getSettings('default_variable_profile');
+ $_currentVariableProfile = SurveyVariablesProfiles :: checkDefaultProfile($dvp);
+
+ $tmp_svp_pv = SurveyVariablesProfiles :: getProfileVariables($_currentVariableProfile);
+
+ foreach ( $tmp_svp_pv as $vid => $variable) {
+ $tmp_svp_pv[$vid] = substr($vid, 0, strpos($vid, '_'));
+ }
+
+
+ // ce obstaja intro izpisemo intro - pri izpisu vprasalnika brez odgovorov (ce smo na prvi strani moramo biti v razsirjenem nacinu)
+ if( ($rowA['expanded'] != 0 || $this->type != 1) && $this->showIntro == 1 ){
+ if ( SurveyInfo::getInstance()->getSurveyShowIntro() )
+ {
+ $intro = (SurveyInfo::getInstance()->getSurveyIntro() == '') ? $lang['srv_intro'] : SurveyInfo::getInstance()->getSurveyIntro();
+
+ // po potrebi prevedemo uvod
+ $naslovIntro = $this->srv_language_intro();
+ if ($naslovIntro != '') {
+ $intro = $naslovIntro;
+ }
+
+ $this->pdf->Write (0, $this->encodeText($intro), '', 0, 'L', 1, 1);
+ $this->pdf->Ln(LINE_BREAK);
+ //$this->pdf->drawLine();
+ $this->pdf->Ln(LINE_BREAK);
+ }
+ }
+
+ $sqlGrupeString = "SELECT id FROM srv_grupa WHERE ank_id='".$this->anketa['id']."' ORDER BY vrstni_red";
+ $sqlGrupe = sisplet_query($sqlGrupeString);
+
+ while ( $rowGrupe = mysqli_fetch_assoc( $sqlGrupe ) )
+ { // sprehodmo se skozi grupe ankete
+ $this->grupa = $rowGrupe['id'];
+
+ $zaporedna = 0;
+ $sqlSpremenljivke = sisplet_query("SELECT * FROM srv_spremenljivka WHERE gru_id='".$this->grupa."' AND visible='1' ORDER BY vrstni_red ASC");
+ while ($rowSpremenljivke = mysqli_fetch_assoc($sqlSpremenljivke))
+ { // sprehodimo se skozi spremenljivke grupe
+ $spremenljivka = $rowSpremenljivke['id'];
+ if ( $this->checkSpremenljivka ($spremenljivka) /*|| $this->showIf == 1*/ )
+ { // lahko izrišemo spremenljivke
+
+ // po potrebi obarvamo vprašanja
+ $this->pdf->SetTextColor(0);
+ if ($rowSpremenljivke['visible'] == 0)
+ {
+ if ($rowSpremenljivke['sistem'] == 1)
+ { // Äe je oboje = vijolÄno
+ $this->pdf->SetTextColor(128,0,128);
+ }
+ else
+ { // ÄŒe je skrito = rdeÄe
+ $this->pdf->SetTextColor(255,0,0);
+ }
+ }
+ else if ($rowSpremenljivke['sistem'] == 1)
+ $this->pdf->SetTextColor(0,0,255);
+
+
+ // Äe imamo Å¡tevilÄenje Type = 1 potem Å¡tevilÄimo V1
+ if (SurveyInfo::getInstance()->getSurveyCountType())
+ $zaporedna++;
+ $stevilcenje = ( SurveyInfo::getInstance()->getSurveyCountType() ) ?
+ ( ( SurveyInfo::getInstance()->getSurveyCountType() == 2 ) ? $rowSpremenljivke['variable'].") " : $zaporedna.") " ) : null;
+
+ $this->pdf->SetTextColor(0,0,0);
+ $this->pdf->SetDrawColor(0,0,0);
+
+ $this->currentHeight = 0;
+
+ // izpis skrcenega vprasalnika (samo pri izpisu iz urejanja)
+ if($rowA['expanded'] == 0 && $this->type == 1){
+ $this->outputVprasanjeCollapsed($rowSpremenljivke, $stevilcenje);
+ }
+
+ // izpis navadnega vprasalnika
+ else{
+ $this->outputVprasanje($rowSpremenljivke, $stevilcenje);
+ $this->outputSpremenljivke($rowSpremenljivke);
+ }
+
+
+ $this->pdf->Ln(LINE_BREAK);
+ }
+ }
+ }
+
+ // Äe izpisujemo grupo, ne izpisujemo zakljucka
+ if ( !$this->getGrupa() ){
+ if ( SurveyInfo::getInstance()->getSurveyShowConcl() && SurveyInfo::getInstance()->getSurveyConcl() )
+ { // ce obstaja footer izpisemo footer
+ $this->pdf->Ln(LINE_BREAK);
+ $this->pdf->drawLine();
+ $this->pdf->Ln(LINE_BREAK);
+ $this->pdf->Write (0, $this->encodeText(SurveyInfo::getInstance()->getSurveyConcl()), '', 0, 'L', 1, 1);
+ }
+ }
+ }
+
+ // Izpis vprasanj s komentarji
+ function outputCommentaries(){
+ global $lang;
+ global $site_url;
+ global $admin_type;
+ global $global_user_id;
+
+ $this->createFrontPage();
+
+ $this->pdf->AddPage();
+
+
+ $f = new Forum;
+ $c = 0;
+
+ $b = new Branching($this->anketa['id']);
+
+ $rowi = SurveyInfo::getInstance()->getSurveyRow();
+
+ SurveySetting::getInstance()->Init($this->anketa['id']);
+ $question_resp_comment_viewadminonly = SurveySetting::getInstance()->getSurveyMiscSetting('question_resp_comment_viewadminonly');
+ $question_comment_viewadminonly = SurveySetting::getInstance()->getSurveyMiscSetting('question_comment_viewadminonly');
+ $question_comment_viewauthor = SurveySetting::getInstance()->getSurveyMiscSetting('question_comment_viewauthor');
+ $sortpostorder = SurveySetting::getInstance()->getSurveyMiscSetting('sortpostorder');
+ $question_note_view = SurveySetting::getInstance()->getSurveyMiscSetting('question_note_view');
+ $addfieldposition = SurveySetting::getInstance()->getSurveyMiscSetting('addfieldposition');
+ $commentmarks = SurveySetting::getInstance()->getSurveyMiscSetting('commentmarks');
+ $commentmarks_who = SurveySetting::getInstance()->getSurveyMiscSetting('commentmarks_who');
+
+ $sql = sisplet_query("SELECT s.* FROM srv_spremenljivka s, srv_grupa g WHERE s.gru_id=g.id AND g.ank_id='".$this->anketa['id']."' ORDER BY g.vrstni_red ASC, s.vrstni_red ASC");
+
+ if ( mysqli_num_rows($sql) > 0 && ( (int)$question_resp_comment_viewadminonly + (int)$question_comment_viewadminonly ) > 0 ) {
+ while ($row = mysqli_fetch_array($sql)) {
+
+ $sql1 = sisplet_query("SELECT thread, note FROM srv_spremenljivka WHERE id = '$row[id]'");
+ $row1 = mysqli_fetch_array($sql1);
+
+ $orderby = $sortpostorder == 1 ? 'DESC' : 'ASC' ;
+ $tid = $row1['thread'];
+
+ $only_unresolved = " ";
+ $only_unresolved2 = " ";
+
+ if ($this->commentType == 1) $only_unresolved = " AND ocena <= 1 ";
+ if ($this->commentType == 1) $only_unresolved2 = " AND text2 <= 1 ";
+
+ if ($this->commentType == 2) $only_unresolved = " AND ocena = 0 ";
+ if ($this->commentType == 2) $only_unresolved2 = " AND text2 = 0 ";
+
+ if ($this->commentType == 3) $only_unresolved = " AND ocena = 1 ";
+ if ($this->commentType == 3) $only_unresolved2 = " AND text2 = 1 ";
+
+ if ($this->commentType == 4) $only_unresolved = " AND ocena = 2 ";
+ if ($this->commentType == 4) $only_unresolved2 = " AND text2 = 2 ";
+
+ if ($this->commentType == 5) $only_unresolved = " AND ocena = 3 ";
+ if ($this->commentType == 5) $only_unresolved2 = " AND text2 = 3 ";
+
+
+ $tema_vsebuje = substr($lang['srv_forum_intro'],0,10); // da ne prikazujemo 1. default sporocila
+
+ if ($admin_type <= $question_comment_viewadminonly) { // vidi vse komentarje
+ $sqlt = sisplet_query("SELECT * FROM post WHERE vsebina NOT LIKE '%{$tema_vsebuje}%' AND tid='$tid' $only_unresolved ORDER BY time $orderby, id $orderby");
+ } elseif ($question_comment_viewauthor==1) { // vidi samo svoje komentarje
+ $sqlt = sisplet_query("SELECT * FROM post WHERE vsebina NOT LIKE '%{$tema_vsebuje}%' AND tid='$tid' $only_unresolved AND uid='$global_user_id' ORDER BY time $orderby, id $orderby");
+ } else { // ne vidi nobenih komentarjev
+ $sqlt = sisplet_query("SELECT * FROM post WHERE 1=0");
+ }
+
+ $sql2 = sisplet_query("SELECT COUNT(*) AS count FROM srv_data_text".$this->db_table." WHERE spr_id='0' AND vre_id='$row[id]' $only_unresolved2");
+ $row2 = mysqli_fetch_array($sql2);
+
+ if ( mysqli_num_rows($sqlt) > 0 || $row2['count'] > 0 || $row1['note'] != '') {
+ $c++;
+
+ $this->currentHeight = 0;
+
+ $this->outputVprasanje($row, null);
+ $this->outputSpremenljivke($row);
+
+ if ($admin_type <= $question_note_view || $question_note_view == '') {
+
+ if ($row1['note'] != '') {
+ $this->pdf->Ln(3);
+ $this->pdf->setFont('','B', 10);
+ $this->pdf->Write(0, $this->encodeText($lang['hour_comment']), '', 0, 'l', 1, 1);
+
+ $this->pdf->Ln(3);
+ $this->pdf->setFont('','', 10);
+ $this->pdf->Write(0, $this->encodeText($row1['note']), '', 0, 'l', 1, 1);
+ }
+ }
+
+ // komentarji na vprasanje
+ if ($row1['thread'] > 0) {
+
+ if (mysqli_num_rows($sqlt) > 0) {
+
+ $this->pdf->Ln(3);
+ $this->pdf->setFont('','B', 10);
+ $this->pdf->Write (0, $this->encodeText($lang['srv_admin_comment']), '', 0, 'l', 1, 1);
+
+ $this->pdf->Ln(3);
+
+ $i = 0;
+ while ($rowt = mysqli_fetch_array($sqlt)) {
+
+ $this->pdf->setFont('','B', 10);
+ $this->pdf->Write (0, $this->encodeText($f->user($rowt['uid'])), '', 0, 'l', 0, 1);
+ $this->pdf->setFont('','', 10);
+ $this->pdf->Write (0, $this->encodeText(' ('.$f->datetime1($rowt['time']).'):'), '', 0, 'l', 1, 1);
+
+ // Popravimo vsebino ce imamo replike
+ $vsebina = iconv("iso-8859-2", "UTF-8", $rowt['vsebina']);
+ $odgovori = explode("<blockquote style=\"margin-left:20px\">", $vsebina);
+
+ $this->pdf->MultiCell(100, 0, $this->encodeText($odgovori[0]),0,'L',0,1,0,0,true,0);
+
+ unset($odgovori[0]);
+ foreach($odgovori as $odgovor){
+
+ $this->pdf->Ln(2);
+ $this->pdf->setX($this->pdf->getX()+8);
+
+ $odgovor = explode('<br />', $odgovor);
+ $avtor = explode('</b> ', $odgovor[0]);
+
+ $this->pdf->setFont('','B', 10);
+ $this->pdf->Write(0, $this->encodeText($avtor[0]), '', 0, 'l', 0, 1);
+ $this->pdf->setFont('','', 10);
+ $this->pdf->Write(0, $this->encodeText($avtor[1]), '', 0, 'l', 1, 1);
+
+ $this->pdf->setX($this->pdf->getX()+8);
+ $this->pdf->MultiCell(92, 0, $this->encodeText($odgovor[1]),0,'L',0,1,0,0,true,0);
+ }
+
+ // Crta
+ $this->pdf->MultiCell(100, 2, '',0,'L',0,1,0,0,true,0);
+ $this->pdf->MultiCell(100, 2, '','T','L',0,1,0,0,true,0);
+ }
+ }
+ }
+
+ // komentarji respondentov
+ if ($row2['count'] > 0) {
+
+ if ($admin_type <= $question_resp_comment_viewadminonly) {
+
+ $this->pdf->Ln(3);
+ $this->pdf->setFont('','B', 10);
+ $this->pdf->Write (0, $this->encodeText($lang['srv_repondent_comment']), '', 0, 'l', 1, 1);
+
+ $this->pdf->Ln(3);
+
+ if ($this->commentType == 1) $only_unresolved = " AND d.text2 <= 1 "; else $only_unresolved = " ";
+
+ $sqlt = sisplet_query("SELECT d.*, u.time_edit FROM srv_data_text".$this->db_table." d, srv_user u WHERE d.spr_id='0' AND d.vre_id='$row[id]' AND u.id=d.usr_id $only_unresolved2 ORDER BY d.id ASC");
+ if (!$sqlt) echo mysqli_error($GLOBALS['connect_db']);
+ while ($rowt = mysqli_fetch_array($sqlt)) {
+
+ $this->pdf->setFont('','', 10);
+ $this->pdf->Write(0, $this->encodeText($f->datetime1($rowt['time_edit']).':'), '', 0, 'l', 1, 1);
+
+ $this->pdf->MultiCell(100, 0, $this->encodeText($rowt['text']),0,'L',0,1,0,0,true,0);
+
+ // Crta
+ $this->pdf->MultiCell(100, 2, '',0,'L',0,1,0,0,true,0);
+ $this->pdf->MultiCell(100, 2, '','T','L',0,1,0,0,true,0);
+ }
+ }
+ }
+
+ $this->pdf->Ln(LINE_BREAK);
+ }
+ }
+
+ /*if ($c == 0) {
+ //echo $lang['srv_no_comments_solved'].'<br/>';
+ }*/
+
+ }
+
+ else {
+ //echo $lang['srv_no_comments'].'<br/>';
+ }
+ }
+
+ // Izpis skrcenih vprasanj - v eni vrstici
+ function outputVprasanjeCollapsed($spremenljivke, $zaporedna){
+ global $lang;
+
+ $b = new Branching($this->anketa['id']);
+
+ $sqlIf = sisplet_query("SELECT * FROM srv_branching WHERE element_spr='$spremenljivke[id]'");
+ $rowIf = mysqli_fetch_array($sqlIf);
+
+ // Izpisemo tekst vprasanja
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', $this->font);
+
+ // Zamik zaradi ifov
+ $zamik = ( $b->level($spremenljivke['id'],0) > 0 ? (($b->level($spremenljivke['id'],0)-1)*10) : 0 );
+ $this->pdf->setX($this->pdf->getX()+$zamik);
+
+ $rowl = $this->srv_language_spremenljivka($spremenljivke);
+ if (strip_tags($rowl['naslov']) != '') $spremenljivke['naslov'] = $rowl['naslov'];
+
+ //izpis if-ov pri vprasanju
+ if(/*$this->showIf == 1*/ true){
+
+ if ($rowIf['parent'] > 0){
+ $rowb = Cache::srv_if($rowIf['parent']);
+
+ if ($rowb['tip'] == 0){
+ $this->displayIf($rowIf['parent']);
+ $this->pdf->setX($this->pdf->getX()+$zamik+10);
+ }
+ }
+ }
+
+ // stevilcenje vprasanj
+ $numberingText = '('.$spremenljivke['variable'].') ';
+
+ $this->pdf->setFont('','B',$this->font);
+ $this->pdf->SetTextColor(0,128,0);
+ $this->pdf->Write (0, $numberingText, '', 0, 'l', 0, 1);
+ $this->pdf->SetTextColor(0,0,0);
+ $this->pdf->Write (0, $this->snippet($this->encodeText($spremenljivke['naslov']), 80), '', 0, 'l', 0, 1);
+ $this->pdf->setFont('','I',$this->font);
+ $this->pdf->SetTextColor(128,128,128);
+ $this->pdf->Write (0, $this->encodeText(' ( '.$lang['srv_vprasanje_tip_long_'.$spremenljivke['tip']].' )'), '', 0, 'l', 1, 1);
+ $this->pdf->SetTextColor(0,0,0);
+
+ // izpis pagebreaka
+ if($b->pagebreak($spremenljivke['id'])){
+
+ $this->currentStyle = array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter', 'dash' => '2,2', 'color' => array(128, 128, 128));
+ $cy = $this->pdf->getY()+3;
+ $this->pdf->Line(15, $cy , 195, $cy , $this->currentStyle);
+ }
+ }
+
+ function outputVprasanje($spremenljivke, $zaporedna){
+
+ $rowl = $this->srv_language_spremenljivka($spremenljivke);
+ if (strip_tags($rowl['naslov']) != '') $spremenljivke['naslov'] = $rowl['naslov'];
+ if (strip_tags($rowl['info']) != '') $spremenljivke['info'] = $rowl['info'];
+
+ // Izpisemo tekst vprasanja
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', $this->font);
+
+ $pozicija_vprasanja = $this->pdf->getY();
+ $sqlVrstic = sisplet_query("SELECT count(*) FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."'");
+ $rowVrstic = mysqli_fetch_row($sqlVrstic);
+ $visina = round(($rowVrstic[0]+2) * 8);
+
+ $linecount_vprasanja = $this->pdf->getNumLines($spremenljivke['naslov'], $this->pdf->getPageWidth());
+
+ if($pozicija_vprasanja + $linecount_vprasanja*4.7 /*+ $visina*/ > 240)
+ {
+ $this->pdf->AddPage('P');
+ }
+
+ //izpis if-ov pri vprasanju
+ if($this->showIf == 1){
+
+ /*$sqlIf = sisplet_query("SELECT * FROM srv_branching WHERE element_spr='$spremenljivke[id]'");
+ $rowIf = mysqli_fetch_array($sqlIf);
+
+ if ($rowIf['parent'] > 0){
+ $rowb = Cache::srv_if($rowIf['parent']);
+
+ if ($rowb['tip'] == 0)
+ $this->displayIf($rowIf['parent']);
+ }*/
+
+ // Po novem izpisemo pred vsakim vprasanjem vse ife znotraj katerih se nahaja
+ $b = new Branching($this->anketa['id']);
+ $parents = $b->get_parents($spremenljivke['id']);
+
+ $parents = explode('p_', $parents);
+ foreach ($parents AS $key => $val) {
+ if ( is_numeric(trim($val)) ) {
+ $parents[$key] = (int)$val;
+ } else {
+ unset($parents[$key]);
+ }
+ }
+
+ foreach ($parents AS $if) {
+ $this->displayIf($if);
+ }
+ }
+
+ // stevilcenje vprasanj
+ $numberingText = ($this->numbering == 1) ? $spremenljivke['variable'].' - ' : '';
+
+ $this->pdf->setFont('','B',$this->font);
+
+ if($spremenljivke['orientation']!=0){ //ce ni vodoravno ob vprasanju, pejdi v novo vrstico
+ //$this->pdf->Write(0, $numberingText . $this->encodeText($spremenljivke['naslov']), '', 0, 'l', 1, 1);
+ $text = strip_tags($numberingText . $spremenljivke['naslov'], '<a><img><ul><li><ol><br>');
+ $this->pdf->WriteHTML($text, $ln=true, $fill=false, $reseth=true);
+
+ // Izpisemo opombo, ce jo imamo
+ if($spremenljivke['info'] != ''){
+ //$this->pdf->Ln(1);
+ $this->pdf->setFont('','',$this->font-2);
+ $this->pdf->SetTextColor(100,100,100);
+ //$this->pdf->WriteHTML($spremenljivke['info']);
+ $this->pdf->Write(0, $this->encodeText($spremenljivke['info']), '', 0, 'l', 1, 1);
+ $this->pdf->setFont('','',$this->font);
+ $this->pdf->SetTextColor(0);
+ }
+
+ //$this->pdf->setFont('','',$this->font);
+ $this->pdf->Ln(LINE_BREAK);
+ }else{ //ce je vodoravno ob vprasanju
+ $text = strip_tags($numberingText . $spremenljivke['naslov'], '<a><img><ul><li><ol><br>');
+ //$this->pdf->WriteHTML($text, $ln=true, $fill=false, $reseth=true);
+ //$this->pdf->WriteHTML($text, $ln=false, $fill=false, $reseth=true);
+ $this->pdf->writeHTMLCell(70,1,$x1,$y1,$text,0,0,0,1,'L',1);
+ }
+ $this->pdf->setFont('','',$this->font);
+ }
+
+ function outputSpremenljivke($spremenljivke)
+ {
+ switch ( $spremenljivke['tip'] )
+ {
+ case 1: //radio
+ case 2: //check
+ case 3: //select -> radio
+
+ // iz baze preberemo vse moznosti - ko nimamo izpisa z odgovori respondenta
+ $sqlVrednosti = sisplet_query("SELECT id, naslov, naslov2, variable, other FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+
+ $width = 180;
+
+ //ce imamo prikaz v vec stoplcih
+ $spremenljivkaParams = new enkaParameters($spremenljivke['params']);
+ $stolpci = ($spremenljivkaParams->get('stolpci') ? $spremenljivkaParams->get('stolpci') : 1);
+ $checkbox_limit = ($spremenljivkaParams->get('checkbox_limit') ? $spremenljivkaParams->get('checkbox_limit') : 0);
+
+ if ($stolpci > 1 && $spremenljivke['orientation']==1) {
+ //echo '<div style="float:left; width:'.(100/$stolpci).'%">';
+ $kategorij = mysqli_num_rows($sqlVrednosti);
+ $v_stolpcu = ceil($kategorij / $stolpci);
+
+ $width = round(180 / $stolpci);
+ }
+
+ $yStart = $this->pdf->GetY();
+ $xStart = $this->pdf->GetX();
+ $count = 0;
+ $questionWidth = 85;
+ $answerWidth = 33;
+ $maxHeight = 0;
+ $opombaAdded = 0;
+ $maxPageWidth = $this->pdf->getPageWidth() - 30;
+ $seznam = "";
+
+ while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti))
+ {
+ $prop['full'] = ( isset($userAnswer[$rowVrednost['id']]) );
+
+ # po potrebi prevedemo naslov
+ $naslov = $this->srv_language_vrednost($rowVrednost['id']);
+ if ($naslov != '') {
+ $rowVrednost['naslov'] = $naslov;
+ }
+
+ $stringTitle = ($this->encodeTextHtml(( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) ));
+ //$stringTitle = (( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] )); //encodeText sem presaltal, tako, da sem lahko uporabljal writeHTMLCell(), saj drugace ni slik, ni teksta v novi vrstici, ipd.
+
+ //popravimo lokacijo ce imamo postavitev v vec stolpcih
+ if ( ($stolpci > 1) && ($spremenljivke['orientation']==1) ) {
+ $yPos = $count % $v_stolpcu;
+ $xPos = floor($count / $v_stolpcu);
+ $this->pdf->SetXY($this->pdf->GetX()+($width*$xPos), $yStart+(7*$yPos));
+ }
+
+ //dodamo eno celico da zamaknemo malo
+ $this->pdf->Cell(2, 5, '');
+ if ( $spremenljivke['tip'] == 1 || $spremenljivke['tip'] == 3 )
+ {
+ if($spremenljivke['orientation']==1)
+ { //navpicno
+ $this->pdf->RadioButton('vpr_'. $spremenljivke['id'], RADIO_BTN_SIZE, $prop);
+ $y1=$this->pdf->GetY();
+ $x1=$this->pdf->GetX();
+ }elseif($spremenljivke['orientation']==7)
+ { //navpicno - tekst levo
+ $y1=$this->pdf->GetY();
+ $x1=$this->pdf->GetX();
+ //$this->pdf->MultiCell($width, 1, $stringTitle,0,'L',0,0,$x1,$y1);
+ $this->pdf->writeHTMLCell(60,1,$x1,$y1,$stringTitle,0,0,0,1,'L',1);
+ $height = $this->pdf->getLastH();
+ //$this->checkLineHeight($height);
+ }elseif($spremenljivke['orientation']==0)
+ { //vodoravno ob vprasanju
+ $this->pdf->Cell(2, 5, '');
+ $this->pdf->RadioButton('vpr_'. $spremenljivke['id'], RADIO_BTN_SIZE, $prop);
+ $y1=$this->pdf->GetY();
+ $x1=$this->pdf->GetX();
+ }elseif($spremenljivke['orientation']==2)
+ { //vodoravno pod vprasanjem
+ $this->pdf->Cell(2, 5, '');
+ $this->pdf->RadioButton('vpr_'. $spremenljivke['id'], RADIO_BTN_SIZE, $prop);
+ $y1=$this->pdf->GetY();
+ $x1=$this->pdf->GetX();
+ }elseif($spremenljivke['orientation']==6)
+ { //izberite s seznama
+ if($count == 0){
+ $this->pdf->Cell(2, 5, '');
+ $y1=$this->pdf->GetY();
+ $x1=$this->pdf->GetX();
+ }
+ $seznam .= $stringTitle.'<br>';
+ //$this->currentHeight = ($this->currentHeight == 1) ? 2 : $this->currentHeight;
+ }elseif($spremenljivke['orientation']==8)
+ { //povleci-spusti
+ $this->pdf->Cell(2, 5, '');
+ $y1=$this->pdf->GetY();
+ $x1=$this->pdf->GetX();
+ }elseif($spremenljivke['orientation']==10) //image hot-spot
+ {
+ if($count == 0){
+ $this->pdf->Cell(2, 5, '');
+ $y1=$this->pdf->GetY();
+ $x1=$this->pdf->GetX();
+ }
+ }
+ else
+ { //ce ni urejenega izrisa naj bo default oz. navpicno
+ $this->pdf->RadioButton('vpr_'. $spremenljivke['id'], RADIO_BTN_SIZE, $prop);
+ $y1=$this->pdf->GetY();
+ $x1=$this->pdf->GetX();
+ }
+ }
+ else if ( $spremenljivke['tip'] == 2 )
+ {
+ if($spremenljivke['orientation']==1){ //navpicno
+ $this->pdf->CheckBox('vpr_'. $spremenljivke['id'].'_'.$rowVrednost['id'], CHCK_BTN_SIZE, $prop);
+ $y=$this->pdf->GetY();
+ $x=$this->pdf->GetX();
+ }elseif($spremenljivke['orientation']==7){ //navpicno - tekst levo
+ $y1=$this->pdf->GetY();
+ $x1=$this->pdf->GetX();
+ //$this->pdf->MultiCell($width, 1, $stringTitle,0,'L',0,0,$x1,$y1);
+ $this->pdf->writeHTMLCell(60,1,$x1,$y1,$stringTitle,0,0,0,1,'L',1);
+ $height = $this->pdf->getLastH();
+ //$this->checkLineHeight($height);
+ }elseif($spremenljivke['orientation']==0){ //vodoravno ob vprasanju
+ $this->pdf->Cell(2, 5, '');
+ $this->pdf->CheckBox('vpr_'. $spremenljivke['id'].'_'.$rowVrednost['id'], CHCK_BTN_SIZE, $prop);
+ $y1=$this->pdf->GetY();
+ $x1=$this->pdf->GetX();
+ }elseif($spremenljivke['orientation']==2){ //vodoravno pod vprasanjem
+ $this->pdf->Cell(2, 5, '');
+ $this->pdf->CheckBox('vpr_'. $spremenljivke['id'].'_'.$rowVrednost['id'], CHCK_BTN_SIZE, $prop);
+ $y1=$this->pdf->GetY();
+ $x1=$this->pdf->GetX();
+ }elseif($spremenljivke['orientation']==6){ //izberite s seznama
+ if($count == 0){
+ $this->pdf->Cell(2, 5, '');
+ $y1=$this->pdf->GetY();
+ $x1=$this->pdf->GetX();
+ }
+ $seznam .= $stringTitle.'<br>';
+ //$this->currentHeight = ($this->currentHeight == 1) ? 2 : $this->currentHeight;
+ }elseif($spremenljivke['orientation']==8)
+ { //povleci-spusti
+ $this->pdf->Cell(2, 5, '');
+ $y1=$this->pdf->GetY();
+ $x1=$this->pdf->GetX();
+ }elseif($spremenljivke['orientation']==10) //image hot-spot
+ {
+ if($count == 0){
+ $this->pdf->Cell(2, 5, '');
+ $y1=$this->pdf->GetY();
+ $x1=$this->pdf->GetX();
+ }
+ }
+ else
+ { //ce ni urejenega izrisa naj bo default oz. navpicno
+ $this->pdf->CheckBox('vpr_'. $spremenljivke['id'].'_'.$rowVrednost['id'], CHCK_BTN_SIZE, $prop);
+ $y=$this->pdf->GetY();
+ $x=$this->pdf->GetX();
+ }
+ }
+
+
+ $this->pdf->Cell(4, 0, '');
+
+ $this->currentHeight = $this->pdf->getNumLines($stringTitle, $width);
+
+ if ( $spremenljivke['tip'] == 2 )
+ {
+ if($spremenljivke['orientation']==1){ //navpicno
+ $y=$y-2;
+ $x=$x+3;
+ //$this->pdf->MultiCell($width, 1, $stringTitle,0,'L',0,0,$x,$y);
+ $this->pdf->writeHTMLCell($width,1,$x1,$y1,$stringTitle,0,0,0,1,'L',1);
+ $height = $this->pdf->getLastH();
+ $this->checkLineHeight($height);
+ }elseif($spremenljivke['orientation']==7){ //navpicno - tekst levo
+ //$y1=$y1-1;
+ //$x1=$x1+3;
+ //$this->pdf->MultiCell($width, 1, $stringTitle,0,'L',0,0,$x1,$y1);
+ $this->pdf->CheckBox('vpr_'. $spremenljivke['id'].'_'.$rowVrednost['id'], CHCK_BTN_SIZE, $prop);
+ $this->checkLineHeight($height);
+ }elseif($spremenljivke['orientation']==0){ //vodoravno ob vprasanju
+ $x1=$x1+3;
+ $questionWidth = $questionWidth + $answerWidth;
+ if($height > $maxHeight){
+ $maxHeight = $height;
+ }
+ //$this->pdf->writeHTMLCell(40,1,$x1,$y1,$stringTitle,0,0,0,1,'L',1);
+ $this->pdf->writeHTMLCell($answerWidth,1,$x1,$y1,$stringTitle,0,0,0,1,'L',1);
+ $height = $this->pdf->getLastH();
+ }elseif($spremenljivke['orientation']==2){ //vodoravno pod vprasanjem
+ //$y1=$y1-1;
+ $x1=$x1+3;
+ $questionWidth = $questionWidth + $answerWidth;
+ if($height > $maxHeight){
+ $maxHeight = $height;
+ }
+ //$this->pdf->writeHTMLCell(40,1,$x1,$y1,$stringTitle,0,0,0,1,'L',1);
+ $this->pdf->writeHTMLCell($answerWidth,1,$x1,$y1,$stringTitle,0,0,0,1,'L',1);
+ $height = $this->pdf->getLastH();
+ }elseif($spremenljivke['orientation']==8)
+ { //povleci-spusti
+ $y1=$y1-1;
+ $x1=$x1+3;
+ $this->pdf->writeHTMLCell(70,1,$x1,$y1,$stringTitle,1,0,0,1,'L',1);
+ $height = $this->pdf->getLastH();
+ //v prvi vrstici dodaj se drugi stolpec
+ if($count == 0){
+ $this->pdf->Cell(20, 0, '');
+ $this->pdf->Cell(70, 7, '', 1);
+ }
+ $this->checkLineHeight($height);
+ }
+ elseif($spremenljivke['orientation']!=6 && $spremenljivke['orientation']!=10){
+ $y=$y-2;
+ $x=$x+3;
+ //$this->pdf->MultiCell($width, 1, $stringTitle,0,'L',0,0,$x,$y);
+ $this->pdf->writeHTMLCell($width,1,$x1,$y1,$stringTitle,0,0,0,1,'L',1);
+ $height = $this->pdf->getLastH();
+ $this->checkLineHeight($height);
+ }
+ }
+ elseif($spremenljivke['tip'] == 1)
+ {
+ if($spremenljivke['orientation']==1)
+ { //navpicno
+ $y1=$y1-1;
+ $x1=$x1+3;
+ //$this->pdf->MultiCell($width, 1, $stringTitle,0,'L',0,0,$x1,$y1);
+ $this->pdf->writeHTMLCell($width,1,$x1,$y1,$stringTitle,0,0,0,1,'L',1);
+ $height = $this->pdf->getLastH();
+ $this->checkLineHeight($height);
+ }elseif($spremenljivke['orientation']==7)
+ { //navpicno - tekst levo
+ //$y1=$y1-1;
+ //$x1=$x1+3;
+ //$this->pdf->MultiCell($width, 1, $stringTitle,0,'L',0,0,$x1,$y1);
+ $this->pdf->RadioButton('vpr_'. $spremenljivke['id'], RADIO_BTN_SIZE, $prop);
+ $this->checkLineHeight($height);
+ }elseif($spremenljivke['orientation']==0)
+ { //vodoravno ob vprasanju
+ $x1=$x1+3;
+ $questionWidth = $questionWidth + $answerWidth;
+ if($height > $maxHeight){
+ $maxHeight = $height;
+ }
+ //$this->pdf->writeHTMLCell(40,1,$x1,$y1,$stringTitle,0,0,0,1,'L',1);
+ $this->pdf->writeHTMLCell($answerWidth,1,$x1,$y1,$stringTitle,0,0,0,1,'L',1);
+ $height = $this->pdf->getLastH();
+ }elseif($spremenljivke['orientation']==2)
+ { //vodoravno pod vprasanjem
+ //$y1=$y1-1;
+ $x1=$x1+3;
+ $questionWidth = $questionWidth + $answerWidth;
+ if($height > $maxHeight){
+ $maxHeight = $height;
+ }
+ //$this->pdf->writeHTMLCell(40,1,$x1,$y1,$stringTitle,0,0,0,1,'L',1);
+ $this->pdf->writeHTMLCell($answerWidth,1,$x1,$y1,$stringTitle,0,0,0,1,'L',1);
+ $height = $this->pdf->getLastH();
+ }elseif($spremenljivke['orientation']==8)
+ { //povleci-spusti
+ $y1=$y1-1;
+ $x1=$x1+3;
+ $this->pdf->writeHTMLCell(70,1,$x1,$y1,$stringTitle,1,0,0,1,'L',1);
+ $height = $this->pdf->getLastH();
+ //v prvi vrstici dodaj se drugi stolpec
+ if($count == 0){
+ $this->pdf->Cell(20, 0, '');
+ $this->pdf->Cell(70, 7, '', 1);
+ }
+ $this->checkLineHeight($height);
+ }
+ elseif($spremenljivke['orientation']!=6 && $spremenljivke['orientation']!=10)
+ { //ce ni urejenega izrisa naj bo default oz. navpicno
+ $y1=$y1-1;
+ $x1=$x1+3;
+ //$this->pdf->MultiCell($width, 1, $stringTitle,0,'L',0,0,$x1,$y1);
+ $this->pdf->writeHTMLCell($width,1,$x1,$y1,$stringTitle,0,0,0,1,'L',1);
+ $this->checkLineHeight($height);
+ }
+ }
+
+ if($spremenljivke['orientation']!=0 && $spremenljivke['orientation']!=2 && $spremenljivke['orientation']!=6)
+ { //ce ni vodoravno ob vprasanju in ni vodoravno pod vprasanjem in ni seznam
+ $this->currentHeight = ($this->currentHeight == 1) ? 2 : $this->currentHeight;
+ $this->pdf->setY($this->pdf->getY() + $this->currentHeight*4.7);
+ }elseif($spremenljivke['orientation']==0 || $spremenljivke['orientation']==2)
+ { //ce je vodoravno ob vprasanju oz. vodoravno pod vprasanjem
+ if($questionWidth >= $maxPageWidth){ //ce je sirina vprasanja vecja od max sirine strani
+
+ if($spremenljivke['info'] != '' && $opombaAdded == 0 && $spremenljivke['orientation']==0){ //ce je prisotna opomba in ni bila ze dodana @ vodoravno ob vprasanju
+ //da dobimo, koliko vrstic je dolgo besedilo vprasanja
+ $numberingText = ($this->numbering == 1) ? $spremenljivke['variable'].' - ' : '';
+ $text = strip_tags($numberingText . $spremenljivke['naslov'], '<a><img><ul><li><ol><br>');
+ $linecount_vprasanja = $this->pdf->getNumLines($text, 70);
+ $this->checkLineHeight($linecount_vprasanja*6);
+ $this->addOpomba($spremenljivke['info'], $maxHeight);
+ $opombaAdded = 1;
+ $this->pdf->setY($this->pdf->getY() - $linecount_vprasanja*6); //dvigni y koordinato za visino, ki se je dodalo, da se je pravilno izrisala opomba
+ $this->checkLineHeight($maxHeight);
+ }else{
+ $this->currentHeight = ($this->currentHeight == 1) ? 2 : $this->currentHeight;
+ $this->pdf->setY($this->pdf->getY() + $this->currentHeight*4.7);
+ $this->checkLineHeight($maxHeight);
+ }
+ $questionWidth = 70; //vrni default sirino vprasanja, ker smo v novi vrstici
+ if($spremenljivke['orientation']==0){
+ $this->pdf->Cell(70, 1, ''); //dodaj prazno celico, da se odgovori v naslednji vrstici zacnejo 70mm od zacetka vprasanja, kjer se konca besedilo vprasanja
+ }
+ }
+ }
+ $count++;
+ }
+ if($spremenljivke['orientation']==0)
+ {
+ //$this->pdf->Ln(LINE_BREAK);
+ if($opombaAdded == 0){
+ //da dobimo, koliko vrstic je dolgo besedilo vprasanja
+ $numberingText = ($this->numbering == 1) ? $spremenljivke['variable'].' - ' : '';
+ $text = strip_tags($numberingText . $spremenljivke['naslov'], '<a><img><ul><li><ol><br>');
+ $linecount_vprasanja = $this->pdf->getNumLines($text, 70);
+ $this->checkLineHeight($linecount_vprasanja*6);
+ //$this->pdf->Ln(LINE_BREAK);
+ $this->addOpomba($spremenljivke['info'], $maxHeight);
+ //$this->currentHeight = ($this->currentHeight == 1) ? 2 : $this->currentHeight;
+ //$this->pdf->setY($this->pdf->getY() + $this->currentHeight*4.7);
+ $opombaAdded = 1;
+ $this->checkLineHeight($maxHeight);
+ }
+ }
+ if($spremenljivke['orientation']==6)
+ { //izberite s seznama
+ $this->pdf->writeHTMLCell(100,1,$x1,$y1,$seznam,1,0,0,1,'L',1);
+ $height = $this->pdf->getLastH();
+ $this->checkLineHeight($height);
+ }
+ if($spremenljivke['orientation']==10) //image hot-spot
+ {
+ $odgovor = "Image hot spot";
+ $this->pdf->writeHTMLCell(100,50,$x1,$y1,$odgovor,1,0,0,1,'L',1);
+ $height = $this->pdf->getLastH();
+ $this->checkLineHeight($height);
+ }
+
+ //$this->pdf->Ln(LINE_BREAK);
+ //$this->pdf->Ln(LINE_BREAK);
+
+ break;
+
+ case 6: //multigrid
+ case 16:// multicheckbox
+ case 19:// multitext
+ case 20:// multinumber
+
+ //izris dvojnega multigrida
+ if(($spremenljivke['tip'] == 6 || $spremenljivke['tip'] == 16) && $spremenljivke['enota'] == 3){
+ $this->displayDoubleGrid($spremenljivke);
+ break;
+ }
+
+ $sqlVrstic = sisplet_query("SELECT count(*) FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."'");
+ $rowVrstic = mysqli_fetch_row($sqlVrstic);
+ $visina = round(($rowVrstic[0]+2) * 8);
+
+ $defw_full = 210;
+ $defw_fc = 24; // sirina prve celice
+ $defw_max = 35; // max sirina ostalih celic
+
+ $sqlStVrednosti = sisplet_query("SELECT count(*) FROM srv_grid WHERE spr_id='".$spremenljivke['id']."' ORDER BY id");
+ $rowStVrednost = mysqli_fetch_row($sqlStVrednosti);
+
+ $kolon = $rowStVrednost[0]+1;
+ // Ce imamo diferencial
+ if($spremenljivke['tip'] == 6 && $spremenljivke['enota'] == 1){
+ $kolon++;
+ }
+ switch($kolon)
+ {
+ case 2:
+ $defw_fc = 110;
+ break;
+ case 3:
+ $defw_fc = 85;
+ break;
+ case 4:
+ $defw_fc = 60;
+ break;
+ case 5:
+ $defw_fc = 40;
+ break;
+ case 6:
+ $defw_fc = 35;
+ break;
+ default:
+ $defw_fc = 24;
+ }
+ $w_oc = ( $defw_full - $defw_fc ) / $kolon;
+ if ( $w_oc > $defw_max )
+ $w_oc = $defw_max;
+
+ $countVrednosti=0;
+ $halfWidth = ($w_oc)/ 2;
+
+ if($spremenljivke['enota'] != 10) //ce ni Image hot spot
+ {
+ //za izberite s seznama in povleci-spusti
+ if($spremenljivke['enota'] == 6)
+ {
+ $headerTitles = "";
+ $stringCellTitles = array();
+ }elseif($spremenljivke['enota'] == 9)
+ {
+ //$headerTitles = array();
+ $headerTitles = "";
+ $stringCellTitles = "";
+ }
+
+ //za izberite s seznama in povleci-spusti - konec
+
+ // Prelom strani ce je kateri od naslovov gridov predolg
+ $sqlVsehVrednsti = sisplet_query("SELECT naslov, id, variable, vrstni_red FROM srv_grid WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ $linecount = 0;
+ while ($rowVsehVrednosti = mysqli_fetch_assoc($sqlVsehVrednsti))
+ {
+ # priredimo naslov Äe prevajamo anketo
+ $naslov = $this->srv_language_grid($spremenljivke['id'], $rowVsehVrednosti['id']);
+ if ($naslov != '') {
+ $rowVsehVrednosti['naslov'] = $naslov;
+ }
+
+ // Äe je naslov null izpiÅ¡emo variable
+ $stringHeader_title = $this->encodeText( $rowVsehVrednosti['naslov'] ? $rowVsehVrednosti['naslov'] : $rowVsehVrednosti['variable'] );
+ /*Zascita pred prepisovanjem na novo stran za zgornje parametre*/
+ $pozicija_vrha = $this->pdf->getY();
+
+ $linecount = $this->pdf->getNumLines($stringHeader_title, $w_oc);
+ $this->currentHeight = ($linecount > $this->currentHeight) ? $linecount : $this->currentHeight;
+
+ if($pozicija_vrha + $linecount*4.7 > 250)
+ {
+ $this->pdf->AddPage('P');
+ break;
+ }
+ }
+
+ /*Izpis presledka na zaÄetku*/
+ $this->pdf->Cell($defw_fc, 0,'');
+
+ // izišemo header celice
+ $sqlVsehVrednsti = sisplet_query("SELECT naslov, id, variable, vrstni_red FROM srv_grid WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ while ($rowVsehVrednosti = mysqli_fetch_assoc($sqlVsehVrednsti))
+ {
+ # priredimo naslov Äe prevajamo anketo
+ $naslov = $this->srv_language_grid($spremenljivke['id'], $rowVsehVrednosti['id']);
+ if ($naslov != '') {
+ $rowVsehVrednosti['naslov'] = $naslov;
+ }
+
+ // Äe je naslov null izpiÅ¡emo variable
+ $stringHeader_title = $this->encodeText( $rowVsehVrednosti['naslov'] ? $rowVsehVrednosti['naslov'] : $rowVsehVrednosti['variable'] );
+
+ if($spremenljivke['enota'] != 6 && $spremenljivke['enota'] != 9)
+ {
+ /*Izpis zgornje vrstice*/
+ $this->pdf->MultiCell($w_oc, 1,$stringHeader_title,0,'C',0,0,0,0,true,0);
+ }elseif($spremenljivke['enota'] == 6) //izberite s seznama
+ {
+ $headerTitles .= $stringHeader_title.'<br>';
+ }elseif($spremenljivke['enota'] == 9) //povleci-spusti
+ {
+ //array_push($headerTitles, $stringHeader_title);
+ $headerTitles .= $stringHeader_title.'<br><br>';
+ }
+
+
+ }
+
+ $this->pdf->setY($this->pdf->getY() + $this->currentHeight*5);
+
+
+ $row_count = 1;
+ $sqlVrednosti = sisplet_query("SELECT *,id, naslov, naslov2, variable FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti))
+ {
+ // barva vrstice
+ $row_color = $row_count%2;
+
+ # po potrebi prevedemo naslov
+ $naslov = $this->srv_language_vrednost($rowVrednost['id']);
+ if ($naslov != '') {
+ $rowVrednost['naslov'] = $naslov;
+ }
+
+ $stringCell_title = $this->encodeText(( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) );
+ $cellHeight1 = $this->getCellHeight($this->encodeText($stringCell_title), $defw_fc);
+
+ //za izberite s seznama in povleci-spusti
+
+ if($spremenljivke['enota'] == 6) //izberite s seznama
+ {
+ $stringCellTitle = $this->encodeTextHtml(( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) ).'<br><br>';
+ array_push($stringCellTitles, $stringCellTitle);
+ }
+ if($spremenljivke['enota'] == 9) //povleci-spusti
+ {
+ $stringCellTitles .= $this->encodeTextHtml(( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) ).'<br><br>';
+ }
+ //za izberite s seznama in povleci-spusti - konec
+
+ /*Zascita pred prepisovanjem na novo stran za bocne parametre*/
+ $pozicija_boka = $this->pdf->getY();
+
+ // Å¡e dodamo textbox Äe je polj other
+ $_txt = '';
+
+ $stringCell_title .= $_txt.':';
+
+ $linecount = $this->pdf->getNumLines($stringCell_title, $defw_fc);
+
+ if($spremenljivke['enota'] != 6 && $spremenljivke['enota'] != 9)
+ {
+
+ if($spremenljivke['tip'] == 6 && $spremenljivke['enota'] == 1){
+ $stringCell_title2 = $this->encodeText($rowVrednost['naslov2']);
+ $linecount = ($this->pdf->getNumLines($stringCell_title2, $defw_fc) > $linecount) ? $this->pdf->getNumLines($stringCell_title2, $defw_fc) : $linecount;
+
+ $cellHeight2 = $this->getCellHeight($this->encodeText($stringCell_title2), $defw_fc);
+ }
+
+ if($pozicija_boka + $linecount*4.7 > 250)
+ {
+ $this->pdf->AddPage('P');
+ $pozicija_boka = $this->pdf->getY();
+ }
+
+ // Izracun zacetka in konca (xy)
+ $startY = $pozicija_boka;
+ $endY = ($cellHeight2 > $cellHeight1) ? $pozicija_boka+$cellHeight2 : $pozicija_boka+$cellHeight1;
+ $endY = ($endY - $startY > LINE_BREAK) ? $endY : $pozicija_boka+LINE_BREAK;
+ $startX = $this->pdf->getX() + $defw_fc;
+
+ if($endY > 270)
+ {
+ $this->pdf->AddPage('P');
+ $pozicija_boka = $this->pdf->getY();
+ $startY = $pozicija_boka;
+ $endY = ($cellHeight2 > $cellHeight1) ? $pozicija_boka+$cellHeight2 : $pozicija_boka+$cellHeight1;
+ }
+
+ // Vsaka druga vrstica ima sivo ozadje
+ $XX = $this->pdf->getX();
+ $YY = $this->pdf->getY();
+ $this->pdf->setXY(15, $startY);
+ $this->pdf->SetFillColor(242,243,241);
+ $this->pdf->MultiCell($defw_full-30, $endY-$startY, '',0,'C',$row_color,1,0,0,true,0);
+ $this->pdf->SetFillColor(0);
+ $this->pdf->setXY($XX, $YY);
+ $row_count++;
+
+ /*Izpis boÄnega stolpca*/
+ if($cellHeight2 > $cellHeight1)
+ $this->pdf->SetXY($this->pdf->getX(), ($startY+$endY)/2 - ($cellHeight1)/2);
+
+ $this->pdf->MultiCell($defw_fc, $cellHeight,$stringCell_title,0,'C',0,1,0,0,true,0);
+
+ $shtevec=0;
+ $sqlVsehVrednsti = sisplet_query("SELECT id FROM srv_grid WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ while ($rowVsehVrednosti = mysqli_fetch_assoc($sqlVsehVrednsti))
+ {
+ $prop['full'] = false;
+ $this->pdf->SetXY($startX + $shtevec*$w_oc, ($startY+$endY)/2 - (CHCK_BTN_SIZE)/2);
+ $this->pdf->Cell($halfWidth, 0, '',0,0,1,0);
+ if($spremenljivke['tip']==6) {
+ $this->pdf->RadioButton('vpr_'. $rowVrednost['id'], RADIO_BTN_SIZE, $prop);
+ }
+ elseif($spremenljivke['tip']==16) {
+ $this->pdf->CheckBox('vpr_'. $spremenljivke['id'].'_'.$rowVrednost['id'], CHCK_BTN_SIZE, $prop);
+ }
+ else{
+ $this->pdf->setXY($this->pdf->getX() - $w_oc/2, $startY+1);
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', 8);
+ //$this->pdf->SetTextColor(0,128,0);
+ $this->pdf->SetTextColor(179,0,128);
+ //$this->pdf->TextBoxes($w_oc,LINE_BREAK);
+ $this->pdf->SetFillColor(255,255,255);
+ $this->pdf->MultiCell($w_oc-1, $endY-$startY-2,'',1,'C',1,1,0,0,true,0);
+ $this->pdf->SetFillColor(0);
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', $this->font);
+ $this->pdf->SetTextColor(0,0,0);
+ }
+ $this->pdf->Cell($halfWidth, 0, '',0,0,1,0);
+ $shtevec++;
+ }
+ // Bocni stolpec na desni (ce imamo diferencial)
+ if($spremenljivke['tip'] == 6 && $spremenljivke['enota'] == 1){
+ if($cellHeight1 > $cellHeight2)
+ $this->pdf->SetXY($this->pdf->getX(), ($startY+$endY)/2 - ($cellHeight2)/2);
+ else
+ $this->pdf->setXY($this->pdf->getX(), $startY);
+
+ $this->pdf->MultiCell($defw_fc, $cellHeight2,$stringCell_title2,0,'C',0,1,0,0,true,0);
+ }
+
+ $this->pdf->setY($endY);
+
+ }
+ }
+ if($spremenljivke['enota'] == 6)
+ {
+ foreach ($stringCellTitles as $cellTitle)
+ {
+ $this->displaySeznam($headerTitles, $cellTitle);
+ }
+ }
+ if($spremenljivke['enota'] == 9)
+ {
+ $this->displayDragDrop($headerTitles, $stringCellTitles);
+ }
+
+
+ }elseif($spremenljivke['enota'] == 10)
+ {
+ $odgovor = "Image hot spot";
+ $this->displayImageHotSpotHeatmap($odgovor);
+ }
+
+ break;
+ case 24: // Mesan multigrid
+ $this->displayGridMultiple($spremenljivke);
+ break;
+ case 4: //text
+ $this->pdf->TextField('vpr_'. $spremenljivke['id'], 180, 18, array('multiline'=>true,'strokeColor'=>'dkGray'));
+ $this->pdf->TextBox(180,18);
+ $this->pdf->Ln(LINE_BREAK * 3);
+ break;
+ case 21: //besedilo*
+ $count = $spremenljivke['text_kosov'];
+ $width = round(170/$count);
+ $this->currentHeight = 4;
+
+ if($spremenljivke['text_orientation'] == 1)
+ $width -= 20;
+
+ $array_others = array();
+
+ $sqlVrednost = sisplet_query("SELECT * FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ while($rowVrednost = mysqli_fetch_array($sqlVrednost)){
+
+ # po potrebi prevedemo naslov
+ $naslov = $this->srv_language_vrednost($rowVrednost['id']);
+ if ($naslov != '') {
+ $rowVrednost['naslov'] = $naslov;
+ }
+
+ // Ce ni other
+ if( (int)$rowVrednost['other'] == 0 ) {
+ if($spremenljivke['text_orientation'] == 1){
+ $stringHeader_title = $this->encodeText($rowVrednost['naslov']);
+ $this->pdf->MultiCell(20, 1,$stringHeader_title,0,'R',0,0,0,0,true,0);
+
+ $linecount_vprasanja = $this->pdf->getNumLines($stringHeader_title, 20);
+ $this->currentHeight = ($linecount_vprasanja > $this->currentHeight) ? $linecount_vprasanja : $this->currentHeight;
+ }
+
+ $this->pdf->TextBoxes($width,18);
+ $this->currentHeight = ($linecount_vprasanja > $this->currentHeight) ? $linecount_vprasanja : $this->currentHeight;
+
+ $this->pdf->setX($this->pdf->getX() + (10/$count)+$width);
+ }
+ else {
+ // imamo polje drugo - ne vem, zavrnil...
+ $array_others[$rowVrednost['id']] = array(
+ 'naslov'=>$rowVrednost['naslov'],
+ 'vrstni_red'=>$rowVrednost['vrstni_red'],
+ 'value'=>$text[$rowVrednost['vrstni_red']],
+ );
+
+ }
+ }
+
+ if($spremenljivke['text_orientation'] == 2){
+ mysqli_data_seek($sqlVrednost, 0);
+ $this->pdf->setY($this->pdf->getY() + 20);
+
+ while($rowVrednost = mysqli_fetch_array($sqlVrednost)){
+
+ # po potrebi prevedemo naslov
+ $naslov = $this->srv_language_vrednost($rowVrednost['id']);
+ if ($naslov != '') {
+ $rowVrednost['naslov'] = $naslov;
+ }
+
+ // Ce ni other
+ if( (int)$rowVrednost['other'] == 0 ) {
+ $stringHeader_title = $this->encodeText($rowVrednost['naslov']);
+ $this->pdf->MultiCell($width, 1,$stringHeader_title,0,'C',0,0,0,0,true,0);
+ $this->pdf->setX($this->pdf->getX() + 10/$count);
+
+ $linecount_vprasanja = $this->pdf->getNumLines($stringHeader_title, $width);
+ $this->currentHeight = ($linecount_vprasanja > $this->currentHeight) ? $linecount_vprasanja : $this->currentHeight;
+ }
+ }
+ }
+
+ $this->pdf->setY($this->pdf->getY() + $this->currentHeight*4.7);
+ //$this->pdf->Ln(LINE_BREAK * 3);
+
+ // Izris polj drugo - ne vem...
+ if (count($array_others) > 0) {
+
+ $this->pdf->setY($this->pdf->getY() + 7);
+
+ foreach ($array_others AS $oKey => $other) {
+
+ $this->pdf->setX(25);
+ $this->pdf->CheckBox('', CHCK_BTN_SIZE);
+ $this->pdf->setXY($this->pdf->getX()+5,$this->pdf->getY() - 2);
+ $this->pdf->MultiCell($width, 1,$other['naslov'],0,'L',0,1,0,0,true,0);
+ $this->pdf->setY($this->pdf->getY() + 2);
+ }
+ }
+
+ break;
+ case 5: //label
+// $this->pdf->Ln(6);
+ break;
+
+ case 7: //number
+ # z enoto na levi
+ if($spremenljivke['enota'] == 1){
+ # enota
+ $sqlVrednost = sisplet_query("SELECT id, naslov FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ $rowVrednost = mysqli_fetch_array($sqlVrednost);
+
+ # po potrebi prevedemo naslov
+ $naslov = $this->srv_language_vrednost($rowVrednost['id']);
+ if ($naslov != '') {
+ $rowVrednost['naslov'] = $naslov;
+ }
+
+ $stringHeader_title = $this->encodeText($rowVrednost['naslov']);
+ $this->pdf->MultiCell(30, 5,$stringHeader_title,0,'R',0,0,0,0,true,0);
+
+ $this->pdf->MultiCell(30, 5, '', 1, 'L', 0, 0, 0 ,0, true);
+
+ //dodatno polje
+ if($spremenljivke['size'] == 2){
+
+ #enota
+ $rowVrednost = mysqli_fetch_array($sqlVrednost);
+
+ # po potrebi prevedemo naslov
+ $naslov = $this->srv_language_vrednost($rowVrednost['id']);
+ if ($naslov != '') {
+ $rowVrednost['naslov'] = $naslov;
+ }
+
+ $stringHeader_title = $this->encodeText($rowVrednost['naslov']);
+ $this->pdf->MultiCell(30, 5,$stringHeader_title,0,'R',0,0,0,0,true,0);
+
+ $this->pdf->MultiCell(30, 5, '', 1, 'L', 0, 1, 0 ,0, true);
+ }
+ else
+ $this->pdf->Ln(LINE_BREAK);
+ # z enoto na desni
+ } else if($spremenljivke['enota'] == 2){
+
+ $this->pdf->MultiCell(30, 5, '', 1, 'R', 0, 0, 0 ,0, true);
+
+ # enota
+ $sqlVrednost = sisplet_query("SELECT id, naslov FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ $rowVrednost = mysqli_fetch_array($sqlVrednost);
+
+ # po potrebi prevedemo naslov
+ $naslov = $this->srv_language_vrednost($rowVrednost['id']);
+ if ($naslov != '') {
+ $rowVrednost['naslov'] = $naslov;
+ }
+
+ $stringHeader_title = $this->encodeText($rowVrednost['naslov']);
+ $this->pdf->MultiCell(30, 5,$stringHeader_title,0,'L',0,0,0,0,true,0);
+
+ //dodatno polje
+ if($spremenljivke['size'] == 2){
+
+ #enota
+ $rowVrednost = mysqli_fetch_array($sqlVrednost);
+
+ # po potrebi prevedemo naslov
+ $naslov = $this->srv_language_vrednost($rowVrednost['id']);
+ if ($naslov != '') {
+ $rowVrednost['naslov'] = $naslov;
+ }
+
+ $stringHeader_title = $this->encodeText($rowVrednost['naslov']);
+
+ $this->pdf->MultiCell(30, 5, '', 1, 'R', 0, 0, 0 ,0, true);
+
+ $this->pdf->MultiCell(30, 5,$stringHeader_title,0,'L',0,1,0,0,true,0);
+
+ } else {
+ $this->pdf->Ln(LINE_BREAK);
+ }
+ }
+ //brez enote
+ else{
+ $this->pdf->setX(20);
+
+ $this->pdf->MultiCell(30, 5, '', 1, 'L', 0, 0, 0 ,0, true);
+
+ //dodatno polje
+ if($spremenljivke['size'] == 2){
+
+ $this->pdf->setX($this->pdf->getX() + 5);
+ $this->pdf->MultiCell(30, 5, '', 1, 'L', 0, 1, 0 ,0, true);
+ }
+ else
+ $this->pdf->Ln(LINE_BREAK);
+ }
+
+
+ // Izris polj drugo - ne vem...
+ $this->pdf->Ln(LINE_BREAK);
+ $sqlVrednost = sisplet_query("SELECT * FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' and other!='0' order BY vrstni_red");
+ while($rowVrednost = mysqli_fetch_array($sqlVrednost)) {
+
+ # po potrebi prevedemo naslov
+ $naslov = $this->srv_language_vrednost($rowVrednost['id']);
+ if ($naslov != '') {
+ $rowVrednost['naslov'] = $naslov;
+ }
+
+ $this->pdf->setX(25);
+ $this->pdf->CheckBox('', CHCK_BTN_SIZE);
+ $this->pdf->setXY($this->pdf->getX()+5,$this->pdf->getY() - 2);
+ $this->pdf->MultiCell($width, 1,$rowVrednost['naslov'],0,'L',0,1,0,0,true,0);
+ $this->pdf->setY($this->pdf->getY() + 2);
+ }
+
+ break;
+ case 8: //datum
+ //$this->pdf->TextField('vpr_'. $spremenljivke['id'], 30, 5, array('multiline'=>true,'strokeColor'=>'dkGray'));
+ $this->pdf->TextBox(50,LINE_BREAK);
+ $this->pdf->Ln(12);
+
+ // Izris polj drugo - ne vem...
+ $sqlVrednost = sisplet_query("SELECT * FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' and other!='0' order BY vrstni_red");
+ while($rowVrednost = mysqli_fetch_array($sqlVrednost)) {
+
+ # po potrebi prevedemo naslov
+ $naslov = $this->srv_language_vrednost($rowVrednost['id']);
+ if ($naslov != '') {
+ $rowVrednost['naslov'] = $naslov;
+ }
+
+ $this->pdf->setX(25);
+ $this->pdf->CheckBox('', CHCK_BTN_SIZE);
+ $this->pdf->setXY($this->pdf->getX()+5,$this->pdf->getY() - 2);
+ $this->pdf->MultiCell($width, 1,$rowVrednost['naslov'],0,'L',0,1,0,0,true,0);
+ $this->pdf->setY($this->pdf->getY() + 2);
+ }
+
+ break;
+ case 17: //ranking
+
+ // iz baze preberemo vse moznosti
+ $sqlVrednosti = sisplet_query("SELECT id, naslov, naslov2, variable, other FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+
+ while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti))
+ {
+ //dodamo eno celico da zamaknemo malo
+ $this->pdf->Cell(2, 5, '');
+ $y=$this->pdf->GetY();
+ $x=$this->pdf->GetX();
+
+ # po potrebi prevedemo naslov
+ $naslov = $this->srv_language_vrednost($rowVrednost['id']);
+ if ($naslov != '') {
+ $rowVrednost['naslov'] = $naslov;
+ }
+
+ $stringTitle = ($this->encodeTextHtml(( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) ));
+ //stetje stevila vrstic
+ $stetje_vrstic = $this->pdf->getNumLines($stringTitle, 90);
+ $y=$y+1;
+
+ //$this->pdf->MultiCell(90, 1, $stringTitle,1,'L',0,0,$x,$y);
+ $this->pdf->writeHTMLCell(70,1,$x,$y,$stringTitle,1,0,0,1,'C',1);
+ //$this->pdf->SetTextColor(0,128,0);
+ $height = $this->pdf->getLastH();
+ $this->pdf->SetTextColor(179,0,128);
+
+ //$this->pdf->MultiCell(8, 6, $rowAnswers['vrstni_red'],1,'L',0,0,$x+105,$y);
+ $this->pdf->writeHTMLCell(70,1,$x+90,$y,"",1,0,0,1,'L',1);
+ $this->pdf->SetTextColor(0,0,0);
+
+ $this->checkLineHeight($height);
+ /*
+ $stevec=1;
+ while($stevec<$stetje_vrstic)
+ {
+ $this->pdf->Ln(LINE_BREAK);
+ $stevec++;
+ } */
+ //$this->pdf->Ln(LINE_BREAK);
+ }
+ $this->pdf->Ln(LINE_BREAK);
+
+ break;
+ case 18: //vsota
+
+ $sum = 0;
+
+ // iz baze preberemo vse moznosti
+ $sqlVrednosti = sisplet_query("SELECT id, naslov, naslov2, variable, other FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti))
+ {
+ //dodamo eno celico da zamaknemo malo
+ $this->pdf->Cell(2, 5, '');
+ $y=$this->pdf->GetY();
+ $x=$this->pdf->GetX();
+
+ # po potrebi prevedemo naslov
+ $naslov = $this->srv_language_vrednost($rowVrednost['id']);
+ if ($naslov != '') {
+ $rowVrednost['naslov'] = $naslov;
+ }
+
+ $stringTitle = ($this->encodeText(( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) ));
+ //stetje stevila vrstic
+ $stetje_vrstic = $this->pdf->getNumLines($stringTitle, 90);
+ $y=$y+1;
+
+ $this->pdf->MultiCell(60, 1, $stringTitle,0,'R',0,0,$x,$y);
+ //$this->pdf->SetTextColor(0,128,0);
+ $this->pdf->SetTextColor(179,0,128);
+ $this->pdf->MultiCell(20, 6, $rowAnswers['text'],1,'L',0,0,$x+65,$y);
+ $this->pdf->SetTextColor(0,0,0);
+
+ $sum += (int)$rowAnswers['text'];
+
+ $stevec=1;
+ while($stevec<$stetje_vrstic)
+ {
+ $this->pdf->Ln(LINE_BREAK);
+ $stevec++;
+ }
+ $this->pdf->Ln(LINE_BREAK);
+ }
+
+ //izris crte
+ $this->currentStyle = array('width' => 0.1, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(128, 128, 128));
+ $cy = $this->pdf->getY()+2;
+ $this->pdf->Line(15, $cy , 110, $cy , $this->currentStyle);
+
+ //izris vsote
+ $y=$y+10;
+ $this->pdf->MultiCell(60, 1, $spremenljivke['vsota'],0,'R',0,0,$x,$y);
+ $this->pdf->MultiCell(20, 6, $sum,1,'L',0,0,$x+65,$y);
+ //omejitev vsote
+ if($spremenljivke['vsota_limit'] != 0 && $spremenljivke['vsota_limit'] == $spremenljivke['vsota_min'])
+ $limit = '('.$spremenljivke['vsota_min'].')';
+ elseif($spremenljivke['vsota_limit'] != 0 && $spremenljivke['vsota_min'] != 0)
+ $limit = '(min '.$spremenljivke['vsota_min'].', max '.$spremenljivke['vsota_limit'].')';
+ elseif($spremenljivke['vsota_limit'] != 0)
+ $limit = '(max '.$spremenljivke['vsota_limit'].')';
+ elseif($spremenljivke['vsota_min'] != 0)
+ $limit = '(min '.$spremenljivke['vsota_min'].')';
+
+ if($limit != ''){
+ $this->pdf->SetTextColor(255, 0, 0);
+ $this->pdf->MultiCell(50, 6, $limit,0,'L',0,0,$x+86,$y);
+ }
+
+ $this->pdf->Ln(LINE_BREAK);
+
+ break;
+
+ //lokacija
+ case 26:
+ $odgovor = "Google Maps";
+ $this->displayImageHotSpotHeatmap($odgovor);
+ break;
+ case 27: //heatmap
+ $odgovor = "Heatmap";
+ $this->displayImageHotSpotHeatmap($odgovor);
+ break;
+
+ // SN:
+ case 9: //SN-imena, dodamo 5 polji za imena
+ $this->pdf->TabledTextBox(1,5,array(cellWidth=>50));
+ break;
+
+ case 10: // SN - social support dve koloni po 5 celic
+ $this->pdf->TabledTextBox(2,5);
+ break;
+ case 11: // SN - podvprasanje (podobno kot mgrid - z radio gumbki, 5 ponovitev)
+ case 14: // AW - podvprasanje
+ $sqlVrednosti = sisplet_query("SELECT naslov, naslov2, variable FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ $rowHeaders = array();
+ while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti)){
+
+ # po potrebi prevedemo naslov
+ $naslov = $this->srv_language_vrednost($rowVrednost['id']);
+ if ($naslov != '') {
+ $rowVrednost['naslov'] = $naslov;
+ }
+
+ $stringCell_title = $this->encodeText(( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) );
+ $rowHeaders[] =$stringCell_title;
+ }
+
+ $this->pdf->TabledTextBox(5,sizeof($rowHeaders)+1, array('rowHeaders' => $rowHeaders, 'type' => 'radio', 'vLine' => 0, 'hLine' => 0, 'headerBox' => 1, 'spaceWidth' => 2));
+ break;
+ case 12: // SN - number
+ case 15: // AW - number
+ $this->pdf->TabledTextBox(5,$spremenljivke['size']+1, array('type' => 'box', 'vLine' => 0, 'hLine' => 0, 'headerBox' => 1, 'spaceWidth' => 2));
+ break;
+ case 13: // SN - povezave
+ $this->pdf->TabledTextBox(5,5, array('type' => 'povezave', 'vLine' => 0, 'hLine' => 0, 'headerBox' => 1, 'spaceWidth' => 2));
+ break;
+ }
+ }
+
+ //izris dolgega nacina doubleGrid
+ function displayDoubleGrid($spremenljivke) {
+ $sqlVrstic = sisplet_query("SELECT count(*) FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."'");
+ $rowVrstic = mysqli_fetch_row($sqlVrstic);
+ $visina = round(($rowVrstic[0]+2) * 6);
+
+ $defw_full = 200;
+ $defw_fc = 24; // sirina prve celice
+ $defw_max = 35; // max sirina ostalih celic
+
+ $sqlStVrednosti = sisplet_query("SELECT count(*) FROM srv_grid WHERE spr_id='".$spremenljivke['id']."' ORDER BY id");
+ $rowStVrednost = mysqli_fetch_row($sqlStVrednosti);
+
+ $kolon = $rowStVrednost[0]+1;
+
+ $w_oc = ( $defw_full - $defw_fc ) / $kolon;
+ if ( $w_oc > $defw_max )
+ $w_oc = $defw_max;
+
+ $countVrednosti=0;
+ $halfWidth = ($w_oc)/ 2;
+
+
+ //izpis naslovov posameznih delov grida
+ $this->pdf->MultiCell($defw_fc, LINE_BREAK, '',0,'C',0,0);
+ $this->pdf->MultiCell(80, LINE_BREAK, $spremenljivke['grid_subtitle1'],'B','C',0,0);
+ $this->pdf->MultiCell(80, LINE_BREAK, $spremenljivke['grid_subtitle2'],'B','C',0,1);
+
+ //izpis vmesne crte
+ $this->pdf->Line($defw_fc+95, $this->pdf->getY()-6, $defw_fc+95, $this->pdf->getY()+$visina);
+
+ /*Izpis presledka na zaÄetku*/
+ $this->pdf->Cell($defw_fc, 0,'');
+ // izišemo header celice
+ $sqlVsehVrednsti = sisplet_query("SELECT naslov, id, variable, vrstni_red FROM srv_grid WHERE spr_id='".$spremenljivke['id']."' ORDER BY part, vrstni_red");
+ $linecount = 0;
+ $maxlinecount = 0;
+ $linecount1 = 0;
+ $maxlinecount1 = 0;
+
+ while ($rowVsehVrednosti = mysqli_fetch_assoc($sqlVsehVrednsti))
+ {
+ # priredimo naslov Äe prevajamo anketo
+ $naslov = $this->srv_language_grid($spremenljivke['id'], $rowVsehVrednosti['id']);
+ if ($naslov != '') {
+ $rowVsehVrednosti['naslov'] = $naslov;
+ }
+
+ // Äe je naslov null izpiÅ¡emo variable
+ $stringHeader_title = $this->encodeText( ( $rowVsehVrednosti['naslov'] ) ? $rowVsehVrednosti['naslov'] : $rowVsehVrednosti['variable'] );
+ /*Zascita pred prepisovanjem na novo stran za zgornje parametre*/
+ $pozicija_vrha = $this->pdf->getY();
+ //$linecount_vrha = $this->pdf->getNumLines($stringHeader_title, $w_oc);
+ if($pozicija_vrha + $visina > 250)
+ {
+ $this->pdf->AddPage('P');
+ $this->pdf->Cell($defw_fc, 0,'');
+ }
+ /*Izpis zgornje vrstice*/
+ $this->pdf->MultiCell($w_oc, 1,$stringHeader_title,0,'C',0,0,0,0,true,0);
+ if($linecount_vrha>$maxlinecount) {$maxlinecount=$linecount_vrha;}
+ $countVrednosti++;
+ }
+ $this->pdf->Ln(1.5 * LINE_BREAK);
+ $i=0;
+ while($i<($maxlinecount))
+ {
+ $this->pdf->Ln(LINE_BREAK);
+ $i++;
+ }
+
+ $sqlVrednosti = sisplet_query("SELECT *,id, naslov, naslov2, variable FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti))
+ {
+ # po potrebi prevedemo naslov
+ $naslov = $this->srv_language_vrednost($rowVrednost['id']);
+ if ($naslov != '') {
+ $rowVrednost['naslov'] = $naslov;
+ }
+
+ $stringCell_title = $this->encodeText(( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) );
+ /*Zascita pred prepisovanjem na novo stran za bocne parametre*/
+ $pozicija_boka = $this->pdf->getY();
+ $pozicija_bokaX = $this->pdf->getX();
+ //$linecount_boka = $this->pdf->getNumLines($stringCell_title, $defw_fc);
+
+ // Å¡e dodamo textbox Äe je polj other
+ $_txt = '';
+
+ $stringCell_title .= $_txt;
+
+ if($pozicija_boka + $visina > 250)
+ {
+ $this->pdf->AddPage('P');
+ $pozicija_boka = $this->pdf->getY();
+ }
+
+ /*Izpis boÄnega stolpca*/
+ $this->pdf->MultiCell($defw_fc, 0,$stringCell_title,0,'C',0,1,0,0,true,0);
+ $startY = $this->pdf->getY();
+ $endY = $this->pdf->getY();
+ $startX = $this->pdf->getX();
+// print_r($pozicija_boka. " : ". $startY."<br>");
+ $linecount_boka--;
+ $sqlVsehVrednsti = sisplet_query("SELECT id FROM srv_grid WHERE spr_id='".$spremenljivke['id']."' ORDER BY part, vrstni_red");
+ $shtevec=0;
+ $startX = $startX + $defw_fc;
+ $startY = $pozicija_boka;
+ while ($rowVsehVrednosti = mysqli_fetch_assoc($sqlVsehVrednsti))
+ {
+ $prop['full'] = ($rowVsehVrednosti['id'] == $userAnswer['grd_id']) ? true : false;
+ $this->pdf->SetXY($startX + $shtevec*$w_oc , ($startY+$endY)/2 - (CHCK_BTN_SIZE+1)/2);
+ $this->pdf->Cell($halfWidth, 0, '',0,0,1,0);
+ if($spremenljivke['tip']==6) {
+ $this->pdf->RadioButton('vpr_'. $rowVrednost['id'], RADIO_BTN_SIZE, $prop);
+ }
+ elseif($spremenljivke['tip']==16) {
+ $this->pdf->CheckBox('vpr_'. $spremenljivke['id'].'_'.$rowVrednost['id'], CHCK_BTN_SIZE, $prop);
+ }
+ else{
+ $this->pdf->setX($this->pdf->getX() - $w_oc/2);
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', 8);
+ //$this->pdf->SetTextColor(0,128,0);
+ $this->pdf->SetTextColor(179,0,128);
+ //$this->pdf->TextBoxes($w_oc,LINE_BREAK);
+ $this->pdf->MultiCell($w_oc-1, LINE_BREAK,$userAnswer['text'],1,'C',0,1,0,0,true,0);
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', $this->font);
+ $this->pdf->SetTextColor(0,0,0);
+ }
+ $this->pdf->Cell($halfWidth, 0, '',0,0,1,0);
+ $shtevec++;
+ }
+ $this->pdf->setY($endY);
+ }
+ }
+
+ // izris mesanega multigrida
+ function displayGridMultiple($spremenljivke){
+
+ $sqlVrstic = sisplet_query("SELECT count(*) FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."'");
+ $rowVrstic = mysqli_fetch_row($sqlVrstic);
+ $visina = round(($rowVrstic[0]+2) * 8);
+
+ $defw_full = 210;
+ $defw_fc = 24; // sirina prve celice
+ $defw_max = 35; // max sirina ostalih celic
+
+ $sqlStVrednosti = sisplet_query("SELECT count(*) FROM srv_grid g, srv_grid_multiple m WHERE m.spr_id=g.spr_id AND m.parent='".$spremenljivke['id']."'");
+ $rowStVrednost = mysqli_fetch_array($sqlStVrednosti);
+
+ $kolon = $rowStVrednost['count(*)'] + 1;
+
+ switch($kolon)
+ {
+ case 2:
+ $defw_fc = 110;
+ break;
+ case 3:
+ $defw_fc = 85;
+ break;
+ case 4:
+ $defw_fc = 60;
+ break;
+ case 5:
+ $defw_fc = 40;
+ break;
+ case 6:
+ $defw_fc = 35;
+ break;
+ default:
+ $defw_fc = 24;
+ }
+ $w_oc = ( $defw_full - $defw_fc ) / $kolon;
+ if ( $w_oc > $defw_max )
+ $w_oc = $defw_max;
+
+ $countVrednosti=0;
+ $halfWidth = ($w_oc)/ 2;
+
+ $sqlM = sisplet_query("SELECT * FROM srv_grid_multiple WHERE parent='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ $multiple = array();
+ while ($rowM = mysqli_fetch_array($sqlM)) {
+ $multiple[] = $rowM['spr_id'];
+ }
+
+ // Prelom strani ce je kateri od naslovov gridov predolg
+ $sqlVsehVrednsti = sisplet_query("SELECT g.naslov, g.variable FROM srv_grid g, srv_grid_multiple m WHERE m.parent='".$spremenljivke['id']."' AND g.spr_id=m.spr_id");
+ $sqlMultiple = sisplet_query("SELECT g.*, s.tip, s.enota, s.dostop FROM srv_grid g, srv_grid_multiple m, srv_spremenljivka s WHERE s.id=g.spr_id AND g.spr_id=m.spr_id AND m.spr_id IN (".implode(',', $multiple).") ORDER BY m.vrstni_red, g.vrstni_red");
+ $linecount = 0;
+ while ($rowVsehVrednosti = mysqli_fetch_assoc($sqlVsehVrednsti))
+ {
+ # priredimo naslov Äe prevajamo anketo
+ $rowMultiple = mysqli_fetch_array($sqlMultiple);
+ $naslov = $this->srv_language_grid($rowMultiple['spr_id'], $rowMultiple['id']);
+ if ($naslov != '') {
+ $rowVsehVrednosti['naslov'] = $naslov;
+ }
+
+ // Äe je naslov null izpiÅ¡emo variable
+ $stringHeader_title = $this->encodeText( $rowVsehVrednosti['naslov'] ? $rowVsehVrednosti['naslov'] : $rowVsehVrednosti['variable'] );
+ /*Zascita pred prepisovanjem na novo stran za zgornje parametre*/
+ $pozicija_vrha = $this->pdf->getY();
+
+ $linecount = $this->pdf->getNumLines($stringHeader_title, $w_oc);
+ $this->currentHeight = ($linecount > $this->currentHeight) ? $linecount : $this->currentHeight;
+
+ if($pozicija_vrha + $linecount*4.7 > 250)
+ {
+ $this->pdf->AddPage('P');
+ break;
+ }
+ }
+
+ /*Izpis presledka na zaÄetku*/
+ $this->pdf->Cell($defw_fc, 0,'');
+
+ // izišemo header celice
+ $sqlVsehVrednsti = sisplet_query("SELECT g.naslov,g.variable,m.vrstni_red FROM srv_grid g, srv_grid_multiple m WHERE m.parent='".$spremenljivke['id']."' AND g.spr_id=m.spr_id ORDER BY m.vrstni_red");
+ $sqlMultiple = sisplet_query("SELECT g.*, s.tip, s.enota, s.dostop FROM srv_grid g, srv_grid_multiple m, srv_spremenljivka s WHERE s.id=g.spr_id AND g.spr_id=m.spr_id AND m.spr_id IN (".implode(',', $multiple).") ORDER BY m.vrstni_red, g.vrstni_red");
+ while ($rowVsehVrednosti = mysqli_fetch_assoc($sqlVsehVrednsti))
+ {
+ # priredimo naslov Äe prevajamo anketo
+ $rowMultiple = mysqli_fetch_array($sqlMultiple);
+ $naslov = $this->srv_language_grid($rowMultiple['spr_id'], $rowMultiple['id']);
+ if ($naslov != '') {
+ $rowVsehVrednosti['naslov'] = $naslov;
+ }
+
+ // Äe je naslov null izpiÅ¡emo variable
+ $stringHeader_title = $this->encodeText( $rowVsehVrednosti['naslov'] ? $rowVsehVrednosti['naslov'] : $rowVsehVrednosti['variable'] );
+
+ /*Izpis zgornje vrstice*/
+ $this->pdf->MultiCell($w_oc, 1,$stringHeader_title,0,'C',0,0,0,0,true,0);
+ }
+
+ $this->pdf->setY($this->pdf->getY() + $this->currentHeight*4.7);
+
+ $row_count = 1;
+ $sqlVrednosti = sisplet_query("SELECT * FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti))
+ {
+ // barva vrstice
+ $row_color = $row_count%2;
+
+ # po potrebi prevedemo naslov
+ $naslov = $this->srv_language_vrednost($rowVrednost['id']);
+ if ($naslov != '') {
+ $rowVrednost['naslov'] = $naslov;
+ }
+
+ $stringCell_title = $this->encodeText(( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) );
+ /*Zascita pred prepisovanjem na novo stran za bocne parametre*/
+ $pozicija_boka = $this->pdf->getY();
+ $pozicija_bokaX = $this->pdf->getX();
+ //$linecount_boka = $this->pdf->getNumLines($stringCell_title, $defw_fc);
+
+ // Å¡e dodamo textbox Äe je polj other
+ $_txt = '';
+
+ $stringCell_title .= $_txt.':';
+
+ $linecount = $this->pdf->getNumLines($stringCell_title, $defw_fc);
+
+ if($pozicija_boka + $linecount*4.7 > 250)
+ {
+ $this->pdf->AddPage('P');
+ $pozicija_boka = $this->pdf->getY();
+ }
+ /*Izpis boÄnega stolpca*/
+ $this->pdf->MultiCell($defw_fc, 0,$stringCell_title,0,'C',0,1,0,0,true,0);
+ $startY = $this->pdf->getY();
+ $endY = $this->pdf->getY();
+ $startX = $this->pdf->getX();
+// print_r($pozicija_boka. " : ". $startY."<br>");
+ $linecount_boka--;
+
+ $shtevec=0;
+ $startX = $startX + $defw_fc;
+ $startY = $pozicija_boka;
+
+ // Vsaka druga vrstica ima sivo ozadje
+ $XX = $this->pdf->getX();
+ $YY = $this->pdf->getY();
+ $this->pdf->setXY(15, $startY);
+ $this->pdf->SetFillColor(242,243,241);
+ $this->pdf->MultiCell($defw_full, $endY-$startY,'',0,'C',$row_color,1,0,0,true,0);
+ $this->pdf->SetFillColor(0);
+ $this->pdf->setXY($XX, $YY);
+ $row_count++;
+
+ $sqlVsehVrednsti = sisplet_query("SELECT g.id AS id, s.tip AS tip, m.vrstni_red AS vrstni_red FROM srv_grid g, srv_spremenljivka s, srv_grid_multiple m WHERE m.parent='".$spremenljivke['id']."' AND m.spr_id=s.id AND s.id=g.spr_id ORDER BY m.vrstni_red");
+ while ($rowVsehVrednosti = mysqli_fetch_assoc($sqlVsehVrednsti))
+ {
+ $this->pdf->SetXY($startX + $shtevec*$w_oc , ($startY+$endY)/2 - (CHCK_BTN_SIZE/2));
+ $this->pdf->Cell($halfWidth, 0, '',0,0,1,0);
+ if($rowVsehVrednosti['tip']==6) {
+ $this->pdf->SetXY($startX + $shtevec*$w_oc + $halfWidth, ($startY+$endY)/2 - (CHCK_BTN_SIZE*3/4));
+ $this->pdf->RadioButton('vpr_'. $rowVrednost['id'], RADIO_BTN_SIZE, false);
+ }
+ elseif($rowVsehVrednosti['tip']==16) {
+ $this->pdf->SetXY($startX + $shtevec*$w_oc + $halfWidth, ($startY+$endY)/2 - (CHCK_BTN_SIZE)/2);
+ $this->pdf->CheckBox('vpr_'. $spremenljivke['id'].'_'.$rowVrednost['id'], CHCK_BTN_SIZE, false);
+ //$this->pdf->setY($this->pdf->getY());
+ }
+ else{
+ $this->pdf->SetXY($this->pdf->getX() - $w_oc/2, ($startY+$endY)/2 - (CHCK_BTN_SIZE));
+
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', 8);
+ //$this->pdf->SetTextColor(0,128,0);
+ $this->pdf->SetTextColor(179,0,128);
+ //$this->pdf->TextBoxes($w_oc,LINE_BREAK);
+ $this->pdf->SetFillColor(255,255,255);
+ $this->pdf->MultiCell($w_oc-1, LINE_BREAK,'',1,'C',1,1,0,0,true,0);
+ $this->pdf->SetFillColor(0);
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', $this->font);
+ $this->pdf->SetTextColor(0,0,0);
+ }
+ $this->pdf->Cell($halfWidth, 0, '',0,0,1,0);
+ $shtevec++;
+ }
+ $this->pdf->setY($endY);
+ }
+ }
+
+ function encodeText($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace("&scaron;","Å¡",$text);
+ return strip_tags($text);
+ return $text;
+ }
+
+ function encodeTextHtml($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace("&scaron;","Å¡",$text);
+ //return strip_tags($text);
+ return $text;
+ }
+
+/* Skrajsa niz in doda ... nakoncu
+ * snippet(phrase,[max length],[phrase tail])
+ * snippetgreedy(phrase,[max length before next space],[phrase tail])
+ *
+ * iz: http://snipplr.com/view/9520/php-substring-without-breaking-words/
+ */
+
+ function snippet($text,$length=64,$tail="...")
+ {
+ $text = trim($text);
+ $txtl = strlen($text);
+ if($txtl > $length)
+ {
+ for($i=1;$text[$length-$i]!=" ";$i++)
+ {
+ if($i == $length)
+ {
+ return substr($text,0,$length) . $tail;
+ }
+ }
+ $text = substr($text,0,$length-$i+1) . $tail;
+ }
+ return $text;
+ }
+
+ function drawLine()
+ {
+ $cy = $this->pdf->getY();
+ $this->pdf->Line(15, $cy , 195, $cy , $this->currentStyle);
+
+ }
+
+ function setGrupa($grupa) {$this->grupa = $grupa;}
+ function getGrupa() {return $this->grupa;}
+ function setUserId($usrId) {$this->usrId = $usrId;}
+ function getUserId() {return ($this->usrId)?$this->usrId:false;}
+ function setDisplayFrontPage($display) {$this->pi['displayFrontPage'] = $display;}
+ function getDisplayFrontPage() {return ($this->pi['displayFrontPage'] == true || $this->pi['displayFrontPage'] == 1);}
+/// To bo najbolše dat v en class
+
+
+ /**
+ * @desc preveri ali so na trenutni grupi prikazana vprasanja (zaradi branchinga)
+ */
+ function checkGrupa () {
+
+ $sql = sisplet_query("SELECT id FROM srv_spremenljivka WHERE gru_id = '".$this->grupa."'");
+ if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
+ while ($row = mysqli_fetch_array($sql)) {
+
+ if ($this->checkSpremenljivka($row['id']))
+ return true;
+ }
+ return false;
+ }
+
+
+ /**
+ * @desc preveri ali je spremenljivka vidna (zaradi branchinga)
+ */
+ function checkSpremenljivka ($spremenljivka) {
+
+ $sql = sisplet_query("SELECT * FROM srv_spremenljivka WHERE id = '".$spremenljivka."'");
+ if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
+ $row = mysqli_fetch_array($sql);
+
+ if ($row['visible'] == 0) return false;
+
+ $sql1 = sisplet_query("SELECT * FROM srv_branching WHERE element_spr = '".$spremenljivka."'");
+ if (!$sql1) echo mysqli_error($GLOBALS['connect_db']);
+ $row1 = mysqli_fetch_array($sql1);
+
+ /*if (!$this->checkIf($row1['parent']))
+ return false;*/
+
+ return true;
+ }
+
+ /**
+ * @desc preveri ali se elementi v podanem IFu prikazejo ali ne
+ */
+ function checkIf ($if) {
+ if ($if == 0) return true;
+
+ // preverimo po strukturi navzgor
+ $sql = sisplet_query("SELECT * FROM srv_branching WHERE element_if = '".$if."'");
+ if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
+ $row = mysqli_fetch_array($sql);
+ if (!$this->checkIf($row['parent'])) return false;
+
+ // ce je IF oznacen kot blok, potem se vedno prikaze
+ $sql = sisplet_query("SELECT * FROM srv_if WHERE id = '$if'");
+ if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
+ $row = mysqli_fetch_array($sql);
+ if ($row['tip'] == 1) return true;
+
+
+ $eval = "if (";
+
+ $sql = sisplet_query("SELECT * FROM srv_condition WHERE if_id = '$if' ORDER BY vrstni_red ASC");
+ if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
+
+ $i = 0;
+ // zgeneriramo pogoje z oklepaji, ki jih potem spustimo skozi eval
+ while ($row = mysqli_fetch_array($sql)) {
+
+ if ($i++ != 0)
+ if ($row['conjunction'] == 0)
+ $eval .= ' && ';
+ else
+ $eval .= ' || ';
+
+ if ($row['negation'] == 1)
+ $eval .= ' ! ';
+
+ for ($i=1; $i<=$row['left_bracket']; $i++)
+ $eval .= ' ( ';
+
+ if ($this->checkCondition($row[id]))
+ $eval .= ' true ';
+ else
+ $eval .= ' false ';
+
+ for ($i=1; $i<=$row['right_bracket']; $i++)
+ $eval .= ' ) ';
+
+ }
+ $eval .= ") return true; else return false; ";
+
+ // ne glih best practice, ampak takle mamo...
+ return eval($eval);
+
+ }
+
+ /**
+ * @desc preveri podani condition
+ */
+ function checkCondition ($condition) {
+
+ $sql = sisplet_query("SELECT * FROM srv_condition WHERE id = '$condition'");
+ if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
+ $row = mysqli_fetch_array($sql);
+
+ // obicne spremenljivke
+ if ($row['spr_id'] > 0) {
+ $sql2 = sisplet_query("SELECT * FROM srv_spremenljivka WHERE id = '$row[spr_id]'");
+ $row2 = mysqli_fetch_array($sql2);
+
+
+ // radio, checkbox, dropdown in multigrid
+ if ($row2['tip'] <= 3 || $row2['tip'] == 6) {
+
+ // obicne spremenljivke
+ if ($row['vre_id'] == 0) {
+ $sql3 = sisplet_query("SELECT * FROM srv_condition_vre c, srv_data_vrednost".$this->db_table." v
+ WHERE c.cond_id='$condition' AND c.vre_id=v.vre_id
+ AND v.spr_id='$row[spr_id]' AND usr_id='".$this->getUserId()."'");
+ if ($row['operator'] == 0 && mysqli_num_rows($sql3) == 0)
+ return false;
+ elseif ($row['operator'] == 1 && mysqli_num_rows($sql3) > 0)
+ return false;
+ // multigrid
+ } elseif ($row['vre_id'] > 0) {
+ $sql3 = sisplet_query("SELECT * FROM srv_condition_grid c, srv_data_grid".$this->db_table." d
+ WHERE c.cond_id='$condition' AND d.spr_id='$row[spr_id]'
+ AND c.grd_id=d.grd_id AND d.usr_id='".$this->getUserId()."'");
+ if (!$sql3) echo mysqli_error($GLOBALS['connect_db']);
+ if ($row['operator'] == 0 && !mysqli_num_rows($sql3) > 0)
+ return false;
+ elseif ($row['operator'] == 1 && !mysqli_num_rows($sql3) == 0)
+ return false;
+ }
+
+ // number in text
+ } else {
+
+ $sql3 = sisplet_query("SELECT * FROM srv_data_text".$this->db_table." WHERE spr_id='$row[spr_id]' AND usr_id='".$this->getUserId()."'");
+ if (!$sql3) echo mysqli_error($GLOBALS['connect_db']);
+ $row3 = mysqli_fetch_array($sql3);
+
+ if ($row['operator'] == 0 && !($row3['text'] == $row['text']))
+ return false;
+ elseif ($row['operator'] == 1 && !($row3['text'] != $row['text']))
+ return false;
+ elseif ($row['operator'] == 2 && !($row3['text'] < $row['text']))
+ return false;
+ elseif ($row['operator'] == 3 && !($row3['text'] <= $row['text']))
+ return false;
+ elseif ($row['operator'] == 4 && !($row3['text'] > $row['text']))
+ return false;
+ elseif ($row['operator'] == 5 && !($row3['text'] >= $row['text']))
+ return false;
+
+ }
+
+ // recnum
+ } elseif ($row['spr_id'] == -1) {
+
+ $sqlu = sisplet_query("SELECT * FROM srv_user WHERE id = '".$this->getUserId()."'");
+ $rowu = mysqli_fetch_array($sqlu);
+
+ if (!($rowu['recnum'] % $row['modul'] == $row['ostanek']))
+ return false;
+
+ }
+
+ return true;
+ }
+
+ /**
+ * @desc poisce naslednjo stran - grupo, 0 pomeni konec
+ */
+ function findNextGrupa() {
+
+ //vrstni red trenutne grupe
+ if ($this->grupa > 0) {
+ $sql = sisplet_query("SELECT * FROM srv_grupa WHERE id = '".$this->grupa."'");
+ $row = mysqli_fetch_array($sql);
+ $vrstni_red = $row['vrstni_red'];
+ } else {
+ $vrstni_red = 0;
+ }
+
+ $sql = sisplet_query("SELECT * FROM srv_grupa WHERE ank_id='".$this->anketa['id']."' AND vrstni_red>'".$vrstni_red."' ORDER BY vrstni_red ASC LIMIT 1");
+
+ // naslednja stran
+ if (mysqli_num_rows($sql) > 0) {
+ $row = mysqli_fetch_array($sql);
+ return $row['id'];
+ }
+
+ // konec
+ else {
+ return 0;
+ }
+ }
+
+ function displayIf($if){
+ global $lang;
+
+ $sql_if = sisplet_query("SELECT * FROM srv_if WHERE id = '$if'");
+ $row_if = mysqli_fetch_array($sql_if);
+
+ // Blok
+ if($row_if['tip'] == 1)
+ $output = strtoupper($lang['srv_block']).' ';
+ // Loop
+ elseif($row_if['tip'] == 2)
+ $output = strtoupper($lang['srv_loop']).' ';
+ // IF
+ else
+ $output = 'IF ';
+
+ $sql_if = sisplet_query("SELECT * FROM srv_if WHERE id = '$if'");
+ $row_if = mysqli_fetch_array($sql_if);
+ $output .= '('.$row_if['number'].') ';
+
+ $sql = Cache::srv_condition($if);
+
+ $bracket = 0;
+ $i = 0;
+ while ($row = mysqli_fetch_array($sql)) {
+
+ if ($i++ != 0)
+ if ($row['conjunction'] == 0)
+ $output .= ' and ';
+ else
+ $output .= ' or ';
+
+ if ($row['negation'] == 1)
+ $output .= ' NOT ';
+
+ for ($i=1; $i<=$row['left_bracket']; $i++)
+ $output .= ' ( ';
+
+ // obicajne spremenljivke
+ if ($row['spr_id'] > 0) {
+
+ $row2 = Cache::srv_spremenljivka($row['spr_id']);
+
+ // obicne spremenljivke
+ if ($row['vre_id'] == 0) {
+ $row1 = Cache::srv_spremenljivka($row['spr_id']);
+ // multigrid
+ } elseif ($row['vre_id'] > 0) {
+ $sql1 = sisplet_query("SELECT * FROM srv_vrednost WHERE id = '$row[vre_id]'");
+ $row1 = mysqli_fetch_array($sql1);
+ } else
+ $row1 = null;
+
+ $output .= $row1['variable'];
+
+ // radio, checkbox, dropdown in multigrid
+ if (($row2['tip'] <= 3 || $row2['tip'] == 6) && ($row['spr_id'] || $row['vre_id'])) {
+
+ if ($row['operator'] == 0)
+ $output .= ' = ';
+ else
+ $output .= ' != ';
+
+ $output .= '[';
+
+ // obicne spremenljivke
+ if ($row['vre_id'] == 0) {
+ $sql2 = sisplet_query("SELECT * FROM srv_condition_vre c, srv_vrednost v WHERE cond_id='$row[id]' AND c.vre_id=v.id");
+
+ $j = 0;
+ while ($row2 = mysqli_fetch_array($sql2)) {
+ if ($j++ != 0) $output .= ', ';
+ $output .= $row2['variable'];
+ }
+ // multigrid
+ } elseif ($row['vre_id'] > 0) {
+ $sql2 = sisplet_query("SELECT g.* FROM srv_condition_grid c, srv_grid g WHERE c.cond_id='$row[id]' AND c.grd_id=g.id AND g.spr_id='$row[spr_id]'");
+
+ $j = 0;
+ while ($row2 = mysqli_fetch_array($sql2)) {
+ if ($j++ != 0) $output .= ', ';
+ $output .= $row2['variable'];
+ }
+ }
+
+ $output .= ']';
+
+ // textbox in nubmer mata drugacne pogoje in opcije
+ } elseif ($row2['tip'] == 4 || $row2['tip'] == 21 || $row2['tip'] == 7 || $row2['tip'] == 22) {
+
+ if ($row['operator'] == 0)
+ $output .= ' = ';
+ elseif ($row['operator'] == 1)
+ $output .= ' <> ';
+ elseif ($row['operator'] == 2)
+ $output .= ' < ';
+ elseif ($row['operator'] == 3)
+ $output .= ' <= ';
+ elseif ($row['operator'] == 4)
+ $output .= ' > ';
+ elseif ($row['operator'] == 5)
+ $output .= ' >= ';
+
+ $output .= '\''.$row['text'].'\'';
+
+ }
+
+ // recnum
+ } elseif ($row['spr_id'] == -1) {
+
+ $output .= 'mod(recnum, '.$row['modul'].') = '.$row['ostanek'];
+
+ }
+
+ for ($i=1; $i<=$row['right_bracket']; $i++)
+ $output .= ' ) ';
+ }
+
+ if ($row_if['label'] != '') {
+ $output .= ' (';
+ $output .= ' '.$row_if['label'].' ';
+ $output .= ') ';
+ }
+
+ $this->pdf->SetTextColor(0,0,150);
+ $this->pdf->setFont('','B',$this->font);
+ $this->pdf->MultiCell(90, 1, $this->encodeText($output),0,'L',0,1,0,0);
+ $this->pdf->SetTextColor(0,0,0);
+ $this->pdf->setFont('','',$this->font);
+ }
+
+ function getCellHeight($string, $width){
+
+ $this->pdf->startTransaction();
+ // get the number of lines calling you method
+ $linecount = $this->pdf->MultiCell($width, 0, $string, 0, 'L', 0, 0, '', '', true, 0, false, true, 0);
+ // restore previous object
+ $this->pdf = $this->pdf->rollbackTransaction();
+
+ $height = ($linecount <= 1) ? 7 : $linecount * ($this->pdf->getFontSize() * $this->pdf->getCellHeightRatio()) + 2;
+
+ return $height;
+ }
+
+
+ /**
+ * prevod za srv_spremenljivka
+ */
+ function srv_language_spremenljivka ($spremenljivka) {
+
+ if ($this->language != -1) {
+ $sqll = sisplet_query("SELECT * FROM srv_language_spremenljivka WHERE ank_id='".$this->anketa['id']."' AND spr_id='".$spremenljivka['id']."' AND lang_id='".$this->language."'");
+ $rowl = mysqli_fetch_array($sqll);
+
+ return $rowl;
+ }
+
+ return false;
+ }
+
+ /**
+ * vrne prevod za srv_vrednost
+ *
+ * @param mixed $vrednost
+ */
+ function srv_language_vrednost ($vrednost) {
+
+ if ($this->language != -1) {
+ $sqll = sisplet_query("SELECT * FROM srv_language_vrednost WHERE ank_id='".$this->anketa['id']."' AND vre_id='".$vrednost."' AND lang_id='".$this->language."'");
+ $rowl = mysqli_fetch_array($sqll);
+
+ if ($rowl['naslov'] != '') return $rowl['naslov'];
+ }
+
+ return false;
+ }
+
+ /**
+ * vrne prevod za srv_grid
+ *
+ * @param mixed $vrednost
+ */
+ function srv_language_grid ($spremenljivka, $grid) {
+
+ if ($this->language != -1) {
+ $sqll = sisplet_query("SELECT * FROM srv_language_grid WHERE ank_id='".$this->anketa['id']."' AND spr_id='".$spremenljivka."' AND grd_id='".$grid."' AND lang_id='".$this->language."'");
+ $rowl = mysqli_fetch_array($sqll);
+
+ if ($rowl['naslov'] != '') return $rowl['naslov'];
+ }
+
+ return false;
+ }
+
+ /**
+ * vrne prevod za uvod
+ *
+ */
+ function srv_language_intro () {
+
+ // Prevedemo uvod ce je slucajno potrebno
+ if ($this->language != -1) {
+ $sql1 = sisplet_query("SELECT naslov FROM srv_language_spremenljivka WHERE ank_id='".$this->anketa['id']."' AND spr_id='-1' AND lang_id='".$this->language."'");
+ $row1 = mysqli_fetch_array($sql1);
+
+ if ($row1['naslov'] != '')
+ return strip_tags($row1['naslov']);
+ }
+
+ return false;
+ }
+
+
+ function checkLineHeight($height){
+ //echo '<script>console.log('.$height.'); </script>';
+ if ($height >= 10){ // ce je visina vecja od 10 mm, ker trenutno je enota v mm
+ $this->pdf->MultiCell($width, $height, ""); //dodaj vrstico ustrezne visine
+ }
+ }
+
+ function addOpomba($info, $maxHeight){
+ // Izpisemo opombo, ce jo imamo
+ if($info != ''){
+ //$this->pdf->Ln(1);
+ $this->pdf->setFont('','',$this->font-2);
+ $this->pdf->SetTextColor(100,100,100);
+ //$this->pdf->WriteHTML($spremenljivke['info']);
+ //$this->pdf->Write(0, $this->encodeText($info), '', 0, 'l', 1, 1);
+ $this->pdf->Cell(50,0,$this->encodeText($info),0,0,'L',0);
+ $this->pdf->setFont('','',$this->font);
+ $this->pdf->SetTextColor(0);
+ }
+ //$this->checkLineHeight($maxHeight);
+ //$this->pdf->setFont('','',$this->font);
+ $this->pdf->Ln(LINE_BREAK);
+ }
+
+ function displayImageHotSpotHeatmap($odgovor)
+ {
+ $this->pdf->Cell(2, 5, '');
+ $y1=$this->pdf->GetY();
+ $x1=$this->pdf->GetX();
+ $this->pdf->writeHTMLCell(100,50,$x1,$y1,$odgovor,1,0,0,1,'L',1);
+ $height = $this->pdf->getLastH();
+ $this->checkLineHeight($height);
+ $this->pdf->Ln(LINE_BREAK);
+ }
+
+ function displaySeznam($headerTitles, $cellTitle)
+ {
+ $this->pdf->Cell(2, 5, '');
+ $y1=$this->pdf->GetY();
+ $x1=$this->pdf->GetX();
+
+ $this->pdf->writeHTMLCell(100,50,$x1,$y1,$cellTitle,0,0,0,1,'L',1); //izris levega dela
+ $height1 = $this->pdf->getLastH(); //visina levega dela
+
+ $this->pdf->writeHTMLCell(40,0,$x1+100,$y1,$headerTitles,1,0,0,1,'L',1); //izris desnega dela
+ $height2 = $this->pdf->getLastH(); //visina desnega dela
+
+ if($height1 > $height2)
+ {
+ $this->checkLineHeight($height1);
+ }else{
+ $this->checkLineHeight($height2);
+ }
+ }
+
+ function displayDragDrop($headerTitles, $cellTitles)
+ {
+ $this->pdf->Cell(2, 3, '');
+ $y1=$this->pdf->GetY();
+ $x1=$this->pdf->GetX();
+ $this->pdf->writeHTMLCell(120,5,$x1,$y1-15,"Drag and drop",1,0,0,1,'L',1); //izris levega dela
+ $this->pdf->writeHTMLCell(100,50,$x1,$y1,$cellTitles,0,0,0,1,'L',1); //izris levega dela
+ $height1 = $this->pdf->getLastH(); //visina levega dela
+
+
+ $this->pdf->writeHTMLCell(40,0,$x1+100,$y1,$headerTitles,0,0,0,1,'L',1); //izris desnega dela
+ //$height2 = $this->pdf->getLastH(); //visina desnega dela
+
+ if($height1 > $height2)
+ {
+ $this->checkLineHeight($height1);
+ }else{
+ $this->checkLineHeight($height2);
+ }
+
+ }
+
+}
+
+
+?> \ No newline at end of file
diff --git a/admin/exportclases/class.pdfIzvozAnalizaBreak.php b/admin/exportclases/class.pdfIzvozAnalizaBreak.php
new file mode 100644
index 0000000..094d271
--- /dev/null
+++ b/admin/exportclases/class.pdfIzvozAnalizaBreak.php
@@ -0,0 +1,1396 @@
+<?php
+
+ global $site_path;
+
+ include_once('../../function.php');
+ include_once('../survey/definition.php');
+ include_once('../exportclases/class.pdfIzvozAnalizaFunctions.php');
+ require_once('../exportclases/class.enka.pdf.php');
+
+ define("ALLOW_HIDE_ZERRO_REGULAR", false); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za navadne odgovore
+ define("ALLOW_HIDE_ZERRO_MISSING", true); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za missinge
+
+ define("NUM_DIGIT_AVERAGE", 2, true); // stevilo digitalnih mest za povprecje
+ define("NUM_DIGIT_DEVIATION", 2, true); // stevilo digitalnih mest za povprecje
+
+ define("M_ANALIZA_DESCRIPTOR", "descriptor", true);
+ define("M_ANALIZA_FREQUENCY", "frequency", true);
+
+ define("FNT_FREESERIF", "freeserif", true);
+ define("FNT_FREESANS", "freesans", true);
+ define("FNT_HELVETICA", "helvetica", true);
+
+ define("FNT_MAIN_TEXT", FNT_FREESANS, true);
+ define("FNT_QUESTION_TEXT", FNT_FREESANS, true);
+ define("FNT_HEADER_TEXT", FNT_FREESANS, true);
+
+ define("FNT_MAIN_SIZE", 10, true);
+ define("FNT_QUESTION_SIZE", 9, true);
+ define("FNT_HEADER_SIZE", 10, true);
+
+ define("RADIO_BTN_SIZE", 3, true);
+ define("CHCK_BTN_SIZE", 3, true);
+ define("LINE_BREAK", 6, true);
+
+ define ('PDF_MARGIN_HEADER', 8);
+ define ('PDF_MARGIN_FOOTER', 12);
+ define ('PDF_MARGIN_TOP', 18);
+ define ('PDF_MARGIN_BOTTOM', 18);
+ define ('PDF_MARGIN_LEFT', 15);
+ define ('PDF_MARGIN_RIGHT', 15);
+
+
+/** Class za generacijo pdf-a
+ *
+ *
+ *
+ */
+class PdfIzvozAnalizaBreak {
+
+ var $anketa;// = array(); // trenutna anketa
+
+ var $pi=array('canCreate'=>false); // za shrambo parametrov in sporocil
+ var $pdf;
+ var $currentStyle;
+ var $db_table = '';
+
+ public $breakClass = null; // break class
+ public $crosstabClass = null; // crosstab class
+
+ var $spr = 0; // spremenljivka za katero delamo razbitje
+ var $seq; // sekvenca
+
+ var $break_percent; // opcija za odstotke
+
+ public $break_charts = 0; // ali prikazujemo graf ali tabelo
+
+ var $sessionData; // podatki ki so bili prej v sessionu - za nastavitve, ki se prenasajo v izvoze...
+
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null, $podstran = 'break')
+ {
+ global $site_path;
+ global $global_user_id;
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) )
+ {
+ $this->anketa['id'] = $anketa;
+ $this->anketa['podstran'] = $podstran;
+ // create new PDF document
+ $this->pdf = new enka_TCPDF('L', PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
+ }
+ else
+ {
+ $this->pi['msg'] = "Anketa ni izbrana!";
+ $this->pi['canCreate'] = false;
+ return false;
+ }
+ $_GET['a'] = A_ANALYSIS;
+
+ // preberemo nastavitve iz baze (prej v sessionu)
+ SurveyUserSession::Init($this->anketa['id']);
+ $this->sessionData = SurveyUserSession::getData();
+
+ // ustvarimo break objekt
+ $this->breakClass = new SurveyBreak($this->anketa['id']);
+ $this->spr = $this->sessionData['break']['spr'];
+ # poiÅ¡Äemo sekvenco
+ $this->seq = $this->sessionData['break']['seq'];
+
+ $this->break_percent = (isset($this->sessionData['break']['break_percent']) && $this->sessionData['break']['break_percent'] == false) ? false : true;
+
+ if ( SurveyInfo::getInstance()->SurveyInit($this->anketa['id']) && $this->init())
+ {
+ $this->anketa['uid'] = $global_user_id;
+ SurveyUserSetting::getInstance()->Init($this->anketa['id'], $this->anketa['uid']);
+ }
+ else
+ return false;
+ // ce smo prisli do tu je vse ok
+ $this->pi['canCreate'] = true;
+
+ return true;
+ }
+
+ // SETTERS && GETTERS
+
+ function checkCreate()
+ {
+ return $this->pi['canCreate'];
+ }
+ function getFile($fileName)
+ {
+ //Close and output PDF document
+ ob_end_clean();
+ $this->pdf->Output($fileName, 'I');
+ }
+
+
+ function init()
+ {
+ global $lang;
+
+ // array used to define the language and charset of the pdf file to be generated
+ $language_meta = Array();
+ $language_meta['a_meta_charset'] = 'UTF-8';
+ $language_meta['a_meta_dir'] = 'ltr';
+ $language_meta['a_meta_language'] = 'sl';
+ $language_meta['w_page'] = $lang['page'];
+
+ //set some language-dependent strings
+ $this->pdf->setLanguageArray($language_meta);
+
+ //set margins
+ $this->pdf->setPrintHeaderFirstPage(true);
+ $this->pdf->setPrintFooterFirstPage(true);
+ $this->pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
+ $this->pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
+ $this->pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
+
+ // set header and footer fonts
+ $this->pdf->setHeaderFont(Array(FNT_HEADER_TEXT, "I", FNT_HEADER_SIZE));
+ $this->pdf->setFooterFont(Array(FNT_HEADER_TEXT, 'I', FNT_HEADER_SIZE));
+
+
+ // set document information
+ $this->pdf->SetAuthor('An Order Form');
+ $this->pdf->SetTitle('An Order');
+ $this->pdf->SetSubject('An Order');
+
+ // set default header data
+ $this->pdf->SetHeaderData(null, null, "www.1ka.si", $this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()));
+
+ //set auto page breaks
+ $this->pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
+
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', FNT_MAIN_SIZE);
+ //set image scale factor
+ $this->pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
+ return true;
+ }
+
+ function encodeText($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace(array("&scaron;","&#353;","&#269;"),array("Å¡","Å¡","Ä"),$text);
+ return strip_tags($text);
+ }
+
+ function createPdf()
+ {
+ global $site_path;
+ global $lang;
+
+ // izpisemo prvo stran
+ //$this->createFrontPage();
+
+ $this->pdf->AddPage();
+
+ $this->pdf->setFont('','B','11');
+ $this->pdf->MultiCell(150, 5, $lang['export_analisys_break'], 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->ln(10);
+
+ $this->pdf->setDrawColor(0, 0, 0, 255);
+ $this->pdf->setFont('','','8');
+
+
+ if ($this->spr != 0){
+ # poiÅ¡Äemo pripadajoÄe variable
+ $_spr_data = $this->breakClass->_HEADERS[$this->spr];
+
+ # poiÅ¡Äemo opcije
+ $options = $_spr_data['options'];
+
+ # za vsako opcijo posebej izraÄunamo povpreÄja za vse spremenljivke
+ $frequencys = null;
+ if (count($options) > 0) {
+ foreach ($options as $okey => $option) {
+
+ # zloopamo skozi variable
+ $okeyfrequencys = $this->breakClass->getAllFrequencys($okey, $this->seq, $this->spr);
+ if ($okeyfrequencys != null) {
+ if ($frequencys == null) {
+ $frequencys = array();
+ }
+ $frequencys[$okey] = $okeyfrequencys;
+ }
+ }
+ }
+ $this->displayBreak($this->spr,$frequencys);
+
+ } else {
+ $this->pdf->MultiCell(150, 5, $lang['srv_break_error_note_1'], 0, 'L', 0, 1, 0 ,0, true);
+ }
+ }
+
+ function displayBreak($forSpr, $frequencys) {
+
+ # Äe ne uporabljamo privzetega Äasovnega profila izpiÅ¡emo opozorilo
+ //SurveyTimeProfiles :: printIsDefaultProfile(false);
+
+ # Äe imamo filter ifov ga izpiÅ¡emo
+ //SurveyConditionProfiles:: getConditionString();
+
+ # Äe imamo filter spremenljivk ga izpiÅ¡emo
+ //SurveyVariablesProfiles:: getProfileString(true);
+ //SurveyDataSettingProfiles :: getVariableTypeNote();
+
+ # Äe rekodiranje
+ //$SR = new SurveyRecoding($this->anketa);
+ //$SR -> getProfileString();
+
+ # filtriranje po spremenljivkah
+ $_FILTRED_VARIABLES = SurveyVariablesProfiles::getProfileVariables(SurveyVariablesProfiles::checkDefaultProfile(), true);
+
+ # ali prikazujemo tabele ali grafe
+ $this->break_charts = (isset($this->sessionData['break']['break_show_charts']) && (int)$this->sessionData['break']['break_show_charts'] == 1) ? 1 : 0;
+
+ foreach ($this->breakClass->_HEADERS AS $skey => $spremenljivka) {
+
+ $spremenljivka['id'] = $skey;
+ $tip = $spremenljivka['tip'];
+ if ( is_numeric($tip)
+ && $tip != 4 #text
+ && $tip != 5 #label
+ && $tip != 8 #datum
+ && $tip != 9 #SN-imena
+ && $tip != 19 #multitext
+ && $tip != 21 #besedilo*
+ && ( count($_FILTRED_VARIABLES) == 0 || (count($_FILTRED_VARIABLES) > 0 && isset($_FILTRED_VARIABLES[$skey]) ))
+ ) {
+
+ $this->displayBreakSpremenljivka($forSpr,$frequencys,$spremenljivka);
+ } else if ( is_numeric($tip)
+ && (
+ $tip == 4 #text
+ || $tip == 19 #multitext
+ || $tip == 21 #besedilo*
+ || $tip == 20 #multi numer*
+ ) && ( count($_FILTRED_VARIABLES) == 0 || (count($_FILTRED_VARIABLES) > 0 && isset($_FILTRED_VARIABLES[$skey]) ) )
+ ) {
+ $this->displayBreakSpremenljivka($forSpr,$frequencys,$spremenljivka);
+ }
+ }
+ }
+
+ function displayBreakSpremenljivka($forSpr,$frequencys,$spremenljivka) {
+ $tip = $spremenljivka['tip'];
+ $skala = $spremenljivka['skala'];
+ if ($forSpr != $spremenljivka['id']) {
+ switch ($tip) {
+ # radio, dropdown
+ case 1:
+ case 3:
+ $this->displayCrosstabs($forSpr,$frequencys,$spremenljivka);
+ break;
+ #multigrid
+ case 6:
+ if ($spremenljivka['skala'] == 0) {
+ $this->displayBreakTableMgrid($forSpr,$frequencys,$spremenljivka);
+ } else {
+ $this->displayCrosstabs($forSpr,$frequencys,$spremenljivka);
+ }
+ break;
+ # checkbox
+ case 2:
+ $this->displayCrosstabs($forSpr,$frequencys,$spremenljivka);
+ break;
+ #number
+ case 7:
+ #ranking
+ case 17:
+ #vsota
+ case 18:
+ #multinumber
+ case 20:
+ $this->displayBreakTableNumber($forSpr,$frequencys,$spremenljivka);
+ break ;
+ case 19:
+ $this->displayBreakTableText($forSpr,$frequencys,$spremenljivka);
+ break ;
+ #multicheck
+ case 16:
+ $this->displayCrosstabs($forSpr,$frequencys,$spremenljivka);
+ break;
+ case 4:
+
+ case 21:
+ # po novem besedilo izpisujemo v klasiÄni tabeli
+ $this->displayBreakTableText($forSpr,$frequencys,$spremenljivka);
+
+ #$this->displayCrosstabTable($forSpr,$frequencys,$spremenljivka);
+ break;
+ default:
+ $this->displayCrosstabs($forSpr,$frequencys,$spremenljivka);
+ break;
+ }
+ }
+ }
+
+ function displayBreakTableMgrid($forSpr,$frequencys,$spremenljivka) {
+ global $lang;
+
+ // Ce izrisujemo graf
+ if($this->break_charts == 1){
+ $this->displayChart($forSpr,$frequencys,$spremenljivka,$type = 'mgrid');
+ }
+
+ // Ce izrisujemo tabelo
+ else{
+
+ $keysCount = count($frequencys);
+ $sequences = explode('_',$spremenljivka['sequences']);
+ $forSpremenljivka = $this->breakClass->_HEADERS[$forSpr];
+ $tip = $spremenljivka['tip'];
+
+ # izraÄunamo povpreÄja za posamezne sekvence
+ $means = array();
+ foreach ($frequencys AS $fkey => $fkeyFrequency) {
+ foreach ($sequences AS $sequence) {
+ $means[$fkey][$sequence] = $this->breakClass->getMeansFromKey($frequencys[$fkey][$sequence]);
+ }
+ }
+
+ if ($tip != 16 && $tip != 20) {
+ if ($tip == 1 || $tip == 3) {
+ if (count($spremenljivka['options']) < 15) {
+ $rowspan = 2;
+ $colspan = count($spremenljivka['options'])+1;
+ } else {
+ $rowspan = 1;
+ $colspan = 1;
+ }
+ } else {
+ $rowspan = 2;
+ $colspan = count($sequences);
+ }
+
+ $singleWidth = floor(200 / $colspan);
+
+
+ // PRVA VRSTICA
+ $height = $this->getCellHeight($spremenljivka['naslov'].' ('.$spremenljivka['variable'].')', $singleWidth*$colspan);
+
+ $this->pdf->setFont('','B','6');
+ $this->pdf->MultiCell(60, $height, '', 'TLR', 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell($singleWidth*$colspan, $height, $this->encodeText($spremenljivka['naslov'].' ('.$spremenljivka['variable'].')'), 1, 'C', 0, 1, 0 ,0, true);
+
+
+ // DRUGA VRSTICA
+ $text = $forSpremenljivka['naslov'].' ('.$forSpremenljivka['variable'].')';
+ $height = $this->getCellHeight($text, $singleWidth*$colspan);
+
+ // najprej loopamo da dobimo visino celice
+ if ($tip != 1 && $tip != 3) {
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $text = $variable['naslov'].' ('.$variable['variable'].')';
+ $height = ($this->getCellHeight($text, $singleWidth) > $height) ? $this->getCellHeight($text, $singleWidth) : $height;
+ }
+ }
+ }
+ else if (count($spremenljivka['options']) < 15) {
+ foreach ($spremenljivka['options'] AS $okey => $option) {
+ $text = $option.' ('.$okey.')';
+ $height = ($this->getCellHeight($text, $singleWidth) > $height) ? $this->getCellHeight($text, $singleWidth) : $height;
+ }
+ }
+
+ // se izrisemo celice...
+ $this->pdf->setFont('','B','6');
+ $this->pdf->MultiCell(60, $height, $this->encodeText($forSpremenljivka['naslov'].' ('.$forSpremenljivka['variable'].')'), 'BLR', 'C', 0, 0, 0 ,0, true);
+ $this->pdf->setFont('','','6');
+
+ if ($tip != 1 && $tip != 3) {
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $this->pdf->MultiCell($singleWidth, $height, $this->encodeText($variable['naslov'].' ('.$variable['variable'].')'), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ }
+ $this->pdf->MultiCell(1, $height, '', 0, 'C', 0, 1, 0 ,0, true);
+ }
+ else if (count($spremenljivka['options']) < 15) {
+ foreach ($spremenljivka['options'] AS $okey => $option) {
+ $this->pdf->MultiCell($singleWidth, $height, $this->encodeText($option.' ('.$okey.')'), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ $this->pdf->MultiCell($singleWidth, $height, 'povpreÄje', 1, 'C', 0, 1, 0 ,0, true);
+ }
+
+
+ // VRSTICE S PODATKI
+ foreach ($frequencys AS $fkey => $fkeyFrequency) {
+
+ $height = $this->getCellHeight($forSpremenljivka['options'][$fkey], 60);
+ $this->pdf->MultiCell(60, $height, $this->encodeText($forSpremenljivka['options'][$fkey]), 1, 'C', 0, 0, 0 ,0, true);
+
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ if ($variable['other'] != 1) {
+ $sequence = $variable['sequence'];
+ if (($tip == 1 || $tip == 3) && count($spremenljivka['options']) < 15) {
+ foreach ($spremenljivka['options'] AS $okey => $option) {
+ $this->pdf->MultiCell($singleWidth, $height, $this->encodeText($frequencys[$fkey][$sequence]['valid'][$okey]['cnt']), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ }
+ $this->pdf->MultiCell($singleWidth, $height, self::formatNumber($means[$fkey][$sequence],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),''), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ }
+ }
+ $this->pdf->MultiCell(1, $height, '', 0, 'C', 0, 1, 0 ,0, true);
+ }
+
+ $this->pdf->ln(10);
+ }
+
+ else {
+ $rowspan = 2;
+ $colspan = $spremenljivka['grids'][0]['cnt_vars'];
+ $singleWidth = floor(200 / $colspan);
+ # za multicheck razdelimo na grupe - skupine
+ foreach ($frequencys AS $fkey => $frequency) {
+
+ $this->pdf->setFont('','B','6');
+ $this->pdf->MultiCell(200, 5, $this->encodeText('Tabela za: ('.$forSpremenljivka['variable'].') = '.$forSpremenljivka['options'][$fkey]), 0, 'L', 0, 1, 0 ,0, true);
+
+
+ $text = $spremenljivka['naslov'].' ('.$spremenljivka['variable'].')';
+ $height = $this->getCellHeight($text, 260);
+ $this->pdf->MultiCell(260, $height, $this->encodeText($text), 1, 'C', 0, 1, 0 ,0, true);
+
+ $this->pdf->setFont('','','6');
+
+
+ foreach ($spremenljivka['grids'][0]['variables'] AS $vkey => $variable) {
+ $height = ($this->getCellHeight($variable['naslov'], $singleWidth) > $height) ? $this->getCellHeight($variable['naslov'], $singleWidth) : $height;
+ }
+
+ $this->pdf->MultiCell(60, $height, '', 1, 'C', 0, 0, 0 ,0, true);
+ foreach ($spremenljivka['grids'][0]['variables'] AS $vkey => $variable) {
+ $this->pdf->MultiCell($singleWidth, $height, $this->encodeText($variable['naslov']), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ $this->pdf->MultiCell(1, $height,'', 0, 'C', 0, 1, 0 ,0, true);
+
+
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+
+ $text = '('.$grid['variable'].') '.$grid['naslov'];
+ $height = $this->getCellHeight($text, 60);
+ $this->pdf->MultiCell(60, $height, $this->encodeText($text), 1, 'C', 0, 0, 0 ,0, true);
+
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $sequence = $variable['sequence'];
+
+ $this->pdf->MultiCell($singleWidth, $height, self::formatNumber($means[$fkey][$sequence],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),''), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ $this->pdf->MultiCell(1, $height,'', 0, 'C', 0, 1, 0 ,0, true);
+ }
+ $this->pdf->ln(10);
+ }
+ }
+ }
+ }
+
+ function displayBreakTableNumber($forSpr,$frequencys,$spremenljivka) {
+ global $lang;
+
+ $keysCount = count($frequencys);
+ $sequences = explode('_',$spremenljivka['sequences']);
+ $forSpremenljivka = $this->breakClass->_HEADERS[$forSpr];
+ $tip = $spremenljivka['tip'];
+
+ # izraÄunamo povpreÄja za posamezne sekvence
+ $means = array();
+ $totalMeans = array();
+ $totalFreq = array();
+ foreach ($frequencys AS $fkey => $fkeyFrequency) {
+ foreach ($sequences AS $sequence) {
+ $means[$fkey][$sequence] = $this->breakClass->getMeansFromKey($frequencys[$fkey][$sequence]);
+ }
+ }
+
+ // Ce izrisujemo graf
+ if($this->break_charts == 1){
+
+ // Number, vsota, ranking graf
+ if($tip != 20 ){
+ $this->displayChart($forSpr,$frequencys,$spremenljivka,$type = 'number');
+ }
+
+ // Multinumber graf
+ else{
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+
+ // Izrisujemo samo 1 graf v creportu
+ if($_GET['m'] == 'analysis_creport'){
+
+ if($spremenljivka['break_sub_table']['key'] == $gkey){
+ $this->displayChart($forSpr,$frequencys,$spremenljivka,$type = 'number');
+ }
+ }
+
+ // Izrisujemo vse zaporedne grafe
+ else{
+ $spremenljivka['break_sub_table']['key'] = $gkey;
+ $spremenljivka['break_sub_table']['sequence'] = $grid['variables'][0]['sequence'];
+
+ $this->displayChart($forSpr,$frequencys,$spremenljivka,$type = 'number');
+ }
+ }
+ }
+ }
+
+ // Izrisujemo tabelo
+ else{
+ # za multi number naredimo po skupinah
+ if ($tip != 20) {
+
+ $rowspan = 3;
+ $colspan = count($sequences);
+
+ $singleWidth = floor(200 / $colspan);
+
+
+ // PRVA VRSTICA
+ $height = $this->getCellHeight($spremenljivka['naslov'].' ('.$spremenljivka['variable'].')', $singleWidth*$colspan);
+
+ $this->pdf->setFont('','B','6');
+ $this->pdf->MultiCell(60, $height, '', 'TLR', 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell($singleWidth*$colspan, $height, $this->encodeText($spremenljivka['naslov'].' ('.$spremenljivka['variable'].')'), 1, 'C', 0, 1, 0 ,0, true);
+
+
+ // DRUGA VRSTICA
+ $text = $forSpremenljivka['naslov'].' ('.$forSpremenljivka['variable'].')';
+ $height = $this->getCellHeight($text, $singleWidth*$colspan);
+
+ // najprej loopamo da dobimo visino celice
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $text = $variable['naslov'].' ('.$variable['variable'].')';
+ $height = ($this->getCellHeight($text, $singleWidth) > $height) ? $this->getCellHeight($text, $singleWidth) : $height;
+ }
+ }
+
+ // se izrisemo celice...
+ $this->pdf->setFont('','B','6');
+ $this->pdf->MultiCell(60, $height, $this->encodeText($forSpremenljivka['naslov'].' ('.$forSpremenljivka['variable'].')'), 'LR', 'C', 0, 0, 0 ,0, true);
+ $this->pdf->setFont('','','6');
+
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $this->pdf->MultiCell($singleWidth, $height, $this->encodeText($variable['naslov'].' ('.$variable['variable'].')'), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ }
+ $this->pdf->MultiCell(1, $height, '', 0, 'C', 0, 1, 0 ,0, true);
+
+
+ // TRETJA VRSTICA
+ $this->pdf->MultiCell(60, 5, '', 'BLR', 'C', 0, 0, 0 ,0, true);
+
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $this->pdf->MultiCell($singleWidth, 5, $this->encodeText('PovpreÄje'), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ }
+ $this->pdf->MultiCell(1, 5, '', 0, 'C', 0, 1, 0 ,0, true);
+
+
+ // VRSTICE S PODATKI
+ foreach ($frequencys AS $fkey => $fkeyFrequency) {
+
+ $height = $this->getCellHeight($forSpremenljivka['options'][$fkey], 60);
+ $this->pdf->MultiCell(60, $height, $this->encodeText($forSpremenljivka['options'][$fkey]), 1, 'C', 0, 0, 0 ,0, true);
+
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ if ($variable['other'] != 1) {
+ $sequence = $variable['sequence'];
+ $this->pdf->MultiCell($singleWidth, $height, self::formatNumber($means[$fkey][$sequence],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),''), 1, 'C', 0, 0, 0 ,0, true);
+
+ $totalMeans[$sequence] += ($this->breakClass->getMeansFromKey($fkeyFrequency[$sequence])*(int)$frequencys[$fkey][$sequence]['validCnt']);
+ $totalFreq[$sequence]+= (int)$frequencys[$fkey][$sequence]['validCnt'];
+ }
+ }
+ }
+ $this->pdf->MultiCell(1, $height, '', 0, 'C', 0, 1, 0 ,0, true);
+ }
+
+ // dodamo Å¡e skupno sumo in povpreÄje
+ $this->pdf->MultiCell(60, 5, $this->encodeText('Skupaj'), 1, 'C', 0, 0, 0 ,0, true);
+
+ $this->pdf->setFont('','B','6');
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ foreach ($grid['variables'] AS $vkey => $variable) {
+
+ $sequence = $variable['sequence'];
+ if ($variable['other'] != 1) {
+ #povpreÄja
+ $totalMean = $totalFreq[$sequence] > 0 ? $totalMeans[$sequence] / $totalFreq[$sequence] : 0;
+ $this->pdf->MultiCell($singleWidth, $height, self::formatNumber($totalMean ,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),''), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ }
+ }
+ $this->pdf->MultiCell(1, $height, '', 0, 'C', 0, 1, 0 ,0, true);
+ $this->pdf->setFont('','','6');
+
+ $this->pdf->ln(10);
+ }
+
+ else {
+ $rowspan = 3;
+ $colspan = count($spremenljivka['grids'][0]['variables']);
+ $singleWidth = floor(200 / $colspan);
+ # za multinumber razdelimo na grupe - skupine
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+
+ $this->pdf->setFont('','B','6');
+ $this->pdf->MultiCell(200, 5, $this->encodeText('Tabela za: '.$spremenljivka['naslov'].' ('.$spremenljivka['variable'].') = '.$grid['naslov'].' ('.$grid['variable'].')'), 0, 'L', 0, 1, 0 ,0, true);
+
+
+ // PRVA VRSTICA
+ $height = $this->getCellHeight($spremenljivka['naslov'].' ('.$spremenljivka['variable'].') - '.$grid['naslov'].' ('.$grid['variable'].')', $singleWidth*$colspan);
+
+ $this->pdf->setFont('','B','6');
+ $this->pdf->MultiCell(60, $height, '', 'TLR', 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell($singleWidth*$colspan, $height, $this->encodeText($spremenljivka['naslov'].' ('.$spremenljivka['variable'].') - '.$grid['naslov'].' ('.$grid['variable'].')'), 1, 'C', 0, 1, 0 ,0, true);
+
+
+ // DRUGA VRSTICA
+ $text = $forSpremenljivka['naslov'].' ('.$forSpremenljivka['variable'].')';
+ $height = $this->getCellHeight($text, $singleWidth*$colspan);
+
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $text = $variable['naslov'].' ('.$variable['variable'].')';
+ $height = ($this->getCellHeight($text, $singleWidth) > $height) ? $this->getCellHeight($text, $singleWidth) : $height;
+ }
+
+ // se izrisemo celice...
+ $this->pdf->setFont('','B','6');
+ $this->pdf->MultiCell(60, $height, $this->encodeText($forSpremenljivka['naslov'].' ('.$forSpremenljivka['variable'].')'), 'LR', 'C', 0, 0, 0 ,0, true);
+ $this->pdf->setFont('','','6');
+
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $text = $variable['naslov'].' ('.$variable['variable'].')';
+ $this->pdf->MultiCell($singleWidth, $height, $this->encodeText($text), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ $this->pdf->MultiCell(1, $height, '', 0, 'C', 0, 1, 0 ,0, true);
+
+
+ // TRETJA VRSTICA
+ $this->pdf->MultiCell(60, 5, '', 'BLR', 'C', 0, 0, 0 ,0, true);
+
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $this->pdf->MultiCell($singleWidth, 5, $this->encodeText('PovpreÄje'), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ $this->pdf->MultiCell(1, 5, '', 0, 'C', 0, 1, 0 ,0, true);
+
+
+ // VRSTICE Z VSEBINO
+ foreach ($forSpremenljivka['options'] AS $okey => $option) {
+
+ $height = $this->getCellHeight($option, 60);
+ $this->pdf->MultiCell(60, $height, $this->encodeText($option), 1, 'C', 0, 0, 0 ,0, true);
+
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $sequence = $variable['sequence'];
+
+ #povpreÄje
+ $this->pdf->MultiCell($singleWidth, $height, self::formatNumber($means[$okey][$sequence],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),''), 1, 'C', 0, 0, 0 ,0, true);
+
+ $totalMeans[$sequence] += ($means[$okey][$sequence]*(int)$frequencys[$okey][$sequence]['validCnt']);
+ $totalFreq[$sequence]+= (int)$frequencys[$okey][$sequence]['validCnt'];
+ }
+ $this->pdf->MultiCell(1, $height,'', 0, 'C', 0, 1, 0 ,0, true);
+ }
+
+ // dodamo Å¡e skupno sumo in povpreÄje
+ $this->pdf->MultiCell(60, 5, $this->encodeText('Skupaj'), 1, 'C', 0, 0, 0 ,0, true);
+
+ $this->pdf->setFont('','B','6');
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $sequence = $variable['sequence'];
+ if ($variable['other'] != 1) {
+ #povpreÄja
+ $totalMean = $totalFreq[$sequence] > 0 ? $totalMeans[$sequence] / $totalFreq[$sequence] : 0;
+ $this->pdf->MultiCell($singleWidth, 5, self::formatNumber($totalMean ,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),''), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ }
+ $this->pdf->MultiCell(1, 5, '', 0, 'C', 0, 1, 0 ,0, true);
+ $this->pdf->setFont('','','6');
+
+
+ $this->pdf->ln(10);
+ }
+ }
+ }
+ }
+
+ function displayBreakTableText($forSpr,$frequencys,$spremenljivka) {
+ global $lang;
+
+ $keysCount = count($frequencys);
+ $sequences = explode('_',$spremenljivka['sequences']);
+ $forSpremenljivka = $this->breakClass->_HEADERS[$forSpr];
+ $tip = $spremenljivka['tip'];
+
+ # izraÄunamo povpreÄja za posamezne sekvence
+ $texts = array();
+ $forSequences = array();
+ foreach ($frequencys AS $fkey => $fkeyFrequency) {
+ foreach ($sequences AS $sequence) {
+ $texts[$fkey][$sequence] = $this->breakClass->getTextFromKey($fkeyFrequency[$sequence]);
+ }
+ }
+
+ $rowspan = 2;
+ $colspan = count($spremenljivka['grids'][0]['variables']);
+
+ $singleWidth = floor(200 / $colspan);
+
+
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+
+ $this->pdf->setFont('','B','6');
+ $this->pdf->MultiCell(200, 5, $this->encodeText('Tabela za: '.$spremenljivka['naslov'].' ('.$spremenljivka['variable'].') = '.$grid['naslov'].' ('.$grid['variable'].')'), 0, 'L', 0, 1, 0 ,0, true);
+
+
+ // PRVA VRSTICA
+ $height1 = $this->getCellHeight($spremenljivka['naslov'].' ('.$spremenljivka['variable'].') - '.$grid['naslov'].' ('.$grid['variable'].')', $singleWidth*$colspan);
+
+ $this->pdf->setFont('','B','6');
+ $this->pdf->MultiCell(60, $height1, '', 'TLR', 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell($singleWidth*$colspan, $height1, $this->encodeText($spremenljivka['naslov'].' ('.$spremenljivka['variable'].') - '.$grid['naslov'].' ('.$grid['variable'].')'), 1, 'C', 0, 1, 0 ,0, true);
+
+
+ // DRUGA VRSTICA
+ $text = $forSpremenljivka['naslov'].' ('.$forSpremenljivka['variable'].')';
+ $height2 = $this->getCellHeight($text, $singleWidth*$colspan);
+
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $text = $variable['naslov'].' ('.$variable['variable'].')';
+ $height2 = ($this->getCellHeight($text, $singleWidth) > $height2) ? $this->getCellHeight($text, $singleWidth) : $height2;
+ }
+
+ // se izrisemo celice...
+ $this->pdf->setFont('','B','6');
+ $this->pdf->setY($this->pdf->getY() - $height1);
+ $this->pdf->MultiCell(60, $height1+$height2, $this->encodeText($forSpremenljivka['naslov'].' ('.$forSpremenljivka['variable'].')'), 'BLR', 'C', 0, 0, 0 ,0, true);
+ $this->pdf->setXY($this->pdf->getX(), $this->pdf->getY() + $height1);
+ $this->pdf->setFont('','','6');
+
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $text = $variable['naslov'].' ('.$variable['variable'].')';
+ $this->pdf->MultiCell($singleWidth, $height2, $this->encodeText($text), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ $this->pdf->MultiCell(1, $height2, '', 0, 'C', 0, 1, 0 ,0, true);
+
+
+ // VRSTICE Z VSEBINO
+ foreach ($forSpremenljivka['options'] AS $okey => $option) {
+
+ // Izracunamo visino najvisje celice
+ $height = $this->getCellHeight($option, 60);
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $sequence = $variable['sequence'];
+ $text = "";
+ if (count($texts[$okey][$sequence]) > 0) {
+ $tempHeight = 0;
+ foreach ($texts[$okey][$sequence] AS $ky => $units) {
+ $text .= $units['text']."\n";
+ }
+ $text = substr($text,0,-2);
+ $height = ($this->getCellHeight($text, $singleWidth) > $height) ? $this->getCellHeight($text, $singleWidth) : $height;
+ }
+ }
+
+ // Izrisemo vrstico
+ $this->pdf->MultiCell(60, $height, $this->encodeText($option), 1, 'C', 0, 0, 0 ,0, true);
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $sequence = $variable['sequence'];
+ if (count($texts[$okey][$sequence]) > 0) {
+ $text = "";
+ foreach ($texts[$okey][$sequence] AS $ky => $units) {
+ $text .= $units['text']."\n";
+ }
+ $text = substr($text,0,-2);
+ $this->pdf->MultiCell($singleWidth, $height, $this->encodeText($text), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ else
+ $this->pdf->MultiCell($singleWidth, $height, '', 1, 'C', 0, 0, 0 ,0, true);
+ }
+ $this->pdf->MultiCell(1, $height,'', 0, 'C', 0, 1, 0 ,0, true);
+ }
+
+ $this->pdf->ln(10);
+ }
+ }
+
+ function displayCrosstabs($forSpr,$frequencys,$spremenljivka) {
+ global $lang;
+
+ //ustvarimo crosstab objekt
+ $this->crosstabClass = new SurveyCrosstabs();
+ $this->crosstabClass->Init($this->anketa['id']);
+
+ $spr1 = $this->spr;
+ $seq1 = $this->seq;
+ $grd1 = 'undefined';
+ foreach ($this->breakClass->_HEADERS[$spr1]['grids'] AS $gid => $grid) {
+ foreach ($grid['variables'] AS $vkey => $vrednost) {
+ if ($vrednost['sequence'] == $seq1) {
+ $grd1 = $gid;
+ }
+ }
+ }
+
+ $spr2 = $spremenljivka['id'];
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ if (($spremenljivka['tip'] == 16 || $spremenljivka['tip'] == 6) && $this->break_charts != 1) {
+
+ $text = 'Tabela za: '.$spremenljivka['naslov'].' ('.$spremenljivka['variable'].') = '.$grid['naslov'];
+ if ($spremenljivka['tip'] != 6) {
+ $text .= ' ('.$grid['variable'].')';
+ }
+ $this->pdf->setFont('','B','6');
+ $this->pdf->MultiCell(200, 5, $this->encodeText($text), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->setFont('','','6');
+ }
+
+ $seq2 = $grid['variables'][0]['sequence'];
+ $grd2 = $gid;
+
+ $this->crosstabClass->setVariables($seq2,$spr2,$grd2,$seq1,$spr1,$grd1);
+
+ if($this->break_charts == 1){
+ $this->crosstabClass->fromBreak = false;
+ $this->displayChart($forSpr,$frequencys,$spremenljivka,$type = 'crosstab');
+ }
+ else{
+ $this->displayCrosstabsTable();
+ }
+ }
+ }
+
+ function displayCrosstabsTable() {
+ global $lang;
+
+ if ($this->crosstabClass->getSelectedVariables(1) !== null && $this->crosstabClass->getSelectedVariables(2) !== null) {
+ $variables1 = $this->crosstabClass->getSelectedVariables(1);
+ $variables2 = $this->crosstabClass->getSelectedVariables(2);
+ foreach ($variables1 AS $v_first) {
+ foreach ($variables2 AS $v_second) {
+
+ $crosstabs = null;
+ $crosstabs_value = null;
+
+ $crosstabs = $this->crosstabClass->createCrostabulation($v_first, $v_second);
+ $crosstabs_value = $crosstabs['crosstab'];
+
+ # podatki spremenljivk
+ $spr1 = $this->crosstabClass->_HEADERS[$v_first['spr']];
+ $spr2 = $this->crosstabClass->_HEADERS[$v_second['spr']];
+
+ $grid1 = $spr1['grids'][$v_first['grd']];
+ $grid2 = $spr2['grids'][$v_second['grd']];
+
+ #Å¡tevilo vratic in Å¡tevilo kolon
+ $cols = count($crosstabs['options1']);
+ $rows = count($crosstabs['options2']);
+
+ # ali prikazujemo vrednosti variable pri spremenljivkah
+ $show_variables_values = $this->crosstabClass->doValues;
+
+ # nastavitve oblike
+ if (($this->crosstabClass->crossChk1 || $this->crosstabClass->crossChk2 || $this->crosstabClass->crossChk3) && ($this->crosstabClass->crossChkEC || $this->crosstabClass->crossChkRE || $this->crosstabClass->crossChkSR || $this->crosstabClass->crossChkAR)) {
+ # dodamo procente in residuale
+ $rowSpan = 3;
+ $numColumnPercent = $this->crosstabClass->crossChk1 + $this->crosstabClass->crossChk2 + $this->crosstabClass->crossChk3;
+ $numColumnResidual = $this->crosstabClass->crossChkEC + $this->crosstabClass->crossChkRE + $this->crosstabClass->crossChkSR + $this->crosstabClass->crossChkAR;
+ $tblColumn = max($numColumnPercent,$numColumnResidual);
+ } else if ($this->crosstabClass->crossChk1 || $this->crosstabClass->crossChk2 || $this->crosstabClass->crossChk3) {
+ # imamo samo procente
+ $rowSpan = 2;
+ $numColumnPercent = $this->crosstabClass->crossChk1 + $this->crosstabClass->crossChk2 + $this->crosstabClass->crossChk3;
+ $numColumnResidual = 0;
+ $tblColumn = $numColumnPercent;
+ } else if ($this->crosstabClass->crossChkEC || $this->crosstabClass->crossChkRE || $this->crosstabClass->crossChkSR || $this->crosstabClass->crossChkAR) {
+ # imamo samo residuale
+ $rowSpan = 2;
+ $numColumnPercent = 0;
+ $numColumnResidual = $this->crosstabClass->crossChkEC + $this->crosstabClass->crossChkRE + $this->crosstabClass->crossChkSR + $this->crosstabClass->crossChkAR;
+ $tblColumn = $numColumnResidual;
+ } else {
+ #prikazujemo samo podatke
+ $rowSpan = 1;
+ $numColumnPercent = 0;
+ $numColumnResidual = 0;
+ $tblColumn = 1;
+ }
+
+ //izracun sirine ene celice
+ if($cols > 0)
+ $singleWidth = ($cols > 2) ? round( 170 / $cols ) : round( 150 / $cols );
+
+ //izracun visine ene celice
+ if($rowSpan == 1)
+ $height = 8;
+ elseif($rowSpan == 2)
+ $height = 10;
+ else
+ $height = 15;
+
+ # izrišemo tabelo
+
+ # najprej izrišemo naslovne vrstice
+ # za multicheckboxe popravimo naslov, na podtip
+ $sub_q1 = null;
+ if ($spr1['tip'] == '6' || $spr1['tip'] == '16' || $spr1['tip'] == '17' || $spr1['tip'] == '19' || $spr1['tip'] == '20') {
+ foreach ($spr1['grids'] AS $grid) {
+ foreach ($grid['variables'] AS $variable) {
+ if ($variable['sequence'] == $v_first['seq']) {
+ $sub_q1 = strip_tags($spr1['naslov']);
+ if ($show_variables_values == true ) {
+ $sub_q1 .= '&nbsp;('.strip_tags($spr1['variable']).')';
+ }
+ if ($spr1['tip'] == '16') {
+ $sub_q1 .= ', ' . strip_tags($grid1['naslov']) . ($show_variables_values == true ? '&nbsp;(' . strip_tags($grid1['variable']) . ')' : '');
+ } else {
+ $sub_q1 .= ', ' . strip_tags($variable['naslov']) . ($show_variables_values == true ? '&nbsp;(' . strip_tags($variable['variable']) . ')' : '');
+ }
+ }
+ }
+ }
+ }
+ if ($sub_q1 == null) {
+ $sub_q1 .= strip_tags($spr1['naslov']);
+ $sub_q1 .= ($show_variables_values == true ? '&nbsp;('.strip_tags($spr1['variable']).')' : '');
+ }
+
+ $sub_q2 = null;
+ if ($spr2['tip'] == '6' || $spr2['tip'] == '16' || $spr2['tip'] == '17' || $spr2['tip'] == '19' || $spr2['tip'] == '20') {
+ foreach ($spr2['grids'] AS $grid) {
+ foreach ($grid['variables'] AS $variable) {
+ if ($variable['sequence'] == $v_second['seq']) {
+ $sub_q2 = strip_tags($spr2['naslov']);
+ if ($show_variables_values == true) {
+ $sub_q2 .= '&nbsp;('.strip_tags($spr2['variable']).')';
+ }
+ if ($spr2['tip'] == '16') {
+ $sub_q2.= ', ' . strip_tags($grid2['naslov']) . ($show_variables_values == true ? '&nbsp;(' . strip_tags($grid2['variable']) . ')' : '');
+ } else {
+ $sub_q2.= ', ' . strip_tags($variable['naslov']) . ($show_variables_values == true ? '&nbsp;(' . strip_tags($variable['variable']) . ')' : '');
+ }
+ }
+ }
+ }
+ }
+ if ($sub_q2 == null) {
+ $sub_q2 .= strip_tags($spr2['naslov']);
+ $sub_q2 .= ($show_variables_values == true ? '&nbsp;('.strip_tags($spr2['variable']).')' : '');
+ }
+
+ $linecount = $this->pdf->getNumLines($this->encodeText($sub_q1), 170);
+ $firstHeight = ( $linecount == 1 ? 4.7 : (4.7 + ($linecount-1)*3.3) );
+
+ //prva vrstica
+ $this->pdf->setFont('','B','6');
+ $this->pdf->MultiCell(25, $firstHeight, $this->encodeText(''), 0, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(20, $firstHeight, $this->encodeText(''), 0, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell($singleWidth * count($crosstabs['options1']), $firstHeight, $this->encodeText($sub_q1), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell($singleWidth, $firstHeight, $this->encodeText(''), 0, 'C', 0, 1, 0 ,0, true);
+
+ //druga vrstica
+ $this->pdf->setFont('','','6');
+ $this->pdf->MultiCell(25, 7, $this->encodeText(''), 0, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(20, 7, $this->encodeText(''), 0, 'C', 0, 0, 0 ,0, true);
+
+ if (count($crosstabs['options1']) > 0 ) {
+ foreach ($crosstabs['options1'] as $ckey1 =>$crossVariabla) {
+ #ime variable
+ $text = $crossVariabla['naslov'];
+ # Äe ni tekstovni odgovor dodamo key
+ if ($crossVariabla['type'] != 't') {
+ $text .= ' ( '.$ckey1.' )';
+ }
+ $this->pdf->MultiCell($singleWidth, 7, $this->encodeText($text), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ }
+
+ $this->pdf->MultiCell($singleWidth, 7, $this->encodeText($lang['srv_analiza_crosstab_skupaj']), 1, 'C', 0, 1, 0 ,0, true);
+
+ //VMESNE VRSTICE
+ $cntY = 1;
+ if (count($crosstabs['options2']) > 0) {
+
+ //POSAMEZNA VMESNA VRSTICA
+ foreach ($crosstabs['options2'] as $ckey2 =>$crossVariabla2) {
+
+ if( $cntY == 1 )
+ $border = 'TLR';
+ elseif( $cntY == $rows )
+ $border = 'BLR';
+ else
+ $border = 'LR';
+
+ if ( $cntY == ceil($rows/2) || $rows == 1 ) {
+ # ime variable
+ $this->pdf->setFont('','B','6');
+ $this->pdf->MultiCell(25, $height, $this->encodeText($sub_q2), $border, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->setFont('','','6');
+ }
+ else{
+ $this->pdf->MultiCell(25, $height, $this->encodeText(''), $border, 'C', 0, 0, 0 ,0, true);
+ }
+ $cntY++;
+
+ $text = $crossVariabla2['naslov'];
+ if ($crossVariabla2['type'] !== 't') {
+ $text .= ' ('.$ckey2.')';
+ }
+ $this->pdf->MultiCell(20, $height, $this->encodeText($text), 1, 'C', 0, 0, 0 ,0, true);
+
+ //del vrstice z vsebino
+ $this->pdf->setFont('','','5');
+ foreach ($crosstabs['options1'] as $ckey1 => $crossVariabla1) {
+
+ $data = array();
+
+ if ($this->crosstabClass->crossChk0) {
+ # frekvence crostabov
+ $data[] = ((int)$crosstabs_value[$ckey1][$ckey2] > 0) ? $crosstabs_value[$ckey1][$ckey2] : 0;
+ }
+
+ if ($this->crosstabClass->crossChk1) {
+ #procent vrstica
+ $data[] = $this->formatNumber($this->crosstabClass->getCrossTabPercentage($crosstabs['sumaVrstica'][$ckey2], $crosstabs_value[$ckey1][$ckey2]), 2, '%');
+ }
+ if ($this->crosstabClass->crossChk2) {
+ #procent stolpec
+ $data[] = $this->formatNumber($this->crosstabClass->getCrossTabPercentage($crosstabs['sumaStolpec'][$ckey1], $crosstabs_value[$ckey1][$ckey2]), 2, '%');
+ }
+ if ($this->crosstabClass->crossChk3) {
+ #procent skupni
+ $data[] = $this->formatNumber($this->crosstabClass->getCrossTabPercentage($crosstabs['sumaSkupna'], $crosstabs_value[$ckey1][$ckey2]), 2, '%');
+ }
+
+ # residuali
+ if ($this->crosstabClass->crossChkEC) {
+ $data[] = $this->formatNumber($crosstabs['exC'][$ckey1][$ckey2], 3, '');
+ }
+ if ($this->crosstabClass->crossChkRE) {
+ $data[] = $this->formatNumber($crosstabs['res'][$ckey1][$ckey2], 3, '');
+ }
+ if ($this->crosstabClass->crossChkSR) {
+ $data[] = $this->formatNumber($crosstabs['stR'][$ckey1][$ckey2], 3, '');
+ }
+ if ($this->crosstabClass->crossChkAR) {
+ $data[] = $this->formatNumber($crosstabs['adR'][$ckey1][$ckey2], 3, '');
+ }
+
+ $this->displayCell($data, $singleWidth, $rowSpan, $this->crosstabClass->crossChk0, $numColumnPercent, $numColumnResidual);
+ }
+
+ //se zadnji stolpec - vedno risemo
+ $data = array();
+
+ if ($this->crosstabClass->crossChk0) {
+ # suma po vrsticah
+ $data[] = (int)$crosstabs['sumaVrstica'][$ckey2];
+ }
+ if ($this->crosstabClass->crossChk1 || $this->crosstabClass->crossChk2 || $this->crosstabClass->crossChk3) {
+ # suma po vrsticah v procentih
+ if ($this->crosstabClass->crossChk1) {
+ $data[] = $this->formatNumber(100, 2, '%');
+ }
+ if ($this->crosstabClass->crossChk2) {
+ $data[] = $this->formatNumber( ($crosstabs['sumaSkupna'] > 0 ? (100 * $crosstabs['sumaVrstica'][$ckey2] / $crosstabs['sumaSkupna']) : 0), 2, '%');
+ }
+ if ($this->crosstabClass->crossChk3) {
+ $data[] = $this->formatNumber( ($crosstabs['sumaSkupna'] > 0 ? (100 * $crosstabs['sumaVrstica'][$ckey2] / $crosstabs['sumaSkupna']) : 0), 2, '%');
+ }
+ }
+
+ $this->displayCell($data, $singleWidth, $rowSpan, $this->crosstabClass->crossChk0, $numColumnPercent, 0);
+ $this->pdf->MultiCell(1, $height, '', 0, 'C', 0, 1, 0 ,0, true);
+
+ $this->pdf->setFont('','','6');
+ }
+ }
+
+
+ // skupni sestevki po stolpcih - ZADNJA VRSTICA
+ //popravimo stevilo vrstic (brez residualov)
+ if($this->crosstabClass->crossChkEC || $this->crosstabClass->crossChkRE || $this->crosstabClass->crossChkSR || $this->crosstabClass->crossChkAR)
+ $rowSpan--;
+
+ //izracun visine ene celice
+ if($rowSpan == 1)
+ $height = 8;
+ elseif($rowSpan == 2)
+ $height = 10;
+ else
+ $height = 15;
+
+ $this->pdf->MultiCell(25, $height, $this->encodeText(''), 'T', 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(20, $height, $this->encodeText($lang['srv_analiza_crosstab_skupaj']), 1, 'C', 0, 0, 0 ,0, true);
+
+ $this->pdf->setFont('','','5');
+
+ if (count($crosstabs['options1']) > 0){
+ foreach ($crosstabs['options1'] as $ckey1 => $crossVariabla1) {
+
+ $data = array();
+
+ # prikazujemo eno od treh možnosti
+ if ($this->crosstabClass->crossChk0) {
+ # suma po stolpcih
+ $data[] = (int)$crosstabs['sumaStolpec'][$ckey1];
+ }
+ if ($this->crosstabClass->crossChk1 || $this->crosstabClass->crossChk2 || $this->crosstabClass->crossChk3) {
+ # suma po stolpcih v procentih
+ if ($this->crosstabClass->crossChk1) {
+ $data[] = $this->formatNumber( ($crosstabs['sumaSkupna'] > 0 ? (100 * $crosstabs['sumaStolpec'][$ckey1] / $crosstabs['sumaSkupna']) : 0), 2, '%');
+ }
+ if ($this->crosstabClass->crossChk2) {
+ $data[] = $this->formatNumber(100, 2, '%');
+ }
+ if ($this->crosstabClass->crossChk3)
+ {
+ $data[] = $this->formatNumber( ($crosstabs['sumaSkupna'] > 0 ? (100 * $crosstabs['sumaStolpec'][$ckey1] / $crosstabs['sumaSkupna']) : 0), 2, '%');
+ }
+ }
+
+ $this->displayCell($data, $singleWidth, $rowSpan, $this->crosstabClass->crossChk0, $numColumnPercent, 0);
+ }
+
+ # zadnja celica z skupno sumo
+ $data = array();
+
+ if ($this->crosstabClass->crossChk0) {
+ # skupna suma
+ $data[] = (int)$crosstabs['sumaSkupna'];
+ }
+ if ($this->crosstabClass->crossChk1 || $this->crosstabClass->crossChk2 || $this->crosstabClass->crossChk3) {
+ # suma po stolpcih v procentih
+ if ($this->crosstabClass->crossChk1) {
+ $data[] = $this->formatNumber(100, 2, '%');
+ }
+ if ($this->crosstabClass->crossChk2) {
+ $data[] = $this->formatNumber(100, 2, '%');
+ }
+ if ($this->crosstabClass->crossChk3) {
+ $data[] = $this->formatNumber(100, 2, '%');
+ }
+ }
+
+ $this->displayCell($data, $singleWidth, $rowSpan, $this->crosstabClass->crossChk0, $numColumnPercent, 0);
+ }
+
+ $this->pdf->setFont('','','6');
+ $this->pdf->ln(20);
+ }
+ }
+ }
+ }
+
+ function displayChart($forSpr,$frequencys,$spremenljivka,$type){
+ global $lang;
+
+ // Zgeneriramo id vsake tabele (glede na izbrani spremenljivki za generiranje)
+ if($type == 'crosstab'){
+ $chartID = implode('_', $this->crosstabClass->variabla1[0]);
+ $chartID .= '_'.$this->crosstabClass->variabla2[0]['seq'].'_'.$this->crosstabClass->variabla2[0]['spr'].'_undefined';
+ $chartID .= '_counter_0'/*.$this->crosstabClass->counter*/;
+
+ $settings = $this->sessionData['crosstab_charts'][$chartID];
+ }
+
+ else{
+ if($spremenljivka['tip'] == 20){
+ // Preberemo za kateri grid izrisujemo tabelo
+ $gkey = $spremenljivka['break_sub_table']['key'];
+
+ $spr1 = $this->sessionData['break']['seq'].'-'. $this->sessionData['break']['spr'].'-undefined';
+ $spr2 = $spremenljivka['grids'][$gkey]['variables'][0]['sequence'].'-'.$spremenljivka['id'].'-undefined';
+ }
+ else{
+ $spr1 = $this->sessionData['break']['seq'].'-'. $this->sessionData['break']['spr'].'-undefined';
+ $spr2 = $spremenljivka['grids'][0]['variables'][0]['sequence'].'-'.$spremenljivka['id'].'-undefined';
+ }
+
+ $chartID = $spr1.'_'.$spr2;
+
+ $settings = $this->sessionData['break_charts'][$chartID];
+ }
+
+ $imgName = $settings['name'];
+
+ $size = getimagesize('pChart/Cache/'.$imgName);
+ $height = $size[1] / 5;
+
+ if($this->pdf->getY() + $height > 150)
+ {
+ $this->pdf->AddPage();
+ }
+ else
+ $this->pdf->setY($this->pdf->getY());
+
+
+ // Naslov posameznega grafa
+ $title = $spremenljivka['naslov'] . ' ('.$spremenljivka['variable'].')';
+ if($spremenljivka['tip'] == 20){
+ $grid = $spremenljivka['grids'][$gkey];
+ $subtitle = $grid['naslov'] . ' ('.$grid['variable'].')';
+ }
+ elseif($spremenljivka['tip'] == 16 || $spremenljivka['tip'] == 6){
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ if($this->crosstabClass->variabla1[0]['seq'] == $grid['variables'][0]['sequence']){
+ $subtitle = $grid['naslov'];
+ if ($spremenljivka['tip'] != 6) {
+ $subtitle .= ' ('.$grid['variable'].')';
+ }
+ break;
+ }
+ }
+ }
+
+ $this->pdf->Ln(LINE_BREAK);
+
+ $this->pdf->setFont('','b','6');
+ $this->pdf->MultiCell(30, 5,'', 0, 'C', 0, 0, 0 ,0, true);
+
+ $this->pdf->MultiCell(200, 5, $this->encodeText($title), 0, 'C', 0, 1, 0 ,0, true);
+ if($spremenljivka['tip'] == 20 || $spremenljivka['tip'] == 16 || $spremenljivka['tip'] == 6){
+ $this->pdf->MultiCell(30, 5,'', 0, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(200, 5, $this->encodeText($subtitle), 0, 'C', 0, 1, 0 ,0, true);
+ }
+
+ $this->pdf->setFont('','','6');
+
+ $this->pdf->Image('pChart/Cache/'.$imgName, $x='', $y='', $w=200, $h, $type='PNG', $link='', $align='N', $resize=true, $dpi=1600, $palign='C', $ismask=false, $imgmask=false, $border=0);
+
+ $this->pdf->Ln(LINE_BREAK);
+ }
+
+
+ /*
+ prikazemo posamezno celico s podatki
+ $data - vsebina (array)
+ $width - sirina celice
+ $numRows - stevilo vrstic (1, 2 ali 3)
+ frekvence - da ali ne
+ $numColumnPercent - stevilo stolpcev pri procentih (1, 2 ali 3)
+ $numColumnResidual - stevilo stolpcev pri procentih (1, 2, 3 ali 4)
+ */
+ function displayCell($data, $width, $numRows, $frekvence, $numColumnPercent, $numColumnResidual){
+
+ $height = ($numRows == 1 ? 8 : 5);
+ $fullHeight = ($height == 8 ? $height : $numRows*$height);
+ $i=0;
+
+ //preberemo pozicijo - zacetek celice
+ $y = $this->pdf->GetY();
+ $x = $this->pdf->GetX();
+
+ $this->pdf->setDrawColor(170, 170, 170);
+
+ //izrisemo frekvence
+ if($frekvence == 1){
+ $this->pdf->MultiCell($width, $height, $this->encodeText($data[$i]), 1, 'C', 0, 1, 0 ,0, true);
+ $i++;
+ }
+
+ if($numColumnPercent > 0){
+
+ $this->pdf->setX($x);
+ $singleWidth = round($width/$numColumnPercent);
+
+ for($j=1; $j<$numColumnPercent; $j++){
+ $this->pdf->MultiCell($singleWidth, $height, $this->encodeText($data[$i]), 1, 'C', 0, 0, 0 ,0, true);
+ $i++;
+ }
+ $this->pdf->MultiCell($width - (($numColumnPercent-1)*$singleWidth), $height, $this->encodeText($data[$i]), 1, 'C', 0, 1, 0 ,0, true);
+ $i++;
+ }
+
+ if($numColumnResidual > 0){
+
+ $this->pdf->setX($x);
+ $singleWidth = round($width/$numColumnResidual);
+
+ for($j=1; $j<$numColumnResidual; $j++){
+ $this->pdf->MultiCell($singleWidth, $height, $this->encodeText($data[$i]), 1, 'C', 0, 0, 0 ,0, true);
+ $i++;
+ }
+ $this->pdf->MultiCell($width - (($numColumnResidual-1)*$singleWidth), $height, $this->encodeText($data[$i]), 1, 'C', 0, 1, 0 ,0, true);
+ $i++;
+ }
+
+ //zaradi preglednosti narisemo okvir celotne celice
+ $this->pdf->setDrawColor(0, 0, 0, 255);
+ $this->pdf->SetXY($x, $y);
+ $this->pdf->MultiCell($width, $fullHeight, '', 1, 'C', 0, 1, 0 ,0, true);
+
+ //na koncu nastavimo pozicijo na pravo mesto
+ $this->pdf->SetXY($x+$width, $y);
+ }
+
+
+
+ /*Skrajsa tekst in doda '...' na koncu*/
+ function snippet($text,$length=64,$tail="...")
+ {
+ $text = trim($text);
+ $txtl = strlen($text);
+ if($txtl > $length)
+ {
+ for($i=1;$text[$length-$i]!=" ";$i++)
+ {
+ if($i == $length)
+ {
+ return substr($text,0,$length) . $tail;
+ }
+ }
+ $text = substr($text,0,$length-$i+1) . $tail;
+ }
+ return $text;
+ }
+
+ function drawLine()
+ {
+ $cy = $this->pdf->getY();
+ $this->pdf->Line(15, $cy , 195, $cy , $this->currentStyle);
+ }
+
+ function setUserId($usrId) {$this->anketa['uid'] = $usrId;}
+ function getUserId() {return ($this->anketa['uid'])?$this->anketa['uid']:false;}
+
+ function formatNumber($value,$digit=0,$sufix="")
+ {
+ if ( $value <> 0 && $value != null )
+ $result = round($value,$digit);
+ else
+ $result = "0";
+ $result = number_format($result, $digit, ',', '.').$sufix;
+
+ return $result;
+ }
+
+ function getCellHeight($string, $width){
+
+ $this->pdf->startTransaction();
+ // get the number of lines calling you method
+ $linecount = $this->pdf->MultiCell($width, 0, $string, 0, 'L', 0, 0, '', '', true, 0, false, true, 0);
+ // restore previous object
+ $this->pdf = $this->pdf->rollbackTransaction();
+
+ $height = ($linecount <= 1) ? 4.7 : $linecount * ($this->pdf->getFontSize() * $this->pdf->getCellHeightRatio()) + 2;
+
+ return $height;
+ }
+}
+
+?> \ No newline at end of file
diff --git a/admin/exportclases/class.pdfIzvozAnalizaCReport.php b/admin/exportclases/class.pdfIzvozAnalizaCReport.php
new file mode 100644
index 0000000..8341b45
--- /dev/null
+++ b/admin/exportclases/class.pdfIzvozAnalizaCReport.php
@@ -0,0 +1,1640 @@
+<?php
+
+ global $site_path;
+
+ include_once('../../function.php');
+ include_once('../survey/definition.php');
+ include_once('../exportclases/class.pdfIzvozAnalizaFunctions.php');
+ require_once('../exportclases/class.enka.pdf.php');
+
+ define("ALLOW_HIDE_ZERRO_REGULAR", false); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za navadne odgovore
+ define("ALLOW_HIDE_ZERRO_MISSING", true); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za missinge
+
+ define("NUM_DIGIT_AVERAGE", 2, true); // stevilo digitalnih mest za povprecje
+ define("NUM_DIGIT_DEVIATION", 2, true); // stevilo digitalnih mest za povprecje
+
+ define("M_ANALIZA_DESCRIPTOR", "descriptor", true);
+ define("M_ANALIZA_FREQUENCY", "frequency", true);
+
+ define("FNT_FREESERIF", "freeserif", true);
+ define("FNT_FREESANS", "freesans", true);
+ define("FNT_HELVETICA", "helvetica", true);
+
+ define("FNT_MAIN_TEXT", FNT_FREESANS, true);
+ define("FNT_QUESTION_TEXT", FNT_FREESANS, true);
+ define("FNT_HEADER_TEXT", FNT_FREESANS, true);
+
+ define("FNT_MAIN_SIZE", 10, true);
+ define("FNT_QUESTION_SIZE", 9, true);
+ define("FNT_HEADER_SIZE", 10, true);
+
+ define("RADIO_BTN_SIZE", 3, true);
+ define("CHCK_BTN_SIZE", 3, true);
+ define("LINE_BREAK", 6, true);
+
+ define ('PDF_MARGIN_HEADER', 8);
+ define ('PDF_MARGIN_FOOTER', 12);
+ define ('PDF_MARGIN_TOP', 18);
+ define ('PDF_MARGIN_BOTTOM', 18);
+ define ('PDF_MARGIN_LEFT', 15);
+ define ('PDF_MARGIN_RIGHT', 15);
+
+
+/** Class za generacijo pdf-a
+ *
+ * @desc: po novem je potrebno form elemente generirati ro�no kot slike
+ *
+ */
+class PdfIzvozAnalizaCReport {
+
+ var $ank_id; // trenutna anketa
+ var $usr_id; // user
+
+ var $pi=array('canCreate'=>false); // za shrambo parametrov in sporocil
+ var $pdf;
+ var $currentStyle;
+ var $db_table = '';
+
+ private $headFileName = null; # pot do header fajla
+ private $dataFileName = null; # pot do data fajla
+ private $dataFileStatus = null; # status data datoteke
+
+ public $crosstabVars = array();
+ public $meanData1;
+ public $meanData2;
+
+ var $creportProfile = 0; // Izbran profil porocila
+
+ var $sessionData; // podatki ki so bili prej v sessionu - za nastavitve, ki se prenasajo v izvoze...
+
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null)
+ {
+ global $site_path;
+ global $global_user_id;
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) )
+ {
+ $this->ank_id = $anketa;
+
+ SurveyAnalysis::Init($this->ank_id);
+ SurveyAnalysis::$setUpJSAnaliza = false;
+
+ // Nastavimo pravi profil porocila
+ $this->creportProfile = SurveyUserSetting :: getInstance()->getSettings('default_creport_profile');
+ $this->creportProfile = isset($this->creportProfile) ? $this->creportProfile : 0;
+
+ // Testiramo kako je obrnjen dokument (ce vsebuje crosstabe, means ali ttest je lanscape)
+ $orientation = ($this->landscapeTest()) ? 'L' : 'P';
+
+ // create new PDF document
+ $this->pdf = new enka_TCPDF($orientation, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
+
+ // Poskrbimo za datoteko s podatki
+ $SDF = SurveyDataFile::get_instance();
+ $SDF->init($this->ank_id);
+ $SDF->prepareFiles();
+
+ $this->headFileName = $SDF->getHeaderFileName();
+ $this->dataFileName = $SDF->getDataFileName();
+ $this->dataFileStatus = $SDF->getStatus();
+
+ // Inicializiramo in polovimo nastavitve missing profila
+ SurveyStatusProfiles::Init($this->ank_id);
+
+ SurveyMissingProfiles :: Init($this->ank_id,$global_user_id);
+ SurveyConditionProfiles :: Init($this->ank_id, $global_user_id);
+ SurveyZankaProfiles :: Init($this->ank_id, $global_user_id);
+ SurveyTimeProfiles :: Init($this->ank_id, $global_user_id);
+
+ SurveyDataSettingProfiles :: Init($this->ank_id);
+
+ //polovimo podatke o nastavitvah trenutnega profila (missingi..)
+ SurveyAnalysis::$missingProfileData = SurveyMissingProfiles::getProfile(SurveyAnalysis::$currentMissingProfile);
+ #preberemo HEADERS iz datoteke
+ SurveyAnalysis::$_HEADERS = unserialize(file_get_contents($this->headFileName));
+ # odstranimo sistemske variable tipa email, ime, priimek, geslo
+ SurveyAnalysis::removeSystemVariables();
+ # polovimo frekvence
+ SurveyAnalysis::getFrequencys();
+
+ // preberemo nastavitve iz baze (prej v sessionu)
+ SurveyUserSession::Init($this->ank_id);
+ $this->sessionData = SurveyUserSession::getData();
+ }
+ else
+ {
+ $this->pi['msg'] = "Anketa ni izbrana!";
+ $this->pi['canCreate'] = false;
+ return false;
+ }
+ $_GET['a'] = A_ANALYSIS;
+
+ if ( SurveyInfo::getInstance()->SurveyInit($this->ank_id) && $this->init())
+ {
+ $this->usr_id = $global_user_id;
+ SurveyUserSetting::getInstance()->Init($this->ank_id, $this->usr_id);
+ }
+ else
+ return false;
+
+ // ce smo prisli do tu je vse ok
+ $this->pi['canCreate'] = true;
+
+ return true;
+ }
+
+ // SETTERS && GETTERS
+
+ function checkCreate()
+ {
+ return $this->pi['canCreate'];
+ }
+ function getFile($fileName)
+ {
+ //Close and output PDF document
+ ob_end_clean();
+ $this->pdf->Output($fileName, 'I');
+ }
+
+
+ function init()
+ {
+ global $lang;
+
+ // array used to define the language and charset of the pdf file to be generated
+ $language_meta = Array();
+ $language_meta['a_meta_charset'] = 'UTF-8';
+ $language_meta['a_meta_dir'] = 'ltr';
+ $language_meta['a_meta_language'] = 'sl';
+ $language_meta['w_page'] = $lang['page'];
+
+ //set some language-dependent strings
+ $this->pdf->setLanguageArray($language_meta);
+
+ //set margins
+ $this->pdf->setPrintHeaderFirstPage(true);
+ $this->pdf->setPrintFooterFirstPage(true);
+ $this->pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
+ $this->pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
+ $this->pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
+
+ // set header and footer fonts
+ $this->pdf->setHeaderFont(Array(FNT_HEADER_TEXT, "I", FNT_HEADER_SIZE));
+ $this->pdf->setFooterFont(Array(FNT_HEADER_TEXT, 'I', FNT_HEADER_SIZE));
+
+
+ // set document information
+ $this->pdf->SetAuthor('An Order Form');
+ $this->pdf->SetTitle('An Order');
+ $this->pdf->SetSubject('An Order');
+
+ //nastavimo datum za footer
+ $this->pdf->SetFooterDate(date('d.m.Y'));
+
+ // set default header data
+ $this->pdf->SetHeaderData(null, null, "www.1ka.si", $this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()));
+
+ //set auto page breaks
+ $this->pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
+
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', FNT_MAIN_SIZE);
+ //set image scale factor
+ $this->pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
+ return true;
+ }
+
+ function encodeText($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace(array("&scaron;","&#353;","&#269;"),array("Å¡","Å¡","Ä"),$text);
+ return strip_tags($text);
+ }
+
+ function createPdf()
+ {
+ global $site_path;
+ global $lang;
+
+ // izpisemo prvo stran
+ //$this->createFrontPage();
+
+ $this->pdf->AddPage();
+
+ $what = 'creport_title_profile_'.$this->creportProfile;
+ $sqlT = sisplet_query("SELECT value FROM srv_user_setting_for_survey WHERE sid='$this->ank_id' AND uid='$this->usr_id' AND what='$what'");
+
+ if(mysqli_num_rows($sqlT) == 0){
+ $titleString = $lang['export_analisys_creport'].': '.SurveyInfo::getInstance()->getSurveyTitle();
+ }
+ else{
+ $rowT = mysqli_fetch_array($sqlT);
+ $titleString = $rowT['value'];
+ }
+
+ $this->pdf->setFont('','B','11');
+ $this->pdf->MultiCell(150, 5, $this->encodeText($titleString), 0, 'L', 0, 1, 0 ,0, true);
+
+ $this->pdf->setDrawColor(128, 128, 128);
+ $this->pdf->setFont('','','6');
+
+ $this->pdf->ln(10);
+
+ if ($this->dataFileStatus == FILE_STATUS_NO_DATA || $this->dataFileStatus == FILE_STATUS_NO_FILE || $this->dataFileStatus == FILE_STATUS_SRV_DELETED) {
+ $this->pdf->MultiCell(150, 5, 'NAPAKA!!! Manjkajo datoteke s podatki.', 0, 'L', 0, 1, 0 ,0, true);
+ }
+ else{
+ $sql = sisplet_query("SELECT * FROM srv_custom_report WHERE ank_id='$this->ank_id' AND usr_id='$this->usr_id' AND profile='$this->creportProfile' ORDER BY vrstni_red ASC");
+ if(mysqli_num_rows($sql) > 0){
+
+ // Loop po vseh dodanih elementih porocila
+ while($row = mysqli_fetch_array($sql)){
+
+ switch($row['type']){
+
+ // sumarnik
+ case '1':
+ // naslov elementa
+ $this->displayTitle($row);
+
+ $this->displaySum($row);
+
+ // Komentar elementa
+ $this->displayComment($row['text']);
+
+ $this->pdf->Ln(LINE_BREAK*2);
+ break;
+
+ // frekvence
+ case '2':
+ // naslov elementa
+ $this->displayTitle($row);
+
+ $this->displayFreq($row);
+
+ // Komentar elementa
+ $this->displayComment($row['text']);
+
+ $this->pdf->Ln(LINE_BREAK*2);
+ break;
+
+ // opisne
+ case '3':
+ // naslov elementa
+ $this->displayTitle($row);
+
+ $this->displayDesc($row);
+
+ // Komentar elementa
+ $this->displayComment($row['text']);
+
+ $this->pdf->Ln(LINE_BREAK*2);
+ break;
+
+ // grafi
+ case '4':
+ // naslov elementa
+ $this->displayTitle($row);
+
+ $this->displayChart($row);
+
+ // Komentar elementa
+ $this->displayComment($row['text']);
+
+ $this->pdf->Ln(LINE_BREAK*2);
+ break;
+
+ // crosstab
+ case '5':
+ // naslov elementa
+ $this->displayTitle($row);
+
+ // tabela
+ if($row['sub_type'] == '0')
+ $this->displayCrosstab($row);
+ // graf
+ else
+ $this->displayCrosstabChart($row);
+
+ // Komentar elementa
+ $this->displayComment($row['text']);
+
+ $this->pdf->Ln(LINE_BREAK*2);
+ break;
+
+ // mean
+ case '6':
+ // naslov elementa
+ $this->displayTitle($row);
+
+ // tabela
+ if($row['sub_type'] == '0')
+ $this->displayMean($row);
+ // graf
+ else
+ $this->displayMeanChart($row);
+
+ // Komentar elementa
+ $this->displayComment($row['text']);
+
+ $this->pdf->Ln(LINE_BREAK*2);
+ break;
+
+ // ttest
+ case '7':
+ // naslov elementa
+ $this->displayTitle($row);
+
+ // tabela
+ if($row['sub_type'] == '0')
+ $this->displayTTest($row);
+ // graf
+ else
+ $this->displayTTestChart($row);
+
+ // Komentar elementa
+ $this->displayComment($row['text']);
+
+ $this->pdf->Ln(LINE_BREAK*2);
+ break;
+
+ // text
+ case '8':
+ $this->displayText($row['text']);
+
+ $this->pdf->Ln(LINE_BREAK*2);
+ break;
+
+ // break
+ case '9':
+ // naslov elementa
+ $this->displayTitle($row);
+
+ // tabela
+ if($row['sub_type'] == '0')
+ $this->displayBreak($row);
+ // graf
+ else
+ $this->displayBreakChart($row);
+
+ // Komentar elementa
+ $this->displayComment($row['text']);
+
+ $this->pdf->Ln(LINE_BREAK*2);
+ break;
+
+ // page break
+ case '-1':
+ if($this->pdf->getY() > 30)
+ $this->pdf->AddPage();
+
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ // Izpisemo sumarnik element
+ function displaySum($element){
+
+ $spid = $element['spr1'];
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ # preverjamo ali je meta
+ if (($spremenljivka['tip'] != 'm')
+ && (!isset($_spid) || (isset($_spid) && $_spid == $spid))
+ && (($global_user_id === 0 || $global_user_id === null) || in_array($spremenljivka['tip'], SurveyAnalysis::$_FILTRED_TYPES ) )) {
+
+ # ali imamo sfiltrirano spremenljivko
+ //if (isset(SurveyAnalysis::$_FILTRED_VARIABLES[$spid])) {
+
+ pdfIzvozAnalizaFunctions::init($this->ank_id, $this, $from='sums');
+
+ # prikazujemo v odvisnosti od kategorije spremenljivke
+ switch ($spremenljivka['tip']) {
+ case 1:
+ # radio - prikaže navpiÄno
+ pdfIzvozAnalizaFunctions::sumVertical($spid,'sums');
+ break;
+
+ case 2:
+ #checkbox Äe je dihotomna:
+ pdfIzvozAnalizaFunctions::sumVerticalCheckbox($spid,'sums');
+ break;
+
+ case 3:
+ # dropdown - prikjaže navpiÄno
+ pdfIzvozAnalizaFunctions::sumVertical($spid,'sums');
+ break;
+
+ case 6:
+ # multigrid
+ pdfIzvozAnalizaFunctions::sumHorizontal($spid,'sums');
+ break;
+
+ case 16:
+ #multicheckbox Äe je dihotomna:
+ pdfIzvozAnalizaFunctions::sumMultiHorizontalCheckbox($spid,'sums');
+ break;
+
+ case 17:
+ #razvrÅ¡Äanje Äe je ordinalna
+ pdfIzvozAnalizaFunctions::sumHorizontal($spid,'sums');
+ break;
+
+ case 4: # text
+ case 8: # datum
+ pdfIzvozAnalizaFunctions::sumTextVertical($spid,'sums');
+ break;
+
+ case 21: # besedilo*
+ # varabla tipa »besedilo« je v sumarniku IDENTIČNA kot v FREKVENCAH.
+ if ($spremenljivka['cnt_all'] == 1) {
+ // Äe je enodimenzionalna prikažemo kot frekvence
+ // predvsem zaradi vprašanj tipa: language, email...
+ pdfIzvozAnalizaFunctions::sumTextVertical($spid,'sums');
+ } else {
+ pdfIzvozAnalizaFunctions::sumMultiText($spid,'sums');
+ }
+ break;
+
+ case 19: # multitext
+ pdfIzvozAnalizaFunctions::sumMultiText($spid,'sums');
+ break;
+
+ case 7:
+ case 18:
+ case 22:
+ # variabla tipa »število« je v sumarniku identiÄna kot v DESCRIPTIVES.
+ pdfIzvozAnalizaFunctions::sumNumberVertical($spid,'sums');
+ break;
+
+ case 20:
+ # variabla tipa »število« je v sumarniku identiÄna kot v DESCRIPTIVES.
+ pdfIzvozAnalizaFunctions::sumMultiNumber($spid,'sums');
+ break;
+
+ case 5:
+ # nagovor
+ pdfIzvozAnalizaFunctions::sumNagovor($spid,'sums');
+ break;
+ }
+
+ //}
+
+ } // end if $spremenljivka['tip'] != 'm'
+ }
+
+ // Izpisemo frekvence element
+ function displayFreq($element){
+
+ $spid = $element['spr1'];
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ # preverjamo ali je meta
+ if (($spremenljivka['tip'] != 'm')
+ && (!isset($_spid) || (isset($_spid) && $_spid == $spid))
+ && (($global_user_id === 0 || $global_user_id === null) || in_array($spremenljivka['tip'], SurveyAnalysis::$_FILTRED_TYPES ) )) {
+
+ # ali imamo sfiltrirano spremenljivko
+ //if (isset(SurveyAnalysis::$_FILTRED_VARIABLES[$spid])) {
+
+ pdfIzvozAnalizaFunctions::init($this->ank_id, $this, $from='freq');
+
+ # prikazujemo v odvisnosti od kategorije spremenljivke
+ switch ($spremenljivka['tip']) {
+ case 1: # radio - prikjaže navpiÄno
+ case 2: #checkbox Äe je dihotomna:
+ case 3: # dropdown - prikjaže navpiÄno
+ case 6: # multigrid
+ case 4: # text
+ case 7:# variabla tipa »število«
+ case 8: # datum
+ case 16: #multicheckbox Äe je dihotomna:
+ case 17: #razvrÅ¡Äanje Äe je ordinalna
+ case 18: # vsota
+ case 19: # multitext
+ case 20: # multi number
+ case 21: # besedilo*
+ case 22: # kalkulacija
+ pdfIzvozAnalizaFunctions::frequencyVertical($spid);
+ break;
+ case 5:
+ # nagovor
+ pdfIzvozAnalizaFunctions::sumNagovor($spid,'freq');
+ break;
+ }
+ //}
+
+ } // end if $spremenljivka['tip'] != 'm'
+ }
+
+ // Izpisemo opisne stat element
+ function displayDesc($element){
+ global $lang;
+
+ # polovimo frekvence
+ SurveyAnalysis::getDescriptives();
+
+ $spid = $element['spr1'];
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ pdfIzvozAnalizaFunctions::init($this->ank_id, $this, $from='desc');
+
+ $text = array();
+
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_variable']);
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_variable_text']);
+
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_m']);
+ $text[] = $this->encodeText($lang['srv_analiza_num_units']);
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_povprecje']);
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_odklon']);
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_min']);
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_max']);
+
+ $params = array('bold' => 'B', 'align2' => 'C');
+
+ $this->pdf->setFont('','b','6');
+ pdfIzvozAnalizaFunctions::descTableRow($text, $params);
+ $this->pdf->setFont('','','6');
+
+
+ # preverjamo ali je meta
+ if ($spremenljivka['tip'] != 'm'
+ && ( count(SurveyAnalysis::$_FILTRED_VARIABLES) == 0 || (count(SurveyAnalysis::$_FILTRED_VARIABLES) > 0 && isset(SurveyAnalysis::$_FILTRED_VARIABLES[$spid]) ))
+ && in_array($spremenljivka['tip'], SurveyAnalysis::$_FILTRED_TYPES)) {
+
+ $show_enota = false;
+ # preverimo ali imamo samo eno variablo in Äe iammo enoto
+ if ((int)$spremenljivka['enota'] != 0 || $spremenljivka['cnt_all'] > 1 ) {
+ $show_enota = true;
+ }
+
+ # izpišemo glavno vrstico z podatki
+ $_sequence = null;
+ # za enodimenzijske tipe izpišemo podatke kar v osnovni vrstici
+ if (!$show_enota) {
+// if ($spremenljivka['tip'] == 1 || $spremenljivka['tip'] == 3
+// || $spremenljivka['tip'] == 4 || $spremenljivka['tip'] == 7 || $spremenljivka['tip'] == 8) {
+ $variable = $spremenljivka['grids'][0]['variables'][0];
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ pdfIzvozAnalizaFunctions::displayDescriptivesSpremenljivkaRow($spid, $spremenljivka,$show_enota,$_sequence);
+ } else {
+ if ($spremenljivka['tip'] == 1 || $spremenljivka['tip'] == 3) {
+ $variable = $spremenljivka['grids'][0]['variables'][0];
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ $show_enota = false;
+ }
+ pdfIzvozAnalizaFunctions::displayDescriptivesSpremenljivkaRow($spid, $spremenljivka,$show_enota,$_sequence);
+ #zloopamo skozi variable
+ $_sequence = null;
+ $grd_cnt=0;
+ if (count($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+
+ if (count($spremenljivka['grids']) > 1 && $grd_cnt !== 0 && $spremenljivka['tip'] != 6) {
+ $grid['new_grid'] = true;
+ }
+ $grd_cnt++;
+ # dodamo dodatne vrstice z albelami grida
+ if (count ($grid['variables']) > 0)
+ foreach ($grid['variables'] AS $vid => $variable ){
+ # dodamo ostale vrstice
+ $do_show = ($variable['other'] !=1 && ($spremenljivka['tip'] == 1 || $spremenljivka['tip'] == 3 || $spremenljivka['tip'] == 5 || $spremenljivka['tip'] == 8 ))
+ ? false
+ : true;
+ if ($do_show) {
+ pdfIzvozAnalizaFunctions::displayDescriptivesVariablaRow($spremenljivka,$grid,$variable);
+
+ }
+ $grid['new_grid'] = false;
+
+ }
+ }
+ } //else: if (!$show_enota)
+ } // end if $spremenljivka['tip'] != 'm'
+ }
+
+ // Izpisemo graf element
+ function displayChart($element){
+
+ $spid = $element['spr1'];
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ # preverjamo ali je meta
+ if (($spremenljivka['tip'] != 'm'
+ && in_array($spremenljivka['tip'], SurveyAnalysis::$_FILTRED_TYPES ))
+ && (!isset($_spid) || (isset($_spid) && $_spid == $spid))) {
+ # ali imamo sfiltrirano spremenljivko
+ //if ($vars_count == 0 || ($vars_count > 0 && isset(SurveyAnalysis::$_FILTRED_VARIABLES[$spid]) ) ) {
+
+ $this->pdf->SetFillColor(250, 250, 250);
+
+ // Ce imamo radio tip in manj kot 5 variabel po defaultu prikazemo piechart
+ $vars = count($spremenljivka['options']);
+ $type = 0;
+ if( ($spremenljivka['tip'] == 1 || $spremenljivka['tip'] == 3) && $vars < 5 )
+ $type = 2;
+
+ //ce imamo nominalno spremenljivko ali ce je samo 1 variabla nimamo povprecij
+ if($spremenljivka['tip'] == 6 && ($spremenljivka['cnt_all'] == 1 || $spremenljivka['skala'] == 1) && $type == 0 )
+ $type = 2;
+
+ pdfIzvozAnalizaFunctions::init($this->ank_id, $this, $from='charts');
+
+ if($spremenljivka['tip'] == 4 || $spremenljivka['tip'] == 19 || $spremenljivka['tip'] == 21 || $spremenljivka['tip'] == 22){
+ // ce imamo vklopljeno nastavitev prikaz tabel med grafi (default)
+ if($spremenljivka['tip'] == 19)
+ pdfIzvozAnalizaFunctions::sumMultiText($spid, 'sums');
+ else
+ pdfIzvozAnalizaFunctions::frequencyVertical($spid);
+ }
+ elseif( in_array($spremenljivka['tip'],array(1,2,3,6,7,8,16,17,18,20)) ){
+ // Prikazemo posamezen graf
+ pdfIzvozAnalizaFunctions::displayChart($spid, $type);
+ }
+ //}
+
+ } // end if $spremenljivka['tip'] != 'm'
+ }
+
+ // Izpisemo crosstab tabelo
+ function displayCrosstab($element){
+ global $lang;
+
+ // Napolnimo podatke crosstabu
+ $crossData1 = explode("-", $element['spr1']);
+ $crossData2 = explode("-", $element['spr2']);
+
+ $crosstabClass = new SurveyCrosstabs();
+ $crosstabClass->Init($this->ank_id);
+
+ $crosstabClass->setVariables($crossData1[0],$crossData1[1],$crossData1[2],$crossData2[0],$crossData2[1],$crossData2[2]);
+
+ // Naslov
+ if($element['spr1'] == '' || $element['spr2'] == '')
+ $title = $lang['srv_select_spr'];
+ else{
+ $show_variables_values = true;
+
+ $spr1 = $crosstabClass->_HEADERS[$crossData1[1]];
+ $spr2 = $crosstabClass->_HEADERS[$crossData2[1]];
+
+ # za multicheckboxe popravimo naslov, na podtip
+ $sub_q1 = null;
+ $sub_q2 = null;
+ if ($spr1['tip'] == '6' || $spr1['tip'] == '7' || $spr1['tip'] == '16' || $spr1['tip'] == '17' || $spr1['tip'] == '18' || $spr1['tip'] == '19' || $spr1['tip'] == '20' || $spr1['tip'] == '21' ) {
+ foreach ($spr1['grids'] AS $grid) {
+ foreach ($grid['variables'] AS $variable) {
+ if ($variable['sequence'] == $v_first['seq']) {
+ $sub_q1 .= strip_tags($spr1['naslov']);
+ if ($show_variables_values == true ) {
+ $sub_q1 .= ' ('.strip_tags($spr1['variable']).')';
+ }
+ if ($spr1['tip'] == '16') {
+ $sub_q1 .= strip_tags($grid1['naslov']) . ($show_variables_values == true ? ' (' . strip_tags($grid1['variable']) . ')' : '');
+ } else {
+ $sub_q1 .= strip_tags($variable['naslov']) . ($show_variables_values == true ? ' (' . strip_tags($variable['variable']) . ')' : '');
+ }
+ }
+ }
+ }
+ }
+ if ($sub_q1 == null) {
+ $sub_q1 .= strip_tags($spr1['naslov']);
+ $sub_q1 .= ($show_variables_values == true ? '&nbsp;('.strip_tags($spr1['variable']).')' : '');
+ }
+ if ($spr2['tip'] == '6' || $spr2['tip'] == '7' || $spr2['tip'] == '16' || $spr2['tip'] == '17' || $spr2['tip'] == '18' || $spr2['tip'] == '19' || $spr2['tip'] == '20' || $spr2['tip'] == '21') {
+ foreach ($spr2['grids'] AS $grid) {
+ foreach ($grid['variables'] AS $variable) {
+ if ($variable['sequence'] == $v_second['seq']) {
+ $sub_q2 .= strip_tags($spr2['naslov']);
+ if ($show_variables_values == true) {
+ $sub_q2 .= ' ('.strip_tags($spr2['variable']).')';
+ }
+ if ($spr2['tip'] == '16') {
+ $sub_q2.= strip_tags($grid2['naslov']) . ($show_variables_values == true ? ' (' . strip_tags($grid2['variable']) . ')' : '');
+ } else {
+ $sub_q2.= strip_tags($variable['naslov']) . ($show_variables_values == true ? ' (' . strip_tags($variable['variable']) . ')' : '');
+ }
+ }
+ }
+ }
+ }
+ if ($sub_q2 == null) {
+ $sub_q2 .= strip_tags($spr2['naslov']);
+ $sub_q2 .= ($show_variables_values == true ? ' ('.strip_tags($spr2['variable']).')' : '');
+ }
+
+ $title = $sub_q1 . ' / ' . $sub_q2;
+ }
+
+ $subtitle = '('.$lang['srv_crosstabs']. ($element['sub_type'] == 1 ? ' - '.$lang['srv_chart'] : '') .')';
+
+ $title .= ' <span class="anl_ita">'.$subtitle.'</span>';
+
+ pdfIzvozAnalizaFunctions::init($this->ank_id, $this, $from='crosstab', $crosstabClass);
+ pdfIzvozAnalizaFunctions::displayCrosstabsTable();
+ }
+
+ // Izpisemo crosstab graf
+ function displayCrosstabChart($element){
+ // Napolnimo podatke crosstabu
+ $crossData1 = explode("-", $element['spr2']);
+ $crossData2 = explode("-", $element['spr1']);
+
+ $crosstabClass = new SurveyCrosstabs();
+ $crosstabClass->Init($this->ank_id);
+
+
+ // Ce iz breaka klicemo graf za crosstab tabelo moramo popravit grid
+ if($element['type'] == '9'){
+ foreach ($crosstabClass->_HEADERS[$crossData1[1]]['grids'] AS $gid => $grid) {
+ foreach ($grid['variables'] AS $vkey => $vrednost) {
+ if ($vrednost['sequence'] == $crossData1[0]) {
+ $crossData1[2] = $gid;
+ }
+ }
+ }
+ }
+
+ $crosstabClass->setVariables($crossData1[0],$crossData1[1],$crossData1[2],$crossData2[0],$crossData2[1],$crossData2[2]);
+
+ // Naslov
+ if($element['spr1'] == '' || $element['spr2'] == '')
+ $title = $lang['srv_select_spr'];
+ else{
+ $show_variables_values = true;
+
+ $spr1 = $crosstabClass->_HEADERS[$crossData1[1]];
+ $spr2 = $crosstabClass->_HEADERS[$crossData2[1]];
+
+ # za multicheckboxe popravimo naslov, na podtip
+ $sub_q1 = null;
+ $sub_q2 = null;
+ if ($spr1['tip'] == '6' || $spr1['tip'] == '7' || $spr1['tip'] == '16' || $spr1['tip'] == '17' || $spr1['tip'] == '18' || $spr1['tip'] == '19' || $spr1['tip'] == '20' || $spr1['tip'] == '21' ) {
+ foreach ($spr1['grids'] AS $grid) {
+ foreach ($grid['variables'] AS $variable) {
+ if ($variable['sequence'] == $v_first['seq']) {
+ $sub_q1 .= strip_tags($spr1['naslov']);
+ if ($show_variables_values == true ) {
+ $sub_q1 .= ' ('.strip_tags($spr1['variable']).')';
+ }
+ if ($spr1['tip'] == '16') {
+ $sub_q1 .= strip_tags($grid1['naslov']) . ($show_variables_values == true ? ' (' . strip_tags($grid1['variable']) . ')' : '');
+ } else {
+ $sub_q1 .= strip_tags($variable['naslov']) . ($show_variables_values == true ? ' (' . strip_tags($variable['variable']) . ')' : '');
+ }
+ }
+ }
+ }
+ }
+ if ($sub_q1 == null) {
+ $sub_q1 .= strip_tags($spr1['naslov']);
+ $sub_q1 .= ($show_variables_values == true ? '&nbsp;('.strip_tags($spr1['variable']).')' : '');
+ }
+ if ($spr2['tip'] == '6' || $spr2['tip'] == '7' || $spr2['tip'] == '16' || $spr2['tip'] == '17' || $spr2['tip'] == '18' || $spr2['tip'] == '19' || $spr2['tip'] == '20' || $spr2['tip'] == '21') {
+ foreach ($spr2['grids'] AS $grid) {
+ foreach ($grid['variables'] AS $variable) {
+ if ($variable['sequence'] == $v_second['seq']) {
+ $sub_q2 .= strip_tags($spr2['naslov']);
+ if ($show_variables_values == true) {
+ $sub_q2 .= ' ('.strip_tags($spr2['variable']).')';
+ }
+ if ($spr2['tip'] == '16') {
+ $sub_q2.= strip_tags($grid2['naslov']) . ($show_variables_values == true ? ' (' . strip_tags($grid2['variable']) . ')' : '');
+ } else {
+ $sub_q2.= strip_tags($variable['naslov']) . ($show_variables_values == true ? ' (' . strip_tags($variable['variable']) . ')' : '');
+ }
+ }
+ }
+ }
+ }
+ if ($sub_q2 == null) {
+ $sub_q2 .= strip_tags($spr2['naslov']);
+ $sub_q2 .= ($show_variables_values == true ? ' ('.strip_tags($spr2['variable']).')' : '');
+ }
+
+ $title = $sub_q1 . ' / ' . $sub_q2;
+ }
+
+ $subtitle = '('.$lang['srv_crosstabs']. ($element['sub_type'] == 1 ? ' - '.$lang['srv_chart'] : '') .')';
+
+ $title .= ' '.$subtitle;
+
+ $this->crosstabVars = array($sub_q1, $sub_q2);
+
+ pdfIzvozAnalizaFunctions::init($this->ank_id, $this, $from='crosstab_chart', $crosstabClass);
+ pdfIzvozAnalizaFunctions::displayCrosstabChart();
+ }
+
+ // Izpisemo mean tabelo
+ function displayMean($element){
+
+ // ustvarimo means objekt
+ $meansClass = new SurveyMeans($this->ank_id);
+
+ // Napolnimo podatke crosstabu
+ $meanData1 = explode("-", $element['spr2']);
+ $meanData2 = explode("-", $element['spr1']);
+
+ $v_first = array('seq' => $meanData1[0], 'spr' => $meanData1[1], 'grd' => $meanData1[2]);
+ $v_second = array('seq' => $meanData2[0], 'spr' => $meanData2[1], 'grd' => $meanData2[2]);
+
+ $_means[0] = $meansClass->createMeans($v_first, $v_second);
+
+ pdfIzvozAnalizaFunctions::init($this->ank_id, $this, $from='mean', $meansClass);
+ pdfIzvozAnalizaFunctions::displayMeansTable($_means);
+ }
+
+ // Izpisemo mean graf
+ function displayMeanChart($element){
+
+ // ustvarimo means objekt
+ $meansClass = new SurveyMeans($this->ank_id);
+
+ // Napolnimo podatke crosstabu
+ $meanData1 = explode("-", $element['spr2']);
+ $meanData2 = explode("-", $element['spr1']);
+
+ $v_first = array('seq' => $meanData1[0], 'spr' => $meanData1[1], 'grd' => $meanData1[2]);
+ $v_second = array('seq' => $meanData2[0], 'spr' => $meanData2[1], 'grd' => $meanData2[2]);
+
+ $this->meanData2[0] = $v_first;
+ $this->meanData1[0] = $v_second;
+
+ $_means[0] = $meansClass->createMeans($v_first, $v_second);
+
+ pdfIzvozAnalizaFunctions::init($this->ank_id, $this, $from='mean_chart', $meansClass);
+ pdfIzvozAnalizaFunctions::displayMeanChart(0);
+ }
+
+ // Izpisemo ttest tabelo
+ function displayTTest($element){
+
+ // ustvarimo ttest objekt
+ $ttestClass = new SurveyTTest($this->ank_id);
+
+ // Nastavimo session da lahko pravilno izrisemo tabelo/graf
+ $ttestData1 = explode("-", $element['spr1']);
+ $ttestData2 = explode("-", $element['spr2']);
+
+ $dataArray = array();
+
+ $dataArray['spr2'] = $ttestData1[1];
+ $dataArray['grid2'] = $ttestData1[2];
+ $dataArray['seq2'] = $ttestData1[0];
+ $dataArray['label2'] = strip_tags($this->getTTestLabel($element['spr1'], $ttestClass));
+
+ $dataArray['sub_conditions'][0] = $ttestData1[3];
+ $dataArray['sub_conditions'][1] = $ttestData1[4];
+
+ $dataArray['variabla'][0]['seq'] = $ttestData2[0];
+ $dataArray['variabla'][0]['spr'] = $ttestData2[1];
+ $dataArray['variabla'][0]['grd'] = $ttestData2[2];
+
+ // Shranimo spremenjene nastavitve v bazo
+ SurveyUserSession::Init($this->ank_id);
+ $sessionData = SurveyUserSession::getData('ttest');
+ $sessionData = $dataArray;
+ SurveyUserSession::saveData($sessionData, 'ttest');
+
+ // ustvarimo ttest objekt
+ $ttestClass = new SurveyTTest($this->ank_id);
+
+ if (count($this->sessionData['ttest']['sub_conditions']) > 1 ) {
+ $variables1 = $ttestClass->getSelectedVariables();
+ if (count($variables1) > 0) {
+ foreach ($variables1 AS $v_first) {
+ $ttest = null;
+ $ttest = $ttestClass->createTTest($v_first, $this->sessionData['ttest']['sub_conditions']);
+
+ pdfIzvozAnalizaFunctions::init($this->ank_id, $this, $from='ttest', $ttestClass);
+ pdfIzvozAnalizaFunctions::displayTTestTable($ttest);
+ }
+ }
+ }
+ }
+
+ // Izpisemo ttest graf
+ function displayTTestChart($element){
+
+ // ustvarimo ttest objekt
+ $ttestClass = new SurveyTTest($this->ank_id);
+
+ // Nastavimo session da lahko pravilno izrisemo tabelo/graf
+ $ttestData1 = explode("-", $element['spr1']);
+ $ttestData2 = explode("-", $element['spr2']);
+
+ $dataArray = array();
+
+ $dataArray['spr2'] = $ttestData1[1];
+ $dataArray['grid2'] = $ttestData1[2];
+ $dataArray['seq2'] = $ttestData1[0];
+ $dataArray['label2'] = strip_tags($this->getTTestLabel($element['spr1'], $ttestClass));
+
+ $dataArray['sub_conditions'][0] = $ttestData1[3];
+ $dataArray['sub_conditions'][1] = $ttestData1[4];
+
+ $dataArray['variabla'][0]['seq'] = $ttestData2[0];
+ $dataArray['variabla'][0]['spr'] = $ttestData2[1];
+ $dataArray['variabla'][0]['grd'] = $ttestData2[2];
+
+ // Shranimo spremenjene nastavitve v bazo
+ SurveyUserSession::Init($this->ank_id);
+ $sessionData = SurveyUserSession::getData('ttest');
+ $sessionData = $dataArray;
+ SurveyUserSession::saveData($sessionData, 'ttest');
+
+ // ustvarimo ttest objekt
+ $ttestClass = new SurveyTTest($this->ank_id);
+
+ if (count($this->sessionData['ttest']['sub_conditions']) > 1 ) {
+ $variables1 = $ttestClass->getSelectedVariables();
+ if (count($variables1) > 0) {
+ foreach ($variables1 AS $v_first) {
+
+ pdfIzvozAnalizaFunctions::init($this->ank_id, $this, $from='ttest_chart', $ttestClass);
+ pdfIzvozAnalizaFunctions::displayTTestChart();
+ }
+ }
+ }
+ }
+
+ // Izpisemo break tabelo
+ function displayBreak($element){
+ global $lang;
+
+ // Napolnimo podatke breaku
+ $breakData1 = explode("-", $element['spr1']);
+ $breakData2 = explode("-", $element['spr2']);
+
+ $breakClass = new SurveyBreak($this->ank_id);
+
+ $forSpr = $breakData1[1];
+ $_spr_data = $breakClass->_HEADERS[$forSpr];
+
+ # poiÅ¡Äemo sekvenco
+ $sekvenca = $breakData1[0];
+
+ # poiÅ¡Äemo opcije
+ $opcije = $_spr_data['options'];
+
+ if ((int)$_spr_data['tip'] != 2) {
+ $seqences[] = $sekvenca;
+ $options = $opcije;
+ } else {
+ # za checkboxe imamo veÄ sekvenc
+ $seqences = explode('_',$_spr_data['sequences']);
+ $options[1] = $opcije[1];
+ }
+
+ # za vsako opcijo posebej izraÄunamo povpreÄja za vse spremenljivke
+ /*$frequencys = array();
+ if (count($seqences) > 0) {
+ foreach ($seqences as $seq) {
+
+ if (count($options) > 0) {
+ foreach ($options as $oKey => $option) {
+ # zloopamo skozi variable
+ $oKeyfrequencys = $breakClass->getAllFrequencys($oKey, $seq, $forSpr);
+ if ($oKeyfrequencys != null) {
+ $frequencys[$seq][$oKey] = $oKeyfrequencys;
+ }
+ }
+ }
+ }
+ }*/
+ $frequencys = null;
+ if (count($options) > 0) {
+ foreach ($options as $okey => $option) {
+
+ # zloopamo skozi variable
+ $okeyfrequencys = $breakClass->getAllFrequencys($okey, $sekvenca, $forSpr);
+ if ($okeyfrequencys != null) {
+ if ($frequencys == null) {
+ $frequencys = array();
+ }
+ $frequencys[$okey] = $okeyfrequencys;
+ }
+ }
+ }
+
+ $spremenljivka = $breakClass->_HEADERS[$breakData2[1]];
+ $spremenljivka['id'] = $breakData2[1];
+
+ $tip = $spremenljivka['tip'];
+ $skala = $spremenljivka['skala'];
+
+
+ // Izrisujemo tabelo ki ni crosstab
+ if( ($tip == 6 && $skala == 0) || in_array($tip, array(4,7,17,18,19,20,21)) ){
+
+ pdfIzvozAnalizaFunctions::init($this->ank_id, $this, $from='break', $breakClass);
+
+ if($tip == 6 && $skala == 0)
+ pdfIzvozAnalizaFunctions::displayBreakTableMgrid($forSpr,$frequencys,$spremenljivka);
+
+ elseif($tip == 4 || $tip == 19 || $tip == 21){
+ // Nastavimo se katero podtabelo izrisemo (sekvenca odvisne spr)
+ $spremenljivka['break_sub_table']['sequence'] = $breakData2[0];
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ if($spremenljivka['break_sub_table']['sequence'] == $grid['variables'][0]['sequence']){
+ $spremenljivka['break_sub_table']['key'] = $gkey;
+ break;
+ }
+ }
+
+ pdfIzvozAnalizaFunctions::displayBreakTableText($forSpr,$frequencys,$spremenljivka);
+ }
+
+ else{
+ // Nastavimo se katero podtabelo izrisemo (sekvenca odvisne spr)
+ $spremenljivka['break_sub_table']['sequence'] = $breakData2[0];
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ if($spremenljivka['break_sub_table']['sequence'] == $grid['variables'][0]['sequence']){
+ $spremenljivka['break_sub_table']['key'] = $gkey;
+ break;
+ }
+ }
+
+ pdfIzvozAnalizaFunctions::displayBreakTableNumber($forSpr,$frequencys,$spremenljivka);
+ }
+ }
+
+ // Izrisujemo crosstab
+ else{
+ $this->displayCrosstab($element);
+ }
+ }
+
+ // Izpisemo break graf
+ function displayBreakChart($element){
+ // Napolnimo podatke breaku
+ $breakData1 = explode("-", $element['spr1']);
+ $breakData2 = explode("-", $element['spr2']);
+
+ $breakClass = new SurveyBreak($this->ank_id);
+
+ $forSpr = $breakData1[1];
+ $_spr_data = $breakClass->_HEADERS[$forSpr];
+
+ # poiÅ¡Äemo sekvenco
+ $sekvenca = $breakData1[0];
+
+ # poiÅ¡Äemo opcije
+ $opcije = $_spr_data['options'];
+
+ if ((int)$_spr_data['tip'] != 2) {
+ $seqences[] = $sekvenca;
+ $options = $opcije;
+ } else {
+ # za checkboxe imamo veÄ sekvenc
+ $seqences = explode('_',$_spr_data['sequences']);
+ $options[1] = $opcije[1];
+ }
+
+ $frequencys = null;
+ if (count($options) > 0) {
+ foreach ($options as $okey => $option) {
+
+ # zloopamo skozi variable
+ $okeyfrequencys = $breakClass->getAllFrequencys($okey, $sekvenca, $forSpr);
+ if ($okeyfrequencys != null) {
+ if ($frequencys == null) {
+ $frequencys = array();
+ }
+ $frequencys[$okey] = $okeyfrequencys;
+ }
+ }
+ }
+
+ $spremenljivka = $breakClass->_HEADERS[$breakData2[1]];
+ $spremenljivka['id'] = $breakData2[1];
+
+ $tip = $spremenljivka['tip'];
+ $skala = $spremenljivka['skala'];
+
+
+ // Pri textovnih tipih vedno izrisemo tabelo
+ if($tip == 4 || $tip == 21 || $tip == 19){
+ // Nastavimo se katero podtabelo izrisemo (sekvenca odvisne spr)
+ $spremenljivka['break_sub_table']['sequence'] = $breakData2[0];
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ if($spremenljivka['break_sub_table']['sequence'] == $grid['variables'][0]['sequence']){
+ $spremenljivka['break_sub_table']['key'] = $gkey;
+ break;
+ }
+ }
+
+ pdfIzvozAnalizaFunctions::init($this->ank_id, $this, $from='break', $breakClass);
+ pdfIzvozAnalizaFunctions::displayBreakTableText($forSpr,$frequencys,$spremenljivka);
+ }
+
+ // Izrisujemo graf ki ni crosstab
+ elseif( ($tip == 6 && $skala == 0) || in_array($tip, array(7,17,18,20)) ){
+
+ pdfIzvozAnalizaFunctions::init($this->ank_id, $this, $from='break', $breakClass);
+
+ if($tip == 6 && $skala == 0)
+ pdfIzvozAnalizaFunctions::displayBreakChart($forSpr,$frequencys,$spremenljivka);
+
+ else{
+ // Nastavimo se katero podtabelo izrisemo (sekvenca odvisne spr)
+ $spremenljivka['break_sub_table']['sequence'] = $breakData2[0];
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ if($spremenljivka['break_sub_table']['sequence'] == $grid['variables'][0]['sequence']){
+ $spremenljivka['break_sub_table']['key'] = $gkey;
+ break;
+ }
+ }
+
+ pdfIzvozAnalizaFunctions::displayBreakChart($forSpr,$frequencys,$spremenljivka);
+ }
+ }
+
+ // Izrisujemo crosstab
+ else{
+ $this->displayCrosstabChart($element);
+ }
+ }
+
+ // Izpisemo element z besedilom
+ function displayText($text){
+ global $lang;
+
+ $this->pdf->setFont('','','6');
+
+ //$this->pdf->Ln(LINE_BREAK);
+ //$this->pdf->setY($this->pdf->getY() - 5);
+
+ $this->pdf->writeHTML($text);
+
+ /*$this->pdf->setFont('','','7');
+ $this->pdf->Write(0, $this->encodeText($text), '', 0, 'l', 1, 1);*/
+ }
+
+
+ // Izpisemo naslov elementa
+ function displayTitle($element){
+ global $lang;
+
+ // sumarnik
+ if($element['type'] == '1'){
+ $spr = SurveyAnalysis::$_HEADERS[$element['spr1']];
+
+ if($element['spr1'] == '')
+ $title = $lang['srv_select_spr'];
+ else
+ $title = $spr['variable'].' - '.$spr['naslov'];
+
+ $subtitle = ' ('.$lang['srv_sumarnik'].')';
+ }
+
+ // freq
+ elseif($element['type'] == '2'){
+ $spr = SurveyAnalysis::$_HEADERS[$element['spr1']];
+
+ if($element['spr1'] == '')
+ $title = $lang['srv_select_spr'];
+ else
+ $title = $spr['variable'].' - '.$spr['naslov'];
+
+ $subtitle = ' ('.$lang['srv_frequency'].')';
+ }
+
+ // desc
+ elseif($element['type'] == '3'){
+ $spr = SurveyAnalysis::$_HEADERS[$element['spr1']];
+
+ if($element['spr1'] == '')
+ $title = $lang['srv_select_spr'];
+ else
+ $title = $spr['variable'].' - '.$spr['naslov'];
+
+ $subtitle = ' ('.$lang['srv_descriptor'].')';
+ }
+
+ // chart
+ elseif($element['type'] == '4'){
+ $spr = SurveyAnalysis::$_HEADERS[$element['spr1']];
+
+ if($element['spr1'] == '')
+ $title = $lang['srv_select_spr'];
+ else
+ $title = $spr['variable'].' - '.$spr['naslov'];
+
+ $subtitle = ' ('.$lang['srv_chart'].')';
+ }
+
+ // crosstab
+ elseif($element['type'] == '5'){
+
+ // Napolnimo podatke crosstabu
+ $crossData1 = explode("-", $element['spr1']);
+ $crossData2 = explode("-", $element['spr2']);
+
+ $crosstabClass = new SurveyCrosstabs();
+ $crosstabClass->Init($this->ank_id);
+
+ $crosstabClass->setVariables($crossData1[0],$crossData1[1],$crossData1[2],$crossData2[0],$crossData2[1],$crossData2[2]);
+
+ // Naslov
+ if($element['spr1'] == '' || $element['spr2'] == '')
+ $title = $lang['srv_select_spr'];
+ else{
+ $show_variables_values = true;
+
+ $spr1 = $crosstabClass->_HEADERS[$crossData1[1]];
+ $spr2 = $crosstabClass->_HEADERS[$crossData2[1]];
+
+ # za multicheckboxe popravimo naslov, na podtip
+ $sub_q1 = null;
+ $sub_q2 = null;
+ if ($spr1['tip'] == '6' || $spr1['tip'] == '7' || $spr1['tip'] == '16' || $spr1['tip'] == '17' || $spr1['tip'] == '18' || $spr1['tip'] == '19' || $spr1['tip'] == '20' || $spr1['tip'] == '21' ) {
+ foreach ($spr1['grids'] AS $grid) {
+ foreach ($grid['variables'] AS $variable) {
+ if ($variable['sequence'] == $v_first['seq']) {
+ $sub_q1 .= strip_tags($spr1['naslov']);
+ if ($show_variables_values == true ) {
+ $sub_q1 .= ' ('.strip_tags($spr1['variable']).')';
+ }
+ if ($spr1['tip'] == '16') {
+ $sub_q1 .= '<br />'. strip_tags($grid1['naslov']) . ($show_variables_values == true ? ' (' . strip_tags($grid1['variable']) . ')' : '');
+ } else {
+ $sub_q1 .= '<br />' . strip_tags($variable['naslov']) . ($show_variables_values == true ? ' (' . strip_tags($variable['variable']) . ')' : '');
+ }
+ }
+ }
+ }
+ }
+ if ($sub_q1 == null) {
+ $sub_q1 .= strip_tags($spr1['naslov']);
+ $sub_q1 .= ($show_variables_values == true ? '&nbsp;('.strip_tags($spr1['variable']).')' : '');
+ }
+ if ($spr2['tip'] == '6' || $spr2['tip'] == '7' || $spr2['tip'] == '16' || $spr2['tip'] == '17' || $spr2['tip'] == '18' || $spr2['tip'] == '19' || $spr2['tip'] == '20' || $spr2['tip'] == '21') {
+ foreach ($spr2['grids'] AS $grid) {
+ foreach ($grid['variables'] AS $variable) {
+ if ($variable['sequence'] == $v_second['seq']) {
+ $sub_q2 .= strip_tags($spr2['naslov']);
+ if ($show_variables_values == true) {
+ $sub_q2 .= ' ('.strip_tags($spr2['variable']).')';
+ }
+ if ($spr2['tip'] == '16') {
+ $sub_q2.= '<br />' . strip_tags($grid2['naslov']) . ($show_variables_values == true ? ' (' . strip_tags($grid2['variable']) . ')' : '');
+ } else {
+ $sub_q2.= '<br />' . strip_tags($variable['naslov']) . ($show_variables_values == true ? ' (' . strip_tags($variable['variable']) . ')' : '');
+ }
+ }
+ }
+ }
+ }
+ if ($sub_q2 == null) {
+ $sub_q2 .= strip_tags($spr2['naslov']);
+ $sub_q2 .= ($show_variables_values == true ? ' ('.strip_tags($spr2['variable']).')' : '');
+ }
+
+ $title = $sub_q1 . ' / ' . $sub_q2;
+ }
+
+ $subtitle = ' ('.$lang['srv_crosstabs']. ($element['sub_type'] == 1 ? ' - '.$lang['srv_chart'] : '') .')';
+ }
+
+ // mean
+ elseif($element['type'] == '6'){
+
+ // ustvarimo means objekt
+ $meansClass = new SurveyMeans($this->ank_id);
+
+ // Napolnimo podatke crosstabu
+ $meanData1 = explode("-", $element['spr2']);
+ $meanData2 = explode("-", $element['spr1']);
+
+ $v_first = array('seq' => $meanData1[0], 'spr' => $meanData1[1], 'grd' => $meanData1[2]);
+ $v_second = array('seq' => $meanData2[0], 'spr' => $meanData2[1], 'grd' => $meanData2[2]);
+
+ $means[0] = $meansClass->createMeans($v_first, $v_second);
+
+ // Nastavimo variable (potrebno za grafe
+ $meansClass->variabla1[0] = $v_second;
+ $meansClass->variabla2[0] = $v_first;
+
+ // Naslov
+ if($element['spr1'] == '' || $element['spr2'] == ''){
+ $title = $lang['srv_select_spr'];
+ }
+ else{
+ $label2 = strip_tags($meansClass->getSpremenljivkaTitle($means[0]['v1']));
+ $label1 = strip_tags($meansClass->getSpremenljivkaTitle($means[0]['v2']));
+
+ $title = $label1 . ' / ' . $label2;
+ }
+
+ $subtitle = ' ('.$lang['srv_means']. ($element['sub_type'] == 1 ? ' - '.$lang['srv_chart'] : '') .')';
+ }
+
+ // ttest
+ elseif($element['type'] == '7'){
+
+ // ustvarimo ttest objekt
+ $ttestClass = new SurveyTTest($this->ank_id);
+
+ // Naslov
+ if($element['spr1'] == '' || $element['spr2'] == ''){
+ $title = $lang['srv_select_spr'];
+ }
+ else{
+ $label2 = strip_tags($this->getTTestLabel($element['spr2'], $ttestClass));
+ $label1 = strip_tags($this->getTTestLabel($element['spr1'], $ttestClass));
+
+ $title = $label1 . ' / ' . $label2;
+ }
+
+ $subtitle = ' ('.$lang['srv_ttest']. ($element['sub_type'] == 1 ? ' - '.$lang['srv_chart'] : '') .')';
+ }
+
+ // break
+ elseif($element['type'] == '9'){
+
+ // ustvarimo ttest objekt
+ $breakClass = new SurveyBreak($this->ank_id);
+
+ $breakData1 = explode("-", $element['spr1']);
+ $breakData2 = explode("-", $element['spr2']);
+
+
+ $label1 = '';
+ $variables = $breakClass->getVariableList(2);
+ foreach ($variables as $variable) {
+
+ if($breakData1[0] == $variable['sequence']){
+ $label1 = ( (int)$variable['sub'] == 0 ? '' : ( (int)$variable['sub'] == 1 ? '&nbsp;&nbsp;' : '&nbsp;&nbsp;&nbsp;&nbsp;' )) . $variable['variableNaslov'];
+ $label1 = (strlen($label1) > 60) ? substr($label1, 0, 57).'...' : $label1;
+
+ break;
+ }
+ }
+
+ $label2 = '';
+ $variables = $this->getBreakDependentVariableList($breakClass);
+ foreach ($variables as $variable) {
+
+ if($breakData2[0] == $variable['sequence']){
+ //$label2 = $variable['variableNaslov'];
+ $label2 = (strlen($variable['variableNaslov']) > 60) ? substr($variable['variableNaslov'], 0, 57).'...' : $variable['variableNaslov'];
+
+ break;
+ }
+ }
+
+ $title = $label1 . ' / ' . $label2;
+ $subtitle = '('.$lang['srv_break']. ($element['sub_type'] == 1 ? ' - '.$lang['srv_chart'] : '') .')';
+ }
+
+
+ $width = $this->landscapeTest() ? 270 : 165;
+
+ //$this->pdf->ln(15);
+
+ $this->pdf->setFont('','b','7');
+ $this->pdf->MultiCell($width, 1, $this->encodeText($title . $subtitle), 0, 'C', 0, 1, 0 ,0, true);
+ /*$this->pdf->setFont('','','7');
+ $this->pdf->MultiCell($width, 1, $subtitle, 0, 'C', 0, 1, 0 ,0, true);*/
+
+ $this->pdf->ln(5);
+ }
+
+ function getTTestLabel($spr, $ttestClass){
+
+ $data = explode("-", $spr);
+
+ $spid = $data[1];
+ $seq = $data[0];
+ $grid = $data[2];
+
+ $spr_data = $ttestClass->_HEADERS[$spid];
+ if ($grid == 'undefined') {
+
+ # imamp lahko veÄ variabel
+ foreach ($spr_data['grids'] as $gkey => $grid ) {
+
+ foreach ($grid['variables'] as $vkey => $variable) {
+ $sequence = $variable['sequence'];
+ if ($sequence == $seq) {
+ $sprLabel = '('.$variable['variable'].') '. $variable['naslov'];
+ }
+ }
+ }
+ } else {
+ # imamo subgrid
+ $sprLabel = '('.$spr_data['grids'][$grid]['variable'].') '. $spr_data['grids'][$grid]['naslov'];
+ }
+
+ return $sprLabel;
+ }
+
+ /** funkcija vrne seznam primern variabel za break
+ *
+ */
+ function getBreakDependentVariableList($breakClass) {
+
+ $variablesList = array();
+
+ # zloopamo skozi header in dodamo variable (potrebujemo posamezne sekvence)
+ foreach ($breakClass->_HEADERS AS $skey => $spremenljivka) {
+
+ $tip = $spremenljivka['tip'];
+
+ $_dropdown_condition = (is_numeric($tip) && $tip != 5 && $tip != 8 && $tip != 9) ? true : false;
+ if ($_dropdown_condition) {
+
+ $cnt_all = (int)$spremenljivka['cnt_all'];
+ if ( $cnt_all == '1' || in_array($tip, array(1,2,3,4,7,17,18,21,22)) || ($tip == 6 && $spremenljivka['enota'] == 2) ) {
+
+ # pri tipu radio ali select dodamo tisto variablo ki ni polje "drugo"
+ if ($tip == 1 || $tip == 3 ) {
+ if (count($spremenljivka['grids']) == 1 ) {
+ # Äe imamo samo en grid ( lahko je veÄ variabel zaradi polja drugo.
+ $grid = $spremenljivka['grids'][0];
+ if (count ($grid['variables']) > 0) {
+ foreach ($grid['variables'] AS $vid => $variable ){
+ if ($variable['other'] != 1) {
+ # imampo samo eno sekvenco grids[0]variables[0]
+ $variablesList[] = array(
+ 'tip'=>$tip,
+ 'spr_id'=>$skey,
+ 'sequence'=>$spremenljivka['grids'][0]['variables'][$vid]['sequence'],
+ 'variableNaslov'=>'('.$spremenljivka['variable'].')&nbsp;'.strip_tags($spremenljivka['naslov']),
+ 'canChoose'=>true,
+ 'sub'=>0);
+
+ }
+ }
+ }
+ }
+ }
+
+ else {
+ # imampo samo eno sekvenco grids[0]variables[0]
+ $variablesList[] = array(
+ 'tip'=>$tip,
+ 'spr_id'=>$skey,
+ 'sequence'=>$spremenljivka['grids'][0]['variables'][0]['sequence'],
+ 'variableNaslov'=>'('.$spremenljivka['variable'].')&nbsp;'.strip_tags($spremenljivka['naslov']),
+ 'canChoose'=>true,
+ 'sub'=>0);
+ }
+ }
+ else if ($cnt_all > 1){
+ # imamo veÄ skupin ali podskupin, zato zlopamo skozi gride in variable
+ if (count($spremenljivka['grids']) > 0 ) {
+ $variablesList[] = array(
+ 'tip'=>$tip,
+
+ 'variableNaslov'=>'('.$spremenljivka['variable'].')&nbsp;'.strip_tags($spremenljivka['naslov']),
+ 'canChoose'=>false,
+ 'sub'=>0);
+ # ali imamo en grid, ali veÄ (tabele
+ if (count($spremenljivka['grids']) == 1 ) {
+ # Äe imamo samo en grid ( lahko je veÄ variabel zaradi polja drugo.
+ $grid = $spremenljivka['grids'][0];
+ if (count ($grid['variables']) > 0) {
+ foreach ($grid['variables'] AS $vid => $variable ){
+ if ($variable['other'] != 1) {
+ $variablesList[] = array(
+ 'tip'=>$tip,
+ 'spr_id'=>$skey,
+ 'sequence'=>$variable['sequence'],
+ 'variableNaslov'=>'('.$variable['variable'].')&nbsp;'.strip_tags($variable['naslov']),
+ 'canChoose'=>true,
+ 'sub'=>1);
+ }
+ }
+ }
+
+ } elseif($tip == 6) {
+ # imamo veÄ gridov - tabele
+ foreach($spremenljivka['grids'] AS $gid => $grid) {
+ $sub = 0;
+ if ($grid['variable'] != '') {
+ $sub++;
+ $variablesList[] = array(
+ 'tip'=>$tip,
+ 'variableNaslov'=>'('.$grid['variable'].')&nbsp;'.strip_tags($grid['naslov']),
+ 'canChoose'=>false,
+ 'sub'=>$sub);
+ }
+ if (count ($grid['variables']) > 0) {
+ $sub++;
+ foreach ($grid['variables'] AS $vid => $variable ){
+ if ($variable['other'] != 1) {
+ $variablesList[] = array(
+ 'tip'=>$tip,
+ 'spr_id'=>$skey,
+ 'sequence'=>$variable['sequence'],
+ 'variableNaslov'=>'('.$variable['variable'].')&nbsp;'.strip_tags($variable['naslov']),
+ 'canChoose'=>true,
+ 'sub'=>$sub);
+ }
+ }
+ }
+ }
+ } else {
+ foreach($spremenljivka['grids'] AS $gid => $grid) {
+ $sub = 0;
+ if ($grid['variable'] != '') {
+ $sub++;
+ $variablesList[] = array(
+ 'tip'=>$tip,
+ 'spr_id'=>$skey,
+ 'grd_id'=>$gid,
+ 'sequence'=>$grid['variables'][0]['sequence'],
+ 'variableNaslov'=>'('.$grid['variable'].')&nbsp;'.strip_tags($grid['naslov']),
+ 'canChoose'=>true,
+ 'sub'=>1);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return $variablesList;
+ }
+
+
+ // Izpisemo komentar elementa
+ function displayComment($text){
+ global $lang;
+
+ $this->pdf->setFont('','','6');
+
+ if($text != ''){
+ $this->pdf->Ln(LINE_BREAK);
+ $this->pdf->writeHTML($text);
+
+ /*$this->pdf->setFont('','','7');
+ $this->pdf->Write(0, $this->encodeText($text), '', 0, 'l', 1, 1);*/
+ }
+ }
+
+
+ /*Skrajsa tekst in doda '...' na koncu*/
+ function snippet($text,$length=64,$tail="...")
+ {
+ $text = trim($text);
+ $txtl = strlen($text);
+ if($txtl > $length)
+ {
+ for($i=1;$text[$length-$i]!=" ";$i++)
+ {
+ if($i == $length)
+ {
+ return substr($text,0,$length) . $tail;
+ }
+ }
+ $text = substr($text,0,$length-$i+1) . $tail;
+ }
+ return $text;
+ }
+
+ function drawLine()
+ {
+ $cy = $this->pdf->getY();
+ $this->pdf->Line(15, $cy , 195, $cy , $this->currentStyle);
+ }
+
+ function formatNumber($value,$digit=0,$sufix="")
+ {
+ if ( $value <> 0 && $value != null )
+ $result = round($value,$digit);
+ else
+ $result = "0";
+ $result = number_format($result, $digit, ',', '.').$sufix;
+
+ return $result;
+ }
+
+
+ // Ce imamo v porocilu tabelo crosstab ali ttest ali means imamo landscape orientacijo
+ function landscapeTest(){
+ global $global_user_id;
+
+ $sql = sisplet_query("SELECT * FROM srv_custom_report WHERE ank_id='$this->ank_id' AND usr_id='$global_user_id' AND profile='$this->creportProfile' AND sub_type='0' AND (type='5' OR type='6' OR type='7' OR type='9')");
+
+ if(mysqli_num_rows($sql) > 0)
+ return true;
+ else
+ return false;
+ }
+
+}
+
+?> \ No newline at end of file
diff --git a/admin/exportclases/class.pdfIzvozAnalizaCharts.php b/admin/exportclases/class.pdfIzvozAnalizaCharts.php
new file mode 100644
index 0000000..b238121
--- /dev/null
+++ b/admin/exportclases/class.pdfIzvozAnalizaCharts.php
@@ -0,0 +1,547 @@
+<?php
+
+ global $site_path;
+
+ include_once('../../function.php');
+ include_once('../survey/definition.php');
+ include_once('../exportclases/class.pdfIzvozAnalizaSums.php');
+ include_once('../exportclases/class.pdfIzvozAnalizaFrekvenca.php');
+ include_once('../exportclases/class.pdfIzvozAnalizaFunctions.php');
+ require_once('../exportclases/class.enka.pdf.php');
+
+ define("ALLOW_HIDE_ZERRO_REGULAR", false); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za navadne odgovore
+ define("ALLOW_HIDE_ZERRO_MISSING", true); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za missinge
+
+ define("NUM_DIGIT_AVERAGE", 2, true); // stevilo digitalnih mest za povprecje
+ define("NUM_DIGIT_DEVIATION", 2, true); // stevilo digitalnih mest za povprecje
+
+ define("M_ANALIZA_DESCRIPTOR", "descriptor", true);
+ define("M_ANALIZA_FREQUENCY", "frequency", true);
+
+ define("FNT_FREESERIF", "freeserif", true);
+ define("FNT_FREESANS", "freesans", true);
+ define("FNT_HELVETICA", "helvetica", true);
+
+ define("FNT_MAIN_TEXT", FNT_FREESANS, true);
+ define("FNT_QUESTION_TEXT", FNT_FREESANS, true);
+ define("FNT_HEADER_TEXT", FNT_FREESANS, true);
+
+ define("FNT_MAIN_SIZE", 10, true);
+ define("FNT_QUESTION_SIZE", 9, true);
+ define("FNT_HEADER_SIZE", 10, true);
+
+ define("RADIO_BTN_SIZE", 3, true);
+ define("CHCK_BTN_SIZE", 3, true);
+ define("LINE_BREAK", 6, true);
+
+ define ('PDF_MARGIN_HEADER', 8);
+ define ('PDF_MARGIN_FOOTER', 12);
+ define ('PDF_MARGIN_TOP', 18);
+ define ('PDF_MARGIN_BOTTOM', 18);
+ define ('PDF_MARGIN_LEFT', 15);
+ define ('PDF_MARGIN_RIGHT', 15);
+
+/**
+ * @desc Class za generacijo pdf-a
+ */
+class PdfIzvozAnalizaCharts {
+
+ var $anketa; // trenutna anketa
+ var $spremenljivka; // trenutna spremenljivka
+
+ var $headFileName = null; // pot do header fajla
+ var $dataFileName = null; // pot do data fajla
+ var $dataFileStatus = null; // status data datoteke
+ var $CID = null; // class za inkrementalno dodajanje fajlov
+
+ var $pi=array('canCreate'=>false); // za shrambo parametrov in sporocil
+ var $pdf;
+ var $currentStyle;
+
+ var $skin;
+ var $numbering;
+ var $frontpage;
+
+ var $sessionData; // podatki ki so bili prej v sessionu - za nastavitve, ki se prenasajo v izvoze...
+
+ var $current_loop = 'undefined';
+
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null, $sprID = null, $loop = null)
+ {
+ global $site_path;
+ global $global_user_id;
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) ){
+
+ $this->anketa = $anketa;
+ $this->spremenljivka = $sprID;
+
+ SurveyAnalysis::Init($this->anketa);
+ SurveyAnalysis::$setUpJSAnaliza = false;
+
+ SurveyChart::Init($this->anketa);
+
+ // create new PDF document
+ $this->pdf = new enka_TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
+
+ // Poskrbimo za datoteko s podatki
+ $SDF = SurveyDataFile::get_instance();
+ $SDF->init($this->anketa);
+ $SDF->prepareFiles();
+
+ $this->headFileName = $SDF->getHeaderFileName();
+ $this->dataFileName = $SDF->getDataFileName();
+ $this->dataFileStatus = $SDF->getStatus();
+
+ SurveyZankaProfiles :: Init($this->anketa, $global_user_id);
+ $this->current_loop = ($loop != null) ? $loop : $this->current_loop;
+
+ // preberemo nastavitve iz baze (prej v sessionu)
+ SurveyUserSession::Init($this->anketa);
+ $this->sessionData = SurveyUserSession::getData('charts');
+ }
+ else
+ {
+ $this->pi['msg'] = "Anketa ni izbrana!";
+ $this->pi['canCreate'] = false;
+ return false;
+ }
+
+ if ( SurveyInfo::getInstance()->SurveyInit($this->anketa) && $this->init())
+ {
+ SurveyUserSetting::getInstance()->Init($this->anketa, $global_user_id);
+ $this->skin = SurveyUserSetting :: getInstance()->getSettings('default_chart_profile_skin');
+ $this->numbering = SurveyDataSettingProfiles :: getSetting('chartNumbering');
+ $this->frontpage = SurveyDataSettingProfiles :: getSetting('chartFP');
+ }
+ else
+ return false;
+
+ // ce smo prisli do tu je vse ok
+ $this->pi['canCreate'] = true;
+
+ return true;
+ }
+
+ // SETTERS && GETTERS
+
+ function checkCreate()
+ {
+ return $this->pi['canCreate'];
+ }
+ function getFile($fileName)
+ {
+ //Close and output PDF document
+ ob_end_clean();
+ $this->pdf->Output($fileName, 'I');
+ }
+
+
+ function init()
+ {
+ global $lang;
+
+ // array used to define the language and charset of the pdf file to be generated
+ $language_meta = Array();
+ $language_meta['a_meta_charset'] = 'UTF-8';
+ $language_meta['a_meta_dir'] = 'ltr';
+ $language_meta['a_meta_language'] = 'sl';
+ $language_meta['w_page'] = $lang['page'];
+
+ //set some language-dependent strings
+ $this->pdf->setLanguageArray($language_meta);
+
+ //set margins
+ $this->pdf->setPrintHeaderFirstPage(true);
+ $this->pdf->setPrintFooterFirstPage(true);
+ $this->pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
+ $this->pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
+ $this->pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
+
+ // set header and footer fonts
+ $this->pdf->setHeaderFont(Array(FNT_HEADER_TEXT, "I", FNT_HEADER_SIZE));
+ $this->pdf->setFooterFont(Array(FNT_HEADER_TEXT, 'I', FNT_HEADER_SIZE));
+
+
+ // set document information
+ $this->pdf->SetAuthor('An Order Form');
+ $this->pdf->SetTitle('An Order');
+ $this->pdf->SetSubject('An Order');
+
+ // set default header data
+ $this->pdf->SetHeaderData(null, null, "www.1ka.si", $this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()));
+
+ //nastavimo datum za footer
+ $today = date("d.m.y");
+ $this->pdf->SetFooterDate($today);
+
+ //set auto page breaks
+ $this->pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
+
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', FNT_MAIN_SIZE);
+ //set image scale factor
+ $this->pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
+ return true;
+ }
+
+ function encodeText($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace(array("&scaron;","&#353;","&#269;"),array("�","�","�"),$text);
+ return strip_tags($text);
+ }
+
+ function createPdf(){
+ global $site_path;
+ global $lang;
+
+ // izpisemo prvo stran
+ if($this->frontpage == 1)
+ $this->createFrontPage();
+
+ $this->pdf->AddPage();
+
+ if($this->frontpage != 1){
+ $this->pdf->setFont('','B','11');
+ $this->pdf->MultiCell(150, 5, $lang['export_analisys_charts'], 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->setFont('','','7');
+ //Datum zbiranja podatkov
+ $this->pdf->MultiCell(0, 5, $this->getEntryDates(), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->ln(5);
+ }
+
+ $this->pdf->SetDrawColor(200, 200, 200);
+ $this->pdf->setFont('','B','6');
+
+
+ # preberemo header
+ if ($this->headFileName !== null) {
+ //polovimo podatke o nastavitvah trenutnega profila (missingi..)
+ SurveyAnalysis::$missingProfileData = SurveyMissingProfiles::getProfile(SurveyAnalysis::$currentMissingProfile);
+
+ // Preverimo ce imamo zanke (po skupinah)
+ SurveyAnalysis::$_LOOPS = SurveyZankaProfiles::getFiltersForLoops();
+
+ # Äe nimamo zank
+ if(count(SurveyAnalysis::$_LOOPS) == 0){
+
+ $this->displayCharts();
+ }
+ else{
+ // izrisemo samo eno tabelo iz enega loopa
+ if($this->current_loop > 0){
+
+ $loop = SurveyAnalysis::$_LOOPS[(int)$this->current_loop-1];
+ $loop['cnt'] = $this->current_loop;
+ SurveyAnalysis::$_CURRENT_LOOP = $loop;
+
+ // Izpisemo naslov zanke za skupino
+ $this->pdf->setFont('','B','10');
+ $this->pdf->ln(5);
+ $this->pdf->MultiCell(200, 5, $this->encodeText($lang['srv_zanka_note'].$loop['text']), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->ln(5);
+ $this->pdf->setFont('','','6');
+
+ $this->displayCharts();
+ }
+ // Izrisemo vse tabele spremenljivka (iz vseh loopov)
+ else{
+ $loop_cnt = 0;
+ # Äe mamo zanke
+ foreach(SurveyAnalysis::$_LOOPS AS $loop) {
+ $loop_cnt++;
+ $loop['cnt'] = $loop_cnt;
+ SurveyAnalysis::$_CURRENT_LOOP = $loop;
+
+ // Izpisemo naslov zanke za skupino
+ $this->pdf->setFont('','B','10');
+ $this->pdf->ln(5);
+ $this->pdf->MultiCell(200, 5, $this->encodeText($lang['srv_zanka_note'].$loop['text']), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->ln(5);
+ $this->pdf->setFont('','','6');
+
+ $this->displayCharts();
+ }
+ }
+ }
+
+ } // end if else ($_headFileName == null)
+
+ }
+
+ function displayCharts(){
+ global $site_path;
+ global $lang;
+
+ #preberemo HEADERS iz datoteke
+ SurveyAnalysis::$_HEADERS = unserialize(file_get_contents($this->headFileName));
+
+ # polovimo frekvence
+ SurveyAnalysis::getFrequencys();
+
+ #odstranimo sistemske variable
+ SurveyAnalysis::removeSystemVariables();
+
+ $vars_count = count(SurveyAnalysis::$_FILTRED_VARIABLES);
+ foreach (SurveyAnalysis::$_HEADERS AS $spid => $spremenljivka) {
+ # preverjamo ali je meta
+ if (($spremenljivka['tip'] != 'm'
+ && in_array($spremenljivka['tip'], SurveyAnalysis::$_FILTRED_TYPES ))
+ && (!isset($_spid) || (isset($_spid) && $_spid == $spid))
+ && ($this->spremenljivka == $spid || $this->spremenljivka == null) ) {
+ # ali imamo sfiltrirano spremenljivko
+ if ($vars_count == 0 || ($vars_count > 0 && isset(SurveyAnalysis::$_FILTRED_VARIABLES[$spid]) ) ) {
+
+ $this->pdf->SetFillColor(250, 250, 250);
+
+ pdfIzvozAnalizaFunctions::init($this->anketa, $this, $from='charts');
+
+ // Ce imamo radio tip in manj kot 5 variabel po defaultu prikazemo piechart
+ $vars = count($spremenljivka['options']);
+ $type = 0;
+ if( ($spremenljivka['tip'] == 1 || $spremenljivka['tip'] == 3) && $vars < 5 )
+ $type = 2;
+
+ //ce imamo nominalno spremenljivko ali ce je samo 1 variabla nimamo povprecij
+ if($spremenljivka['tip'] == 6 && ($spremenljivka['cnt_all'] == 1 || $spremenljivka['skala'] == 1) && $type == 0 )
+ $type = 2;
+
+
+ if($spremenljivka['tip'] == 4 || $spremenljivka['tip'] == 19 || $spremenljivka['tip'] == 21 || $spremenljivka['tip'] == 22){
+
+ //$this->displayTitle($spid);
+
+ $hideEmpty = SurveyDataSettingProfiles :: getSetting('hideEmpty');
+
+ // ce imamo vklopljeno nastavitev prikaz tabel med grafi (default)
+ if($spremenljivka['tip'] == 19){
+
+ $_answers = SurveyAnalysis::getAnswers($spremenljivka,10);
+
+ // Preverimo ce je prazna in ne izpisujemo praznih
+ if($_answers['validCnt'] != 0 || $hideEmpty != 1){
+ pdfIzvozAnalizaFunctions::sumMultiText($spid, 'sums', $displayTitle=true);
+ $this->pdf->setY($this->pdf->getY() + 10);
+ }
+ }
+ else{
+
+ $emptyData = false;
+ if($hideEmpty == 1){
+
+ $emptyData = true;
+ if (count($spremenljivka['grids']) > 0){
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+
+ $_variables_count = count($grid['variables']);
+
+ if ($_variables_count > 0 )
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+
+ if(SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] > 0)
+ $emptyData = false;
+ }
+ }
+ }
+ }
+
+ // Preverimo ce je prazna in ne izpisujemo praznih
+ if($emptyData == false || $hideEmpty != 1){
+ pdfIzvozAnalizaFunctions::frequencyVertical($spid, $displayTitle=true);
+ $this->pdf->setY($this->pdf->getY() + 10);
+ }
+ }
+ }
+ elseif( in_array($spremenljivka['tip'],array(1,2,3,6,7,8,16,17,18,20)) ){
+
+ //$this->displayTitle($spid);
+
+ // Prikazemo posamezen graf
+ pdfIzvozAnalizaFunctions::displayChart($spid, $type, $fromCharts=true);
+ //$this->pdf->setY($this->pdf->getY() + 10);
+ }
+ }
+
+ } // end if $spremenljivka['tip'] != 'm'
+
+ } // end foreach self::$_HEADERS
+ }
+
+
+ // dodamo prvo stran
+ function createFrontPage()
+ {
+ global $lang;
+
+ $this->pdf->AddPage();
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', 16);
+
+ // dodamo naslov
+ $this->pdf->SetFillColor(224, 235, 255);
+ $this->pdf->SetTextColor(0);
+ $this->pdf->SetDrawColor(128, 0, 0);
+ $this->pdf->SetLineWidth(0.1);
+ $this->pdf->Sety(100);
+ $this->pdf->Cell(0, 10, $this->encodeText(SurveyInfo::getInstance()->getSurveyTitle()), 'TLR', 1,'C', 1, 0,0);
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', 13);
+ $this->pdf->Cell(0, 10, $this->encodeText($lang['srv_analiza_charts']), 'BLR', 1,'C', 1, 0,0);
+
+ // Datum zbiranja podatkov
+ $this->pdf->MultiCell(0, 5, $this->getEntryDates(), 0, 'C', 0, 1, 0 ,0, true);
+
+
+ // dodamo info:
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', 12);
+ $this->currentStyle = array('width' => 0.1, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(128, 0, 0));
+ $this->pdf->ln(30);
+ // $this->pdf->Write (0, $this->encodeText("Info:"), '', 0, 'l', 1, 1);
+
+ $this->drawLine();
+ // avtorja, št vprašanj, datum kreiranja
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_shortname'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()), 0, 'L', 0, 1, 0 ,0, true);
+ if ( SurveyInfo::getInstance()->getSurveyTitle() != SurveyInfo::getInstance()->getSurveyAkronim())
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_longname'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyTitle()), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_qcount'].': '.SurveyInfo::getInstance()->getSurveyQuestionCount(), 0, 'L', 0, 1, 0 ,0, true);
+
+ // Aktiviranost
+ $activity = SurveyInfo:: getSurveyActivity();
+ $_last_active = end($activity);
+ if (SurveyInfo::getSurveyColumn('active') == 1) {
+ $this->pdf->SetTextColor(0,150,0);
+ $this->pdf->MultiCell(95, 5, $this->encodeText($lang['srv_anketa_active2']), 0, 'L', 0, 1, 0 ,0, true);
+ } else {
+ # preverimo ali je bila anketa že aktivirana
+ if (!isset($_last_active['starts'])) {
+ # anketa Å¡e sploh ni bila aktivirana
+ $this->pdf->SetTextColor(255,120,0);
+ $this->pdf->MultiCell(95, 5, $this->encodeText($lang['srv_survey_non_active_notActivated']), 0, 'L', 0, 1, 0 ,0, true);
+ } else {
+ # anketa je že bila aktivirna ampak je sedaj neaktivna
+ $this->pdf->SetTextColor(255,120,0);
+ $this->pdf->MultiCell(95, 5, $this->encodeText($lang['srv_survey_non_active']), 0, 'L', 0, 1, 0 ,0, true);
+ }
+ }
+ $this->pdf->SetTextColor(0);
+
+ // Aktivnost
+ if( count($activity) > 0 ){
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_active_from'].': '.SurveyInfo::getInstance()->getSurveyStartsDate(), 0, 'L', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_active_until'].': '.SurveyInfo::getInstance()->getSurveyExpireDate(), 0, 'L', 0, 1, 0 ,0, true);
+ }
+
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_author'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyInsertName()), 0, 'L', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_edit'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyEditName()), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_date'].': '.SurveyInfo::getInstance()->getSurveyInsertDate(), 0, 'L', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_date'].': '.SurveyInfo::getInstance()->getSurveyEditDate(), 0, 'L', 0, 1, 0 ,0, true);
+ if ( SurveyInfo::getInstance()->getSurveyInfo() )
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_desc'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyInfo()), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', FNT_MAIN_SIZE);
+ $this->pdf->SetFillColor(0, 0, 0);
+ }
+
+
+ function setUserId($usrId) {$this->anketa['uid'] = $usrId;}
+ function getUserId() {return ($this->anketa['uid'])?$this->anketa['uid']:false;}
+
+ // vrnemo string za prvi in zadnji vnos
+ function getEntryDates(){
+ global $lang;
+
+ $prvi_vnos_date = SurveyInfo::getSurveyFirstEntryDate();
+ $prvi_vnos_time = SurveyInfo::getSurveyFirstEntryTime();
+ $zadnji_vnos_date = SurveyInfo::getSurveyLastEntryDate();
+ $zadnji_vnos_time = SurveyInfo::getSurveyLastEntryTime();
+
+ if ($prvi_vnos_date != null) {
+ $first = $this->dateFormat($prvi_vnos_date,'j.n.y');
+ $first .= $prvi_vnos_time != null ? (SurveyInfo::$dateTimeSeperator .$this->dateFormat($prvi_vnos_time,'G:i')) : '';
+ }
+ if ($zadnji_vnos_date != null) {
+ $last = $this->dateFormat($zadnji_vnos_date,'j.n.y');
+ $last .= $zadnji_vnos_time != null ? (SurveyInfo::$dateTimeSeperator .$this->dateFormat($zadnji_vnos_time,'G:i')) : '';
+ }
+
+ $text = $lang['srv_setting_collectdata_datetime'].$first.' '.$lang['s_to'].' '.$last;
+
+ return $text;
+ }
+
+ function dateFormat($input, $format) {
+ if ($input != '..') {
+ return date($format,strtotime($input));
+ } else {
+ return '';
+ }
+ }
+
+ function formatNumber($value,$digit=0,$sufix="")
+ {
+ if ( $value <> 0 && $value != null )
+ $result = round($value,$digit);
+ else
+ $result = "0";
+ $result = number_format($result, $digit, ',', '.').$sufix;
+
+ return $result;
+ }
+
+ function drawLine()
+ {
+ $cy = $this->pdf->getY();
+ $this->pdf->Line(15, $cy , 195, $cy , $this->currentStyle);
+ }
+
+ // Izpis opozorila ce ni vnesenih podatkov in ne prikazujemo grafa
+ function displayEmptyWarning($spid){
+
+ /*$spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ // Naslov posameznega grafa
+ $this->pdf->setFont('','b','6');
+ $this->pdf->MultiCell(165, 5, 'Graf '.$spremenljivka['variable'].' nima veljavnih podatkov!', 0, 'C', 0, 1, 0 ,0, true);
+ $this->pdf->setFont('','','6');*/
+ }
+
+ function displayTitle($spid){
+ global $lang;
+
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ $stevilcenje = ($this->numbering == 1 ? $spremenljivka['variable'].' - ' : '');
+ $title = $stevilcenje . $spremenljivka['naslov'];
+
+ /*if(SurveyDataSettingProfiles :: getSetting('chartNumerusText') == 0){
+ $title .= '(n = '.$DataSet->GetNumerus();
+ }*/
+
+ // Preverimo ce prebija slika stran
+ if(isset($this->sessionData[$spid])){
+ $settings = $this->sessionData[$spid];
+ $imgName = $settings['name'];
+ $size = getimagesize('pChart/Cache/'.$imgName);
+ $height = $size[1] / 5;
+
+ if($this->pdf->getY() + $height > 250)
+ {
+ $this->pdf->AddPage();
+ }
+ }
+
+
+ $this->pdf->setFont('','b','6');
+ $this->pdf->MultiCell(165, 5, $title, 0, 'C', 0, 1, 0 ,0, true);
+ if($spremenljivka['tip'] == 2){
+ $this->pdf->setFont('','','5');
+ $this->pdf->MultiCell(165, 1, $lang['srv_info_checkbox'], 0, 'C', 0, 1, 0 ,0, true);
+ }
+ $this->pdf->setFont('','','6');
+ }
+}
+
+?> \ No newline at end of file
diff --git a/admin/exportclases/class.pdfIzvozAnalizaCrosstab.php b/admin/exportclases/class.pdfIzvozAnalizaCrosstab.php
new file mode 100644
index 0000000..7c08898
--- /dev/null
+++ b/admin/exportclases/class.pdfIzvozAnalizaCrosstab.php
@@ -0,0 +1,749 @@
+<?php
+
+ global $site_path;
+
+ include_once('../../function.php');
+ include_once('../survey/definition.php');
+ include_once('../exportclases/class.pdfIzvozAnalizaFunctions.php');
+ require_once('../exportclases/class.enka.pdf.php');
+
+ define("ALLOW_HIDE_ZERRO_REGULAR", false); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za navadne odgovore
+ define("ALLOW_HIDE_ZERRO_MISSING", true); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za missinge
+
+ define("NUM_DIGIT_AVERAGE", 2, true); // stevilo digitalnih mest za povprecje
+ define("NUM_DIGIT_DEVIATION", 2, true); // stevilo digitalnih mest za povprecje
+
+ define("M_ANALIZA_DESCRIPTOR", "descriptor", true);
+ define("M_ANALIZA_FREQUENCY", "frequency", true);
+
+ define("FNT_FREESERIF", "freeserif", true);
+ define("FNT_FREESANS", "freesans", true);
+ define("FNT_HELVETICA", "helvetica", true);
+
+ define("FNT_MAIN_TEXT", FNT_FREESANS, true);
+ define("FNT_QUESTION_TEXT", FNT_FREESANS, true);
+ define("FNT_HEADER_TEXT", FNT_FREESANS, true);
+
+ define("FNT_MAIN_SIZE", 10, true);
+ define("FNT_QUESTION_SIZE", 9, true);
+ define("FNT_HEADER_SIZE", 10, true);
+
+ define("RADIO_BTN_SIZE", 3, true);
+ define("CHCK_BTN_SIZE", 3, true);
+ define("LINE_BREAK", 6, true);
+
+ define ('PDF_MARGIN_HEADER', 8);
+ define ('PDF_MARGIN_FOOTER', 12);
+ define ('PDF_MARGIN_TOP', 18);
+ define ('PDF_MARGIN_BOTTOM', 18);
+ define ('PDF_MARGIN_LEFT', 15);
+ define ('PDF_MARGIN_RIGHT', 15);
+
+
+/** Class za generacijo pdf-a
+ *
+ * @desc: po novem je potrebno form elemente generirati ro�no kot slike
+ *
+ */
+class PdfIzvozAnalizaCrosstab {
+
+ var $anketa;// = array(); // trenutna anketa
+
+ var $pi=array('canCreate'=>false); // za shrambo parametrov in sporocil
+ var $pdf;
+ var $currentStyle;
+ var $db_table = '';
+
+ public $crosstabClass = null; //crosstab class
+
+ var $crossData1;
+ var $crossData2;
+
+ var $crosstabVars;
+ var $counter;
+
+ var $sessionData; // podatki ki so bili prej v sessionu - za nastavitve, ki se prenasajo v izvoze...
+
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null, $crossData1, $crossData2, $podstran = M_ANALIZA_CROSSTAB)
+ {
+ global $site_path;
+ global $global_user_id;
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) )
+ {
+ $this->anketa['id'] = $anketa;
+ $this->anketa['podstran'] = $podstran;
+ // create new PDF document
+ $this->pdf = new enka_TCPDF('L', PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
+ }
+ else
+ {
+ $this->pi['msg'] = "Anketa ni izbrana!";
+ $this->pi['canCreate'] = false;
+ return false;
+ }
+ $_GET['a'] = A_ANALYSIS;
+
+ // preberemo nastavitve iz baze (prej v sessionu)
+ SurveyUserSession::Init($this->anketa['id']);
+ $this->sessionData = SurveyUserSession::getData('crosstab_charts');
+
+ //ustvarimo crosstab objekt in mu napolnimo variable (var1, var2, checkboxi)
+ $this->crosstabClass = new SurveyCrosstabs();
+ $this->crosstabClass->Init($anketa);
+
+ for($i=0; $i<sizeof($crossData1)/3; $i++){
+ $index = $i * 3;
+ $this->crossData1[$i] = array($crossData1[$index],$crossData1[$index+1],$crossData1[$index+2]);
+ }
+ for($i=0; $i<sizeof($crossData2)/3; $i++){
+ $index = $i * 3;
+ $this->crossData2[$i] = array($crossData2[$index],$crossData2[$index+1],$crossData2[$index+2]);
+ }
+
+ //$this->crosstabClass->setVariables($crossData2[0],$crossData2[1],$crossData2[2],$crossData1[0],$crossData1[1],$crossData1[2]);
+
+ if ( SurveyInfo::getInstance()->SurveyInit($this->anketa['id']) && $this->init())
+ {
+ $this->anketa['uid'] = $global_user_id;
+ SurveyUserSetting::getInstance()->Init($this->anketa['id'], $this->anketa['uid']);
+ }
+ else
+ return false;
+ // ce smo prisli do tu je vse ok
+ $this->pi['canCreate'] = true;
+
+ return true;
+ }
+
+ // SETTERS && GETTERS
+
+ function checkCreate()
+ {
+ return $this->pi['canCreate'];
+ }
+ function getFile($fileName)
+ {
+ //Close and output PDF document
+ ob_end_clean();
+ $this->pdf->Output($fileName, 'I');
+ }
+
+
+ function init()
+ {
+ global $lang;
+
+ // array used to define the language and charset of the pdf file to be generated
+ $language_meta = Array();
+ $language_meta['a_meta_charset'] = 'UTF-8';
+ $language_meta['a_meta_dir'] = 'ltr';
+ $language_meta['a_meta_language'] = 'sl';
+ $language_meta['w_page'] = $lang['page'];
+
+ //set some language-dependent strings
+ $this->pdf->setLanguageArray($language_meta);
+
+ //set margins
+ $this->pdf->setPrintHeaderFirstPage(true);
+ $this->pdf->setPrintFooterFirstPage(true);
+ $this->pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
+ $this->pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
+ $this->pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
+
+ // set header and footer fonts
+ $this->pdf->setHeaderFont(Array(FNT_HEADER_TEXT, "I", FNT_HEADER_SIZE));
+ $this->pdf->setFooterFont(Array(FNT_HEADER_TEXT, 'I', FNT_HEADER_SIZE));
+
+
+ // set document information
+ $this->pdf->SetAuthor('An Order Form');
+ $this->pdf->SetTitle('An Order');
+ $this->pdf->SetSubject('An Order');
+
+ // set default header data
+ $this->pdf->SetHeaderData(null, null, "www.1ka.si", $this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()));
+
+ //set auto page breaks
+ $this->pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
+
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', FNT_MAIN_SIZE);
+ //set image scale factor
+ $this->pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
+ return true;
+ }
+
+ function encodeText($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace(array("&scaron;","&#353;","&#269;"),array("Å¡","Å¡","Ä"),$text);
+ return strip_tags($text);
+ }
+
+ function createPdf()
+ {
+ global $site_path;
+ global $lang;
+
+ // izpisemo prvo stran
+ //$this->createFrontPage();
+
+ $this->pdf->AddPage();
+
+ $this->pdf->setFont('','B','11');
+ $this->pdf->MultiCell(150, 5, $lang['export_analisys_crosstabs'], 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->ln(5);
+
+ $this->pdf->setDrawColor(128, 128, 128);
+ $this->pdf->setFont('','','6');
+
+ # polovimo nastavtve missing profila
+ //SurveyConditionProfiles:: getConditionString();
+
+ $this->crosstabClass->_LOOPS = SurveyZankaProfiles::getFiltersForLoops();
+ if (count($this->crosstabClass->_LOOPS) > 0) {
+ # Äe mamo zanke
+ foreach ( $this->crosstabClass->_LOOPS AS $loop) {
+
+ $this->crosstabClass->_CURRENT_LOOP = $loop;
+ $this->displayCrosstabsTable();
+ }
+ } else {
+
+ // loopamo cez vse izbrane variable in izrisemo vse tabele
+ $addPage = false;
+ $this->counter = 0;
+ for($j=0; $j<sizeof($this->crossData2); $j++){
+ for($i=0; $i<sizeof($this->crossData1); $i++){
+
+ if($addPage)
+ $this->pdf->AddPage();
+ else
+ $addPage = true;
+
+ $this->pdf->ln(5);
+ $this->crosstabClass->setVariables($this->crossData2[$j][0],$this->crossData2[$j][1],$this->crossData2[$j][2],$this->crossData1[$i][0],$this->crossData1[$i][1],$this->crossData1[$i][2]);
+
+ $this->displayCrosstabsTable();
+
+ $this->counter++;
+ }
+ }
+ }
+
+ }
+
+ public function displayCrosstabsTable() {
+ global $lang;
+
+ if ($this->crosstabClass->getSelectedVariables(1) !== null && $this->crosstabClass->getSelectedVariables(2) !== null) {
+ $variables1 = $this->crosstabClass->getSelectedVariables(1);
+ $variables2 = $this->crosstabClass->getSelectedVariables(2);
+
+ foreach ($variables1 AS $v_first) {
+ foreach ($variables2 AS $v_second) {
+
+ $crosstabs = null;
+ $crosstabs_value = null;
+
+ $crosstabs = $this->crosstabClass->createCrostabulation($v_first, $v_second);
+ $crosstabs_value = $crosstabs['crosstab'];
+
+ # podatki spremenljivk
+ $spr1 = $this->crosstabClass->_HEADERS[$v_first['spr']];
+ $spr2 = $this->crosstabClass->_HEADERS[$v_second['spr']];
+
+ $grid1 = $spr1['grids'][$v_first['grd']];
+ $grid2 = $spr2['grids'][$v_second['grd']];
+
+ #Å¡tevilo vratic in Å¡tevilo kolon
+ $cols = count($crosstabs['options1']);
+ $rows = count($crosstabs['options2']);
+
+ # ali prikazujemo vrednosti variable pri spremenljivkah
+ $show_variables_values = $this->crosstabClass->doValues;
+
+ # nastavitve oblike
+ if (($this->crosstabClass->crossChk1 || $this->crosstabClass->crossChk2 || $this->crosstabClass->crossChk3) && ($this->crosstabClass->crossChkEC || $this->crosstabClass->crossChkRE || $this->crosstabClass->crossChkSR || $this->crosstabClass->crossChkAR)) {
+ # dodamo procente in residuale
+ $rowSpan = 3;
+ $numColumnPercent = $this->crosstabClass->crossChk1 + $this->crosstabClass->crossChk2 + $this->crosstabClass->crossChk3;
+ $numColumnResidual = $this->crosstabClass->crossChkEC + $this->crosstabClass->crossChkRE + $this->crosstabClass->crossChkSR + $this->crosstabClass->crossChkAR;
+ $tblColumn = max($numColumnPercent,$numColumnResidual);
+ } else if ($this->crosstabClass->crossChk1 || $this->crosstabClass->crossChk2 || $this->crosstabClass->crossChk3) {
+ # imamo samo procente
+ $rowSpan = 2;
+ $numColumnPercent = $this->crosstabClass->crossChk1 + $this->crosstabClass->crossChk2 + $this->crosstabClass->crossChk3;
+ $numColumnResidual = 0;
+ $tblColumn = $numColumnPercent;
+ } else if ($this->crosstabClass->crossChkEC || $this->crosstabClass->crossChkRE || $this->crosstabClass->crossChkSR || $this->crosstabClass->crossChkAR) {
+ # imamo samo residuale
+ $rowSpan = 2;
+ $numColumnPercent = 0;
+ $numColumnResidual = $this->crosstabClass->crossChkEC + $this->crosstabClass->crossChkRE + $this->crosstabClass->crossChkSR + $this->crosstabClass->crossChkAR;
+ $tblColumn = $numColumnResidual;
+ } else {
+ #prikazujemo samo podatke
+ $rowSpan = 1;
+ $numColumnPercent = 0;
+ $numColumnResidual = 0;
+ $tblColumn = 1;
+ }
+
+ //izracun sirine ene celice
+ if($cols > 0)
+ $singleWidth = ($cols > 2) ? round( 170 / $cols ) : round( 150 / $cols );
+
+ # izrišemo tabelo
+
+ # najprej izrišemo naslovne vrstice
+ # za multicheckboxe popravimo naslov, na podtip
+ $sub_q1 = null;
+ if ($spr1['tip'] == '6' || $spr1['tip'] == '16' || $spr1['tip'] == '17' || $spr1['tip'] == '19' || $spr1['tip'] == '20') {
+ foreach ($spr1['grids'] AS $grid) {
+ foreach ($grid['variables'] AS $variable) {
+ if ($variable['sequence'] == $v_first['seq']) {
+ $sub_q1 = strip_tags($spr1['naslov']);
+ if ($show_variables_values == true ) {
+ $sub_q1 .= '&nbsp;('.strip_tags($spr1['variable']).')';
+ }
+ if ($spr1['tip'] == '16') {
+ $sub_q1 .= ', ' . strip_tags($grid1['naslov']) . ($show_variables_values == true ? '&nbsp;(' . strip_tags($grid1['variable']) . ')' : '');
+ } else {
+ $sub_q1 .= ', ' . strip_tags($variable['naslov']) . ($show_variables_values == true ? '&nbsp;(' . strip_tags($variable['variable']) . ')' : '');
+ }
+ }
+ }
+ }
+ }
+ if ($sub_q1 == null) {
+ $sub_q1 .= strip_tags($spr1['naslov']);
+ $sub_q1 .= ($show_variables_values == true ? '&nbsp;('.strip_tags($spr1['variable']).')' : '');
+ }
+
+ $sub_q2 = null;
+ if ($spr2['tip'] == '6' || $spr2['tip'] == '16' || $spr2['tip'] == '17' || $spr2['tip'] == '19' || $spr2['tip'] == '20') {
+ foreach ($spr2['grids'] AS $grid) {
+ foreach ($grid['variables'] AS $variable) {
+ if ($variable['sequence'] == $v_second['seq']) {
+ $sub_q2 = strip_tags($spr2['naslov']);
+ if ($show_variables_values == true) {
+ $sub_q2 .= '&nbsp;('.strip_tags($spr2['variable']).')';
+ }
+ if ($spr2['tip'] == '16') {
+ $sub_q2.= ', ' . strip_tags($grid2['naslov']) . ($show_variables_values == true ? '&nbsp;(' . strip_tags($grid2['variable']) . ')' : '');
+ } else {
+ $sub_q2.= ', ' . strip_tags($variable['naslov']) . ($show_variables_values == true ? '&nbsp;(' . strip_tags($variable['variable']) . ')' : '');
+ }
+ }
+ }
+ }
+ }
+ if ($sub_q2 == null) {
+ $sub_q2 .= strip_tags($spr2['naslov']);
+ $sub_q2 .= ($show_variables_values == true ? '&nbsp;('.strip_tags($spr2['variable']).')' : '');
+ }
+
+ $this->crosstabVars = array($sub_q1, $sub_q2);
+
+ $this->pdf->setFont('','B','6');
+
+ /*$linecount = $this->pdf->getNumLines($this->encodeText($sub_q1), 170);
+ $firstHeight = ( $linecount == 1 ? 4.7 : (4.7 + ($linecount-1)*3.3) );*/
+ $firstHeight = $this->getCellHeight($this->encodeText($sub_q1), $singleWidth * count($crosstabs['options1']));
+
+ // prva vrstica
+ $this->pdf->MultiCell(25, $firstHeight, $this->encodeText(''), 0, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(20, $firstHeight, $this->encodeText(''), 0, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell($singleWidth * count($crosstabs['options1']), $firstHeight, $this->encodeText($sub_q1), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell($singleWidth, $firstHeight, $this->encodeText(''), 0, 'C', 0, 1, 0 ,0, true);
+
+
+ // Izracun visine vrstice z naslovi gridov
+ $height = 0;
+ if (count($crosstabs['options1']) > 0 ) {
+ foreach ($crosstabs['options1'] as $ckey1 =>$crossVariabla) {
+ #ime variable
+ $text = $crossVariabla['naslov'];
+ # Äe ni tekstovni odgovor dodamo key
+ if ($crossVariabla['type'] != 't') {
+ $text .= ' ( '.$ckey1.' )';
+ }
+
+ /*$linecount = $this->pdf->getNumLines($this->encodeText($text), $singleWidth);
+ $height = ($height < 4.7 + ($linecount-1)*3.7) ? (4.7 + ($linecount-1)*3.7) : $height;*/
+ $height = ($height > $this->getCellHeight($this->encodeText($text), $singleWidth)) ? $height : $this->getCellHeight($this->encodeText($text), $singleWidth);
+ }
+ }
+
+ // druga vrstica
+ $this->pdf->setFont('','','6');
+ $this->pdf->MultiCell(25, $height, $this->encodeText(''), 0, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(20, $height, $this->encodeText(''), 0, 'C', 0, 0, 0 ,0, true);
+
+ if (count($crosstabs['options1']) > 0 ) {
+ foreach ($crosstabs['options1'] as $ckey1 =>$crossVariabla) {
+ #ime variable
+ $text = $crossVariabla['naslov'];
+ # Äe ni tekstovni odgovor dodamo key
+ if ($crossVariabla['type'] != 't') {
+ $text .= ' ( '.$ckey1.' )';
+ }
+ $this->pdf->MultiCell($singleWidth, $height, $this->encodeText($text), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ }
+
+ $this->pdf->MultiCell($singleWidth, $height, $this->encodeText($lang['srv_analiza_crosstab_skupaj']), 1, 'C', 0, 1, 0 ,0, true);
+
+ //izracun visine ene celice
+ if($rowSpan == 1)
+ $height = 8;
+ elseif($rowSpan == 2)
+ $height = 10;
+ else
+ $height = 15;
+
+ //VMESNE VRSTICE
+ $cntY = 1;
+ if (count($crosstabs['options2']) > 0) {
+
+ //POSAMEZNA VMESNA VRSTICA
+ foreach ($crosstabs['options2'] as $ckey2 =>$crossVariabla2) {
+
+ if( $cntY == 1 )
+ $border = 'TLR';
+ elseif( $cntY == $rows )
+ $border = 'BLR';
+ else
+ $border = 'LR';
+
+ if ( $cntY == ceil($rows/2) || $rows == 1 ) {
+ # ime variable
+ $this->pdf->setFont('','B','6');
+ $this->pdf->MultiCell(25, $height, $this->encodeText($sub_q2), $border, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->setFont('','','6');
+ }
+ else{
+ $this->pdf->MultiCell(25, $height, $this->encodeText(''), $border, 'C', 0, 0, 0 ,0, true);
+ }
+ $cntY++;
+
+ $text = $crossVariabla2['naslov'];
+ $text = $this->snippet($this->encodeText($text), 25);
+ if ($crossVariabla2['type'] !== 't') {
+ $text .= ' ('.$ckey2.')';
+ }
+ $this->pdf->MultiCell(20, $height, $text, 1, 'C', 0, 0, 0 ,0, true);
+
+ //del vrstice z vsebino
+ $this->pdf->setFont('','','5');
+ foreach ($crosstabs['options1'] as $ckey1 => $crossVariabla1) {
+
+ $data = array();
+
+ if ($this->crosstabClass->crossChk0) {
+ # frekvence crostabov
+ $data[] = ((int)$crosstabs_value[$ckey1][$ckey2] > 0) ? $crosstabs_value[$ckey1][$ckey2] : 0;
+ }
+
+ if ($this->crosstabClass->crossChk1) {
+ #procent vrstica
+ $data[] = $this->formatNumber($this->crosstabClass->getCrossTabPercentage($crosstabs['sumaVrstica'][$ckey2], $crosstabs_value[$ckey1][$ckey2]), 2, '%');
+ }
+ if ($this->crosstabClass->crossChk2) {
+ #procent stolpec
+ $data[] = $this->formatNumber($this->crosstabClass->getCrossTabPercentage($crosstabs['sumaStolpec'][$ckey1], $crosstabs_value[$ckey1][$ckey2]), 2, '%');
+ }
+ if ($this->crosstabClass->crossChk3) {
+ #procent skupni
+ $data[] = $this->formatNumber($this->crosstabClass->getCrossTabPercentage($crosstabs['sumaSkupna'], $crosstabs_value[$ckey1][$ckey2]), 2, '%');
+ }
+
+ # residuali
+ if ($this->crosstabClass->crossChkEC) {
+ $data[] = $this->formatNumber($crosstabs['exC'][$ckey1][$ckey2], 3, '');
+ }
+ if ($this->crosstabClass->crossChkRE) {
+ $data[] = $this->formatNumber($crosstabs['res'][$ckey1][$ckey2], 3, '');
+ }
+ if ($this->crosstabClass->crossChkSR) {
+ $data[] = $this->formatNumber($crosstabs['stR'][$ckey1][$ckey2], 3, '');
+ }
+ if ($this->crosstabClass->crossChkAR) {
+ $data[] = $this->formatNumber($crosstabs['adR'][$ckey1][$ckey2], 3, '');
+ }
+
+ $this->displayCell($data, $singleWidth, $rowSpan, $this->crosstabClass->crossChk0, $numColumnPercent, $numColumnResidual);
+ }
+
+ //se zadnji stolpec - vedno risemo
+ $data = array();
+
+ if ($this->crosstabClass->crossChk0) {
+ # suma po vrsticah
+ $data[] = (int)$crosstabs['sumaVrstica'][$ckey2];
+ }
+ if ($this->crosstabClass->crossChk1 || $this->crosstabClass->crossChk2 || $this->crosstabClass->crossChk3) {
+ # suma po vrsticah v procentih
+ if ($this->crosstabClass->crossChk1) {
+ $data[] = $this->formatNumber(100, 2, '%');
+ }
+ if ($this->crosstabClass->crossChk2) {
+ $data[] = $this->formatNumber( ($crosstabs['sumaSkupna'] > 0 ? (100 * $crosstabs['sumaVrstica'][$ckey2] / $crosstabs['sumaSkupna']) : 0), 2, '%');
+ }
+ if ($this->crosstabClass->crossChk3) {
+ $data[] = $this->formatNumber( ($crosstabs['sumaSkupna'] > 0 ? (100 * $crosstabs['sumaVrstica'][$ckey2] / $crosstabs['sumaSkupna']) : 0), 2, '%');
+ }
+ }
+
+ $this->displayCell($data, $singleWidth, $rowSpan, $this->crosstabClass->crossChk0, $numColumnPercent, 0);
+ $this->pdf->MultiCell(1, $height, '', 0, 'C', 0, 1, 0 ,0, true);
+
+ $this->pdf->setFont('','','6');
+ }
+ }
+
+
+ // skupni sestevki po stolpcih - ZADNJA VRSTICA
+ //popravimo stevilo vrstic (brez residualov)
+ if($this->crosstabClass->crossChkEC || $this->crosstabClass->crossChkRE || $this->crosstabClass->crossChkSR || $this->crosstabClass->crossChkAR)
+ $rowSpan--;
+
+ //izracun visine ene celice
+ if($rowSpan == 1)
+ $height = 8;
+ elseif($rowSpan == 2)
+ $height = 10;
+ else
+ $height = 15;
+
+ $this->pdf->MultiCell(25, $height, $this->encodeText(''), 'T', 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(20, $height, $this->encodeText($lang['srv_analiza_crosstab_skupaj']), 1, 'C', 0, 0, 0 ,0, true);
+
+ $this->pdf->setFont('','','5');
+
+ if (count($crosstabs['options1']) > 0){
+
+ foreach ($crosstabs['options1'] as $ckey1 => $crossVariabla1) {
+
+ $data = array();
+
+ # prikazujemo eno od treh možnosti
+ if ($this->crosstabClass->crossChk0) {
+ # suma po stolpcih
+ $data[] = (int)$crosstabs['sumaStolpec'][$ckey1];
+ }
+ if ($this->crosstabClass->crossChk1 || $this->crosstabClass->crossChk2 || $this->crosstabClass->crossChk3) {
+ # suma po stolpcih v procentih
+ if ($this->crosstabClass->crossChk1) {
+ $data[] = $this->formatNumber( ($crosstabs['sumaSkupna'] > 0 ? (100 * $crosstabs['sumaStolpec'][$ckey1] / $crosstabs['sumaSkupna']) : 0), 2, '%');
+ }
+ if ($this->crosstabClass->crossChk2) {
+ $data[] = $this->formatNumber(100, 2, '%');
+ }
+ if ($this->crosstabClass->crossChk3)
+ {
+ $data[] = $this->formatNumber( ($crosstabs['sumaSkupna'] > 0 ? (100 * $crosstabs['sumaStolpec'][$ckey1] / $crosstabs['sumaSkupna']) : 0), 2, '%');
+ }
+ }
+
+ $this->displayCell($data, $singleWidth, $rowSpan, $this->crosstabClass->crossChk0, $numColumnPercent, 0);
+ }
+
+ # zadnja celica z skupno sumo
+ $data = array();
+
+ if ($this->crosstabClass->crossChk0) {
+ # skupna suma
+ $data[] = (int)$crosstabs['sumaSkupna'];
+ }
+ if ($this->crosstabClass->crossChk1 || $this->crosstabClass->crossChk2 || $this->crosstabClass->crossChk3) {
+ # suma po stolpcih v procentih
+ if ($this->crosstabClass->crossChk1) {
+ $data[] = $this->formatNumber(100, 2, '%');
+ }
+ if ($this->crosstabClass->crossChk2) {
+ $data[] = $this->formatNumber(100, 2, '%');
+ }
+ if ($this->crosstabClass->crossChk3) {
+ $data[] = $this->formatNumber(100, 2, '%');
+ }
+ }
+
+ $this->displayCell($data, $singleWidth, $rowSpan, $this->crosstabClass->crossChk0, $numColumnPercent, 0);
+ }
+
+ $this->pdf->setFont('','','6');
+ $this->pdf->ln(5);
+
+
+ // Izris grafa (ce je vklopljena nastavitev)
+ if($this->sessionData['showChart'] == '1'){
+ $this->displayChart();
+ }
+ }
+ }
+ }
+ }
+
+
+ /*
+ prikazemo posamezno celico s podatki
+ $data - vsebina (array)
+ $width - sirina celice
+ $numRows - stevilo vrstic (1, 2 ali 3)
+ frekvence - da ali ne
+ $numColumnPercent - stevilo stolpcev pri procentih (1, 2 ali 3)
+ $numColumnResidual - stevilo stolpcev pri procentih (1, 2, 3 ali 4)
+ */
+ function displayCell($data, $width, $numRows, $frekvence, $numColumnPercent, $numColumnResidual){
+
+ $height = ($numRows == 1 ? 8 : 5);
+ $fullHeight = ($height == 8 ? $height : $numRows*$height);
+ $i=0;
+
+ //preberemo pozicijo - zacetek celice
+ $y = $this->pdf->GetY();
+ $x = $this->pdf->GetX();
+
+ $this->pdf->setDrawColor(128, 128, 128);
+
+ //izrisemo frekvence
+ if($frekvence == 1){
+ $this->pdf->MultiCell($width, $height, $this->encodeText($data[$i]), 1, 'C', 0, 1, 0 ,0, true);
+ $i++;
+ }
+
+ if($numColumnPercent > 0){
+
+ $this->pdf->setX($x);
+ $singleWidth = round($width/$numColumnPercent);
+
+ for($j=1; $j<$numColumnPercent; $j++){
+ $this->pdf->MultiCell($singleWidth, $height, $this->encodeText($data[$i]), 1, 'C', 0, 0, 0 ,0, true);
+ $i++;
+ }
+ $this->pdf->MultiCell($width - (($numColumnPercent-1)*$singleWidth), $height, $this->encodeText($data[$i]), 1, 'C', 0, 1, 0 ,0, true);
+ $i++;
+ }
+
+ if($numColumnResidual > 0){
+
+ $this->pdf->setX($x);
+ $singleWidth = round($width/$numColumnResidual);
+
+ for($j=1; $j<$numColumnResidual; $j++){
+ $this->pdf->MultiCell($singleWidth, $height, $this->encodeText($data[$i]), 1, 'C', 0, 0, 0 ,0, true);
+ $i++;
+ }
+ $this->pdf->MultiCell($width - (($numColumnResidual-1)*$singleWidth), $height, $this->encodeText($data[$i]), 1, 'C', 0, 1, 0 ,0, true);
+ $i++;
+ }
+
+ //zaradi preglednosti narisemo okvir celotne celice
+ $this->pdf->setDrawColor(128, 128, 128);
+ $this->pdf->SetXY($x, $y);
+ $this->pdf->MultiCell($width, $fullHeight, '', 1, 'C', 0, 1, 0 ,0, true);
+
+ //na koncu nastavimo pozicijo na pravo mesto
+ $this->pdf->SetXY($x+$width, $y);
+ }
+
+ function displayChart(){
+ global $lang;
+
+ // Zgeneriramo id vsake tabele (glede na izbrani spremenljivki za generiranje)
+ $chartID = implode('_', $this->crosstabClass->variabla1[0]).'_'.implode('_', $this->crosstabClass->variabla2[0]);
+ $chartID .= '_counter_'.$this->counter;
+
+ $settings = $this->sessionData[$chartID];
+ $imgName = $settings['name'];
+
+ $size = getimagesize('pChart/Cache/'.$imgName);
+ $height = $size[1] / 5;
+
+ if($this->pdf->getY() + $height > 250)
+ {
+ $this->pdf->AddPage();
+ }
+ else
+ $this->pdf->setY($this->pdf->getY() + 15);
+
+
+ // Naslov posameznega grafa
+ $this->pdf->setFont('','b','6');
+ $this->pdf->MultiCell(30, 5,'', 0, 'C', 0, 0, 0 ,0, true);
+ if($settings['type'] == 1 || $settings['type'] == 4){
+ $this->pdf->MultiCell(90, 5, $this->encodeText($this->crosstabVars[0]), 0, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(20, 5, $this->encodeText('/'), 0, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(90, 5, $this->encodeText($this->crosstabVars[1]), 0, 'C', 0, 1, 0 ,0, true);
+ }
+ else{
+ $this->pdf->MultiCell(200, 5, $this->encodeText($this->crosstabVars[0]), 0, 'C', 0, 1, 0 ,0, true);
+ }
+ $this->pdf->setFont('','','6');
+
+ $this->pdf->Image('pChart/Cache/'.$imgName, $x='', $y='', $w=200, $h, $type='PNG', $link='', $align='N', $resize=true, $dpi=1600, $palign='C', $ismask=false, $imgmask=false, $border=0);
+ }
+
+
+ /*Skrajsa tekst in doda '...' na koncu*/
+ function snippet($text,$length=64,$tail="...")
+ {
+ $text = trim($text);
+ $txtl = strlen($text);
+ if($txtl > $length)
+ {
+ for($i=1;$text[$length-$i]!=" ";$i++)
+ {
+ if($i == $length)
+ {
+ return substr($text,0,$length) . $tail;
+ }
+ }
+ $text = substr($text,0,$length-$i+1) . $tail;
+ }
+ return $text;
+ }
+
+ function drawLine()
+ {
+ $cy = $this->pdf->getY();
+ $this->pdf->Line(15, $cy , 195, $cy , $this->currentStyle);
+ }
+
+ function setUserId($usrId) {$this->anketa['uid'] = $usrId;}
+ function getUserId() {return ($this->anketa['uid'])?$this->anketa['uid']:false;}
+
+ function formatNumber($value,$digit=0,$sufix="")
+ {
+ if ( $value <> 0 && $value != null )
+ $result = round($value,$digit);
+ else
+ $result = "0";
+ $result = number_format($result, $digit, ',', '.').$sufix;
+
+ return $result;
+ }
+
+ function getCellHeight($string, $width){
+
+ $this->pdf->startTransaction();
+ // get the number of lines calling you method
+ $linecount = $this->pdf->MultiCell($width, 0, $string, 0, 'L', 0, 0, '', '', true, 0, false, true, 0);
+ // restore previous object
+ $this->pdf = $this->pdf->rollbackTransaction();
+
+ $height = ($linecount <= 1) ? 4.7 : $linecount * ($this->pdf->getFontSize() * $this->pdf->getCellHeightRatio()) + 2;
+
+ return $height;
+ }
+
+}
+
+?> \ No newline at end of file
diff --git a/admin/exportclases/class.pdfIzvozAnalizaFrekvenca.php b/admin/exportclases/class.pdfIzvozAnalizaFrekvenca.php
new file mode 100644
index 0000000..6d76c83
--- /dev/null
+++ b/admin/exportclases/class.pdfIzvozAnalizaFrekvenca.php
@@ -0,0 +1,540 @@
+<?php
+
+ global $site_path;
+
+ include_once('../../function.php');
+ include_once('../survey/definition.php');
+ include_once('../exportclases/class.pdfIzvozAnalizaSums.php');
+ include_once('../exportclases/class.pdfIzvozAnalizaFunctions.php');
+ require_once('../exportclases/class.enka.pdf.php');
+
+ define("ALLOW_HIDE_ZERRO_REGULAR", false); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za navadne odgovore
+ define("ALLOW_HIDE_ZERRO_MISSING", true); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za missinge
+
+ define("NUM_DIGIT_AVERAGE", 2, true); // stevilo digitalnih mest za povprecje
+ define("NUM_DIGIT_DEVIATION", 2, true); // stevilo digitalnih mest za povprecje
+
+ define("M_ANALIZA_DESCRIPTOR", "descriptor", true);
+ define("M_ANALIZA_FREQUENCY", "frequency", true);
+
+ define("FNT_FREESERIF", "freeserif", true);
+ define("FNT_FREESANS", "freesans", true);
+ define("FNT_HELVETICA", "helvetica", true);
+
+ define("FNT_MAIN_TEXT", FNT_FREESANS, true);
+ define("FNT_QUESTION_TEXT", FNT_FREESANS, true);
+ define("FNT_HEADER_TEXT", FNT_FREESANS, true);
+
+ define("FNT_MAIN_SIZE", 10, true);
+ define("FNT_QUESTION_SIZE", 9, true);
+ define("FNT_HEADER_SIZE", 10, true);
+
+ define("RADIO_BTN_SIZE", 3, true);
+ define("CHCK_BTN_SIZE", 3, true);
+ define("LINE_BREAK", 6, true);
+
+ define ('PDF_MARGIN_HEADER', 8);
+ define ('PDF_MARGIN_FOOTER', 12);
+ define ('PDF_MARGIN_TOP', 18);
+ define ('PDF_MARGIN_BOTTOM', 18);
+ define ('PDF_MARGIN_LEFT', 15);
+ define ('PDF_MARGIN_RIGHT', 15);
+
+/**
+ * @desc Class za generacijo pdf-a
+ */
+class PdfIzvozAnalizaFrekvenca {
+
+ var $anketa;// = array(); // trenutna anketa
+
+ var $pi=array('canCreate'=>false); // za shrambo parametrov in sporocil
+ var $pdf;
+ var $currentStyle;
+
+ private $headFileName = null; # pot do header fajla
+ private $dataFileName = null; # pot do data fajla
+ private $dataFileStatus = null; # status data datoteke
+
+ var $current_loop = 'undefined';
+
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null, $sprID = null, $loop = null)
+ {
+ global $site_path;
+ global $global_user_id;
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) )
+ {
+ $this->anketa['id'] = $anketa;
+ $this->spremenljivka = $sprID;
+
+ SurveyAnalysis::Init($this->anketa['id']);
+ SurveyAnalysis::$setUpJSAnaliza = false;
+
+ // create new PDF document
+ $this->pdf = new enka_TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
+
+ // Poskrbimo za datoteko s podatki
+ $SDF = SurveyDataFile::get_instance();
+ $SDF->init($this->anketa['id']);
+ $SDF->prepareFiles();
+
+ $this->headFileName = $SDF->getHeaderFileName();
+ $this->dataFileName = $SDF->getDataFileName();
+ $this->dataFileStatus = $SDF->getStatus();
+
+ SurveyZankaProfiles :: Init($this->anketa['id'], $global_user_id);
+ $this->current_loop = ($loop != null) ? $loop : $this->current_loop;
+ }
+ else
+ {
+ $this->pi['msg'] = "Anketa ni izbrana!";
+ $this->pi['canCreate'] = false;
+ return false;
+ }
+
+ if ( SurveyInfo::getInstance()->SurveyInit($this->anketa['id']) && $this->init())
+ {
+ $this->anketa['uid'] = $global_user_id;
+ SurveyUserSetting::getInstance()->Init($this->anketa['id'], $this->anketa['uid']);
+ }
+ else
+ return false;
+ // ce smo prisli do tu je vse ok
+ $this->pi['canCreate'] = true;
+
+ return true;
+ }
+
+ // SETTERS && GETTERS
+
+ function checkCreate()
+ {
+ return $this->pi['canCreate'];
+ }
+ function getFile($fileName)
+ {
+ //Close and output PDF document
+ ob_end_clean();
+ $this->pdf->Output($fileName, 'I');
+ }
+
+
+ function init()
+ {
+ global $lang;
+
+ // array used to define the language and charset of the pdf file to be generated
+ $language_meta = Array();
+ $language_meta['a_meta_charset'] = 'UTF-8';
+ $language_meta['a_meta_dir'] = 'ltr';
+ $language_meta['a_meta_language'] = 'sl';
+ $language_meta['w_page'] = $lang['page'];
+
+ //set some language-dependent strings
+ $this->pdf->setLanguageArray($language_meta);
+
+ //set margins
+ $this->pdf->setPrintHeaderFirstPage(true);
+ $this->pdf->setPrintFooterFirstPage(true);
+ $this->pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
+ $this->pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
+ $this->pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
+
+ // set header and footer fonts
+ $this->pdf->setHeaderFont(Array(FNT_HEADER_TEXT, "I", FNT_HEADER_SIZE));
+ $this->pdf->setFooterFont(Array(FNT_HEADER_TEXT, 'I', FNT_HEADER_SIZE));
+
+
+ // set document information
+ $this->pdf->SetAuthor('An Order Form');
+ $this->pdf->SetTitle('An Order');
+ $this->pdf->SetSubject('An Order');
+
+ // set default header data
+ $this->pdf->SetHeaderData(null, null, "www.1ka.si", $this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()));
+
+ //set auto page breaks
+ $this->pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
+
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', FNT_MAIN_SIZE);
+ //set image scale factor
+ $this->pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
+ return true;
+ }
+
+ function encodeText($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace(array("&scaron;","&#353;","&#269;"),array("�","�","�"),$text);
+ return strip_tags($text);
+ }
+
+ function createPdf(){
+ global $site_path;
+ global $lang;
+
+ // izpisemo prvo stran
+ //$this->createFrontPage();
+
+ $this->pdf->AddPage();
+
+ $this->pdf->setFont('','B','11');
+ $this->pdf->MultiCell(150, 5, $lang['export_analisys_freq'], 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->ln(5);
+
+ $this->pdf->SetDrawColor(128, 128, 128);
+ $this->pdf->setFont('','','6');
+
+
+ # preberemo header
+ if ($this->headFileName !== null) {
+ //polovimo podatke o nastavitvah trenutnega profila (missingi..)
+ SurveyAnalysis::$missingProfileData = SurveyMissingProfiles::getProfile(SurveyAnalysis::$currentMissingProfile);
+
+ // Preverimo ce imamo zanke (po skupinah)
+ SurveyAnalysis::$_LOOPS = SurveyZankaProfiles::getFiltersForLoops();
+
+ # Äe nimamo zank
+ if(count(SurveyAnalysis::$_LOOPS) == 0){
+
+ $this->displayTables();
+ }
+ else{
+ // izrisemo samo eno tabelo iz enega loopa
+ if($this->current_loop > 0){
+
+ $loop = SurveyAnalysis::$_LOOPS[(int)$this->current_loop-1];
+ $loop['cnt'] = $this->current_loop;
+ SurveyAnalysis::$_CURRENT_LOOP = $loop;
+
+ // Izpisemo naslov zanke za skupino
+ $this->pdf->setFont('','B','10');
+ $this->pdf->ln(5);
+ $this->pdf->MultiCell(200, 5, $this->encodeText($lang['srv_zanka_note'].$loop['text']), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->setFont('','','6');
+
+ $this->displayTables();
+ }
+ // Izrisemo vse tabele spremenljivka (iz vseh loopov)
+ else{
+ $loop_cnt = 0;
+ # Äe mamo zanke
+ foreach(SurveyAnalysis::$_LOOPS AS $loop) {
+ $loop_cnt++;
+ $loop['cnt'] = $loop_cnt;
+ SurveyAnalysis::$_CURRENT_LOOP = $loop;
+
+ // Izpisemo naslov zanke za skupino
+ $this->pdf->setFont('','B','10');
+ $this->pdf->ln(5);
+ $this->pdf->MultiCell(200, 5, $this->encodeText($lang['srv_zanka_note'].$loop['text']), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->setFont('','','6');
+
+ $this->displayTables();
+ }
+ }
+ }
+
+ } // end if else ($_headFileName == null)
+ }
+
+ function displayTables(){
+ global $site_path;
+ global $lang;
+ global $global_user_id;
+
+ #preberemo HEADERS iz datoteke
+ SurveyAnalysis::$_HEADERS = unserialize(file_get_contents($this->headFileName));
+
+ # polovimo frekvence
+ SurveyAnalysis::getFrequencys();
+
+ #odstranimo sistemske variable
+ SurveyAnalysis::removeSystemVariables();
+
+ $vars_count = count(SurveyAnalysis::$_FILTRED_VARIABLES);
+ foreach (SurveyAnalysis::$_HEADERS AS $spid => $spremenljivka) {
+ # preverjamo ali je meta
+ if (($spremenljivka['tip'] != 'm'
+ && in_array($spremenljivka['tip'], SurveyAnalysis::$_FILTRED_TYPES ))
+ && (!isset($_spid) || (isset($_spid) && $_spid == $spid))
+ && ($this->spremenljivka == $spid || $this->spremenljivka == null) ) {
+ # ali imamo sfiltrirano spremenljivko
+ if ($vars_count == 0 || ($vars_count > 0 && isset(SurveyAnalysis::$_FILTRED_VARIABLES[$spid]) ) ) {
+
+ # prikazujemo v odvisnosti od kategorije spremenljivke
+ switch ($spremenljivka['tip']) {
+ case 1: # radio - prikjaže navpiÄno
+ case 2: #checkbox Äe je dihotomna:
+ case 3: # dropdown - prikjaže navpiÄno
+ case 6: # multigrid
+ case 4: # text
+ case 7:# variabla tipa »število«
+ case 8: # datum
+ case 16: #multicheckbox Äe je dihotomna:
+ case 17: #razvrÅ¡Äanje Äe je ordinalna
+ case 18: # vsota
+ case 19: # multitext
+ case 20: # multi number
+ case 21: # besedilo*
+ case 22: # kalkulacija
+ self::frequencyVertical($spid);
+ break;
+ case 5:
+ # nagovor
+ pdfIzvozAnalizaSums::sumNagovor($spid,'freq');
+ break;
+
+ }
+
+ }
+
+ } // end if $spremenljivka['tip'] != 'm'
+
+ } // end foreach SurveyAnalysis::$_HEADERS
+ }
+
+
+ /** Izriše frekvence v vertikalni obliki
+ *
+ * @param unknown_type $spid
+ */
+ function frequencyVertical($spid) {
+ global $lang;
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+ # Äe je besedilo * in je samo ena kategorija je inline legenda false
+ $inline_legenda = (SurveyAnalysis::$_HEADERS[$spid]['cnt_all'] == 1 || in_array($spremenljivka['tip'],array(1,8) ) ) ? false: true;
+
+ # koliko zapisov prikažemo naenkrat
+ $num_show_records = SurveyAnalysis::getNumRecords();
+
+ //prva vrstica
+ $this->pdf->setFont('','b','6');
+ $this->pdf->ln(5);
+ $this->pdf->MultiCell(18, 5, $this->encodeText($spremenljivka['variable']), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(162, 5, $this->encodeText($spremenljivka['naslov']), 1, 'C', 0, 1, 0 ,0, true);
+
+ //druga vrstica
+ self::tableHeader();
+ $this->pdf->setFont('','','6');
+ // konec naslovne vrstice
+
+
+ $_answersOther = array();
+
+ # dodamo opcijo kje izrisujemo legendo
+ $options=array('inline_legenda' => $inline_legenda, 'isTextAnswer' => false, 'isOtherAnswer' => false);
+
+ # izpišemo vlejavne odgovore
+ if (count($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $_variables_count = count($grid['variables']);
+
+ # dodamo dodatne vrstice z albelami grida
+ if ($_variables_count > 0 )
+ foreach ($grid['variables'] AS $vid => $variable ){
+
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if (($variable['text'] != true && $variable['other'] != true)
+ || (in_array($spremenljivka['tip'],array(4,8,21,22)))){
+ # dodamo ime podvariable
+ //if ($_variables_count > 1 && in_array($spremenljivka['tip'],array(2,6,7,16,17,18,19,20,21))) {
+ if ($inline_legenda) {
+ self::outputSubVariablaVertical($spremenljivka,$variable,$grid,$spid,$options);
+ }
+
+ $maxAnswer = (SurveyDataSettingProfiles :: getSetting('numOpenAnswers') > 0) ? SurveyDataSettingProfiles :: getSetting('numOpenAnswers') : 30;
+ $counter = 0;
+ $_kumulativa = 0;
+ //SurveyAnalysis::$_FREQUENCYS[$_sequence]
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'] AS $vkey => $vAnswer) {
+ if ($vAnswer['cnt'] > 0 /*&& $counter < $maxAnswer*/ || true) { # izpisujemo samo tiste ki nisno 0
+ if (in_array($spremenljivka['tip'],array(4,7,8,19,20,21))) { // text, number, datum, mtext, mnumber, text*
+ $options['isTextAnswer'] = true;
+ # ali prikažemo vse odgovore ali pa samo toliko koliko je nastavljeno v TEXT_ANSWER_LIMIT
+ $options['textAnswerExceed'] = ($counter >= TEXT_ANSWER_LIMIT && count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']) > TEXT_ANSWER_LIMIT+2) ? true : false; # ali zaÄnemo skrivati tekstovne odgovore
+ } else {
+ $options['isTextAnswer'] = false;
+ $options['textAnswerExceed'] = false;
+ }
+ $counter = pdfIzvozAnalizaSums::outputValidAnswerVertical($counter,$vkey,$vAnswer,$_sequence,$spid,$_kumulativa,$options);
+ }
+ }
+ # izpišemo sumo veljavnih
+ $counter = pdfIzvozAnalizaSums::outputSumaValidAnswerVertical($counter,$_sequence,$spid,$options);
+ }
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'] AS $ikey => $iAnswer) {
+ if ($iAnswer['cnt'] > 0 ) { # izpisujemo samo tiste ki nisno 0
+ $counter = pdfIzvozAnalizaSums::outputInvalidAnswerVertical($counter,$ikey,$iAnswer,$_sequence,$spid,$options);
+ }
+ }
+ # izpišemo sumo veljavnih
+ $counter = pdfIzvozAnalizaSums::outputSumaInvalidAnswerVertical($counter,$_sequence,$spid,$options);
+ }
+ #izpišemo še skupno sumo
+ $counter = pdfIzvozAnalizaSums::outputSumaVertical($counter,$_sequence,$spid,$options);
+ } else {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ }
+ }
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ pdfIzvozAnalizaSums::outputOtherAnswers($oAnswers);
+ }
+ }
+ }
+
+ function outputSubVariablaVertical($spremenljivka,$variable,$grid,$spid,$_options = array()) {
+ global $lang;
+
+ $text = array();
+
+ # opcije
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ 'textAnswerExceed'=>false # ali presegamo Å¡tevilo tekstovnih odgovorov za prikaz
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+
+ $text[] = $this->encodeText($variable['variable']);
+
+ $text[] = $this->encodeText($variable['naslov']);
+
+ $text[] = '';
+ $text[] = '';
+ $text[] = '';
+ $text[] = '';
+
+ self::tableRow($text);
+ }
+
+
+ function createFrontPage()
+ {
+// dodamo prvo stran
+ $this->pdf->AddPage();
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', 16);
+
+ // dodamo naslov
+ $this->pdf->SetFillColor(224, 235, 255);
+ $this->pdf->SetTextColor(0);
+ $this->pdf->SetDrawColor(128, 0, 0);
+ $this->pdf->SetLineWidth(0.1);
+ $this->pdf->Sety(100);
+ $this->pdf->Cell(0, 16, $this->encodeText(SurveyInfo::getInstance()->getSurveyTitle()), 1, 1,'C', 1, 0,0);
+
+
+ // dodamo info:
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', 12);
+ $this->currentStyle = array('width' => 0.1, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(128, 0, 0));
+ $this->pdf->ln(30);
+ // $this->pdf->Write (0, $this->encodeText("Info:"), '', 0, 'l', 1, 1);
+
+ $this->drawLine();
+ // avtorja, št vprašanj, datum kreiranja
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_shortname'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()), 0, 'L', 0, 1, 0 ,0, true);
+ if ( SurveyInfo::getInstance()->getSurveyTitle() != SurveyInfo::getInstance()->getSurveyAkronim())
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_longname'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyTitle()), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_qcount'].': '.SurveyInfo::getInstance()->getSurveyQuestionCount(), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_active_from'].': '.SurveyInfo::getInstance()->getSurveyStartsDate(), 0, 'L', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_active_until'].': '.SurveyInfo::getInstance()->getSurveyExpireDate(), 0, 'L', 0, 1, 0 ,0, true);
+
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_author'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyInsertName()), 0, 'L', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_edit'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyEditName()), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_date'].': '.SurveyInfo::getInstance()->getSurveyInsertDate(), 0, 'L', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_date'].': '.SurveyInfo::getInstance()->getSurveyEditDate(), 0, 'L', 0, 1, 0 ,0, true);
+ if ( SurveyInfo::getInstance()->getSurveyInfo() )
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_desc'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyInfo()), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', FNT_MAIN_SIZE);
+ $this->pdf->SetFillColor(0, 0, 0);
+ }
+
+ function setUserId($usrId) {$this->anketa['uid'] = $usrId;}
+ function getUserId() {return ($this->anketa['uid'])?$this->anketa['uid']:false;}
+
+ function formatNumber($value,$digit=0,$sufix="")
+ {
+ if ( $value <> 0 && $value != null )
+ $result = round($value,$digit);
+ else
+ $result = "0";
+ $result = number_format($result, $digit, ',', '.').$sufix;
+
+ return $result;
+ }
+
+ function drawLine()
+ {
+ $cy = $this->pdf->getY();
+ $this->pdf->Line(15, $cy , 195, $cy , $this->currentStyle);
+ }
+
+
+ function tableHeader(){
+ global $lang;
+
+ $naslov = array();
+ $naslov[] = '';
+ $naslov[] = $this->encodeText($lang['srv_analiza_frekvence_titleAnswers']);
+ $naslov[] = $this->encodeText($lang['srv_analiza_frekvence_titleFrekvenca']);
+ $naslov[] = $this->encodeText($lang['srv_analiza_frekvence_titleOdstotek']);
+ $naslov[] = $this->encodeText($lang['srv_analiza_frekvence_titleVeljavni']);
+ $naslov[] = $this->encodeText($lang['srv_analiza_frekvence_titleKumulativa']);
+
+ $params = array('border' => 'TB', 'bold' => 'B', 'align2' => 'C');
+
+ self::tableRow($naslov, $params);
+ }
+
+ function tableRow($arrayText, $params=array()){
+
+ /*$linecount = $this->pdf->getNumLines($this->encodeText($arrayText[1]), 60);
+ $linecount == 1 ? $height = 4.7 : $height = 4.7 + ($linecount-1)*3.3;*/
+ $height = $this->getCellHeight($arrayText[1], 90);
+
+ //ce smo na prelomu strani
+ if( ($this->pdf->getY() + $height) > 270){
+ $this->drawLine();
+ $this->pdf->AddPage('P');
+ $params['border'] .= 'T';
+ }
+
+ if($params['align2'] != 'C')
+ $params['align2'] = 'L';
+
+ $this->pdf->MultiCell(18, $height, $this->encodeText($arrayText[0]), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(90, $height, $this->encodeText($arrayText[1]), 1, $params['align2'], 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(18, $height, $this->encodeText($arrayText[2]), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(18, $height, $this->encodeText($arrayText[3]), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(18, $height, $this->encodeText($arrayText[4]), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(18, $height, $this->encodeText($arrayText[5]), 1, 'C', 0, 1, 0 ,0, true);
+ }
+
+ function getCellHeight($string, $width){
+
+ $this->pdf->startTransaction();
+ // get the number of lines calling you method
+ $linecount = $this->pdf->MultiCell($width, 0, $string, 0, 'L', 0, 0, '', '', true, 0, false, true, 0);
+ // restore previous object
+ $this->pdf = $this->pdf->rollbackTransaction();
+
+ $height = ($linecount <= 1) ? 4.7 : $linecount * ($this->pdf->getFontSize() * $this->pdf->getCellHeightRatio()) + 2;
+
+ return $height;
+ }
+}
+
+?> \ No newline at end of file
diff --git a/admin/exportclases/class.pdfIzvozAnalizaFunctions.php b/admin/exportclases/class.pdfIzvozAnalizaFunctions.php
new file mode 100644
index 0000000..239c962
--- /dev/null
+++ b/admin/exportclases/class.pdfIzvozAnalizaFunctions.php
@@ -0,0 +1,3309 @@
+<?php
+
+ global $site_path;
+
+ include_once('../../function.php');
+ include_once('../survey/definition.php');
+ require_once('../exportclases/class.enka.pdf.php');
+
+class PdfIzvozAnalizaFunctions {
+
+ public static $anketa;
+ public static $user_id;
+ public static $from;
+
+ public static $exportClass; // instanca razreda v katerem izrisujemo PDF
+ public static $analizaClass; // instanca razreda kjer imamo analize (crosstab, means, ttest...)
+
+ private static $sessionData; // podatki ki so bili prej v sessionu - za nastavitve, ki se prenasajo v izvoze...
+
+
+ static function init($anketa, $exportClass, $from='sums', $analizaClass=null){
+ global $global_user_id;
+
+ self::$anketa = $anketa;
+ self::$user_id = $global_user_id;
+
+ self::$from = $from;
+
+ self::$exportClass = $exportClass;
+
+ if($analizaClass != null)
+ self::$analizaClass = $analizaClass;
+
+ // preberemo nastavitve iz baze (prej v sessionu)
+ SurveyUserSession::Init($anketa);
+ self::$sessionData = SurveyUserSession::getData();
+ }
+
+ // Izrisemo CROSSTAB TABELO
+ public static function displayCrosstabsTable() {
+ global $lang;
+
+ if (self::$analizaClass->getSelectedVariables(1) !== null && self::$analizaClass->getSelectedVariables(2) !== null) {
+ $variables2 = self::$analizaClass->getSelectedVariables(1);
+ $variables1 = self::$analizaClass->getSelectedVariables(2);
+
+ foreach ($variables1 AS $v_first) {
+ foreach ($variables2 AS $v_second) {
+
+ $crosstabs = null;
+ $crosstabs_value = null;
+
+ $crosstabs = self::$analizaClass->createCrostabulation($v_first, $v_second);
+ $crosstabs_value = $crosstabs['crosstab'];
+
+ # podatki spremenljivk
+ $spr1 = self::$analizaClass->_HEADERS[$v_first['spr']];
+ $spr2 = self::$analizaClass->_HEADERS[$v_second['spr']];
+
+ $grid1 = $spr1['grids'][$v_first['grd']];
+ $grid2 = $spr2['grids'][$v_second['grd']];
+
+ #Å¡tevilo vratic in Å¡tevilo kolon
+ $cols = count($crosstabs['options1']);
+ $rows = count($crosstabs['options2']);
+
+ # ali prikazujemo vrednosti variable pri spremenljivkah
+ $show_variables_values = self::$analizaClass->doValues;
+
+ # nastavitve oblike
+ if ((self::$analizaClass->crossChk1 || self::$analizaClass->crossChk2 || self::$analizaClass->crossChk3) && (self::$analizaClass->crossChkEC || self::$analizaClass->crossChkRE || self::$analizaClass->crossChkSR || self::$analizaClass->crossChkAR)) {
+ # dodamo procente in residuale
+ $rowSpan = 3;
+ $numColumnPercent = self::$analizaClass->crossChk1 + self::$analizaClass->crossChk2 + self::$analizaClass->crossChk3;
+ $numColumnResidual = self::$analizaClass->crossChkEC + self::$analizaClass->crossChkRE + self::$analizaClass->crossChkSR + self::$analizaClass->crossChkAR;
+ $tblColumn = max($numColumnPercent,$numColumnResidual);
+ } else if (self::$analizaClass->crossChk1 || self::$analizaClass->crossChk2 || self::$analizaClass->crossChk3) {
+ # imamo samo procente
+ $rowSpan = 2;
+ $numColumnPercent = self::$analizaClass->crossChk1 + self::$analizaClass->crossChk2 + self::$analizaClass->crossChk3;
+ $numColumnResidual = 0;
+ $tblColumn = $numColumnPercent;
+ } else if (self::$analizaClass->crossChkEC || self::$analizaClass->crossChkRE || self::$analizaClass->crossChkSR || self::$analizaClass->crossChkAR) {
+ # imamo samo residuale
+ $rowSpan = 2;
+ $numColumnPercent = 0;
+ $numColumnResidual = self::$analizaClass->crossChkEC + self::$analizaClass->crossChkRE + self::$analizaClass->crossChkSR + self::$analizaClass->crossChkAR;
+ $tblColumn = $numColumnResidual;
+ } else {
+ #prikazujemo samo podatke
+ $rowSpan = 1;
+ $numColumnPercent = 0;
+ $numColumnResidual = 0;
+ $tblColumn = 1;
+ }
+
+ //izracun sirine ene celice
+ if($cols == 1)
+ $singleWidth = 110;
+ elseif($cols == 2)
+ $singleWidth = round( 150 / $cols );
+ elseif($cols > 0)
+ $singleWidth = round( 170 / $cols );
+
+ /*if($cols > 0)
+ $singleWidth = ($cols > 2) ? round( 170 / $cols ) : round( 150 / $cols );*/
+
+
+ # izrišemo tabelo
+
+ # najprej izrišemo naslovne vrstice
+ # za multicheckboxe popravimo naslov, na podtip
+ $sub_q1 = null;
+ if ($spr1['tip'] == '6' || $spr1['tip'] == '16' || $spr1['tip'] == '17' || $spr1['tip'] == '19' || $spr1['tip'] == '20') {
+ foreach ($spr1['grids'] AS $grid) {
+ foreach ($grid['variables'] AS $variable) {
+ if ($variable['sequence'] == $v_first['seq']) {
+ $sub_q1 = strip_tags($spr1['naslov']);
+ if ($show_variables_values == true ) {
+ $sub_q1 .= '&nbsp;('.strip_tags($spr1['variable']).')';
+ }
+ if ($spr1['tip'] == '16') {
+ $sub_q1 .= ', ' . strip_tags($grid1['naslov']) . ($show_variables_values == true ? '&nbsp;(' . strip_tags($grid1['variable']) . ')' : '');
+ } else {
+ $sub_q1 .= ', ' . strip_tags($variable['naslov']) . ($show_variables_values == true ? '&nbsp;(' . strip_tags($variable['variable']) . ')' : '');
+ }
+ }
+ }
+ }
+ }
+ if ($sub_q1 == null) {
+ $sub_q1 .= strip_tags($spr1['naslov']);
+ $sub_q1 .= ($show_variables_values == true ? '&nbsp;('.strip_tags($spr1['variable']).')' : '');
+ }
+
+ $sub_q2 = null;
+ if ($spr2['tip'] == '6' || $spr2['tip'] == '16' || $spr2['tip'] == '17' || $spr2['tip'] == '19' || $spr2['tip'] == '20') {
+ foreach ($spr2['grids'] AS $grid) {
+ foreach ($grid['variables'] AS $variable) {
+ if ($variable['sequence'] == $v_second['seq']) {
+ $sub_q2 = strip_tags($spr2['naslov']);
+ if ($show_variables_values == true) {
+ $sub_q2 .= '&nbsp;('.strip_tags($spr2['variable']).')';
+ }
+ if ($spr2['tip'] == '16') {
+ $sub_q2.= ', ' . strip_tags($grid2['naslov']) . ($show_variables_values == true ? '&nbsp;(' . strip_tags($grid2['variable']) . ')' : '');
+ } else {
+ $sub_q2.= ', ' . strip_tags($variable['naslov']) . ($show_variables_values == true ? '&nbsp;(' . strip_tags($variable['variable']) . ')' : '');
+ }
+ }
+ }
+ }
+ }
+ if ($sub_q2 == null) {
+ $sub_q2 .= strip_tags($spr2['naslov']);
+ $sub_q2 .= ($show_variables_values == true ? '&nbsp;('.strip_tags($spr2['variable']).')' : '');
+ }
+
+ //self::$exportClass->crosstabVars = array($sub_q1, $sub_q2);
+
+ self::$exportClass->pdf->setFont('','B','6');
+
+ /*$linecount = self::$exportClass->pdf->getNumLines(self::$exportClass->encodeText($sub_q1), 170);
+ $firstHeight = ( $linecount == 1 ? 4.7 : (4.7 + ($linecount-1)*3.3) );*/
+ $firstHeight = self::getCellHeight(self::$exportClass->encodeText($sub_q1), $singleWidth * count($crosstabs['options1']));
+
+ //prva vrstica
+ self::$exportClass->pdf->MultiCell(25, $firstHeight, self::$exportClass->encodeText(''), 0, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(20, $firstHeight, self::$exportClass->encodeText(''), 0, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell($singleWidth * count($crosstabs['options1']), $firstHeight, self::$exportClass->encodeText($sub_q1), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell($singleWidth, $firstHeight, self::$exportClass->encodeText(''), 0, 'C', 0, 1, 0 ,0, true);
+
+
+ // Izracun visine vrstice z naslovi gridov
+ $height = 0;
+ if (count($crosstabs['options1']) > 0 ) {
+ foreach ($crosstabs['options1'] as $ckey1 =>$crossVariabla) {
+ #ime variable
+ $text = $crossVariabla['naslov'];
+ # Äe ni tekstovni odgovor dodamo key
+ if ($crossVariabla['type'] != 't') {
+ $text .= ' ( '.$ckey1.' )';
+ }
+
+ /*$linecount = self::$exportClass->pdf->getNumLines(self::$exportClass->encodeText($text), $singleWidth);
+ $height = ($height < 4.7 + ($linecount-1)*3.7) ? (4.7 + ($linecount-1)*3.7) : $height;*/
+ $height = ($height > self::getCellHeight(self::$exportClass->encodeText($text), $singleWidth)) ? $height : self::getCellHeight(self::$exportClass->encodeText($text), $singleWidth);
+ }
+ }
+
+ //druga vrstica
+ self::$exportClass->pdf->setFont('','','6');
+ self::$exportClass->pdf->MultiCell(25, $height, self::$exportClass->encodeText(''), 0, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(20, $height, self::$exportClass->encodeText(''), 0, 'C', 0, 0, 0 ,0, true);
+
+ if (count($crosstabs['options1']) > 0 ) {
+ foreach ($crosstabs['options1'] as $ckey1 =>$crossVariabla) {
+ #ime variable
+ $text = $crossVariabla['naslov'];
+ # Äe ni tekstovni odgovor dodamo key
+ if ($crossVariabla['type'] != 't') {
+ $text .= ' ( '.$ckey1.' )';
+ }
+ self::$exportClass->pdf->MultiCell($singleWidth, $height, self::$exportClass->encodeText($text), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ }
+
+ self::$exportClass->pdf->MultiCell($singleWidth, $height, self::$exportClass->encodeText($lang['srv_analiza_crosstab_skupaj']), 1, 'C', 0, 1, 0 ,0, true);
+
+
+ //izracun visine ene celice
+ if($rowSpan == 1)
+ $height = 8;
+ elseif($rowSpan == 2)
+ $height = 10;
+ else
+ $height = 15;
+
+ //VMESNE VRSTICE
+ $cntY = 1;
+ if (count($crosstabs['options2']) > 0) {
+
+ //POSAMEZNA VMESNA VRSTICA
+ foreach ($crosstabs['options2'] as $ckey2 =>$crossVariabla2) {
+
+ if( $cntY == 1 )
+ $border = 'TLR';
+ elseif( $cntY == $rows )
+ $border = 'BLR';
+ else
+ $border = 'LR';
+
+ if ( $cntY == ceil($rows/2) || $rows == 1 ) {
+ # ime variable
+ self::$exportClass->pdf->setFont('','B','6');
+ self::$exportClass->pdf->MultiCell(25, $height, self::$exportClass->encodeText($sub_q2), $border, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->setFont('','','6');
+ }
+ else{
+ self::$exportClass->pdf->MultiCell(25, $height, self::$exportClass->encodeText(''), $border, 'C', 0, 0, 0 ,0, true);
+ }
+ $cntY++;
+
+ $text = $crossVariabla2['naslov'];
+ $text = self::$exportClass->snippet(self::$exportClass->encodeText($text), 25);
+ if ($crossVariabla2['type'] !== 't') {
+ $text .= ' ('.$ckey2.')';
+ }
+ self::$exportClass->pdf->MultiCell(20, $height, $text, 1, 'C', 0, 0, 0 ,0, true);
+
+ //del vrstice z vsebino
+ self::$exportClass->pdf->setFont('','','5');
+ foreach ($crosstabs['options1'] as $ckey1 => $crossVariabla1) {
+
+ $data = array();
+
+ if (self::$analizaClass->crossChk0) {
+ # frekvence crostabov
+ $data[] = ((int)$crosstabs_value[$ckey1][$ckey2] > 0) ? $crosstabs_value[$ckey1][$ckey2] : 0;
+ }
+
+ if (self::$analizaClass->crossChk1) {
+ #procent vrstica
+ $data[] = self::$exportClass->formatNumber(self::$analizaClass->getCrossTabPercentage($crosstabs['sumaVrstica'][$ckey2], $crosstabs_value[$ckey1][$ckey2]), 2, '%');
+ }
+ if (self::$analizaClass->crossChk2) {
+ #procent stolpec
+ $data[] = self::$exportClass->formatNumber(self::$analizaClass->getCrossTabPercentage($crosstabs['sumaStolpec'][$ckey1], $crosstabs_value[$ckey1][$ckey2]), 2, '%');
+ }
+ if (self::$analizaClass->crossChk3) {
+ #procent skupni
+ $data[] = self::$exportClass->formatNumber(self::$analizaClass->getCrossTabPercentage($crosstabs['sumaSkupna'], $crosstabs_value[$ckey1][$ckey2]), 2, '%');
+ }
+
+ # residuali
+ if (self::$analizaClass->crossChkEC) {
+ $data[] = self::$exportClass->formatNumber($crosstabs['exC'][$ckey1][$ckey2], 3, '');
+ }
+ if (self::$analizaClass->crossChkRE) {
+ $data[] = self::$exportClass->formatNumber($crosstabs['res'][$ckey1][$ckey2], 3, '');
+ }
+ if (self::$analizaClass->crossChkSR) {
+ $data[] = self::$exportClass->formatNumber($crosstabs['stR'][$ckey1][$ckey2], 3, '');
+ }
+ if (self::$analizaClass->crossChkAR) {
+ $data[] = self::$exportClass->formatNumber($crosstabs['adR'][$ckey1][$ckey2], 3, '');
+ }
+
+ self::displayCrosstabsCell($data, $singleWidth, $rowSpan, self::$analizaClass->crossChk0, $numColumnPercent, $numColumnResidual, self::$exportClass);
+ }
+
+ //se zadnji stolpec - vedno risemo
+ $data = array();
+
+ if (self::$analizaClass->crossChk0) {
+ # suma po vrsticah
+ $data[] = (int)$crosstabs['sumaVrstica'][$ckey2];
+ }
+ if (self::$analizaClass->crossChk1 || self::$analizaClass->crossChk2 || self::$analizaClass->crossChk3) {
+ # suma po vrsticah v procentih
+ if (self::$analizaClass->crossChk1) {
+ $data[] = self::$exportClass->formatNumber(100, 2, '%');
+ }
+ if (self::$analizaClass->crossChk2) {
+ $data[] = self::$exportClass->formatNumber( ($crosstabs['sumaSkupna'] > 0 ? (100 * $crosstabs['sumaVrstica'][$ckey2] / $crosstabs['sumaSkupna']) : 0), 2, '%');
+ }
+ if (self::$analizaClass->crossChk3) {
+ $data[] = self::$exportClass->formatNumber( ($crosstabs['sumaSkupna'] > 0 ? (100 * $crosstabs['sumaVrstica'][$ckey2] / $crosstabs['sumaSkupna']) : 0), 2, '%');
+ }
+ }
+
+ self::displayCrosstabsCell($data, $singleWidth, $rowSpan, self::$analizaClass->crossChk0, $numColumnPercent, 0);
+ self::$exportClass->pdf->MultiCell(1, $height, '', 0, 'C', 0, 1, 0 ,0, true);
+
+ self::$exportClass->pdf->setFont('','','6');
+ }
+ }
+
+
+ // skupni sestevki po stolpcih - ZADNJA VRSTICA
+ //popravimo stevilo vrstic (brez residualov)
+ if(self::$analizaClass->crossChkEC || self::$analizaClass->crossChkRE || self::$analizaClass->crossChkSR || self::$analizaClass->crossChkAR)
+ $rowSpan--;
+
+ //izracun visine ene celice
+ if($rowSpan == 1)
+ $height = 8;
+ elseif($rowSpan == 2)
+ $height = 10;
+ else
+ $height = 15;
+
+ self::$exportClass->pdf->MultiCell(25, $height, self::$exportClass->encodeText(''), 'T', 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(20, $height, self::$exportClass->encodeText($lang['srv_analiza_crosstab_skupaj']), 1, 'C', 0, 0, 0 ,0, true);
+
+ self::$exportClass->pdf->setFont('','','5');
+
+ if (count($crosstabs['options1']) > 0){
+
+ foreach ($crosstabs['options1'] as $ckey1 => $crossVariabla1) {
+
+ $data = array();
+
+ # prikazujemo eno od treh možnosti
+ if (self::$analizaClass->crossChk0) {
+ # suma po stolpcih
+ $data[] = (int)$crosstabs['sumaStolpec'][$ckey1];
+ }
+ if (self::$analizaClass->crossChk1 || self::$analizaClass->crossChk2 || self::$analizaClass->crossChk3) {
+ # suma po stolpcih v procentih
+ if (self::$analizaClass->crossChk1) {
+ $data[] = self::$exportClass->formatNumber( ($crosstabs['sumaSkupna'] > 0 ? (100 * $crosstabs['sumaStolpec'][$ckey1] / $crosstabs['sumaSkupna']) : 0), 2, '%');
+ }
+ if (self::$analizaClass->crossChk2) {
+ $data[] = self::$exportClass->formatNumber(100, 2, '%');
+ }
+ if (self::$analizaClass->crossChk3)
+ {
+ $data[] = self::$exportClass->formatNumber( ($crosstabs['sumaSkupna'] > 0 ? (100 * $crosstabs['sumaStolpec'][$ckey1] / $crosstabs['sumaSkupna']) : 0), 2, '%');
+ }
+ }
+
+ self::displayCrosstabsCell($data, $singleWidth, $rowSpan, self::$analizaClass->crossChk0, $numColumnPercent, 0);
+ }
+
+ # zadnja celica z skupno sumo
+ $data = array();
+
+ if (self::$analizaClass->crossChk0) {
+ # skupna suma
+ $data[] = (int)$crosstabs['sumaSkupna'];
+ }
+ if (self::$analizaClass->crossChk1 || self::$analizaClass->crossChk2 || self::$analizaClass->crossChk3) {
+ # suma po stolpcih v procentih
+ if (self::$analizaClass->crossChk1) {
+ $data[] = self::$exportClass->formatNumber(100, 2, '%');
+ }
+ if (self::$analizaClass->crossChk2) {
+ $data[] = self::$exportClass->formatNumber(100, 2, '%');
+ }
+ if (self::$analizaClass->crossChk3) {
+ $data[] = self::$exportClass->formatNumber(100, 2, '%');
+ }
+ }
+
+ self::displayCrosstabsCell($data, $singleWidth, $rowSpan, self::$analizaClass->crossChk0, $numColumnPercent, 0);
+ }
+
+ self::$exportClass->pdf->setFont('','','6');
+ }
+ }
+ }
+ }
+ /*
+ prikazemo posamezno celico s podatki
+ $data - vsebina (array)
+ $width - sirina celice
+ $numRows - stevilo vrstic (1, 2 ali 3)
+ frekvence - da ali ne
+ $numColumnPercent - stevilo stolpcev pri procentih (1, 2 ali 3)
+ $numColumnResidual - stevilo stolpcev pri procentih (1, 2, 3 ali 4)
+ */
+ static function displayCrosstabsCell($data, $width, $numRows, $frekvence, $numColumnPercent, $numColumnResidual){
+
+ $height = ($numRows == 1 ? 8 : 5);
+ $fullHeight = ($height == 8 ? $height : $numRows*$height);
+ $i=0;
+
+ //preberemo pozicijo - zacetek celice
+ $y = self::$exportClass->pdf->GetY();
+ $x = self::$exportClass->pdf->GetX();
+
+ self::$exportClass->pdf->setDrawColor(128, 128, 128);
+
+ //izrisemo frekvence
+ if($frekvence == 1){
+ self::$exportClass->pdf->MultiCell($width, $height, self::$exportClass->encodeText($data[$i]), 1, 'C', 0, 1, 0 ,0, true);
+ $i++;
+ }
+
+ if($numColumnPercent > 0){
+
+ self::$exportClass->pdf->setX($x);
+ $singleWidth = round($width/$numColumnPercent);
+
+ for($j=1; $j<$numColumnPercent; $j++){
+ self::$exportClass->pdf->MultiCell($singleWidth, $height, self::$exportClass->encodeText($data[$i]), 1, 'C', 0, 0, 0 ,0, true);
+ $i++;
+ }
+ self::$exportClass->pdf->MultiCell($width - (($numColumnPercent-1)*$singleWidth), $height, self::$exportClass->encodeText($data[$i]), 1, 'C', 0, 1, 0 ,0, true);
+ $i++;
+ }
+
+ if($numColumnResidual > 0){
+
+ self::$exportClass->pdf->setX($x);
+ $singleWidth = round($width/$numColumnResidual);
+
+ for($j=1; $j<$numColumnResidual; $j++){
+ self::$exportClass->pdf->MultiCell($singleWidth, $height, self::$exportClass->encodeText($data[$i]), 1, 'C', 0, 0, 0 ,0, true);
+ $i++;
+ }
+ self::$exportClass->pdf->MultiCell($width - (($numColumnResidual-1)*$singleWidth), $height, self::$exportClass->encodeText($data[$i]), 1, 'C', 0, 1, 0 ,0, true);
+ $i++;
+ }
+
+ //zaradi preglednosti narisemo okvir celotne celice
+ self::$exportClass->pdf->setDrawColor(128, 128, 128);
+ self::$exportClass->pdf->SetXY($x, $y);
+ self::$exportClass->pdf->MultiCell($width, $fullHeight, '', 1, 'C', 0, 1, 0 ,0, true);
+
+ //na koncu nastavimo pozicijo na pravo mesto
+ self::$exportClass->pdf->SetXY($x+$width, $y);
+ }
+
+ // Izrisemo CROSSTAB GRAF
+ public static function displayCrosstabChart(){
+ global $lang;
+
+ // Zgeneriramo id vsake tabele (glede na izbrani spremenljivki za generiranje)
+ $chartID = implode('_', self::$analizaClass->variabla1[0]).'_'.implode('_', self::$analizaClass->variabla2[0]);
+ $chartID .= '_counter_'.(!self::$exportClass->counter ? 0 : self::$exportClass->counter);
+
+ $settings = self::$sessionData['crosstab_charts'][$chartID];
+ $imgName = $settings['name'];
+
+ $size = getimagesize('pChart/Cache/'.$imgName);
+ $ratio = ($size[0] / 800) < 1 ? 1 : ($size[0] / 800);
+ $height = $size[1] / 5;
+
+ if(self::$exportClass->pdf->getY() + ($height/$ratio) > 250)
+ {
+ self::$exportClass->pdf->AddPage();
+ }
+
+ // Naslov posameznega grafa
+ /*self::$exportClass->pdf->setFont('','b','6');
+ self::$exportClass->pdf->MultiCell(10, 5,'', 0, 'C', 0, 0, 0 ,0, true);
+ if($settings['type'] == 1 || $settings['type'] == 4){
+ self::$exportClass->pdf->MultiCell(60, 5, self::$exportClass->encodeText(self::$exportClass->crosstabVars[0]), 0, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(20, 5, self::$exportClass->encodeText('/'), 0, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(60, 5, self::$exportClass->encodeText(self::$exportClass->crosstabVars[1]), 0, 'C', 0, 1, 0 ,0, true);
+ }
+ else{
+ self::$exportClass->pdf->MultiCell(140, 5, self::$exportClass->encodeText(self::$exportClass->crosstabVars[0]), 0, 'C', 0, 1, 0 ,0, true);
+ }*/
+ self::$exportClass->pdf->setFont('','','6');
+
+ self::$exportClass->pdf->Image('pChart/Cache/'.$imgName, $x='', $y='', $w=140, $h, $type='PNG', $link='', $align='N', $resize=true, $dpi=1600, $palign='C', $ismask=false, $imgmask=false, $border=0);
+ }
+
+
+ // Izrisemo MEANS TABELO
+ public static function displayMeansTable($_means) {
+ global $lang;
+
+ #Å¡tevilo vratic in Å¡tevilo kolon
+ $cols = count($_means);
+ # preberemo kr iz prvega loopa
+ $rows = count($_means[0]['options']);
+
+ // sirina ene celice
+ $singleWidth = round( 180 / $cols / 2 );
+
+ // visina prve vrstice
+ $firstHeight = 0;
+ for ($i = 0; $i < $cols; $i++) {
+
+ $label1 = self::$analizaClass->getSpremenljivkaTitle($_means[$i]['v1']);
+
+ /*$linecount = self::$exportClass->pdf->getNumLines(self::$exportClass->encodeText($label1), $singleWidth*2);
+ $height = ( $linecount == 1 ? 4.7 : (4.7 + ($linecount-1)*3.3) );
+ $firstHeight = ($height > $firstHeight) ? $height : $firstHeight;*/
+ $firstHeight = ($height > self::getCellHeight(self::$exportClass->encodeText($label1))) ? $height : self::getCellHeight(self::$exportClass->encodeText($label1), $singleWidth*2);
+ }
+
+
+ // prva vrstica
+ self::$exportClass->pdf->setFont('','B','6');
+
+ $label2 = self::$analizaClass->getSpremenljivkaTitle($_means[0]['v2']);
+ self::$exportClass->pdf->MultiCell(80, $firstHeight, self::$exportClass->encodeText($label2), 'TLR', 'C', 0, 0, 0 ,0, true);
+
+ for ($i = 0; $i < $cols; $i++) {
+
+ $label1 = self::$analizaClass->getSpremenljivkaTitle($_means[$i]['v1']);
+ self::$exportClass->pdf->MultiCell($singleWidth*2, $firstHeight, self::$exportClass->encodeText($label1), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ self::$exportClass->pdf->MultiCell(1, $firstHeight, self::$exportClass->encodeText(''), 0, 'C', 0, 1, 0 ,0, true);
+
+ self::$exportClass->pdf->setFont('','','6');
+
+ // druga vrstica
+ self::$exportClass->pdf->MultiCell(80, 7, self::$exportClass->encodeText(''), 'BLR', 'C', 0, 0, 0 ,0, true);
+
+ for ($i = 0; $i < $cols; $i++) {
+
+ self::$exportClass->pdf->MultiCell($singleWidth, 7, self::$exportClass->encodeText($lang['srv_means_label']), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell($singleWidth, 7, self::$exportClass->encodeText($lang['srv_means_label4']), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ self::$exportClass->pdf->MultiCell(1, 7, self::$exportClass->encodeText(''), 0, 'C', 0, 1, 0 ,0, true);
+
+
+ // vrstice s podatki
+ if (count($_means[0]['options']) > 0) {
+ foreach ($_means[0]['options'] as $ckey2 =>$crossVariabla2) {
+
+ $variabla = $crossVariabla2['naslov'];
+ # Äe ni tekstovni odgovor dodamo key
+ if ($crossVariabla2['type'] !== 't' ) {
+ if ($crossVariabla2['vr_id'] == null) {
+ $variabla .= ' ( '.$ckey2.' )';
+ } else {
+ $variabla .= ' ( '.$crossVariabla2['vr_id'].' )';
+ }
+ }
+ self::$exportClass->pdf->MultiCell(80, 7, self::$exportClass->encodeText($variabla), 1, 'C', 0, 0, 0 ,0, true);
+
+ # celice z vsebino
+ for ($i = 0; $i < $cols; $i++) {
+
+ self::$exportClass->pdf->MultiCell($singleWidth, 7, self::$exportClass->encodeText(self::$analizaClass->formatNumber($_means[$i]['result'][$ckey2], SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_RESIDUAL'))), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell($singleWidth, 7, self::$exportClass->encodeText((int)$_means[$i]['sumaVrstica'][$ckey2]), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ self::$exportClass->pdf->MultiCell(1, 7, self::$exportClass->encodeText(''), 0, 'C', 0, 1, 0 ,0, true);
+ }
+ }
+
+ // SKUPAJ
+ self::$exportClass->pdf->MultiCell(80, 7, self::$exportClass->encodeText($lang['srv_means_label3']), 1, 'C', 0, 0, 0 ,0, true);
+
+ for ($i = 0; $i < $cols; $i++) {
+
+ self::$exportClass->pdf->MultiCell($singleWidth, 7, self::$exportClass->encodeText(self::$analizaClass->formatNumber($_means[$i]['sumaMeans'], SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_RESIDUAL'))), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell($singleWidth, 7, self::$exportClass->encodeText((int)$_means[$i]['sumaSkupna']), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ self::$exportClass->pdf->MultiCell(1, 7, self::$exportClass->encodeText(''), 0, 'C', 0, 1, 0 ,0, true);
+ }
+
+ // Izrisemo MEANS GRAF
+ public static function displayMeanChart($counter){
+ global $lang;
+
+ $variables1 = self::$exportClass->meanData1;
+ $variables2 = self::$exportClass->meanData2;
+
+ $pos1 = floor($counter / count($variables2));
+ $pos2 = $counter % count($variables2);
+
+ $chartID = implode('_', $variables1[$pos1]).'_'.implode('_', $variables2[$pos2]);
+ $chartID .= '_counter_'.$counter;
+
+
+ $settings = self::$sessionData['mean_charts'][$chartID];
+ $imgName = $settings['name'];
+
+ $size = getimagesize('pChart/Cache/'.$imgName);
+ $ratio = ($size[0] / 800) < 1 ? 1 : ($size[0] / 800);
+ $height = $size[1] / 4;
+
+ if(self::$exportClass->pdf->getY() + ($height/$ratio) > 250)
+ {
+ self::$exportClass->pdf->AddPage();
+ }
+
+ self::$exportClass->pdf->Image('pChart/Cache/'.$imgName, $x='', $y='', $w=140, $h, $type='PNG', $link='', $align='N', $resize=true, $dpi=1600, $palign='C', $ismask=false, $imgmask=false, $border=0);
+ }
+
+
+ // Izrisemo TTEST TABELO
+ public static function displayTTestTable($ttest) {
+ global $lang;
+
+ # preverimo ali imamo izbrano odvisno spremenljivko
+ $spid1 = self::$sessionData['ttest']['variabla'][0]['spr'];
+ $seq1 = self::$sessionData['ttest']['variabla'][0]['seq'];
+ $grid1 = self::$sessionData['ttest']['variabla'][0]['grd'];
+
+
+ if (is_array($ttest) && count($ttest) > 0 && (int)$seq1 > 0) {
+
+ $spr_data_1 = self::$analizaClass->_HEADERS[$spid1];
+ if ($grid1 == 'undefined') {
+
+ # imamp lahko veÄ variabel
+ $seq = $seq1;
+ foreach ($spr_data_1['grids'] as $gkey => $grid ) {
+
+ foreach ($grid['variables'] as $vkey => $variable) {
+ $sequence = $variable['sequence'];
+ if ($sequence == $seq) {
+ $sprLabel1 = '('.$variable['variable'].') '. $variable['naslov'];
+ }
+ }
+ }
+ } else {
+ # imamo subgrid
+ $sprLabel1 = '('.$spr_data_1['grids'][$grid1]['variable'].') '. $spr_data_1['grids'][$grid1]['naslov'];
+ }
+
+ # polovio labele
+ $spid2 = self::$sessionData['ttest']['spr2'];
+ $sprLabel2 = trim(str_replace('&nbsp;','',self::$sessionData['ttest'][self::$anketa]['label2']));
+ $label1 = self::$analizaClass->getVariableLabels(self::$sessionData['ttest']['sub_conditions'][0]);
+ $label2 = self::$analizaClass->getVariableLabels(self::$sessionData['ttest']['sub_conditions'][1]);
+
+
+ // prva vrstica
+ /*$linecount = self::$exportClass->pdf->getNumLines(self::$exportClass->encodeText($sprLabel1), 160);
+ $height = ( $linecount == 1 ? 4.7 : (4.7 + ($linecount-1)*3.3) );*/
+ $height = self::getCellHeight(self::$exportClass->encodeText($sprLabel1), 160);
+
+ self::$exportClass->pdf->setFont('','B','6');
+ self::$exportClass->pdf->MultiCell(80, $height, '', 'TLR', 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(180, $height, self::$exportClass->encodeText($sprLabel1), 1, 'C', 0, 1, 0 ,0, true);
+
+
+ // druga vrstica
+ /*$linecount = self::$exportClass->pdf->getNumLines(self::$exportClass->encodeText($sprLabel2), 100);
+ $height = ( $linecount == 1 ? 4.7 : (4.7 + ($linecount-1)*3.3) );*/
+ $height = self::getCellHeight(self::$exportClass->encodeText($sprLabel2), 100);
+
+ self::$exportClass->pdf->MultiCell(80, $height, self::$exportClass->encodeText($sprLabel2), 'BLR', 'C', 0, 0, 0 ,0, true);
+
+ self::$exportClass->pdf->setFont('','','6');
+
+ self::$exportClass->pdf->MultiCell(20, $height, 'n', 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(20, $height, 'x', 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(20, $height, 's²', 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(20, $height, 'se(x)', 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(20, $height, '±1,96×se(x)', 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(20, $height, 'd', 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(20, $height, 'se(d)', 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(20, $height, 'Sig.', 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(20, $height, 't', 1, 'C', 0, 1, 0 ,0, true);
+
+
+ // vrstici s podatki
+ self::$exportClass->pdf->MultiCell(80, 7, self::$exportClass->encodeText($label1), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(20, 7, self::$exportClass->formatNumber($ttest[1]['n'], 0), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(20, 7, self::$exportClass->formatNumber($ttest[1]['x'], 3), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(20, 7, self::$exportClass->formatNumber($ttest[1]['s2'], 3), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(20, 7, self::$exportClass->formatNumber($ttest[1]['se'], 3), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(20, 7, self::$exportClass->formatNumber($ttest[1]['margin'], 3), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(20, 7, '', 'TLR', 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(20, 7, '', 'TLR', 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(20, 7, '', 'TLR', 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(20, 7, '', 'TLR', 'C', 0, 1, 0 ,0, true);
+
+ self::$exportClass->pdf->MultiCell(80, 7, self::$exportClass->encodeText($label2), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(20, 7, self::$exportClass->formatNumber($ttest[2]['n'], 0), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(20, 7, self::$exportClass->formatNumber($ttest[2]['x'], 3), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(20, 7, self::$exportClass->formatNumber($ttest[2]['s2'], 3), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(20, 7, self::$exportClass->formatNumber($ttest[2]['se'], 3), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(20, 7, self::$exportClass->formatNumber($ttest[2]['margin'], 3), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(20, 7, self::$exportClass->formatNumber($ttest['d'], 3), 'BLR', 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(20, 7, self::$exportClass->formatNumber($ttest['sed'], 3), 'BLR', 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(20, 7, self::$exportClass->formatNumber($ttest['sig'], 3), 'BLR', 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(20, 7, self::$exportClass->formatNumber($ttest['t'], 3), 'BLR', 'C', 0, 1, 0 ,0, true);
+ }
+ }
+
+ // Izrisemo TTEST GRAF
+ public static function displayTTestChart(){
+ global $lang;
+
+ $tableChart = new SurveyTableChart(self::$anketa, self::$analizaClass, 'ttest');
+ $tableChart->setTTestChartSession();
+
+ $spid1 = self::$sessionData['ttest']['variabla'][0]['spr'];
+ $seq1 = self::$sessionData['ttest']['variabla'][0]['seq'];
+ $grid1 = self::$sessionData['ttest']['variabla'][0]['grd'];
+ $sub1 = self::$sessionData['ttest']['sub_conditions'][0];
+ $sub2 = self::$sessionData['ttest']['sub_conditions'][1];
+ $chartID = $sub1.'_'.$sub2.'_'.$spid1.'_'.$seq1.'_'.$grid1;
+
+ $settings = self::$sessionData['ttest_charts'][$chartID];
+ $imgName = $settings['name'];
+
+ $size = getimagesize('pChart/Cache/'.$imgName);
+ $ratio = ($size[0] / 800) < 1 ? 1 : ($size[0] / 800);
+ $height = $size[1] / 4;
+
+ if(self::$exportClass->pdf->getY() + ($height/$ratio) > 250)
+ {
+ self::$exportClass->pdf->AddPage();
+ }
+
+ self::$exportClass->pdf->Image('pChart/Cache/'.$imgName, $x='', $y='', $w=140, $h, $type='PNG', $link='', $align='N', $resize=true, $dpi=1600, $palign='C', $ismask=false, $imgmask=false, $border=0);
+ }
+
+
+ // Izrisemo BREAK MULTIGRID TABELO
+ static function displayBreakTableMgrid($forSpr,$frequencys,$spremenljivka) {
+ global $lang;
+
+ $keysCount = count($frequencys);
+ $sequences = explode('_',$spremenljivka['sequences']);
+ $forSpremenljivka = self::$analizaClass->_HEADERS[$forSpr];
+ $tip = $spremenljivka['tip'];
+
+ # izraÄunamo povpreÄja za posamezne sekvence
+ $means = array();
+ foreach ($frequencys AS $fkey => $fkeyFrequency) {
+ foreach ($sequences AS $sequence) {
+ $means[$fkey][$sequence] = self::$analizaClass->getMeansFromKey($frequencys[$fkey][$sequence]);
+ }
+ }
+
+ if ($tip != 16 && $tip != 20) {
+ if ($tip == 1 || $tip == 3) {
+ if (count($spremenljivka['options']) < 15) {
+ $rowspan = 2;
+ $colspan = count($spremenljivka['options'])+1;
+ } else {
+ $rowspan = 1;
+ $colspan = 1;
+ }
+ } else {
+ $rowspan = 2;
+ $colspan = count($sequences);
+ }
+
+ $singleWidth = floor(200 / $colspan);
+
+
+ // PRVA VRSTICA
+ $height = self::getCellHeight($spremenljivka['naslov'].' ('.$spremenljivka['variable'].')', $singleWidth*$colspan);
+
+ self::$exportClass->pdf->setFont('','B','6');
+ self::$exportClass->pdf->MultiCell(60, $height, '', 'TLR', 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell($singleWidth*$colspan, $height, self::$exportClass->encodeText($spremenljivka['naslov'].' ('.$spremenljivka['variable'].')'), 1, 'C', 0, 1, 0 ,0, true);
+
+
+ // DRUGA VRSTICA
+ $text = $forSpremenljivka['naslov'].' ('.$forSpremenljivka['variable'].')';
+ $height = self::getCellHeight($text, $singleWidth*$colspan);
+
+ // najprej loopamo da dobimo visino celice
+ if ($tip != 1 && $tip != 3) {
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $text = $variable['naslov'].' ('.$variable['variable'].')';
+ $height = (self::getCellHeight($text, $singleWidth) > $height) ? self::getCellHeight($text, $singleWidth) : $height;
+ }
+ }
+ }
+ else if (count($spremenljivka['options']) < 15) {
+ foreach ($spremenljivka['options'] AS $okey => $option) {
+ $text = $option.' ('.$okey.')';
+ $height = (self::getCellHeight($text, $singleWidth) > $height) ? self::getCellHeight($text, $singleWidth) : $height;
+ }
+ }
+
+ // se izrisemo celice...
+ self::$exportClass->pdf->setFont('','B','6');
+ self::$exportClass->pdf->MultiCell(60, $height, self::$exportClass->encodeText($forSpremenljivka['naslov'].' ('.$forSpremenljivka['variable'].')'), 'BLR', 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->setFont('','','6');
+
+ if ($tip != 1 && $tip != 3) {
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ self::$exportClass->pdf->MultiCell($singleWidth, $height, self::$exportClass->encodeText($variable['naslov'].' ('.$variable['variable'].')'), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ }
+ self::$exportClass->pdf->MultiCell(1, $height, '', 0, 'C', 0, 1, 0 ,0, true);
+ }
+ else if (count($spremenljivka['options']) < 15) {
+ foreach ($spremenljivka['options'] AS $okey => $option) {
+ self::$exportClass->pdf->MultiCell($singleWidth, $height, self::$exportClass->encodeText($option.' ('.$okey.')'), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ self::$exportClass->pdf->MultiCell($singleWidth, $height, 'povpreÄje', 1, 'C', 0, 1, 0 ,0, true);
+ }
+
+
+ // VRSTICE S PODATKI
+ foreach ($frequencys AS $fkey => $fkeyFrequency) {
+
+ $height = self::getCellHeight($forSpremenljivka['options'][$fkey], 60);
+ self::$exportClass->pdf->MultiCell(60, $height, self::$exportClass->encodeText($forSpremenljivka['options'][$fkey]), 1, 'C', 0, 0, 0 ,0, true);
+
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ if ($variable['other'] != 1) {
+ $sequence = $variable['sequence'];
+ if (($tip == 1 || $tip == 3) && count($spremenljivka['options']) < 15) {
+ foreach ($spremenljivka['options'] AS $okey => $option) {
+ self::$exportClass->pdf->MultiCell($singleWidth, $height, self::$exportClass->encodeText($frequencys[$fkey][$sequence]['valid'][$okey]['cnt']), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ }
+ self::$exportClass->pdf->MultiCell($singleWidth, $height, SurveyAnalysis::formatNumber($means[$fkey][$sequence],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),''), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ }
+ }
+ self::$exportClass->pdf->MultiCell(1, $height, '', 0, 'C', 0, 1, 0 ,0, true);
+ }
+ }
+
+ else {
+ $rowspan = 2;
+ $colspan = $spremenljivka['grids'][0]['cnt_vars'];
+ $singleWidth = floor(200 / $colspan);
+ # za multicheck razdelimo na grupe - skupine
+ foreach ($frequencys AS $fkey => $frequency) {
+
+ self::$exportClass->pdf->setFont('','B','6');
+ self::$exportClass->pdf->MultiCell(200, 5, self::$exportClass->encodeText('Tabela za: ('.$forSpremenljivka['variable'].') = '.$forSpremenljivka['options'][$fkey]), 0, 'L', 0, 1, 0 ,0, true);
+
+
+ $text = $spremenljivka['naslov'].' ('.$spremenljivka['variable'].')';
+ $height = self::getCellHeight($text, 260);
+ self::$exportClass->pdf->MultiCell(260, $height, self::$exportClass->encodeText($text), 1, 'C', 0, 1, 0 ,0, true);
+
+ self::$exportClass->pdf->setFont('','','6');
+
+
+ foreach ($spremenljivka['grids'][0]['variables'] AS $vkey => $variable) {
+ $height = (self::getCellHeight($variable['naslov'], $singleWidth) > $height) ? self::getCellHeight($variable['naslov'], $singleWidth) : $height;
+ }
+
+ self::$exportClass->pdf->MultiCell(60, $height, '', 1, 'C', 0, 0, 0 ,0, true);
+ foreach ($spremenljivka['grids'][0]['variables'] AS $vkey => $variable) {
+ self::$exportClass->pdf->MultiCell($singleWidth, $height, self::$exportClass->encodeText($variable['naslov']), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ self::$exportClass->pdf->MultiCell(1, $height,'', 0, 'C', 0, 1, 0 ,0, true);
+
+
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+
+ $text = '('.$grid['variable'].') '.$grid['naslov'];
+ $height = self::getCellHeight($text, 60);
+ self::$exportClass->pdf->MultiCell(60, $height, self::$exportClass->encodeText($text), 1, 'C', 0, 0, 0 ,0, true);
+
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $sequence = $variable['sequence'];
+
+ self::$exportClass->pdf->MultiCell($singleWidth, $height, SurveyAnalysis::formatNumber($means[$fkey][$sequence],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),''), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ self::$exportClass->pdf->MultiCell(1, $height,'', 0, 'C', 0, 1, 0 ,0, true);
+ }
+ }
+ }
+ }
+
+ // Izrisemo BREAK NUMBER TABELO
+ static function displayBreakTableNumber($forSpr,$frequencys,$spremenljivka) {
+ global $lang;
+
+ $keysCount = count($frequencys);
+ $sequences = explode('_',$spremenljivka['sequences']);
+ $forSpremenljivka = self::$analizaClass->_HEADERS[$forSpr];
+ $tip = $spremenljivka['tip'];
+
+ # izraÄunamo povpreÄja za posamezne sekvence
+ $means = array();
+ $totalMeans = array();
+ $totalFreq = array();
+ foreach ($frequencys AS $fkey => $fkeyFrequency) {
+ foreach ($sequences AS $sequence) {
+ $means[$fkey][$sequence] = self::$analizaClass->getMeansFromKey($frequencys[$fkey][$sequence]);
+ }
+ }
+
+
+ # za multi number naredimo po skupinah
+ if ($tip != 20) {
+
+ $rowspan = 3;
+ $colspan = count($sequences);
+
+ $singleWidth = floor(200 / $colspan);
+
+
+ // PRVA VRSTICA
+ $height = self::getCellHeight($spremenljivka['naslov'].' ('.$spremenljivka['variable'].')', $singleWidth*$colspan);
+
+ self::$exportClass->pdf->setFont('','B','6');
+ self::$exportClass->pdf->MultiCell(60, $height, '', 'TLR', 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell($singleWidth*$colspan, $height, self::$exportClass->encodeText($spremenljivka['naslov'].' ('.$spremenljivka['variable'].')'), 1, 'C', 0, 1, 0 ,0, true);
+
+
+ // DRUGA VRSTICA
+ $text = $forSpremenljivka['naslov'].' ('.$forSpremenljivka['variable'].')';
+ $height = self::getCellHeight($text, $singleWidth*$colspan);
+
+ // najprej loopamo da dobimo visino celice
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $text = $variable['naslov'].' ('.$variable['variable'].')';
+ $height = (self::getCellHeight($text, $singleWidth) > $height) ? self::getCellHeight($text, $singleWidth) : $height;
+ }
+ }
+
+ // se izrisemo celice...
+ self::$exportClass->pdf->setFont('','B','6');
+ self::$exportClass->pdf->MultiCell(60, $height, self::$exportClass->encodeText($forSpremenljivka['naslov'].' ('.$forSpremenljivka['variable'].')'), 'LR', 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->setFont('','','6');
+
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ self::$exportClass->pdf->MultiCell($singleWidth, $height, self::$exportClass->encodeText($variable['naslov'].' ('.$variable['variable'].')'), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ }
+ self::$exportClass->pdf->MultiCell(1, $height, '', 0, 'C', 0, 1, 0 ,0, true);
+
+
+ // TRETJA VRSTICA
+ self::$exportClass->pdf->MultiCell(60, 5, '', 'BLR', 'C', 0, 0, 0 ,0, true);
+
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ self::$exportClass->pdf->MultiCell($singleWidth, 5, self::$exportClass->encodeText('PovpreÄje'), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ }
+ self::$exportClass->pdf->MultiCell(1, 5, '', 0, 'C', 0, 1, 0 ,0, true);
+
+
+ // VRSTICE S PODATKI
+ foreach ($frequencys AS $fkey => $fkeyFrequency) {
+
+
+ $height = self::getCellHeight($forSpremenljivka['options'][$fkey], 60);
+ self::$exportClass->pdf->MultiCell(60, $height, self::$exportClass->encodeText($forSpremenljivka['options'][$fkey]), 1, 'C', 0, 0, 0 ,0, true);
+
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ if ($variable['other'] != 1) {
+ $sequence = $variable['sequence'];
+ self::$exportClass->pdf->MultiCell($singleWidth, $height, SurveyAnalysis::formatNumber($means[$fkey][$sequence],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),''), 1, 'C', 0, 0, 0 ,0, true);
+
+ $totalMeans[$sequence] += (self::$analizaClass->getMeansFromKey($fkeyFrequency[$sequence])*(int)$frequencys[$fkey][$sequence]['validCnt']);
+ $totalFreq[$sequence]+= (int)$frequencys[$fkey][$sequence]['validCnt'];
+ }
+ }
+ }
+ self::$exportClass->pdf->MultiCell(1, $height, '', 0, 'C', 0, 1, 0 ,0, true);
+ }
+
+ // dodamo Å¡e skupno sumo in povpreÄje
+ self::$exportClass->pdf->MultiCell(60, 5, self::$exportClass->encodeText('Skupaj'), 1, 'C', 0, 0, 0 ,0, true);
+
+ self::$exportClass->pdf->setFont('','B','6');
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ foreach ($grid['variables'] AS $vkey => $variable) {
+
+ $sequence = $variable['sequence'];
+ if ($variable['other'] != 1) {
+ #povpreÄja
+ $totalMean = $totalFreq[$sequence] > 0 ? $totalMeans[$sequence] / $totalFreq[$sequence] : 0;
+ self::$exportClass->pdf->MultiCell($singleWidth, $height, SurveyAnalysis::formatNumber($totalMean ,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),''), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ }
+ }
+ self::$exportClass->pdf->MultiCell(1, $height, '', 0, 'C', 0, 1, 0 ,0, true);
+ self::$exportClass->pdf->setFont('','','6');
+ }
+
+ else {
+ $rowspan = 3;
+ $colspan = count($spremenljivka['grids'][0]['variables']);
+ $singleWidth = floor(200 / $colspan);
+
+
+ # za multinumber izrisemo samo izbrano podtabelo
+ $gkey = $spremenljivka['break_sub_table']['key'];
+ $grid = $spremenljivka['grids'][$gkey];
+
+
+ // PRVA VRSTICA
+ $height = self::getCellHeight($spremenljivka['naslov'].' ('.$spremenljivka['variable'].') - '.$grid['naslov'].' ('.$grid['variable'].')', $singleWidth*$colspan);
+
+ self::$exportClass->pdf->setFont('','B','6');
+ self::$exportClass->pdf->MultiCell(60, $height, '', 'TLR', 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell($singleWidth*$colspan, $height, self::$exportClass->encodeText($spremenljivka['naslov'].' ('.$spremenljivka['variable'].') - '.$grid['naslov'].' ('.$grid['variable'].')'), 1, 'C', 0, 1, 0 ,0, true);
+
+
+ // DRUGA VRSTICA
+ $text = $forSpremenljivka['naslov'].' ('.$forSpremenljivka['variable'].')';
+ $height = self::getCellHeight($text, $singleWidth*$colspan);
+
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $text = $variable['naslov'].' ('.$variable['variable'].')';
+ $height = (self::getCellHeight($text, $singleWidth) > $height) ? self::getCellHeight($text, $singleWidth) : $height;
+ }
+
+ // se izrisemo celice...
+ self::$exportClass->pdf->setFont('','B','6');
+ self::$exportClass->pdf->MultiCell(60, $height, self::$exportClass->encodeText($forSpremenljivka['naslov'].' ('.$forSpremenljivka['variable'].')'), 'LR', 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->setFont('','','6');
+
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $text = $variable['naslov'].' ('.$variable['variable'].')';
+ self::$exportClass->pdf->MultiCell($singleWidth, $height, self::$exportClass->encodeText($text), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ self::$exportClass->pdf->MultiCell(1, $height, '', 0, 'C', 0, 1, 0 ,0, true);
+
+
+ // TRETJA VRSTICA
+ self::$exportClass->pdf->MultiCell(60, 5, '', 'BLR', 'C', 0, 0, 0 ,0, true);
+
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ self::$exportClass->pdf->MultiCell($singleWidth, 5, self::$exportClass->encodeText('PovpreÄje'), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ self::$exportClass->pdf->MultiCell(1, 5, '', 0, 'C', 0, 1, 0 ,0, true);
+
+
+ // VRSTICE Z VSEBINO
+ foreach ($forSpremenljivka['options'] AS $okey => $option) {
+
+ $height = self::getCellHeight($option, 60);
+ self::$exportClass->pdf->MultiCell(60, $height, self::$exportClass->encodeText($option), 1, 'C', 0, 0, 0 ,0, true);
+
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $sequence = $variable['sequence'];
+
+ #povpreÄje
+ self::$exportClass->pdf->MultiCell($singleWidth, $height, SurveyAnalysis::formatNumber($means[$okey][$sequence],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),''), 1, 'C', 0, 0, 0 ,0, true);
+
+ $totalMeans[$sequence] += ($means[$okey][$sequence]*(int)$frequencys[$okey][$sequence]['validCnt']);
+ $totalFreq[$sequence]+= (int)$frequencys[$okey][$sequence]['validCnt'];
+ }
+ self::$exportClass->pdf->MultiCell(1, $height,'', 0, 'C', 0, 1, 0 ,0, true);
+ }
+
+ // dodamo Å¡e skupno sumo in povpreÄje
+ self::$exportClass->pdf->MultiCell(60, 5, self::$exportClass->encodeText('Skupaj'), 1, 'C', 0, 0, 0 ,0, true);
+
+ self::$exportClass->pdf->setFont('','B','6');
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $sequence = $variable['sequence'];
+ if ($variable['other'] != 1) {
+ #povpreÄja
+ $totalMean = $totalFreq[$sequence] > 0 ? $totalMeans[$sequence] / $totalFreq[$sequence] : 0;
+ self::$exportClass->pdf->MultiCell($singleWidth, 5, SurveyAnalysis::formatNumber($totalMean ,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),''), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ }
+ self::$exportClass->pdf->MultiCell(1, 5, '', 0, 'C', 0, 1, 0 ,0, true);
+ self::$exportClass->pdf->setFont('','','6');
+ }
+ }
+
+ // Izrisemo BREAK TEXT TABELO
+ static function displayBreakTableText($forSpr,$frequencys,$spremenljivka) {
+ global $lang;
+
+ $keysCount = count($frequencys);
+ $sequences = explode('_',$spremenljivka['sequences']);
+ $forSpremenljivka = self::$analizaClass->_HEADERS[$forSpr];
+ $tip = $spremenljivka['tip'];
+
+ # izraÄunamo povpreÄja za posamezne sekvence
+ $texts = array();
+ foreach ($frequencys AS $fkey => $fkeyFrequency) {
+ foreach ($sequences AS $sequence) {
+ $texts[$fkey][$sequence] = self::$analizaClass->getTextFromKey($fkeyFrequency[$sequence]);
+ }
+ }
+
+ $rowspan = 2;
+ $colspan = count($spremenljivka['grids'][0]['variables']);
+
+ $singleWidth = floor(200 / $colspan);
+
+ # za multinumber izrisemo samo izbrano podtabelo
+ $gkey = $spremenljivka['break_sub_table']['key'];
+ $grid = $spremenljivka['grids'][$gkey];
+
+
+ // PRVA VRSTICA
+ $height1 = self::getCellHeight($spremenljivka['naslov'].' ('.$spremenljivka['variable'].') - '.$grid['naslov'].' ('.$grid['variable'].')', $singleWidth*$colspan);
+
+ self::$exportClass->pdf->setFont('','B','6');
+ self::$exportClass->pdf->MultiCell(60, $height1, '', 'TLR', 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell($singleWidth*$colspan, $height1, self::$exportClass->encodeText($spremenljivka['naslov'].' ('.$spremenljivka['variable'].') - '.$grid['naslov'].' ('.$grid['variable'].')'), 1, 'C', 0, 1, 0 ,0, true);
+
+
+ // DRUGA VRSTICA
+ $text = $forSpremenljivka['naslov'].' ('.$forSpremenljivka['variable'].')';
+ $height2 = self::getCellHeight($text, $singleWidth*$colspan);
+
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $text = $variable['naslov'].' ('.$variable['variable'].')';
+ $height2 = (self::getCellHeight($text, $singleWidth) > $height2) ? self::getCellHeight($text, $singleWidth) : $height2;
+ }
+
+ // se izrisemo celice...
+ self::$exportClass->pdf->setFont('','B','6');
+ self::$exportClass->pdf->setY(self::$exportClass->pdf->getY() - $height1);
+ self::$exportClass->pdf->MultiCell(60, $height1+$height2, self::$exportClass->encodeText($forSpremenljivka['naslov'].' ('.$forSpremenljivka['variable'].')'), 'BLR', 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->setXY(self::$exportClass->pdf->getX(), self::$exportClass->pdf->getY() + $height1);
+ self::$exportClass->pdf->setFont('','','6');
+
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $text = $variable['naslov'].' ('.$variable['variable'].')';
+ self::$exportClass->pdf->MultiCell($singleWidth, $height2, self::$exportClass->encodeText($text), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ self::$exportClass->pdf->MultiCell(1, $height2, '', 0, 'C', 0, 1, 0 ,0, true);
+
+
+ // VRSTICE Z VSEBINO
+ foreach ($forSpremenljivka['options'] AS $okey => $option) {
+
+ // Izracunamo visino najvisje celice
+ $height = self::getCellHeight($option, 60);
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $sequence = $variable['sequence'];
+ $text = "";
+ if (count($texts[$okey][$sequence]) > 0) {
+ $tempHeight = 0;
+ foreach ($texts[$okey][$sequence] AS $ky => $units) {
+ $text .= $units['text']."\n";
+ }
+ $text = substr($text,0,-2);
+ $height = (self::getCellHeight($text, $singleWidth) > $height) ? self::getCellHeight($text, $singleWidth) : $height;
+ }
+ }
+
+ self::$exportClass->pdf->MultiCell(60, $height, self::$exportClass->encodeText($option), 1, 'C', 0, 0, 0 ,0, true);
+
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $sequence = $variable['sequence'];
+ if (count($texts[$okey][$sequence]) > 0) {
+ $text = "";
+ foreach ($texts[$okey][$sequence] AS $ky => $units) {
+ $text .= $units['text']."\n";
+ }
+ $text = substr($text,0,-2);
+ self::$exportClass->pdf->MultiCell($singleWidth, $height, self::$exportClass->encodeText($text), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ else
+ self::$exportClass->pdf->MultiCell($singleWidth, $height, '', 1, 'C', 0, 0, 0 ,0, true);
+ }
+ self::$exportClass->pdf->MultiCell(1, $height,'', 0, 'C', 0, 1, 0 ,0, true);
+ }
+ }
+
+ // Izrisemo BREAK GRAF
+ public static function displayBreakChart($forSpr,$frequencys,$spremenljivka){
+ global $lang;
+
+ if($spremenljivka['tip'] == 20){
+ // Preberemo za kateri grid izrisujemo tabelo
+ $gkey = $spremenljivka['break_sub_table']['key'];
+
+ $spr1 = self::$sessionData['break']['seq'].'-'. self::$sessionData['break']['spr'].'-undefined';
+ $spr2 = $spremenljivka['grids'][$gkey]['variables'][0]['sequence'].'-'.$spremenljivka['id'].'-undefined';
+ }
+ else{
+ $spr1 = self::$sessionData['break']['seq'].'-'. self::$sessionData['break']['spr'].'-undefined';
+ $spr2 = $spremenljivka['grids'][0]['variables'][0]['sequence'].'-'.$spremenljivka['id'].'-undefined';
+ }
+
+ $chartID = $spr1.'_'.$spr2;
+
+ $settings = self::$sessionData['break_charts'][$chartID];
+
+ $imgName = $settings['name'];
+
+ $size = getimagesize('pChart/Cache/'.$imgName);
+ $height = $size[1] / 5;
+
+ self::$exportClass->pdf->Image('pChart/Cache/'.$imgName, $x='', $y='', $w=140, $h, $type='PNG', $link='', $align='N', $resize=true, $dpi=1600, $palign='C', $ismask=false, $imgmask=false, $border=0);
+ }
+
+
+ // Izrisujemo NAVADEN GRAF
+ public static function displayChart($spid, $type=0, $fromCharts=false){
+ global $site_path;
+ global $lang;
+
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ // ce ga imamo v sessionu ga preberemo
+ if(isset(self::$sessionData['charts'][$spid])){
+
+ // Napolnimo podatke za graf - rabimo za cache
+ if(count(SurveyAnalysis::$_LOOPS) == 0)
+ $settings = self::$sessionData['charts'][$spid];
+ else
+ $settings = self::$sessionData['charts'][$spid][SurveyAnalysis::$_CURRENT_LOOP['cnt']];
+
+
+ $DataSet = SurveyChart::getDataSet($spid, $settings);
+
+ // nimamo nobenih podatkov in imamo vklopljeno opcijo da ne prikazujemo praznih grafov - vrnemo 0
+ if($DataSet == 0){
+ //self::displayEmptyWarning($spid);
+ return;
+ }
+
+ // preberemo ime slike iz sessiona
+ $imgName = $settings['name'];
+ }
+ // ce ga nimamo v sessionu
+ else{
+ // Napolnimo podatke za graf - rabimo za cache
+ $settings = SurveyChart::getDefaultSettings();
+
+ $DataSet = SurveyChart::getDataSet($spid, $settings);
+
+ // nimamo nobenih podatkov in imamo vklopljeno opcijo da ne prikazujemo praznih grafov - vrnemo 0
+ if($DataSet == 0){
+ //self::displayEmptyWarning($spid);
+ return;
+ }
+
+ $ID = SurveyChart::generateChartId($spid, $settings, $DataSet->GetNumerus());
+
+ $Cache = new pCache('pChart/Cache/');
+ $Cache = new pCache('../survey/pChart/Cache/');
+ $imgName = $Cache->GetHash($ID,$DataSet->GetData());
+ }
+
+
+ // Izrisemo naslov (v creportu ne, ker imamo drugacne naslove)
+ if($fromCharts){
+
+ $stevilcenje = (self::$exportClass->numbering == 1 ? $spremenljivka['variable'].' - ' : '');
+ $title = $stevilcenje . $spremenljivka['naslov'];
+
+ if(SurveyDataSettingProfiles :: getSetting('chartNumerusText') == 0){
+ $title .= ' (n = '.$DataSet->GetNumerus().')';
+ }
+
+ // Preverimo ce prebija slika stran
+ if(isset(self::$sessionData['charts'][$spid])){
+
+ if(count(SurveyAnalysis::$_LOOPS) == 0)
+ $settings = self::$sessionData['charts'][$spid];
+ else
+ $settings = self::$sessionData['charts'][$spid][SurveyAnalysis::$_CURRENT_LOOP['cnt']];
+
+ $imgName = $settings['name'];
+ $size = getimagesize('pChart/Cache/'.$imgName);
+ $ratio = ($size[0] / 800) < 1 ? 1 : ($size[0] / 800);
+ $height = $size[1] / 5;
+
+ if(self::$exportClass->pdf->getY() + ($height/$ratio) > 250)
+ {
+ self::$exportClass->pdf->AddPage();
+ }
+ }
+
+ self::$exportClass->pdf->setFont('','b','6');
+ self::$exportClass->pdf->MultiCell(165, 5, $title, 0, 'C', 0, 1, 0 ,0, true);
+ if($spremenljivka['tip'] == 2){
+ self::$exportClass->pdf->setFont('','','5');
+ self::$exportClass->pdf->MultiCell(165, 1, $lang['srv_info_checkbox'], 0, 'C', 0, 1, 0 ,0, true);
+ }
+ self::$exportClass->pdf->setFont('','','6');
+ }
+
+ // IZRIS GRAFA
+ self::$exportClass->pdf->Image('pChart/Cache/'.$imgName, $x='', $y='', $w=140, $h, $type='PNG', $link='', $align='N', $resize=true, $dpi=1600, $palign='C', $ismask=false, $imgmask=false, $border=0);
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ $_answersOther = $DataSet->GetOther();
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+
+ $spid = $oAnswers['spid'];
+ $_variable = SurveyAnalysis::$_HEADERS[$spid]['grids'][$oAnswers['gid']]['variables'][$oAnswers['vid']];
+ $_sequence = $_variable['sequence'];
+ if(count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']) > 0){
+ self::outputOtherAnswers($oAnswers);
+ }
+ }
+ }
+
+
+ // Dodamo space (v creportu ne, ker imamo drugacen izpis)
+ if($fromCharts)
+ self::$exportClass->pdf->setY(self::$exportClass->pdf->getY() + 10);
+ }
+
+ static function chartTableRow($arrayText, $arrayParams=array()){
+
+ /*$linecount = self::$exportClass->pdf->getNumLines(self::$exportClass->encodeText($arrayText[1]), 90);
+ $linecount == 1 ? $height = 4.7 : $height = 4.7 + ($linecount-1)*3.3;*/
+ $height = self::getCellHeight(self::$exportClass->encodeText($arrayText[1]), 90);
+
+ //ce smo na prelomu strani
+ if( (self::$exportClass->pdf->getY() + $height) > 270){
+ self::$exportClass->drawLine();
+ self::$exportClass->pdf->AddPage('P');
+ $arrayParams['border'] .= 'T';
+ }
+
+ if($arrayParams['align2'] != 'C')
+ $arrayParams['align2'] = 'L';
+
+ $fill = (isset($arrayParams['fill'])) ? $arrayParams['fill'] : 0;
+
+ if($arrayParams['type'] == 1){
+ self::$exportClass->pdf->MultiCell(19, $height, '', 0, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(100, $height, self::$exportClass->encodeText($arrayText[1]), 1, $arrayParams['align2'], $fill, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(27, $height, $arrayText[2], 1, 'C', $fill, 1, 0 ,0, true);
+ }
+ else{
+ self::$exportClass->pdf->MultiCell(19, $height, '', 0, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(127, $height, self::$exportClass->encodeText($arrayText[1]), 1, $arrayParams['align2'], $fill, 1, 0 ,0, true);
+ }
+ }
+
+ static function chartTableHeader($type=0){
+ global $lang;
+
+ $naslov = array();
+ $naslov[] = '';
+ $naslov[] = self::encodeText($lang['srv_analiza_frekvence_titleAnswers']);
+ $naslov[] = self::encodeText($lang['srv_analiza_frekvence_titleFrekvenca']);
+ $naslov[] = self::encodeText($lang['srv_analiza_frekvence_titleOdstotek']);
+ $naslov[] = self::encodeText($lang['srv_analiza_frekvence_titleVeljavni']);
+ $naslov[] = self::encodeText($lang['srv_analiza_frekvence_titleKumulativa']);
+
+ $params = array('border' => 'TB', 'bold' => 'B', 'align2' => 'C', 'type' => 1);
+
+ self::chartTableRow($naslov, $params);
+ }
+
+ // Izriše sumarnik v vertikalni obliki
+ static function sumVertical($spid,$_from) {
+ global $lang;
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+ # dodamo opcijo kje izrisujemo legendo
+ $inline_legenda = false;
+ $options=array('inline_legenda' => $inline_legenda, 'isTextAnswer' => false, 'isOtherAnswer' => false);
+
+ //prva vrstica
+ self::$exportClass->pdf->setFont('','b','6');
+ self::$exportClass->pdf->MultiCell(18, 5, self::$exportClass->encodeText($spremenljivka['variable']), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(162, 5, self::$exportClass->encodeText($spremenljivka['naslov']), 1, 'L', 0, 1, 0 ,0, true);
+
+ //druga vrstica
+ self::sumsTableHeader();
+ self::$exportClass->pdf->setFont('','','6');
+
+ $show_valid_percent = (SurveyAnalysis::$_HEADERS[$spid]['show_valid_percent'] == true) ? 1 : 0;
+ // konec naslovne vrstice
+
+
+ $_answersOther = array();
+ $sum_xi_fi=0;
+ $N = 0;
+
+ $_tmp_for_div = array();
+ # izpišemo vlejavne odgovore
+ if (count($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ # dodamo dodatne vrstice z albelami grida
+ if (count($grid['variables']) > 0 )
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if ($variable['text'] != true && $variable['other'] != true) {
+ $counter = 0;
+ $_kumulativa = 0;
+
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'] AS $vkey => $vAnswer) {
+
+ // za povpreÄje
+ $xi = $vkey;
+ $fi = $vAnswer['cnt'];
+
+ $sum_xi_fi += $xi * $fi ;
+ $N += $fi;
+
+ if ($vAnswer['cnt'] > 0 || true) { # izpisujemo samo tiste ki nisno 0
+
+ $counter = self::outputValidAnswerVertical($counter,$vkey,$vAnswer,$_sequence,$spid,$_kumulativa,$options);
+ }
+ # za poznejÅ¡e raÄunannje odklona
+ $_tmp_for_div[] = array('xi'=>$xi, 'fi'=>$fi, 'sequence'=>$_sequence);
+ }
+ # izpišemo sumo veljavnih
+ $counter = self::outputSumaValidAnswerVertical($counter,$_sequence,$spid,$options);
+ }
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'] AS $ikey => $iAnswer) {
+ if ($iAnswer['cnt'] > 0 ) { # izpisujemo samo tiste ki nisno 0
+ $counter = self::outputInvalidAnswerVertical($counter,$ikey,$iAnswer,$_sequence,$spid,$options);
+ }
+ }
+ # izpišemo sumo veljavnih
+ $counter = self::outputSumaInvalidAnswerVertical($counter,$_sequence,$spid,$options);
+ }
+ #izpišemo še skupno sumo
+ $counter = self::outputSumaVertical($counter,$_sequence,$spid,$options);
+ } else {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ }
+ }
+
+ # odklon
+ $avg = ($N > 0) ? $sum_xi_fi / $N : 0;
+ #standardna diviacija
+ $div = 0;
+ $sum_pow_xi_fi_avg = 0;
+ foreach ( $_tmp_for_div as $tkey => $_tmp_div_data) {
+ $xi = $_tmp_div_data['xi'];
+ $fi = $_tmp_div_data['fi'];
+
+ $sum_pow_xi_fi_avg += pow(($xi - $avg),2) * $fi;
+ }
+ $div = (($N -1) > 0) ? sqrt($sum_pow_xi_fi_avg / ($N -1)) : 0;
+
+ # izpiÅ¡emo Å¡e odklon in povpreÄje
+ if ($show_valid_percent == 1 && SurveyAnalysis::$_HEADERS[$spid]['skala'] != 1) {
+
+ self::$exportClass->pdf->ln(1);
+
+ $height = 5;
+
+ self::$exportClass->pdf->MultiCell(18, $height, self::$exportClass->encodeText(''), 0, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(90, $height, self::$exportClass->encodeText(''), 0, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(18, $height, self::$exportClass->encodeText($lang['srv_analiza_opisne_povprecje']), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(18, $height, self::$exportClass->encodeText(SurveyAnalysis::formatNumber($avg,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'')), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(18, $height, self::$exportClass->encodeText($lang['srv_analiza_opisne_odklon']), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(18, $height, self::$exportClass->encodeText(SurveyAnalysis::formatNumber($div,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'')), 1, 'C', 0, 1, 0 ,0, true);
+
+ /*$text = array();
+
+ $text[] = '';
+ $text[] = '';
+
+ $text[] = self::$exportClass->encodeText($lang['srv_analiza_opisne_povprecje']);
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::formatNumber($avg,NUM_DIGIT_AVERAGE,''));
+
+ $text[] = self::$exportClass->encodeText($lang['srv_analiza_opisne_odklon']);
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::formatNumber($div,NUM_DIGIT_AVERAGE,''));
+
+ self::$exportClass->tableRow($text);*/
+ }
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ self::outputOtherAnswers($oAnswers);
+ }
+ }
+ }
+
+ static function sumVerticalCheckbox($spid,$_from) {
+ global $lang;
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+ $_answersOther = array();
+
+ $inline_legenda = count ($spremenljivka['grids']) > 1;
+ if ($variable['other'] != '1' && $variable['text'] != '1') {
+ $_tip = SurveyAnalysis::getSpremenljivkaLegenda($spremenljivka,'izrazanje');
+ $_oblika = SurveyAnalysis::getSpremenljivkaLegenda($spremenljivka,'skala');
+ } else {
+ $_tip = $lang['srv_analiza_vrsta_bese'];
+ $_oblika = $lang['srv_analiza_oblika_nomi'];
+ }
+ # ugotovimo koliko imamo kolon
+ if (count($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $_clmn_cnt[$gid] = $grid['cnt_vars']-$grid['cnt_other'];
+ if (count ($grid['variables']) > 0)
+ foreach ($grid['variables'] AS $vid => $variable) {
+ $_sequence = $variable['sequence'];
+ $_valid_cnt[$gid] = max($_valid_cnt[$gid], SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt']);
+ $_approp_cnt[$gid] = max($_approp_cnt[$gid], SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt']);
+ if ($variable['other'] == true) {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ $_valid[$gid][$vid] = SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'];
+ $_navedbe[$gid] += SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt'];
+ }
+ }
+
+
+ //prva vrstica
+ self::$exportClass->pdf->setFont('','b','6');
+ self::$exportClass->pdf->MultiCell(18, 5, self::$exportClass->encodeText($spremenljivka['variable']), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(162, 5, self::$exportClass->encodeText($spremenljivka['naslov']), 1, 'L', 0, 1, 0 ,0, true);
+
+ //druga vrstica
+ self::$exportClass->pdf->MultiCell(18, 5, self::$exportClass->encodeText(''), 1, 'L', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(50, 5, self::$exportClass->encodeText($lang['srv_analiza_opisne_subquestion']), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(80, 5, self::$exportClass->encodeText($lang['srv_analiza_opisne_units']), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(32, 5, self::$exportClass->encodeText($lang['srv_analiza_opisne_arguments']), 1, 'C', 0, 1, 0 ,0, true);
+
+ //tretja vrstica
+ $text = array();
+
+ $text[] = '';
+ $text[] = '';
+ $text[] = self::$exportClass->encodeText($lang['srv_analiza_opisne_frequency']);
+ $text[] = self::$exportClass->encodeText($lang['srv_analiza_opisne_valid']);
+ $text[] = self::$exportClass->encodeText('% - '.$lang['srv_analiza_opisne_valid']);
+ $text[] = self::$exportClass->encodeText($lang['srv_analiza_num_units_valid']);
+ $text[] = self::$exportClass->encodeText('% - '.$lang['srv_analiza_num_units_valid']);
+ $text[] = self::$exportClass->encodeText($lang['srv_analiza_opisne_frequency']);
+ $text[] = self::$exportClass->encodeText('%');
+
+ self::sumsTableRowVerticalCheckbox($text);
+
+ self::$exportClass->pdf->setFont('','','6');
+ //konec naslovnih vrstic
+
+ $_max_valid = 0;
+ $_max_appropriate = 0;
+ if (count ($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] as $gid => $grid) {
+ if (count ($grid['variables']) > 0)
+ foreach ($grid['variables'] AS $vid => $variable) {
+ if ($variable['other'] != 1) {
+ $_sequence = $variable['sequence'];
+ $cssBack = "anl_bck_desc_2 ".($vid == 0 && $gid != 0 ? 'anl_double_bt ' : '');
+
+ $text = array();
+
+ $text[] = self::$exportClass->encodeText($variable['variable']);
+ $text[] = self::$exportClass->encodeText($variable['naslov']);
+
+ // Frekvence
+ $text[] = self::$exportClass->encodeText((int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt']);
+
+ // Veljavno
+ $text[] = self::$exportClass->encodeText((int)(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt']+(int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['0']['cnt']));
+
+ // Procent veljavni
+ $_percent = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] > 0 ) ? 100*SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] : 0;
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::formatNumber($_percent,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%'));
+
+ $_max_appropriate = max($_max_appropriate, (int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt']);
+ $_max_valid = max ($_max_valid, ((int)(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt']+(int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['0']['cnt'])));
+
+ // Ustrezni
+ $text[] = self::$exportClass->encodeText((int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt']);
+
+ // % Ustrezni
+ $valid = (int)(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt']+(int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['0']['cnt']);
+ $valid = (int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt'];
+ $_percent = ($_max_appropriate > 0 ) ? 100*$valid / $_max_appropriate : 0;
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::formatNumber($_percent,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%'));
+
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt']);
+
+ $_percent = ($_navedbe[$gid] > 0 ) ? 100*SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt'] / $_navedbe[$gid] : 0;
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::formatNumber($_percent,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%'));
+
+ self::sumsTableRowVerticalCheckbox($text);
+
+ } else {
+ # drugo
+ }
+ }
+
+ $text = array();
+
+ $text[] = '';
+
+ $text[] = self::$exportClass->encodeText($lang['srv_anl_suma_valid']);
+
+ $text[] = '';
+
+ $text[] = self::$exportClass->encodeText($_max_valid);
+ $text[] = '';
+
+ $text[] = self::$exportClass->encodeText($_max_appropriate);
+ $text[] = '';
+
+ $text[] = self::$exportClass->encodeText($_navedbe[$gid]);
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::formatNumber('100',SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%'));
+
+ self::sumsTableRowVerticalCheckbox($text);
+ }
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ self::outputOtherAnswers($oAnswers);
+ }
+ }
+ }
+
+ /** Izriše nagovor
+ *
+ */
+ static function sumNagovor($spid,$_from) {
+ global $lang;
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+ $_tip = SurveyAnalysis::getSpremenljivkaLegenda($spremenljivka,'izrazanje');
+ $_oblika = SurveyAnalysis::getSpremenljivkaLegenda($spremenljivka,'skala');
+
+ self::$exportClass->pdf->setFont('','b','6');
+
+ self::$exportClass->pdf->MultiCell(18, 5, self::$exportClass->encodeText($spremenljivka['variable']), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(162, 5, self::$exportClass->encodeText($spremenljivka['naslov']), 1, 'L', 0, 1, 0 ,0, true);
+ }
+
+ /** Izriše number odgovore v vertikalni obliki
+ *
+ * @param unknown_type $spid
+ */
+ static function sumNumberVertical($spid,$_from) {
+ global $lang;
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ # dodamo opcijo kje izrisujemo legendo
+ # Äe je besedilo * in je samo ena kategorija je inline legenda false
+ $inline_legenda = (SurveyAnalysis::$_HEADERS[$spid]['cnt_all'] == 1 || in_array($spremenljivka['tip'],array(1,8) ) ) ? false: true;
+ $options=array('inline_legenda' => $inline_legenda, 'isTextAnswer' => false, 'isOtherAnswer' => false, 'textAnswerExceed' => false);
+
+ # ali izpisujemo enoto:
+ $show_enota = true;
+ if ((int)$spremenljivka['enota'] == 0 && SurveyAnalysis::$_HEADERS[$spid]['cnt_all'] == 1) {
+ $show_enota = false;
+ }
+
+ # ugotovimo koliko imamo kolon
+ if (count($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $_clmn_cnt[$gid] = $grid['cnt_vars']-$grid['cnt_other'];
+ if (count($grid['variables']) > 0)
+ foreach ($grid['variables'] AS $vid => $variable) {
+ $_sequence = $variable['sequence'];
+ $_approp_cnt[$gid] = max($_approp_cnt[$gid], SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt']);
+
+ # za povpreÄje
+ $sum_xi_fi=0;
+ $N = 0;
+ $div=0;
+ $min = null;
+ $max = null;
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']) > 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'] AS $xi => $_validFreq) {
+
+ $fi = $_validFreq['cnt'];
+ $sum_xi_fi += $xi * $fi ;
+ $N += $fi;
+ $min = $min != null ? min($min,$xi) : $xi;
+ $max = max($max,$xi);
+ }
+ }
+
+ #povpreÄje
+ $avg = ($N > 0) ? $sum_xi_fi / $N : 0;
+ $sum_avg += $avg;
+ SurveyAnalysis::$_FREQUENCYS[$_sequence]['validAvg'] = $avg;
+ SurveyAnalysis::$_FREQUENCYS[$_sequence]['validMin'] = $min;
+ SurveyAnalysis::$_FREQUENCYS[$_sequence]['validMax'] = $max;
+
+ #standardna diviacija
+ $div = 0;
+ $sum_pow_xi_fi_avg = 0;
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']) > 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'] AS $xi => $_validFreq) {
+ $fi = $_validFreq['cnt'];
+ $sum_pow_xi_fi_avg += pow(($xi - $avg),2) * $fi;
+ }
+ }
+ SurveyAnalysis::$_FREQUENCYS[$_sequence]['validDiv'] = (($N -1) > 0) ? sqrt($sum_pow_xi_fi_avg / ($N -1)) : 0;
+
+ #doloÄimo Å¡e polja drugo za kasnejÅ¡i prikaz
+ if ($variable['other'] == true) {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ }
+ }
+
+ //prva vrstica
+ self::$exportClass->pdf->setFont('','b','6');
+ self::$exportClass->pdf->MultiCell(18, 5, self::$exportClass->encodeText($spremenljivka['variable']), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(162, 5, self::$exportClass->encodeText($spremenljivka['naslov']), 1, 'L', 0, 1, 0 ,0, true);
+
+ //druga vrstica
+ $text = array();
+
+ $text[] = '';
+
+ if ($show_enota) {
+ if ($spremenljivka['tip'] == 20 || $spremenljivka['tip'] == 7) {
+ $text[] = self::$exportClass->encodeText($lang['srv_analiza_opisne_subquestion']);;
+ } else {
+ $text[] = self::$exportClass->encodeText($lang['srv_analiza_opisne_variable_text']);
+ }
+ } else {
+ $text[] = '';
+ }
+
+ $text[] = self::$exportClass->encodeText($lang['srv_analiza_opisne_m']);
+ $text[] = self::$exportClass->encodeText($lang['srv_analiza_num_units']);
+ $text[] = self::$exportClass->encodeText($lang['srv_analiza_opisne_povprecje']);
+ $text[] = self::$exportClass->encodeText($lang['srv_analiza_opisne_odklon']);
+ $text[] = self::$exportClass->encodeText($lang['srv_analiza_opisne_min']);
+ $text[] = self::$exportClass->encodeText($lang['srv_analiza_opisne_max']);
+
+ self::sumsTableRowNumberVertical($text);
+
+ self::$exportClass->pdf->setFont('','','6');
+ //konec naslovnih vrstic
+
+ $_answersOther = array();
+ $_grupa_cnt = 0;
+ if (count($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ if (count($spremenljivka['grids']) > 1 && $_grupa_cnt !== 0 && $spremenljivka['tip'] != 6) {
+ $grid['new_grid'] = true;
+ }
+
+ $_grupa_cnt ++;
+ if (count($grid['variables']) > 0) {
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if ($variable['other'] != true) {
+ $_sequence = $variable['sequence'];
+
+ $text = array();
+
+ if ($spremenljivka['tip'] != 7 ) {
+ $text[] = self::$exportClass->encodeText($variable['variable']);
+ }
+ else
+ $text[] = '';
+
+ if ($show_enota) {
+ $text[] = self::$exportClass->encodeText((count($grid['variables']) > 1 && $spremenljivka['tip'] == 20 ? $grid['naslov'] . ' - ' : '' ).$variable['naslov']);
+ } else {
+ $text[] = '';;
+ }
+
+ $text[] = (int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'];
+ $text[] = (int)$_approp_cnt[$gid];
+ $text[] = SurveyAnalysis::formatNumber(SurveyAnalysis::$_FREQUENCYS[$_sequence]['validAvg'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'');
+ $text[] = SurveyAnalysis::formatNumber(SurveyAnalysis::$_FREQUENCYS[$_sequence]['validDiv'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_DEVIATION'),'');
+ $text[] = (int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['validMin'];
+ $text[] = (int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['validMax'];
+
+ self::sumsTableRowNumberVertical($text);
+
+ } else {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ $grid['new_grid'] = false;
+ }
+
+ }
+ }
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ self::outputOtherAnswers($oAnswers);
+ }
+ }
+ }
+
+ /** Izriše sumarnik v horizontalni obliki za multigrid
+ *
+ * @param unknown_type $spid - spremenljivka ID
+ */
+ static function sumHorizontal($spid,$_from) {
+ global $lang;
+
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+ $_answersOther = array();
+ $_clmn_cnt = count($spremenljivka['options']);
+
+ # pri razvrÅ¡Äanju dodamo dva polja za povpreÄje in odklon
+ $additional_field = false;
+ $add_fld = 0;
+
+ if ($spremenljivka['tip'] == 17 || $spremenljivka['tip'] == 1 || $spremenljivka['tip'] == 3 || ($spremenljivka['tip'] == 6 && $spremenljivka['skala'] != 1)) {
+ $additional_field = true;
+ $add_fld = 2;
+ }
+
+ # pri radiu in dropdown ne prikazujemo podvprašanj
+ $_sub_question_col = 1;
+ if ($spremenljivka['tip'] == 1 || $spremenljivka['tip'] == 3) {
+ $_sub_question_col = 0;
+ }
+
+ //prva vrstica
+ self::$exportClass->pdf->setFont('','b','6');
+ self::$exportClass->pdf->MultiCell(18, 5, self::$exportClass->encodeText($spremenljivka['variable']), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(162, 5, self::$exportClass->encodeText($spremenljivka['naslov']), 1, 'L', 0, 1, 0 ,0, true);
+
+ //druga vrstica
+ self::$exportClass->pdf->MultiCell(18, 5, self::$exportClass->encodeText(''), 1, 'L', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(30, 5, self::$exportClass->encodeText($lang['srv_analiza_opisne_subquestion']), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(72, 5, self::$exportClass->encodeText($lang['srv_analiza_opisne_answers']), 1, 'C', 0, 0, 0 ,0, true);
+
+ if ($additional_field){
+ self::$exportClass->pdf->MultiCell(15, 5, self::$exportClass->encodeText($lang['srv_analiza_opisne_valid']), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(15, 5, self::$exportClass->encodeText($lang['srv_analiza_num_units']), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(15, 5, self::$exportClass->encodeText($lang['srv_analiza_opisne_povprecje']), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(15, 5, self::$exportClass->encodeText($lang['srv_analiza_opisne_odklon']), 1, 'C', 0, 1, 0 ,0, true);
+ }
+ else{
+ self::$exportClass->pdf->MultiCell(30, 5, self::$exportClass->encodeText($lang['srv_analiza_opisne_valid']), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(30, 5, self::$exportClass->encodeText($lang['srv_analiza_num_units']), 1, 'C', 0, 1, 0 ,0, true);
+ }
+
+ $_variables = $grid['variables'];
+
+ //tretja vrstica
+ $count = 0;
+ $height_title = 0;
+ $text = array();
+ if (count($spremenljivka['options']) > 0) {
+
+ $singleWidth = round(57 / count($spremenljivka['options']));
+
+ foreach ( $spremenljivka['options'] as $key => $kategorija) {
+ // misinge imamo zdruzene
+ $_label = $kategorija;
+ $text[] = $_label;
+
+ $height_title = ($height_title < self::getCellHeight($_label, $singleWidth)) ? self::getCellHeight($_label, $singleWidth) : $height_title;
+ $count++;
+ }
+ }
+
+ self::$exportClass->pdf->MultiCell(18, $height_title, self::$exportClass->encodeText(''), 1, 'L', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(30, $height_title, self::$exportClass->encodeText(''), 1, 'C', 0, 0, 0 ,0, true);
+
+ self::sumsDynamicCells($text, $count, 57, $height_title);
+
+ self::$exportClass->pdf->MultiCell(15, $height_title, self::$exportClass->encodeText($lang['srv_anl_suma1']), 1, 'C', 0, 0, 0 ,0, true);
+ if ($additional_field){
+ self::$exportClass->pdf->MultiCell(15, $height_title, self::$exportClass->encodeText(''), 1, 'L', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(15, $height_title, self::$exportClass->encodeText(''), 1, 'L', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(15, $height_title, self::$exportClass->encodeText(''), 1, 'L', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(15, $height_title, self::$exportClass->encodeText(''), 1, 'L', 0, 1, 0 ,0, true);
+ }
+ else{
+ self::$exportClass->pdf->MultiCell(30, $height_title, self::$exportClass->encodeText(''), 1, 'L', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(30, $height_title, self::$exportClass->encodeText(''), 1, 'L', 0, 1, 0 ,0, true);
+ }
+
+ self::$exportClass->pdf->setFont('','','6');
+ //konec naslovnih vrstic
+
+
+ #zlopamo skozi gride
+ $podtabela = 0;
+ if (count($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ # zloopamo skozi variable
+ if (count($grid['variables']) > 0)
+ foreach ($grid['variables'] AS $vid => $variable ) {
+ $_sequence = $variable['sequence'];
+ if ($variable['other'] != true) {
+
+ // Ce gre za dvojno tabelo naredimo vrstico s naslovom podtabele
+ if($spremenljivka['tip'] == 6 && $spremenljivka['enota'] == 3){
+
+ // ÄŒe zaÄnemo z drugo podtabelo izpiÅ¡emo vrstico z naslovom
+ if($podtabela != $grid['part']){
+
+ $subtitle = $spremenljivka['double'][$grid['part']]['subtitle'];
+ $subtitle = $subtitle == '' ? $lang['srv_grid_subtitle_def'].' '.$grid['part'] : $subtitle;
+
+ self::$exportClass->pdf->setFont('','b','6');
+ self::$exportClass->pdf->MultiCell(180, $height_title, self::$exportClass->encodeText($subtitle), 1, 'C', 0, 1, 0 ,0, true);
+ self::$exportClass->pdf->setFont('','','6');
+
+ $podtabela = $grid['part'];
+ }
+ }
+
+ if($variable['naslov'] == '')
+ $variable['naslov'] = '';
+
+ /*$linecount = self::$exportClass->pdf->getNumLines(self::$exportClass->encodeText($variable['naslov']), 30);
+ $linecount == 1 ? $height = 4.7 : $height = 4.7 + ($linecount-1)*3.3;*/
+ $height = self::getCellHeight(self::$exportClass->encodeText($variable['naslov']), 30);
+ $height = ($height < 8 ? 8 : $height);
+
+ //ce smo na prelomu strani
+ if( (self::$exportClass->pdf->getY() + $height) > 270){
+ self::$exportClass->drawLine();
+ self::$exportClass->pdf->AddPage('P');
+ $arrayParams['border'] .= 'T';
+ }
+
+ self::$exportClass->pdf->MultiCell(18, $height, self::$exportClass->encodeText($variable['variable']), 1, 'L', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(30, $height, self::$exportClass->encodeText($variable['naslov']), 1, 'C', 0, 0, 0 ,0, true);
+
+ # za odklon in povpreÄje
+ $sum_xi_fi=0;
+ $N = 0;
+ $div=0;
+
+ $count = 0;
+ $text = array();
+ if (count($spremenljivka['options']) > 0) {
+ foreach ( $spremenljivka['options'] as $key => $kategorija) {
+ if ($additional_field) { # za odklon in povpreÄje
+ $xi = $key;
+ $fi = SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'][$key]['cnt'];
+ $sum_xi_fi += $xi * $fi ;
+ $N += $fi;
+ }
+
+ $_percent = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] > 0 ) ? SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'][$key]['cnt'] * 100 / SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] : 0;
+
+ $text[] = SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'][$key]['cnt'].' ('.SurveyAnalysis::formatNumber($_percent,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%').')';
+
+ $count++;
+ }
+ }
+ self::sumsDynamicCells($text, $count, 57, $height);
+
+ // suma
+ self::$exportClass->pdf->MultiCell(15, $height, self::$exportClass->encodeText((int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'].' ('.SurveyAnalysis::formatNumber(100,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%').')'), 1, 'C', 0, 0, 0 ,0, true);
+
+ // zamenjano veljavni ustrezni
+ if ($additional_field){
+ self::$exportClass->pdf->MultiCell(15, $height, self::$exportClass->encodeText(SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt']), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(15, $height, self::$exportClass->encodeText(SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt']), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ else{
+ self::$exportClass->pdf->MultiCell(30, $height, self::$exportClass->encodeText(SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt']), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(30, $height, self::$exportClass->encodeText(SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt']), 1, 'C', 0, 1, 0 ,0, true);
+ }
+
+ # za odklon in povpreÄje
+ if ($additional_field){
+ # odklon
+ $avg = ($N > 0) ? $sum_xi_fi / $N : 0;
+ #standardna diviacija
+ $div = 0;
+ $sum_pow_xi_fi_avg = 0;
+ if (count($spremenljivka['options']) > 0) {
+ foreach ( $spremenljivka['options'] as $xi => $kategorija) {
+ $fi = SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'][$xi]['cnt'];
+ $sum_pow_xi_fi_avg += pow(($xi - $avg),2) * $fi;
+ }
+ }
+ $div = (($N -1) > 0) ? sqrt($sum_pow_xi_fi_avg / ($N -1)) : 0;
+
+ self::$exportClass->pdf->MultiCell(15, $height, self::$exportClass->encodeText(SurveyAnalysis::formatNumber($avg,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'')), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(15, $height, self::$exportClass->encodeText(SurveyAnalysis::formatNumber($div,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'')), 1, 'C', 0, 1, 0 ,0, true);
+ }
+ }
+ else {
+ # immamo polje drugo
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ }
+ }
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ self::outputOtherAnswers($oAnswers);
+ }
+ }
+ }
+
+ /** Izriše tekstovne odgovore v vertikalni obliki
+ *
+ * @param unknown_type $spid
+ */
+ static function sumTextVertical($spid,$_from) {
+ global $lang;
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ # dodamo opcijo kje izrisujemo legendo
+ # Äe je besedilo * in je samo ena kategorija je inline legenda false
+ $inline_legenda = (SurveyAnalysis::$_HEADERS[$spid]['cnt_all'] == 1 || in_array($spremenljivka['tip'],array(1,8) ) ) ? false: true;
+ $options=array('inline_legenda' => $inline_legenda, 'isTextAnswer' => false, 'isOtherAnswer' => false, 'textAnswerExceed' => false);
+
+
+ //prva vrstica
+ self::$exportClass->pdf->setFont('','b','6');
+ self::$exportClass->pdf->MultiCell(18, 5, self::$exportClass->encodeText($spremenljivka['variable']), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(162, 5, self::$exportClass->encodeText($spremenljivka['naslov']), 1, 'L', 0, 1, 0 ,0, true);
+
+ //druga vrstica
+ self::sumsTableHeader();
+ self::$exportClass->pdf->setFont('','','6');
+ //konec naslovnih vrstic
+
+
+ $_answersOther = array();
+ $_grids_count = count($spremenljivka['grids']);
+ if ($_grids_count > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $_variables_count = count($grid['variables']);
+ if ($_variables_count > 0)
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if ($variable['other'] != true) {
+ # dodamo dodatne vrstice z labelami grida
+ if ($_variables_count > 1) {
+ self::outputGridLabelVertical($gid,$grid,$vid,$variable,$spid,$options);
+ }
+
+ $maxAnswer = (SurveyDataSettingProfiles :: getSetting('numOpenAnswers') > 0) ? SurveyDataSettingProfiles :: getSetting('numOpenAnswers') : 30;
+ $counter = 0;
+ $_kumulativa = 0;
+ //SurveyAnalysis::$_FREQUENCYS[$_sequence]
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'] AS $vkey => $vAnswer) {
+ if ($vAnswer['cnt'] > 0 && $counter < $maxAnswer) { # izpisujemo samo tiste ki nisno 0
+ $counter = self::outputValidAnswerVertical($counter,$vkey,$vAnswer,$_sequence,$spid,$_kumulativa,$options);
+ }
+ }
+ # izpišemo sumo veljavnih
+ $counter = self::outputSumaValidAnswerVertical($counter,$_sequence,$spid,$options);
+ }
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'] AS $ikey => $iAnswer) {
+ if ($iAnswer['cnt'] > 0 ) { # izpisujemo samo tiste ki nisno 0
+ $counter = self::outputInvalidAnswerVertical($counter,$ikey,$iAnswer,$_sequence,$spid,$options);
+ }
+ }
+ # izpišemo sumo veljavnih
+ $counter = self::outputSumaInvalidAnswerVertical($counter,$_sequence,$spid,$options);
+ }
+ #izpišemo še skupno sumo
+ $counter = self::outputSumaVertical($counter,$_sequence,$spid,$options);
+ } else {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ }
+ }
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && self::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ self::outputOtherAnswers($oAnswers);
+ }
+ }
+ }
+
+ /** Izriše tekstovne odgovore kot tabelo z navedbami
+ *
+ * @param unknown_type $spid
+ */
+ static function sumMultiText($spid,$_from,$displayTitle=false) {
+ global $lang;
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ $_cols = $spremenljivka['cnt_all'] / $spremenljivka['cnt_grids'];
+
+ # koliko zapisov prikažemo naenkrat
+ $maxAnswer = (SurveyDataSettingProfiles :: getSetting('numOpenAnswers') > 0) ? SurveyDataSettingProfiles :: getSetting('numOpenAnswers') : 30;
+
+ $_answers = SurveyAnalysis::getAnswers($spremenljivka,$maxAnswer);
+
+ $_all_valid_answers_cnt = $_answers['validCnt'];
+ $_valid_answers = $_answers['valid'];
+
+
+ // Naslov tabele
+ if($displayTitle){
+
+ $stevilcenje = (self::$exportClass->numbering == 1 ? $spremenljivka['variable'].' - ' : '');
+ $title = $stevilcenje . $spremenljivka['naslov'];
+
+ self::$exportClass->pdf->setFont('','b','6');
+ self::$exportClass->pdf->MultiCell(165, 5, $title, 0, 'C', 0, 1, 0 ,0, true);
+ if($spremenljivka['tip'] == 2){
+ self::$exportClass->pdf->setFont('','','5');
+ self::$exportClass->pdf->MultiCell(165, 1, $lang['srv_info_checkbox'], 0, 'C', 0, 1, 0 ,0, true);
+ }
+ self::$exportClass->pdf->setFont('','','6');
+ }
+
+ //prva vrstica
+ if(self::$from != 'charts'){
+ self::$exportClass->pdf->setFont('','b','6');
+ self::$exportClass->pdf->MultiCell(18, 5, self::$exportClass->encodeText($spremenljivka['variable']), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(162, 5, self::$exportClass->encodeText($spremenljivka['naslov']), 1, 'L', 0, 1, 0 ,0, true);
+ }
+
+ //druga vrstica
+ if(self::$from == 'charts'){
+ if(isset(self::$sessionData['charts'][$spid]))
+ $type = self::$sessionData['charts'][$spid]['type'];
+ else
+ $type = 0;
+ }
+ if(self::$from != 'charts' || (self::$from == 'charts' && $type == 1)){
+ self::$exportClass->pdf->MultiCell(18, 5, self::$exportClass->encodeText(''), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(54, 5, self::$exportClass->encodeText($lang['srv_analiza_opisne_subquestion']), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(108, 5, self::$exportClass->encodeText($lang['srv_analiza_opisne_arguments']), 1, 'C', 0, 1, 0 ,0, true);
+ }
+
+
+ self::$exportClass->pdf->setFont('','','6');
+ //konec naslovnih vrstic
+
+
+ $_answersOther = array();
+ $_grids_count = count($spremenljivka['grids']);
+ if ($_grids_count > 0) {
+ # naslovna vrstica
+ $_row = $spremenljivka['grids'][0];
+
+ $height = 0;
+
+ $count = 0;
+ $text = array();
+ foreach ($_row['variables'] AS $rid => $_col ){
+ $_sequence = $_col['sequence']; # id kolone z podatki
+
+ if ($_col['other'] != true) {
+ $text[] = $_col['naslov'];
+ }
+ else {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+
+ $count++;
+ }
+
+ // Testiramo visino vrstice glede na najdaljsi text
+ foreach ($text AS $string){
+ $singleWidth = ($count > 0) ? round(108 / $count): 108;
+ $height = (self::getCellHeight($string, $singleWidth) > $height) ? self::getCellHeight($string, $singleWidth) : $height;
+ }
+
+ self::$exportClass->pdf->MultiCell(18, $height, self::$exportClass->encodeText(''), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(54, $height, self::$exportClass->encodeText(''), 1, 'C', 0, 0, 0 ,0, true);
+
+ self::sumsDynamicCells($text, $count, 108, $height);
+ self::$exportClass->pdf->ln($height);
+
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $_variables_count = count($grid['variables']);
+ $height = 0;
+
+ if ($_variables_count > 0) {
+
+ $count = 0;
+ $text = array();
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if ($variable['other'] != true) {
+ # tabela z navedbami
+ # odvisno ali imamo odgovor
+ if (count($_valid_answers) > 0) {
+ $text2 = '';
+ foreach ($_valid_answers AS $answer) {
+ $_ans = $answer[$_sequence];
+
+ if ($_ans != null && $_ans != '') {
+ $text2 .= $_ans.', ';
+ }
+ }
+ $text[] = substr($text2, 0, -2);
+ }
+ else {
+ $text[] = '&nbsp;';
+ }
+
+ $count++;
+ }
+
+ }
+ }
+
+ // Testiramo visino vrstice glede na najdaljsi text
+ foreach ($text AS $string){
+ $singleWidth = ($count > 0) ? round(108 / $count): 108;
+ $height = (self::getCellHeight($string, $singleWidth) > $height) ? self::getCellHeight($string, $singleWidth) : $height;
+ }
+
+ self::$exportClass->pdf->MultiCell(18, $height, self::$exportClass->encodeText($grid['variable']), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(54, $height, self::$exportClass->encodeText($grid['naslov']), 1, 'C', 0, 0, 0 ,0, true);
+
+ self::sumsDynamicCells($text, $count, 108, $height);
+ self::$exportClass->pdf->ln($height);
+ }
+ }
+
+ // Ce je vec odgovorov kot jih prikazemo izpisemo na dnu izpisanih/vseh
+ if($_all_valid_answers_cnt > $maxAnswer)
+ self::$exportClass->pdf->MultiCell(180, 5, self::$exportClass->encodeText($maxAnswer.' / '.$_all_valid_answers_cnt), 0, 'R', 0, 1, 0 ,0, true);
+
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+
+ $spid = $oAnswers['spid'];
+ $_variable = SurveyAnalysis::$_HEADERS[$spid]['grids'][$oAnswers['gid']]['variables'][$oAnswers['vid']];
+ $_sequence = $_variable['sequence'];
+ if(count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']) > 0){
+ self::outputOtherAnswers($oAnswers);
+ }
+ }
+ }
+ }
+
+ /** IzriÅ¡e multi number odgovore. izpiÅ¡e samo povpreÄja
+ *
+ * @param unknown_type $spid
+ */
+ static function sumMultiNumber($spid,$_from) {
+ global $lang;
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ $_cols = $spremenljivka['cnt_all'] / $spremenljivka['cnt_grids'];
+
+
+ //prva vrstica
+ self::$exportClass->pdf->setFont('','b','6');
+ self::$exportClass->pdf->MultiCell(18, 5, self::$exportClass->encodeText($spremenljivka['variable']), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(162, 5, self::$exportClass->encodeText($spremenljivka['naslov']), 1, 'L', 0, 1, 0 ,0, true);
+
+ //druga vrstica
+ self::$exportClass->pdf->MultiCell(18, 5, self::$exportClass->encodeText(''), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(54, 5, self::$exportClass->encodeText($lang['srv_analiza_opisne_subquestion']), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(108, 5, self::$exportClass->encodeText($lang['srv_analiza_sums_average']), 1, 'C', 0, 1, 0 ,0, true);
+
+ self::$exportClass->pdf->setFont('','','6');
+ //konec naslovnih vrstic
+
+
+ $_answersOther = array();
+ $_grids_count = count($spremenljivka['grids']);
+ if ($_grids_count > 0) {
+ # naslovna vrstica
+ $_row = $spremenljivka['grids'][0];
+
+ self::$exportClass->pdf->MultiCell(18, 13, self::$exportClass->encodeText(''), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(54, 13, self::$exportClass->encodeText(''), 1, 'C', 0, 0, 0 ,0, true);
+
+ $count = 0;
+ $text = array();
+ foreach ($_row['variables'] AS $rid => $_col ){
+ $_sequence = $_col['sequence']; # id kolone z podatki
+
+ if ($_col['other'] != true) {
+ $text[] = $_col['naslov'];
+ }
+ else {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+
+ $count++;
+ }
+ self::sumsDynamicCells($text, $count, 108, 13);
+ self::$exportClass->pdf->ln(5);
+
+ $last = 0;
+
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $_variables_count = count($grid['variables']);
+
+ self::$exportClass->pdf->MultiCell(18, 5, self::$exportClass->encodeText($grid['variable']), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(54, 5, self::$exportClass->encodeText($grid['naslov']), 1, 'C', 0, 0, 0 ,0, true);
+
+
+ if ($_variables_count > 0) {
+
+ $count = 0;
+ $text = array();
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if ($variable['other'] != true) {
+ # tabela z navedbami
+ $text[] = SurveyAnalysis::formatNumber(SurveyAnalysis::$_FREQUENCYS[$_sequence]['average'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'');
+ }
+ $count++;
+ }
+ self::sumsDynamicCells($text, $count, 108, 5);
+ self::$exportClass->pdf->ln(5);
+ }
+ }
+ }
+ }
+
+
+ /** Izriše sumarnik v horizontalni obliki za multi checbox
+ *
+ * @param unknown_type $spid - spremenljivka ID
+ */
+ static function sumMultiHorizontalCheckbox($spid,$_from) {
+ global $lang;
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+ $_answersOther = array();
+
+ # ugotovimo koliko imamo kolon
+ $gid=0;
+ $_clmn_cnt = SurveyAnalysis::$_HEADERS[$spid]['grids'][$gid]['cnt_vars']-SurveyAnalysis::$_HEADERS[$spid]['grids'][$gid]['cnt_other'];
+ # tekst vprašanja
+
+
+ //prva vrstica
+ self::$exportClass->pdf->setFont('','b','6');
+ self::$exportClass->pdf->MultiCell(18, 5, self::$exportClass->encodeText($spremenljivka['variable']), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(162, 5, self::$exportClass->encodeText($spremenljivka['naslov']), 1, 'L', 0, 1, 0 ,0, true);
+
+ //druga vrstica
+ self::$exportClass->pdf->MultiCell(18, 5, self::$exportClass->encodeText(''), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(18, 5, self::$exportClass->encodeText($lang['srv_analiza_opisne_subquestion']), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(54, 5, self::$exportClass->encodeText($lang['srv_analiza_opisne_answers']), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(18, 5, self::$exportClass->encodeText($lang['srv_analiza_opisne_valid']), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(18, 5, self::$exportClass->encodeText($lang['srv_analiza_num_units']), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(54, 5, self::$exportClass->encodeText($lang['srv_analiza_opisne_arguments']), 1, 'C', 0, 1, 0 ,0, true);
+
+ self::$exportClass->pdf->setFont('','','6');
+ $_variables = SurveyAnalysis::$_HEADERS[$spid]['grids'][$gid]['variables'];
+
+ //tretja vrstica
+ $count = 0;
+ $height = 0;
+ $text = array();
+ foreach ($_variables AS $vkey => $variable) {
+ if ($variable['other'] != true) {
+ $text[] = $variable['naslov'].' ('.$variable['gr_id']. ')';
+
+ $singleWidth = round(54 / (count($_variables) + 1));
+ $height = ($height < self::getCellHeight($variable['naslov'].' ('.$variable['gr_id']. ')', $singleWidth)) ? self::getCellHeight($variable['naslov'].' ('.$variable['gr_id']. ')', $singleWidth) : $height;
+ }
+ $count++;
+ }
+
+ self::$exportClass->pdf->MultiCell(18, $height, self::$exportClass->encodeText(''), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(18, $height, self::$exportClass->encodeText(''), 1, 'C', 0, 0, 0 ,0, true);
+
+ self::sumsDynamicCells($text, $count, 54, $height);
+
+ self::$exportClass->pdf->MultiCell(18, $height, self::$exportClass->encodeText(''), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(18, $height, self::$exportClass->encodeText(''), 1, 'C', 0, 0, 0 ,0, true);
+
+ $count = 0;
+ $text = array();
+ foreach ($_variables AS $vkey => $variable) {
+ if ($variable['other'] != true) {
+ $text[] = $variable['naslov'].' ('.$variable['gr_id']. ')';
+ }
+ $count++;
+ }
+ self::sumsDynamicCells($text, $count, 44, $height);
+
+ self::$exportClass->pdf->MultiCell(10, $height, self::$exportClass->encodeText($lang['srv_anl_suma1']), 1, 'C', 0, 1, 0 ,0, true);
+
+
+ //vrstice s podatki
+ foreach (SurveyAnalysis::$_HEADERS[$spid]['grids'] AS $gid => $grids) {
+
+ $_cnt = 0;
+ $height = self::getCellHeight(self::$exportClass->encodeText($grids['naslov']), 18);
+ $height = ($height < 8 ? 8 : $height);
+
+ # vodoravna vrstice s podatki
+ self::$exportClass->pdf->MultiCell(18, $height, self::$exportClass->encodeText($grids['variable']), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(18, $height, self::$exportClass->encodeText($grids['naslov']), 1, 'C', 0, 0, 0 ,0, true);
+
+ $_arguments = 0;
+
+ $_max_appropriate = 0;
+ $_max_cnt = 0;
+ // prikaz frekvenc
+ $count = 0;
+ $text = array();
+ foreach ($grids['variables'] AS $vkey => $variable) {
+ $_sequence = $variable['sequence'];
+ $_valid = SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'];
+ $_cnt = SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt'];
+ $_arguments += $_cnt;
+
+ $_max_appropriate = max($_max_appropriate, (int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt']);
+ $_max_cnt = max ($_max_cnt, ((int)(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt']+(int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['0']['cnt'])));
+
+ if ($variable['other'] == true) {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vkey,'sequence'=>$_sequence);
+ }
+
+ if ($variable['other'] != true) {
+ $_percent = ($_valid > 0 ) ? $_cnt * 100 / $_valid : 0;
+
+ $text[] = $_cnt . ' (' . SurveyAnalysis::formatNumber($_percent,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%') . ')';
+ $count++;
+ }
+
+ }
+ self::sumsDynamicCells($text, $count, 54, $height);
+
+ # veljavno
+ self::$exportClass->pdf->MultiCell(18, $height, self::$exportClass->encodeText($_max_cnt), 1, 'C', 0, 0, 0 ,0, true);
+ #ustrezno
+ self::$exportClass->pdf->MultiCell(18, $height, self::$exportClass->encodeText($_max_appropriate), 1, 'C', 0, 0, 0 ,0, true);
+
+
+ $count = 0;
+ $text = array();
+ foreach ($grids['variables'] AS $vkey => $variable) {
+ if ($variable['other'] != true) {
+ $_sequence = $variable['sequence'];
+ $_cnt = SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt'];
+
+ $_percent = ($_arguments > 0 ) ? $_cnt * 100 / $_arguments : 0;
+
+ $text[] = $_cnt . ' (' . SurveyAnalysis::formatNumber($_percent,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%') . ')';
+ $count++;
+ }
+ }
+ self::sumsDynamicCells($text, $count, 44, $height);
+
+ self::$exportClass->pdf->MultiCell(10, $height, self::$exportClass->encodeText($_arguments), 1, 'C', 0, 1, 0 ,0, true);
+ }
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ self::outputOtherAnswers($oAnswers);
+ }
+ }
+ }
+
+ static function sumsTableHeader(){
+ global $lang;
+
+ $naslov = array();
+ $naslov[] = '';
+ $naslov[] = self::$exportClass->encodeText($lang['srv_analiza_frekvence_titleAnswers']);
+ $naslov[] = self::$exportClass->encodeText($lang['srv_analiza_frekvence_titleFrekvenca']);
+ $naslov[] = self::$exportClass->encodeText($lang['srv_analiza_frekvence_titleOdstotek']);
+ $naslov[] = self::$exportClass->encodeText($lang['srv_analiza_frekvence_titleVeljavni']);
+ $naslov[] = self::$exportClass->encodeText($lang['srv_analiza_frekvence_titleKumulativa']);
+
+ $params = array('border' => 'TB', 'bold' => 'B', 'align2' => 'C');
+
+ self::sumsTableRow($naslov, $params);
+ }
+ static function sumsTableRow($arrayText, $arrayParams=array()){
+
+ /*$linecount = self::$exportClass->pdf->getNumLines(self::$exportClass->encodeText($arrayText[1]), 90);
+ $linecount == 1 ? $height = 4.7 : $height = 4.7 + ($linecount-1)*3.3;*/
+ $height = self::getCellHeight(self::$exportClass->encodeText($arrayText[1]), 90);
+
+ //ce smo na prelomu strani
+ if( (self::$exportClass->pdf->getY() + $height) > 270){
+ self::$exportClass->drawLine();
+ self::$exportClass->pdf->AddPage('P');
+ $arrayParams['border'] .= 'T';
+ }
+
+ if($arrayParams['align2'] != 'C')
+ $arrayParams['align2'] = 'L';
+
+ self::$exportClass->pdf->MultiCell(18, $height, self::$exportClass->encodeText($arrayText[0]), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(90, $height, self::$exportClass->encodeText($arrayText[1]), 1, $arrayParams['align2'], 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(18, $height, $arrayText[2], 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(18, $height, self::$exportClass->encodeText($arrayText[3]), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(18, $height, self::$exportClass->encodeText($arrayText[4]), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(18, $height, self::$exportClass->encodeText($arrayText[5]), 1, 'C', 0, 1, 0 ,0, true);
+ }
+ static function sumsTableRowVerticalCheckbox($arrayText, $arrayParams=array()){
+
+ if($arrayText[1] == '')
+ $arrayText[1] = '';
+
+ /*$linecount = self::$exportClass->pdf->getNumLines(self::$exportClass->encodeText($arrayText[1]), 54);
+ $linecount == 1 ? $height = 4.7 : $height = 4.7 + ($linecount-1)*3.3;*/
+ $height = self::getCellHeight(self::$exportClass->encodeText($arrayText[1]), 54);
+
+ //ce smo na prelomu strani
+ if( (self::$exportClass->pdf->getY() + $height) > 270){
+ self::$exportClass->drawLine();
+ self::$exportClass->pdf->AddPage('P');
+ $arrayParams['border'] .= 'T';
+ }
+
+ self::$exportClass->pdf->MultiCell(18, $height, self::$exportClass->encodeText($arrayText[0]), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(50, $height, self::$exportClass->encodeText($arrayText[1]), 1, 'L', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(16, $height, self::$exportClass->encodeText($arrayText[2]), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(16, $height, self::$exportClass->encodeText($arrayText[3]), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(16, $height, self::$exportClass->encodeText($arrayText[4]), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(16, $height, self::$exportClass->encodeText($arrayText[5]), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(16, $height, self::$exportClass->encodeText($arrayText[6]), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(16, $height, self::$exportClass->encodeText($arrayText[7]), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(16, $height, self::$exportClass->encodeText($arrayText[8]), 1, 'C', 0, 1, 0 ,0, true);
+ }
+ static function sumsTableRowNumberVertical($arrayText, $arrayParams=array()){
+
+ if($arrayText[1] == '')
+ $arrayText[1] = '';
+
+ for($i=2; $i<8; $i++){
+ if( $arrayText[$i] == '' )
+ $arrayText[$i] = '0';
+ }
+
+ /*$linecount = self::$exportClass->pdf->getNumLines(self::$exportClass->encodeText($arrayText[1]), 54);
+ $linecount == 1 ? $height = 4.7 : $height = 4.7 + ($linecount-1)*3.3;*/
+ $height = self::getCellHeight(self::$exportClass->encodeText($arrayText[1]), 54);
+
+ //ce smo na prelomu strani
+ if( (self::$exportClass->pdf->getY() + $height) > 270){
+ self::$exportClass->drawLine();
+ self::$exportClass->pdf->AddPage('P');
+ $arrayParams['border'] .= 'T';
+ }
+
+ $arrayText[1] == '' ? $arrayParams['border'] = 0 : $arrayParams['border'] = 1;
+
+ self::$exportClass->pdf->MultiCell(18, $height, self::$exportClass->encodeText($arrayText[0]), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(54, $height, self::$exportClass->encodeText($arrayText[1]), $arrayParams['border'], 'L', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(18, $height, self::$exportClass->encodeText($arrayText[2]), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(18, $height, self::$exportClass->encodeText($arrayText[3]), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(18, $height, self::$exportClass->encodeText($arrayText[4]), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(18, $height, self::$exportClass->encodeText($arrayText[5]), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(18, $height, self::$exportClass->encodeText($arrayText[6]), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(18, $height, self::$exportClass->encodeText($arrayText[7]), 1, 'C', 0, 1, 0 ,0, true);
+ }
+ static function sumsTableRowHorizontal($arrayText, $arrayParams=array()){
+
+ if($arrayText[1] == '')
+ $arrayText[1] = '';
+
+ /*$linecount = self::$exportClass->pdf->getNumLines(self::$exportClass->encodeText($arrayText[1]), 30);
+ $linecount == 1 ? $height = 4.7 : $height = 4.7 + ($linecount-1)*3.3;*/
+ $height = self::getCellHeight(self::$exportClass->encodeText($arrayText[1]), 30);
+
+ //ce smo na prelomu strani
+ if( (self::$exportClass->pdf->getY() + $height) > 270){
+ self::$exportClass->drawLine();
+ self::$exportClass->pdf->AddPage('P');
+ $arrayParams['border'] .= 'T';
+ }
+
+ self::$exportClass->pdf->MultiCell(18, $height, self::$exportClass->encodeText($arrayText[0]), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(30, $height, self::$exportClass->encodeText($arrayText[1]), 1, 'L', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(78, $height, self::$exportClass->encodeText($arrayText[2]), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(18, $height, self::$exportClass->encodeText($arrayText[3]), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(18, $height, self::$exportClass->encodeText($arrayText[4]), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(18, $height, self::$exportClass->encodeText($arrayText[5]), 1, 'C', 0, 1, 0 ,0, true);
+ }
+ static function sumsTableRowMultiText($arrayText, $arrayParams=array()){
+
+ if($arrayText[1] == '')
+ $arrayText[1] = '';
+
+ /*$linecount = self::$exportClass->pdf->getNumLines(self::$exportClass->encodeText($arrayText[1]), 30);
+ $linecount == 1 ? $height = 4.7 : $height = 4.7 + ($linecount-1)*3.3;*/
+ $height = self::getCellHeight(self::$exportClass->encodeText($arrayText[1]), 30);
+
+ //ce smo na prelomu strani
+ if( (self::$exportClass->pdf->getY() + $height) > 270){
+ self::$exportClass->drawLine();
+ self::$exportClass->pdf->AddPage('P');
+ $arrayParams['border'] .= 'T';
+ }
+
+ self::$exportClass->pdf->MultiCell(18, $height, self::$exportClass->encodeText($arrayText[0]), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(30, $height, self::$exportClass->encodeText($arrayText[1]), 1, 'L', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(132, $height, self::$exportClass->encodeText($arrayText[2]), 1, 'C', 0, 1, 0 ,0, true);
+ }
+
+ //izrisemo dinamicne celice (podamo sirino, stevilo celic in vsebino)
+ static function sumsDynamicCells($arrayText, $count, $width, $height, $arrayParams=array()){
+
+ if($count > 0){
+ $singleWidth = round($width / $count);
+ $lastWidth = $width - (($count-1)*$singleWidth);
+ }
+ else{
+ $singleWidth = $width;
+ $lastWidth = $width;
+ }
+
+ if($arrayText[0] == '')
+ $arrayText[0] = '';
+
+ /*$linecount = self::$exportClass->pdf->getNumLines(self::$exportClass->encodeText($arrayText[1]), 30);
+ $linecount == 1 ? $height = 1 : $height = 4.7 + ($linecount-1)*3.3;*/
+
+ for($i=0; $i<$count-1; $i++){
+ if($arrayText[$i] == '')
+ $arrayText[$i] = '';
+
+ self::$exportClass->pdf->MultiCell($singleWidth, $height, self::$exportClass->encodeText($arrayText[$i]), 1, 'C', 0, 0, 0 ,0, true);
+ }
+
+ //zadnje polje izrisemo druge sirine ker se drugace zaradi zaokrozevanja tabela porusi
+ $lastWidth = ($lastWidth < 4) ? 4 : $lastWidth;
+ if($count > 0)
+ self::$exportClass->pdf->MultiCell($lastWidth, $height, self::$exportClass->encodeText($arrayText[$count-1]), 1, 'C', 0, 0, 0 ,0, true);
+ else
+ self::$exportClass->pdf->MultiCell($lastWidth, $height, self::$exportClass->encodeText(''), 1, 'C', 0, 0, 0 ,0, true);
+ }
+
+
+ /** Izriše vrstico z opisnimi
+ *
+ * @param unknown_type $spremenljivka
+ * @param unknown_type $variable
+ */
+ public static function displayDescriptivesVariablaRow($spremenljivka,$grid,$variable=null) {
+ global $lang;
+
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if ($_sequence != null) {
+ $_desc = SurveyAnalysis::$_DESCRIPTIVES[$_sequence];
+ }
+
+ $text = array();
+
+ $text[] = self::$exportClass->encodeText($variable['variable']);
+ $text[] = self::$exportClass->encodeText($variable['naslov']);
+
+ #veljavno
+ $text[] = self::$exportClass->encodeText((int)$_desc['validCnt']);
+
+ #ustrezno
+ $text[] = self::$exportClass->encodeText((int)$_desc['allCnt']);
+
+ if (isset($_desc['avg']) && (int)$spremenljivka['skala'] !== 1)
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::formatNumber($_desc['avg'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),''));
+ else if (isset($_desc['avg']) && $spremenljivka['tip'] == 2 && (int)$spremenljivka['skala'] == 1 )
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::formatNumber($_desc['avg']*100,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'&nbsp;%'));
+ else
+ $text[] = self::$exportClass->encodeText('');
+
+ if (isset($_desc['div']) && (int)$spremenljivka['skala'] !== 1)
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::formatNumber($_desc['div'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_DEVIATION'),''));
+ else
+ $text[] = self::$exportClass->encodeText('');
+
+ $text[] = self::$exportClass->encodeText((int)$spremenljivka['skala'] !== 1 ? $_desc['min'] : '');
+ $text[] = self::$exportClass->encodeText((int)$spremenljivka['skala'] !== 1 ? $_desc['max'] : '');
+
+ self::descTableRow($text);
+ }
+
+ /** Izriše vrstico z opisnimi
+ *
+ * @param unknown_type $spremenljivka
+ * @param unknown_type $variable
+ */
+ public static function displayDescriptivesSpremenljivkaRow($spid,$spremenljivka,$show_enota,$_sequence = null) {
+ global $lang;
+
+ if ($_sequence != null) {
+ $_desc = SurveyAnalysis::$_DESCRIPTIVES[$_sequence];
+ }
+
+ $text = array();
+
+ $text[] = self::$exportClass->encodeText($spremenljivka['variable']);
+ $text[] = self::$exportClass->encodeText($spremenljivka['naslov']);
+
+ #veljavno
+ $text[] = self::$exportClass->encodeText((!$show_enota ? (int)$_desc['validCnt'] : ''));
+
+ #ustrezno
+ $text[] = self::$exportClass->encodeText((!$show_enota ? (int)$_desc['allCnt'] : ''));
+
+ if (isset($_desc['avg']) && (int)$spremenljivka['skala'] !== 1)
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::formatNumber($_desc['avg'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),''));
+ else
+ $text[] = self::$exportClass->encodeText('');
+
+ if (isset($_desc['div']) && (int)$spremenljivka['skala'] !== 1)
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::formatNumber($_desc['div'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_DEVIATION'),''));
+ else
+ $text[] = self::$exportClass->encodeText('');
+
+ $text[] = self::$exportClass->encodeText((int)$spremenljivka['skala'] !== 1 ? $_desc['min'] : '');
+ $text[] = self::$exportClass->encodeText((int)$spremenljivka['skala'] !== 1 ? $_desc['max'] : '');
+
+ self::$exportClass->pdf->setFont('','b','6');
+ self::descTableRow($text);
+ self::$exportClass->pdf->setFont('','','6');
+ }
+
+ static function descTableRow($arrayText, $arrayParams=array()){
+
+ if($arrayParams['align2'] != 'C')
+ $arrayParams['align2'] = 'L';
+
+
+ /*$linecount = self::$exportClass->pdf->getNumLines(self::$exportClass->encodeText($arrayText[1]), 52);
+ $linecount == 1 ? $height = 4.7 : $height = 4.7 + ($linecount-1)*3.3;*/
+ $height = self::getCellHeight(self::$exportClass->encodeText($arrayText[1]), 60);
+
+ //ce smo na prelomu strani
+ if( (self::$exportClass->pdf->getY() + $height) > 270){
+ self::$exportClass->drawLine();
+ self::$exportClass->pdf->AddPage('P');
+ $arrayParams['border'] .= 'T';
+ }
+
+ self::$exportClass->pdf->MultiCell(18, $height, self::$exportClass->encodeText($arrayText[0]), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(60, $height, self::$exportClass->encodeText($arrayText[1]), 1, $arrayParams['align2'], 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(16, $height, self::$exportClass->encodeText($arrayText[2]), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(16, $height, self::$exportClass->encodeText($arrayText[3]), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(16, $height, self::$exportClass->encodeText($arrayText[4]), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(16, $height, self::$exportClass->encodeText($arrayText[5]), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(16, $height, self::$exportClass->encodeText($arrayText[6]), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(16, $height, self::$exportClass->encodeText($arrayText[7]), 1, 'C', 0, 1, 0 ,0, true);
+ }
+
+
+ /** Izriše frekvence v vertikalni obliki
+ *
+ * @param unknown_type $spid
+ */
+ public static function frequencyVertical($spid, $displayTitle=false) {
+ global $lang;
+
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ # Äe je besedilo * in je samo ena kategorija je inline legenda false
+ $inline_legenda = (SurveyAnalysis::$_HEADERS[$spid]['cnt_all'] == 1 || in_array($spremenljivka['tip'],array(1,8) ) ) ? false: true;
+
+ # koliko zapisov prikažemo naenkrat
+ $num_show_records = SurveyAnalysis::getNumRecords();
+
+
+ // Naslov tabele
+ if($displayTitle){
+
+ $stevilcenje = (self::$exportClass->numbering == 1 ? $spremenljivka['variable'].' - ' : '');
+ $title = $stevilcenje . $spremenljivka['naslov'];
+
+ self::$exportClass->pdf->setFont('','b','6');
+ self::$exportClass->pdf->MultiCell(165, 5, $title, 0, 'C', 0, 1, 0 ,0, true);
+ if($spremenljivka['tip'] == 2){
+ self::$exportClass->pdf->setFont('','','5');
+ self::$exportClass->pdf->MultiCell(165, 1, $lang['srv_info_checkbox'], 0, 'C', 0, 1, 0 ,0, true);
+ }
+ self::$exportClass->pdf->setFont('','','6');
+ }
+
+ // tabela za graf
+ if(self::$from == 'charts'){
+
+ if(isset(self::$sessionData['charts'][$spid]))
+ $settings = self::$sessionData['charts'][$spid];
+ else
+ $settings = array('type' => 0, 'show_legend' => 0);
+
+ if($settings['type'] == 1)
+ self::chartTableHeader();
+
+ self::$exportClass->pdf->setFont('','','6');
+ }
+ else{
+ //prva vrstica
+ self::$exportClass->pdf->setFont('','b','6');
+ self::$exportClass->pdf->MultiCell(18, 5, self::$exportClass->encodeText($spremenljivka['variable']), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(162, 5, self::$exportClass->encodeText($spremenljivka['naslov']), 1, 'C', 0, 1, 0 ,0, true);
+
+ //druga vrstica
+ self::freqTableHeader();
+ self::$exportClass->pdf->setFont('','','6');
+ }
+ // konec naslovne vrstice
+
+
+ $_answersOther = array();
+
+ # dodamo opcijo kje izrisujemo legendo
+ $options=array('inline_legenda' => $inline_legenda, 'isTextAnswer' => false, 'isOtherAnswer' => false);
+
+ # izpišemo vlejavne odgovore
+ $maxCounter = 0;
+ if (count($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $_variables_count = count($grid['variables']);
+
+ # dodamo dodatne vrstice z albelami grida
+ if ($_variables_count > 0 )
+ foreach ($grid['variables'] AS $vid => $variable ){
+
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if (($variable['text'] != true && $variable['other'] != true)
+ || (in_array($spremenljivka['tip'],array(4,8,21,22)))){
+ # dodamo ime podvariable
+ //if ($_variables_count > 1 && in_array($spremenljivka['tip'],array(2,6,7,16,17,18,19,20,21))) {
+ if ($inline_legenda) {
+ self::outputSubVariablaVertical($spremenljivka,$variable,$grid,$spid,$options);
+ }
+
+ $maxAnswer = (SurveyDataSettingProfiles :: getSetting('numOpenAnswers') > 0) ? SurveyDataSettingProfiles :: getSetting('numOpenAnswers') : 30;
+ $counter = 0;
+ $_kumulativa = 0;
+ //SurveyAnalysis::$_FREQUENCYS[$_sequence]
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'] AS $vkey => $vAnswer) {
+ if ($vAnswer['cnt'] > 0 && $counter < $maxAnswer) { # izpisujemo samo tiste ki nisno 0
+ if (in_array($spremenljivka['tip'],array(4,7,8,19,20,21))) { // text, number, datum, mtext, mnumber, text*
+ $options['isTextAnswer'] = true;
+ # ali prikažemo vse odgovore ali pa samo toliko koliko je nastavljeno v TEXT_ANSWER_LIMIT
+ $options['textAnswerExceed'] = ($counter >= TEXT_ANSWER_LIMIT && count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']) > TEXT_ANSWER_LIMIT+2) ? true : false; # ali zaÄnemo skrivati tekstovne odgovore
+ } else {
+ $options['isTextAnswer'] = false;
+ $options['textAnswerExceed'] = false;
+ }
+ $counter = self::outputValidAnswerVertical($counter,$vkey,$vAnswer,$_sequence,$spid,$_kumulativa,$options);
+ }
+ }
+
+ # izpišemo sumo veljavnih
+ $counter = self::outputSumaValidAnswerVertical($counter,$_sequence,$spid,$options);
+ }
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'] AS $ikey => $iAnswer) {
+ if ($iAnswer['cnt'] > 0 ) { # izpisujemo samo tiste ki nisno 0
+ $counter = self::outputInvalidAnswerVertical($counter,$ikey,$iAnswer,$_sequence,$spid,$options);
+ }
+ }
+ # izpišemo sumo veljavnih
+ $counter = self::outputSumaInvalidAnswerVertical($counter,$_sequence,$spid,$options);
+ }
+ #izpišemo še skupno sumo
+ $counter = self::outputSumaVertical($counter,$_sequence,$spid,$options);
+
+ // Dobimo stevilo vseh odgovorov (ce ne prikazemo vseh izpisemo na dnu)
+ $maxCounter = (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']) > $maxCounter) ? count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']) : $maxCounter;
+ }
+ else {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ }
+ }
+
+ // Ce je vec odgovorov kot jih prikazemo izpisemo na dnu izpisanih/vseh
+ if($maxCounter > $maxAnswer)
+ self::$exportClass->pdf->MultiCell(146, 5, self::$exportClass->encodeText($maxAnswer.' / '.$maxCounter), 0, 'R', 0, 1, 0 ,0, true);
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+
+ $spid = $oAnswers['spid'];
+ $_variable = SurveyAnalysis::$_HEADERS[$spid]['grids'][$oAnswers['gid']]['variables'][$oAnswers['vid']];
+ $_sequence = $_variable['sequence'];
+ if(count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']) > 0){
+ self::outputOtherAnswers($oAnswers);
+ }
+ }
+ }
+ }
+
+ public static function outputSubVariablaVertical($spremenljivka,$variable,$grid,$spid,$_options = array()) {
+ global $lang;
+
+ $text = array();
+
+ # opcije
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ 'textAnswerExceed'=>false # ali presegamo Å¡tevilo tekstovnih odgovorov za prikaz
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+
+ $text[] = self::$exportClass->encodeText($variable['variable']);
+
+ $text[] = self::$exportClass->encodeText($variable['naslov']);
+
+ $text[] = '';
+ $text[] = '';
+ $text[] = '';
+ $text[] = '';
+
+ if(self::$from != 'charts'){
+ self::freqTableRow($text);
+ }
+ else{
+ if(isset(self::$sessionData['charts'][$spid]))
+ $settings = self::$sessionData['charts'][$spid];
+ else
+ $settings = array('type' => 0, 'show_legend' => 0);
+
+ $arrayParams = array('fill' => $fill, 'align2' => 'L', 'type' => $settings['type']);
+ self::$exportClass->pdf->setFont('','B','6');
+ self::chartTableRow($text, $arrayParams);
+ self::$exportClass->pdf->setFont('','','6');
+ }
+ }
+
+ static function freqTableHeader(){
+ global $lang;
+
+ $naslov = array();
+ $naslov[] = '';
+ $naslov[] = self::$exportClass->encodeText($lang['srv_analiza_frekvence_titleAnswers']);
+ $naslov[] = self::$exportClass->encodeText($lang['srv_analiza_frekvence_titleFrekvenca']);
+ $naslov[] = self::$exportClass->encodeText($lang['srv_analiza_frekvence_titleOdstotek']);
+ $naslov[] = self::$exportClass->encodeText($lang['srv_analiza_frekvence_titleVeljavni']);
+ $naslov[] = self::$exportClass->encodeText($lang['srv_analiza_frekvence_titleKumulativa']);
+
+ $params = array('border' => 'TB', 'bold' => 'B', 'align2' => 'C');
+
+ self::freqTableRow($naslov, $params);
+ }
+ static function freqTableRow($arrayText, $params=array()){
+
+ /*$linecount = self::$exportClass->pdf->getNumLines(self::$exportClass->encodeText($arrayText[1]), 60);
+ $linecount == 1 ? $height = 4.7 : $height = 4.7 + ($linecount-1)*3.3;*/
+ $height = self::getCellHeight(self::$exportClass->encodeText($arrayText[1]), 90);
+
+ //ce smo na prelomu strani
+ if( (self::$exportClass->pdf->getY() + $height) > 270){
+ self::$exportClass->drawLine();
+ self::$exportClass->pdf->AddPage('P');
+ $params['border'] .= 'T';
+ }
+
+ if($params['align2'] != 'C')
+ $params['align2'] = 'L';
+
+ self::$exportClass->pdf->MultiCell(18, $height, self::$exportClass->encodeText($arrayText[0]), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(90, $height, self::$exportClass->encodeText($arrayText[1]), 1, $params['align2'], 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(18, $height, self::$exportClass->encodeText($arrayText[2]), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(18, $height, self::$exportClass->encodeText($arrayText[3]), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(18, $height, self::$exportClass->encodeText($arrayText[4]), 1, 'C', 0, 0, 0 ,0, true);
+ self::$exportClass->pdf->MultiCell(18, $height, self::$exportClass->encodeText($arrayText[5]), 1, 'C', 0, 1, 0 ,0, true);
+ }
+
+
+ static function outputValidAnswerVertical($counter,$vkey,$vAnswer,$_sequence,$spid,&$_kumulativa,$_options=array()) {
+ global $lang;
+
+ $text = array();
+
+ # opcije
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ 'textAnswerExceed'=>false # ali presegamo Å¡tevilo tekstovnih odgovorov za prikaz
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+
+ $_valid = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] > 0 ) ? 100*$vAnswer['cnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] : 0;
+ $_percent = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] > 0 ) ? 100*$vAnswer['cnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] : 0;
+ $_kumulativa += $_valid;
+
+ //if ($counter < TEXT_MAX_ANSWER_LIMIT) {
+ $text[] = '';
+
+ $addText = (($options['isTextAnswer'] == false && (string)$vkey != $vAnswer['text']) ? ' ('.$vAnswer['text'] .')' : '');
+ $text[] = self::$exportClass->encodeText(' '.$vkey.$addText);
+
+ $text[] = (int)$vAnswer['cnt'];
+
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::formatNumber($_percent, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'));
+
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::formatNumber($_valid, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'));
+
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::formatNumber($_kumulativa, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'));
+
+ /*} elseif ($counter == TEXT_MAX_ANSWER_LIMIT ) {
+ echo '<tr id="'.$spid.'_'.$_sequence.'_'.$counter.'" name="valid_row_'.$_sequence.'">';
+ echo '<td class="anl_bl anl_ac anl_br gray anl_dash_bt anl_dash_bb" colspan="'.(6+(int)SurveyAnalysis::$_HEADERS[$spid]['show_valid_percent']+((int)SurveyAnalysis::$_SHOW_LEGENDA*2)).'"> . . . Prikazujemo samo prvih '.TEXT_MAX_ANSWER_LIMIT.' veljavnih odgovorov!</td>';
+ echo '</tr>';
+ }*/
+
+ if(self::$from == 'charts'){
+
+ if(isset(self::$sessionData['charts'][$spid]))
+ $settings = self::$sessionData['charts'][$spid];
+ else
+ $settings = array('type' => 0, 'show_legend' => 0);
+
+ $align = $settings['show_legend'] == 0 ? 'C' : 'L';
+ $arrayParams = array('fill' => $fill, 'align2' => $align, 'type' => $settings['type']);
+
+ self::chartTableRow($text, $arrayParams);
+ }
+ else
+ self::sumsTableRow($text);
+
+ $counter++;
+ return $counter;
+ }
+
+ static function outputSumaValidAnswerVertical($counter,$_sequence,$spid,$_options=array()) {
+ global $lang;
+
+ $text = array();
+
+ # opcije
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ 'textAnswerExceed'=>false # ali presegamo Å¡tevilo tekstovnih odgovorov za prikaz
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+
+ $_percent = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] > 0 ) ? 100*SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] : 0;
+
+ $_brez_MV = ((int)SurveyAnalysis::$currentMissingProfile == 2) ? TRUE : FALSE;
+
+ $_sufix = '';
+
+ $text[] = self::$exportClass->encodeText($lang['srv_anl_valid']);
+ $text[] = self::$exportClass->encodeText($lang['srv_anl_suma1']);
+
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] > 0 ? SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] : 0);
+
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::formatNumber($_percent, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'));
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::formatNumber(100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'));
+
+ $text[] = '';
+
+ if(self::$from == 'charts'){
+
+ if(isset(self::$sessionData['charts'][$spid]))
+ $settings = self::$sessionData['charts'][$spid];
+ else
+ $settings = array('type' => 0, 'show_legend' => 0);
+
+ $arrayParams = array('fill' => $fill, 'align2' => 'L', 'type' => $settings['type']);
+
+ if($settings['type'] == 1)
+ self::chartTableRow($text, $arrayParams);
+ }
+ else
+ self::sumsTableRow($text);
+
+ $counter++;
+ return $counter;
+ }
+
+ static function outputInvalidAnswerVertical($counter,$vkey,$vAnswer,$_sequence,$spid,$_options=array()) {
+ global $lang;
+
+ $text = array();
+
+ # opcije
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ 'textAnswerExceed'=>false # ali presegamo Å¡tevilo tekstovnih odgovorov za prikaz
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+
+ $_percent = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] > 0 ) ? 100*$vAnswer['cnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] : 0;
+ $_invalid = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'] > 0 ) ? 100*$vAnswer['cnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'] : 0;
+
+ $_sufix = '';
+
+ $_Z_MV = ((int)SurveyAnalysis::$missingProfileData['display_mv_type'] === 2) ? TRUE : FALSE;
+ if($_Z_MV){
+ $text[] = '';
+
+ $text[] = self::$exportClass->encodeText($vkey.' (' . $vAnswer['text'].')');
+ //echo '<div class="floatRight anl_detail_percent anl_w50 anl_ac anl_dash_bl">'.SurveyAnalysis::formatNumber($_invalid, NUM_DIGIT_PERCENT, '%').'</div>'.NEW_LINE;
+ //echo '<div class="floatRight anl_detail_percent anl_w30 anl_ac">'.$vAnswer['cnt'].'</div>'.NEW_LINE;
+
+ $text[] = self::$exportClass->encodeText((int)$vAnswer['cnt']);
+
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::formatNumber($_percent, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'));
+
+ $text[] = '';
+ $text[] = '';
+
+ if(self::$from == 'charts'){
+ //self::chartTableRow($text, $arrayParams);
+ }
+ else
+ self::sumsTableRow($text);
+ }
+
+ $counter++;
+ return $counter;
+ }
+
+ static function outputSumaInvalidAnswerVertical($counter,$_sequence,$spid,$_options = array()) {
+ global $lang;
+
+ # opcije
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ 'textAnswerExceed'=>false # ali presegamo Å¡tevilo tekstovnih odgovorov za prikaz
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+ $cssBck = ' '.SurveyAnalysis::$cssColors['text_' . ($counter & 1)];
+ $_percent = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] > 0 ) ? 100*SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] : 0;
+
+ $_brez_MV = ((int)SurveyAnalysis::$missingProfileData['display_mv_type'] === 0) ? TRUE : FALSE;
+ if(!$_brez_MV){
+ $text = array();
+
+ $text[] = self::$exportClass->encodeText($lang['srv_anl_missing']);
+
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt']);
+
+ $answer['cnt'] = SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'] > 0 ? SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'] : 0;
+ $text[] = self::$exportClass->encodeText((int)$answer['cnt']);
+
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::formatNumber($_percent, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'));
+ $text[] = '';
+ $text[] = '';
+
+ if(self::$from == 'charts'){
+ //self::chartTableRow($text, $arrayParams);
+ }
+ else
+ self::sumsTableRow($text);
+ }
+
+ $counter++;
+ return $counter;
+ }
+
+ static function outputSumaVertical($counter,$_sequence,$spid, $_options = array()) {
+ global $lang;
+
+ # opcije
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ 'textAnswerExceed'=>false # ali presegamo Å¡tevilo tekstovnih odgovorov za prikaz
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+
+ $cssBck = ' '.SurveyAnalysis::$cssColors['0_' .($counter & 1)];
+
+ $_brez_MV = ((int)SurveyAnalysis::$missingProfileData['display_mv_type'] === 0) ? TRUE : FALSE;
+ if(!$_brez_MV){
+
+ $text = array();
+
+ $text[] = '';
+ $text[] = self::$exportClass->encodeText($lang['srv_anl_suma2']);
+ $text[] = self::$exportClass->encodeText((SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] ? SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] : 0));
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::formatNumber('100', SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'));
+ $text[] = '';
+ $text[] = '';
+
+ if(self::$from == 'charts'){
+ //self::chartTableRow($text, $arrayParams);
+ }
+ else
+ self::sumsTableRow($text);
+ }
+ }
+
+ /** izpišemo tabelo z tekstovnimi odgovori drugo
+ *
+ * @param $skey
+ * @param $oAnswers
+ * @param $spid
+ */
+ public static function outputOtherAnswers($oAnswers) {
+ global $lang;
+ $spid = $oAnswers['spid'];
+ $_variable = SurveyAnalysis::$_HEADERS[$spid]['grids'][$oAnswers['gid']]['variables'][$oAnswers['vid']];
+ $_sequence = $_variable['sequence'];
+ $_frekvence = SurveyAnalysis::$_FREQUENCYS[$_variable['sequence']];
+
+ self::$exportClass->pdf->setY(self::$exportClass->pdf->getY() + 5);
+
+ // Naslov posameznega grafa
+ /*$stevilcenje = (self::$exportClass->numbering == 1 ? $_variable['variable'].' - ' : '');
+ $title = $stevilcenje . SurveyAnalysis::$_HEADERS[$oAnswers['spid']]['variable'].' ('.$_variable['naslov'].' )';
+ self::$exportClass->pdf->setFont('','b','6');
+ self::$exportClass->pdf->MultiCell(165, 5, $title, 0, 'C', 0, 1, 0 ,0, true);
+ self::$exportClass->pdf->setFont('','','6');*/
+
+ $counter = 0;
+ $_kumulativa = 0;
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'] AS $vkey => $vAnswer) {
+ if ($vAnswer['cnt'] > 0 ) { # izpisujemo samo tiste ki nisno 0
+ $counter = self::outputValidAnswerVertical($counter,$vkey,$vAnswer,$_sequence,$spid,$_kumulativa,array('isOtherAnswer'=>true));
+ }
+ }
+ # izpišemo sumo veljavnih
+ //$counter = self::outputSumaValidAnswerVertical($counter,$_sequence,$spid,array('isOtherAnswer'=>true));
+ }
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'] AS $ikey => $iAnswer) {
+ if ($iAnswer['cnt'] > 0 ) { # izpisujemo samo tiste ki nisno 0
+ $counter = self::outputInvalidAnswerVertical($counter,$ikey,$iAnswer,$_sequence,$spid,array('isOtherAnswer'=>true));
+ }
+ }
+ # izpišemo sumo veljavnih
+ //$counter = self::outputSumaInvalidAnswerVertical($counter,$_sequence,$spid,array('isOtherAnswer'=>true));
+ }
+ #izpišemo še skupno sumo
+ //$counter = self::outputSumaVertical($counter,$_sequence,$spid,array('isOtherAnswer'=>true));
+ }
+
+ /** za multi grid tekstovne vrstice doda vrstico z labeliami grida
+ *
+ * @param $gkey
+ * @param $gAnswer
+ * @param $spid
+ * @param $_options
+ */
+ public static function outputGridLabelVertical($gid,$grid,$vid,$variable,$spid,$_options=array()) {
+
+ $text = array();
+
+ $text[] = self::$exportClass->encodeText($variable['variable']);
+ $text[] = self::$exportClass->encodeText(($grid['naslov'] != '' ? $grid['naslov']. '&nbsp;-&nbsp;' : '').$variable['naslov']);
+
+ $text[] = '';
+ $text[] = '';
+ $text[] = '';
+ $text[] = '';
+
+ self::sumsTableRow($text);
+
+ $counter++;
+ return $counter;
+ }
+
+
+
+ static function encodeText($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace(array("&scaron;","&#353;","&#269;"),array("Å¡","Å¡","Ä"),$text);
+ return strip_tags($text);
+ }
+
+ static function getCellHeight($string, $width){
+
+ // Star nacin
+ //$linecount = self::$exportClass->pdf->getNumLines(self::encodeText($string), $width);
+ //$height = ( $linecount == 1 ? 4.7 : (4.7 + ($linecount-1)*3.5) );
+
+ self::$exportClass->pdf->startTransaction();
+ // get the number of lines calling you method
+ $linecount = self::$exportClass->pdf->MultiCell($width, 0, $string, 0, 'L', 0, 0, '', '', true, 0, false, true, 0);
+ // restore previous object
+ self::$exportClass->pdf = self::$exportClass->pdf->rollbackTransaction();
+
+ $height = ($linecount <= 1) ? 4.7 : $linecount * (self::$exportClass->pdf->getFontSize() * self::$exportClass->pdf->getCellHeightRatio()) + 2;
+
+ return $height;
+ }
+
+ /*Skrajsa tekst in doda '...' na koncu*/
+ static function snippet($text,$length=64,$tail="...")
+ {
+ $text = trim($text);
+ $txtl = strlen($text);
+ if($txtl > $length)
+ {
+ for($i=1;$text[$length-$i]!=" ";$i++)
+ {
+ if($i == $length)
+ {
+ return substr($text,0,$length) . $tail;
+ }
+ }
+ $text = substr($text,0,$length-$i+1) . $tail;
+ }
+ return $text;
+ }
+}
+
+?> \ No newline at end of file
diff --git a/admin/exportclases/class.pdfIzvozAnalizaMean.php b/admin/exportclases/class.pdfIzvozAnalizaMean.php
new file mode 100644
index 0000000..70dfd8a
--- /dev/null
+++ b/admin/exportclases/class.pdfIzvozAnalizaMean.php
@@ -0,0 +1,451 @@
+<?php
+
+ global $site_path;
+
+ include_once('../../function.php');
+ include_once('../survey/definition.php');
+ include_once('../exportclases/class.pdfIzvozAnalizaFunctions.php');
+ require_once('../exportclases/class.enka.pdf.php');
+
+ define("ALLOW_HIDE_ZERRO_REGULAR", false); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za navadne odgovore
+ define("ALLOW_HIDE_ZERRO_MISSING", true); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za missinge
+
+ define("NUM_DIGIT_AVERAGE", 2, true); // stevilo digitalnih mest za povprecje
+ define("NUM_DIGIT_DEVIATION", 2, true); // stevilo digitalnih mest za povprecje
+
+ define("M_ANALIZA_DESCRIPTOR", "descriptor", true);
+ define("M_ANALIZA_FREQUENCY", "frequency", true);
+
+ define("FNT_FREESERIF", "freeserif", true);
+ define("FNT_FREESANS", "freesans", true);
+ define("FNT_HELVETICA", "helvetica", true);
+
+ define("FNT_MAIN_TEXT", FNT_FREESANS, true);
+ define("FNT_QUESTION_TEXT", FNT_FREESANS, true);
+ define("FNT_HEADER_TEXT", FNT_FREESANS, true);
+
+ define("FNT_MAIN_SIZE", 10, true);
+ define("FNT_QUESTION_SIZE", 9, true);
+ define("FNT_HEADER_SIZE", 10, true);
+
+ define("RADIO_BTN_SIZE", 3, true);
+ define("CHCK_BTN_SIZE", 3, true);
+ define("LINE_BREAK", 6, true);
+
+ define ('PDF_MARGIN_HEADER', 8);
+ define ('PDF_MARGIN_FOOTER', 12);
+ define ('PDF_MARGIN_TOP', 18);
+ define ('PDF_MARGIN_BOTTOM', 18);
+ define ('PDF_MARGIN_LEFT', 15);
+ define ('PDF_MARGIN_RIGHT', 15);
+
+
+/** Class za generacijo pdf-a
+ *
+ * @desc: po novem je potrebno form elemente generirati ro�no kot slike
+ *
+ */
+class PdfIzvozAnalizaMean {
+
+ var $anketa;// = array(); // trenutna anketa
+
+ var $pi=array('canCreate'=>false); // za shrambo parametrov in sporocil
+ var $pdf;
+ var $currentStyle;
+ var $db_table = '';
+
+ public $meansClass = null; //means class
+
+ var $meanData1;
+ var $meanData2;
+
+ var $sessionData; // podatki ki so bili prej v sessionu - za nastavitve, ki se prenasajo v izvoze...
+
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null, $podstran = 'mean')
+ {
+ global $site_path;
+ global $global_user_id;
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) )
+ {
+ $this->anketa['id'] = $anketa;
+ $this->anketa['podstran'] = $podstran;
+ // create new PDF document
+ $this->pdf = new enka_TCPDF('L', PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
+ }
+ else
+ {
+ $this->pi['msg'] = "Anketa ni izbrana!";
+ $this->pi['canCreate'] = false;
+ return false;
+ }
+ $_GET['a'] = A_ANALYSIS;
+
+ // preberemo nastavitve iz baze (prej v sessionu)
+ SurveyUserSession::Init($this->anketa['id']);
+ $this->sessionData = SurveyUserSession::getData();
+
+ // ustvarimo means objekt
+ $this->meansClass = new SurveyMeans($anketa);
+
+ if ( SurveyInfo::getInstance()->SurveyInit($this->anketa['id']) && $this->init())
+ {
+ $this->anketa['uid'] = $global_user_id;
+ SurveyUserSetting::getInstance()->Init($this->anketa['id'], $this->anketa['uid']);
+ }
+ else
+ return false;
+ // ce smo prisli do tu je vse ok
+ $this->pi['canCreate'] = true;
+
+ return true;
+ }
+
+ // SETTERS && GETTERS
+
+ function checkCreate()
+ {
+ return $this->pi['canCreate'];
+ }
+ function getFile($fileName)
+ {
+ //Close and output PDF document
+ ob_end_clean();
+ $this->pdf->Output($fileName, 'I');
+ }
+
+
+ function init()
+ {
+ global $lang;
+
+ // array used to define the language and charset of the pdf file to be generated
+ $language_meta = Array();
+ $language_meta['a_meta_charset'] = 'UTF-8';
+ $language_meta['a_meta_dir'] = 'ltr';
+ $language_meta['a_meta_language'] = 'sl';
+ $language_meta['w_page'] = $lang['page'];
+
+ //set some language-dependent strings
+ $this->pdf->setLanguageArray($language_meta);
+
+ //set margins
+ $this->pdf->setPrintHeaderFirstPage(true);
+ $this->pdf->setPrintFooterFirstPage(true);
+ $this->pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
+ $this->pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
+ $this->pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
+
+ // set header and footer fonts
+ $this->pdf->setHeaderFont(Array(FNT_HEADER_TEXT, "I", FNT_HEADER_SIZE));
+ $this->pdf->setFooterFont(Array(FNT_HEADER_TEXT, 'I', FNT_HEADER_SIZE));
+
+
+ // set document information
+ $this->pdf->SetAuthor('An Order Form');
+ $this->pdf->SetTitle('An Order');
+ $this->pdf->SetSubject('An Order');
+
+ // set default header data
+ $this->pdf->SetHeaderData(null, null, "www.1ka.si", $this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()));
+
+ //set auto page breaks
+ $this->pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
+
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', FNT_MAIN_SIZE);
+ //set image scale factor
+ $this->pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
+ return true;
+ }
+
+ function encodeText($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace(array("&scaron;","&#353;","&#269;"),array("Å¡","Å¡","Ä"),$text);
+ return strip_tags($text);
+ }
+
+ function createPdf()
+ {
+ global $site_path;
+ global $lang;
+
+
+ // izpisemo prvo stran
+ //$this->createFrontPage();
+
+ $this->pdf->AddPage();
+
+ $this->pdf->setFont('','B','11');
+ $this->pdf->MultiCell(150, 5, $lang['export_analisys_means'], 0, 'L', 0, 1, 0 ,0, true);
+
+ $this->pdf->setDrawColor(128, 128, 128);
+ $this->pdf->setFont('','','6');
+
+ # polovimo nastavtve missing profila
+ //SurveyConditionProfiles:: getConditionString();
+
+
+ $this->meanData1 = $this->sessionData['means']['means_variables']['variabla1'];
+ $this->meanData2 = $this->sessionData['means']['means_variables']['variabla2'];
+
+ $means = array();
+ # Äe ne uporabljamo privzetega Äasovnega profila izpiÅ¡emo opozorilo
+ //$doNewLine = SurveyTimeProfiles :: printIsDefaultProfile(false);
+
+ # Äe imamo filter ifov ga izpiÅ¡emo
+ //$doNewLine = SurveyConditionProfiles:: getConditionString($doNewLine );
+
+ # Äe imamo filter spremenljivk ga izpiÅ¡emo
+ //$doNewLine = SurveyVariablesProfiles:: getProfileString($doNewLine , true) || $doNewLine;
+
+ if ($this->meanData1 !== null && $this->meanData2 !== null) {
+ $variables1 = $this->meanData2;
+ $variables2 = $this->meanData1;
+ $c1=0;
+ $c2=0;
+
+ if(is_array($variables2) && count($variables2) > 0){
+ #prikazujemo loÄeno
+ if ($this->sessionData['means']['meansSeperateTables'] == true || $this->sessionData['mean_charts']['showChart'] == '1') {
+ foreach ($variables2 AS $v_second) {
+ if (is_array($variables1) && count($variables1) > 0) {
+ foreach ($variables1 AS $v_first) {
+ $_means = $this->meansClass->createMeans($v_first, $v_second);
+ if ($_means != null) {
+ $means[$c1][0] = $_means;
+ }
+ $c1++;
+ }
+ }
+ }
+ }
+ #prikazujemo skupaj
+ else {
+ foreach ($variables2 AS $v_second) {
+ if (is_array($variables1) && count($variables1) > 0) {
+ foreach ($variables1 AS $v_first) {
+ $_means = $this->meansClass->createMeans($v_first, $v_second);
+ if ($_means != null) {
+ $means[$c1][$c2] = $_means;
+ }
+ $c2++;
+ }
+ }
+ $c1++;
+ $c2=0;
+ }
+ }
+ }
+
+
+ if (is_array($means) && count($means) > 0) {
+
+ $count = 0;
+ foreach ($means AS $mean_sub_grup) {
+
+ if($this->sessionData['mean_charts']['showChart'] == '1'){
+ if($count > 0){
+ $this->pdf->AddPage();
+ }
+
+ $this->pdf->ln(10);
+
+ $this->displayMeansTable($mean_sub_grup);
+ $this->displayChart($count);
+ }
+ else{
+ if($count%2 == 0 && $count > 0){
+ $this->pdf->AddPage();
+ }
+
+ $this->pdf->ln(10);
+ $this->displayMeansTable($mean_sub_grup);
+ $this->pdf->ln(10);
+ }
+
+ $count++;
+ }
+ }
+ }
+ }
+
+ public function displayMeansTable($_means) {
+ global $lang;
+
+ #Å¡tevilo vratic in Å¡tevilo kolon
+ $cols = count($_means);
+ # preberemo kr iz prvega loopa
+ $rows = count($_means[0]['options']);
+
+ // sirina ene celice
+ $singleWidth = round( 180 / $cols / 2 );
+
+ // visina prve vrstice
+ $firstHeight = 0;
+ for ($i = 0; $i < $cols; $i++) {
+
+ $label1 = $this->meansClass->getSpremenljivkaTitle($_means[$i]['v1']);
+
+ /*$linecount = $this->pdf->getNumLines($this->encodeText($label1), $singleWidth*2);
+ $height = ( $linecount == 1 ? 4.7 : (4.7 + ($linecount-1)*3.3) );
+ $firstHeight = ($height > $firstHeight) ? $height : $firstHeight;*/
+ $firstHeight = ($firstHeight > $this->getCellHeight($this->encodeText($label1), $singleWidth*2)) ? $firstHeight : $this->getCellHeight($this->encodeText($label1), $singleWidth*2);
+ }
+
+
+ // prva vrstica
+ $this->pdf->setFont('','B','6');
+
+ $label2 = $this->meansClass->getSpremenljivkaTitle($_means[0]['v2']);
+ $this->pdf->MultiCell(80, $firstHeight, $this->encodeText($label2), 'TLR', 'C', 0, 0, 0 ,0, true);
+
+ for ($i = 0; $i < $cols; $i++) {
+
+ $label1 = $this->meansClass->getSpremenljivkaTitle($_means[$i]['v1']);
+ $this->pdf->MultiCell($singleWidth*2, $firstHeight, $this->encodeText($label1), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ $this->pdf->MultiCell(1, $firstHeight, $this->encodeText(''), 0, 'C', 0, 1, 0 ,0, true);
+
+ $this->pdf->setFont('','','6');
+
+ // druga vrstica
+ $this->pdf->MultiCell(80, 7, $this->encodeText(''), 'BLR', 'C', 0, 0, 0 ,0, true);
+
+ for ($i = 0; $i < $cols; $i++) {
+
+ $this->pdf->MultiCell($singleWidth, 7, $this->encodeText($lang['srv_means_label']), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell($singleWidth, 7, $this->encodeText($lang['srv_means_label4']), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ $this->pdf->MultiCell(1, 7, $this->encodeText(''), 0, 'C', 0, 1, 0 ,0, true);
+
+
+ // vrstice s podatki
+ if (count($_means[0]['options']) > 0) {
+ foreach ($_means[0]['options'] as $ckey2 =>$crossVariabla2) {
+
+ $variabla = $crossVariabla2['naslov'];
+ # Äe ni tekstovni odgovor dodamo key
+ if ($crossVariabla2['type'] !== 't' ) {
+ if ($crossVariabla2['vr_id'] == null) {
+ $variabla .= ' ( '.$ckey2.' )';
+ } else {
+ $variabla .= ' ( '.$crossVariabla2['vr_id'].' )';
+ }
+ }
+ $this->pdf->MultiCell(80, 7, $this->encodeText($variabla), 1, 'C', 0, 0, 0 ,0, true);
+
+ # celice z vsebino
+ for ($i = 0; $i < $cols; $i++) {
+
+ $this->pdf->MultiCell($singleWidth, 7, $this->encodeText($this->meansClass->formatNumber($_means[$i]['result'][$ckey2], SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_RESIDUAL'))), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell($singleWidth, 7, $this->encodeText((int)$_means[$i]['sumaVrstica'][$ckey2]), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ $this->pdf->MultiCell(1, 7, $this->encodeText(''), 0, 'C', 0, 1, 0 ,0, true);
+ }
+ }
+
+ // SKUPAJ
+ $this->pdf->MultiCell(80, 7, $this->encodeText($lang['srv_means_label3']), 1, 'C', 0, 0, 0 ,0, true);
+
+ for ($i = 0; $i < $cols; $i++) {
+
+ $this->pdf->MultiCell($singleWidth, 7, $this->encodeText($this->meansClass->formatNumber($_means[$i]['sumaMeans'], SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_RESIDUAL'))), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell($singleWidth, 7, $this->encodeText((int)$_means[$i]['sumaSkupna']), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ $this->pdf->MultiCell(1, 7, $this->encodeText(''), 0, 'C', 0, 1, 0 ,0, true);
+ }
+
+ function displayChart($counter){
+ global $lang;
+
+ $variables1 = $this->meanData1;
+ $variables2 = $this->meanData2;
+
+ $pos1 = floor($counter / count($variables2));
+ $pos2 = $counter % count($variables2);
+
+ $chartID = implode('_', $variables1[$pos1]).'_'.implode('_', $variables2[$pos2]);
+ $chartID .= '_counter_'.$counter;
+
+
+ $settings = $this->sessionData['mean_charts'][$chartID];
+ $imgName = $settings['name'];
+
+ $size = getimagesize('pChart/Cache/'.$imgName);
+ $height = $size[1] / 4;
+
+ if($this->pdf->getY() + $height > 250)
+ {
+ $this->pdf->AddPage();
+ }
+ else
+ $this->pdf->setY($this->pdf->getY() + 15);
+
+
+ $this->pdf->Image('pChart/Cache/'.$imgName, $x='', $y='', $w=200, $h, $type='PNG', $link='', $align='N', $resize=true, $dpi=1600, $palign='C', $ismask=false, $imgmask=false, $border=0);
+
+
+ $this->pdf->setY($this->pdf->getY() + 5);
+ }
+
+ /*Skrajsa tekst in doda '...' na koncu*/
+ function snippet($text,$length=64,$tail="...")
+ {
+ $text = trim($text);
+ $txtl = strlen($text);
+ if($txtl > $length)
+ {
+ for($i=1;$text[$length-$i]!=" ";$i++)
+ {
+ if($i == $length)
+ {
+ return substr($text,0,$length) . $tail;
+ }
+ }
+ $text = substr($text,0,$length-$i+1) . $tail;
+ }
+ return $text;
+ }
+
+ function drawLine()
+ {
+ $cy = $this->pdf->getY();
+ $this->pdf->Line(15, $cy , 195, $cy , $this->currentStyle);
+ }
+
+ function setUserId($usrId) {$this->anketa['uid'] = $usrId;}
+ function getUserId() {return ($this->anketa['uid'])?$this->anketa['uid']:false;}
+
+ function formatNumber($value,$digit=0,$sufix="")
+ {
+ if ( $value <> 0 && $value != null )
+ $result = round($value,$digit);
+ else
+ $result = "0";
+ $result = number_format($result, $digit, ',', '.').$sufix;
+
+ return $result;
+ }
+
+ function getCellHeight($string, $width){
+
+ $this->pdf->startTransaction();
+ // get the number of lines calling you method
+ $linecount = $this->pdf->MultiCell($width, 0, $string, 0, 'L', 0, 0, '', '', true, 0, false, true, 0);
+ // restore previous object
+ $this->pdf = $this->pdf->rollbackTransaction();
+
+ $height = ($linecount <= 1) ? 4.7 : $linecount * ($this->pdf->getFontSize() * $this->pdf->getCellHeightRatio()) + 2;
+
+ return $height;
+ }
+
+}
+
+?> \ No newline at end of file
diff --git a/admin/exportclases/class.pdfIzvozAnalizaMultiCrosstab.php b/admin/exportclases/class.pdfIzvozAnalizaMultiCrosstab.php
new file mode 100644
index 0000000..0ede56b
--- /dev/null
+++ b/admin/exportclases/class.pdfIzvozAnalizaMultiCrosstab.php
@@ -0,0 +1,1355 @@
+<?php
+
+ global $site_path;
+
+ include_once('../../function.php');
+ include_once('../survey/definition.php');
+ include_once('../exportclases/class.pdfIzvozAnalizaFunctions.php');
+ require_once('../exportclases/class.enka.pdf.php');
+
+ define("ALLOW_HIDE_ZERRO_REGULAR", false); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za navadne odgovore
+ define("ALLOW_HIDE_ZERRO_MISSING", true); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za missinge
+
+ define("NUM_DIGIT_AVERAGE", 2, true); // stevilo digitalnih mest za povprecje
+ define("NUM_DIGIT_DEVIATION", 2, true); // stevilo digitalnih mest za povprecje
+
+ define("M_ANALIZA_DESCRIPTOR", "descriptor", true);
+ define("M_ANALIZA_FREQUENCY", "frequency", true);
+
+ define("FNT_FREESERIF", "freeserif", true);
+ define("FNT_FREESANS", "freesans", true);
+ define("FNT_HELVETICA", "helvetica", true);
+
+ define("FNT_MAIN_TEXT", FNT_FREESANS, true);
+ define("FNT_QUESTION_TEXT", FNT_FREESANS, true);
+ define("FNT_HEADER_TEXT", FNT_FREESANS, true);
+
+ define("FNT_MAIN_SIZE", 10, true);
+ define("FNT_QUESTION_SIZE", 9, true);
+ define("FNT_HEADER_SIZE", 10, true);
+
+ define("RADIO_BTN_SIZE", 3, true);
+ define("CHCK_BTN_SIZE", 3, true);
+ define("LINE_BREAK", 6, true);
+
+ define ('PDF_MARGIN_HEADER', 8);
+ define ('PDF_MARGIN_FOOTER', 12);
+ define ('PDF_MARGIN_TOP', 18);
+ define ('PDF_MARGIN_BOTTOM', 18);
+ define ('PDF_MARGIN_LEFT', 15);
+ define ('PDF_MARGIN_RIGHT', 15);
+
+
+/** Class za generacijo pdf-a
+ *
+ * @desc: po novem je potrebno form elemente generirati ro�no kot slike
+ *
+ */
+class PdfIzvozAnalizaMultiCrosstab {
+
+ var $anketa;// = array(); // trenutna anketa
+
+ var $pi=array('canCreate'=>false); // za shrambo parametrov in sporocil
+ var $pdf;
+ var $currentStyle;
+ var $db_table = '';
+
+ public $multiCrosstabClass = null; // crosstab class
+
+ private $cellWidth = 1; // sirina celice s podatki
+ private $cellHeight = 1; // visina celice s podadtki
+ private $cellSpan = 1; // stevilo vrstic v celici s podatki
+
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null){
+ global $site_path;
+ global $global_user_id;
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) ){
+ $this->anketa['id'] = $anketa;
+
+ // create new PDF document
+ $this->pdf = new enka_TCPDF('L', PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
+ }
+ else{
+ $this->pi['msg'] = "Anketa ni izbrana!";
+ $this->pi['canCreate'] = false;
+
+ return false;
+ }
+ $_GET['a'] = A_ANALYSIS;
+
+
+ //ustvarimo multicrosstabs objekt
+ $this->multiCrosstabClass = new SurveyMultiCrosstabs($anketa);
+
+ if ( SurveyInfo::getInstance()->SurveyInit($this->anketa['id']) && $this->init()){
+ $this->anketa['uid'] = $global_user_id;
+
+ SurveyUserSetting::getInstance()->Init($this->anketa['id'], $this->anketa['uid']);
+ SurveyDataSettingProfiles::Init($this->anketa['id']);
+ }
+ else
+ return false;
+
+ // ce smo prisli do tu je vse ok
+ $this->pi['canCreate'] = true;
+
+ return true;
+ }
+
+ // SETTERS && GETTERS
+ function checkCreate(){
+ return $this->pi['canCreate'];
+ }
+
+ function getFile($fileName){
+ //Close and output PDF document
+ ob_end_clean();
+ $this->pdf->Output($fileName, 'I');
+ }
+
+
+ function init(){
+ global $lang;
+
+ // array used to define the language and charset of the pdf file to be generated
+ $language_meta = Array();
+ $language_meta['a_meta_charset'] = 'UTF-8';
+ $language_meta['a_meta_dir'] = 'ltr';
+ $language_meta['a_meta_language'] = 'sl';
+ $language_meta['w_page'] = $lang['page'];
+
+ //set some language-dependent strings
+ $this->pdf->setLanguageArray($language_meta);
+
+ //set margins
+ $this->pdf->setPrintHeaderFirstPage(true);
+ $this->pdf->setPrintFooterFirstPage(true);
+ $this->pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
+ $this->pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
+ $this->pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
+
+ // set header and footer fonts
+ $this->pdf->setHeaderFont(Array(FNT_HEADER_TEXT, "I", FNT_HEADER_SIZE));
+ $this->pdf->setFooterFont(Array(FNT_HEADER_TEXT, 'I', FNT_HEADER_SIZE));
+
+
+ // set document information
+ $this->pdf->SetAuthor('An Order Form');
+ $this->pdf->SetTitle('An Order');
+ $this->pdf->SetSubject('An Order');
+
+ // set default header data
+ $this->pdf->SetHeaderData(null, null, "www.1ka.si", $this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()));
+
+ //set auto page breaks
+ $this->pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
+
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', FNT_MAIN_SIZE);
+ //set image scale factor
+ $this->pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
+
+ return true;
+ }
+
+
+ function createPdf(){
+ global $site_path;
+ global $lang;
+
+ $this->pdf->AddPage();
+
+ $this->pdf->setFont('','B','11');
+ $this->pdf->MultiCell(150, 5, $lang['srv_multicrosstabs'], 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->ln(5);
+
+ $this->pdf->setDrawColor(128, 128, 128);
+ $this->pdf->setFont('','','6');
+
+ // Napolnimo variable s katerimi lahko operiramo
+ $this->multiCrosstabClass->getVariableList();
+
+ // Izris tabele
+ $this->displayTable();
+
+ // Izris legende
+ $this->displayLegend();
+ }
+
+ public function displayTable(){
+ global $site_path;
+ global $lang;
+
+ // Napolnimo variable ki so ze izbrane
+ $this->multiCrosstabClass->getSelectedVars();
+
+
+ // Izpisemo naslov tabele
+ $this->pdf->setFont('','B','10');
+ $this->pdf->MultiCell(150, 5, $this->encodeText($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['title']), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->ln(5);
+ $this->pdf->setFont('','','6');
+
+
+ // TABELA
+
+ // Najprej izracunamo dimenzije
+ $lineHeight = 6;
+ $fullWidth = 270;
+
+ if($this->multiCrosstabClass->rowSpan == 0)
+ $colspan = 1;
+ elseif(!$this->multiCrosstabClass->rowLevel2)
+ $colspan = 2;
+ else
+ $colspan = 4;
+
+ $metaWidth = $colspan * 35;
+ $dataWidth = $fullWidth - $metaWidth;
+
+ $dataCellSpan = 0;
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['numerus'] == 1)
+ $dataCellSpan++;
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['percent'] == 1)
+ $dataCellSpan++;
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['avgVar'] != '')
+ $dataCellSpan++;
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['delezVar'] != '')
+ $dataCellSpan++;
+
+ $this->cellSpan = ($dataCellSpan == 0) ? 1 : $dataCellSpan;
+ $this->cellHeight = ($this->cellSpan > 1) ? $this->cellSpan * 5 : $lineHeight;
+
+
+ if($this->multiCrosstabClass->colSpan == 0){
+ $this->cellWidth = $dataWidth/2;
+ $this->pdf->MultiCell($metaWidth, 0, '', 'B', 'L', 0, 1, 0 ,0, true);
+ }
+ // Imamo 2 nivoja
+ elseif($this->multiCrosstabClass->colLevel2){
+
+ $this->cellWidth = $dataWidth / $this->multiCrosstabClass->colSpan;
+
+ // Izrisemo VERTIKALNO izbrane spremenljivkec - 1. vrstica
+ $this->pdf->MultiCell($metaWidth, $lineHeight, '', 0, 'L', 0, 0, 0 ,0, true);
+ if(count($this->multiCrosstabClass->selectedVars['ver'])){
+ foreach($this->multiCrosstabClass->selectedVars['ver'] as $var){
+
+ // Ce imamo tudi 2. nivo pri doloceni spremenljivki
+ if(count($var['sub']) > 0){
+ $rowspan = 1;
+ $width = $this->cellWidth * count($this->multiCrosstabClass->variablesList[$var['sub'][0]['spr']]['options']) * count($this->multiCrosstabClass->variablesList[$var['spr']]['options']);
+ }
+ else{
+ $rowspan = 2;
+ $width = $this->cellWidth * count($this->multiCrosstabClass->variablesList[$var['spr']]['options']);
+ }
+
+ $this->pdf->MultiCell($width, $lineHeight*$rowspan, $this->snippet($this->multiCrosstabClass->variablesList[$var['spr']]['naslov'], 25), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ }
+ $this->pdf->MultiCell(1, $lineHeight, '', 0, 'L', 0, 1, 0 ,0, true);
+
+ // Izrisemo VARIABLE za spremenljivko - 2. vrstica
+ $this->pdf->MultiCell($metaWidth, $lineHeight, '', 0, 'L', 0, 0, 0 ,0, true);
+ if(count($this->multiCrosstabClass->selectedVars['ver'])){
+ foreach($this->multiCrosstabClass->selectedVars['ver'] as $var){
+
+ // Ce imamo tudi 2. nivo pri doloceni spremenljivki
+ if(count($var['sub']) > 0){
+ $width = $this->cellWidth * count($this->multiCrosstabClass->variablesList[$var['sub'][0]['spr']]['options']);
+ foreach($this->multiCrosstabClass->variablesList[$var['spr']]['options'] as $option){
+ $this->pdf->MultiCell($width, $lineHeight, $this->snippet($option, 25), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ }
+ else{
+ $this->pdf->setXY($this->pdf->getX(), $this->pdf->getY() + $lineHeight);
+ foreach($this->multiCrosstabClass->variablesList[$var['spr']]['options'] as $option){
+ $this->pdf->MultiCell($this->cellWidth, $lineHeight*2, $this->snippet($option, 25), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ $this->pdf->setXY($this->pdf->getX(), $this->pdf->getY() - $lineHeight);
+ }
+ }
+ }
+ $this->pdf->MultiCell(1, $lineHeight, '', 0, 'L', 0, 1, 0 ,0, true);
+
+ // Izris vrstic za 2. nivo - 3. in 4. vrstica
+ $this->pdf->MultiCell($metaWidth, $lineHeight, '', 0, 'L', 0, 0, 0 ,0, true);
+ if(count($this->multiCrosstabClass->selectedVars['ver'])){
+ foreach($this->multiCrosstabClass->selectedVars['ver'] as $parentVar){
+
+ // ce imamo childe na 2. nivoju
+ if(count($parentVar['sub']) > 0){
+ foreach($this->multiCrosstabClass->variablesList[$parentVar['spr']]['options'] as $option){
+ $width = $this->cellWidth * count($this->multiCrosstabClass->variablesList[$parentVar['sub'][0]['spr']]['options']);
+ foreach($parentVar['sub'] as $var){
+ $this->pdf->MultiCell($width, $lineHeight, $this->snippet($this->multiCrosstabClass->variablesList[$var['spr']]['naslov'], 25), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ }
+ }
+ else{
+ $this->pdf->MultiCell($this->cellWidth*count($this->multiCrosstabClass->variablesList[$parentVar['spr']]['options']), $lineHeight, '', 0, 'C', 0, 0, 0 ,0, true);
+ }
+ }
+ }
+ $this->pdf->MultiCell(1, $lineHeight, '', 0, 'L', 0, 1, 0 ,0, true);
+
+ $this->pdf->MultiCell($metaWidth, $lineHeight, '', 'B', 'L', 0, 0, 0 ,0, true);
+ if(count($this->multiCrosstabClass->selectedVars['ver'])){
+ foreach($this->multiCrosstabClass->selectedVars['ver'] as $parentVar){
+
+ // ce imamo childe na 2. nivoju
+ if(count($parentVar['sub']) > 0){
+ foreach($this->multiCrosstabClass->variablesList[$parentVar['spr']]['options'] as $option){
+ foreach($parentVar['sub'] as $var){
+ foreach($this->multiCrosstabClass->variablesList[$var['spr']]['options'] as $suboption){
+ $this->pdf->MultiCell($this->cellWidth, $lineHeight, $this->snippet($suboption, 25), 1, 'C', 0, 0, 0 ,0, true, $stretch=0, $ishtml=false, $autopadding=false, $maxh=0);
+ }
+ }
+ }
+ }
+ else{
+ $this->pdf->MultiCell($this->cellWidth*count($this->multiCrosstabClass->variablesList[$parentVar['spr']]['options']), $lineHeight, '', 0, 'C', 0, 0, 0 ,0, true);
+ }
+ }
+ }
+ $this->pdf->MultiCell(1, $lineHeight, '', 0, 'L', 0, 1, 0 ,0, true);
+ }
+ // Imamo samo 1 nivo
+ else{
+ // Izrisemo VERTIKALNO izbrane spremenljivkec - 1. vrstica
+
+ // Izracunamo sirine celic
+ $this->cellWidth = $dataWidth / $this->multiCrosstabClass->fullColSpan;
+
+ $this->pdf->MultiCell($metaWidth, $lineHeight, '', 0, 'C', 0, 0, 0 ,0, true);
+ if(count($this->multiCrosstabClass->selectedVars['ver'])){
+
+ foreach($this->multiCrosstabClass->selectedVars['ver'] as $var){
+
+ $sprWidth = count($this->multiCrosstabClass->variablesList[$var['spr']]['options']) * $this->cellWidth;
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['sums'] == 1 && !$this->multiCrosstabClass->rowLevel2)
+ $sprWidth += $this->cellWidth;
+
+ $this->pdf->MultiCell($sprWidth, $lineHeight, $this->snippet($this->multiCrosstabClass->variablesList[$var['spr']]['naslov'], 35), 1, 'C', 0, 0, 0 ,0, true);
+ }
+
+ $this->pdf->MultiCell(1, $lineHeight, '', 0, 'C', 0, 1, 0 ,0, true);
+ }
+ // Nimamo nobene vertikalne spremenljivke in 2 horizontalni
+ elseif($this->multiCrosstabClass->rowLevel2){
+ $this->pdf->MultiCell($dataWidth, $lineHeight, '', 0, 'C', 0, 0, 0 ,0, true);
+ }
+
+
+ // Izrisemo VARIABLE za spremenljivko - 2. vrstica
+ if(count($this->multiCrosstabClass->selectedVars['ver'])){
+
+ // Iracunamo visino najvisje celice
+ $cellHeight = $lineHeight;
+ foreach($this->multiCrosstabClass->selectedVars['ver'] as $var){
+
+ foreach($this->multiCrosstabClass->variablesList[$var['spr']]['options'] as $option){
+ $height = $this->getCellHeight($this->snippet($option, 25), $this->cellWidth);
+
+ $cellHeight = ($height > $cellHeight) ? $height : $cellHeight;
+ }
+ }
+
+ $this->pdf->MultiCell($metaWidth, $cellHeight, '', 'B', 'C', 0, 0, 0 ,0, true);
+
+ foreach($this->multiCrosstabClass->selectedVars['ver'] as $var){
+
+ // Loop cez variable spremenljivke
+ foreach($this->multiCrosstabClass->variablesList[$var['spr']]['options'] as $option){
+ $this->pdf->MultiCell($this->cellWidth, $cellHeight, $this->snippet($option, 25), 1, 'C', 0, 0, 0 ,0, true);
+ }
+
+ // Suma (ce jo imamo vklopljeno)
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['sums'] == 1 && !$this->multiCrosstabClass->rowLevel2){
+ $this->pdf->MultiCell($this->cellWidth, $cellHeight, $lang['srv_analiza_crosstab_skupaj'], 1, 'C', 0, 0, 0 ,0, true);
+ }
+ }
+ $this->pdf->MultiCell(1, $cellHeight, '', 0, 'C', 0, 1, 0 ,0, true);
+ }
+ }
+
+
+
+ // Izrisemo HORIZONTALNO izbrane variable
+ if(count($this->multiCrosstabClass->selectedVars['hor'])){
+
+ // Imamo 2 nivoja vrstic
+ if($this->multiCrosstabClass->rowLevel2){
+ foreach($this->multiCrosstabClass->selectedVars['hor'] as $parentVar){
+
+ $cnt = 0;
+ $order0 = 0;
+
+ foreach($this->multiCrosstabClass->variablesList[$parentVar['spr']]['options'] as $option){
+
+ $cnt2 = 0;
+
+ // ce imamo childe na 2. nivoju
+ if(count($parentVar['sub']) > 0){
+
+ $width = $metaWidth / 4;
+
+ foreach($parentVar['sub'] as $var){
+
+ $cnt3 = 0;
+
+ foreach($this->multiCrosstabClass->variablesList[$var['spr']]['options'] as $suboption){
+
+ // Spodnji border pri zadnjem
+ if($cnt == count($this->multiCrosstabClass->variablesList[$parentVar['spr']]['options']) * count($this->multiCrosstabClass->variablesList[$var['spr']]['options']) - 1)
+ $border1 = 'B';
+ else
+ $border1 = '';
+ if($cnt2 == count($this->multiCrosstabClass->variablesList[$var['spr']]['options'])-1)
+ $border2 = 'B';
+ else
+ $border2 = '';
+
+ if($cnt == floor((count($this->multiCrosstabClass->variablesList[$parentVar['spr']]['options']) * count($this->multiCrosstabClass->variablesList[$var['spr']]['options'])) / 2)){
+ $this->pdf->MultiCell($width, $this->cellHeight, $this->snippet($this->multiCrosstabClass->variablesList[$parentVar['spr']]['naslov'], 25), 'LR', 'C', 0, 0, 0 ,0, true);
+ }
+ else{
+ $this->pdf->MultiCell($width, $this->cellHeight, '', 'LR'.$border1, 'C', 0, 0, 0 ,0, true);
+ }
+
+ // Variabla
+ if($cnt2 == floor(count($this->multiCrosstabClass->variablesList[$var['spr']]['options'])/2)){
+ $this->pdf->MultiCell($width, $this->cellHeight, $this->snippet($option, 25), 'LR', 'C', 0, 0, 0 ,0, true);
+ }
+ else{
+ $this->pdf->MultiCell($width, $this->cellHeight, '', 'LR'.$border2, 'C', 0, 0, 0 ,0, true);
+ }
+
+ if($cnt3 == floor(count($this->multiCrosstabClass->variablesList[$var['spr']]['options'])/2)){
+ $this->pdf->MultiCell($width, $this->cellHeight, $this->snippet($this->multiCrosstabClass->variablesList[$var['spr']]['naslov'], 25), 'LR', 'C', 0, 0, 0 ,0, true);
+ }
+ else{
+ $this->pdf->MultiCell($width, $this->cellHeight, '', 'LR'.$border2, 'C', 0, 0, 0 ,0, true);
+ }
+
+ // Variabla 2
+ $this->pdf->MultiCell($width, $this->cellHeight, $this->snippet($suboption, 25), 1, 'C', 0, 0, 0 ,0, true);
+
+ // Celice s podatki
+ $this->displayDataCells($parentVar, $order0, $var, $cnt3);
+
+ $this->pdf->MultiCell(1, $this->cellHeight, '', 0, 'C', 0, 1, 0 ,0, true);
+
+ $cnt++;
+ $cnt2++;
+ $cnt3++;
+ }
+
+ $order0++;
+
+ // Izrisemo se sumo ce je vklopljena
+ /*if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['sums'] == 1 && count($this->multiCrosstabClass->selectedVars['ver']) == 0){
+
+ $output .= '<td align="center">'.$lang['srv_analiza_crosstab_skupaj'].'</td>';
+
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$parentVar['spr'].'-'.$var['spr']];
+
+ $keys1 = array_keys($crosstabs['options2']);
+ $key = ceil($cnt / (count($this->multiCrosstabClass->variablesList[$var['spr']]['options'])*count($parentVar['sub']))) - 1;
+ $val = $keys1[$key];
+
+ $this->displaySumsCell($parentVar, $var, $val, $orientation=0);
+ }*/
+ }
+ }
+ else{
+ $width = $metaWidth / 2;
+
+ // Spodnji border pri zadnjem
+ if($cnt == count($this->multiCrosstabClass->variablesList[$parentVar['spr']]['options']) - 1)
+ $border1 = 'B';
+ else
+ $border1 = '';
+
+ if($cnt == floor(count($this->multiCrosstabClass->variablesList[$parentVar['spr']]['options'])/2)){
+ $this->pdf->MultiCell($width, $this->cellHeight, $this->snippet($this->multiCrosstabClass->variablesList[$parentVar['spr']]['naslov'], 25), 'LR', 'C', 0, 0, 0 ,0, true);
+ }
+ else{
+ $this->pdf->MultiCell($width, $this->cellHeight, '', 'LR'.$border1, 'C', 0, 0, 0 ,0, true);
+ }
+
+ // Variabla
+ $this->pdf->MultiCell($width, $this->cellHeight, $this->snippet($option, 25), 1, 'C', 0, 0, 0 ,0, true);
+
+ // Celice s podatki
+ $this->displayDataCells($parentVar, $cnt);
+
+ $this->pdf->MultiCell(1, $this->cellHeight, '', 0, 'C', 0, 1, 0 ,0, true);
+
+ $cnt++;
+ }
+ }
+ }
+ }
+ // Imamo samo 1 nivo vrstic
+ else{
+ $width = $metaWidth / 2;
+
+ foreach($this->multiCrosstabClass->selectedVars['hor'] as $var){
+
+ // Ce imamo sumo
+ $suma = ($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['sums'] == 1 && count($this->multiCrosstabClass->selectedVars['ver']) > 0 && !$this->multiCrosstabClass->colLevel2) ? true : false;
+
+ $cnt = 0;
+ foreach($this->multiCrosstabClass->variablesList[$var['spr']]['options'] as $option){
+
+ if($cnt == floor(count($this->multiCrosstabClass->variablesList[$var['spr']]['options']) / 2)){
+ $this->pdf->MultiCell($width, $this->cellHeight, $this->snippet($this->multiCrosstabClass->variablesList[$var['spr']]['naslov'], 25), 'LR', 'C', 0, 0, 0 ,0, true);
+ }
+ elseif(($cnt == count($this->multiCrosstabClass->variablesList[$var['spr']]['options'])-1) && !$suma){
+ $this->pdf->MultiCell($width, $this->cellHeight, '', 'BLR', 'C', 0, 0, 0 ,0, true);
+ }
+ else{
+ $this->pdf->MultiCell($width, $this->cellHeight, '', 'LR', 'C', 0, 0, 0 ,0, true);
+ }
+
+ // Variabla
+ $this->pdf->MultiCell($width, $this->cellHeight, $this->snippet($option, 25), '1', 'C', 0, 0, 0 ,0, true);
+
+ // Celice s podatki
+ $this->displayDataCells($var, $cnt);
+
+
+ $this->pdf->MultiCell(1, $this->cellHeight, '', 0, 'C', 0, 1, 0 ,0, true);
+
+ $cnt++;
+ }
+
+ // Vrstica za sumo (ce jo imamo vklopljeno)
+ if($suma){
+ $this->pdf->MultiCell($width, $this->cellHeight, '', 'BLR', 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell($width, $this->cellHeight, $lang['srv_analiza_crosstab_skupaj'], '1', 'C', 0, 0, 0 ,0, true);
+
+ // Loop cez vse stolpce
+ foreach($this->multiCrosstabClass->selectedVars['ver'] as $spr2){
+
+ // Loop cez variable trenutnega stolpca
+ $cnt = 0;
+ foreach($this->multiCrosstabClass->variablesList[$spr2['spr']]['options'] as $var2){
+
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$var['spr'].'-'.$spr2['spr']];
+
+ $keys1 = array_keys($crosstabs['options1']);
+ $val = $keys1[$cnt];
+
+ $this->displaySumsCell($var, $spr2, $val, $orientation=1);
+
+ $cnt++;
+ }
+
+ // Krizanje navpicne in vodoravne sume
+ $this->displaySumsCell($var, $spr2, 0, $orientation=2);
+ }
+
+ $this->pdf->MultiCell(1, $this->cellHeight, '', 0, 'C', 0, 1, 0 ,0, true);
+ }
+ }
+ }
+ }
+ }
+
+ // Izpis celic v vrstici s podatki
+ function displayDataCells($spr1, $var1, $spr2='', $var2=''){
+
+ // Ce nimamo nobenega krizanja izpisemo prazne
+ if($spr2 == '' && $this->multiCrosstabClass->colSpan == 0){
+
+ for($i=0; $i<$this->multiCrosstabClass->colSpan; $i++){
+ //$this->pdf->MultiCell($width, $height, '', '1', 'C', 0, 0, 0 ,0, true);
+ }
+
+ $this->pdf->MultiCell($dataWidth, $this->cellHeight, '', 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(1, $this->cellHeight, '', 0, 'C', 0, 1, 0 ,0, true);
+ }
+
+ // Ce nimamo stolpcev - krizanje dveh vrstic
+ elseif($spr2 != '' && $this->multiCrosstabClass->colSpan == 0){
+
+ $spr1_temp = explode('-', $spr1['spr']);
+ $grd = $this->multiCrosstabClass->variablesList[$spr1['spr']]['grd_id'];
+ $variabla1 = array('seq' => $spr1_temp[1], 'spr' => $spr1_temp[0], 'grd' => $grd);
+
+ $spr2_temp = explode('-', $spr2['spr']);
+ $grd = $this->multiCrosstabClass->variablesList[$spr2['spr']]['grd_id'];
+ $variabla2 = array('seq' => $spr2_temp[1], 'spr' => $spr2_temp[0], 'grd' => $grd);
+
+ // Ce se nimamo izracunanih rezultatov jih izracunamo
+ if(isset($this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr']]))
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr']];
+ else{
+ $variables = array();
+ $variables[0] = array('seq' => $variabla1['seq'], 'spr' => $variabla1['spr'], 'grd' => $variabla1['grd']);
+ $variables[1] = array('seq' => $variabla2['seq'], 'spr' => $variabla2['spr'], 'grd' => $variabla2['grd']);
+
+ $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr']] = $this->multiCrosstabClass->createCrostabulation($variables);
+
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr']];
+ }
+
+ $keys1 = array_keys($crosstabs['options1']);
+ $val1 = $keys1[$var1];
+
+ $keys2 = array_keys($crosstabs['options2']);
+ $val2 = $keys2[$var2];
+
+ $crosstab = (isset($crosstabs['crosstab'][$val1][$val2])) ? $crosstabs['crosstab'][$val1][$val2] : 0;
+ $percent = ($crosstab > 0) ? $this->multiCrosstabClass->getCrossTabPercentage($crosstabs['sumaVrstica'][$val1], $crosstab) : 0;
+ $avg = (isset($crosstabs['avg'][$val1][$val2])) ? $crosstabs['avg'][$val1][$val2] : 0;
+ $delez = (isset($crosstabs['delez'][$val1][$val2])) ? $crosstabs['delez'][$val1][$val2] : 0;
+
+ $this->displayDataCell($crosstab, $percent, $avg, $delez);
+ }
+
+ // Krizanje 1 vrstice in 1 stolpca
+ elseif($spr2 == '' && !$this->multiCrosstabClass->colLevel2){
+
+ // Loop cez vse stolpce
+ foreach($this->multiCrosstabClass->selectedVars['ver'] as $spr2){
+
+ $spr1_temp = explode('-', $spr1['spr']);
+ $grd = $this->multiCrosstabClass->variablesList[$spr1['spr']]['grd_id'];
+ $variabla1 = array('seq' => $spr1_temp[1], 'spr' => $spr1_temp[0], 'grd' => $grd);
+
+ $spr2_temp = explode('-', $spr2['spr']);
+ $grd = $this->multiCrosstabClass->variablesList[$spr2['spr']]['grd_id'];
+ $variabla2 = array('seq' => $spr2_temp[1], 'spr' => $spr2_temp[0], 'grd' => $grd);
+
+
+ // Ce se nimamo izracunanih rezultatov jih izracunamo
+ if(isset($this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr']]))
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr']];
+ else{
+ $variables = array();
+ $variables[0] = array('seq' => $variabla1['seq'], 'spr' => $variabla1['spr'], 'grd' => $variabla1['grd']);
+ $variables[1] = array('seq' => $variabla2['seq'], 'spr' => $variabla2['spr'], 'grd' => $variabla2['grd']);
+
+ $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr']] = $this->multiCrosstabClass->createCrostabulation($variables);
+
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr']];
+ }
+
+ $keys1 = array_keys($crosstabs['options1']);
+ $val1 = $keys1[$var1];
+
+ // Loop cez variable trenutnega stolpca
+ $cnt = 0;
+ foreach($this->multiCrosstabClass->variablesList[$spr2['spr']]['options'] as $var2){
+
+ $keys2 = array_keys($crosstabs['options2']);
+ $val2 = $keys2[$cnt];
+
+ $crosstab = (isset($crosstabs['crosstab'][$val1][$val2])) ? $crosstabs['crosstab'][$val1][$val2] : 0;
+ $percent = ($crosstab > 0) ? $this->multiCrosstabClass->getCrossTabPercentage($crosstabs['sumaVrstica'][$val1], $crosstab) : 0;
+ $avg = (isset($crosstabs['avg'][$val1][$val2])) ? $crosstabs['avg'][$val1][$val2] : 0;
+ $delez = (isset($crosstabs['delez'][$val1][$val2])) ? $crosstabs['delez'][$val1][$val2] : 0;
+
+ $this->displayDataCell($crosstab, $percent, $avg, $delez);
+
+ $cnt++;
+ }
+
+ // Suma (ce jo imamo vklopljeno)
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['sums'] == 1 && !$this->multiCrosstabClass->rowLevel2){
+ $this->displaySumsCell($spr1, $spr2, $val1, $orientation=0);
+ }
+ }
+ }
+
+ // Izpisemo vecnivojske podatke (krizanje 3 ali 4 spremenljivk)
+ else{
+
+ // Nastavimo 1. vrsticno variablo
+ $spr1_temp = explode('-', $spr1['spr']);
+ $grd = $this->multiCrosstabClass->variablesList[$spr1['spr']]['grd_id'];
+ $variabla1 = array('seq' => $spr1_temp[1], 'spr' => $spr1_temp[0], 'grd' => $grd);
+
+ // Krizanje 2 vrstic in 1 stolpca
+ if(!$this->multiCrosstabClass->colLevel2){
+
+ // Nastavimo 2. vrsticno variablo
+ $spr2_temp = explode('-', $spr2['spr']);
+ $grd = $this->multiCrosstabClass->variablesList[$spr2['spr']]['grd_id'];
+ $variabla2 = array('seq' => $spr2_temp[1], 'spr' => $spr2_temp[0], 'grd' => $grd);
+
+ // Loop cez vse stolpce
+ foreach($this->multiCrosstabClass->selectedVars['ver'] as $spr3){
+
+ $spr3_temp = explode('-', $spr3['spr']);
+ $grd = $this->multiCrosstabClass->variablesList[$spr3['spr']]['grd_id'];
+ $variabla3 = array('seq' => $spr3_temp[1], 'spr' => $spr3_temp[0], 'grd' => $grd);
+
+ // Ce se nimamo izracunanih rezultatov jih izracunamo
+ if(isset($this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']]))
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']];
+ else{
+ $variables = array();
+ $variables[0] = array('seq' => $variabla1['seq'], 'spr' => $variabla1['spr'], 'grd' => $variabla1['grd']);
+ $variables[1] = array('seq' => $variabla2['seq'], 'spr' => $variabla2['spr'], 'grd' => $variabla2['grd']);
+ $variables[2] = array('seq' => $variabla3['seq'], 'spr' => $variabla3['spr'], 'grd' => $variabla3['grd']);
+
+ $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']] = $this->multiCrosstabClass->createCrostabulation($variables);
+
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']];
+ }
+
+ $keys1 = array_keys($crosstabs['options1']);
+ $val1 = $keys1[$var1];
+
+ $keys2 = array_keys($crosstabs['options2']);
+ $val2 = $keys2[$var2];
+
+ // Loop cez variable trenutnega stolpca
+ $cnt = 0;
+ foreach($this->multiCrosstabClass->variablesList[$spr3['spr']]['options'] as $var3){
+
+ $keys3 = array_keys($crosstabs['options3']);
+ $val3 = $keys3[$cnt];
+
+ $crosstab = (isset($crosstabs['crosstab'][$val1][$val2][$val3])) ? $crosstabs['crosstab'][$val1][$val2][$val3] : 0;
+ $percent = ($crosstab > 0) ? $this->multiCrosstabClass->getCrossTabPercentage($crosstabs['sumaVrstica'][$val1], $crosstab) : 0;
+ $avg = (isset($crosstabs['avg'][$val1][$val2][$val3])) ? $crosstabs['avg'][$val1][$val2][$val3] : 0;
+ $delez = (isset($crosstabs['delez'][$val1][$val2][$val3])) ? $crosstabs['delez'][$val1][$val2][$val3] : 0;
+
+ $this->displayDataCell($crosstab, $percent, $avg, $delez);
+
+ $cnt++;
+ }
+ }
+ }
+
+ // Krizanje 1 vrstice in 2 stolpcev
+ elseif($spr2 == ''){
+
+ // Loop cez vse stolpce 1. navpicne spremenljivke
+ foreach($this->multiCrosstabClass->selectedVars['ver'] as $spr2){
+
+ $spr2_temp = explode('-', $spr2['spr']);
+ $grd = $this->multiCrosstabClass->variablesList[$spr2['spr']]['grd_id'];
+ $variabla2 = array('seq' => $spr2_temp[1], 'spr' => $spr2_temp[0], 'grd' => $grd);
+
+ // Loop cez variable 1. navpicne spremnljivke
+ $cnt2 = 0;
+ foreach($this->multiCrosstabClass->variablesList[$spr2['spr']]['options'] as $var2){
+
+ // Loop cez vse navpicne spremenljivke 2. nivoja - ce obstajajo
+ if(count($spr2['sub']) > 0){
+ foreach($spr2['sub'] as $spr3){
+
+ // Nastavimo navpicno spremenljivko 2. nivoja
+ $spr3_temp = explode('-', $spr3['spr']);
+ $grd = $this->multiCrosstabClass->variablesList[$spr3['spr']]['grd_id'];
+ $variabla3 = array('seq' => $spr3_temp[1], 'spr' => $spr3_temp[0], 'grd' => $grd);
+
+ // Ce se nimamo izracunanih rezultatov jih izracunamo
+ if(isset($this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']]))
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']];
+ else{
+ $variables = array();
+ $variables[0] = array('seq' => $variabla1['seq'], 'spr' => $variabla1['spr'], 'grd' => $variabla1['grd']);
+ $variables[1] = array('seq' => $variabla2['seq'], 'spr' => $variabla2['spr'], 'grd' => $variabla2['grd']);
+ $variables[2] = array('seq' => $variabla3['seq'], 'spr' => $variabla3['spr'], 'grd' => $variabla3['grd']);
+
+ $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']] = $this->multiCrosstabClass->createCrostabulation($variables);
+
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']];
+ }
+
+ $keys1 = array_keys($crosstabs['options1']);
+ $val1 = $keys1[$var1];
+
+ $keys2 = array_keys($crosstabs['options2']);
+ $val2 = $keys2[$cnt2];
+
+ // Loop cez variable spremenljivke 2. nivoja
+ $cnt3 = 0;
+ foreach($this->multiCrosstabClass->variablesList[$spr3['spr']]['options'] as $var3){
+
+ $keys3 = array_keys($crosstabs['options3']);
+ $val3 = $keys3[$cnt3];
+
+ $crosstab = (isset($crosstabs['crosstab'][$val1][$val2][$val3])) ? $crosstabs['crosstab'][$val1][$val2][$val3] : 0;
+ $percent = ($crosstab > 0) ? $this->multiCrosstabClass->getCrossTabPercentage($crosstabs['sumaVrstica'][$val1], $crosstab) : 0;
+ $avg = (isset($crosstabs['avg'][$val1][$val2][$val3])) ? $crosstabs['avg'][$val1][$val2][$val3] : 0;
+ $delez = (isset($crosstabs['delez'][$val1][$val2][$val3])) ? $crosstabs['delez'][$val1][$val2][$val3] : 0;
+
+ $this->displayDataCell($crosstab, $percent, $avg, $delez);
+
+ $cnt3++;
+ }
+ }
+ }
+ // 1 nivojska spremenljivka v stolpcu
+ else{
+ // Ce se nimamo izracunanih rezultatov jih izracunamo
+ if(isset($this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr']]))
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr']];
+ else{
+ $variables = array();
+ $variables[0] = array('seq' => $variabla1['seq'], 'spr' => $variabla1['spr'], 'grd' => $variabla1['grd']);
+ $variables[1] = array('seq' => $variabla2['seq'], 'spr' => $variabla2['spr'], 'grd' => $variabla2['grd']);
+
+ $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr']] = $this->multiCrosstabClass->createCrostabulation($variables);
+
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr']];
+ }
+
+ $keys1 = array_keys($crosstabs['options1']);
+ $val1 = $keys1[$var1];
+
+ $keys2 = array_keys($crosstabs['options2']);
+ $val2 = $keys2[$cnt2];
+
+ $crosstab = (isset($crosstabs['crosstab'][$val1][$val2])) ? $crosstabs['crosstab'][$val1][$val2] : 0;
+ $percent = ($crosstab > 0) ? $this->multiCrosstabClass->getCrossTabPercentage($crosstabs['sumaVrstica'][$val1], $crosstab) : 0;
+ $avg = (isset($crosstabs['avg'][$val1][$val2])) ? $crosstabs['avg'][$val1][$val2] : 0;
+ $delez = (isset($crosstabs['delez'][$val1][$val2])) ? $crosstabs['delez'][$val1][$val2] : 0;
+
+ $this->displayDataCell($crosstab, $percent, $avg, $delez);
+ }
+
+ $cnt2++;
+ }
+ }
+ }
+
+
+
+ // Krizanje 2 vrstic in 2 stolpcev
+ else{
+
+ // Nastavimo 2. vrsticno variablo
+ $spr2_temp = explode('-', $spr2['spr']);
+ $grd = $this->multiCrosstabClass->variablesList[$spr2['spr']]['grd_id'];
+ $variabla2 = array('seq' => $spr2_temp[1], 'spr' => $spr2_temp[0], 'grd' => $grd);
+
+ // Loop cez vse stolpce 1. navpicne spremenljivke
+ foreach($this->multiCrosstabClass->selectedVars['ver'] as $spr3){
+
+ $spr3_temp = explode('-', $spr3['spr']);
+ $grd = $this->multiCrosstabClass->variablesList[$spr3['spr']]['grd_id'];
+ $variabla3 = array('seq' => $spr3_temp[1], 'spr' => $spr3_temp[0], 'grd' => $grd);
+
+ // Loop cez variable 1. navpicne spremnljivke
+ $cnt3 = 0;
+ foreach($this->multiCrosstabClass->variablesList[$spr3['spr']]['options'] as $var3){
+
+ // Loop cez vse navpicne spremenljivke 2. nivoja
+ if(count($spr3['sub']) > 0){
+ foreach($spr3['sub'] as $spr4){
+
+ // Nastavimo navpicno spremenljivko 2. nivoja
+ $spr4_temp = explode('-', $spr4['spr']);
+ $grd = $this->multiCrosstabClass->variablesList[$spr4['spr']]['grd_id'];
+ $variabla4 = array('seq' => $spr4_temp[1], 'spr' => $spr4_temp[0], 'grd' => $grd);
+
+ // Ce se nimamo izracunanih rezultatov jih izracunamo
+ if(isset($this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr'].'-'.$spr4['spr']]))
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr'].'-'.$spr4['spr']];
+ else{
+ $variables = array();
+ $variables[0] = array('seq' => $variabla1['seq'], 'spr' => $variabla1['spr'], 'grd' => $variabla1['grd']);
+ $variables[1] = array('seq' => $variabla2['seq'], 'spr' => $variabla2['spr'], 'grd' => $variabla2['grd']);
+ $variables[2] = array('seq' => $variabla3['seq'], 'spr' => $variabla3['spr'], 'grd' => $variabla3['grd']);
+ $variables[3] = array('seq' => $variabla4['seq'], 'spr' => $variabla4['spr'], 'grd' => $variabla4['grd']);
+
+ $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr'].'-'.$spr4['spr']] = $this->multiCrosstabClass->createCrostabulation($variables);
+
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr'].'-'.$spr4['spr']];
+ }
+
+ $keys1 = array_keys($crosstabs['options1']);
+ $val1 = $keys1[$var1];
+
+ $keys2 = array_keys($crosstabs['options2']);
+ $val2 = $keys2[$var2];
+
+ $keys3 = array_keys($crosstabs['options3']);
+ $val3 = $keys3[$cnt3];
+
+ // Loop cez variable spremenljivke 2. nivoja
+ $cnt4 = 0;
+ foreach($this->multiCrosstabClass->variablesList[$spr4['spr']]['options'] as $var4){
+
+ $keys4 = array_keys($crosstabs['options4']);
+ $val4 = $keys4[$cnt4];
+
+ $crosstab = (isset($crosstabs['crosstab'][$val1][$val2][$val3][$val4])) ? $crosstabs['crosstab'][$val1][$val2][$val3][$val4] : 0;
+ $percent = ($crosstab > 0) ? $this->multiCrosstabClass->getCrossTabPercentage($crosstabs['sumaVrstica'][$val1], $crosstab) : 0;
+ $avg = (isset($crosstabs['avg'][$val1][$val2][$val3][$val4])) ? $crosstabs['avg'][$val1][$val2][$val3][$val4] : 0;
+ $delez = (isset($crosstabs['delez'][$val1][$val2][$val3][$val4])) ? $crosstabs['delez'][$val1][$val2][$val3][$val4] : 0;
+
+ $this->displayDataCell($crosstab, $percent, $avg, $delez);
+
+ $cnt4++;
+ }
+ }
+ }
+ // 1 nivo navpicne spremenljivke
+ else{
+ // Ce se nimamo izracunanih rezultatov jih izracunamo
+ if(isset($this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']]))
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']];
+ else{
+ $variables = array();
+ $variables[0] = array('seq' => $variabla1['seq'], 'spr' => $variabla1['spr'], 'grd' => $variabla1['grd']);
+ $variables[1] = array('seq' => $variabla2['seq'], 'spr' => $variabla2['spr'], 'grd' => $variabla2['grd']);
+ $variables[2] = array('seq' => $variabla3['seq'], 'spr' => $variabla3['spr'], 'grd' => $variabla3['grd']);
+
+ $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']] = $this->multiCrosstabClass->createCrostabulation($variables);
+
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']];
+ }
+
+ $keys1 = array_keys($crosstabs['options1']);
+ $val1 = $keys1[$var1];
+
+ $keys2 = array_keys($crosstabs['options2']);
+ $val2 = $keys2[$var2];
+
+ $keys3 = array_keys($crosstabs['options3']);
+ $val3 = $keys3[$cnt3];
+
+ $crosstab = (isset($crosstabs['crosstab'][$val1][$val2][$val3])) ? $crosstabs['crosstab'][$val1][$val2][$val3] : 0;
+ $percent = ($crosstab > 0) ? $this->multiCrosstabClass->getCrossTabPercentage($crosstabs['sumaVrstica'][$val1], $crosstab) : 0;
+ $avg = (isset($crosstabs['avg'][$val1][$val2][$val3])) ? $crosstabs['avg'][$val1][$val2][$val3] : 0;
+ $delez = (isset($crosstabs['delez'][$val1][$val2][$val3])) ? $crosstabs['delez'][$val1][$val2][$val3] : 0;
+
+ $this->displayDataCell($crosstab, $percent, $avg, $delez);
+ }
+
+ $cnt3++;
+ }
+ }
+ }
+ }
+ }
+
+ // Izpis celic v vrstici s sumami ($orientation 0->vrstica, 1->stolpec, 2->skupaj)
+ function displaySumsCell($spr1, $spr2, $val, $orientation){
+
+ $startX = $this->pdf->getX();
+ $startY = $this->pdf->getY();
+
+ // Nastavimo visino posamezne vrstice
+ $cellSpan = 0;
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['numerus'] == 1)
+ $cellSpan++;
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['percent'] == 1)
+ $cellSpan++;
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['avgVar'] != '')
+ $cellSpan++;
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['delezVar'] != '')
+ $cellSpan++;
+ $cellSpan = ($cellSpan > 0) ? $cellSpan : 1;
+ $lineHeight = $this->cellHeight / $cellSpan;
+
+ // Nastavimo barvo texta
+ $this->pdf->SetTextColor(160, 0, 0);
+ $this->pdf->setFont('','B','6');
+
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr']];
+
+ // Celica s skupno sumo
+ if($orientation == 2){
+
+ // Numerus
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['numerus'] == 1){
+ $this->pdf->MultiCell($this->cellWidth, $lineHeight, $crosstabs['sumaSkupna'], 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->setXY($this->pdf->getX() - $this->cellWidth, $this->pdf->getY() + $lineHeight);
+ }
+
+ // Procenti
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['percent'] == 1){
+ $this->pdf->MultiCell($this->cellWidth, $lineHeight, $this->formatNumber(100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->setXY($this->pdf->getX() - $this->cellWidth, $this->pdf->getY() + $lineHeight);
+ }
+
+ // Povprecje
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['avgVar'] > 0){
+
+ // Loop cez vse in izracunamo povprecje z ustreznimi utezmi
+ $avg = 0;
+ if($crosstabs['crosstab']){
+ $tempAvg = 0;
+ foreach($crosstabs['crosstab'] as $key1 => $row){
+ foreach($row as $key2 => $count){
+ $tempAvg += $count * $crosstabs['avg'][$key1][$key2];
+ }
+ }
+ $avg = $tempAvg / $crosstabs['sumaSkupna'];
+ }
+
+ $this->pdf->SetFillColor(220, 220, 255);
+ $this->pdf->SetTextColor(0, 0, 230);
+ $this->pdf->MultiCell($this->cellWidth, $lineHeight, $this->formatNumber($avg, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE')), 1, 'C', 1, 0, 0 ,0, true);
+ $this->pdf->SetFillColor(250, 250, 250);
+ $this->pdf->SetTextColor(0, 0, 0);
+
+ $this->pdf->setXY($this->pdf->getX() - $this->cellWidth, $this->pdf->getY() + $lineHeight);
+ }
+
+ // Delez
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['delezVar'] > 0){
+
+ // Loop cez vrstico in izracunamo skupen delez
+ $delez = 0;
+ if($crosstabs['delez']){
+ foreach($crosstabs['delez'] as $row){
+ foreach($row as $tempDelez){
+ $delez += $tempDelez;
+ }
+ }
+ }
+
+ $this->pdf->SetFillColor(255, 220, 220);
+ $this->pdf->SetTextColor(230, 0, 0);
+ $this->pdf->MultiCell($this->cellWidth, $lineHeight, $this->formatNumber($delez*100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'), 1, 'C', 1, 0, 0 ,0, true);
+ $this->pdf->SetFillColor(250, 250, 250);
+ $this->pdf->SetTextColor(0, 0, 0);
+
+ $this->pdf->setXY($this->pdf->getX() - $this->cellWidth, $this->pdf->getY() + $lineHeight);
+ }
+ }
+ // Suma na koncu vrstice
+ elseif($orientation == 0){
+ // Izpisemo podatek
+ if($crosstabs['sumaVrstica'][$val]){
+
+ // Numerus
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['numerus'] == 1){
+ $this->pdf->MultiCell($this->cellWidth, $lineHeight, $crosstabs['sumaVrstica'][$val], 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->setXY($this->pdf->getX() - $this->cellWidth, $this->pdf->getY() + $lineHeight);
+ }
+ // Procenti
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['percent'] == 1){
+ $this->pdf->MultiCell($this->cellWidth, $lineHeight, $this->formatNumber(100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->setXY($this->pdf->getX() - $this->cellWidth, $this->pdf->getY() + $lineHeight);
+ }
+ }
+ else{
+
+ // Numerus
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['numerus'] == 1){
+ $this->pdf->MultiCell($this->cellWidth, $lineHeight, '0', 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->setXY($this->pdf->getX() - $this->cellWidth, $this->pdf->getY() + $lineHeight);
+ }
+ // Procenti
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['percent'] == 1){
+ $this->pdf->MultiCell($this->cellWidth, $lineHeight, $this->formatNumber(100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->setXY($this->pdf->getX() - $this->cellWidth, $this->pdf->getY() + $lineHeight);
+ }
+ }
+
+ // Povprecje
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['avgVar'] > 0){
+
+ // Loop cez vrstico in izracunamo povprecje z ustreznimi utezmi
+ $avg = 0;
+ if($crosstabs['crosstab'][$val]){
+ $tempAvg = 0;
+ foreach($crosstabs['crosstab'][$val] as $key => $count){
+ $tempAvg += $count * $crosstabs['avg'][$val][$key];
+ }
+ $avg = $tempAvg / $crosstabs['sumaVrstica'][$val];
+ }
+
+ $this->pdf->SetFillColor(220, 220, 255);
+ $this->pdf->SetTextColor(0, 0, 230);
+ $this->pdf->MultiCell($this->cellWidth, $lineHeight, $this->formatNumber($avg, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE')), 1, 'C', 1, 0, 0 ,0, true);
+ $this->pdf->SetFillColor(250, 250, 250);
+ $this->pdf->SetTextColor(0, 0, 0);
+
+ $this->pdf->setXY($this->pdf->getX() - $this->cellWidth, $this->pdf->getY() + $lineHeight);
+ }
+
+ // Delez
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['delezVar'] > 0){
+
+ // Loop cez vrstico in izracunamo skupen delez
+ $delez = 0;
+ if($crosstabs['delez'][$val]){
+ foreach($crosstabs['delez'][$val] as $tempDelez){
+ $delez += $tempDelez;
+ }
+ }
+
+ $this->pdf->SetFillColor(255, 220, 220);
+ $this->pdf->SetTextColor(230, 0, 0);
+ $this->pdf->MultiCell($this->cellWidth, $lineHeight, $this->formatNumber($delez*100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'), 1, 'C', 1, 0, 0 ,0, true);
+ $this->pdf->SetFillColor(250, 250, 250);
+ $this->pdf->SetTextColor(0, 0, 0);
+
+ $this->pdf->setXY($this->pdf->getX() - $this->cellWidth, $this->pdf->getY() + $lineHeight);
+ }
+ }
+ // Suma za stolpce
+ else{
+ // Izpisemo podatek
+ if(isset($crosstabs['sumaStolpec'][$val])){
+
+ // Numerus
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['numerus'] == 1){
+ $this->pdf->MultiCell($this->cellWidth, $lineHeight, $crosstabs['sumaStolpec'][$val], 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->setXY($this->pdf->getX() - $this->cellWidth, $this->pdf->getY() + $lineHeight);
+ }
+ // Procenti
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['percent'] == 1){
+ $this->pdf->MultiCell($this->cellWidth, $lineHeight, $this->formatNumber($this->multiCrosstabClass->getCrossTabPercentage($crosstabs['sumaSkupna'], $crosstabs['sumaStolpec'][$val]), SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->setXY($this->pdf->getX() - $this->cellWidth, $this->pdf->getY() + $lineHeight);
+ }
+ }
+ else{
+
+ // Numerus
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['numerus'] == 1){
+ $this->pdf->MultiCell($this->cellWidth, $lineHeight, '0', 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->setXY($this->pdf->getX() - $this->cellWidth, $this->pdf->getY() + $lineHeight);
+ }
+ // Procenti
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['percent'] == 1){
+ $this->pdf->MultiCell($this->cellWidth, $lineHeight, $this->formatNumber(0, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->setXY($this->pdf->getX() - $this->cellWidth, $this->pdf->getY() + $lineHeight);
+ }
+ }
+
+ // Povprecje
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['avgVar'] > 0){
+
+ // Loop cez vrstico in izracunamo povprecje z ustreznimi utezmi
+ $avg = 0;
+ if($crosstabs['crosstab']){
+ $tempAvg = 0;
+ foreach($crosstabs['crosstab'] as $key => $row){
+ if($row[$val] > 0)
+ $tempAvg += $row[$val] * $crosstabs['avg'][$key][$val];
+ }
+ $avg = $tempAvg / $crosstabs['sumaStolpec'][$val];
+ }
+
+ $this->pdf->SetFillColor(220, 220, 255);
+ $this->pdf->SetTextColor(0, 0, 230);
+ $this->pdf->MultiCell($this->cellWidth, $lineHeight, $this->formatNumber($avg, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE')), 1, 'C', 1, 0, 0 ,0, true);
+ $this->pdf->SetFillColor(250, 250, 250);
+ $this->pdf->SetTextColor(0, 0, 0);
+
+ $this->pdf->setXY($this->pdf->getX() - $this->cellWidth, $this->pdf->getY() + $lineHeight);
+ }
+
+ // Delez
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['delezVar'] > 0){
+
+ // Loop cez vrstico in izracunamo skupen delez
+ $delez = 0;
+ if($crosstabs['delez']){
+ foreach($crosstabs['delez'] as $tempDelez){
+ $delez += $tempDelez[$val];
+ }
+ }
+
+ $this->pdf->SetFillColor(255, 220, 220);
+ $this->pdf->SetTextColor(230, 0, 0);
+ $this->pdf->MultiCell($this->cellWidth, $lineHeight, $this->formatNumber($delez*100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'), 1, 'C', 1, 0, 0 ,0, true);
+ $this->pdf->SetFillColor(250, 250, 250);
+ $this->pdf->SetTextColor(0, 0, 0);
+
+ $this->pdf->setXY($this->pdf->getX() - $this->cellWidth, $this->pdf->getY() + $lineHeight);
+ }
+ }
+
+ $this->pdf->SetTextColor(0, 0, 0);
+ $this->pdf->setFont('','','6');
+ $this->pdf->setXY($startX + $this->cellWidth, $startY);
+ }
+
+ // Izpis celice z vrednostmi
+ function displayDataCell($crosstab, $percent, $avg, $delez){
+
+ $startX = $this->pdf->getX();
+ $startY = $this->pdf->getY();
+
+ $lineHeight = ($this->cellSpan > 1) ? 5 : 6;
+
+ if($crosstab > 0){
+
+ // Numerus
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['numerus'] == 1){
+ $this->pdf->MultiCell($this->cellWidth, $lineHeight, $crosstab, 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->setXY($this->pdf->getX() - $this->cellWidth, $this->pdf->getY() + $lineHeight);
+ }
+ // Procenti
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['percent'] == 1){
+ $this->pdf->MultiCell($this->cellWidth, $lineHeight, $this->formatNumber($percent, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->setXY($this->pdf->getX() - $this->cellWidth, $this->pdf->getY() + $lineHeight);
+ }
+ }
+ else{
+ // Numerus
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['numerus'] == 1){
+ $this->pdf->MultiCell($this->cellWidth, $lineHeight, '0', 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->setXY($this->pdf->getX() - $this->cellWidth, $this->pdf->getY() + $lineHeight);
+ }
+ // Procenti
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['percent'] == 1){
+ $this->pdf->MultiCell($this->cellWidth, $lineHeight, $this->formatNumber(0, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->setXY($this->pdf->getX() - $this->cellWidth, $this->pdf->getY() + $lineHeight);
+ }
+ }
+
+ // Povprecje
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['avgVar'] > 0){
+ $this->pdf->SetFillColor(220, 220, 255);
+ $this->pdf->SetTextColor(0, 0, 230);
+ $this->pdf->MultiCell($this->cellWidth, $lineHeight, $this->formatNumber($avg, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE')), 1, 'C', 1, 0, 0 ,0, true);
+ $this->pdf->SetFillColor(250, 250, 250);
+ $this->pdf->SetTextColor(0, 0, 0);
+
+ $this->pdf->setXY($this->pdf->getX() - $this->cellWidth, $this->pdf->getY() + $lineHeight);
+ }
+
+ // Delez
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['delezVar'] > 0){
+ $this->pdf->SetFillColor(255, 220, 220);
+ $this->pdf->SetTextColor(230, 0, 0);
+ $this->pdf->MultiCell($this->cellWidth, $lineHeight, $this->formatNumber($delez*100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'), 1, 'C', 1, 0, 0 ,0, true);
+ $this->pdf->SetFillColor(250, 250, 250);
+ $this->pdf->SetTextColor(0, 0, 0);
+
+ $this->pdf->setXY($this->pdf->getX() - $this->cellWidth, $this->pdf->getY() + $lineHeight);
+ }
+
+ $this->pdf->setXY($startX + $this->cellWidth, $startY);
+ }
+
+ // Izris legende na dnu
+ function displayLegend(){
+ global $lang;
+
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['avgVar'] > 0 || $this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['delezVar'] > 0){
+
+ $this->pdf->setY($this->pdf->getY() + 2);
+
+ $this->pdf->setX(245);
+ $this->pdf->MultiCell(40, 2, '', $border='B', $align='R', $fill=0, $ln=1, $x='', $y='', $reseth=true, $stretch=0, $ishtml=false, $autopadding=true, $maxh=0);
+
+ // Povprecje
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['avgVar'] > 0){
+
+ $this->pdf->setX(245);
+
+ $this->pdf->SetTextColor(0, 0, 230);
+
+ $this->pdf->MultiCell(15, 5, $lang['srv_multicrosstabs_avg'].': ', $border='L', $align='R', $fill=1, $ln=0, $x='', $y='', $reseth=true, $stretch=0, $ishtml=false, $autopadding=true, $maxh=0);
+
+ $this->pdf->SetTextColor(0, 0, 0);
+ $this->pdf->MultiCell(25, 5, $this->multiCrosstabClass->variablesList[$this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['avgVar']]['variable'], $border='R', $align='L', $fill=1, $ln=1, $x='', $y='', $reseth=true, $stretch=0, $ishtml=false, $autopadding=true, $maxh=0);
+ }
+
+ // Delez
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['delezVar'] > 0){
+
+ $this->pdf->setX(245);
+
+ $this->pdf->SetTextColor(230, 0, 0);
+
+ $this->pdf->MultiCell(15, 5, $lang['srv_multicrosstabs_delez'].': ', $border='L', $align='R', $fill=1, $ln=0, $x='', $y='', $reseth=true, $stretch=0, $ishtml=false, $autopadding=true, $maxh=0);
+
+ $delez = unserialize($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['delez']);
+ $string = '';
+ $cnt = 1;
+ foreach($delez as $val){
+ if($val == 1)
+ $string .= $cnt.', ';
+
+ $cnt++;
+ }
+ $string = $this->multiCrosstabClass->variablesList[$this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['delezVar']]['variable'].' ('.substr($string, 0, -2).')';
+ $this->pdf->SetTextColor(0, 0, 0);
+ $this->pdf->MultiCell(25, 5, $string, $border='R', $align='L', $fill=1, $ln=1, $x='', $y='', $reseth=true, $stretch=0, $ishtml=false, $autopadding=true, $maxh=0);
+ }
+
+ $this->pdf->setX(245);
+ $this->pdf->MultiCell(40, 1, '', $border='T', $align='R', $fill=0, $ln=1, $x='', $y='', $reseth=true, $stretch=0, $ishtml=false, $autopadding=true, $maxh=0);
+ }
+ }
+
+
+ function formatNumber($value, $digit=0, $sufix=""){
+
+ if ($value <> 0 && $value != null)
+ $result = round($value, $digit);
+ else
+ $result = "0";
+
+ # polovimo decimalna mesta in vejice za tisoÄice
+ $decimal_point = SurveyDataSettingProfiles :: getSetting('decimal_point');
+ $thousands = SurveyDataSettingProfiles :: getSetting('thousands');
+
+ $result = number_format($result, $digit, $decimal_point, $thousands) . $sufix;
+
+ return $result;
+ }
+
+ function encodeText($text){
+ // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace(array("&scaron;","&#353;","&#269;"),array("Å¡","Å¡","Ä"),$text);
+
+ return strip_tags($text);
+ }
+
+ /*Skrajsa tekst in doda '...' na koncu*/
+ function snippet($text,$length=64,$tail="..."){
+
+ $text = trim($text);
+ $txtl = strlen($text);
+ if($txtl > $length){
+ for($i=1;$text[$length-$i]!=" ";$i++){
+ if($i == $length)
+ {
+ return substr($text,0,$length) . $tail;
+ }
+ }
+ $text = substr($text,0,$length-$i+1) . $tail;
+ }
+
+ return $text;
+ }
+
+ function drawLine(){
+
+ $cy = $this->pdf->getY();
+ $this->pdf->Line(15, $cy , 195, $cy , $this->currentStyle);
+ }
+
+ function getCellHeight($string, $width){
+
+ $this->pdf->startTransaction();
+ // get the number of lines calling you method
+ $linecount = $this->pdf->MultiCell($width, 0, $string, 0, 'L', 0, 0, '', '', true, 0, false, true, 0);
+ // restore previous object
+ $this->pdf = $this->pdf->rollbackTransaction();
+
+ $height = ($linecount <= 1) ? 4.7 : $linecount * ($this->pdf->getFontSize() * $this->pdf->getCellHeightRatio()) + 2;
+
+ return $height;
+ }
+
+}
+
+?> \ No newline at end of file
diff --git a/admin/exportclases/class.pdfIzvozAnalizaOpisne.php b/admin/exportclases/class.pdfIzvozAnalizaOpisne.php
new file mode 100644
index 0000000..104a58c
--- /dev/null
+++ b/admin/exportclases/class.pdfIzvozAnalizaOpisne.php
@@ -0,0 +1,532 @@
+<?php
+
+ global $site_path;
+
+ include_once('../../function.php');
+ include_once('../survey/definition.php');
+ include_once('../exportclases/class.pdfIzvozAnalizaSums.php');
+ include_once('../exportclases/class.pdfIzvozAnalizaFunctions.php');
+ require_once('../exportclases/class.enka.pdf.php');
+
+ define("ALLOW_HIDE_ZERRO_REGULAR", false); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za navadne odgovore
+ define("ALLOW_HIDE_ZERRO_MISSING", true); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za missinge
+
+ define("NUM_DIGIT_AVERAGE", 2, true); // stevilo digitalnih mest za povprecje
+ define("NUM_DIGIT_DEVIATION", 2, true); // stevilo digitalnih mest za povprecje
+
+ define("M_ANALIZA_DESCRIPTOR", "descriptor", true);
+ define("M_ANALIZA_FREQUENCY", "frequency", true);
+
+ define("FNT_FREESERIF", "freeserif", true);
+ define("FNT_FREESANS", "freesans", true);
+ define("FNT_HELVETICA", "helvetica", true);
+
+ define("FNT_MAIN_TEXT", FNT_FREESANS, true);
+ define("FNT_QUESTION_TEXT", FNT_FREESANS, true);
+ define("FNT_HEADER_TEXT", FNT_FREESANS, true);
+
+ define("FNT_MAIN_SIZE", 10, true);
+ define("FNT_QUESTION_SIZE", 9, true);
+ define("FNT_HEADER_SIZE", 10, true);
+
+ define("RADIO_BTN_SIZE", 3, true);
+ define("CHCK_BTN_SIZE", 3, true);
+ define("LINE_BREAK", 6, true);
+
+ define ('PDF_MARGIN_HEADER', 8);
+ define ('PDF_MARGIN_FOOTER', 12);
+ define ('PDF_MARGIN_TOP', 18);
+ define ('PDF_MARGIN_BOTTOM', 18);
+ define ('PDF_MARGIN_LEFT', 15);
+ define ('PDF_MARGIN_RIGHT', 15);
+
+/**
+ * @desc Class za generacijo pdf-a
+ */
+class PdfIzvozAnalizaOpisne {
+
+ var $anketa;// = array(); // trenutna anketa
+
+ var $pi=array('canCreate'=>false); // za shrambo parametrov in sporocil
+ var $pdf;
+ var $currentStyle;
+
+ private $headFileName = null; # pot do header fajla
+ private $dataFileName = null; # pot do data fajla
+ private $dataFileStatus = null; # status data datoteke
+
+ var $current_loop = 'undefined';
+
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null, $sprID = null, $loop = null)
+ {
+ global $site_path;
+ global $global_user_id;
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) )
+ {
+ $this->anketa['id'] = $anketa;
+ $this->spremenljivka = $sprID;
+
+ SurveyAnalysis::Init($this->anketa['id']);
+ SurveyAnalysis::$setUpJSAnaliza = false;
+
+ // create new PDF document
+ $this->pdf = new enka_TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
+
+ // Poskrbimo za datoteko s podatki
+ $SDF = SurveyDataFile::get_instance();
+ $SDF->init($this->anketa['id']);
+ $SDF->prepareFiles();
+
+ $this->headFileName = $SDF->getHeaderFileName();
+ $this->dataFileName = $SDF->getDataFileName();
+ $this->dataFileStatus = $SDF->getStatus();
+
+ SurveyZankaProfiles :: Init($this->anketa['id'], $global_user_id);
+ $this->current_loop = ($loop != null) ? $loop : $this->current_loop;
+ }
+ else
+ {
+ $this->pi['msg'] = "Anketa ni izbrana!";
+ $this->pi['canCreate'] = false;
+ return false;
+ }
+
+ if ( SurveyInfo::getInstance()->SurveyInit($this->anketa['id']) && $this->init()){
+ $this->anketa['uid'] = $global_user_id;
+ SurveyUserSetting::getInstance()->Init($this->anketa['id'], $this->anketa['uid']);
+ }
+ else
+ return false;
+
+ // ce smo prisli do tu je vse ok
+ $this->pi['canCreate'] = true;
+
+ return true;
+ }
+
+ // SETTERS && GETTERS
+
+ function checkCreate()
+ {
+ return $this->pi['canCreate'];
+ }
+ function getFile($fileName)
+ {
+ //Close and output PDF document
+ ob_end_clean();
+ $this->pdf->Output($fileName, 'I');
+ }
+
+
+ function init()
+ {
+ global $lang;
+
+ // array used to define the language and charset of the pdf file to be generated
+ $language_meta = Array();
+ $language_meta['a_meta_charset'] = 'UTF-8';
+ $language_meta['a_meta_dir'] = 'ltr';
+ $language_meta['a_meta_language'] = 'sl';
+ $language_meta['w_page'] = $lang['page'];
+
+ //set some language-dependent strings
+ $this->pdf->setLanguageArray($language_meta);
+
+ //set margins
+ $this->pdf->setPrintHeaderFirstPage(true);
+ $this->pdf->setPrintFooterFirstPage(true);
+ $this->pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
+ $this->pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
+ $this->pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
+
+ // set header and footer fonts
+ $this->pdf->setHeaderFont(Array(FNT_HEADER_TEXT, "I", FNT_HEADER_SIZE));
+ $this->pdf->setFooterFont(Array(FNT_HEADER_TEXT, 'I', FNT_HEADER_SIZE));
+
+
+ // set document information
+ $this->pdf->SetAuthor('An Order Form');
+ $this->pdf->SetTitle('An Order');
+ $this->pdf->SetSubject('An Order');
+
+ // set default header data
+ $this->pdf->SetHeaderData(null, null, "www.1ka.si", $this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()));
+
+ //set auto page breaks
+ $this->pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
+
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', FNT_MAIN_SIZE);
+ //set image scale factor
+ $this->pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
+ return true;
+ }
+
+ function encodeText($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace(array("&scaron;","&#353;","&#269;"),array("�","�","�"),$text);
+ return strip_tags($text);
+ }
+
+ function createPdf(){
+ global $site_path;
+ global $lang;
+
+
+ // izpisemo prvo stran
+ //$this->createFrontPage();
+
+ $this->pdf->AddPage();
+
+ $this->pdf->setFont('','B','11');
+ $this->pdf->MultiCell(150, 5, $lang['export_analisys_desc'], 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->ln(5);
+
+ $this->pdf->SetDrawColor(128, 128, 128);
+ $this->pdf->setFont('','','6');
+
+ if ($this->headFileName !== null ) {
+
+ // Preverimo ce imamo zanke (po skupinah)
+ SurveyAnalysis::$_LOOPS = SurveyZankaProfiles::getFiltersForLoops();
+
+ # Äe nimamo zank
+ if(count(SurveyAnalysis::$_LOOPS) == 0){
+
+ $this->displayTables();
+ }
+ else{
+ // izrisemo samo eno tabelo iz enega loopa
+ if($this->current_loop > 0){
+
+ $loop = SurveyAnalysis::$_LOOPS[(int)$this->current_loop-1];
+ $loop['cnt'] = $this->current_loop;
+ SurveyAnalysis::$_CURRENT_LOOP = $loop;
+
+ // Izpisemo naslov zanke za skupino
+ $this->pdf->setFont('','B','10');
+ $this->pdf->ln(5);
+ $this->pdf->MultiCell(200, 5, $this->encodeText($lang['srv_zanka_note'].$loop['text']), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->setFont('','','6');
+
+ $this->displayTables();
+ }
+ // Izrisemo vse tabele spremenljivka (iz vseh loopov)
+ else{
+ $loop_cnt = 0;
+ # Äe mamo zanke
+ foreach(SurveyAnalysis::$_LOOPS AS $loop) {
+ $loop_cnt++;
+ $loop['cnt'] = $loop_cnt;
+ SurveyAnalysis::$_CURRENT_LOOP = $loop;
+
+ // Izpisemo naslov zanke za skupino
+ $this->pdf->setFont('','B','10');
+ $this->pdf->ln(5);
+ $this->pdf->MultiCell(200, 5, $this->encodeText($lang['srv_zanka_note'].$loop['text']), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->setFont('','','6');
+
+ $this->displayTables();
+ }
+ }
+ }
+
+ } // end if else ($_headFileName == null)
+ }
+
+ function displayTables(){
+ global $site_path;
+ global $lang;
+ global $global_user_id;
+
+ #preberemo HEADERS iz datoteke
+ SurveyAnalysis::$_HEADERS = unserialize(file_get_contents($this->headFileName));
+
+ # polovimo frekvence
+ SurveyAnalysis::getDescriptives();
+
+ # izpišemo opisne statistike
+ $vars_count = count(SurveyAnalysis::$_FILTRED_VARIABLES);
+
+ $text = array();
+
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_variable']);
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_variable_text']);
+
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_m']);
+ $text[] = $this->encodeText($lang['srv_analiza_num_units']);
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_povprecje']);
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_odklon']);
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_min']);
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_max']);
+
+ $params = array('bold' => 'B', 'align2' => 'C');
+
+ $this->pdf->setFont('','b','6');
+ $this->tableRow($text, $params);
+ $this->pdf->setFont('','','6');
+
+ # dodamo Å¡e kontrolo Äe kliÄemo iz displaySingleVar
+ if (isset($_spid) && $_spid !== null) {
+ SurveyAnalysis::$_HEADERS = array($_spid => SurveyAnalysis::$_HEADERS[$_spid]);
+ }
+ #odstranimo sistemske variable
+ SurveyAnalysis::removeSystemVariables();
+
+ foreach (SurveyAnalysis::$_HEADERS AS $spid => $spremenljivka) {
+ # preverjamo ali je meta
+ if ($spremenljivka['tip'] != 'm'
+ && ( count(SurveyAnalysis::$_FILTRED_VARIABLES) == 0 || (count(SurveyAnalysis::$_FILTRED_VARIABLES) > 0 && isset(SurveyAnalysis::$_FILTRED_VARIABLES[$spid]) ))
+ && in_array($spremenljivka['tip'], SurveyAnalysis::$_FILTRED_TYPES)
+ && ($this->spremenljivka == $spid || $this->spremenljivka == null) ) {
+
+ $show_enota = false;
+ # preverimo ali imamo samo eno variablo in Äe iammo enoto
+ if ((int)$spremenljivka['enota'] != 0 || $spremenljivka['cnt_all'] > 1 ) {
+ $show_enota = true;
+ }
+
+ # izpišemo glavno vrstico z podatki
+ $_sequence = null;
+ # za enodimenzijske tipe izpišemo podatke kar v osnovni vrstici
+ if (!$show_enota) {
+// if ($spremenljivka['tip'] == 1 || $spremenljivka['tip'] == 3
+// || $spremenljivka['tip'] == 4 || $spremenljivka['tip'] == 7 || $spremenljivka['tip'] == 8) {
+ $variable = $spremenljivka['grids'][0]['variables'][0];
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ self::displayDescriptivesSpremenljivkaRow($spid, $spremenljivka,$show_enota,$_sequence);
+ } else {
+ if ($spremenljivka['tip'] == 1 || $spremenljivka['tip'] == 3) {
+ $variable = $spremenljivka['grids'][0]['variables'][0];
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ $show_enota = false;
+ }
+ self::displayDescriptivesSpremenljivkaRow($spid, $spremenljivka,$show_enota,$_sequence);
+ #zloopamo skozi variable
+ $_sequence = null;
+ $grd_cnt=0;
+ if (count($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+
+ if (count($spremenljivka['grids']) > 1 && $grd_cnt !== 0 && $spremenljivka['tip'] != 6) {
+ $grid['new_grid'] = true;
+ }
+ $grd_cnt++;
+ # dodamo dodatne vrstice z albelami grida
+ if (count ($grid['variables']) > 0)
+ foreach ($grid['variables'] AS $vid => $variable ){
+ # dodamo ostale vrstice
+ $do_show = ($variable['other'] !=1 && ($spremenljivka['tip'] == 1 || $spremenljivka['tip'] == 3 || $spremenljivka['tip'] == 5 || $spremenljivka['tip'] == 8 ))
+ ? false
+ : true;
+ if ($do_show) {
+ self::displayDescriptivesVariablaRow($spremenljivka,$grid,$variable,$_css);
+
+ }
+ $grid['new_grid'] = false;
+
+ }
+ }
+ } //else: if (!$show_enota)
+ } // end if $spremenljivka['tip'] != 'm'
+ } // end foreach SurveyAnalysis::$_HEADERS
+ }
+
+
+ /** Izriše vrstico z opisnimi
+ *
+ * @param unknown_type $spremenljivka
+ * @param unknown_type $variable
+ */
+ function displayDescriptivesVariablaRow($spremenljivka,$grid,$variable=null) {
+ global $lang;
+
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if ($_sequence != null) {
+ $_desc = SurveyAnalysis::$_DESCRIPTIVES[$_sequence];
+ }
+
+ $text = array();
+
+ $text[] = $this->encodeText($variable['variable']);
+ $text[] = $this->encodeText($variable['naslov']);
+
+ #veljavno
+ $text[] = $this->encodeText((int)$_desc['validCnt']);
+
+ #ustrezno
+ $text[] = $this->encodeText((int)$_desc['allCnt']);
+
+ if (isset($_desc['avg']) && (int)$spremenljivka['skala'] !== 1)
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($_desc['avg'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),''));
+ else if (isset($_desc['avg']) && $spremenljivka['tip'] == 2 && (int)$spremenljivka['skala'] == 1 )
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($_desc['avg']*100,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'&nbsp;%'));
+ else
+ $text[] = $this->encodeText('');
+
+ if (isset($_desc['div']) && (int)$spremenljivka['skala'] !== 1)
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($_desc['div'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_DEVIATION'),''));
+ else
+ $text[] = $this->encodeText('');
+
+ $text[] = $this->encodeText((int)$spremenljivka['skala'] !== 1 ? $_desc['min'] : '');
+ $text[] = $this->encodeText((int)$spremenljivka['skala'] !== 1 ? $_desc['max'] : '');
+
+ $this->tableRow($text);
+
+ }
+
+ /** Izriše vrstico z opisnimi
+ *
+ * @param unknown_type $spremenljivka
+ * @param unknown_type $variable
+ */
+ function displayDescriptivesSpremenljivkaRow($spid,$spremenljivka,$show_enota,$_sequence = null) {
+ global $lang;
+
+ if ($_sequence != null) {
+ $_desc = SurveyAnalysis::$_DESCRIPTIVES[$_sequence];
+ }
+
+ $text = array();
+
+ $text[] = $this->encodeText($spremenljivka['variable']);
+ $text[] = $this->encodeText($spremenljivka['naslov']);
+
+ #veljavno
+ $text[] = $this->encodeText((!$show_enota ? (int)$_desc['validCnt'] : ''));
+
+ #ustrezno
+ $text[] = $this->encodeText((!$show_enota ? (int)$_desc['allCnt'] : ''));
+
+ if (isset($_desc['avg']) && (int)$spremenljivka['skala'] !== 1)
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($_desc['avg'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),''));
+ else
+ $text[] = $this->encodeText('');
+
+ if (isset($_desc['div']) && (int)$spremenljivka['skala'] !== 1)
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($_desc['div'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_DEVIATION'),''));
+ else
+ $text[] = $this->encodeText('');
+
+ $text[] = $this->encodeText((int)$spremenljivka['skala'] !== 1 ? $_desc['min'] : '');
+ $text[] = $this->encodeText((int)$spremenljivka['skala'] !== 1 ? $_desc['max'] : '');
+
+ $this->pdf->setFont('','b','6');
+ $this->tableRow($text);
+ $this->pdf->setFont('','','6');
+ }
+
+
+
+
+ function createFrontPage()
+ {
+// dodamo prvo stran
+ $this->pdf->AddPage();
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', 16);
+
+ // dodamo naslov
+ $this->pdf->SetFillColor(224, 235, 255);
+ $this->pdf->SetTextColor(0);
+ $this->pdf->SetDrawColor(128, 0, 0);
+ $this->pdf->SetLineWidth(0.1);
+ $this->pdf->Sety(100);
+ $this->pdf->Cell(0, 16, $this->encodeText(SurveyInfo::getInstance()->getSurveyTitle()), 1, 1,'C', 1, 0,0);
+
+
+ // dodamo info:
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', 12);
+ $this->currentStyle = array('width' => 0.1, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(128, 0, 0));
+ $this->pdf->ln(30);
+ // $this->pdf->Write (0, $this->encodeText("Info:"), '', 0, 'l', 1, 1);
+
+ $this->drawLine();
+ // avtorja, št vprašanj, datum kreiranja
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_shortname'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()), 0, 'L', 0, 1, 0 ,0, true);
+ if ( SurveyInfo::getInstance()->getSurveyTitle() != SurveyInfo::getInstance()->getSurveyAkronim())
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_longname'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyTitle()), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_qcount'].': '.SurveyInfo::getInstance()->getSurveyQuestionCount(), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_active_from'].': '.SurveyInfo::getInstance()->getSurveyStartsDate(), 0, 'L', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_active_until'].': '.SurveyInfo::getInstance()->getSurveyExpireDate(), 0, 'L', 0, 1, 0 ,0, true);
+
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_author'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyInsertName()), 0, 'L', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_edit'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyEditName()), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_date'].': '.SurveyInfo::getInstance()->getSurveyInsertDate(), 0, 'L', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_date'].': '.SurveyInfo::getInstance()->getSurveyEditDate(), 0, 'L', 0, 1, 0 ,0, true);
+ if ( SurveyInfo::getInstance()->getSurveyInfo() )
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_desc'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyInfo()), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', FNT_MAIN_SIZE);
+ $this->pdf->SetFillColor(0, 0, 0);
+ }
+
+ function setUserId($usrId) {$this->anketa['uid'] = $usrId;}
+ function getUserId() {return ($this->anketa['uid'])?$this->anketa['uid']:false;}
+
+ function formatNumber($value,$digit=0,$sufix="")
+ {
+ if ( $value <> 0 && $value != null )
+ $result = round($value,$digit);
+ else
+ $result = "0";
+ $result = number_format($result, $digit, ',', '.').$sufix;
+
+ return $result;
+ }
+
+ function drawLine()
+ {
+ $cy = $this->pdf->getY();
+ $this->pdf->Line(15, $cy , 195, $cy , $this->currentStyle);
+ }
+
+
+ function tableRow($arrayText, $arrayParams=array()){
+
+ if($arrayParams['align2'] != 'C')
+ $arrayParams['align2'] = 'L';
+
+
+ /*$linecount = $this->pdf->getNumLines($this->encodeText($arrayText[1]), 52);
+ $linecount == 1 ? $height = 4.7 : $height = 4.7 + ($linecount-1)*3.3;*/
+ $height = $this->getCellHeight($arrayText[1], 60);
+
+ //ce smo na prelomu strani
+ if( ($this->pdf->getY() + $height) > 270){
+ $this->drawLine();
+ $this->pdf->AddPage('P');
+ $arrayParams['border'] .= 'T';
+ }
+
+ $this->pdf->MultiCell(18, $height, $this->encodeText($arrayText[0]), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(60, $height, $this->encodeText($arrayText[1]), 1, $arrayParams['align2'], 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(16, $height, $this->encodeText($arrayText[2]), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(16, $height, $this->encodeText($arrayText[3]), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(16, $height, $this->encodeText($arrayText[4]), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(16, $height, $this->encodeText($arrayText[5]), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(16, $height, $this->encodeText($arrayText[6]), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(16, $height, $this->encodeText($arrayText[7]), 1, 'C', 0, 1, 0 ,0, true);
+ }
+
+ function getCellHeight($string, $width){
+
+ $this->pdf->startTransaction();
+ // get the number of lines calling you method
+ $linecount = $this->pdf->MultiCell($width, 0, $string, 0, 'L', 0, 0, '', '', true, 0, false, true, 0);
+ // restore previous object
+ $this->pdf = $this->pdf->rollbackTransaction();
+
+ $height = ($linecount <= 1) ? 4.7 : $linecount * ($this->pdf->getFontSize() * $this->pdf->getCellHeightRatio()) + 2;
+
+ return $height;
+ }
+
+}
+
+?> \ No newline at end of file
diff --git a/admin/exportclases/class.pdfIzvozAnalizaSums.php b/admin/exportclases/class.pdfIzvozAnalizaSums.php
new file mode 100644
index 0000000..9ddc739
--- /dev/null
+++ b/admin/exportclases/class.pdfIzvozAnalizaSums.php
@@ -0,0 +1,2169 @@
+<?php
+
+ global $site_path;
+
+ include_once('../../function.php');
+ include_once('../survey/definition.php');
+ include_once('../exportclases/class.pdfIzvozAnalizaFrekvenca.php');
+ include_once('../exportclases/class.pdfIzvozAnalizaFunctions.php');
+ require_once('../exportclases/class.enka.pdf.php');
+
+ define("ALLOW_HIDE_ZERRO_REGULAR", false); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za navadne odgovore
+ define("ALLOW_HIDE_ZERRO_MISSING", true); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za missinge
+
+ define("NUM_DIGIT_AVERAGE", 2, true); // stevilo digitalnih mest za povprecje
+ define("NUM_DIGIT_DEVIATION", 2, true); // stevilo digitalnih mest za povprecje
+
+ define("M_ANALIZA_DESCRIPTOR", "descriptor", true);
+ define("M_ANALIZA_FREQUENCY", "frequency", true);
+
+ define("FNT_FREESERIF", "freeserif", true);
+ define("FNT_FREESANS", "freesans", true);
+ define("FNT_HELVETICA", "helvetica", true);
+
+ define("FNT_MAIN_TEXT", FNT_FREESANS, true);
+ define("FNT_QUESTION_TEXT", FNT_FREESANS, true);
+ define("FNT_HEADER_TEXT", FNT_FREESANS, true);
+
+ define("FNT_MAIN_SIZE", 10, true);
+ define("FNT_QUESTION_SIZE", 9, true);
+ define("FNT_HEADER_SIZE", 10, true);
+
+ define("RADIO_BTN_SIZE", 3, true);
+ define("CHCK_BTN_SIZE", 3, true);
+ define("LINE_BREAK", 6, true);
+
+ define ('PDF_MARGIN_HEADER', 8);
+ define ('PDF_MARGIN_FOOTER', 12);
+ define ('PDF_MARGIN_TOP', 18);
+ define ('PDF_MARGIN_BOTTOM', 18);
+ define ('PDF_MARGIN_LEFT', 15);
+ define ('PDF_MARGIN_RIGHT', 15);
+
+/**
+ * @desc Class za generacijo pdf-a
+ */
+class PdfIzvozAnalizaSums {
+
+ var $anketa; // trenutna anketa (array)
+ var $spremenljivka; // trenutna spremenljivka
+
+ private $headFileName = null; # pot do header fajla
+ private $dataFileName = null; # pot do data fajla
+ private $dataFileStatus = null; # status data datoteke
+
+ var $pi=array('canCreate'=>false); // za shrambo parametrov in sporocil
+ var $pdf;
+ var $currentStyle;
+
+ var $current_loop = 'undefined';
+
+ static public $_FILTRED_OTHER = array(); # filter za polja drugo
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null, $sprID = null, $loop = null)
+ {
+ global $site_path;
+ global $global_user_id;
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) )
+ {
+ $this->anketa['id'] = $anketa;
+ $this->spremenljivka = $sprID;
+
+ SurveyAnalysis::Init($this->anketa['id']);
+ SurveyAnalysis::$setUpJSAnaliza = false;
+
+ // create new PDF document
+ $this->pdf = new enka_TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
+
+ // Poskrbimo za datoteko s podatki
+ $SDF = SurveyDataFile::get_instance();
+ $SDF->init($this->anketa['id']);
+ $SDF->prepareFiles();
+
+ $this->headFileName = $SDF->getHeaderFileName();
+ $this->dataFileName = $SDF->getDataFileName();
+ $this->dataFileStatus = $SDF->getStatus();
+
+ SurveyZankaProfiles :: Init($this->anketa['id'], $global_user_id);
+ $this->current_loop = ($loop != null) ? $loop : $this->current_loop;
+ }
+ else
+ {
+ $this->pi['msg'] = "Anketa ni izbrana!";
+ $this->pi['canCreate'] = false;
+ return false;
+ }
+
+ if ( SurveyInfo::getInstance()->SurveyInit($this->anketa['id']) && $this->init())
+ {
+ $this->anketa['uid'] = $global_user_id;
+ SurveyUserSetting::getInstance()->Init($this->anketa['id'], $this->anketa['uid']);
+ }
+ else
+ return false;
+ // ce smo prisli do tu je vse ok
+ $this->pi['canCreate'] = true;
+
+ return true;
+ }
+
+ // SETTERS && GETTERS
+
+ function checkCreate()
+ {
+ return $this->pi['canCreate'];
+ }
+ function getFile($fileName)
+ {
+ //Close and output PDF document
+ ob_end_clean();
+ $this->pdf->Output($fileName, 'I');
+ }
+
+
+ function init()
+ {
+ global $lang;
+
+ // array used to define the language and charset of the pdf file to be generated
+ $language_meta = Array();
+ $language_meta['a_meta_charset'] = 'UTF-8';
+ $language_meta['a_meta_dir'] = 'ltr';
+ $language_meta['a_meta_language'] = 'sl';
+ $language_meta['w_page'] = $lang['page'];
+
+ //set some language-dependent strings
+ $this->pdf->setLanguageArray($language_meta);
+
+ //set margins
+ $this->pdf->setPrintHeaderFirstPage(true);
+ $this->pdf->setPrintFooterFirstPage(true);
+ $this->pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
+ $this->pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
+ $this->pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
+
+ // set header and footer fonts
+ $this->pdf->setHeaderFont(Array(FNT_HEADER_TEXT, "I", FNT_HEADER_SIZE));
+ $this->pdf->setFooterFont(Array(FNT_HEADER_TEXT, 'I', FNT_HEADER_SIZE));
+
+
+ // set document information
+ $this->pdf->SetAuthor('An Order Form');
+ $this->pdf->SetTitle('An Order');
+ $this->pdf->SetSubject('An Order');
+
+ // set default header data
+ $this->pdf->SetHeaderData(null, null, "www.1ka.si", $this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()));
+
+ //set auto page breaks
+ $this->pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
+
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', FNT_MAIN_SIZE);
+ //set image scale factor
+ $this->pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
+ return true;
+ }
+
+ function encodeText($text)
+ {
+ // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace(array("&scaron;","&#353;","&#269;"),array("�","�","�"),$text);
+
+ return strip_tags($text);
+ }
+
+ function createPdf()
+ {
+ global $site_path;
+ global $lang;
+ global $global_user_id;
+
+ // izpisemo prvo stran
+ //$this->createFrontPage();
+
+ $this->pdf->AddPage();
+
+ $this->pdf->setFont('','B','11');
+ $this->pdf->MultiCell(150, 5, $lang['export_analisys_sums'], 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->ln(5);
+
+ $this->pdf->SetDrawColor(128, 128, 128);
+ $this->pdf->setFont('','','6');
+
+ # preberemo header
+ if ($this->dataFileStatus == FILE_STATUS_NO_DATA || $this->dataFileStatus == FILE_STATUS_NO_FILE || $this->dataFileStatus == FILE_STATUS_SRV_DELETED) {
+
+ $this->pdf->MultiCell(150, 5, 'NAPAKA!!! Manjkajo datoteke s podatki.', 0, 'L', 0, 1, 0 ,0, true);
+
+ } else {
+
+ //polovimo podatke o nastavitvah trenutnega profila (missingi..)
+ SurveyAnalysis::$missingProfileData = SurveyMissingProfiles::getProfile(SurveyAnalysis::$currentMissingProfile);
+
+ // Preverimo ce imamo zanke (po skupinah)
+ SurveyAnalysis::$_LOOPS = SurveyZankaProfiles::getFiltersForLoops();
+
+ # Äe nimamo zank
+ if(count(SurveyAnalysis::$_LOOPS) == 0){
+
+ $this->displayTables();
+ }
+ else{
+ // izrisemo samo eno tabelo iz enega loopa
+ if($this->current_loop > 0){
+
+ $loop = SurveyAnalysis::$_LOOPS[(int)$this->current_loop-1];
+ $loop['cnt'] = $this->current_loop;
+ SurveyAnalysis::$_CURRENT_LOOP = $loop;
+
+ // Izpisemo naslov zanke za skupino
+ $this->pdf->setFont('','B','10');
+ $this->pdf->ln(5);
+ $this->pdf->MultiCell(200, 5, $this->encodeText($lang['srv_zanka_note'].$loop['text']), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->setFont('','','6');
+
+ $this->displayTables();
+ }
+ // Izrisemo vse tabele spremenljivka (iz vseh loopov)
+ else{
+ $loop_cnt = 0;
+ # Äe mamo zanke
+ foreach(SurveyAnalysis::$_LOOPS AS $loop) {
+ $loop_cnt++;
+ $loop['cnt'] = $loop_cnt;
+ SurveyAnalysis::$_CURRENT_LOOP = $loop;
+
+ // Izpisemo naslov zanke za skupino
+ $this->pdf->setFont('','B','10');
+ $this->pdf->ln(5);
+ $this->pdf->MultiCell(200, 5, $this->encodeText($lang['srv_zanka_note'].$loop['text']), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->setFont('','','6');
+
+ $this->displayTables();
+ }
+ }
+ }
+
+ } // end if else ($_headFileName == null)
+
+ }
+
+ function displayTables(){
+ global $site_path;
+ global $lang;
+ global $global_user_id;
+
+ #preberemo HEADERS iz datoteke
+ SurveyAnalysis::$_HEADERS = unserialize(file_get_contents($this->headFileName));
+
+ # polovimo frekvence
+ SurveyAnalysis::getFrequencys();
+
+ #odstranimo sistemske variable
+ SurveyAnalysis::removeSystemVariables();
+
+ $vars_count = count(SurveyAnalysis::$_FILTRED_VARIABLES);
+ $line_break = '';
+ foreach (SurveyAnalysis::$_HEADERS AS $spid => $spremenljivka) {
+ # preverjamo ali je meta
+ if (($spremenljivka['tip'] != 'm')
+ && (!isset($_spid) || (isset($_spid) && $_spid == $spid))
+ && (($global_user_id === 0 || $global_user_id === null) || in_array($spremenljivka['tip'], SurveyAnalysis::$_FILTRED_TYPES ) )
+ && ($this->spremenljivka == $spid || $this->spremenljivka == null) ) {
+ # ali imamo sfiltrirano spremenljivko
+ if ($vars_count == 0 || ($vars_count > 0 && isset(SurveyAnalysis::$_FILTRED_VARIABLES[$spid]) ) ) {
+ # prikazujemo v odvisnosti od kategorije spremenljivke
+ switch ($spremenljivka['tip']) {
+ case 1:
+ # radio - prikaže navpiÄno
+ self::sumVertical($spid,'sums');
+ break;
+
+ case 2:
+ #checkbox Äe je dihotomna:
+ self::sumVerticalCheckbox($spid,'sums');
+ break;
+
+ case 3:
+ # dropdown - prikjaže navpiÄno
+ self::sumVertical($spid,'sums');
+ break;
+
+ case 6:
+ # multigrid
+ self::sumHorizontal($spid,'sums');
+ break;
+
+ case 16:
+ #multicheckbox Äe je dihotomna:
+ self::sumMultiHorizontalCheckbox($spid,'sums');
+ break;
+
+ case 17:
+ #razvrÅ¡Äanje Äe je ordinalna
+ self::sumHorizontal($spid,'sums');
+ break;
+
+ case 4: # text
+ case 8: # datum
+ self::sumTextVertical($spid,'sums');
+ break;
+
+ case 21: # besedilo*
+ # varabla tipa »besedilo« je v sumarniku IDENTIČNA kot v FREKVENCAH.
+ if ($spremenljivka['cnt_all'] == 1) {
+ // Äe je enodimenzionalna prikažemo kot frekvence
+ // predvsem zaradi vprašanj tipa: language, email...
+ self::sumTextVertical($spid,'sums');
+ } else {
+ self::sumMultiText($spid,'sums');
+ }
+ break;
+
+ case 19: # multitext
+ self::sumMultiText($spid,'sums');
+ break;
+
+ case 7:
+ case 18:
+ case 22:
+ # variabla tipa »število« je v sumarniku identiÄna kot v DESCRIPTIVES.
+ self::sumNumberVertical($spid,'sums');
+ break;
+
+ case 20:
+ # variabla tipa »število« je v sumarniku identiÄna kot v DESCRIPTIVES.
+ self::sumMultiNumber($spid,'sums');
+ break;
+
+ case 5:
+ # nagovor
+ self::sumNagovor($spid,'sums');
+ break;
+
+ case 26: # lokacija
+ self::sumLokacija($spid,'sums');
+ break;
+ }
+
+ }
+
+ } // end if $spremenljivka['tip'] != 'm'
+
+ } // end foreach self::$_HEADERS
+ }
+
+
+ /** Izriše sumarnik v vertikalni obliki
+ *
+ * @param unknown_type $spid
+ */
+ function sumVertical($spid,$_from) {
+ global $lang;
+
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+ # dodamo opcijo kje izrisujemo legendo
+ $inline_legenda = false;
+ $options=array('inline_legenda' => $inline_legenda, 'isTextAnswer' => false, 'isOtherAnswer' => false);
+
+ //prva vrstica
+ $this->pdf->setFont('','b','6');
+ $this->pdf->ln(5);
+ $this->pdf->MultiCell(18, 5, $this->encodeText($spremenljivka['variable']), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(162, 5, $this->encodeText($spremenljivka['naslov']), 1, 'L', 0, 1, 0 ,0, true);
+
+ //druga vrstica
+ $this->tableHeader();
+ $this->pdf->setFont('','','6');
+
+ $show_valid_percent = (SurveyAnalysis::$_HEADERS[$spid]['show_valid_percent'] == true) ? 1 : 0;
+ // konec naslovne vrstice
+
+
+ $_answersOther = array();
+ $sum_xi_fi=0;
+ $N = 0;
+
+ $_tmp_for_div = array();
+ # izpišemo vlejavne odgovore
+ if (count($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ # dodamo dodatne vrstice z albelami grida
+ if (count($grid['variables']) > 0 )
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if ($variable['text'] != true && $variable['other'] != true) {
+
+ $maxAnswer = (SurveyDataSettingProfiles :: getSetting('numOpenAnswers') > 0) ? SurveyDataSettingProfiles :: getSetting('numOpenAnswers') : 30;
+ $counter = 0;
+ $_kumulativa = 0;
+
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'] AS $vkey => $vAnswer) {
+
+ // za povpreÄje
+ $xi = $vkey;
+ $fi = $vAnswer['cnt'];
+
+ $sum_xi_fi += $xi * $fi ;
+ $N += $fi;
+
+ if ($vAnswer['cnt'] > 0 /*&& $counter < $maxAnswer*/ || true) { # izpisujemo samo tiste ki nisno 0
+
+ $counter = self::outputValidAnswerVertical($counter,$vkey,$vAnswer,$_sequence,$spid,$_kumulativa,$options);
+ }
+ # za poznejÅ¡e raÄunannje odklona
+ $_tmp_for_div[] = array('xi'=>$xi, 'fi'=>$fi, 'sequence'=>$_sequence);
+ }
+ # izpišemo sumo veljavnih
+ $counter = self::outputSumaValidAnswerVertical($counter,$_sequence,$spid,$options);
+ }
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'] AS $ikey => $iAnswer) {
+ if ($iAnswer['cnt'] > 0 ) { # izpisujemo samo tiste ki nisno 0
+ $counter = self::outputInvalidAnswerVertical($counter,$ikey,$iAnswer,$_sequence,$spid,$options);
+ }
+ }
+ # izpišemo sumo veljavnih
+ $counter = self::outputSumaInvalidAnswerVertical($counter,$_sequence,$spid,$options);
+ }
+ #izpišemo še skupno sumo
+ $counter = self::outputSumaVertical($counter,$_sequence,$spid,$options);
+ } else {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ }
+ }
+
+ # odklon
+ $avg = ($N > 0) ? $sum_xi_fi / $N : 0;
+ #standardna diviacija
+ $div = 0;
+ $sum_pow_xi_fi_avg = 0;
+ foreach ( $_tmp_for_div as $tkey => $_tmp_div_data) {
+ $xi = $_tmp_div_data['xi'];
+ $fi = $_tmp_div_data['fi'];
+
+ $sum_pow_xi_fi_avg += pow(($xi - $avg),2) * $fi;
+ }
+ $div = (($N -1) > 0) ? sqrt($sum_pow_xi_fi_avg / ($N -1)) : 0;
+
+ # izpiÅ¡emo Å¡e odklon in povpreÄje
+ if ($show_valid_percent == 1 && SurveyAnalysis::$_HEADERS[$spid]['skala'] != 1) {
+
+ $this->pdf->ln(1);
+
+ $height = 5;
+
+ $this->pdf->MultiCell(18, $height, $this->encodeText(''), 0, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(90, $height, $this->encodeText(''), 0, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(18, $height, $this->encodeText($lang['srv_analiza_opisne_povprecje']), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(18, $height, $this->encodeText(SurveyAnalysis::formatNumber($avg,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'')), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(18, $height, $this->encodeText($lang['srv_analiza_opisne_odklon']), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(18, $height, $this->encodeText(SurveyAnalysis::formatNumber($div,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'')), 1, 'C', 0, 1, 0 ,0, true);
+
+ /*$text = array();
+
+ $text[] = '';
+ $text[] = '';
+
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_povprecje']);
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($avg,NUM_DIGIT_AVERAGE,''));
+
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_odklon']);
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($div,NUM_DIGIT_AVERAGE,''));
+
+ $this->tableRow($text);*/
+ }
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ self::outputOtherAnswers($oAnswers);
+ }
+ }
+ }
+
+ function sumVerticalCheckbox($spid,$_from) {
+ global $lang;
+
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+ $_answersOther = array();
+
+ $inline_legenda = count ($spremenljivka['grids']) > 1;
+ if ($variable['other'] != '1' && $variable['text'] != '1') {
+ $_tip = SurveyAnalysis::getSpremenljivkaLegenda($spremenljivka,'izrazanje');
+ $_oblika = SurveyAnalysis::getSpremenljivkaLegenda($spremenljivka,'skala');
+ } else {
+ $_tip = $lang['srv_analiza_vrsta_bese'];
+ $_oblika = $lang['srv_analiza_oblika_nomi'];
+ }
+ # ugotovimo koliko imamo kolon
+ if (count($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $_clmn_cnt[$gid] = $grid['cnt_vars']-$grid['cnt_other'];
+ if (count ($grid['variables']) > 0)
+ foreach ($grid['variables'] AS $vid => $variable) {
+ $_sequence = $variable['sequence'];
+ $_valid_cnt[$gid] = max($_valid_cnt[$gid], SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt']);
+ $_approp_cnt[$gid] = max($_approp_cnt[$gid], SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt']);
+ if ($variable['other'] == true) {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ $_valid[$gid][$vid] = SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'];
+ $_navedbe[$gid] += SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt'];
+ }
+ }
+
+
+ //prva vrstica
+ $this->pdf->setFont('','b','6');
+ $this->pdf->ln(5);
+ $this->pdf->MultiCell(18, 5, $this->encodeText($spremenljivka['variable']), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(162, 5, $this->encodeText($spremenljivka['naslov']), 1, 'L', 0, 1, 0 ,0, true);
+
+ //druga vrstica
+ $this->pdf->MultiCell(18, 5, $this->encodeText(''), 1, 'L', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(50, 5, $this->encodeText($lang['srv_analiza_opisne_subquestion']), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(80, 5, $this->encodeText($lang['srv_analiza_opisne_units']), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(32, 5, $this->encodeText($lang['srv_analiza_opisne_arguments']), 1, 'C', 0, 1, 0 ,0, true);
+
+ //tretja vrstica
+ $text = array();
+
+ $text[] = '';
+ $text[] = '';
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_frequency']);
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_valid']);
+ $text[] = $this->encodeText('% - '.$lang['srv_analiza_opisne_valid']);
+ $text[] = $this->encodeText($lang['srv_analiza_num_units_valid']);
+ $text[] = $this->encodeText('% - '.$lang['srv_analiza_num_units_valid']);
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_frequency']);
+ $text[] = $this->encodeText('%');
+
+ $this->tableRowVerticalCheckbox($text);
+
+ $this->pdf->setFont('','','6');
+ //konec naslovnih vrstic
+
+ $_max_valid = 0;
+ $_max_appropriate = 0;
+ if (count ($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] as $gid => $grid) {
+ if (count ($grid['variables']) > 0)
+ foreach ($grid['variables'] AS $vid => $variable) {
+ if ($variable['other'] != 1) {
+ $_sequence = $variable['sequence'];
+ $cssBack = "anl_bck_desc_2 ".($vid == 0 && $gid != 0 ? 'anl_double_bt ' : '');
+
+ $text = array();
+
+ $text[] = $this->encodeText($variable['variable']);
+ $text[] = $this->encodeText($variable['naslov']);
+
+ // Frekvence
+ $text[] = $this->encodeText((int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt']);
+
+ // Veljavni
+ $text[] = $this->encodeText((int)(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt']+(int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['0']['cnt']));
+
+ // Procent - veljavni
+ $_percent = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] > 0 ) ? 100*SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] : 0;
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($_percent,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%'));
+
+ $_max_appropriate = max($_max_appropriate, (int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt']);
+ $_max_valid = max ($_max_valid, ((int)(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt']+(int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['0']['cnt'])));
+
+ // Ustrezni
+ $text[] = $this->encodeText((int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt']);
+ // % Ustrezni
+ $valid = (int)(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt']+(int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['0']['cnt']);
+ $valid = (int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt'];
+ $_percent = ($_max_appropriate > 0 ) ? 100*$valid / $_max_appropriate : 0;
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($_percent,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%'));
+
+
+ $text[] = $this->encodeText(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt']);
+
+ $_percent = ($_navedbe[$gid] > 0 ) ? 100*SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt'] / $_navedbe[$gid] : 0;
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($_percent,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%'));
+
+ $this->tableRowVerticalCheckbox($text);
+
+ } else {
+ # drugo
+ }
+ }
+
+ $text = array();
+
+ $text[] = '';
+
+ $text[] = $this->encodeText($lang['srv_anl_suma_valid']);
+
+ $text[] = '';
+
+ $text[] = $this->encodeText($_max_valid);
+ $text[] = '';
+
+ $text[] = $this->encodeText($_max_appropriate);
+ $text[] = '';
+
+ $text[] = $this->encodeText($_navedbe[$gid]);
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber('100',SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%'));
+
+ $this->tableRowVerticalCheckbox($text);
+ }
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ self::outputOtherAnswers($oAnswers);
+ }
+ }
+ }
+
+ /** Izriše nagovor
+ *
+ */
+ function sumNagovor($spid,$_from) {
+ global $lang;
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+ $_tip = SurveyAnalysis::getSpremenljivkaLegenda($spremenljivka,'izrazanje');
+ $_oblika = SurveyAnalysis::getSpremenljivkaLegenda($spremenljivka,'skala');
+
+ $this->pdf->setFont('','b','6');
+
+ $this->pdf->ln(5);
+ $this->pdf->MultiCell(18, 5, $this->encodeText($spremenljivka['variable']), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(162, 5, $this->encodeText($spremenljivka['naslov']), 1, 'L', 0, 1, 0 ,0, true);
+ }
+
+ /** Izriše number odgovore v vertikalni obliki
+ *
+ * @param unknown_type $spid
+ */
+ function sumNumberVertical($spid,$_from) {
+ global $lang;
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ # dodamo opcijo kje izrisujemo legendo
+ # Äe je besedilo * in je samo ena kategorija je inline legenda false
+ $inline_legenda = (SurveyAnalysis::$_HEADERS[$spid]['cnt_all'] == 1 || in_array($spremenljivka['tip'],array(1,8) ) ) ? false: true;
+ $options=array('inline_legenda' => $inline_legenda, 'isTextAnswer' => false, 'isOtherAnswer' => false, 'textAnswerExceed' => false);
+
+ # ali izpisujemo enoto:
+ $show_enota = true;
+ if ((int)$spremenljivka['enota'] == 0 && SurveyAnalysis::$_HEADERS[$spid]['cnt_all'] == 1) {
+ $show_enota = false;
+ }
+
+ # ugotovimo koliko imamo kolon
+ if (count($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $_clmn_cnt[$gid] = $grid['cnt_vars']-$grid['cnt_other'];
+ if (count($grid['variables']) > 0)
+ foreach ($grid['variables'] AS $vid => $variable) {
+ $_sequence = $variable['sequence'];
+ $_approp_cnt[$gid] = max($_approp_cnt[$gid], SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt']);
+
+ # za povpreÄje
+ $sum_xi_fi=0;
+ $N = 0;
+ $div=0;
+ $min = null;
+ $max = null;
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']) > 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'] AS $xi => $_validFreq) {
+
+ $fi = $_validFreq['cnt'];
+ $sum_xi_fi += $xi * $fi ;
+ $N += $fi;
+ $min = $min != null ? min($min,$xi) : $xi;
+ $max = max($max,$xi);
+ }
+ }
+
+ #povpreÄje
+ $avg = ($N > 0) ? $sum_xi_fi / $N : 0;
+ $sum_avg += $avg;
+ SurveyAnalysis::$_FREQUENCYS[$_sequence]['validAvg'] = $avg;
+ SurveyAnalysis::$_FREQUENCYS[$_sequence]['validMin'] = $min;
+ SurveyAnalysis::$_FREQUENCYS[$_sequence]['validMax'] = $max;
+
+ #standardna diviacija
+ $div = 0;
+ $sum_pow_xi_fi_avg = 0;
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']) > 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'] AS $xi => $_validFreq) {
+ $fi = $_validFreq['cnt'];
+ $sum_pow_xi_fi_avg += pow(($xi - $avg),2) * $fi;
+ }
+ }
+ SurveyAnalysis::$_FREQUENCYS[$_sequence]['validDiv'] = (($N -1) > 0) ? sqrt($sum_pow_xi_fi_avg / ($N -1)) : 0;
+
+ #doloÄimo Å¡e polja drugo za kasnejÅ¡i prikaz
+ if ($variable['other'] == true) {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ }
+ }
+
+ //prva vrstica
+ $this->pdf->setFont('','b','6');
+ $this->pdf->ln(5);
+ $this->pdf->MultiCell(18, 5, $this->encodeText($spremenljivka['variable']), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(162, 5, $this->encodeText($spremenljivka['naslov']), 1, 'L', 0, 1, 0 ,0, true);
+
+ //druga vrstica
+ $text = array();
+
+ $text[] = '';
+
+ if ($show_enota) {
+ if ($spremenljivka['tip'] == 20 || $spremenljivka['tip'] == 7) {
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_subquestion']);;
+ } else {
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_variable_text']);
+ }
+ } else {
+ $text[] = '';
+ }
+
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_m']);
+ $text[] = $this->encodeText($lang['srv_analiza_num_units']);
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_povprecje']);
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_odklon']);
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_min']);
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_max']);
+
+ $this->tableRowNumberVertical($text);
+
+ $this->pdf->setFont('','','6');
+ //konec naslovnih vrstic
+
+ $_answersOther = array();
+ $_grupa_cnt = 0;
+ if (count($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ if (count($spremenljivka['grids']) > 1 && $_grupa_cnt !== 0 && $spremenljivka['tip'] != 6) {
+ $grid['new_grid'] = true;
+ }
+
+ $_grupa_cnt ++;
+ if (count($grid['variables']) > 0) {
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if ($variable['other'] != true) {
+ $_sequence = $variable['sequence'];
+
+ $text = array();
+
+ if ($spremenljivka['tip'] != 7 ) {
+ $text[] = $this->encodeText($variable['variable']);
+ }
+ else
+ $text[] = '';
+
+ if ($show_enota) {
+ $text[] = $this->encodeText((count($grid['variables']) > 1 && $spremenljivka['tip'] == 20 ? $grid['naslov'] . ' - ' : '' ).$variable['naslov']);
+ } else {
+ $text[] = '';;
+ }
+
+ $text[] = (int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'];
+ $text[] = (int)$_approp_cnt[$gid];
+ $text[] = SurveyAnalysis::formatNumber(SurveyAnalysis::$_FREQUENCYS[$_sequence]['validAvg'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'');
+ $text[] = SurveyAnalysis::formatNumber(SurveyAnalysis::$_FREQUENCYS[$_sequence]['validDiv'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_DEVIATION'),'');
+ $text[] = (int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['validMin'];
+ $text[] = (int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['validMax'];
+
+ $this->tableRowNumberVertical($text);
+
+ } else {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ $grid['new_grid'] = false;
+ }
+
+ }
+ }
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ self::outputOtherAnswers($oAnswers);
+ }
+ }
+ }
+
+ /** Izriše sumarnik v horizontalni obliki za multigrid
+ *
+ * @param unknown_type $spid - spremenljivka ID
+ */
+ function sumHorizontal($spid,$_from) {
+
+ global $lang;
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+ $_answersOther = array();
+ $_clmn_cnt = count($spremenljivka['options']);
+
+ # pri razvrÅ¡Äanju dodamo dva polja za povpreÄje in odklon
+ $additional_field = false;
+ $add_fld = 0;
+
+ if ($spremenljivka['tip'] == 17 || $spremenljivka['tip'] == 1 || $spremenljivka['tip'] == 3 || ($spremenljivka['tip'] == 6 && $spremenljivka['skala'] != 1)) {
+ $additional_field = true;
+ $add_fld = 2;
+ }
+
+ # pri radiu in dropdown ne prikazujemo podvprašanj
+ $_sub_question_col = 1;
+ if ($spremenljivka['tip'] == 1 || $spremenljivka['tip'] == 3) {
+ $_sub_question_col = 0;
+ }
+
+ //prva vrstica
+ $this->pdf->setFont('','b','6');
+ $this->pdf->ln(5);
+ $this->pdf->MultiCell(18, 5, $this->encodeText($spremenljivka['variable']), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(162, 5, $this->encodeText($spremenljivka['naslov']), 1, 'L', 0, 1, 0 ,0, true);
+
+ //druga vrstica
+ $this->pdf->MultiCell(18, 5, $this->encodeText(''), 1, 'L', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(30, 5, $this->encodeText($lang['srv_analiza_opisne_subquestion']), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(72, 5, $this->encodeText($lang['srv_analiza_opisne_answers']), 1, 'C', 0, 0, 0 ,0, true);
+
+ if ($additional_field){
+ $this->pdf->MultiCell(15, 5, $this->encodeText($lang['srv_analiza_opisne_valid']), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(15, 5, $this->encodeText($lang['srv_analiza_num_units']), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(15, 5, $this->encodeText($lang['srv_analiza_opisne_povprecje']), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(15, 5, $this->encodeText($lang['srv_analiza_opisne_odklon']), 1, 'C', 0, 1, 0 ,0, true);
+ }
+ else{
+ $this->pdf->MultiCell(30, 5, $this->encodeText($lang['srv_analiza_opisne_valid']), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(30, 5, $this->encodeText($lang['srv_analiza_num_units']), 1, 'C', 0, 1, 0 ,0, true);
+ }
+
+ //tretja vrstica
+ $text = array();
+ $count = 0;
+ $height_title = 0;
+ if (count($spremenljivka['options']) > 0) {
+
+ $singleWidth = round(57 / count($spremenljivka['options']));
+
+ foreach ( $spremenljivka['options'] as $key => $kategorija) {
+ // misinge imamo zdruzene
+ $_label = $kategorija;
+ $text[] = $_label;
+
+ $height_title = ($height_title < $this->getCellHeight($_label, $singleWidth)) ? $this->getCellHeight($_label, $singleWidth) : $height_title;
+ $count++;
+ }
+ }
+
+ $this->pdf->MultiCell(18, $height_title, $this->encodeText(''), 1, 'L', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(30, $height_title, $this->encodeText(''), 1, 'C', 0, 0, 0 ,0, true);
+
+ $this->dynamicCells($text, $count, 57, $height_title);
+
+ $this->pdf->MultiCell(15, $height_title, $this->encodeText($lang['srv_anl_suma1']), 1, 'C', 0, 0, 0 ,0, true);
+ if ($additional_field){
+ $this->pdf->MultiCell(15, $height_title, $this->encodeText(''), 1, 'L', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(15, $height_title, $this->encodeText(''), 1, 'L', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(15, $height_title, $this->encodeText(''), 1, 'L', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(15, $height_title, $this->encodeText(''), 1, 'L', 0, 1, 0 ,0, true);
+ }
+ else{
+ $this->pdf->MultiCell(30, $height_title, $this->encodeText(''), 1, 'L', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(30, $height_title, $this->encodeText(''), 1, 'L', 0, 1, 0 ,0, true);
+ }
+
+ $this->pdf->setFont('','','6');
+ //konec naslovnih vrstic
+
+
+ #zlopamo skozi gride
+ $podtabela = 0;
+ if (count($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ # zloopamo skozi variable
+ if (count($grid['variables']) > 0)
+ foreach ($grid['variables'] AS $vid => $variable ) {
+ $_sequence = $variable['sequence'];
+ if ($variable['other'] != true) {
+
+ // Ce gre za dvojno tabelo naredimo vrstico s naslovom podtabele
+ if($spremenljivka['tip'] == 6 && $spremenljivka['enota'] == 3){
+
+ // ÄŒe zaÄnemo z drugo podtabelo izpiÅ¡emo vrstico z naslovom
+ if($podtabela != $grid['part']){
+
+ $subtitle = $spremenljivka['double'][$grid['part']]['subtitle'];
+ $subtitle = $subtitle == '' ? $lang['srv_grid_subtitle_def'].' '.$grid['part'] : $subtitle;
+
+ $this->pdf->setFont('','b','6');
+ $this->pdf->MultiCell(180, $height_title, $this->encodeText($subtitle), 1, 'C', 0, 1, 0 ,0, true);
+ $this->pdf->setFont('','','6');
+
+ $podtabela = $grid['part'];
+ }
+ }
+
+ if($variable['naslov'] == '')
+ $variable['naslov'] = '';
+
+ /*$linecount = $this->pdf->getNumLines($this->encodeText($variable['naslov']), 30);
+ $linecount == 1 ? $height = 4.7 : $height = 4.7 + ($linecount-1)*3.3;*/
+ $height = $this->getCellHeight($this->encodeText($variable['naslov']), 30);
+ $height = ($height < 8 ? 8 : $height);
+
+ //ce smo na prelomu strani
+ if( ($this->pdf->getY() + $height) > 270){
+ $this->drawLine();
+ $this->pdf->AddPage('P');
+ $arrayParams['border'] .= 'T';
+ }
+
+ $this->pdf->MultiCell(18, $height, $this->encodeText($variable['variable']), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(30, $height, $this->encodeText($variable['naslov']), 1, 'C', 0, 0, 0 ,0, true);
+
+ # za odklon in povpreÄje
+ $sum_xi_fi=0;
+ $N = 0;
+ $div=0;
+
+ $count = 0;
+ $text = array();
+ if (count($spremenljivka['options']) > 0) {
+ foreach ( $spremenljivka['options'] as $key => $kategorija) {
+ if ($additional_field) { # za odklon in povpreÄje
+ $xi = $key;
+ $fi = SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'][$key]['cnt'];
+ $sum_xi_fi += $xi * $fi ;
+ $N += $fi;
+ }
+
+ $_percent = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] > 0 ) ? SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'][$key]['cnt'] * 100 / SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] : 0;
+
+ $text[] = SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'][$key]['cnt'].' ('.SurveyAnalysis::formatNumber($_percent,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%').')';
+
+ $count++;
+ }
+ }
+ $this->dynamicCells($text, $count, 57, $height);
+
+ // suma
+ $this->pdf->MultiCell(15, $height, $this->encodeText((int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'].' ('.SurveyAnalysis::formatNumber(100,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%').')'), 1, 'C', 0, 0, 0 ,0, true);
+
+ // zamenjano veljavni ustrezni
+ if ($additional_field){
+ $this->pdf->MultiCell(15, $height, $this->encodeText(SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt']), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(15, $height, $this->encodeText(SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt']), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ else{
+ $this->pdf->MultiCell(30, $height, $this->encodeText(SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt']), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(30, $height, $this->encodeText(SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt']), 1, 'C', 0, 1, 0 ,0, true);
+ }
+
+ # za odklon in povpreÄje
+ if ($additional_field){
+ # odklon
+ $avg = ($N > 0) ? $sum_xi_fi / $N : 0;
+ #standardna diviacija
+ $div = 0;
+ $sum_pow_xi_fi_avg = 0;
+ if (count($spremenljivka['options']) > 0) {
+ foreach ( $spremenljivka['options'] as $xi => $kategorija) {
+ $fi = SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'][$xi]['cnt'];
+ $sum_pow_xi_fi_avg += pow(($xi - $avg),2) * $fi;
+ }
+ }
+ $div = (($N -1) > 0) ? sqrt($sum_pow_xi_fi_avg / ($N -1)) : 0;
+
+ $this->pdf->MultiCell(15, $height, $this->encodeText(SurveyAnalysis::formatNumber($avg,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'')), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(15, $height, $this->encodeText(SurveyAnalysis::formatNumber($div,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'')), 1, 'C', 0, 1, 0 ,0, true);
+ }
+ }
+ else {
+ # immamo polje drugo
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ }
+ }
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ self::outputOtherAnswers($oAnswers);
+ }
+ }
+ }
+
+ /** Izriše tekstovne odgovore v vertikalni obliki
+ *
+ * @param unknown_type $spid
+ */
+ function sumTextVertical($spid,$_from) {
+ global $lang;
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ # dodamo opcijo kje izrisujemo legendo
+ # Äe je besedilo * in je samo ena kategorija je inline legenda false
+ $inline_legenda = (SurveyAnalysis::$_HEADERS[$spid]['cnt_all'] == 1 || in_array($spremenljivka['tip'],array(1,8) ) ) ? false: true;
+ $options=array('inline_legenda' => $inline_legenda, 'isTextAnswer' => false, 'isOtherAnswer' => false, 'textAnswerExceed' => false);
+
+
+ //prva vrstica
+ $this->pdf->setFont('','b','6');
+ $this->pdf->ln(5);
+ $this->pdf->MultiCell(18, 5, $this->encodeText($spremenljivka['variable']), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(162, 5, $this->encodeText($spremenljivka['naslov']), 1, 'L', 0, 1, 0 ,0, true);
+
+ //druga vrstica
+ $this->tableHeader();
+ $this->pdf->setFont('','','6');
+ //konec naslovnih vrstic
+
+
+ $_answersOther = array();
+ $_grids_count = count($spremenljivka['grids']);
+ if ($_grids_count > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $_variables_count = count($grid['variables']);
+ if ($_variables_count > 0)
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if ($variable['other'] != true) {
+ # dodamo dodatne vrstice z labelami grida
+ if ($_variables_count > 1) {
+ self::outputGridLabelVertical($gid,$grid,$vid,$variable,$spid,$options);
+ }
+
+ $maxAnswer = (SurveyDataSettingProfiles :: getSetting('numOpenAnswers') > 0) ? SurveyDataSettingProfiles :: getSetting('numOpenAnswers') : 30;
+ $counter = 0;
+ $_kumulativa = 0;
+ //SurveyAnalysis::$_FREQUENCYS[$_sequence]
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'] AS $vkey => $vAnswer) {
+ if (/*$vAnswer['cnt'] > 0 &&*/ $counter < $maxAnswer) { # izpisujemo samo tiste ki nisno 0
+ # ali prikažemo vse odgovore ali pa samo toliko koliko je nastavljeno v TEXT_ANSWER_LIMIT
+ $textAnswerExceed = ($counter >= TEXT_ANSWER_LIMIT && count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']) > TEXT_ANSWER_LIMIT+2) ? true : false; # ali zaÄnemo skrivati tekstovne odgovore
+ $options['isTextAnswer']=true;
+ $options['textAnswerExceed'] = $textAnswerExceed;
+ $counter = self::outputValidAnswerVertical($counter,$vkey,$vAnswer,$_sequence,$spid,$_kumulativa,$options);
+ }
+ }
+ # izpišemo sumo veljavnih
+ $counter = self::outputSumaValidAnswerVertical($counter,$_sequence,$spid,$options);
+ }
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'] AS $ikey => $iAnswer) {
+ if ($iAnswer['cnt'] > 0 ) { # izpisujemo samo tiste ki nisno 0
+ $counter = self::outputInvalidAnswerVertical($counter,$ikey,$iAnswer,$_sequence,$spid,$options);
+ }
+ }
+ # izpišemo sumo veljavnih
+ $counter = self::outputSumaInvalidAnswerVertical($counter,$_sequence,$spid,$options);
+ }
+ #izpišemo še skupno sumo
+ $counter = self::outputSumaVertical($counter,$_sequence,$spid,$options);
+ } else {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ }
+ }
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && self::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ self::outputOtherAnswers($oAnswers);
+ }
+ }
+ }
+
+ /** Izriše lokacijske odgovore kot tabelo z navedbami
+ *
+ * @param unknown_type $spid
+ */
+ function sumLokacija($spid,$_from) {
+ global $lang;
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+ $enota = $spremenljivka['enota'];
+
+ # dodamo opcijo kje izrisujemo legendo
+ # Äe je besedilo * in je samo ena kategorija je inline legenda false
+
+ $_cols = $spremenljivka['cnt_all'] / $spremenljivka['cnt_grids'];
+
+ # koliko zapisov prikažemo naenkrat
+ $num_show_records = SurveyAnalysis::getNumRecords();
+
+ $_answers = SurveyAnalysis::getAnswers($spremenljivka,$num_show_records);
+
+ $_all_valid_answers_cnt = $_answers['validCnt'];
+ $_valid_answers = $_answers['valid'];
+
+ //prva vrstica
+ $this->pdf->setFont('','b','6');
+ $this->pdf->ln(5);
+ $this->pdf->MultiCell(18, 5, $this->encodeText($spremenljivka['variable']), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(162, 5, $this->encodeText($spremenljivka['naslov']), 1, 'L', 0, 1, 0 ,0, true);
+
+ $this->pdf->setFont('','','6');
+ //konec naslovnih vrstic
+
+
+ $_answersOther = array();
+ $_grids_count = count($spremenljivka['grids']);
+ if ($_grids_count > 0) {
+ # naslovna vrstica
+ $_row = $spremenljivka['grids'][0];
+
+ $height = 0;
+
+ $count = 0;
+ $text = array();
+ foreach ($_row['variables'] AS $rid => $_col ){
+ $_sequence = $_col['sequence']; # id kolone z podatki
+
+ if ($_col['other'] != true) {
+ $text[] = $_col['naslov'];
+ }
+ else {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+
+ $count++;
+ }
+
+ // Testiramo visino vrstice glede na najdaljsi text
+ foreach ($text AS $string){
+ $singleWidth = ($count > 0) ? round(162 / $count): 162;
+ $height = ($this->getCellHeight($string, $singleWidth) > $height) ? $this->getCellHeight($string, $singleWidth) : $height;
+ }
+
+ $this->pdf->MultiCell(18, $height, $this->encodeText(''), 1, 'C', 0, 0, 0 ,0, true);
+
+ $this->dynamicCells($text, $count, 162, $height);
+ $this->pdf->ln($height);
+
+ $last = 0;
+
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $_variables_count = count($grid['variables']);
+ $height = 0;
+
+ if ($_variables_count > 0) {
+ # preštejemo max vrstic na grupo
+ $_max_i = 0;
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ $_max_i = max($_max_i,min($num_show_records,SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt']));
+ }
+
+ # za barvanje
+ $last = ($last & 1) ? 0 : 1 ;
+
+ $count = 0;
+ $text = array();
+
+ $answers = array();
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if ($variable['other'] != true) {
+ # tabela z navedbami
+ $index=0;
+ # odvisno ali imamo odgovor
+ if (count($_valid_answers) > 0) {
+ $text2 = '(';
+ foreach ($_valid_answers AS $answer) {
+
+ $_ans = $answer[$_sequence];
+ if($enota != 3)
+ $_ans = str_replace("<br>","), (",$_ans);
+
+ if ($_ans != null && $_ans != '') {
+ if($enota == 3)
+ $text2 .= $_ans."), (";
+ else
+ $answers[$count][$index]='('.$this->encodeText($_ans).')';
+ }
+
+ $index++;
+ }
+ if($enota == 3)
+ $text[] = substr($text2, 0, -3);
+ }
+ else {
+ $text[] = '&nbsp;';
+ }
+
+ $count++;
+ }
+
+ }
+ $last = $_max_i;
+ }
+
+ if($enota != 3){
+ for($i=0; $i<sizeof($answers[0]); $i++){
+ $row = array();
+ for($j=0; $j<$count; $j++){
+ // Testiramo visino vrstice glede na najdaljsi text
+ $singleWidth = ($count > 0) ? round(162 / $count): 162;
+ $height = ($this->getCellHeight($answers[$j][$i], $singleWidth) > $height) ? $this->getCellHeight($answers[$j][$i], $singleWidth) : $height;
+ $row[$j] = $answers[$j][$i];
+ }
+
+ $this->sumLokacijaRowOutput($row, $count, $height, $grid['variable']);
+ }
+ }
+ else{
+ // Testiramo visino vrstice glede na najdaljsi text
+ foreach ($text AS $string){
+ $singleWidth = ($count > 0) ? round(162 / $count): 162;
+ $height = ($this->getCellHeight($string, $singleWidth) > $height) ? $this->getCellHeight($string, $singleWidth) : $height;
+ }
+ $this->sumLokacijaRowOutput($text, $count, $height, $grid['variable']);
+ }
+ }
+ }
+ }
+
+ /**
+ * Izrise vrstico prilagojeno za lokacijo
+ *
+ * @param type $text - array odgovorov
+ * @param type $count - st variabel/stolpcev
+ * @param type $height - izracunana najvisja visina celice v vrstici
+ * @param type $variable - array variabel/stolpcev
+ */
+ function sumLokacijaRowOutput($text, $count, $height, $variable) {
+ $this->pdf->MultiCell(18, $height, $this->encodeText($variable), 1, 'C', 0, 0, 0 ,0, true);
+ $this->dynamicCells($text, $count, 162, $height);
+ $this->pdf->ln($height);
+ }
+
+ /** Izriše tekstovne odgovore kot tabelo z navedbami
+ *
+ * @param unknown_type $spid
+ */
+ function sumMultiText($spid,$_from) {
+ global $lang;
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ # dodamo opcijo kje izrisujemo legendo
+ # Äe je besedilo * in je samo ena kategorija je inline legenda false
+
+ $_cols = $spremenljivka['cnt_all'] / $spremenljivka['cnt_grids'];
+
+ # pogledamo koliko je max št odgovorov pri posameznem podvprašanju
+/* $_max_answers = array();
+ $_max_answers_cnt = 0;
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+
+ $_variables_count = count($grid['variables']);
+ if ($_variables_count > 0) {
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ $_max_answers[$gid][$vid] = count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']);
+ $_max_answers_cnt = max( $_max_answers_cnt, count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']) );
+ }
+ }
+ }
+*/
+ # koliko zapisov prikažemo naenkrat
+ $num_show_records = SurveyAnalysis::getNumRecords();
+ //$num_show_records = $_max_answers_cnt <= (int)$num_show_records ? $_max_answers_cnt : $num_show_records;
+
+ $_answers = SurveyAnalysis::getAnswers($spremenljivka,$num_show_records);
+
+ $_all_valid_answers_cnt = $_answers['validCnt'];
+ $_valid_answers = $_answers['valid'];
+
+ //prva vrstica
+ $this->pdf->setFont('','b','6');
+ $this->pdf->ln(5);
+ $this->pdf->MultiCell(18, 5, $this->encodeText($spremenljivka['variable']), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(162, 5, $this->encodeText($spremenljivka['naslov']), 1, 'L', 0, 1, 0 ,0, true);
+
+ //druga vrstica
+ $this->pdf->MultiCell(18, 5, $this->encodeText(''), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(54, 5, $this->encodeText($lang['srv_analiza_opisne_subquestion']), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(108, 5, $this->encodeText($lang['srv_analiza_opisne_arguments']), 1, 'C', 0, 1, 0 ,0, true);
+
+ $this->pdf->setFont('','','6');
+ //konec naslovnih vrstic
+
+
+ $_answersOther = array();
+ $_grids_count = count($spremenljivka['grids']);
+ if ($_grids_count > 0) {
+ # naslovna vrstica
+ $_row = $spremenljivka['grids'][0];
+
+ $height = 0;
+
+ $count = 0;
+ $text = array();
+ foreach ($_row['variables'] AS $rid => $_col ){
+ $_sequence = $_col['sequence']; # id kolone z podatki
+
+ if ($_col['other'] != true) {
+ $text[] = $_col['naslov'];
+ }
+ else {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+
+ $count++;
+ }
+
+ // Testiramo visino vrstice glede na najdaljsi text
+ foreach ($text AS $string){
+ $singleWidth = ($count > 0) ? round(108 / $count): 108;
+ $height = ($this->getCellHeight($string, $singleWidth) > $height) ? $this->getCellHeight($string, $singleWidth) : $height;
+ }
+
+ $this->pdf->MultiCell(18, $height, $this->encodeText(''), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(54, $height, $this->encodeText(''), 1, 'C', 0, 0, 0 ,0, true);
+
+ $this->dynamicCells($text, $count, 108, $height);
+ $this->pdf->ln($height);
+
+ $last = 0;
+
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $_variables_count = count($grid['variables']);
+ $height = 0;
+
+ if ($_variables_count > 0) {
+ # preštejemo max vrstic na grupo
+ $_max_i = 0;
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ $_max_i = max($_max_i,min($num_show_records,SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt']));
+ }
+
+ # za barvanje
+ $last = ($last & 1) ? 0 : 1 ;
+
+ $count = 0;
+ $text = array();
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if ($variable['other'] != true) {
+ # tabela z navedbami
+ $index=0;
+ # odvisno ali imamo odgovor
+ if (count($_valid_answers) > 0) {
+ $text2 = '';
+ foreach ($_valid_answers AS $answer) {
+ $index++;
+
+ $_ans = $answer[$_sequence];
+
+ if ($_ans != null && $_ans != '') {
+ $text2 .= $_ans.', ';
+ }
+ }
+ $text[] = substr($text2, 0, -2);
+ }
+ else {
+ $text[] = '&nbsp;';
+ }
+
+ $count++;
+ }
+
+ }
+ $last = $_max_i;
+ }
+
+ // Testiramo visino vrstice glede na najdaljsi text
+ foreach ($text AS $string){
+ $singleWidth = ($count > 0) ? round(108 / $count): 108;
+ $height = ($this->getCellHeight($string, $singleWidth) > $height) ? $this->getCellHeight($string, $singleWidth) : $height;
+ }
+
+ $this->pdf->MultiCell(18, $height, $this->encodeText($grid['variable']), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(54, $height, $this->encodeText($grid['naslov']), 1, 'C', 0, 0, 0 ,0, true);
+
+ $this->dynamicCells($text, $count, 108, $height);
+ $this->pdf->ln($height);
+ }
+ }
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ self::outputOtherAnswers($oAnswers);
+ }
+ }
+ }
+
+ /** IzriÅ¡e multi number odgovore. izpiÅ¡e samo povpreÄja
+ *
+ * @param unknown_type $spid
+ */
+ function sumMultiNumber($spid,$_from) {
+ global $lang;
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ $_cols = $spremenljivka['cnt_all'] / $spremenljivka['cnt_grids'];
+
+
+ //prva vrstica
+ $this->pdf->setFont('','b','6');
+ $this->pdf->ln(5);
+ $this->pdf->MultiCell(18, 5, $this->encodeText($spremenljivka['variable']), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(162, 5, $this->encodeText($spremenljivka['naslov']), 1, 'L', 0, 1, 0 ,0, true);
+
+ //druga vrstica
+ $this->pdf->MultiCell(18, 5, $this->encodeText(''), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(54, 5, $this->encodeText($lang['srv_analiza_opisne_subquestion']), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(108, 5, $this->encodeText($lang['srv_analiza_sums_average']), 1, 'C', 0, 1, 0 ,0, true);
+
+ $this->pdf->setFont('','','6');
+ //konec naslovnih vrstic
+
+
+ $_answersOther = array();
+ $_grids_count = count($spremenljivka['grids']);
+ if ($_grids_count > 0) {
+ # naslovna vrstica
+ $_row = $spremenljivka['grids'][0];
+
+ $this->pdf->MultiCell(18, 13, $this->encodeText(''), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(54, 13, $this->encodeText(''), 1, 'C', 0, 0, 0 ,0, true);
+
+ $count = 0;
+ $text = array();
+ foreach ($_row['variables'] AS $rid => $_col ){
+ $_sequence = $_col['sequence']; # id kolone z podatki
+
+ if ($_col['other'] != true) {
+ $text[] = $_col['naslov'];
+ }
+ else {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+
+ $count++;
+ }
+ $this->dynamicCells($text, $count, 108, 13);
+ $this->pdf->ln(5);
+
+ $last = 0;
+
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $_variables_count = count($grid['variables']);
+
+ $this->pdf->MultiCell(18, 5, $this->encodeText($grid['variable']), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(54, 5, $this->encodeText($grid['naslov']), 1, 'C', 0, 0, 0 ,0, true);
+
+
+ if ($_variables_count > 0) {
+
+ $count = 0;
+ $text = array();
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if ($variable['other'] != true) {
+ # tabela z navedbami
+ $text[] = SurveyAnalysis::formatNumber(SurveyAnalysis::$_FREQUENCYS[$_sequence]['average'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'');
+ }
+ $count++;
+ }
+ $this->dynamicCells($text, $count, 108, 5);
+ $this->pdf->ln(5);
+ }
+ }
+ }
+ }
+
+
+ /** Izriše sumarnik v horizontalni obliki za multi checbox
+ *
+ * @param unknown_type $spid - spremenljivka ID
+ */
+ function sumMultiHorizontalCheckbox($spid,$_from) {
+ global $lang;
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+ $_answersOther = array();
+
+ # ugotovimo koliko imamo kolon
+ $gid=0;
+ $_clmn_cnt = SurveyAnalysis::$_HEADERS[$spid]['grids'][$gid]['cnt_vars']-SurveyAnalysis::$_HEADERS[$spid]['grids'][$gid]['cnt_other'];
+ # tekst vprašanja
+
+
+ //prva vrstica
+ $this->pdf->setFont('','b','6');
+ $this->pdf->ln(5);
+ $this->pdf->MultiCell(18, 5, $this->encodeText($spremenljivka['variable']), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(162, 5, $this->encodeText($spremenljivka['naslov']), 1, 'L', 0, 1, 0 ,0, true);
+
+ //druga vrstica
+ $this->pdf->MultiCell(18, 5, $this->encodeText(''), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(18, 5, $this->encodeText($lang['srv_analiza_opisne_subquestion']), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(54, 5, $this->encodeText($lang['srv_analiza_opisne_answers']), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(18, 5, $this->encodeText($lang['srv_analiza_opisne_valid']), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(18, 5, $this->encodeText($lang['srv_analiza_num_units']), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(54, 5, $this->encodeText($lang['srv_analiza_opisne_arguments']), 1, 'C', 0, 1, 0 ,0, true);
+
+ $this->pdf->setFont('','','6');
+ $_variables = SurveyAnalysis::$_HEADERS[$spid]['grids'][$gid]['variables'];
+
+ //tretja vrstica
+ $count = 0;
+ $height = 0;
+ $text = array();
+ foreach ($_variables AS $vkey => $variable) {
+ if ($variable['other'] != true) {
+ $text[] = $variable['naslov'].' ('.$variable['gr_id']. ')';
+
+ $singleWidth = round(54 / (count($_variables) + 1));
+ $height = ($height < $this->getCellHeight($variable['naslov'].' ('.$variable['gr_id']. ')', $singleWidth)) ? $this->getCellHeight($variable['naslov'].' ('.$variable['gr_id']. ')', $singleWidth) : $height;
+ }
+
+ $count++;
+ }
+
+ $this->pdf->MultiCell(18, $height, $this->encodeText(''), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(18, $height, $this->encodeText(''), 1, 'C', 0, 0, 0 ,0, true);
+
+ $this->dynamicCells($text, $count, 54, $height);
+
+ $this->pdf->MultiCell(18, $height, $this->encodeText(''), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(18, $height, $this->encodeText(''), 1, 'C', 0, 0, 0 ,0, true);
+
+ $count = 0;
+ $text = array();
+ foreach ($_variables AS $vkey => $variable) {
+ if ($variable['other'] != true) {
+ $text[] = $variable['naslov'].' ('.$variable['gr_id']. ')';
+ }
+ $count++;
+ }
+ $this->dynamicCells($text, $count, 44, $height);
+
+ $this->pdf->MultiCell(10, $height, $this->encodeText($lang['srv_anl_suma1']), 1, 'C', 0, 1, 0 ,0, true);
+
+
+ //vrstice s podatki
+ foreach (SurveyAnalysis::$_HEADERS[$spid]['grids'] AS $gid => $grids) {
+
+ $_cnt = 0;
+ $height = $this->getCellHeight($this->encodeText($grids['naslov']), 18);
+ $height = ($height < 8 ? 8 : $height);
+
+ # vodoravna vrstice s podatki
+ $this->pdf->MultiCell(18, $height, $this->encodeText($grids['variable']), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(18, $height, $this->encodeText($grids['naslov']), 1, 'C', 0, 0, 0 ,0, true);
+
+ $_arguments = 0;
+
+ $_max_appropriate = 0;
+ $_max_cnt = 0;
+ // prikaz frekvenc
+ $count = 0;
+ $text = array();
+ foreach ($grids['variables'] AS $vkey => $variable) {
+ $_sequence = $variable['sequence'];
+ $_valid = SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'];
+ $_cnt = SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt'];
+ $_arguments += $_cnt;
+
+ $_max_appropriate = max($_max_appropriate, (int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt']);
+ $_max_cnt = max ($_max_cnt, ((int)(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt']+(int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['0']['cnt'])));
+
+ if ($variable['other'] == true) {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vkey,'sequence'=>$_sequence);
+ }
+
+ if ($variable['other'] != true) {
+ $_percent = ($_valid > 0 ) ? $_cnt * 100 / $_valid : 0;
+
+ $text[] = $_cnt . ' (' . SurveyAnalysis::formatNumber($_percent,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%') . ')';
+ $count++;
+ }
+
+ }
+ $this->dynamicCells($text, $count, 54, $height);
+
+ # veljavno
+ $this->pdf->MultiCell(18, $height, $this->encodeText($_max_cnt), 1, 'C', 0, 0, 0 ,0, true);
+ #ustrezno
+ $this->pdf->MultiCell(18, $height, $this->encodeText($_max_appropriate), 1, 'C', 0, 0, 0 ,0, true);
+
+
+ $count = 0;
+ $text = array();
+ foreach ($grids['variables'] AS $vkey => $variable) {
+ if ($variable['other'] != true) {
+ $_sequence = $variable['sequence'];
+ $_cnt = SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt'];
+
+ $_percent = ($_arguments > 0 ) ? $_cnt * 100 / $_arguments : 0;
+
+ $text[] = $_cnt . ' (' . SurveyAnalysis::formatNumber($_percent,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%') . ')';
+ $count++;
+ }
+ }
+ $this->dynamicCells($text, $count, 44, $height);
+
+ $this->pdf->MultiCell(10, $height, $this->encodeText($_arguments), 1, 'C', 0, 1, 0 ,0, true);
+ }
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ self::outputOtherAnswers($oAnswers);
+ }
+ }
+ }
+
+
+
+ function outputValidAnswerVertical($counter,$vkey,$vAnswer,$_sequence,$spid,&$_kumulativa,$_options=array()) {
+ global $lang;
+
+ $text = array();
+
+ # opcije
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ 'textAnswerExceed'=>false # ali presegamo Å¡tevilo tekstovnih odgovorov za prikaz
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+ $cssBck = ' '.SurveyAnalysis::$cssColors['0_' . ($counter & 1)];
+
+ $_valid = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] > 0 ) ? 100*$vAnswer['cnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] : 0;
+ $_percent = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] > 0 ) ? 100*$vAnswer['cnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] : 0;
+ $_kumulativa += $_valid;
+
+ # ali presegamo Å¡tevilo prikazanih vrstic, takrat v zadnji prikazani dodamo link veÄ.. ostale vrstice pa skrijemo
+ if ($options['textAnswerExceed'] == true) {
+ if ($counter == TEXT_ANSWER_LIMIT ) {
+ # link za veÄ
+ $show_more = '<div id="valid_row_togle_'.$_sequence.'" class="floatRight blue pointer" onclick="showHidenTextRow(\''.$_sequence.'\');return false;">(veÄ...)</div>'.NEW_LINE;
+ } elseif ($counter > TEXT_ANSWER_LIMIT ) {
+ $hide_row = ' hidden';
+ $_exceed = true;
+ }
+ }
+
+ //if ($counter < TEXT_MAX_ANSWER_LIMIT) {
+ $text[] = '';
+
+ $addText = (($options['isTextAnswer'] == false && (string)$vkey != $vAnswer['text']) ? ' ('.$vAnswer['text'] .')' : '');
+ $text[] = $this->encodeText(' '.$vkey.$addText);
+
+ $text[] = (int)$vAnswer['cnt'];
+
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($_percent, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'));
+
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($_valid, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'));
+
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($_kumulativa, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'));
+
+ /*} elseif ($counter == TEXT_MAX_ANSWER_LIMIT ) {
+ echo '<tr id="'.$spid.'_'.$_sequence.'_'.$counter.'" name="valid_row_'.$_sequence.'">';
+ echo '<td class="anl_bl anl_ac anl_br gray anl_dash_bt anl_dash_bb" colspan="'.(6+(int)SurveyAnalysis::$_HEADERS[$spid]['show_valid_percent']+((int)SurveyAnalysis::$_SHOW_LEGENDA*2)).'"> . . . Prikazujemo samo prvih '.TEXT_MAX_ANSWER_LIMIT.' veljavnih odgovorov!</td>';
+ echo '</tr>';
+ }*/
+
+ self::tableRow($text);
+
+ $counter++;
+ return $counter;
+ }
+
+ function outputSumaValidAnswerVertical($counter,$_sequence,$spid,$_options=array()) {
+ global $lang;
+
+ $text = array();
+
+ # opcije
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ 'textAnswerExceed'=>false # ali presegamo Å¡tevilo tekstovnih odgovorov za prikaz
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+
+ $_percent = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] > 0 ) ? 100*SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] : 0;
+
+ $_brez_MV = ((int)SurveyAnalysis::$currentMissingProfile == 2) ? TRUE : FALSE;
+
+ $_sufix = '';
+
+ $text[] = $this->encodeText($lang['srv_anl_valid']);
+ $text[] = $this->encodeText($lang['srv_anl_suma1']);
+
+ $text[] = $this->encodeText(SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] > 0 ? SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] : 0);
+
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($_percent, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'));
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber(100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'));
+
+ $text[] = '';
+
+
+ self::tableRow($text);
+
+ $counter++;
+ return $counter;
+ }
+
+ function outputInvalidAnswerVertical($counter,$vkey,$vAnswer,$_sequence,$spid,$_options=array()) {
+ global $lang;
+
+ $text = array();
+
+ # opcije
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ 'textAnswerExceed'=>false # ali presegamo Å¡tevilo tekstovnih odgovorov za prikaz
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+
+ $_percent = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] > 0 ) ? 100*$vAnswer['cnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] : 0;
+ $_invalid = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'] > 0 ) ? 100*$vAnswer['cnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'] : 0;
+
+ $_sufix = '';
+
+ $_Z_MV = ((int)SurveyAnalysis::$missingProfileData['display_mv_type'] === 2) ? TRUE : FALSE;
+ if($_Z_MV){
+ $text[] = '';
+
+ $text[] = $this->encodeText($vkey.' (' . $vAnswer['text'].')');
+ //echo '<div class="floatRight anl_detail_percent anl_w50 anl_ac anl_dash_bl">'.SurveyAnalysis::formatNumber($_invalid, NUM_DIGIT_PERCENT, '%').'</div>'.NEW_LINE;
+ //echo '<div class="floatRight anl_detail_percent anl_w30 anl_ac">'.$vAnswer['cnt'].'</div>'.NEW_LINE;
+
+ $text[] = $this->encodeText((int)$vAnswer['cnt']);
+
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($_percent, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'));
+
+ $text[] = '';
+ $text[] = '';
+
+ $this->tableRow($text);
+ }
+
+ $counter++;
+ return $counter;
+ }
+
+ function outputSumaInvalidAnswerVertical($counter,$_sequence,$spid,$_options = array()) {
+ global $lang;
+
+ # opcije
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ 'textAnswerExceed'=>false # ali presegamo Å¡tevilo tekstovnih odgovorov za prikaz
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+ $cssBck = ' '.SurveyAnalysis::$cssColors['text_' . ($counter & 1)];
+ $_percent = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] > 0 ) ? 100*SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] : 0;
+
+ $_brez_MV = ((int)SurveyAnalysis::$missingProfileData['display_mv_type'] === 0) ? TRUE : FALSE;
+ if(!$_brez_MV){
+ $text = array();
+
+ $text[] = $this->encodeText($lang['srv_anl_missing']);
+
+ $text[] = $this->encodeText(SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt']);
+
+ $answer['cnt'] = SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'] > 0 ? SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'] : 0;
+ $text[] = $this->encodeText((int)$answer['cnt']);
+
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($_percent, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'));
+ $text[] = '';
+ $text[] = '';
+
+ $this->tableRow($text);
+ }
+
+ $counter++;
+ return $counter;
+ }
+
+ function outputSumaVertical($counter,$_sequence,$spid, $_options = array()) {
+ global $lang;
+
+ # opcije
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ 'textAnswerExceed'=>false # ali presegamo Å¡tevilo tekstovnih odgovorov za prikaz
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+
+ $cssBck = ' '.SurveyAnalysis::$cssColors['0_' .($counter & 1)];
+
+ $_brez_MV = ((int)SurveyAnalysis::$missingProfileData['display_mv_type'] === 0) ? TRUE : FALSE;
+ if(!$_brez_MV){
+
+ $text = array();
+
+ $text[] = '';
+ $text[] = $this->encodeText($lang['srv_anl_suma2']);
+ $text[] = $this->encodeText((SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] ? SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] : 0));
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber('100', SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'));
+ $text[] = '';
+ $text[] = '';
+
+ $this->tableRow($text);
+ }
+
+
+ }
+
+ function outputOtherAnswers($oAnswers) {
+ global $lang;
+ $spid = $oAnswers['spid'];
+ $_variable = SurveyAnalysis::$_HEADERS[$spid]['grids'][$oAnswers['gid']]['variables'][$oAnswers['vid']];
+ $_sequence = $_variable['sequence'];
+ $_frekvence = SurveyAnalysis::$_FREQUENCYS[$_variable['sequence']];
+
+ //prva vrstica
+ $this->pdf->setFont('','b','6');
+ $this->pdf->ln(5);
+ $this->pdf->MultiCell(18, $height, $this->encodeText($_variable['variable']), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(162, $height, $this->encodeText(SurveyAnalysis::$_HEADERS[$oAnswers['spid']]['variable'].' ('.$_variable['naslov'].' )'), 1, 'L', 0, 1, 0 ,0, true);
+
+ //druga vrstica
+ $this->tableHeader();
+ $this->pdf->setFont('','','6');
+ // konec naslovne vrstice
+
+ $counter = 1;
+ $_kumulativa = 0;
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'] AS $vkey => $vAnswer) {
+ if ($vAnswer['cnt'] > 0 ) { # izpisujemo samo tiste ki nisno 0
+ $counter = self::outputValidAnswerVertical($counter,$vkey,$vAnswer,$_sequence,$spid,$_kumulativa,array('isOtherAnswer'=>true));
+ }
+ }
+ # izpišemo sumo veljavnih
+ $counter = self::outputSumaValidAnswerVertical($counter,$_sequence,$spid,array('isOtherAnswer'=>true));
+ }
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'] AS $ikey => $iAnswer) {
+ if ($iAnswer['cnt'] > 0 ) { # izpisujemo samo tiste ki nisno 0
+ $counter = self::outputInvalidAnswerVertical($counter,$ikey,$iAnswer,$_sequence,$spid,array('isOtherAnswer'=>true));
+ }
+ }
+ # izpišemo sumo veljavnih
+ $counter = self::outputSumaInvalidAnswerVertical($counter,$_sequence,$spid,array('isOtherAnswer'=>true));
+ }
+ #izpišemo še skupno sumo
+ $counter = self::outputSumaVertical($counter,$_sequence,$spid,array('isOtherAnswer'=>true));
+ }
+
+ /** za multi grid tekstovne vrstice doda vrstico z labeliami grida
+ *
+ * @param $gkey
+ * @param $gAnswer
+ * @param $spid
+ * @param $_options
+ */
+ function outputGridLabelVertical($gid,$grid,$vid,$variable,$spid,$_options=array()) {
+
+ $text = array();
+
+ $text[] = $this->encodeText($variable['variable']);
+ $text[] = $this->encodeText(($grid['naslov'] != '' ? $grid['naslov']. '&nbsp;-&nbsp;' : '').$variable['naslov']);
+
+ $text[] = '';
+ $text[] = '';
+ $text[] = '';
+ $text[] = '';
+
+ $this->tableRow($text);
+
+ $counter++;
+ return $counter;
+ }
+
+
+
+
+ function createFrontPage(){
+// dodamo prvo stran
+ $this->pdf->AddPage();
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', 16);
+
+ // dodamo naslov
+ $this->pdf->SetFillColor(224, 235, 255);
+ $this->pdf->SetTextColor(0);
+ $this->pdf->SetDrawColor(128, 0, 0);
+ $this->pdf->SetLineWidth(0.1);
+ $this->pdf->Sety(100);
+ $this->pdf->Cell(0, 16, $this->encodeText(SurveyInfo::getInstance()->getSurveyTitle()), 1, 1,'C', 1, 0,0);
+
+
+ // dodamo info:
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', 12);
+ $this->currentStyle = array('width' => 0.1, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(128, 0, 0));
+ $this->pdf->ln(30);
+ // $this->pdf->Write (0, $this->encodeText("Info:"), '', 0, 'l', 1, 1);
+
+ $this->drawLine();
+ // avtorja, št vprašanj, datum kreiranja
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_shortname'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()), 0, 'L', 0, 1, 0 ,0, true);
+ if ( SurveyInfo::getInstance()->getSurveyTitle() != SurveyInfo::getInstance()->getSurveyAkronim())
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_longname'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyTitle()), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_qcount'].': '.SurveyInfo::getInstance()->getSurveyQuestionCount(), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_active_from'].': '.SurveyInfo::getInstance()->getSurveyStartsDate(), 0, 'L', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_active_until'].': '.SurveyInfo::getInstance()->getSurveyExpireDate(), 0, 'L', 0, 1, 0 ,0, true);
+
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_author'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyInsertName()), 0, 'L', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_edit'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyEditName()), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_date'].': '.SurveyInfo::getInstance()->getSurveyInsertDate(), 0, 'L', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_date'].': '.SurveyInfo::getInstance()->getSurveyEditDate(), 0, 'L', 0, 1, 0 ,0, true);
+ if ( SurveyInfo::getInstance()->getSurveyInfo() )
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_desc'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyInfo()), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', FNT_MAIN_SIZE);
+ $this->pdf->SetFillColor(0, 0, 0);
+ }
+
+ function setUserId($usrId) {$this->anketa['uid'] = $usrId;}
+ function getUserId() {return ($this->anketa['uid'])?$this->anketa['uid']:false;}
+
+ function formatNumber($value,$digit=0,$sufix=""){
+ if ( $value <> 0 && $value != null )
+ $result = round($value,$digit);
+ else
+ $result = "0";
+ $result = number_format($result, $digit, ',', '.').$sufix;
+
+ return $result;
+ }
+
+ function drawLine(){
+ $cy = $this->pdf->getY();
+ $this->pdf->Line(15, $cy , 195, $cy , $this->currentStyle);
+ }
+
+
+ function tableHeader(){
+ global $lang;
+
+ $naslov = array();
+ $naslov[] = '';
+ $naslov[] = $this->encodeText($lang['srv_analiza_frekvence_titleAnswers']);
+ $naslov[] = $this->encodeText($lang['srv_analiza_frekvence_titleFrekvenca']);
+ $naslov[] = $this->encodeText($lang['srv_analiza_frekvence_titleOdstotek']);
+ $naslov[] = $this->encodeText($lang['srv_analiza_frekvence_titleVeljavni']);
+ $naslov[] = $this->encodeText($lang['srv_analiza_frekvence_titleKumulativa']);
+
+ $params = array('border' => 'TB', 'bold' => 'B', 'align2' => 'C');
+
+ $this->tableRow($naslov, $params);
+ }
+
+ function tableRow($arrayText, $arrayParams=array()){
+
+ /*$linecount = $this->pdf->getNumLines($this->encodeText($arrayText[1]), 90);
+ $linecount == 1 ? $height = 4.7 : $height = 4.7 + ($linecount-1)*3.3;*/
+ $height = $this->getCellHeight($this->encodeText($arrayText[1]), 90);
+
+ //ce smo na prelomu strani
+ if( ($this->pdf->getY() + $height) > 270){
+ $this->drawLine();
+ $this->pdf->AddPage('P');
+ $arrayParams['border'] .= 'T';
+ }
+
+ if($arrayParams['align2'] != 'C')
+ $arrayParams['align2'] = 'L';
+
+ $this->pdf->MultiCell(18, $height, $this->encodeText($arrayText[0]), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(90, $height, $this->encodeText($arrayText[1]), 1, $arrayParams['align2'], 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(18, $height, $arrayText[2], 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(18, $height, $this->encodeText($arrayText[3]), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(18, $height, $this->encodeText($arrayText[4]), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(18, $height, $this->encodeText($arrayText[5]), 1, 'C', 0, 1, 0 ,0, true);
+ }
+
+ function tableRowVerticalCheckbox($arrayText, $arrayParams=array()){
+
+ if($arrayText[1] == '')
+ $arrayText[1] = '';
+
+ /*$linecount = $this->pdf->getNumLines($this->encodeText($arrayText[1]), 54);
+ $linecount == 1 ? $height = 4.7 : $height = 4.7 + ($linecount-1)*3.3;*/
+ $height = $this->getCellHeight($this->encodeText($arrayText[1]), 54);
+
+ //ce smo na prelomu strani
+ if( ($this->pdf->getY() + $height) > 270){
+ $this->drawLine();
+ $this->pdf->AddPage('P');
+ $arrayParams['border'] .= 'T';
+ }
+
+ $this->pdf->MultiCell(18, $height, $this->encodeText($arrayText[0]), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(50, $height, $this->encodeText($arrayText[1]), 1, 'L', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(16, $height, $this->encodeText($arrayText[2]), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(16, $height, $this->encodeText($arrayText[3]), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(16, $height, $this->encodeText($arrayText[4]), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(16, $height, $this->encodeText($arrayText[5]), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(16, $height, $this->encodeText($arrayText[6]), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(16, $height, $this->encodeText($arrayText[7]), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(16, $height, $this->encodeText($arrayText[8]), 1, 'C', 0, 1, 0 ,0, true);
+ }
+
+ function tableRowNumberVertical($arrayText, $arrayParams=array()){
+
+ if($arrayText[1] == '')
+ $arrayText[1] = '';
+
+ for($i=2; $i<8; $i++){
+ if( $arrayText[$i] == '' )
+ $arrayText[$i] = '0';
+ }
+
+ /*$linecount = $this->pdf->getNumLines($this->encodeText($arrayText[1]), 54);
+ $linecount == 1 ? $height = 4.7 : $height = 4.7 + ($linecount-1)*3.3;*/
+ $height = $this->getCellHeight($this->encodeText($arrayText[1]), 54);
+
+ //ce smo na prelomu strani
+ if( ($this->pdf->getY() + $height) > 270){
+ $this->drawLine();
+ $this->pdf->AddPage('P');
+ $arrayParams['border'] .= 'T';
+ }
+
+ $arrayText[1] == '' ? $arrayParams['border'] = 0 : $arrayParams['border'] = 1;
+
+ $this->pdf->MultiCell(18, $height, $this->encodeText($arrayText[0]), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(54, $height, $this->encodeText($arrayText[1]), $arrayParams['border'], 'L', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(18, $height, $this->encodeText($arrayText[2]), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(18, $height, $this->encodeText($arrayText[3]), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(18, $height, $this->encodeText($arrayText[4]), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(18, $height, $this->encodeText($arrayText[5]), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(18, $height, $this->encodeText($arrayText[6]), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(18, $height, $this->encodeText($arrayText[7]), 1, 'C', 0, 1, 0 ,0, true);
+ }
+
+ function tableRowHorizontal($arrayText, $arrayParams=array()){
+
+ if($arrayText[1] == '')
+ $arrayText[1] = '';
+
+ /*$linecount = $this->pdf->getNumLines($this->encodeText($arrayText[1]), 30);
+ $linecount == 1 ? $height = 4.7 : $height = 4.7 + ($linecount-1)*3.3;*/
+ $height = $this->getCellHeight($this->encodeText($arrayText[1]), 30);
+
+
+ //ce smo na prelomu strani
+ if( ($this->pdf->getY() + $height) > 270){
+ $this->drawLine();
+ $this->pdf->AddPage('P');
+ $arrayParams['border'] .= 'T';
+ }
+
+ $this->pdf->MultiCell(18, $height, $this->encodeText($arrayText[0]), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(30, $height, $this->encodeText($arrayText[1]), 1, 'L', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(78, $height, $this->encodeText($arrayText[2]), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(18, $height, $this->encodeText($arrayText[3]), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(18, $height, $this->encodeText($arrayText[4]), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(18, $height, $this->encodeText($arrayText[5]), 1, 'C', 0, 1, 0 ,0, true);
+ }
+
+ function tableRowMultiText($arrayText, $arrayParams=array()){
+
+ if($arrayText[1] == '')
+ $arrayText[1] = '';
+
+ /*$linecount = $this->pdf->getNumLines($this->encodeText($arrayText[1]), 30);
+ $linecount == 1 ? $height = 4.7 : $height = 4.7 + ($linecount-1)*3.3;*/
+ $height = $this->getCellHeight($this->encodeText($arrayText[1]), 30);
+
+ //ce smo na prelomu strani
+ if( ($this->pdf->getY() + $height) > 270){
+ $this->drawLine();
+ $this->pdf->AddPage('P');
+ $arrayParams['border'] .= 'T';
+ }
+
+ $this->pdf->MultiCell(18, $height, $this->encodeText($arrayText[0]), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(30, $height, $this->encodeText($arrayText[1]), 1, 'L', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(132, $height, $this->encodeText($arrayText[2]), 1, 'C', 0, 1, 0 ,0, true);
+ }
+
+ //izrisemo dinamicne celice (podamo sirino, stevilo celic in vsebino)
+ function dynamicCells($arrayText, $count, $width, $height, $arrayParams=array()){
+
+ if($count > 0){
+ $singleWidth = round($width / $count);
+ $lastWidth = $width - (($count-1)*$singleWidth);
+ }
+ else{
+ $singleWidth = $width;
+ $lastWidth = $width;
+ }
+
+ if($arrayText[0] == '')
+ $arrayText[0] = '';
+
+ /*$linecount = $this->pdf->getNumLines($this->encodeText($arrayText[1]), 30);
+ $linecount == 1 ? $height = 1 : $height = 4.7 + ($linecount-1)*3.3;*/
+
+ for($i=0; $i<$count-1; $i++){
+ if($arrayText[$i] == '')
+ $arrayText[$i] = '';
+
+ $this->pdf->MultiCell($singleWidth, $height, $this->encodeText($arrayText[$i]), 1, 'C', 0, 0, 0 ,0, true);
+ }
+
+ //zadnje polje izrisemo druge sirine ker se drugace zaradi zaokrozevanja tabela porusi
+ $lastWidth = ($lastWidth < 4) ? 4 : $lastWidth;
+ if($count > 0)
+ $this->pdf->MultiCell($lastWidth, $height, $this->encodeText($arrayText[$count-1]), 1, 'C', 0, 0, 0 ,0, true);
+ else
+ $this->pdf->MultiCell($lastWidth, $height, $this->encodeText(''), 1, 'C', 0, 0, 0 ,0, true);
+ }
+
+ function getCellHeight($string, $width){
+
+ // Star nacin
+ //$linecount = $this->pdf->getNumLines($this->encodeText($string), $width);
+ //$height = ( $linecount == 1 ? 4.7 : (4.7 + ($linecount-1)*3.5) );
+
+ $this->pdf->startTransaction();
+ // get the number of lines calling you method
+ $linecount = $this->pdf->MultiCell($width, 0, $string, 0, 'L', 0, 0, '', '', true, 0, false, true, 0);
+ // restore previous object
+ $this->pdf = $this->pdf->rollbackTransaction();
+
+ $height = ($linecount <= 1) ? 4.7 : $linecount * ($this->pdf->getFontSize() * $this->pdf->getCellHeightRatio()) + 2;
+
+ return $height;
+ }
+}
+
+?> \ No newline at end of file
diff --git a/admin/exportclases/class.pdfIzvozAnalizaTTest.php b/admin/exportclases/class.pdfIzvozAnalizaTTest.php
new file mode 100644
index 0000000..e750c53
--- /dev/null
+++ b/admin/exportclases/class.pdfIzvozAnalizaTTest.php
@@ -0,0 +1,404 @@
+<?php
+
+ global $site_path;
+
+ include_once('../../function.php');
+ include_once('../survey/definition.php');
+ include_once('../exportclases/class.pdfIzvozAnalizaFunctions.php');
+ require_once('../exportclases/class.enka.pdf.php');
+
+ define("ALLOW_HIDE_ZERRO_REGULAR", false); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za navadne odgovore
+ define("ALLOW_HIDE_ZERRO_MISSING", true); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za missinge
+
+ define("NUM_DIGIT_AVERAGE", 2, true); // stevilo digitalnih mest za povprecje
+ define("NUM_DIGIT_DEVIATION", 2, true); // stevilo digitalnih mest za povprecje
+
+ define("M_ANALIZA_DESCRIPTOR", "descriptor", true);
+ define("M_ANALIZA_FREQUENCY", "frequency", true);
+
+ define("FNT_FREESERIF", "freeserif", true);
+ define("FNT_FREESANS", "freesans", true);
+ define("FNT_HELVETICA", "helvetica", true);
+
+ define("FNT_MAIN_TEXT", FNT_FREESANS, true);
+ define("FNT_QUESTION_TEXT", FNT_FREESANS, true);
+ define("FNT_HEADER_TEXT", FNT_FREESANS, true);
+
+ define("FNT_MAIN_SIZE", 10, true);
+ define("FNT_QUESTION_SIZE", 9, true);
+ define("FNT_HEADER_SIZE", 10, true);
+
+ define("RADIO_BTN_SIZE", 3, true);
+ define("CHCK_BTN_SIZE", 3, true);
+ define("LINE_BREAK", 6, true);
+
+ define ('PDF_MARGIN_HEADER', 8);
+ define ('PDF_MARGIN_FOOTER', 12);
+ define ('PDF_MARGIN_TOP', 18);
+ define ('PDF_MARGIN_BOTTOM', 18);
+ define ('PDF_MARGIN_LEFT', 15);
+ define ('PDF_MARGIN_RIGHT', 15);
+
+
+/** Class za generacijo pdf-a
+ *
+ * @desc: po novem je potrebno form elemente generirati ro�no kot slike
+ *
+ */
+class PdfIzvozAnalizaTTest {
+
+ var $anketa;// = array(); // trenutna anketa
+
+ var $pi=array('canCreate'=>false); // za shrambo parametrov in sporocil
+ var $pdf;
+ var $currentStyle;
+ var $db_table = '';
+
+ public $ttestClass = null; //ttest class
+
+ var $ttestVars;
+
+ var $sessionData; // podatki ki so bili prej v sessionu - za nastavitve, ki se prenasajo v izvoze...
+
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null, $podstran = 'ttest')
+ {
+ global $site_path;
+ global $global_user_id;
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) )
+ {
+ $this->anketa['id'] = $anketa;
+ $this->anketa['podstran'] = $podstran;
+ // create new PDF document
+ $this->pdf = new enka_TCPDF('L', PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
+ }
+ else
+ {
+ $this->pi['msg'] = "Anketa ni izbrana!";
+ $this->pi['canCreate'] = false;
+ return false;
+ }
+
+
+ $_GET['a'] = A_ANALYSIS;
+
+ // preberemo nastavitve iz baze (prej v sessionu)
+ SurveyUserSession::Init($this->anketa['id']);
+ $this->sessionData = SurveyUserSession::getData();
+
+ // ustvarimo ttest objekt
+ $this->ttestClass = new SurveyTTest($anketa);
+
+ if ( SurveyInfo::getInstance()->SurveyInit($this->anketa['id']) && $this->init())
+ {
+ $this->anketa['uid'] = $global_user_id;
+ SurveyUserSetting::getInstance()->Init($this->anketa['id'], $this->anketa['uid']);
+ }
+ else
+ return false;
+ // ce smo prisli do tu je vse ok
+ $this->pi['canCreate'] = true;
+
+ return true;
+ }
+
+ // SETTERS && GETTERS
+
+ function checkCreate()
+ {
+ return $this->pi['canCreate'];
+ }
+ function getFile($fileName)
+ {
+ //Close and output PDF document
+ ob_end_clean();
+ $this->pdf->Output($fileName, 'I');
+ }
+
+
+ function init()
+ {
+ global $lang;
+
+ // array used to define the language and charset of the pdf file to be generated
+ $language_meta = Array();
+ $language_meta['a_meta_charset'] = 'UTF-8';
+ $language_meta['a_meta_dir'] = 'ltr';
+ $language_meta['a_meta_language'] = 'sl';
+ $language_meta['w_page'] = $lang['page'];
+
+ //set some language-dependent strings
+ $this->pdf->setLanguageArray($language_meta);
+
+ //set margins
+ $this->pdf->setPrintHeaderFirstPage(true);
+ $this->pdf->setPrintFooterFirstPage(true);
+ $this->pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
+ $this->pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
+ $this->pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
+
+ // set header and footer fonts
+ $this->pdf->setHeaderFont(Array(FNT_HEADER_TEXT, "I", FNT_HEADER_SIZE));
+ $this->pdf->setFooterFont(Array(FNT_HEADER_TEXT, 'I', FNT_HEADER_SIZE));
+
+
+ // set document information
+ $this->pdf->SetAuthor('An Order Form');
+ $this->pdf->SetTitle('An Order');
+ $this->pdf->SetSubject('An Order');
+
+ // set default header data
+ $this->pdf->SetHeaderData(null, null, "www.1ka.si", $this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()));
+
+ //set auto page breaks
+ $this->pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
+
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', FNT_MAIN_SIZE);
+ //set image scale factor
+ $this->pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
+ return true;
+ }
+
+ function encodeText($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace(array("&scaron;","&#353;","&#269;"),array("Å¡","Å¡","Ä"),$text);
+ return strip_tags($text);
+ }
+
+ function createPdf()
+ {
+ global $site_path;
+ global $lang;
+
+ // izpisemo prvo stran
+ //$this->createFrontPage();
+
+ $this->pdf->AddPage();
+
+ $this->pdf->setFont('','B','11');
+ $this->pdf->MultiCell(150, 5, $lang['export_analisys_ttest'], 0, 'L', 0, 1, 0 ,0, true);
+
+ $this->pdf->setDrawColor(128, 128, 128);
+ $this->pdf->setFont('','','8');
+
+
+ if (count($this->sessionData['ttest']['sub_conditions']) > 1 ) {
+ $variables1 = $this->ttestClass->getSelectedVariables();
+ if (count($variables1) > 0) {
+ foreach ($variables1 AS $v_first) {
+ $ttest = null;
+ $ttest = $this->ttestClass->createTTest($v_first, $this->sessionData['ttest']['sub_conditions']);
+
+ $this->pdf->ln(10);
+
+ $this->displayTTestTable($ttest);
+
+ // Izrisemo graf za tabelo - zaenkrat samo admin
+ if(isset($this->sessionData['ttest_charts']['showChart']) && $this->sessionData['ttest_charts']['showChart'] == true){
+ $this->displayChart();
+ }
+ }
+ }
+ }
+ }
+
+ public function displayTTestTable($ttest) {
+ global $lang;
+
+ # preverimo ali imamo izbrano odvisno spremenljivko
+ $spid1 = $this->sessionData['ttest']['variabla'][0]['spr'];
+ $seq1 = $this->sessionData['ttest']['variabla'][0]['seq'];
+ $grid1 = $this->sessionData['ttest']['variabla'][0]['grd'];
+
+
+ if (is_array($ttest) && count($ttest) > 0 && (int)$seq1 > 0) {
+
+ $spr_data_1 = $this->ttestClass->_HEADERS[$spid1];
+ if ($grid1 == 'undefined') {
+
+ # imamp lahko veÄ variabel
+ $seq = $seq1;
+ foreach ($spr_data_1['grids'] as $gkey => $grid ) {
+
+ foreach ($grid['variables'] as $vkey => $variable) {
+ $sequence = $variable['sequence'];
+ if ($sequence == $seq) {
+ $sprLabel1 = '('.$variable['variable'].') '. $variable['naslov'];
+ }
+ }
+ }
+ } else {
+ # imamo subgrid
+ $sprLabel1 = '('.$spr_data_1['grids'][$grid1]['variable'].') '. $spr_data_1['grids'][$grid1]['naslov'];
+ }
+
+ # polovio labele
+ $spid2 = $this->sessionData['ttest']['spr2'];
+ $sprLabel2 = trim(str_replace('&nbsp;','',$this->sessionData['ttest']['label2']));
+ $label1 = $this->ttestClass->getVariableLabels($this->sessionData['ttest']['sub_conditions'][0]);
+ $label2 = $this->ttestClass->getVariableLabels($this->sessionData['ttest']['sub_conditions'][1]);
+
+ $this->ttestVars = array($sprLabel1, $sprLabel2);
+
+ // prva vrstica
+ $linecount = $this->pdf->getNumLines($this->encodeText($sprLabel1), 160);
+ $height = ( $linecount == 1 ? 4.7 : (4.7 + ($linecount-1)*3.3) );
+
+ $this->pdf->setFont('','B','6');
+ $this->pdf->MultiCell(80, $height, '', 'TLR', 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(180, $height, $this->encodeText($sprLabel1), 1, 'C', 0, 1, 0 ,0, true);
+
+
+ // druga vrstica
+ $linecount = $this->pdf->getNumLines($this->encodeText($sprLabel2), 100);
+ $height = ( $linecount == 1 ? 4.7 : (4.7 + ($linecount-1)*3.3) );
+
+ $this->pdf->MultiCell(80, $height, $this->encodeText($sprLabel2), 'BLR', 'C', 0, 0, 0 ,0, true);
+
+ $this->pdf->setFont('','','6');
+
+ $this->pdf->MultiCell(20, $height, 'n', 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(20, $height, 'x', 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(20, $height, 's²', 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(20, $height, 'se(x)', 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(20, $height, '±1,96×se(x)', 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(20, $height, 'd', 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(20, $height, 'se(d)', 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(20, $height, 'Sig.', 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(20, $height, 't', 1, 'C', 0, 1, 0 ,0, true);
+
+
+ // vrstici s podatki
+ $this->pdf->MultiCell(80, 7, $this->encodeText($label1), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(20, 7, $this->formatNumber($ttest[1]['n'], 0), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(20, 7, $this->formatNumber($ttest[1]['x'], 3), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(20, 7, $this->formatNumber($ttest[1]['s2'], 3), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(20, 7, $this->formatNumber($ttest[1]['se'], 3), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(20, 7, $this->formatNumber($ttest[1]['margin'], 3), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(20, 7, '', 'TLR', 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(20, 7, '', 'TLR', 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(20, 7, '', 'TLR', 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(20, 7, '', 'TLR', 'C', 0, 1, 0 ,0, true);
+
+ $this->pdf->MultiCell(80, 7, $this->encodeText($label2), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(20, 7, $this->formatNumber($ttest[2]['n'], 0), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(20, 7, $this->formatNumber($ttest[2]['x'], 3), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(20, 7, $this->formatNumber($ttest[2]['s2'], 3), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(20, 7, $this->formatNumber($ttest[2]['se'], 3), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(20, 7, $this->formatNumber($ttest[2]['margin'], 3), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(20, 7, $this->formatNumber($ttest['d'], 3), 'BLR', 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(20, 7, $this->formatNumber($ttest['sed'], 3), 'BLR', 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(20, 7, $this->formatNumber($ttest['sig'], 3), 'BLR', 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(20, 7, $this->formatNumber($ttest['t'], 3), 'BLR', 'C', 0, 1, 0 ,0, true);
+ }
+ }
+
+ function displayChart(){
+ global $lang;
+
+ $tableChart = new SurveyTableChart($this->anketa['id'], $this->ttestClass, 'ttest');
+ $tableChart->setTTestChartSession();
+
+ // updatamo session iz baze
+ $this->sessionData = SurveyUserSession::getData();
+
+ $spid1 = $this->sessionData['ttest']['variabla'][0]['spr'];
+ $seq1 = $this->sessionData['ttest']['variabla'][0]['seq'];
+ $grid1 = $this->sessionData['ttest']['variabla'][0]['grd'];
+ $sub1 = $this->sessionData['ttest']['sub_conditions'][0];
+ $sub2 = $this->sessionData['ttest']['sub_conditions'][1];
+ $chartID = $sub1.'_'.$sub2.'_'.$spid1.'_'.$seq1.'_'.$grid1;
+
+ $settings = $this->sessionData['ttest_charts'][$chartID];
+ $imgName = $settings['name'];
+
+ $size = getimagesize('pChart/Cache/'.$imgName);
+ $height = $size[1] / 4;
+
+ if($this->pdf->getY() + $height > 250)
+ {
+ $this->pdf->AddPage();
+ }
+ else
+ $this->pdf->setY($this->pdf->getY() + 15);
+
+ // Naslov posameznega grafa
+ $this->pdf->setFont('','b','6');
+ $this->pdf->MultiCell(260, 5, $lang['srv_chart_ttest_title'].':', 0, 'C', 0, 1, 0 ,0, true);
+
+ $this->pdf->MultiCell(30, 5,'', 0, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(90, 5, $this->encodeText($this->ttestVars[0]), 0, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(20, 5, $this->encodeText('/'), 0, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(90, 5, $this->encodeText($this->ttestVars[1]), 0, 'C', 0, 1, 0 ,0, true);
+
+ $this->pdf->setFont('','','6');
+
+
+ $this->pdf->Image('pChart/Cache/'.$imgName, $x='', $y='', $w=200, $h, $type='PNG', $link='', $align='N', $resize=true, $dpi=1600, $palign='C', $ismask=false, $imgmask=false, $border=0);
+
+
+ $this->pdf->setY($this->pdf->getY() + 5);
+ }
+
+
+ /*Skrajsa tekst in doda '...' na koncu*/
+ function snippet($text,$length=64,$tail="...")
+ {
+ $text = trim($text);
+ $txtl = strlen($text);
+ if($txtl > $length)
+ {
+ for($i=1;$text[$length-$i]!=" ";$i++)
+ {
+ if($i == $length)
+ {
+ return substr($text,0,$length) . $tail;
+ }
+ }
+ $text = substr($text,0,$length-$i+1) . $tail;
+ }
+ return $text;
+ }
+
+ function drawLine()
+ {
+ $cy = $this->pdf->getY();
+ $this->pdf->Line(15, $cy , 195, $cy , $this->currentStyle);
+ }
+
+ function setUserId($usrId) {$this->anketa['uid'] = $usrId;}
+ function getUserId() {return ($this->anketa['uid'])?$this->anketa['uid']:false;}
+
+ function formatNumber($value,$digit=0,$sufix="")
+ {
+ if ( $value <> 0 && $value != null )
+ $result = round($value,$digit);
+ else
+ $result = "0";
+ $result = number_format($result, $digit, ',', '.').$sufix;
+
+ return $result;
+ }
+
+ function getCellHeight($string, $width){
+
+ $this->pdf->startTransaction();
+ // get the number of lines calling you method
+ $linecount = $this->pdf->MultiCell($width, 0, $string, 0, 'L', 0, 0, '', '', true, 0, false, true, 0);
+ // restore previous object
+ $this->pdf = $this->pdf->rollbackTransaction();
+
+ $height = ($linecount <= 1) ? 4.7 : $linecount * ($this->pdf->getFontSize() * $this->pdf->getCellHeightRatio()) + 2;
+
+ return $height;
+ }
+
+}
+
+?> \ No newline at end of file
diff --git a/admin/exportclases/class.pdfIzvozEditsAnalysis.php b/admin/exportclases/class.pdfIzvozEditsAnalysis.php
new file mode 100644
index 0000000..5929d63
--- /dev/null
+++ b/admin/exportclases/class.pdfIzvozEditsAnalysis.php
@@ -0,0 +1,1064 @@
+<?php
+
+ global $site_path;
+
+ include_once('../../function.php');
+ include_once('../survey/definition.php');
+ require_once('../exportclases/class.enka.pdf.php');
+
+ define("ALLOW_HIDE_ZERRO_REGULAR", false); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za navadne odgovore
+ define("ALLOW_HIDE_ZERRO_MISSING", true); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za missinge
+
+ define("NUM_DIGIT_AVERAGE", 2, true); // stevilo digitalnih mest za povprecje
+ define("NUM_DIGIT_DEVIATION", 2, true); // stevilo digitalnih mest za povprecje
+
+ define("M_ANALIZA_DESCRIPTOR", "descriptor", true);
+ define("M_ANALIZA_FREQUENCY", "frequency", true);
+
+ define("FNT_FREESERIF", "freeserif", true);
+ define("FNT_FREESANS", "freesans", true);
+ define("FNT_HELVETICA", "helvetica", true);
+
+ define("FNT_MAIN_TEXT", FNT_FREESANS, true);
+ define("FNT_QUESTION_TEXT", FNT_FREESANS, true);
+ define("FNT_HEADER_TEXT", FNT_FREESANS, true);
+
+ define("FNT_MAIN_SIZE", 10, true);
+ define("FNT_QUESTION_SIZE", 9, true);
+ define("FNT_HEADER_SIZE", 10, true);
+
+ define("RADIO_BTN_SIZE", 3, true);
+ define("CHCK_BTN_SIZE", 3, true);
+ define("LINE_BREAK", 6, true);
+
+ define ('PDF_MARGIN_HEADER', 8);
+ define ('PDF_MARGIN_FOOTER', 12);
+ define ('PDF_MARGIN_TOP', 18);
+ define ('PDF_MARGIN_BOTTOM', 18);
+ define ('PDF_MARGIN_LEFT', 15);
+ define ('PDF_MARGIN_RIGHT', 15);
+
+
+/** Class za generacijo pdf-a
+ *
+ * @desc: po novem je potrebno form elemente generirati ro�no kot slike
+ *
+ */
+class PdfIzvozEditsAnalysis {
+
+ var $anketa;// = array(); // trenutna anketa
+
+ var $pi=array('canCreate'=>false); // za shrambo parametrov in sporocil
+ var $pdf;
+ var $currentStyle;
+ var $db_table = '';
+
+ public static $ss = null; //SurveyStatistic class
+ public static $sas = null; // $sas = new SurveyAdminSettings();class
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null, $ssData)
+ {
+ global $site_path;
+ global $global_user_id;
+
+ //error_log(json_encode($_GET));
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) )
+ {
+ $this->anketa['id'] = $anketa;
+ $this->anketa['podstran'] = $podstran;
+ // create new PDF document
+ $this->pdf = new enka_TCPDF('L', PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
+ }
+ else
+ {
+ $this->pi['msg'] = "Anketa ni izbrana!";
+ $this->pi['canCreate'] = false;
+ return false;
+ }
+
+
+ $this->sas = new SurveyAdminSettings(0,$this->anketa['id']);
+ //ustvarimo SurveyStatistic objekt in mu napolnimo variable
+ $this->ss = new SurveyStatistic();
+ $this->ss->Init($this->anketa['id'],true);
+ /*
+
+ $this->ss->realUsersByStatus_base = $ssData[0];
+
+ $this->ss->type = $ssData[1];
+ $this->ss->period = $ssData[2];
+ */
+ /* intervali se veÄ ne poÅ¡iljajo preko get, ker se polovijo iz porfila
+ if($ssData[1] != 'undefined')
+ $this->ss->startDate = $ssData[1];
+ if($ssData[2] != 'undefined')
+ $this->ss->endDate = $ssData[2];
+ $this->ss->type = $ssData[3];
+ $this->ss->period = $ssData[4];
+ //$this->ss->isDefaultFilters = false;
+ */
+
+ if ( SurveyInfo::getInstance()->SurveyInit($this->anketa['id']) && $this->init())
+ {
+ $this->anketa['uid'] = $global_user_id;
+ SurveyUserSetting::getInstance()->Init($this->anketa['id'], $this->anketa['uid']);
+ }
+ else
+ return false;
+ // ce smo prisli do tu je vse ok
+ $this->pi['canCreate'] = true;
+
+ return true;
+ }
+
+ // SETTERS && GETTERS
+
+ function checkCreate()
+ {
+ return $this->pi['canCreate'];
+ }
+ function getFile($fileName)
+ {
+ //Close and output PDF document
+ ob_end_clean();
+ $this->pdf->Output($fileName, 'I');
+ }
+
+
+ function init()
+ {
+ global $lang;
+
+ // array used to define the language and charset of the pdf file to be generated
+ $language_meta = Array();
+ $language_meta['a_meta_charset'] = 'UTF-8';
+ $language_meta['a_meta_dir'] = 'ltr';
+ $language_meta['a_meta_language'] = 'sl';
+ $language_meta['w_page'] = $lang['page'];
+
+ //set some language-dependent strings
+ $this->pdf->setLanguageArray($language_meta);
+
+ //set margins
+ $this->pdf->setPrintHeaderFirstPage(true);
+ $this->pdf->setPrintFooterFirstPage(true);
+ $this->pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
+ $this->pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
+ $this->pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
+
+ // set header and footer fonts
+ $this->pdf->setHeaderFont(Array(FNT_HEADER_TEXT, "I", FNT_HEADER_SIZE));
+ $this->pdf->setFooterFont(Array(FNT_HEADER_TEXT, 'I', FNT_HEADER_SIZE));
+
+
+ // set document information
+ $this->pdf->SetAuthor('An Order Form');
+ $this->pdf->SetTitle('An Order');
+ $this->pdf->SetSubject('An Order');
+
+ // set default header data
+ $this->pdf->SetHeaderData(null, null, "www.1ka.si", $this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()));
+
+ //set auto page breaks
+ $this->pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
+
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', FNT_MAIN_SIZE);
+ //set image scale factor
+ $this->pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
+ return true;
+ }
+
+ function encodeText($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace(array("&scaron;","&#353;","&#269;"),array("Å¡","Å¡","Ä"),$text);
+ return strip_tags($text);
+ }
+
+ function createPdf()
+ {
+ global $site_path;
+ global $lang;
+
+ $this->pdf->AddPage();
+
+ $this->pdf->setFont('','B','11');
+
+ $this->display();
+ }
+
+ public function display() {
+ global $lang;
+
+ $this->pdf->setDrawColor(200, 200, 200);
+ $this->pdf->setFillColor(150, 220, 150);
+
+ $sea=new SurveyEditsAnalysis($this->anketa['id']);
+
+ //se ponovi v funkciji ajax_drawContinuEditsTable
+ if ($_GET['seansa'] > 0)
+ $seansa = $_GET['seansa'];
+ else
+ $seansa = '30';
+ if (isset ($_GET['time']))
+ $time = $_GET['time'];
+ else
+ $time = '1 month';
+ if (isset ($_GET['status']))
+ $status = $_GET['status'];
+ else
+ $status = 0;
+ if (isset ($_GET['from']))
+ $from = $_GET['from'];
+ else
+ $from = '';
+ if (isset ($_GET['to']))
+ $to = $_GET['to'];
+ else
+ $to = '';
+
+ //create iterval - SQL where statement
+ $interval = $sea->createInterval($time, $from, $to);
+
+ //get object of all edits data
+ $data = $sea->getData($status, $interval);
+
+
+ }
+
+
+
+ /** Funkcija prikaze osnovnih informacij
+ *
+ */
+ function DisplayInfoView() {
+ global $lang;
+ global $site_url;
+
+ $X = 10;
+ $Y = 25;
+ $height = 80;
+ $this->pdf->setXY($X, $Y);
+
+ //izrisemo okvir
+ $this->pdf->setFont('','B','8');
+ $this->pdf->SetTextColor(180, 0, 0);
+ $this->pdf->MultiCell(90, $height, $this->encodeText($lang['srv_statistic_info_title']), 1, 'L', 0, 0, 0 ,0, true);
+
+ $this->pdf->setXY($X, $Y+8);
+ $this->pdf->setFont('','','6');
+ $this->pdf->SetTextColor(0, 0, 0);
+
+ //ime ankete
+ $this->pdf->Cell(20, 3, $this->encodeText($lang['srv_info_name'].':'), 0, 0, 'L', 0);
+ $this->pdf->Cell(70, 3, $this->encodeText(SurveyInfo::getSurveyTitle()), 0, 1, 'L', 0);
+ $this->pdf->setX($X);
+
+ //katere napredne možnosti so vklopljene
+ $row = SurveyInfo::getSurveyRow();
+ $enabled_advanced = null;
+ $prefix = '';
+ if ($row['uporabnost'] == 1) {
+ $enabled_advanced .= $prefix . $lang['srv_vrsta_survey_type_4'];
+ $prefix = ', ';
+ }
+ if ($row['user_from_cms'] == 1) {
+ $enabled_advanced .= $prefix . $lang['srv_vrsta_survey_type_5'];
+ $prefix = ', ';
+ }
+ if ($row['quiz'] == 1) {
+ $enabled_advanced .= $prefix . $lang['srv_vrsta_survey_type_6'];
+ $prefix = ', ';
+ }
+ if ($row['phone'] == 1) {
+ $enabled_advanced .= $prefix . $lang['srv_vrsta_survey_type_7'];
+ $prefix = ', ';
+ }
+ if ($row['social_network'] == 1) {
+ $enabled_advanced .= $prefix . $lang['srv_vrsta_survey_type_8'];
+ $prefix = ', ';
+ }
+ //tip ankete
+ $this->pdf->Cell(20, 3, $this->encodeText($lang['srv_info_type'].':'), 0, 0, 'L', 0);
+ $this->pdf->Cell(70, 3, $this->encodeText($lang['srv_vrsta_survey_type_'.SurveyInfo::getSurveyType()] . ($enabled_advanced != null ? ' ('.$enabled_advanced.')' : '' )), 0, 1, 'L', 0);
+ $this->pdf->setX($X);
+
+ //vprašanj, variabel
+ $this->pdf->Cell(20, 3, $this->encodeText($lang['srv_info_questions'].':'), 0, 0, 'L', 0);
+ $this->pdf->Cell(15, 3, $this->encodeText(SurveyInfo::getSurveyQuestionCount()), 0, 0, 'L', 0);
+ $this->pdf->Cell(20, 3, $this->encodeText($lang['srv_info_variables'].':'), 0, 0, 'L', 0);
+ $this->pdf->Cell(15, 3, $this->encodeText(SurveyInfo::getSurveyVariableCount()), 0, 1, 'L', 0);
+ $this->pdf->setX($X);
+
+ //uporabnikov, odgovorov
+ $this->pdf->Cell(20, 3, $this->encodeText($lang['srv_analiza_stUporabnikov'].':'), 0, 0, 'L', 0);
+ $this->pdf->Cell(15, 3, $this->encodeText(SurveyInfo::getSurveyAnswersCount()), 0, 0, 'L', 0);
+ $this->pdf->Cell(20, 3, $this->encodeText($lang['srv_info_answers_valid'].':'), 0, 0, 'L', 0);
+ $this->pdf->Cell(15, 3, $this->encodeText(SurveyInfo::getSurveyApropriateAnswersCount()), 0, 1, 'L', 0);
+ $this->pdf->setX($X);
+
+ //jezik ankete
+ $this->pdf->Cell(20, 3, $this->encodeText($lang['srv_info_language'].':'), 0, 0, 'L', 0);
+ $this->pdf->Cell(70, 3, $this->encodeText(SurveyInfo::getRespondentLanguage()), 0, 1, 'L', 0);
+ $this->pdf->setX($X);
+
+ //avtor
+ $this->pdf->Cell(20, 3, $this->encodeText($lang['srv_info_creator'].':'), 0, 0, 'L', 0);
+ $text = '';
+ $text .= SurveyInfo::getSurveyInsertName();
+ if (SurveyInfo::getSurveyInsertDate() && SurveyInfo::getSurveyInsertDate() != "00.00.0000")
+ $text .= SurveyInfo::getDateTimeSeperator() . $this->ss->dateFormat(SurveyInfo::getSurveyInsertDate(),DATE_FORMAT_SHORT);
+ if (SurveyInfo::getSurveyInsertTime() && SurveyInfo::getSurveyInsertTime() != "00:00:00")
+ $text .= SurveyInfo::getDateTimeSeperator() . $this->ss->dateFormat(SurveyInfo::getSurveyInsertTime(),TIME_FORMAT_SHORT);
+ $this->pdf->Cell(70, 3, $this->encodeText($text), 0, 1, 'L', 0);
+ $this->pdf->setX($X);
+
+ //spreminjal
+ $this->pdf->Cell(20, 3, $this->encodeText($lang['srv_info_modify'].':'), 0, 0, 'L', 0);
+ $text = '';
+ $text .= SurveyInfo::getSurveyEditName();
+ if (SurveyInfo::getSurveyEditDate() && SurveyInfo::getSurveyEditDate() != "00.00.0000")
+ $text .= SurveyInfo::getDateTimeSeperator() . $this->ss->dateFormat(SurveyInfo::getSurveyEditDate(),DATE_FORMAT_SHORT);
+ if (SurveyInfo::getSurveyEditTime() && SurveyInfo::getSurveyEditTime() != "00:00:00")
+ $text .= SurveyInfo::getDateTimeSeperator() . $this->ss->dateFormat(SurveyInfo::getSurveyEditTime(),TIME_FORMAT_SHORT);
+ $this->pdf->Cell(70, 3, $this->encodeText($text), 0, 1, 'L', 0);
+ $this->pdf->setX($X);
+
+ //dostop, Kdo razen avtorja ima dostop
+ $dostop = SurveyInfo::getSurveyAccessUsers();
+ if ($dostop) {
+ $this->pdf->Cell(20, 3, $this->encodeText($lang['srv_info_access'].':'), 0, 0, 'L', 0);
+ $prefix='';
+ foreach ( $dostop as $user) {
+ $prefix .= $user['name'].'; ';
+ }
+ $prefix = substr($prefix, 0, -2);
+ $this->pdf->Cell(70, 3, $this->encodeText($prefix), 0, 1, 'L', 0);
+ $this->pdf->setX($X);
+ }
+
+ //aktivnost
+ $activity = SurveyInfo:: getSurveyActivity();
+ $_last_active = end($activity);
+ $this->pdf->Cell(20, 3, $this->encodeText($lang['srv_displaydata_status'].':'), 0, 0, 'L', 0);
+ if (SurveyInfo::getSurveyColumn('active') == 1) {
+ $this->pdf->SetTextColor(0,150,0);
+ $this->pdf->Cell(70, 3, $this->encodeText($lang['srv_anketa_active2']), 0, 1, 'L', 0);
+ } else {
+ # preverimo ali je bila anketa že aktivirana
+ if (!isset($_last_active['starts'])) {
+ # anketa Å¡e sploh ni bila aktivirana
+ $this->pdf->SetTextColor(255,120,0);
+ $this->pdf->Cell(70, 3, $this->encodeText($lang['srv_survey_non_active_notActivated']), 0, 1, 'L', 0);
+ } else {
+ # anketa je že bila aktivirna ampak je sedaj neaktivna
+ $this->pdf->SetTextColor(255,120,0);
+ $this->pdf->Cell(70, 3, $this->encodeText($lang['srv_survey_non_active']), 0, 1, 'L', 0);
+ }
+ }
+ $this->pdf->SetTextColor(0);
+ $this->pdf->setX($X);
+
+ //trajanje: datumi aktivnosti
+ if ( count($activity) > 0 ) {
+ $this->pdf->Cell(20, 3, $this->encodeText($lang['srv_info_activity'].':'), 0, 0, 'L', 0);
+ $prefix = '';
+ foreach ($activity as $active) {
+ $_starts = explode('-',$active['starts']);
+ $_expire = explode('-',$active['expire']);
+
+ $prefix .= $_starts[2].'.'.$_starts[1].'.'.$_starts[0].'-'.$_expire[2].'.'.$_expire[1].'.'.$_expire[0];
+ $prefix .= '; ';
+ }
+ $this->pdf->Cell(70, 3, $this->encodeText($prefix), 0, 1, 'L', 0);
+ $this->pdf->setX($X);
+ }
+
+
+ # predviceni cas trajanja enkete
+ $skupni_cas = $this->sas->testiranje_cas(1);
+ $skupni_predvideni_cas = $this->sas->testiranje_predvidenicas(1);
+
+ $d = new Dostop();
+
+ //predviceni cas trajanja enkete
+ $this->pdf->Cell(20, 3, $this->encodeText($lang['srv_info_duration'].':'), 0, 0, 'L', 0);
+ $text = '';
+ $text .= ($skupni_cas != '') ? $skupni_cas.', ' : '';
+ $text .= $lang['srv_predvideno'].': '.$skupni_predvideni_cas;
+ $this->pdf->Cell(70, 3, $this->encodeText($text), 0, 1, 'L', 0);
+ $this->pdf->setX($X);
+
+ //VNOSI - pvi / zadnji vnos
+ $prvi_vnos_date = SurveyInfo::getSurveyFirstEntryDate();
+ $prvi_vnos_time = SurveyInfo::getSurveyFirstEntryTime();
+ $zadnji_vnos_date = SurveyInfo::getSurveyLastEntryDate();
+ $zadnji_vnos_time = SurveyInfo::getSurveyLastEntryTime();
+ if ($prvi_vnos_date != null) {
+ $this->pdf->Cell(20, 3, $this->encodeText($lang['srv_info_first_entry'].':'), 0, 0, 'L', 0);
+
+ $text = '';
+ $text .= $this->ss->dateFormat($prvi_vnos_date,DATE_FORMAT_SHORT);
+ $text .= $prvi_vnos_time != null ? (SurveyInfo::$dateTimeSeperator .$this->ss->dateFormat($prvi_vnos_time,TIME_FORMAT_SHORT)) : '';
+ $this->pdf->Cell(15, 3, $this->encodeText($text), 0, 0, 'L', 0);
+ }
+ if ($zadnji_vnos_date != null) {
+ $this->pdf->Cell(20, 3, $this->encodeText($lang['srv_info_last_entry'].':'), 0, 0, 'L', 0);
+
+ $text = '';
+ $text .= $this->ss->dateFormat($zadnji_vnos_date,DATE_FORMAT_SHORT);
+ $text .= $zadnji_vnos_time != null ? (SurveyInfo::$dateTimeSeperator .$this->ss->dateFormat($zadnji_vnos_time,TIME_FORMAT_SHORT)) : '';
+ $this->pdf->Cell(15, 3, $this->encodeText($text), 0, 0, 'L', 0);
+ }
+ $this->pdf->Cell(0, 0, '', 0, 1, 'L', 0);
+ $this->pdf->setX($X);
+
+ // Komentarji
+ $SD = new SurveyDiagnostics($this->anketa['id']);
+ $comments = $SD->testComments();
+
+ list($commentsAll,$commentsUnresolved,$commentsQuestionAll,$commentsQuestionUnresolved,$commentsUser,$commentsUserFinished) = $comments;
+
+ $commentsUserUnresolved = $commentsUser - $commentsUserFinished;
+ if (( (int)$commentsAll
+ +(int)$commentsUnresolved
+ +(int)$commentsQuestionAll
+ +(int)$commentsQuestionUnresolved
+ +(int)$commentsUser
+ +(int)$commentsUserFinished
+ ) > 0 ) {
+
+ $this->pdf->Cell(20, 3, $this->encodeText($lang['srv_diagnostic_4_element_0'].':'), 0, 0, 'L', 0);
+ $this->pdf->Cell(70, 3, $this->encodeText($lang['srv_diagnostic_4_element_1'].': '.(int)$commentsAll.' / '.(int)$commentsUnresolved), 0, 1, 'L', 0);
+ $this->pdf->setX($X);
+
+ $this->pdf->Cell(20, 3, $this->encodeText(''), 0, 0, 'L', 0);
+ $this->pdf->Cell(70, 3, $this->encodeText($lang['srv_diagnostic_4_element_6'].': '.(int)$commentsQuestionAll.' / '.(int)$commentsQuestionUnresolved), 0, 1, 'L', 0);
+ $this->pdf->setX($X);
+
+ $this->pdf->Cell(20, 3, $this->encodeText(''), 0, 0, 'L', 0);
+ $this->pdf->Cell(70, 3, $this->encodeText($lang['srv_diagnostic_4_element_7'].': '.(int)$commentsUser.' / '.(int)$commentsUserUnresolved), 0, 1, 'L', 0);
+ $this->pdf->setX($X);
+ }
+ }
+
+ /** Funkcija prikaže statuse
+ *
+ */
+ function DisplayStatusView() {
+ global $lang;
+
+ $X = 105;
+ $Y = 25;
+ $height = 80;
+ $this->pdf->setXY($X, $Y);
+
+ //izrisemo okvir
+ $this->pdf->setFont('','B','8');
+ $this->pdf->SetTextColor(180, 0, 0);
+ $this->pdf->MultiCell(90, $height, $this->encodeText($lang['srv_statistic_status_title']), 1, 'L', 0, 0, 0 ,0, true);
+
+ $this->pdf->setXY($X, $Y+8);
+ $this->pdf->setFont('','','6');
+ $this->pdf->SetTextColor(0, 0, 0);
+
+ $cntValid = 0; // da vemo ali izpisemo skupne
+ $cntNonValid = 0; // da vemo ali izpisemo skupne
+
+ foreach ($this->ss->appropriateStatus as $status) {
+ if (!($this->ss->hideNullValues_status && $this->ss->userByStatus['valid'][$status] == 0)) {// da ne delamo po neporebnem
+ $this->pdf->Cell(45, 0, $this->encodeText($lang['srv_userstatus_'.$status] . ' ('.$status.') :'), 0, 0, 'L', 0);
+ $this->pdf->Cell(45, 0, $this->encodeText($this->ss->userByStatus['valid'][$status]), 0, 1, 'L', 0);
+
+ $cntValid++;
+ $this->pdf->setX($X);
+ }
+ }
+
+ // vsota vlejavnih
+ if ($cntValid > 0 || !$this->ss->hideNullValues_status) {
+ $this->pdf->setFont('','B','6');
+ $this->pdf->Cell(45, 0, $this->encodeText($lang['srv_statistic_redirection_sum_valid']), 'T', 0, 'L', 0);
+ $this->pdf->Cell(45, 0, $this->encodeText($this->ss->cntUserByStatus['valid']), 'T', 1, 'L', 0);
+
+ $this->pdf->setY($this->pdf->getY() + 3);
+ $this->pdf->setX($X);
+ $this->pdf->setFont('','','6');
+ }
+
+ // izpišemo še neveljavne
+ foreach ($this->ss->unAppropriateStatus as $status) {
+ if (!($this->ss->hideNullValues_status && $this->ss->userByStatus['nonvalid'][$status] == 0)) {// da ne delamo po neporebnem
+ $this->pdf->Cell(45, 0, $this->encodeText($lang['srv_userstatus_'.$status] . ' ('.$status.') :'), 0, 0, 'L', 0);
+ $this->pdf->Cell(45, 0, $this->encodeText($this->ss->userByStatus['nonvalid'][$status]), 0, 1, 'L', 0);
+
+ $cntNonValid++;
+ $this->pdf->setX($X);
+ }
+ }
+ // se status null (neznan status)
+ if (!($this->ss->hideNullValues_status && $this->ss->userByStatus['nonvalid'][-1] == 0)) {// da ne delamo po neporebnem
+ $this->pdf->Cell(45, 0, $this->encodeText($lang['srv_userstatus_null']), 0, 0, 'L', 0);
+ $this->pdf->Cell(45, 0, $this->encodeText(isset($this->ss->userByStatus['nonvalid'][-1]) ? $this->ss->userByStatus['nonvalid'][-1] : '0'), 0, 1, 'L', 0);
+
+ $cntNonValid++;
+ $this->pdf->setX($X);
+ }
+
+ // vsota nevlejavnih
+ if ($cntNonValid > 0 || !$this->ss->hideNullValues_status) {
+ $this->pdf->setFont('','B','6');
+ $this->pdf->Cell(45, 0, $this->encodeText($lang['srv_statistic_redirection_sum_nonvalid']), 'T', 0, 'L', 0);
+ $this->pdf->Cell(45, 0, $this->encodeText($this->ss->cntUserByStatus['nonvalid']), 'T', 1, 'L', 0);
+
+ $this->pdf->setY($this->pdf->getY() + 3);
+ $this->pdf->setX($X);
+ $this->pdf->setFont('','','6');
+ }
+ $this->pdf->setFont('','B','6');
+ $this->pdf->Cell(45, 0, $this->encodeText($lang['srv_statistic_redirection_sum']), 'T', 0, 'L', 0);
+ $this->pdf->Cell(45, 0, $this->encodeText($this->ss->cntUserByStatus['valid']+$this->ss->cntUserByStatus['nonvalid']), 'T', 1, 'L', 0);
+ $this->pdf->setFont('','','6');
+
+ $this->pdf->setX($X);
+
+ # preštejemo še neposlana vabila
+ $str = "SELECT count(*) FROM srv_invitations_recipients WHERE ank_id='".$this->anketa['id']."' AND sent='0' AND deleted='0'";
+ $qry = sisplet_query($str);
+ list($cntUnsent) = mysqli_fetch_row($qry);
+ $this->ss->userByStatus['invitation'][0] = (int)$cntUnsent;
+
+ # Å¡e email vabila
+ foreach ($this->ss->invitationStatus as $status)
+ {
+ if (!($this->ss->hideNullValues_status && $this->ss->userByStatus['invitation'][$status] == 0))
+ {// da ne delamo po neporebnem
+ //echo '<span class="dashboard_status_span">' . $lang['srv_userstatus_'.$status] . ' ('.$status.') :</span>' . $this->ss->userByStatus['invitation'][$status].'<br/>';
+ $this->pdf->Cell(45, 0, $this->encodeText($lang['srv_userstatus_'.$status] . ' ('.$status.') :'), 0, 0, 'L', 0);
+ $this->pdf->Cell(45, 0, $this->encodeText($this->ss->userByStatus['invitation'][$status]), 0, 1, 'L', 0);
+
+ $cntInvitation++;
+ $this->pdf->setX($X);
+ }
+ }
+
+ // vsota emaili
+ if ($cntInvitation > 0 || !$this->ss->hideNullValues_status) {
+ //echo '<div class="anl_dash_bt full strong"><span class="dashboard_status_span">'.$lang['srv_statistic_redirection_sum_invitation'].'</span>'.($this->cntUserByStatus['invitation']).'<br/></div><br/>';
+ $this->pdf->setFont('','B','6');
+ $this->pdf->Cell(45, 0, $this->encodeText($lang['srv_statistic_redirection_sum_invitation']), 'T', 0, 'L', 0);
+ $this->pdf->Cell(45, 0, $this->encodeText($this->ss->cntUserByStatus['invitation']), 'T', 1, 'L', 0);
+
+ $this->pdf->setY($this->pdf->getY() + 3);
+ $this->pdf->setX($X);
+ $this->pdf->setFont('','','6');
+ }
+
+ // testni podatki
+ if ((int)$this->ss->testDataCount > 0) {
+ $this->pdf->setFont('','B','6');
+
+ $this->pdf->Cell(90, 6, '', 'B', 1, 'L', 0);
+ $this->pdf->setX($X);
+
+ $this->pdf->Cell(45, 0, $this->encodeText($lang['srv_statistic_redirection_test']), 'T', 0, 'L', 0);
+ $this->pdf->Cell(45, 0, $this->encodeText((int)$this->ss->testDataCount), 'T', 1, 'L', 0);
+
+ $this->pdf->setX($X);
+ $this->pdf->setFont('','','6');
+ }
+
+ // Skupaj enot
+ SurveySetting::getInstance()->setSID($this->anketa);
+ $view_count = SurveySetting::getInstance()->getSurveyMiscSetting('view_count'); if ($view_count == "") $view_count = 0;
+
+ if ($view_count > 0 || !$this->ss->hideNullValues_status){
+ $this->pdf->setFont('','B','6');
+ $this->pdf->Cell(45, 0, $this->encodeText($lang['srv_statistic_redirection_sum_view']), 'T', 0, 'L', 0);
+ $this->pdf->Cell(45, 0, $this->encodeText($view_count), 'T', 1, 'L', 0);
+
+ $this->pdf->setX($X);
+ $this->pdf->setFont('','','6');
+ }
+ }
+
+ /** Funkcija prikaže statuse odgovorov
+ *
+ */
+ function DisplayAnswerStateView() {
+ global $lang;
+
+ $X = 200;
+ $Y = 25;
+ $height = 80;
+ $this->pdf->setXY($X, $Y);
+
+ //izrisemo okvir
+ $this->pdf->setFont('','B','8');
+ $this->pdf->SetTextColor(180, 0, 0);
+ $this->pdf->MultiCell(90, $height, $this->encodeText($lang['srv_statistic_answer_state_title']), 1, 'L', 0, 0, 0 ,0, true);
+
+ $this->pdf->setXY($X, $Y+8);
+ $this->pdf->setFont('','B','6');
+ $this->pdf->SetTextColor(0, 0, 0);
+
+
+ $order = array('3ll','4ll','5ll',5,6);
+
+ $this->pdf->Cell(40, 0, $this->encodeText($lang['srv_statistic_answer_state_status']), 'B', 0, 'L', 0);
+ $this->pdf->Cell(25, 0, $this->encodeText($lang['srv_statistic_answer_state_frequency']), 'BLR', 0, 'C', 0);
+ $this->pdf->Cell(25, 0, $this->encodeText($lang['srv_statistic_answer_state_percent']), 'B', 1, 'C', 0);
+ $this->pdf->setX($X);
+
+ $this->pdf->setFont('','','6');
+ foreach ($order as $key) {
+ $this->pdf->Cell(40, 0, $this->encodeText($lang['srv_userstatus_'.$key]), 0, 0, 'L', 0);
+
+ #frekvenca
+ $this->pdf->Cell(25, 0, $this->encodeText($this->ss->realUsersByStatus[$key]['cnt'] > 0 ? $this->ss->realUsersByStatus[$key]['cnt'] : '0'), 'LR', 0, 'C', 0);
+ #procenti
+ $this->pdf->Cell(25, 0, $this->encodeText( ((float)$this->ss->realUsersByStatus[$key]['percent'] > 1.0) ? '--' : $this->formatNumber($this->ss->realUsersByStatus[$key]['percent']*100,NUM_DIGIT_PERCENT,'%') ), 0, 1, 'C', 0);
+ $this->pdf->setX($X);
+ }
+ }
+
+
+ /** Funkcija za prikaz referalov
+ *
+ */
+ function DisplayReferalsView() {
+ global $lang;
+ global $admin_type;
+
+ $height = 80;
+ $X = 10;
+ $Y = $height+30;
+
+ $this->pdf->setXY($X, $Y);
+
+ //izrisemo okvir
+ $this->pdf->setFont('','B','8');
+ $this->pdf->SetTextColor(180, 0, 0);
+ $this->pdf->MultiCell(90, $height, $this->encodeText($lang['srv_statistic_redirection_title']), 1, 'L', 0, 0, 0 ,0, true);
+
+ $this->pdf->setXY($X, $Y+8);
+ $this->pdf->setFont('','B','6');
+ $this->pdf->SetTextColor(0, 0, 0);
+
+ // izrisemo graf
+ if ( ( $this->ss->cntValidRedirections + $this->ss->cntNonValidRedirections ) > 0) {
+ $maxValue = $this->ss->maxRedirection * GRAPH_REDUCE;
+ $value_sum = 0;
+
+ $this->pdf->Cell(20, 0, $this->encodeText($lang['srv_statistic_redirection_site']), 0, 0, 'L', 0);
+ $this->pdf->Cell(70, 0, $this->encodeText($lang['srv_statistic_redirection_click']), 0, 1, 'R', 0);
+ $this->pdf->setX($X);
+
+ $this->pdf->Cell(90, 3, $this->encodeText(''), 'T', 1, 'L', 0);
+ $this->pdf->setX($X);
+
+ $this->pdf->setFont('','','6');
+ if (count($this->ss->userRedirections["valid"])) {
+ $lineCount = 0;
+ foreach ($this->ss->userRedirections["valid"] as $key => $value) {
+
+ // zaenkrat je max stevilo vrstic 13 - drugace prebije na drugo stran
+ if($lineCount == 13){
+ $this->pdf->Cell(90, 0, ' ...', 0, 1, 'L', 0);
+ $this->pdf->setY($this->pdf->getY() + 1);
+ $this->pdf->setX($X);
+ break;
+ }
+
+ $this->pdf->Cell(20, 0, $this->encodeText($key), 0, 0, 'L', 0);
+
+ $width = ($maxValue && $value) ? (round($value / $maxValue * 60, 0)) : 0.1;
+ $width = ($width == 0) ? 0.1 : $width;
+ $this->pdf->Cell($width, 0, $this->encodeText(''), 1, 0, 'L', 1);
+
+ $this->pdf->Cell(10, 0, $this->encodeText($value), 0, 1, 'L', 0);
+
+ $this->pdf->setY($this->pdf->getY() + 1);
+ $this->pdf->setX($X);
+ $value_sum += $value;
+
+ $lineCount++;
+ }
+ }
+
+ // dodamo Å¡e direktni link
+ if ($this->ss->userRedirections["direct"] > 0) {
+ $value = $this->ss->userRedirections["direct"];
+ $this->pdf->Cell(20, 0, $this->encodeText($lang['srv_statistic_redirection_direct']), 0, 0, 'L', 0);
+
+ $width = ($maxValue && $value) ? (round($value / $maxValue * 60, 0)) : 0.1;
+ $width = ($width == 0) ? 0.1 : $width;
+ $this->pdf->Cell($width, 0, $this->encodeText(''), 1, 0, 'L', 1);
+
+ $this->pdf->Cell(10, 0, $this->encodeText($value), 0, 1, 'L', 0);
+
+ $this->pdf->setY($this->pdf->getY() + 1);
+ $this->pdf->setX($X);
+ $value_sum += $value;
+ }
+
+ // dodamo Å¡e email klik
+ if ($this->ss->userRedirections["email"] > 0) {
+ $value = $this->ss->userRedirections["email"];
+ $this->pdf->Cell(20, 0, $this->encodeText($lang['srv_statistic_redirection_email']), 0, 0, 'L', 0);
+
+ $width = ($maxValue && $value) ? (round($value / $maxValue * 60, 0)) : 0.1;
+ $width = ($width == 0) ? 0.1 : $width;
+ $this->pdf->Cell($width, 0, $this->encodeText(''), 1, 0, 'L', 1);
+
+ $this->pdf->Cell(10, 0, $this->encodeText($value), 0, 1, 'L', 0);
+
+ $this->pdf->setY($this->pdf->getY() + 1);
+ $this->pdf->setX($X);
+ $value_sum += $value;
+ }
+
+ // dodamo sumo
+ $this->pdf->setFont('','B','6');
+ $this->pdf->Cell(20, 0, $this->encodeText($lang['srv_statistic_redirection_sum_clicked']), 'T', 0, 'L', 0);
+ $this->pdf->Cell(70, 0, $this->encodeText($value_sum), 'T', 1, 'L', 0);
+ $this->pdf->setFont('','','6');
+ $this->pdf->setY($this->pdf->getY() + 3);
+ $this->pdf->setX($X);
+
+ // dodamo se neveljavne
+ $value_sum_nonvalid = 0;
+ for ($key = 2; $key >= 0; $key--) {
+ $value = $this->ss->userRedirections["$key"];
+ if ($value > 0) {
+ $this->pdf->Cell(20, 0, $this->encodeText($lang['srv_userstatus_'.$key]), 0, 0, 'L', 0);
+
+ $width = ($maxValue && $value) ? (round($value / $maxValue * 60, 0)) : 0.1;
+ $width = ($width == 0) ? 0.1 : $width;
+ $this->pdf->Cell($width, 0, $this->encodeText(''), 1, 0, 'L', 1);
+
+ $this->pdf->Cell(10, 0, $this->encodeText($value), 0, 1, 'L', 0);
+
+ $this->pdf->setY($this->pdf->getY() + 1);
+ $this->pdf->setX($X);
+ $value_sum_nonvalid += $value;
+ }
+ }
+ // dodamo sumo
+ if ($value_sum_nonvalid > 0 ) {
+ $this->pdf->Cell(20, 0, $this->encodeText($lang['srv_statistic_redirection_sum_nonvalid']), 0, 0, 'L', 0);
+ $this->pdf->Cell(70, 0, $this->encodeText($value_sum_nonvalid), 0, 1, 'L', 0);
+
+ $this->pdf->setY($this->pdf->getY() + 3);
+ $this->pdf->setX($X);
+ }
+ if (!($value_sum_nonvalid == 0 || $value_sum == 0 )) {
+ $this->pdf->Cell(20, 0, $this->encodeText($lang['srv_statistic_redirection_sum']), 0, 0, 'L', 0);
+ $this->pdf->Cell(70, 0, $this->encodeText($value_sum+$value_sum_nonvalid), 0, 1, 'L', 0);
+
+ $this->pdf->setY($this->pdf->getY() + 3);
+ $this->pdf->setX($X);
+ }
+ }
+ else {
+ $this->pdf->Cell(90, 0, $this->encodeText($lang['srv_statistic_show_no_referals']), 0, 1, 'L', 0);
+ $this->pdf->setX($X);
+ }
+
+
+ $this->pdf->setFont('','B','6');
+ $this->pdf->Cell(90, 0, $this->encodeText($lang['srv_count_ip_list'].': '.count($this->ss->ip_list)), 0, 1, 'L', 0);
+ $this->pdf->setX($X);
+
+ $this->pdf->setFont('','','6');
+ if ($admin_type==0 && count($this->ss->ip_list) > 0) {
+
+ $this->pdf->Cell(90, 0, $this->encodeText($lang['srv_detail_ip_list']), 0, 1, 'L', 0);
+ $this->pdf->setX($X);
+
+ foreach($this->ss->ip_list AS $key => $val) {
+ $this->pdf->Cell(20, 0, $this->encodeText($val), 0, 0, 'L', 0);
+ $this->pdf->Cell(70, 0, $this->encodeText($key), 0, 1, 'L', 0);
+ $this->pdf->setX($X);
+ }
+ }
+ }
+
+ /** Funkcija prikaze statistike
+ *
+ */
+ function DisplayDateView() {
+ global $lang;
+
+ $height = 80;
+ $X = 105;
+ $Y = $height+30;
+
+ $this->pdf->setXY($X, $Y);
+
+ //izrisemo okvir
+ $this->pdf->setFont('','B','8');
+ $this->pdf->SetTextColor(180, 0, 0);
+ $this->pdf->MultiCell(90, $height, $this->encodeText($lang['srv_statistic_timeline_title']), 1, 'L', 0, 0, 0 ,0, true);
+
+ $this->pdf->setXY($X, $Y+8);
+ $this->pdf->setFont('','','6');
+ $this->pdf->SetTextColor(0, 0, 0);
+
+ $this->ss->maxValue *= GRAPH_REDUCE;
+ $cnt=0;
+
+ if ($this->ss->arrayRange) {
+ $lineCount = 0;
+ foreach ($this->ss->arrayRange as $key => $value) {
+
+ // zaenkrat je max stevilo vrstic 19 - drugace prebije na drugo stran
+ if($lineCount == 19){
+ $this->pdf->Cell(90, 0, ' ...', 0, 1, 'L', 0);
+ $this->pdf->setY($this->pdf->getY() + 1);
+ $this->pdf->setX($X);
+ break;
+ }
+
+ $label = $this->ss->formatStatsString($key, $this->ss->period);
+
+ $this->pdf->Cell(20, 0, $this->encodeText($label), 0, 0, 'L', 0);
+
+ $width = ($this->ss->maxValue && $value) ? (round($value / $this->ss->maxValue * 60, 0)) : 0.1;
+ $width = ($width == 0) ? 0.1 : $width;
+ $this->pdf->Cell($width, 0, $this->encodeText(''), 1, 0, 'L', 1);
+
+ $this->pdf->Cell(10, 0, $this->encodeText($value), 0, 1, 'L', 0);
+
+ $this->pdf->setY($this->pdf->getY() + 1);
+ $this->pdf->setX($X);
+ $cnt+=$value;
+
+ $lineCount++;
+ }
+
+ // dodamo sumo
+ $this->pdf->setFont('','B','6');
+ $this->pdf->Cell(20, 0, $this->encodeText($lang['srv_statistic_redirection_sum'].':'), 'T', 0, 'L', 0);
+ $this->pdf->Cell(70, 0, $this->encodeText($cnt), 'T', 1, 'L', 0);
+ $this->pdf->setFont('','','6');
+ }
+ else {
+ $this->pdf->Cell(90, 0, $this->encodeText($lang['srv_no_data']), 0, 1, 'L', 0);
+ }
+ }
+
+ /** Funkcija za prikaz klikov po straneh
+ *
+ */
+ function DisplayPagesStateView() {
+ global $lang;
+
+ $height = 80;
+ $X = 200;
+ $Y = $height+30;
+
+ $this->pdf->setXY($X, $Y);
+
+ //izrisemo okvir
+ $this->pdf->setFont('','B','8');
+ $this->pdf->SetTextColor(180, 0, 0);
+ $this->pdf->MultiCell(90, $height, $this->encodeText($lang['srv_statistic_pages_state_title']), 1, 'L', 0, 0, 0 ,0, true);
+
+ $this->pdf->setXY($X, $Y+8);
+ $this->pdf->setFont('','','6');
+ $this->pdf->SetTextColor(0, 0, 0);
+
+ //ali lovimo samo strani ki niso bile preskoÄene
+ $grupa_jump = "AND ug.preskocena = 0 ";
+
+ $sql = "SELECT g.id, g.naslov, COUNT(ug.usr_id) cnt FROM srv_grupa g".
+ " LEFT JOIN (SELECT * FROM srv_user_grupa".$this->ss->db_table." ug WHERE".
+ " ug.time_edit BETWEEN '".$this->ss->startDate."' AND '".$this->ss->endDate."' + INTERVAL 1 DAY ".$grupa_jump.") as ug ON g.id = ug.gru_id".
+ " WHERE g.ank_id = '".$this->ss->getSurveyId()."' GROUP BY g.id ORDER BY g.vrstni_red";
+
+ $qry = sisplet_query($sql);
+ $pages=array();
+ $maxValue = 0;
+ while ($row = mysqli_fetch_assoc($qry)) {
+ $pages[$row['id']] = array('naslov'=>$row['naslov'],'cnt'=>$row['cnt']);
+ $maxValue = max($maxValue, $row['cnt']);
+ }
+
+ $maxValue = max($maxValue, $this->ss->realUsersByStatus['3ll']['cnt']);
+ $maxValue = $maxValue * GRAPH_REDUCE;
+
+
+ $this->pdf->Cell(20, 0, $this->encodeText($lang['srv_statistic_answer_state_status']), 0, 0, 'L', 0);
+ $this->pdf->Cell(70, 0, $this->encodeText($lang['srv_statistic_redirection_click']), 0, 1, 'R', 0);
+ $this->pdf->setX($X);
+
+ $this->pdf->Cell(90, 3, $this->encodeText(''), 'T', 1, 'L', 0);
+ $this->pdf->setX($X);
+
+ # status 3 - "Klik na anketo"
+ $value = $this->ss->realUsersByStatus['3ll']['cnt'];
+ $this->pdf->Cell(20, 0, $this->encodeText($lang['srv_userstatus_3']), 0, 0, 'L', 0);
+
+ $width = ($maxValue && $value) ? (round($value / $maxValue * 60, 0)) : 0.1;
+ $width = ($width == 0) ? 0.1 : $width;
+ $this->pdf->Cell($width, 0, $this->encodeText(''), 1, 0, 'L', 1);
+
+ $this->pdf->Cell(10, 0, $this->encodeText($value), 0, 1, 'L', 0);
+
+ $this->pdf->setY($this->pdf->getY() + 1);
+ $this->pdf->setX($X);
+
+ # status 4 - "Klik na prvo stran"
+ $value = $this->ss->realUsersByStatus['4ll']['cnt'];
+ $this->pdf->Cell(20, 0, $this->encodeText($lang['srv_userstatus_4']), 0, 0, 'L', 0);
+
+ $width = ($maxValue && $value) ? (round($value / $maxValue * 60, 0)) : 0.1;
+ $width = ($width == 0) ? 0.1 : $width;
+ $this->pdf->Cell($width, 0, $this->encodeText(''), 1, 0, 'L', 1);
+
+ $this->pdf->Cell(10, 0, $this->encodeText($value), 0, 1, 'L', 0);
+
+ $this->pdf->setY($this->pdf->getY() + 1);
+ $this->pdf->setX($X);
+
+ # status 5 - "Za&#269;el izpolnjevati",
+ $value = $this->ss->realUsersByStatus[5]['cnt'];
+ $this->pdf->Cell(20, 0, $this->encodeText($lang['srv_userstatus_5']), 0, 0, 'L', 0);
+
+ $width = ($maxValue && $value) ? (round($value / $maxValue * 60, 0)) : 0.1;
+ $width = ($width == 0) ? 0.1 : $width;
+ $this->pdf->Cell($width, 0, $this->encodeText(''), 1, 0, 'L', 1);
+
+ $this->pdf->Cell(10, 0, $this->encodeText($value), 0, 1, 'L', 0);
+
+ $this->pdf->setY($this->pdf->getY() + 1);
+ $this->pdf->setX($X);
+
+ #strani
+ $this->pdf->Cell(90, 3, $this->encodeText(''), 'T', 1, 'L', 0);
+ $this->pdf->setX($X);
+
+ $lineCount = 0;
+ foreach ($pages as $key => $page) {
+
+ // zaenkrat je max vrstic 9 - drugace prebije na drugo stran
+ if($lineCount == 9){
+ $this->pdf->Cell(90, 0, ' ...', 0, 1, 'L', 0);
+ $this->pdf->setY($this->pdf->getY() + 1);
+ $this->pdf->setX($X);
+ break;
+ }
+
+ $value = $page['cnt'];
+ $this->pdf->Cell(20, 0, $this->encodeText($page['naslov']), 0, 0, 'L', 0);
+
+ $width = ($maxValue && $value) ? (round($value / $maxValue * 60, 0)) : 0.1;
+ $width = ($width == 0) ? 0.1 : $width;
+ $this->pdf->Cell($width, 0, $this->encodeText(''), 1, 0, 'L', 1);
+
+ $this->pdf->Cell(10, 0, $this->encodeText($value), 0, 1, 'L', 0);
+
+ $this->pdf->setY($this->pdf->getY() + 1);
+ $this->pdf->setX($X);
+
+ $lineCount++;
+ }
+
+ #strani
+ $this->pdf->Cell(90, 3, $this->encodeText(''), 'T', 1, 'L', 0);
+ $this->pdf->setX($X);
+
+
+ # status 6 - "Koncal",
+ $value6 = $this->ss->realUsersByStatus[6]['cnt'];
+ $this->pdf->Cell(20, 0, $this->encodeText($lang['srv_userstatus_6']), 0, 0, 'L', 0);
+
+ $width = ($maxValue && $value6) ? (round($value6 / $maxValue * 60, 0)) : 0.1;
+ $width = ($width == 0) ? 0.1 : $width;
+ $this->pdf->Cell($width, 0, $this->encodeText(''), 1, 0, 'L', 1);
+
+ $this->pdf->Cell(10, 0, $this->encodeText($value6), 0, 1, 'L', 0);
+
+ $this->pdf->setY($this->pdf->getY() + 1);
+ $this->pdf->setX($X);
+
+ #Äe imamo lurkerje 6l dodamo skupaj konaÄal anketo (to je 6 + 6l) in nato Å¡e koliko jih je samo s statusom 6 (konÄal anketo)
+ # status 6l - "Koncal - lurker", izpiÅ¡emo samo Äe obstajajo 6l
+ $lurkerjev = $this->ss->realUsersByStatus['6ll']['cnt'] - $value6;
+ if ($lurkerjev > 0) {
+ $valueall = $this->ss->realUsersByStatus['6ll']['cnt'] ;
+
+ # konÄal s tem da je lurker (6l)
+ $this->pdf->Cell(20, 0, $this->encodeText($lang['srv_userstatus_6l']), 0, 0, 'L', 0);
+
+ $width = ($maxValue && $lurkerjev) ? (round($lurkerjev / $maxValue * 60, 0)) : 0.1;
+ $width = ($width == 0) ? 0.1 : $width;
+ $this->pdf->Cell($width, 0, $this->encodeText(''), 1, 0, 'L', 1);
+
+ $this->pdf->Cell(10, 0, $this->encodeText($lurkerjev), 0, 1, 'L', 0);
+
+ $this->pdf->setY($this->pdf->getY() + 1);
+ $this->pdf->setX($X);
+
+ #Ärta
+ $this->pdf->Cell(90, 3, $this->encodeText(''), 'T', 1, 'L', 0);
+ $this->pdf->setX($X);
+
+ # konÄal ne glede na to ali je lurker
+ $this->pdf->Cell(20, 0, $this->encodeText($lang['srv_userstatus_all']), 0, 0, 'L', 0);
+
+ $width = ($maxValue && $valueall) ? (round($valueall / $maxValue * 60, 0)) : 0.1;
+ $width = ($width == 0) ? 0.1 : $width;
+ $this->pdf->Cell($width, 0, $this->encodeText(''), 1, 0, 'L', 1);
+ $this->pdf->Cell(10, 0, $this->encodeText($valueall), 0, 1, 'L', 0);
+ }
+ }
+
+
+ /*Skrajsa tekst in doda '...' na koncu*/
+ function snippet($text,$length=64,$tail="...")
+ {
+ $text = trim($text);
+ $txtl = strlen($text);
+ if($txtl > $length)
+ {
+ for($i=1;$text[$length-$i]!=" ";$i++)
+ {
+ if($i == $length)
+ {
+ return substr($text,0,$length) . $tail;
+ }
+ }
+ $text = substr($text,0,$length-$i+1) . $tail;
+ }
+ return $text;
+ }
+
+ function drawLine()
+ {
+ $cy = $this->pdf->getY();
+ $this->pdf->Line(15, $cy , 195, $cy , $this->currentStyle);
+ }
+
+ function setUserId($usrId) {$this->anketa['uid'] = $usrId;}
+ function getUserId() {return ($this->anketa['uid'])?$this->anketa['uid']:false;}
+
+ function formatNumber($value,$digit=0,$sufix="")
+ {
+ if ( $value <> 0 && $value != null )
+ $result = round($value,$digit);
+ else
+ $result = "0";
+ $result = number_format($result, $digit, ',', '.').$sufix;
+
+ return $result;
+ }
+}
+
+?> \ No newline at end of file
diff --git a/admin/exportclases/class.pdfIzvozHeatmapImage.php b/admin/exportclases/class.pdfIzvozHeatmapImage.php
new file mode 100644
index 0000000..1183254
--- /dev/null
+++ b/admin/exportclases/class.pdfIzvozHeatmapImage.php
@@ -0,0 +1,451 @@
+<?php
+
+ global $site_path;
+
+ include_once('../../function.php');
+ include_once('../survey/definition.php');
+ require_once('../exportclases/class.enka.pdf.php');
+
+ define("ALLOW_HIDE_ZERRO_REGULAR", false); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za navadne odgovore
+ define("ALLOW_HIDE_ZERRO_MISSING", true); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za missinge
+
+ define("NUM_DIGIT_AVERAGE", 2, true); // stevilo digitalnih mest za povprecje
+ define("NUM_DIGIT_DEVIATION", 2, true); // stevilo digitalnih mest za povprecje
+
+ define("M_ANALIZA_DESCRIPTOR", "descriptor", true);
+ define("M_ANALIZA_FREQUENCY", "frequency", true);
+
+ define("FNT_FREESERIF", "freeserif", true);
+ define("FNT_FREESANS", "freesans", true);
+ define("FNT_HELVETICA", "helvetica", true);
+
+ define("FNT_MAIN_TEXT", FNT_FREESANS, true);
+ define("FNT_QUESTION_TEXT", FNT_FREESANS, true);
+ define("FNT_HEADER_TEXT", FNT_FREESANS, true);
+
+ define("FNT_MAIN_SIZE", 10, true);
+ define("FNT_QUESTION_SIZE", 9, true);
+ define("FNT_HEADER_SIZE", 10, true);
+
+ define("RADIO_BTN_SIZE", 3, true);
+ define("CHCK_BTN_SIZE", 3, true);
+ define("LINE_BREAK", 6, true);
+
+ define ('PDF_MARGIN_HEADER', 8);
+ define ('PDF_MARGIN_FOOTER', 12);
+ define ('PDF_MARGIN_TOP', 18);
+ define ('PDF_MARGIN_BOTTOM', 18);
+ define ('PDF_MARGIN_LEFT', 15);
+ define ('PDF_MARGIN_RIGHT', 15);
+
+/**
+ * @desc Class za generacijo pdf-a
+ */
+class PdfIzvozHeatmapImage {
+
+ var $anketa; // trenutna anketa
+ var $spremenljivka; // trenutna spremenljivka
+
+ var $headFileName = null; // pot do header fajla
+ var $dataFileName = null; // pot do data fajla
+ var $dataFileStatus = null; // status data datoteke
+
+ var $pi=array('canCreate'=>false); // za shrambo parametrov in sporocil
+ var $pdf;
+ var $currentStyle;
+
+ var $skin;
+ var $numbering;
+ var $frontpage;
+
+ var $sessionData; // podatki ki so bili prej v sessionu - za nastavitve, ki se prenasajo v izvoze...
+
+ var $current_loop = 'undefined';
+
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null, $sprID = null, $loop = null)
+ {
+ global $site_path;
+ global $global_user_id;
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) ){
+
+ $this->anketa = $anketa;
+ $this->spremenljivka = $sprID;
+
+ SurveyAnalysis::Init($this->anketa);
+ SurveyAnalysis::$setUpJSAnaliza = false;
+
+ SurveyChart::Init($this->anketa);
+
+ // create new PDF document
+ $this->pdf = new enka_TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
+
+ // Poskrbimo za datoteko s podatki
+ $SDF = SurveyDataFile::get_instance();
+ $SDF->init($this->anketa);
+ $SDF->prepareFiles();
+
+ $this->headFileName = $SDF->getHeaderFileName();
+ $this->dataFileName = $SDF->getDataFileName();
+ $this->dataFileStatus = $SDF->getStatus();
+
+ SurveyZankaProfiles :: Init($this->anketa, $global_user_id);
+ $this->current_loop = ($loop != null) ? $loop : $this->current_loop;
+
+ // preberemo nastavitve iz baze (prej v sessionu)
+ SurveyUserSession::Init($this->anketa);
+ $this->sessionData = SurveyUserSession::getData('charts');
+ }
+ else
+ {
+ $this->pi['msg'] = "Anketa ni izbrana!";
+ $this->pi['canCreate'] = false;
+ return false;
+ }
+
+ if ( SurveyInfo::getInstance()->SurveyInit($this->anketa) && $this->init())
+ {
+ SurveyUserSetting::getInstance()->Init($this->anketa, $global_user_id);
+ $this->skin = SurveyUserSetting :: getInstance()->getSettings('default_chart_profile_skin');
+ $this->numbering = SurveyDataSettingProfiles :: getSetting('chartNumbering');
+ $this->frontpage = SurveyDataSettingProfiles :: getSetting('chartFP');
+ }
+ else
+ return false;
+
+ // ce smo prisli do tu je vse ok
+ $this->pi['canCreate'] = true;
+
+ return true;
+ }
+
+ // SETTERS && GETTERS
+
+ function checkCreate()
+ {
+ return $this->pi['canCreate'];
+ }
+ function getFile($fileName)
+ {
+ //Close and output PDF document
+ ob_end_clean();
+ $this->pdf->Output($fileName, 'I');
+ }
+
+
+ function init()
+ {
+ global $lang;
+
+ // array used to define the language and charset of the pdf file to be generated
+ $language_meta = Array();
+ $language_meta['a_meta_charset'] = 'UTF-8';
+ $language_meta['a_meta_dir'] = 'ltr';
+ $language_meta['a_meta_language'] = 'sl';
+ $language_meta['w_page'] = $lang['page'];
+
+ //set some language-dependent strings
+ $this->pdf->setLanguageArray($language_meta);
+
+ //set margins
+ $this->pdf->setPrintHeaderFirstPage(true);
+ $this->pdf->setPrintFooterFirstPage(true);
+ $this->pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
+ $this->pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
+ $this->pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
+
+ // set header and footer fonts
+ $this->pdf->setHeaderFont(Array(FNT_HEADER_TEXT, "I", FNT_HEADER_SIZE));
+ $this->pdf->setFooterFont(Array(FNT_HEADER_TEXT, 'I', FNT_HEADER_SIZE));
+
+
+ // set document information
+ $this->pdf->SetAuthor('An Order Form');
+ $this->pdf->SetTitle('An Order');
+ $this->pdf->SetSubject('An Order');
+
+ // set default header data
+ $this->pdf->SetHeaderData(null, null, "www.1ka.si", $this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()));
+
+ //nastavimo datum za footer
+ $today = date("d.m.y");
+ $this->pdf->SetFooterDate($today);
+
+ //set auto page breaks
+ $this->pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
+
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', FNT_MAIN_SIZE);
+ //set image scale factor
+ $this->pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
+ return true;
+ }
+
+ function encodeText($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace(array("&scaron;","&#353;","&#269;"),array("�","�","�"),$text);
+ return strip_tags($text);
+ }
+
+ function createPdf(){
+ global $site_path;
+ global $lang;
+
+ // izpisemo prvo stran
+ if($this->frontpage == 1)
+ $this->createFrontPage();
+
+ $this->pdf->AddPage();
+
+ if($this->frontpage != 1){
+ $this->pdf->setFont('','B','11');
+ $this->pdf->MultiCell(150, 5, $lang['export_analysis_heatmap_image'], 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->setFont('','','7');
+ //Datum zbiranja podatkov
+ $this->pdf->MultiCell(0, 5, $this->getEntryDates(), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->ln(5);
+ }
+
+ $this->pdf->SetDrawColor(200, 200, 200);
+ $this->pdf->setFont('','B','6');
+
+
+ # preberemo header
+ if ($this->headFileName !== null) {
+ //polovimo podatke o nastavitvah trenutnega profila (missingi..)
+ SurveyAnalysis::$missingProfileData = SurveyMissingProfiles::getProfile(SurveyAnalysis::$currentMissingProfile);
+
+ // Preverimo ce imamo zanke (po skupinah)
+ SurveyAnalysis::$_LOOPS = SurveyZankaProfiles::getFiltersForLoops();
+
+ # Äe nimamo zank
+ if(count(SurveyAnalysis::$_LOOPS) == 0){
+
+ //$this->displayCharts();
+ $this->displayImage($this->spremenljivka);
+ }
+ else{
+ // izrisemo samo eno tabelo iz enega loopa
+ if($this->current_loop > 0){
+
+ $loop = SurveyAnalysis::$_LOOPS[(int)$this->current_loop-1];
+ $loop['cnt'] = $this->current_loop;
+ SurveyAnalysis::$_CURRENT_LOOP = $loop;
+
+ // Izpisemo naslov zanke za skupino
+ $this->pdf->setFont('','B','10');
+ $this->pdf->ln(5);
+ $this->pdf->MultiCell(200, 5, $this->encodeText($lang['srv_zanka_note'].$loop['text']), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->ln(5);
+ $this->pdf->setFont('','','6');
+
+ $this->displayCharts();
+ }
+ // Izrisemo vse tabele spremenljivka (iz vseh loopov)
+ else{
+ $loop_cnt = 0;
+ # Äe mamo zanke
+ foreach(SurveyAnalysis::$_LOOPS AS $loop) {
+ $loop_cnt++;
+ $loop['cnt'] = $loop_cnt;
+ SurveyAnalysis::$_CURRENT_LOOP = $loop;
+
+ // Izpisemo naslov zanke za skupino
+ $this->pdf->setFont('','B','10');
+ $this->pdf->ln(5);
+ $this->pdf->MultiCell(200, 5, $this->encodeText($lang['srv_zanka_note'].$loop['text']), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->ln(5);
+ $this->pdf->setFont('','','6');
+
+ $this->displayCharts();
+ }
+ }
+ }
+
+ } // end if else ($_headFileName == null)
+
+ }
+
+ function displayImage($spremenljivka){
+ global $site_url;
+ $image = $site_url.'main/survey/uploads/heatmap'.$spremenljivka.'.png';
+ //$this->pdf->Image($image, $x='', $y='', $w=140, $h, $type='PNG', $link='', $align='N', $resize=true, $dpi=1600, $palign='C', $ismask=false, $imgmask=false, $border=1);
+ $this->pdf->Image($image, $x='', $y='', $w=140, $h, $type='PNG');
+ }
+
+ // dodamo prvo stran
+ function createFrontPage()
+ {
+ global $lang;
+
+ $this->pdf->AddPage();
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', 16);
+
+ // dodamo naslov
+ $this->pdf->SetFillColor(224, 235, 255);
+ $this->pdf->SetTextColor(0);
+ $this->pdf->SetDrawColor(128, 0, 0);
+ $this->pdf->SetLineWidth(0.1);
+ $this->pdf->Sety(100);
+ $this->pdf->Cell(0, 10, $this->encodeText(SurveyInfo::getInstance()->getSurveyTitle()), 'TLR', 1,'C', 1, 0,0);
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', 13);
+ $this->pdf->Cell(0, 10, $this->encodeText($lang['srv_analiza_charts']), 'BLR', 1,'C', 1, 0,0);
+
+ // Datum zbiranja podatkov
+ $this->pdf->MultiCell(0, 5, $this->getEntryDates(), 0, 'C', 0, 1, 0 ,0, true);
+
+
+ // dodamo info:
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', 12);
+ $this->currentStyle = array('width' => 0.1, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(128, 0, 0));
+ $this->pdf->ln(30);
+ // $this->pdf->Write (0, $this->encodeText("Info:"), '', 0, 'l', 1, 1);
+
+ $this->drawLine();
+ // avtorja, št vprašanj, datum kreiranja
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_shortname'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()), 0, 'L', 0, 1, 0 ,0, true);
+ if ( SurveyInfo::getInstance()->getSurveyTitle() != SurveyInfo::getInstance()->getSurveyAkronim())
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_longname'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyTitle()), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_qcount'].': '.SurveyInfo::getInstance()->getSurveyQuestionCount(), 0, 'L', 0, 1, 0 ,0, true);
+
+ // Aktiviranost
+ $activity = SurveyInfo:: getSurveyActivity();
+ $_last_active = end($activity);
+ if (SurveyInfo::getSurveyColumn('active') == 1) {
+ $this->pdf->SetTextColor(0,150,0);
+ $this->pdf->MultiCell(95, 5, $this->encodeText($lang['srv_anketa_active2']), 0, 'L', 0, 1, 0 ,0, true);
+ } else {
+ # preverimo ali je bila anketa že aktivirana
+ if (!isset($_last_active['starts'])) {
+ # anketa Å¡e sploh ni bila aktivirana
+ $this->pdf->SetTextColor(255,120,0);
+ $this->pdf->MultiCell(95, 5, $this->encodeText($lang['srv_survey_non_active_notActivated']), 0, 'L', 0, 1, 0 ,0, true);
+ } else {
+ # anketa je že bila aktivirna ampak je sedaj neaktivna
+ $this->pdf->SetTextColor(255,120,0);
+ $this->pdf->MultiCell(95, 5, $this->encodeText($lang['srv_survey_non_active']), 0, 'L', 0, 1, 0 ,0, true);
+ }
+ }
+ $this->pdf->SetTextColor(0);
+
+ // Aktivnost
+ if( count($activity) > 0 ){
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_active_from'].': '.SurveyInfo::getInstance()->getSurveyStartsDate(), 0, 'L', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_active_until'].': '.SurveyInfo::getInstance()->getSurveyExpireDate(), 0, 'L', 0, 1, 0 ,0, true);
+ }
+
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_author'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyInsertName()), 0, 'L', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_edit'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyEditName()), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_date'].': '.SurveyInfo::getInstance()->getSurveyInsertDate(), 0, 'L', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_date'].': '.SurveyInfo::getInstance()->getSurveyEditDate(), 0, 'L', 0, 1, 0 ,0, true);
+ if ( SurveyInfo::getInstance()->getSurveyInfo() )
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_desc'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyInfo()), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', FNT_MAIN_SIZE);
+ $this->pdf->SetFillColor(0, 0, 0);
+ }
+
+
+ function setUserId($usrId) {$this->anketa['uid'] = $usrId;}
+ function getUserId() {return ($this->anketa['uid'])?$this->anketa['uid']:false;}
+
+ // vrnemo string za prvi in zadnji vnos
+ function getEntryDates(){
+ global $lang;
+
+ $prvi_vnos_date = SurveyInfo::getSurveyFirstEntryDate();
+ $prvi_vnos_time = SurveyInfo::getSurveyFirstEntryTime();
+ $zadnji_vnos_date = SurveyInfo::getSurveyLastEntryDate();
+ $zadnji_vnos_time = SurveyInfo::getSurveyLastEntryTime();
+
+ if ($prvi_vnos_date != null) {
+ $first = $this->dateFormat($prvi_vnos_date,'j.n.y');
+ $first .= $prvi_vnos_time != null ? (SurveyInfo::$dateTimeSeperator .$this->dateFormat($prvi_vnos_time,'G:i')) : '';
+ }
+ if ($zadnji_vnos_date != null) {
+ $last = $this->dateFormat($zadnji_vnos_date,'j.n.y');
+ $last .= $zadnji_vnos_time != null ? (SurveyInfo::$dateTimeSeperator .$this->dateFormat($zadnji_vnos_time,'G:i')) : '';
+ }
+
+ $text = $lang['srv_setting_collectdata_datetime'].$first.' '.$lang['s_to'].' '.$last;
+
+ return $text;
+ }
+
+ function dateFormat($input, $format) {
+ if ($input != '..') {
+ return date($format,strtotime($input));
+ } else {
+ return '';
+ }
+ }
+
+ function formatNumber($value,$digit=0,$sufix="")
+ {
+ if ( $value <> 0 && $value != null )
+ $result = round($value,$digit);
+ else
+ $result = "0";
+ $result = number_format($result, $digit, ',', '.').$sufix;
+
+ return $result;
+ }
+
+ function drawLine()
+ {
+ $cy = $this->pdf->getY();
+ $this->pdf->Line(15, $cy , 195, $cy , $this->currentStyle);
+ }
+
+ // Izpis opozorila ce ni vnesenih podatkov in ne prikazujemo grafa
+ function displayEmptyWarning($spid){
+
+ /*$spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ // Naslov posameznega grafa
+ $this->pdf->setFont('','b','6');
+ $this->pdf->MultiCell(165, 5, 'Graf '.$spremenljivka['variable'].' nima veljavnih podatkov!', 0, 'C', 0, 1, 0 ,0, true);
+ $this->pdf->setFont('','','6');*/
+ }
+
+ function displayTitle($spid){
+ global $lang;
+
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ $stevilcenje = ($this->numbering == 1 ? $spremenljivka['variable'].' - ' : '');
+ $title = $stevilcenje . $spremenljivka['naslov'];
+
+ /*if(SurveyDataSettingProfiles :: getSetting('chartNumerusText') == 0){
+ $title .= '(n = '.$DataSet->GetNumerus();
+ }*/
+
+ // Preverimo ce prebija slika stran
+ if(isset($this->sessionData[$spid])){
+ $settings = $this->sessionData[$spid];
+ $imgName = $settings['name'];
+ $size = getimagesize('pChart/Cache/'.$imgName);
+ $height = $size[1] / 5;
+
+ if($this->pdf->getY() + $height > 250)
+ {
+ $this->pdf->AddPage();
+ }
+ }
+
+
+ $this->pdf->setFont('','b','6');
+ $this->pdf->MultiCell(165, 5, $title, 0, 'C', 0, 1, 0 ,0, true);
+ if($spremenljivka['tip'] == 2){
+ $this->pdf->setFont('','','5');
+ $this->pdf->MultiCell(165, 1, $lang['srv_info_checkbox'], 0, 'C', 0, 1, 0 ,0, true);
+ }
+ $this->pdf->setFont('','','6');
+ }
+}
+
+?> \ No newline at end of file
diff --git a/admin/exportclases/class.pdfIzvozList.php b/admin/exportclases/class.pdfIzvozList.php
new file mode 100644
index 0000000..363e30a
--- /dev/null
+++ b/admin/exportclases/class.pdfIzvozList.php
@@ -0,0 +1,514 @@
+<?php
+
+ global $site_path;
+
+ include_once('../../function.php');
+ include_once('../survey/definition.php');
+ require_once('../exportclases/class.enka.pdf.php');
+
+ define("ALLOW_HIDE_ZERRO_REGULAR", false); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za navadne odgovore
+ define("ALLOW_HIDE_ZERRO_MISSING", true); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za missinge
+
+ define("NUM_DIGIT_AVERAGE", 2, true); // stevilo digitalnih mest za povprecje
+ define("NUM_DIGIT_DEVIATION", 2, true); // stevilo digitalnih mest za povprecje
+
+ define("M_ANALIZA_DESCRIPTOR", "descriptor", true);
+ define("M_ANALIZA_FREQUENCY", "frequency", true);
+
+ define("FNT_FREESERIF", "freeserif", true);
+ define("FNT_FREESANS", "freesans", true);
+ define("FNT_HELVETICA", "helvetica", true);
+
+ define("FNT_MAIN_TEXT", FNT_FREESANS, true);
+ define("FNT_QUESTION_TEXT", FNT_FREESANS, true);
+ define("FNT_HEADER_TEXT", FNT_FREESANS, true);
+
+ define("FNT_MAIN_SIZE", 10, true);
+ define("FNT_QUESTION_SIZE", 9, true);
+ define("FNT_HEADER_SIZE", 10, true);
+
+ define("RADIO_BTN_SIZE", 3, true);
+ define("CHCK_BTN_SIZE", 3, true);
+ define("LINE_BREAK", 6, true);
+
+ define ('PDF_MARGIN_HEADER', 8);
+ define ('PDF_MARGIN_FOOTER', 12);
+ define ('PDF_MARGIN_TOP', 18);
+ define ('PDF_MARGIN_BOTTOM', 18);
+ define ('PDF_MARGIN_LEFT', 15);
+ define ('PDF_MARGIN_RIGHT', 15);
+
+/**
+ * @desc Class za generacijo pdf-a
+ */
+class PdfIzvozList {
+
+ var $anketa; // trenutna anketa - array();
+
+ var $pi = array('canCreate'=>false); // za shrambo parametrov in sporocil
+ var $pdf;
+ var $currentStyle;
+
+ private $headFileName = null; # pot do header fajla
+ private $dataFileName = null; # pot do data fajla
+ private $dataFileStatus = null; # status data datoteke
+
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null, $sprID = null)
+ {
+ global $site_path;
+ global $global_user_id;
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) ){
+
+ $this->anketa['id'] = $anketa;
+ $this->spremenljivka = $sprID;
+
+ SurveyAnalysis::Init($this->anketa['id']);
+ SurveyAnalysis::$setUpJSAnaliza = false;
+
+ // create new PDF document
+ $this->pdf = new enka_TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
+
+ // Poskrbimo za datoteko s podatki
+ $SDF = SurveyDataFile::get_instance();
+ $SDF->init($this->anketa['id']);
+ $SDF->prepareFiles();
+
+ $this->headFileName = $SDF->getHeaderFileName();
+ $this->dataFileName = $SDF->getDataFileName();
+ $this->dataFileStatus = $SDF->getStatus();
+
+ // Nastavimo da izpisujemo samo prvih 5 spremenljivk
+ $_GET['spr_limit'] = 5;
+
+ // Nastavimo da nikoli ne izpisemo vabila
+ $_GET['email'] = 0;
+
+ SurveyDataDisplay::Init($this->anketa['id']);
+ }
+ else{
+ $this->pi['msg'] = "Anketa ni izbrana!";
+ $this->pi['canCreate'] = false;
+ return false;
+ }
+
+ if ( SurveyInfo::getInstance()->SurveyInit($this->anketa['id']) && $this->init()){
+ $this->anketa['uid'] = $global_user_id;
+ SurveyUserSetting::getInstance()->Init($this->anketa['id'], $this->anketa['uid']);
+ }
+ else
+ return false;
+
+ // ce smo prisli do tu je vse ok
+ $this->pi['canCreate'] = true;
+
+ return true;
+ }
+
+ // SETTERS && GETTERS
+
+ function checkCreate()
+ {
+ return $this->pi['canCreate'];
+ }
+ function getFile($fileName)
+ {
+ //Close and output PDF document
+ ob_end_clean();
+ $this->pdf->Output($fileName, 'I');
+ }
+
+
+ function init()
+ {
+ global $lang;
+
+ // array used to define the language and charset of the pdf file to be generated
+ $language_meta = Array();
+ $language_meta['a_meta_charset'] = 'UTF-8';
+ $language_meta['a_meta_dir'] = 'ltr';
+ $language_meta['a_meta_language'] = 'sl';
+ $language_meta['w_page'] = $lang['page'];
+
+ //set some language-dependent strings
+ $this->pdf->setLanguageArray($language_meta);
+
+ //set margins
+ $this->pdf->setPrintHeaderFirstPage(true);
+ $this->pdf->setPrintFooterFirstPage(true);
+ $this->pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
+ $this->pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
+ $this->pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
+
+ // set header and footer fonts
+ $this->pdf->setHeaderFont(Array(FNT_HEADER_TEXT, "I", FNT_HEADER_SIZE));
+ $this->pdf->setFooterFont(Array(FNT_HEADER_TEXT, 'I', FNT_HEADER_SIZE));
+
+
+ // set document information
+ $this->pdf->SetAuthor('An Order Form');
+ $this->pdf->SetTitle('An Order');
+ $this->pdf->SetSubject('An Order');
+
+ // set default header data
+ $this->pdf->SetHeaderData(null, null, "www.1ka.si", $this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()));
+
+ //set auto page breaks
+ $this->pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
+
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', FNT_MAIN_SIZE);
+ //set image scale factor
+ $this->pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
+ return true;
+ }
+
+ function encodeText($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace(array("&scaron;","&#353;","&#269;"),array("�","�","�"),$text);
+ return strip_tags($text);
+ }
+
+ function createPdf(){
+ global $site_path;
+ global $lang;
+
+ // izpisemo prvo stran
+ //$this->createFrontPage();
+
+ $this->pdf->AddPage();
+
+ $this->pdf->setFont('','B','11');
+ $this->pdf->MultiCell(150, 5, $lang['export_list'], 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->ln(5);
+
+ $this->displayTable();
+ }
+
+
+ function displayTable(){
+ global $site_path;
+ global $lang;
+
+
+ $folder = $site_path . EXPORT_FOLDER.'/';
+
+ //polovimo podatke o nastavitvah trenutnega profila (missingi..)
+ SurveyAnalysis::$missingProfileData = SurveyMissingProfiles::getProfile(SurveyAnalysis::$currentMissingProfile);
+
+ #preberemo HEADERS iz datoteke
+ SurveyAnalysis::$_HEADERS = unserialize(file_get_contents($this->headFileName));
+
+ #odstranimo sistemske variable
+ SurveyAnalysis::removeSystemVariables();
+
+ SurveyDataDisplay::$_VARS[VAR_DATA] = 1;
+ SurveyDataDisplay::$_VARS[VAR_SPR_LIMIT] = 5;
+ SurveyDataDisplay::$_VARS[VAR_META] = 0;
+ SurveyDataDisplay::$_VARS[VAR_EMAIL] = 0;
+ SurveyDataDisplay::$_VARS[VAR_RELEVANCE] = 0;
+ SurveyDataDisplay::$_VARS[VAR_EDIT] = 0;
+ SurveyDataDisplay::$_VARS[VAR_PRINT] = 0;
+ SurveyDataDisplay::$_VARS[VAR_MONITORING] = 0;
+
+ if(SurveyDataDisplay::$_VARS['view_date'])
+ SurveyDataDisplay::$_VARS[VAR_SPR_LIMIT]++;
+
+ # ponastavimo nastavitve- filter
+ SurveyDataDisplay::setUpFilter();
+
+
+ // Prestejemo stevilo stolpcev za vsako spremenljivko
+ $spr_cont = 0;
+ $rowArray = array();
+ $row_count = 0;
+ // visine naslovnih vrstic
+ $first_height = 0;
+ $second_height = 0;
+ $third_height = 0;
+ if(SurveyDataDisplay::$_VARS['view_date']){
+ $row_count ++;
+ }
+ foreach (SurveyAnalysis::$_HEADERS AS $spid => $spremenljivka) {
+ # preverjamo ali je meta
+ if ($spremenljivka['tip'] != 'm' && in_array($spremenljivka['tip'], SurveyAnalysis::$_FILTRED_TYPES)){
+ # ali imamo sfiltrirano spremenljivko
+ if ($vars_count == 0 || ($vars_count > 0 && isset(SurveyAnalysis::$_FILTRED_VARIABLES[$spid])) && count($spremenljivka['grids']) > 0) {
+
+ // prikazemo samo prvih 5 spremenljivk
+ if($spr_cont < 5) {
+
+ $rowArray[$spr_cont]['cnt_grd'] = count($spremenljivka['grids']);
+ $rowArray[$spr_cont]['cnt_var'] = count($spremenljivka['grids'][0]['variables']);
+
+ $row_count += count($spremenljivka['grids'][0]['variables']) * count($spremenljivka['grids']);
+ }
+ $spr_cont++;
+ }
+ }
+ }
+
+ $max_width = 180;
+ $single_width = floor($max_width / $row_count);
+ $single_width = ($single_width < 7) ? 7 : $single_width;
+
+
+ $this->pdf->setFont('','B','5');
+ $this->pdf->setDrawColor(0, 0, 0, 255);
+
+ // PRVA VRSTICA (naslovi spremenljivk)
+ $spr_cont = 0;
+ if(SurveyDataDisplay::$_VARS['view_date']){
+ $width = $single_width;
+ $this->pdf->MultiCell($width, 5, $this->snippet($this->encodeText($lang['srv_data_date']), $width-5), 1, 'L', 0, 0, 0 ,0, true);
+ }
+ foreach (SurveyAnalysis::$_HEADERS AS $spid => $spremenljivka) {
+ # preverjamo ali je meta
+ if ($spremenljivka['tip'] != 'm' && in_array($spremenljivka['tip'], SurveyAnalysis::$_FILTRED_TYPES)){
+ # ali imamo sfiltrirano spremenljivko
+ if ($vars_count == 0 || ($vars_count > 0 && isset(SurveyAnalysis::$_FILTRED_VARIABLES[$spid]))) {
+
+ // prikazemo samo prvih 5 spremenljivk
+ if ($spr_cont < 5) {
+ $width = $single_width * $rowArray[$spr_cont]['cnt_var'] * $rowArray[$spr_cont]['cnt_grd'];
+ $this->pdf->MultiCell($width, 5, $this->snippet($this->encodeText($spremenljivka['naslov']), $width-5), 1, 'L', 0, 0, 0 ,0, true);
+ }
+ $spr_cont++;
+ }
+ }
+ }
+ $this->pdf->MultiCell(1, 5, '', 0, 'L', 0, 1, 0 ,0, true);
+
+ // DRUGA VRSTICA (imena gridov)
+ $spr_cont = 0;
+ if(SurveyDataDisplay::$_VARS['view_date']){
+ $width = $single_width;
+ $this->pdf->MultiCell($width, 5, $this->snippet($this->encodeText($lang['srv_data_date']), $width-5), 1, 'L', 0, 0, 0 ,0, true);
+ }
+ foreach (SurveyAnalysis::$_HEADERS AS $spid => $spremenljivka) {
+ # preverjamo ali je meta
+ if ($spremenljivka['tip'] != 'm' && in_array($spremenljivka['tip'], SurveyAnalysis::$_FILTRED_TYPES)){
+ # ali imamo sfiltrirano spremenljivko
+ if ($vars_count == 0 || ($vars_count > 0 && isset(SurveyAnalysis::$_FILTRED_VARIABLES[$spid])) && count($spremenljivka['grids']) > 0) {
+
+ // prikazemo samo prvih 5 spremenljivk
+ if ($spr_cont < 5) {
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $width = $single_width * $rowArray[$spr_cont]['cnt_var'];
+ $this->pdf->MultiCell($width, 5, $this->snippet($this->encodeText($grid['naslov']), $width-5), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ }
+ $spr_cont++;
+ }
+ }
+ }
+ $this->pdf->MultiCell(1, 5, '', 0, 'L', 0, 1, 0 ,0, true);
+
+ // TRETJA VRSTICA (imena variabel)
+ $spr_cont = 0;
+ if(SurveyDataDisplay::$_VARS['view_date']){
+ $width = $single_width;
+ $this->pdf->MultiCell($width, 5, $this->snippet($this->encodeText($lang['srv_data_date']), $width-5), 1, 'L', 0, 0, 0 ,0, true);
+ }
+ foreach (SurveyAnalysis::$_HEADERS AS $spid => $spremenljivka) {
+ # preverjamo ali je meta
+ if ($spremenljivka['tip'] != 'm' && in_array($spremenljivka['tip'], SurveyAnalysis::$_FILTRED_TYPES)){
+ # ali imamo sfiltrirano spremenljivko
+ if ($vars_count == 0 || ($vars_count > 0 && isset(SurveyAnalysis::$_FILTRED_VARIABLES[$spid])) && count($spremenljivka['grids']) > 0) {
+
+ // prikazemo samo prvih 5 spremenljivk
+ if($spr_cont < 5) {
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ if (count ($grid['variables']) > 0) {
+ foreach ($grid['variables'] AS $vid => $variable ){
+
+ $text = $variable['naslov'];
+ if ($variable['other'] == 1)
+ $text .= '&nbsp;(text)';
+
+ $width = $single_width;
+ $this->pdf->MultiCell($width, 5, $this->snippet($this->encodeText($text), $width-5), 1, 'C', 0, 0, 0 ,0, true);
+ }
+ }
+ }
+ }
+ $spr_cont++;
+ }
+ }
+ }
+ $this->pdf->MultiCell(1, 5, '', 0, 'L', 0, 1, 0 ,0, true);
+
+
+ $this->pdf->setFont('','','5');
+
+
+ // Nastavimo stevilo izpisov - prikazemo vse
+ $_REC_LIMIT = '';
+ //$_REC_LIMIT = ' NR==1,NR==50';
+
+ $_command = '';
+ #preberemo podatke
+ // polovimo vrstice z statusom 5,6 in jih damo v zaÄasno datoteko
+ if (IS_WINDOWS) {
+ $_command = 'gawk -F"'.STR_DLMT.'" "BEGIN {OFS=\"\x7C\"} '.SurveyDataDisplay::$_CURRENT_STATUS_FILTER.' { print $0 }" '.$this->dataFileName;
+ }
+ else {
+ $_command = 'awk -F"'.STR_DLMT.'" \'BEGIN {OFS="\x7C"} '.SurveyDataDisplay::$_CURRENT_STATUS_FILTER.' { print $0 }\' '.$this->dataFileName;
+ }
+
+ // paginacija po stolpcih (spremenljivkah)
+ if (IS_WINDOWS) {
+ $_command .= ' | cut -d "|" -f 1,'.SurveyDataDisplay::$_VARIABLE_FILTER;
+ } else {
+ $_command .= ' | cut -d \'|\' -f 1,'.SurveyDataDisplay::$_VARIABLE_FILTER;
+ }
+
+ if ($_REC_LIMIT != '') {
+ #paginating
+ if (IS_WINDOWS) {
+ $_command .= ' | awk '.$_REC_LIMIT;
+ } else {
+ $_command .= ' | awk '.$_REC_LIMIT;
+ }
+ } else {
+ #$file_sufix = 'filtred_spr_pagination';
+ }
+
+ // zamenjamo | z </td><td> - NI POTREBNO
+ if (IS_WINDOWS) {
+ //$_command .= ' | sed "s*'.STR_DLMT.'*'.STR_LESS_THEN.'/td'.STR_GREATER_THEN.STR_LESS_THEN.'td'.STR_GREATER_THEN.'*g" >> '.$folder.'tmp_export_'.$this->anketa['id'].'_data'.TMP_EXT;
+ $_command .= ' >> '.$folder.'tmp_export_'.$this->anketa['id'].'_data'.TMP_EXT;
+ }
+ else {
+ //$_command .= ' | sed \'s*'.STR_DLMT.'*</td><td>*g\' >> '
+ //.$folder.'tmp_export_'.$this->anketa['id'].'_data'.TMP_EXT;
+ $_command .= ' >> '.$folder.'tmp_export_'.$this->anketa['id'].'_data'.TMP_EXT;
+ }
+
+ if (IS_WINDOWS) {
+ # ker so na WINsih težave z sortom, ga damo v bat fajl in izvedemo :D
+ $file_handler = fopen($folder.'cmd_'.$this->anketa['id'].'_to_run.bat',"w");
+ fwrite($file_handler,$_command);
+ fclose($file_handler);
+ $out_command = shell_exec($folder.'cmd_'.$this->anketa['id'].'_to_run.bat');
+ unlink($folder.'cmd_'.$this->anketa['id'].'_to_run.bat');
+ } else {
+ $out_command = shell_exec($_command);
+ }
+
+ if (file_exists($folder.'tmp_export_'.$this->anketa['id'].'_data'.TMP_EXT)) {
+ $f = fopen ($folder.'tmp_export_'.$this->anketa['id'].'_data'.TMP_EXT, 'r');
+
+ while ($line = fgets ($f)) {
+
+ $dataArray = array();
+ $dataArray = explode('|', $line);
+
+ // Ne upostevamo prve vrednosti (ID)
+ array_shift($dataArray);
+
+ foreach($dataArray as $key => $val){
+
+ $break = ($spr_cont == 4 && $gid == $rowArray[$spr_cont]['cnt_grd']-1 && $vid == $rowArray[$spr_cont]['cnt_var']-1) ? 1 : 0;
+ $width = $single_width;
+ $this->pdf->MultiCell($width, 5, $this->encodeText($val), 1, 'C', 0, $break, 0 ,0, true);
+ }
+ $this->pdf->MultiCell(1, 5, '', 0, 'L', 0, 1, 0 ,0, true);
+ }
+ }
+
+ if ($f) {
+ fclose($f);
+ }
+ if (file_exists($folder.'tmp_export_'.$this->anketa['id'].'_data'.TMP_EXT)) {
+ unlink($folder.'tmp_export_'.$this->anketa['id'].'_data'.TMP_EXT);
+ }
+ }
+
+
+ // dodamo prvo stran
+ function createFrontPage(){
+
+ $this->pdf->AddPage();
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', 16);
+
+ // dodamo naslov
+ $this->pdf->SetFillColor(224, 235, 255);
+ $this->pdf->SetTextColor(0);
+ $this->pdf->SetDrawColor(128, 0, 0);
+ $this->pdf->SetLineWidth(0.1);
+ $this->pdf->Sety(100);
+ $this->pdf->Cell(0, 16, $this->encodeText(SurveyInfo::getInstance()->getSurveyTitle()), 1, 1,'C', 1, 0,0);
+
+
+ // dodamo info:
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', 12);
+ $this->currentStyle = array('width' => 0.1, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(128, 0, 0));
+ $this->pdf->ln(30);
+ // $this->pdf->Write (0, $this->encodeText("Info:"), '', 0, 'l', 1, 1);
+
+ $this->drawLine();
+ // avtorja, št vprašanj, datum kreiranja
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_shortname'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()), 0, 'L', 0, 1, 0 ,0, true);
+ if ( SurveyInfo::getInstance()->getSurveyTitle() != SurveyInfo::getInstance()->getSurveyAkronim())
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_longname'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyTitle()), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_qcount'].': '.SurveyInfo::getInstance()->getSurveyQuestionCount(), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_active_from'].': '.SurveyInfo::getInstance()->getSurveyStartsDate(), 0, 'L', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_active_until'].': '.SurveyInfo::getInstance()->getSurveyExpireDate(), 0, 'L', 0, 1, 0 ,0, true);
+
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_author'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyInsertName()), 0, 'L', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_edit'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyEditName()), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_date'].': '.SurveyInfo::getInstance()->getSurveyInsertDate(), 0, 'L', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_date'].': '.SurveyInfo::getInstance()->getSurveyEditDate(), 0, 'L', 0, 1, 0 ,0, true);
+ if ( SurveyInfo::getInstance()->getSurveyInfo() )
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_desc'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyInfo()), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', FNT_MAIN_SIZE);
+ $this->pdf->SetFillColor(0, 0, 0);
+ }
+
+ function setUserId($usrId) {$this->anketa['uid'] = $usrId;}
+ function getUserId() {return ($this->anketa['uid'])?$this->anketa['uid']:false;}
+
+ function formatNumber($value,$digit=0,$sufix="")
+ {
+ if ( $value <> 0 && $value != null )
+ $result = round($value,$digit);
+ else
+ $result = "0";
+ $result = number_format($result, $digit, ',', '.').$sufix;
+
+ return $result;
+ }
+
+ function drawLine()
+ {
+ $cy = $this->pdf->getY();
+ $this->pdf->Line(15, $cy , 195, $cy , $this->currentStyle);
+ }
+
+ /*Skrajsa tekst in doda '...' na koncu*/
+ function snippet($text,$length=64,$tail="...")
+ {
+ $text = trim($text);
+ $txtl = strlen($text);
+ if($txtl > $length)
+ {
+ for($i=1;$text[$length-$i]!=" ";$i++)
+ {
+ if($i == $length)
+ {
+ return substr($text,0,$length) . $tail;
+ }
+ }
+ $text = substr($text,0,$length-$i+1) . $tail;
+ }
+ return $text;
+ }
+}
+
+?> \ No newline at end of file
diff --git a/admin/exportclases/class.pdfIzvozResults.php b/admin/exportclases/class.pdfIzvozResults.php
new file mode 100644
index 0000000..13eda1c
--- /dev/null
+++ b/admin/exportclases/class.pdfIzvozResults.php
@@ -0,0 +1,3822 @@
+<?php
+/*
+ * Created on 31.3.2009
+ *
+ * To change the template for this generated file go to
+ * Window - Preferences - PHPeclipse - PHP - Code Templates
+ */
+//error_reporting(E_ALL);
+set_time_limit(1800);
+
+
+include_once('../../function.php');
+require_once('../exportclases/class.enka.pdf.php');
+require_once('../../vendor/autoload.php');
+require_once('../survey/definition.php');
+
+
+define("FNT_FREESERIF", "freeserif", true);
+define("FNT_FREESANS", "freesans", true);
+define("FNT_HELVETICA", "helvetica", true);
+
+define("FNT_MAIN_TEXT", FNT_FREESANS, true);
+define("FNT_QUESTION_TEXT", FNT_FREESANS, true);
+define("FNT_HEADER_TEXT", FNT_FREESANS, true);
+
+define("FNT_MAIN_SIZE", 10, true);
+define("FNT_QUESTION_SIZE", 9, true);
+define("FNT_HEADER_SIZE", 10, true);
+
+define("RADIO_BTN_SIZE", 3, true);
+define("CHCK_BTN_SIZE", 3, true);
+define("LINE_BREAK", 6, true);
+
+define ('PDF_MARGIN_HEADER', 8);
+define ('PDF_MARGIN_FOOTER', 12);
+define ('PDF_MARGIN_TOP', 18);
+define ('PDF_MARGIN_BOTTOM', 18);
+define ('PDF_MARGIN_LEFT', 15);
+define ('PDF_MARGIN_RIGHT', 15);
+
+
+/** Class za generacijo pdf-a
+ *
+ * @desc: po novem je potrebno form elemente generirati roÄno kot slike
+ *
+ */
+class PdfIzvozResults {
+
+ var $anketa;// = array(); // trenutna anketa
+
+ var $grupa = null; // trenutna grupa
+
+ var $spremenljivka; // trenutna spremenljivka
+ var $printPreview = false; // ali kliÄe konstruktor
+ var $pi=array('canCreate'=>false); // za shrambo parametrov in sporocil
+ var $pdf;
+ var $currentStyle;
+
+ var $currentHeight = 0; // visina trenutnega vprasanja
+
+ var $SUS; //SurveyUserSettng
+ var $SA; //SurveyAnketa
+
+ var $db_table = '';
+
+ var $type = 0; // nacin izpisa vprasanj - kratek -> 0, dolg -> 1, 2 -> zelo kratek
+ var $pageBreak = 0; // vsak respondent na svoji strani
+ var $showIf = 0; // izpis if-ov
+ var $font = 10; // velikost pisave
+ var $numbering = 0; // ostevillcevanje vprasanj
+ var $showRecnum = 1; // prikaz recnuma
+ var $skipEmpty = 0; // izpusti vprasanja brez odgovora
+ var $skipEmptySub = 0; // izpusti podvprasanja brez odgovora
+ var $landscape = 0; // landscape izpis
+
+ var $loop_id = null; // id trenutnega loopa ce jih imamo
+
+ var $usr_type = null; // tip userja (null->iz vmesnika, author->avtor iz maila, respondent->respondent iz maila, other->other iz maila)
+ var $usr_id = null; // id userja ki je odgovarjal (na katerega so vezani podatki)
+ var $resp_id = null; // id userja na katerega so vezane nastavitve ankete (filtriranje spremenljivk...)
+
+ var $admin_type = -1; // tip userja ki odpira pdf (posebej nastavimo ker global admin_type ne dela iz mailov)
+
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null, $usr_type = null, $usr_id = null)
+ {
+ global $site_path;
+ global $global_user_id;
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) )
+ {
+ $this->anketa['id'] = $anketa;
+
+ $this->usr_id = $_GET['usr_id'];
+
+ // Ce prihajamo iz maila imamo nastavljen usr_type in usr_id
+ if($usr_type != null && $usr_id != null){
+ $this->usr_type = $usr_type;
+
+ //$this->resp_id = $usr_id;
+ // Ajda hoce da ce dobi po mailu pdf mora bit isti kot ga dobi respondent
+ $this->resp_id = $_GET['usr_id'];
+ }
+ // Drugace prihajamo normalno iz podatkov (usr_id je avtorjev -> $global_user_id)
+ else{
+ $this->resp_id = $global_user_id;
+ }
+
+ // Nastavimo admin type
+ $sqlU = sisplet_query("SELECT type FROM users WHERE id='".$this->resp_id."'");
+ if($rowU = mysqli_fetch_array($sqlU))
+ $this->admin_type = $rowU['type'];
+
+
+ // Po novem imamo globalne nastavitve
+ SurveySetting::getInstance()->Init($anketa);
+ $this->type = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_data_type');
+ $this->font = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_data_font_size');
+ $this->showIf = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_data_show_if');
+ $this->numbering = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_data_numbering');
+ $this->pageBreak = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_data_PB');
+ $this->showRecnum = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_data_show_recnum');
+ $this->skipEmpty = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_data_skip_empty');
+ $this->skipEmptySub = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_data_skip_empty_sub');
+ $this->landscape = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_data_landscape');
+
+
+ SurveyStatusProfiles::Init($anketa);
+
+ // create new PDF document
+ $orientation = ($this->landscape == 1) ? 'L' : 'P';
+ $this->pdf = new enka_TCPDF($orientation, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
+ }
+ else
+ {
+ $this->pi['msg'] = "Anketa ni izbrana!";
+ $this->pi['canCreate'] = false;
+ return false;
+ }
+
+ if ( SurveyInfo::getInstance()->SurveyInit($this->anketa['id']) && $this->init())
+ {
+ SurveyUserSetting::getInstance()->Init($this->anketa['id'], $global_user_id);
+
+ if (SurveyInfo::getInstance()->getSurveyColumn('db_table') == 1)
+ $this->db_table = '_active';
+ }
+ else
+ return false;
+ // ce smo prisli do tu je vse ok
+ $this->pi['canCreate'] = true;
+
+ return true;
+ }
+
+ // SETTERS && GETTERS
+
+ function checkCreate()
+ {
+ return $this->pi['canCreate'];
+ }
+ function getFile($fileName)
+ {
+ //Close and output PDF document
+ $this->pdf->Output($fileName, 'I');
+ }
+
+
+ function init()
+ {
+ global $lang;
+
+ // array used to define the language and charset of the pdf file to be generated
+ $language_meta = Array();
+ $language_meta['a_meta_charset'] = 'UTF-8';
+ $language_meta['a_meta_dir'] = 'ltr';
+ $language_meta['a_meta_language'] = 'sl';
+ $language_meta['w_page'] = $lang['page'];
+
+ //set some language-dependent strings
+ $this->pdf->setLanguageArray($language_meta);
+
+ //set margins
+ if(!$this->getUserId()){
+ $this->pdf->setPrintHeaderFirstPage(false);
+ $this->pdf->setPrintFooterFirstPage(false);
+ }
+ else{
+ $this->pdf->setPrintHeaderFirstPage(true);
+ $this->pdf->setPrintFooterFirstPage(true);
+ }
+ $this->pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
+ $this->pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
+ $this->pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
+
+ // set header and footer fonts
+ $this->pdf->setHeaderFont(Array(FNT_HEADER_TEXT, "I", FNT_HEADER_SIZE));
+ $this->pdf->setFooterFont(Array(FNT_HEADER_TEXT, 'I', FNT_HEADER_SIZE));
+
+
+ // set document information
+ $this->pdf->SetAuthor('An Order Form');
+ $this->pdf->SetTitle('An Order');
+ $this->pdf->SetSubject('An Order');
+
+ // set default header data
+ if($this->getUserId()){
+ $sqlu = sisplet_query("SELECT * FROM srv_user WHERE id = '".$this->getUserId()."'");
+ $rowu = mysqli_fetch_array($sqlu);
+
+ $rightTitle = ($this->showRecnum == 1) ? SurveyInfo::getInstance()->getSurveyAkronim().' (recnum '.$rowu['recnum'].')' : SurveyInfo::getInstance()->getSurveyAkronim();
+ $this->pdf->SetHeaderData(null, null, "www.1ka.si", $this->encodeText($rightTitle));
+
+ //nastavimo datum za footer
+ $this->pdf->SetFooterDate($rowu['time_edit']);
+ }
+ else
+ $this->pdf->SetHeaderData(null, null, "www.1ka.si", $this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()));
+
+ //set auto page breaks
+ $this->pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
+
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', $this->font);
+ //set image scale factor
+ $this->pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
+ return true;
+ }
+
+ function createPdf()
+ {
+ // Izpis vseh odgovorov (vsi respondenti -> max 300)
+ if(!$this->getUserId())
+ $this->outputAllResults();
+
+ // Izpis odgovorov enega respondenta
+ else
+ $this->outputSurvey();
+ }
+
+ function createFrontPage()
+ {
+ global $lang;
+
+ // dodamo prvo stran
+ $this->pdf->AddPage();
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', 16);
+
+ // dodamo naslov
+ $this->pdf->SetFillColor(224, 235, 255);
+ $this->pdf->SetTextColor(0);
+ $this->pdf->SetDrawColor(128, 0, 0);
+ $this->pdf->SetLineWidth(0.1);
+ $this->pdf->Sety(100);
+
+ if(!$this->getUserId()){
+ $this->pdf->Cell(0, 10, $this->encodeText(SurveyInfo::getInstance()->getSurveyTitle()), 'TLR', 1,'C', 1, 0,0);
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', 13);
+ $this->pdf->Cell(0, 10, $this->encodeText($lang['export_firstpage_results']), 'BLR', 1,'C', 1, 0,0);
+ }
+ else{
+ $this->pdf->Cell(0, 16, $this->encodeText(SurveyInfo::getInstance()->getSurveyTitle()), 1, 1,'C', 1, 0,0);
+ }
+
+ // dodamo info:
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', 12);
+ $this->currentStyle = array('width' => 0.1, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(128, 0, 0));
+ $this->pdf->ln(30);
+ // $this->pdf->Write (0, $this->encodeText("Info:"), '', 0, 'l', 1, 1);
+
+ $this->drawLine();
+ // avtorja, št vprašanj, datum kreiranja
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_shortname'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyTitle()), 0, 'L', 0, 1, 0 ,0, true);
+ if ( SurveyInfo::getInstance()->getSurveyTitle() != SurveyInfo::getInstance()->getSurveyAkronim())
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_longname'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_qcount'].': '.SurveyInfo::getInstance()->getSurveyQuestionCount(), 0, 'L', 0, 1, 0 ,0, true);
+
+ /// Aktiviranost
+ $activity = SurveyInfo:: getSurveyActivity();
+ $_last_active = end($activity);
+ if (SurveyInfo::getSurveyColumn('active') == 1) {
+ $this->pdf->SetTextColor(0,150,0);
+ $this->pdf->MultiCell(95, 5, $this->encodeText($lang['srv_anketa_active2']), 0, 'L', 0, 1, 0 ,0, true);
+ } else {
+ # preverimo ali je bila anketa že aktivirana
+ if (!isset($_last_active['starts'])) {
+ # anketa Å¡e sploh ni bila aktivirana
+ $this->pdf->SetTextColor(255,120,0);
+ $this->pdf->MultiCell(95, 5, $this->encodeText($lang['srv_survey_non_active_notActivated']), 0, 'L', 0, 1, 0 ,0, true);
+ } else {
+ # anketa je že bila aktivirna ampak je sedaj neaktivna
+ $this->pdf->SetTextColor(255,120,0);
+ $this->pdf->MultiCell(95, 5, $this->encodeText($lang['srv_survey_non_active']), 0, 'L', 0, 1, 0 ,0, true);
+ }
+ }
+ $this->pdf->SetTextColor(0);
+
+ // Aktivnost
+ if( count($activity) > 0 ){
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_active_from'].': '.SurveyInfo::getInstance()->getSurveyStartsDate(), 0, 'L', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_active_until'].': '.SurveyInfo::getInstance()->getSurveyExpireDate(), 0, 'L', 0, 1, 0 ,0, true);
+ }
+
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_author'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyInsertName()), 0, 'L', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_edit'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyEditName()), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_date'].': '.SurveyInfo::getInstance()->getSurveyInsertDate(), 0, 'L', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_date'].': '.SurveyInfo::getInstance()->getSurveyEditDate(), 0, 'L', 0, 1, 0 ,0, true);
+ if ( SurveyInfo::getInstance()->getSurveyInfo() )
+ $this->pdf->MultiCell(95, 5, $lang['export_firstpage_desc'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyInfo()), 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', $this->font);
+ $this->pdf->SetFillColor(0, 0, 0);
+ }
+
+ // Izpis vseh userjev, ki so odgovorili
+ function outputAllResults(){
+ global $lang;
+
+ //$izbranStatusProfile = SurveyUserSetting :: getInstance()->getSettings('default_status_profile_export');
+ $izbranStatusProfile = SurveyStatusProfiles :: getStatusAsQueryString();
+
+ $sqlu = sisplet_query("SELECT * FROM srv_user WHERE ank_id = '".$this->anketa['id']."' ".$izbranStatusProfile." AND deleted='0' AND preview='0' ORDER BY recnum");
+
+ //ce imamo vec kot 300 anketirancev ne izpisemo
+ $count = mysqli_num_rows($sqlu);
+ if( $count > 300 ){
+ $this->pdf->AddPage();
+
+ $this->pdf->setFont('','B','15');
+ $this->pdf->MultiCell(150, 5, 'NAPAKA!', 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->MultiCell(150, 5, 'Izpis ni možen zaradi prevelikega števila odgovorov ('.$count.')', 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->ln(5);
+ }
+ else{
+ // izpišemo prvo stran
+ $this->createFrontPage();
+ if($this->pageBreak == 0)
+ $this->pdf->AddPage();
+
+ while( $rowu = mysqli_fetch_array($sqlu) ){
+
+ //izpis statusa
+ switch($rowu['last_status']){
+ case '0':
+ $status = $lang['srv_userstatus_0'];
+ break;
+ case '1':
+ $status = $lang['srv_userstatus_1'];
+ break;
+ case '2':
+ $status = $lang['srv_userstatus_2'];
+ break;
+ case '3':
+ $status = $lang['srv_userstatus_3'];
+ break;
+ case '4':
+ $status = $lang['srv_userstatus_4'];
+ break;
+ case '5':
+ $status = $lang['srv_userstatus_5'];
+ break;
+ case '6':
+ $status = $lang['srv_userstatus_6'];
+ $status .= ($rowu['lurker'] == '1') ? ' - lurker' : '';
+ break;
+ }
+
+ if($this->pageBreak == 1)
+ $this->pdf->AddPage();
+
+ $this->pdf->setFont('','B', 14);
+
+ if($this->showRecnum == 1)
+ $this->pdf->MultiCell(150, 5, 'Recnum '.$rowu['recnum'].' (status '.$rowu['last_status'].' - '.$status.')', 0, 'L', 0, 1, 0 ,0, true);
+ else
+ $this->pdf->MultiCell(150, 5, 'Status '.$rowu['last_status'].' - '.$status, 0, 'L', 0, 1, 0 ,0, true);
+
+ $this->pdf->ln(5);
+
+ //izpis posameznega userja
+ $this->usr_id = $rowu['id'];
+ $this->outputUser();
+ }
+ }
+ }
+
+ // Izpis vprasalnika z odgovori
+ function outputSurvey(){
+ global $lang;
+
+ $rowA = SurveyInfo::getInstance()->getSurveyRow();
+
+ // izpišemo prvo stran
+ if (false)
+ $this->createFrontPage();
+
+ // Izpisemo vprasalnik
+ $this->pdf->AddPage();
+
+ // filtriramo spremenljivke glede na profil - SAMO CE NE PRIHAJAMO IZ MAILA!
+ $tmp_svp_pv = array();
+ if($this->usr_type == null){
+ SurveyVariablesProfiles :: Init($this->anketa['id']);
+
+ $dvp = SurveyUserSetting :: getInstance()->getSettings('default_variable_profile');
+ $_currentVariableProfile = SurveyVariablesProfiles :: checkDefaultProfile($dvp);
+
+ $tmp_svp_pv = SurveyVariablesProfiles :: getProfileVariables($_currentVariableProfile);
+
+ foreach ( $tmp_svp_pv as $vid => $variable) {
+ $tmp_svp_pv[$vid] = substr($vid, 0, strpos($vid, '_'));
+ }
+ }
+
+ // ce obstaja intro izpisemo intro - pri izpisu vprasalnika brez odgovorov (ce smo na prvi strani moramo biti v razsirjenem nacinu)
+ /*if(($rowA['expanded'] == 1 && $this->allResults == 3) || (!$this->getUserId() && $this->allResults == 0)){
+ if ( SurveyInfo::getInstance()->getSurveyShowIntro() )
+ {
+ $intro = (SurveyInfo::getInstance()->getSurveyIntro() == '') ? $lang['srv_intro'] : SurveyInfo::getInstance()->getSurveyIntro();
+
+ $this->pdf->Write (0, $this->encodeText(SurveyInfo::getInstance()->getSurveyIntro()), '', 0, 'L', 1, 1);
+ $this->pdf->Ln(LINE_BREAK);
+ //$this->pdf->drawLine();
+ $this->pdf->Ln(LINE_BREAK);
+ }
+ }*/
+
+
+ if ( $this->getGrupa() )
+ {
+ $sqlGrupeString = "SELECT id FROM srv_grupa WHERE ank_id='".$this->anketa['id']."' AND id = '".$this->getGrupa()."' ORDER BY vrstni_red";
+ }
+ else
+ {
+ $sqlGrupeString = "SELECT id FROM srv_grupa WHERE ank_id='".$this->anketa['id']."' ORDER BY vrstni_red";
+ }
+ $sqlGrupe = sisplet_query($sqlGrupeString);
+ while ( $rowGrupe = mysqli_fetch_assoc( $sqlGrupe ) ){ // sprehodmo se skozi grupe ankete
+
+ $this->grupa = $rowGrupe['id'];
+
+ // Pogledamo prvo spremenljivko v grupi ce je v loopu
+ $sql = sisplet_query("SELECT * FROM srv_spremenljivka WHERE gru_id='".$this->grupa."' AND visible='1' ORDER BY vrstni_red ASC");
+ $row = mysqli_fetch_array($sql);
+
+ // ce je ima loop za parenta
+ $if_id = $this->find_parent_loop($row['id']);
+ if ($if_id > 0){
+ $sql1 = sisplet_query("SELECT * FROM srv_loop WHERE if_id = '$if_id'");
+ $row1 = mysqli_fetch_array($sql1);
+ $this->loop_id = $this->findNextLoopId($row1['if_id']);
+
+ $if = Cache::srv_if($if_id);
+ $loop_title = $if['label'];
+
+ // gremo cez vse spremenljivke v trenutnem loopu
+ while($this->loop_id != null){
+
+ // Izrisemo naslov loopa
+ $this->pdf->SetTextColor(0,0,200);
+ $this->pdf->SetDrawColor(0,0,200);
+ $this->pdf->setFont('','B',$this->font);
+
+ $this->pdf->Write (0, $this->encodeText($this->dataPiping($loop_title)), '', 0, 'L', 1, 1);
+
+ $this->pdf->SetTextColor(0,0,200);
+ $this->pdf->SetDrawColor(0,0,200);
+ $this->pdf->setFont('','',$this->font);
+
+
+ $sqlSpremenljivke = sisplet_query("SELECT * FROM srv_spremenljivka WHERE gru_id='".$this->grupa."' AND visible='1' ORDER BY vrstni_red ASC");
+ while ($rowSpremenljivke = mysqli_fetch_assoc($sqlSpremenljivke))
+ { // sprehodimo se skozi spremenljivke grupe
+
+ $spremenljivka = $rowSpremenljivke['id'];
+ if ( $this->checkSpremenljivka ($spremenljivka) /*|| $this->showIf == 1*/ )
+ { // lahko izrišemo spremenljivke
+
+ // po potrebi obarvamo vprašanja
+ $this->pdf->SetTextColor(0);
+ if ($rowSpremenljivke['visible'] == 0)
+ {
+ if ($rowSpremenljivke['sistem'] == 1)
+ { // Äe je oboje = vijolÄno
+ $this->pdf->SetTextColor(128,0,128);
+ }
+ else
+ { // ÄŒe je skrito = rdeÄe
+ $this->pdf->SetTextColor(255,0,0);
+ }
+ }
+ else if ($rowSpremenljivke['sistem'] == 1)
+ $this->pdf->SetTextColor(0,0,255);
+
+
+ $this->pdf->SetTextColor(0,0,0);
+ $this->pdf->SetDrawColor(0,0,0);
+
+
+ // Izpis vprasalnika z rezultati
+
+ // Ce imamo kombinirano tabelo pogledamo ce prikazujemo katero od podtabel
+ if($rowSpremenljivke['tip'] == 24){
+
+ $subGrids = array();
+ $showGridMultiple = false;
+
+ // Loop po podskupinah gridov
+ $sqlSubGrid = sisplet_query("SELECT m.spr_id, s.tip, s.enota FROM srv_grid_multiple m, srv_spremenljivka s WHERE m.parent='".$spremenljivka."' AND m.spr_id=s.id");
+ while($rowSubGrid = mysqli_fetch_array($sqlSubGrid)){
+ if(in_array($rowSubGrid['spr_id'],$tmp_svp_pv) || count($tmp_svp_pv) == 0){
+ $showGridMultiple = true;
+ break;
+ }
+ }
+ }
+ // ce je nastavljen profil s filtriranimi spremenljivkami
+ if(in_array($spremenljivka,$tmp_svp_pv) || count($tmp_svp_pv) == 0 || ($rowSpremenljivke['tip'] == 24 && $showGridMultiple) || $rowSpremenljivke['tip'] == 5){
+
+ $this->currentHeight = 0;
+
+ // NAVADEN IZPIS rezultatov spremenljivke - kratek samo pri radio, checkbox, multiradio, multicheckbox, besedilo
+ //if( $this->type == 0 && in_array($rowSpremenljivke['tip'], array(1,2,3,6,16,21,7,8)) ){
+ if( $this->type == 0 && in_array($rowSpremenljivke['tip'], array(1,2,3,6,16,21,7,8,27)) ){
+ if($rowSpremenljivke['tip'] < 4)
+ $this->outputVprasanjeValues($rowSpremenljivke);
+ else
+ $this->outputVprasanje($rowSpremenljivke);
+
+ $this->outputSpremenljivkeValues($rowSpremenljivke);
+ }
+
+ // KRATEK IZPIS rezultatov spremenljivke
+ elseif($this->type == 2 && $rowSpremenljivke['tip'] != 24){
+ $this->outputVprasanjeValues($rowSpremenljivke);
+ $this->outputSpremenljivkeValues($rowSpremenljivke);
+ }
+
+ // DOLG IZPIS rezultatov
+ else{
+ $this->outputVprasanje($rowSpremenljivke);
+ $this->outputSpremenljivke($rowSpremenljivke);
+ }
+
+ $this->pdf->Ln(LINE_BREAK);
+ }
+ }
+ }
+
+ $this->loop_id = $this->findNextLoopId();
+ }
+ }
+ // Navadne spremenljivke ki niso v loopu
+ else{
+ $sqlSpremenljivke = sisplet_query("SELECT * FROM srv_spremenljivka WHERE gru_id='".$this->grupa."' AND visible='1' ORDER BY vrstni_red ASC");
+ while ($rowSpremenljivke = mysqli_fetch_assoc($sqlSpremenljivke))
+ { // sprehodimo se skozi spremenljivke grupe
+ $spremenljivka = $rowSpremenljivke['id'];
+ if ( $this->checkSpremenljivka ($spremenljivka) /*|| $this->showIf == 1*/ )
+ { // lahko izrišemo spremenljivke
+
+ // po potrebi obarvamo vprašanja
+ $this->pdf->SetTextColor(0);
+ if ($rowSpremenljivke['visible'] == 0)
+ {
+ if ($rowSpremenljivke['sistem'] == 1)
+ { // Äe je oboje = vijolÄno
+ $this->pdf->SetTextColor(128,0,128);
+ }
+ else
+ { // ÄŒe je skrito = rdeÄe
+ $this->pdf->SetTextColor(255,0,0);
+ }
+ }
+ else if ($rowSpremenljivke['sistem'] == 1)
+ $this->pdf->SetTextColor(0,0,255);
+
+
+ $this->pdf->SetTextColor(0,0,0);
+ $this->pdf->SetDrawColor(0,0,0);
+
+
+ // Izpis vprasalnika z rezultati
+
+ // Ce imamo kombinirano tabelo pogledamo ce prikazujemo katero od podtabel
+ if($rowSpremenljivke['tip'] == 24){
+
+ $subGrids = array();
+ $showGridMultiple = false;
+
+ // Loop po podskupinah gridov
+ $sqlSubGrid = sisplet_query("SELECT m.spr_id, s.tip, s.enota FROM srv_grid_multiple m, srv_spremenljivka s WHERE m.parent='".$spremenljivka."' AND m.spr_id=s.id");
+ while($rowSubGrid = mysqli_fetch_array($sqlSubGrid)){
+ if(in_array($rowSubGrid['spr_id'],$tmp_svp_pv) || count($tmp_svp_pv) == 0){
+ $showGridMultiple = true;
+ break;
+ }
+ }
+ }
+ // ce je nastavljen profil s filtriranimi spremenljivkami
+ if(in_array($spremenljivka,$tmp_svp_pv) || count($tmp_svp_pv) == 0 || $rowSpremenljivke['tip'] == 5 || ($rowSpremenljivke['tip'] == 24 && $showGridMultiple)){
+
+ $this->currentHeight = 0;
+
+ // NAVADEN IZPIS rezultatov spremenljivke - kratek samo pri radio, checkbox, multiradio, multicheckbox, besedilo
+ if( $this->type == 0 && in_array($rowSpremenljivke['tip'], array(1,2,3,6,16,21,7,8)) ){
+ if($rowSpremenljivke['tip'] < 4)
+ $this->outputVprasanjeValues($rowSpremenljivke);
+ else
+ $this->outputVprasanje($rowSpremenljivke);
+
+ $this->outputSpremenljivkeValues($rowSpremenljivke);
+ }
+
+ // KRATEK IZPIS rezultatov spremenljivke
+ elseif($this->type == 2 && $rowSpremenljivke['tip'] != 24){
+ $this->outputVprasanjeValues($rowSpremenljivke);
+ $this->outputSpremenljivkeValues($rowSpremenljivke);
+ }
+
+ // DOLG IZPIS rezultatov
+ else{
+ $this->outputVprasanje($rowSpremenljivke);
+ $this->outputSpremenljivke($rowSpremenljivke);
+ }
+
+ $this->pdf->Ln(LINE_BREAK);
+ }
+ }
+ }
+ }
+ }
+
+ // Äe izpisujemo grupo, ne izpisujemo zakljucka
+ if ( !$this->getGrupa() ){
+ if ( SurveyInfo::getInstance()->getSurveyShowConcl() && SurveyInfo::getInstance()->getSurveyConcl() )
+ { // ce obstaja footer izpisemo footer
+ $this->pdf->Ln(LINE_BREAK);
+ $this->pdf->drawLine();
+ $this->pdf->Ln(LINE_BREAK);
+ $this->pdf->Write (0, $this->encodeText(SurveyInfo::getInstance()->getSurveyConcl()), '', 0, 'L', 1, 1);
+ }
+ }
+ }
+
+
+ function outputVprasanje($spremenljivke){
+
+ // razsiritev ce imamo landscape postavitev
+ $expand_width = $this->landscape == 1 ? 1.5 : 1;
+
+ // Izpisemo tekst vprasanja
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', $this->font);
+
+ $pozicija_vprasanja = $this->pdf->getY();
+ $sqlVrstic = sisplet_query("SELECT count(*) FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."'");
+ $rowVrstic = mysqli_fetch_row($sqlVrstic);
+ $visina = round(($rowVrstic[0]+2) * 8);
+
+ $naslov = $this->dataPiping($spremenljivke['naslov']);
+
+ $linecount_vprasanja = $this->pdf->getNumLines($naslov, $this->pdf->getPageWidth());
+
+ if($pozicija_vprasanja + $linecount_vprasanja*4.7 /*+ $visina*/ > 240/$expand_width)
+ {
+ $this->pdf->AddPage();
+ }
+
+ //izpis if-ov pri vprasanju
+ if($this->showIf == 1){
+
+ /*$sqlIf = sisplet_query("SELECT * FROM srv_branching WHERE element_spr='$spremenljivke[id]'");
+ $rowIf = mysqli_fetch_array($sqlIf);
+
+ if ($rowIf['parent'] > 0){
+ $rowb = Cache::srv_if($rowIf['parent']);
+
+ if ($rowb['tip'] == 0)
+ $this->displayIf($rowIf['parent']);
+ }*/
+
+ // Po novem izpisemo pred vsakim vprasanjem vse ife znotraj katerih se nahaja
+ $b = new Branching($this->anketa['id']);
+ $parents = $b->get_parents($spremenljivke['id']);
+
+ $parents = explode('p_', $parents);
+ foreach ($parents AS $key => $val) {
+ if ( is_numeric(trim($val)) ) {
+ $parents[$key] = (int)$val;
+ } else {
+ unset($parents[$key]);
+ }
+ }
+
+ foreach ($parents AS $if) {
+ $this->displayIf($if);
+ }
+ }
+
+ // stevilcenje vprasanj
+ $numberingText = ($this->numbering == 1) ? $spremenljivke['variable'].' - ' : '';
+
+ $this->pdf->setFont('','B',$this->font);
+
+ $this->pdf->Write (0, $numberingText . $this->encodeText($naslov), '', 0, 'l', 1, 1);
+ /*$text = strip_tags($numberingText . $spremenljivke['naslov'], '<a><img><ul><li><ol><br>');
+ $this->pdf->WriteHTML($text);*/
+
+ $this->pdf->setFont('','',$this->font);
+
+ if($spremenljivke['tip'] != 5)
+ $this->pdf->Ln(LINE_BREAK);
+ }
+
+ function outputSpremenljivke($spremenljivke){
+ global $site_url;
+
+ // razsiritev ce imamo landscape postavitev
+ $expand_width = $this->landscape == 1 ? 1.5 : 1;
+
+ // Ce je spremenljivka v loopu
+ $loop_id = $this->loop_id == null ? " IS NULL" : " = '".$this->loop_id."'";
+
+ switch ( $spremenljivke['tip'] )
+ {
+ case 1: //radio
+ case 2: //check
+ case 3: //select -> radio
+
+ if ($this->getUserId())
+ {
+ // Äe imamo vnose, pogledamo kaj je odgovoril uporabnik
+ $sqlUserAnswerString = "SELECT vre_id FROM srv_data_vrednost".$this->db_table." WHERE spr_id='$spremenljivke[id]' AND usr_id='".$this->getUserId()."' AND loop_id $loop_id";
+ $sqlUserAnswer = sisplet_query($sqlUserAnswerString);
+ while ($rowAnswers = mysqli_fetch_assoc($sqlUserAnswer))
+ $userAnswer[$rowAnswers['vre_id']] = $rowAnswers['vre_id'];
+ }
+
+ // iz baze preberemo vse moznosti - ko nimamo izpisa z odgovori respondenta
+ $sqlVrednosti = sisplet_query("SELECT id, naslov, naslov2, variable, other FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+
+ $width = 180*$expand_width;
+
+ //ce imamo prikaz v vec stoplcih
+ $spremenljivkaParams = new enkaParameters($spremenljivke['params']);
+ $stolpci = ($spremenljivkaParams->get('stolpci') ? $spremenljivkaParams->get('stolpci') : 1);
+ $checkbox_limit = ($spremenljivkaParams->get('checkbox_limit') ? $spremenljivkaParams->get('checkbox_limit') : 0);
+
+ if ($stolpci > 1 && $spremenljivke['orientation']==1) {
+ //echo '<div style="float:left; width:'.(100/$stolpci).'%">';
+ $kategorij = mysqli_num_rows($sqlVrednosti);
+ $v_stolpcu = ceil($kategorij / $stolpci);
+
+ $width = round(180*$expand_width / $stolpci);
+ }
+
+ $yStart = $this->pdf->GetY();
+ $xStart = $this->pdf->GetX();
+ $count = 0;
+ while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti))
+ {
+ $prop['full'] = ( isset($userAnswer[$rowVrednost['id']]) );
+
+ //popravimo lokacijo ce imamo postavitev v vec stolpcih
+ if ( ($stolpci > 1) && ($spremenljivke['orientation']==1) ) {
+ $yPos = $count % $v_stolpcu;
+ $xPos = floor($count / $v_stolpcu);
+ $this->pdf->SetXY($this->pdf->GetX()+($width*$xPos), $yStart+(7*$yPos));
+ }
+
+ //dodamo eno celico da zamaknemo malo
+ $this->pdf->Cell(2, 5, '');
+ if ( $spremenljivke['tip'] == 1 || $spremenljivke['tip'] == 3 )
+ {
+ $this->pdf->RadioButton('vpr_'. $spremenljivke['id'], RADIO_BTN_SIZE, $prop);
+ $y1=$this->pdf->GetY();
+ $x1=$this->pdf->GetX();
+ }
+ else if ( $spremenljivke['tip'] == 2 )
+ {
+ $this->pdf->CheckBox('vpr_'. $spremenljivke['id'].'_'.$rowVrednost['id'], CHCK_BTN_SIZE, $prop);
+ $y=$this->pdf->GetY();
+ $x=$this->pdf->GetX();
+ }
+
+ $this->pdf->Cell(4, 0, '');
+ $stringTitle = ($this->encodeText(( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) ));
+
+ // Å¡e dodamo textbox Äe je polj other
+ if ($rowVrednost['other'] == 1 && $this->getUserId())
+ {
+ $_txt = '';
+
+ $sqlOtherText = sisplet_query("SELECT * FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND vre_id='".$rowVrednost['id']."' AND usr_id='".$this->getUserId()."' AND loop_id $loop_id");
+ $row4 = mysqli_fetch_assoc($sqlOtherText);
+ $_txt = $row4['text'];
+
+ $stringTitle .= ' '.$_txt;
+ }
+
+ $this->currentHeight = $this->pdf->getNumLines($stringTitle, $width);
+
+ if ( $spremenljivke['tip'] == 2 )
+ {
+ $y=$y-2;
+ $x=$x+3;
+ $this->pdf->MultiCell($width, 1, $stringTitle,0,'L',0,0,$x,$y);
+ }
+ else
+ {
+ $y1=$y1-1;
+ $x1=$x1+3;
+ $this->pdf->MultiCell($width, 1, $stringTitle,0,'L',0,0,$x1,$y1);
+ }
+
+ $this->currentHeight = ($this->currentHeight == 1) ? 2 : $this->currentHeight;
+ $this->pdf->setY($this->pdf->getY() + $this->currentHeight*4.7);
+
+ $count++;
+ }
+ break;
+
+ case 6: //multigrid
+ case 16:// multicheckbox
+ case 19:// multitext
+ case 20:// multinumber
+
+ //izris dvojnega multigrida
+ if(($spremenljivke['tip'] == 6 || $spremenljivke['tip'] == 16) && $spremenljivke['enota'] == 3){
+ $this->displayDoubleGrid($spremenljivke);
+ break;
+ }
+
+ $sqlVrstic = sisplet_query("SELECT count(*) FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."'");
+ $rowVrstic = mysqli_fetch_row($sqlVrstic);
+ $visina = round(($rowVrstic[0]+2) * 8);
+
+ $defw_full = 210*$expand_width;
+ $defw_fc = 24*$expand_width; // sirina prve celice
+ $defw_max = 35*$expand_width; // max sirina ostalih celic
+
+ $sqlStVrednosti = sisplet_query("SELECT count(*) FROM srv_grid WHERE spr_id='".$spremenljivke['id']."' ORDER BY id");
+ $rowStVrednost = mysqli_fetch_row($sqlStVrednosti);
+
+ $kolon = $rowStVrednost[0]+1;
+ // Ce imamo diferencial
+ if($spremenljivke['tip'] == 6 && $spremenljivke['enota'] == 1){
+ $kolon++;
+ }
+
+ switch($kolon)
+ {
+ case 2:
+ $defw_fc = 110*$expand_width;
+ break;
+ case 3:
+ $defw_fc = 85*$expand_width;
+ break;
+ case 4:
+ $defw_fc = 60*$expand_width;
+ break;
+ case 5:
+ $defw_fc = 40*$expand_width;
+ break;
+ case 6:
+ $defw_fc = 35*$expand_width;
+ break;
+ default:
+ $defw_fc = 24*$expand_width;
+ }
+ $w_oc = ( $defw_full - $defw_fc ) / $kolon;
+ if ( $w_oc > $defw_max )
+ $w_oc = $defw_max;
+
+ $countVrednosti=0;
+ $halfWidth = ($w_oc)/ 2;
+
+
+ // Prelom strani ce je kateri od naslovov gridov predolg
+ $sqlVsehVrednsti = sisplet_query("SELECT naslov, variable,vrstni_red FROM srv_grid WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ $linecount = 0;
+ $break = false;
+ while ($rowVsehVrednosti = mysqli_fetch_assoc($sqlVsehVrednsti))
+ {
+ // Äe je naslov null izpiÅ¡emo variable
+ $stringHeader_title = $this->encodeText( $rowVsehVrednosti['naslov'] ? $rowVsehVrednosti['naslov'] : $rowVsehVrednosti['variable'] );
+ /*Zascita pred prepisovanjem na novo stran za zgornje parametre*/
+ $pozicija_vrha = $this->pdf->getY();
+
+ $linecount = $this->pdf->getNumLines($stringHeader_title, $w_oc);
+ $this->currentHeight = ($linecount > $this->currentHeight) ? $linecount : $this->currentHeight;
+
+ if(!$break && $pozicija_vrha + $linecount*4.7 > 250/$expand_width)
+ {
+ $this->pdf->AddPage();
+ $break = true;
+ }
+ }
+
+ /*Izpis presledka na zaÄetku*/
+ $this->pdf->Cell($defw_fc, 0,'');
+
+ // izišemo header celice
+ $sqlVsehVrednsti = sisplet_query("SELECT naslov, variable,vrstni_red FROM srv_grid WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ while ($rowVsehVrednosti = mysqli_fetch_assoc($sqlVsehVrednsti))
+ {
+ // Äe je naslov null izpiÅ¡emo variable
+ $stringHeader_title = $this->encodeText( $rowVsehVrednosti['naslov'] ? $rowVsehVrednosti['naslov'] : $rowVsehVrednosti['variable'] );
+
+ /*Izpis zgornje vrstice*/
+ $this->pdf->MultiCell($w_oc, 1,$stringHeader_title,0,'C',0,0,0,0,true,0);
+ }
+
+ $this->pdf->setY($this->pdf->getY() + $this->currentHeight*6);
+
+ $row_count = 1;
+ $sqlVrednosti = sisplet_query("SELECT *,id, naslov, naslov2, variable FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti))
+ {
+ $skipRow = false;
+
+ // Ce imamo nastavljeno preskakovanje podvprasanj preverimo ce je kaksen odgovor v vrstici
+ if($this->skipEmptySub == 1){
+
+ $skipRow = true;
+ if($spremenljivke['tip'] == 6)
+ $sqlUserAnswer = sisplet_query("SELECT grd_id FROM srv_data_grid".$this->db_table." WHERE spr_id = '".$rowVrednost['spr_id']."' AND usr_id = '".$this->getUserId()."' AND vre_id = '".$rowVrednost['id']."' AND loop_id $loop_id");
+ elseif($spremenljivke['tip'] == 16)
+ $sqlUserAnswer = sisplet_query("SELECT grd_id FROM srv_data_checkgrid".$this->db_table." WHERE spr_id = '".$rowVrednost['spr_id']."' AND usr_id = '".$this->getUserId()."' AND vre_id = '".$rowVrednost['id']."' AND loop_id $loop_id");
+ else
+ $sqlUserAnswer = sisplet_query("SELECT grd_id, text FROM srv_data_textgrid".$this->db_table." WHERE spr_id = '".$rowVrednost['spr_id']."' AND usr_id = '".$this->getUserId()."' AND vre_id = '".$rowVrednost['id']."' AND loop_id $loop_id");
+
+ if(mysqli_num_rows($sqlUserAnswer) > 0)
+ $skipRow = false;
+ }
+
+
+ if($skipRow == false){
+
+ // barva vrstice
+ $row_color = $row_count%2;
+
+ $stringCell_title = $this->encodeText(( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) );
+ /*Zascita pred prepisovanjem na novo stran za bocne parametre*/
+ $pozicija_boka = $this->pdf->getY();
+ $pozicija_bokaX = $this->pdf->getX();
+
+ // Å¡e dodamo textbox Äe je polj other
+ $_txt = '';
+ if ( $rowVrednost['other'] == 1 && $this->getUserId() )
+ {
+ $sqlOtherText = sisplet_query("SELECT * FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND vre_id='".$rowVrednost['id']."' AND usr_id='".$this->getUserId()."' AND loop_id $loop_id");
+ $row4 = mysqli_fetch_assoc($sqlOtherText);
+ $_txt = ' '.$row4['text'];
+ }
+ $stringCell_title .= $_txt.':';
+
+ $firstHeight = 0;
+
+ $linecount = $this->pdf->getNumLines($stringCell_title, $defw_fc);
+
+ $cellHeight1 = 0;
+ $cellHeight2 = 0;
+ if($spremenljivke['tip'] == 6 && $spremenljivke['enota'] == 1){
+ $stringCell_title2 = $this->encodeText($rowVrednost['naslov2']);
+ $linecount = ($this->pdf->getNumLines($stringCell_title2, $defw_fc) > $linecount) ? $this->pdf->getNumLines($stringCell_title2, $defw_fc) : $linecount;
+
+ $cellHeight1 = $this->getCellHeight($this->encodeText($stringCell_title), $defw_fc);
+ $cellHeight2 = $this->getCellHeight($this->encodeText($stringCell_title2), $defw_fc);
+
+ $endY = ($cellHeight2 > $cellHeight1) ? $pozicija_boka+$cellHeight2 : $pozicija_boka+$cellHeight1;
+ $endY = ($endY - $startY > LINE_BREAK) ? $endY : $pozicija_boka+LINE_BREAK;
+ $startX = $this->pdf->getX() + $defw_fc;
+ }
+
+ if($pozicija_boka + $linecount*4.7 > 250/$expand_width)
+ {
+ $this->pdf->AddPage();
+ $pozicija_boka = $this->pdf->getY();
+ }
+ $firstHeight = $linecount;
+
+ if($spremenljivke['tip'] == 6 && $spremenljivke['enota'] == 1){
+ $endY = ($cellHeight2 > $cellHeight1) ? $pozicija_boka+$cellHeight2 : $pozicija_boka+$cellHeight1;
+ $endY = ($endY - $startY > LINE_BREAK) ? $endY : $pozicija_boka+LINE_BREAK;
+ }
+
+ $startX = $this->pdf->getX() + $defw_fc;
+ $startY = $pozicija_boka;
+
+ /*Izpis boÄnega stolpca*/
+ if($cellHeight2 > $cellHeight1)
+ $this->pdf->SetXY($this->pdf->getX(), ($startY+$endY)/2 - ($cellHeight1)/2);
+ $this->pdf->MultiCell($defw_fc, $cellHeight1, $stringCell_title,0,'C',0,1,0,0,true,0);
+
+ if($spremenljivke['tip'] != 6 || $spremenljivke['enota'] != 1){
+ $endY = $this->pdf->getY();
+ }
+
+ $shtevec = 0;
+
+ // Pri multitext in multinumber loopamo cez vrstico da dobimo visino najvisje celice
+ if($spremenljivke['tip'] == 19 || $spremenljivke['tip'] == 20){
+
+ $height = 0;
+
+ $sqlVsehVrednsti = sisplet_query("SELECT id FROM srv_grid WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ while ($rowVsehVrednosti = mysqli_fetch_assoc($sqlVsehVrednsti)){
+ // poiÅ¡Äemo kaj je odgovoril uporabnik:
+ if ($this->getGrupa())
+ {
+ $sqlUserAnswer = sisplet_query("SELECT grd_id, text FROM srv_data_textgrid".$this->db_table." WHERE spr_id = '".$rowVrednost['spr_id']."' AND usr_id = '".$this->getUserId()."' AND vre_id = '".$rowVrednost['id']."' AND grd_id = '".$rowVsehVrednosti['id']."' AND loop_id $loop_id");
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+ }
+
+ $linecount = $this->pdf->getNumLines($userAnswer['text'], $w_oc);
+ $height = ($linecount*4.2 > $height) ? $linecount*4.2 : $height;
+ }
+
+ if($height > 5){
+ $endY += $height - LINE_BREAK;
+ }
+ else{
+ $height = LINE_BREAK;
+ }
+ $height = ($height > $firstHeight*4.7) ? $height : $firstHeight*4.7;
+ }
+
+ // Vsaka druga vrstica ima sivo ozadje
+ $XX = $this->pdf->getX();
+ $YY = $this->pdf->getY();
+ $this->pdf->setXY(15, $startY);
+ $this->pdf->SetFillColor(242,243,241);
+ $this->pdf->MultiCell($defw_full, $endY-$startY,'',0,'C',$row_color,1,0,0,true,0);
+ $this->pdf->SetFillColor(0);
+ $this->pdf->setXY($XX, $YY);
+ $row_count++;
+
+ // Loopamo cez vrstice in izrisujemo celice
+ $sqlVsehVrednsti = sisplet_query("SELECT id FROM srv_grid WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ while ($rowVsehVrednosti = mysqli_fetch_assoc($sqlVsehVrednsti)){
+ // poiÅ¡Äemo kaj je odgovoril uporabnik:
+ if ($this->getGrupa())
+ {
+ if($spremenljivke['tip'] == 6)
+ $sqlUserAnswer = sisplet_query("SELECT grd_id FROM srv_data_grid".$this->db_table." WHERE spr_id = '".$rowVrednost['spr_id']."' AND usr_id = '".$this->getUserId()."' AND vre_id = '".$rowVrednost['id']."' AND loop_id $loop_id");
+ elseif($spremenljivke['tip'] == 16)
+ $sqlUserAnswer = sisplet_query("SELECT grd_id FROM srv_data_checkgrid".$this->db_table." WHERE spr_id = '".$rowVrednost['spr_id']."' AND usr_id = '".$this->getUserId()."' AND vre_id = '".$rowVrednost['id']."' AND grd_id = '".$rowVsehVrednosti['id']."' AND loop_id $loop_id");
+ else
+ $sqlUserAnswer = sisplet_query("SELECT grd_id, text FROM srv_data_textgrid".$this->db_table." WHERE spr_id = '".$rowVrednost['spr_id']."' AND usr_id = '".$this->getUserId()."' AND vre_id = '".$rowVrednost['id']."' AND grd_id = '".$rowVsehVrednosti['id']."' AND loop_id $loop_id");
+
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+ }
+
+ $prop['full'] = ($rowVsehVrednosti['id'] == $userAnswer['grd_id']) ? true : false;
+ $this->pdf->SetXY($startX + $shtevec*$w_oc , ($startY+$endY)/2 - (CHCK_BTN_SIZE+1)/2);
+ $this->pdf->Cell($halfWidth, 0, '',0,0,1,0);
+ if($spremenljivke['tip']==6) {
+ $this->pdf->RadioButton('vpr_'. $rowVrednost['id'], RADIO_BTN_SIZE, $prop);
+ }
+ elseif($spremenljivke['tip']==16) {
+ $this->pdf->CheckBox('vpr_'. $spremenljivke['id'].'_'.$rowVrednost['id'], CHCK_BTN_SIZE, $prop);
+ }
+ else{
+ $this->pdf->SetXY($this->pdf->getX() - $w_oc/2, $startY);
+ //$this->pdf->setX($this->pdf->getX() - $w_oc/2);
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', 8);
+ //$this->pdf->SetTextColor(0,128,0);
+ $this->pdf->SetTextColor(179,0,128);
+ //$this->pdf->TextBoxes($w_oc,LINE_BREAK);
+ $this->pdf->SetFillColor(255,255,255);
+ $this->pdf->MultiCell($w_oc-1, $height, $userAnswer['text'],1,'C',1,1,0,0,true,0);
+ $this->pdf->SetFillColor(0);
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', $this->font);
+ $this->pdf->SetTextColor(0,0,0);
+ }
+ $this->pdf->Cell($halfWidth, 0, '',0,0,1,0);
+ $shtevec++;
+ }
+
+ // Bocni stolpec na desni (ce imamo diferencial)
+ if($spremenljivke['tip'] == 6 && $spremenljivke['enota'] == 1){
+ if($cellHeight1 > $cellHeight2)
+ $this->pdf->SetXY($this->pdf->getX(), ($startY+$endY)/2 - ($cellHeight2)/2);
+ else
+ $this->pdf->setXY($this->pdf->getX(), $startY);
+
+ $this->pdf->MultiCell($defw_fc, $cellHeight2,$stringCell_title2,0,'C',0,1,0,0,true,0);
+ }
+
+ $this->pdf->setY($endY);
+ }
+ }
+
+ break;
+ case 24: // Mesan multigrid
+ $this->displayGridMultiple($spremenljivke);
+ break;
+ case 4: //text
+ if ( $this->getUserId() )
+ {
+ $userAnswerString = "SELECT text FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND usr_id='".$this->getUserId()."' AND loop_id $loop_id;";
+ $sqlUserAnswer = sisplet_query($userAnswerString);
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+ //$this->pdf->SetTextColor(0,128,0);
+ $this->pdf->SetTextColor(179,0,128);
+ $this->pdf->MultiCell(180*$expand_width, 5, $this->encodeText($userAnswer['text']), 1, 'L', 0, 1, 0 ,0, false);
+ $this->pdf->SetTextColor(0,0,0);
+ }
+ else
+ {
+ $this->pdf->TextField('vpr_'. $spremenljivke['id'], 180*$expand_width, 18, array('multiline'=>true,'strokeColor'=>'dkGray'));
+ $this->pdf->TextBox(180*$expand_width,18);
+ $this->pdf->Ln(LINE_BREAK * 3);
+ }
+ break;
+ case 21: //besedilo*
+
+ // Posebej ipisemo ce imamo samo en kos besedila brez pripisanega texta
+ if($spremenljivke['text_kosov'] == 1 && $spremenljivke['text_orientation'] == 0){
+
+ $sqlVrednost = sisplet_query("SELECT * FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ $rowVrednost = mysqli_fetch_array($sqlVrednost);
+
+ $sqlUserAnswer = sisplet_query("SELECT text FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND usr_id='".$this->getUserId()."' AND vre_id='".$rowVrednost['id']."' AND loop_id $loop_id");
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+
+ // imamo upload vprašanje
+ if ($spremenljivke['upload'] == 1){
+ # imena datotek
+ if($userAnswer['text'] != '')
+ $answer = ''.$site_url.'main/survey/download.php?anketa='.$this->anketa['id'].'&code='.$userAnswer['text'].'';
+ else
+ $answer = '';
+ }
+ // imamo signature vprašanje
+ elseif($spremenljivke['signature'] == 1){
+ $answer = $userAnswer['text'];
+
+ // relativna pot
+ $image = $site_url.'main/survey/uploads/'.$this->getUserId().'_'.$spremenljivke['id'].'_'.$this->anketa['id'].'.png';
+ $this->pdf->Image($image, $x='', $y='', $w=140, $h, $type='PNG', $link='', $align='N', $resize=true, $dpi=1600, $palign='C', $ismask=false, $imgmask=false, $border=0);
+ }
+ else{
+ $answer = $userAnswer['text'];
+ }
+
+ $this->pdf->SetTextColor(179,0,128);
+ //$this->pdf->Write(0, $userAnswer['text'], '', 0, 'l', 1, 1);
+ $this->pdf->MultiCell(180*$expand_width, 1,$this->encodeText($answer),0,'L',0,1,0,0,true,0);
+ $this->pdf->SetTextColor(0,0,0);
+ }
+
+ else{
+ $count = $spremenljivke['text_kosov'];
+ $width = round(170*$expand_width/$count);
+ $this->currentHeight = 4;
+
+ if($spremenljivke['text_orientation'] == 1)
+ $width -= 20*$expand_width;
+
+ $sqlVrednost = sisplet_query("SELECT * FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ for($i=0; $i<$count; $i++){
+ $rowVrednost = mysqli_fetch_array($sqlVrednost);
+
+ if($spremenljivke['text_orientation'] == 1){
+ $stringHeader_title = $this->encodeText($rowVrednost['naslov']);
+ $this->pdf->MultiCell(20*$expand_width, 1,$stringHeader_title,0,'R',0,0,0,0,true,0);
+
+ $linecount_vprasanja = $this->pdf->getNumLines($stringHeader_title, 20*$expand_width);
+ $this->currentHeight = ($linecount_vprasanja > $this->currentHeight) ? $linecount_vprasanja : $this->currentHeight;
+ }
+
+ if ( $this->getUserId() )
+ {
+ $sqlUserAnswer = sisplet_query("SELECT text FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND usr_id='".$this->getUserId()."' AND vre_id='".$rowVrednost['id']."' AND loop_id $loop_id");
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+
+ // imamo upload vprašanje
+ if ($spremenljivke['upload'] == 1){
+ # imena datotek
+ if($userAnswer['text'] != '')
+ $answer = ''.$site_url.'main/survey/download.php?anketa='.$this->anketa['id'].'&code='.$userAnswer['text'].'';
+ else
+ $answer = '';
+ }
+ else{
+ $answer = $userAnswer['text'];
+ }
+
+ //$this->pdf->SetTextColor(0,128,0);
+ $this->pdf->SetTextColor(179,0,128);
+ $this->pdf->MultiCell($width, 18, $this->encodeText($answer), 1, 'L', 0, 0, 0 ,0, true);
+ $this->pdf->SetTextColor(0,0,0);
+
+ $linecount_vprasanja = $this->pdf->getNumLines($answer, $width);
+ $this->currentHeight = ($linecount_vprasanja > $this->currentHeight) ? $linecount_vprasanja : $this->currentHeight;
+ }
+ else
+ {
+ $this->pdf->TextBoxes($width,18);
+ $this->currentHeight = ($linecount_vprasanja > $this->currentHeight) ? $linecount_vprasanja : $this->currentHeight;
+ }
+ //$this->pdf->setX($this->pdf->getX() + (10/$count)+$width);
+ }
+
+ if($spremenljivke['text_orientation'] == 2){
+ mysqli_data_seek($sqlVrednost, 0);
+ $this->pdf->setY($this->pdf->getY() + 20);
+
+ for($i=0; $i<$count; $i++){
+ $rowVrednost = mysqli_fetch_array($sqlVrednost);
+
+ $stringHeader_title = $this->encodeText($rowVrednost['naslov']);
+ $this->pdf->MultiCell($width, 1,$stringHeader_title,0,'C',0,0,0,0,true,0);
+ $this->pdf->setX($this->pdf->getX() + 10/$count);
+
+ $linecount_vprasanja = $this->pdf->getNumLines($stringHeader_title, $width);
+ $this->currentHeight = ($linecount_vprasanja > $this->currentHeight) ? $linecount_vprasanja : $this->currentHeight;
+ }
+ }
+
+ $this->pdf->setY($this->pdf->getY() + $this->currentHeight*4.7);
+ }
+ //$this->pdf->Ln(LINE_BREAK * 3);
+
+ break;
+ case 5: //label
+// $this->pdf->Ln(6);
+ break;
+
+ case 7: //number
+ error_log("Number @outputSpremenljivke");
+ # z enoto na levi
+ if($spremenljivke['enota'] == 1){
+ # enota
+ $sqlVrednost = sisplet_query("SELECT naslov FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ $rowVrednost = mysqli_fetch_array($sqlVrednost);
+
+ $stringHeader_title = $this->encodeText($rowVrednost['naslov']);
+ $this->pdf->MultiCell(30*$expand_width, 5,$stringHeader_title,0,'R',0,0,0,0,true,0);
+ # odgovor
+ if ( $this->getUserId() ) {
+ $userAnswerString = "SELECT text FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND usr_id='".$this->getUserId()."';";
+ $sqlUserAnswer = sisplet_query($userAnswerString);
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+
+ //$this->pdf->SetTextColor(0,128,0);
+ $this->pdf->SetTextColor(179,0,128);
+ $this->pdf->MultiCell(30*$expand_width, 5, $this->encodeText($userAnswer['text']), 1, 'L', 0, 0, 0 ,0, true);
+ $this->pdf->SetTextColor(0,0,0);
+ } else {
+ $this->pdf->MultiCell(30*$expand_width, 5, '', 1, 'L', 0, 0, 0 ,0, true);
+ }
+
+ //dodatno polje
+ if($spremenljivke['size'] == 2){
+
+ #enota
+ $rowVrednost = mysqli_fetch_array($sqlVrednost);
+
+ $stringHeader_title = $this->encodeText($rowVrednost['naslov']);
+ $this->pdf->MultiCell(30*$expand_width, 5,$stringHeader_title,0,'R',0,0,0,0,true,0);
+
+ #odgovor
+ if ( $this->getUserId() )
+ {
+ $userAnswerString = "SELECT text2 FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND usr_id='".$this->getUserId()."';";
+ $sqlUserAnswer = sisplet_query($userAnswerString);
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+
+ //$this->pdf->SetTextColor(0,128,0);
+ $this->pdf->SetTextColor(179,0,128);
+ $this->pdf->MultiCell(30*$expand_width, 5, $this->encodeText($userAnswer['text2']), 1, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->SetTextColor(0,0,0);
+ }
+ else {
+ $this->pdf->MultiCell(30*$expand_width, 5, '', 1, 'L', 0, 1, 0 ,0, true);
+ }
+ }
+ else
+ $this->pdf->Ln(LINE_BREAK);
+ # z enoto na desni
+ } else if($spremenljivke['enota'] == 2){
+ #odgovor
+ if ( $this->getUserId() ) {
+ $userAnswerString = "SELECT text FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND usr_id='".$this->getUserId()."' AND loop_id $loop_id;";
+ $sqlUserAnswer = sisplet_query($userAnswerString);
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+
+ //$this->pdf->SetTextColor(0,128,0);
+ $this->pdf->SetTextColor(179,0,128);
+ $this->pdf->MultiCell(30*$expand_width, 5, $this->encodeText($userAnswer['text']), 1, 'R', 0, 0, 0 ,0, true);
+ $this->pdf->SetTextColor(0,0,0);
+ } else {
+ $this->pdf->MultiCell(30*$expand_width, 5, '', 1, 'R', 0, 0, 0 ,0, true);
+ }
+ # enota
+ $sqlVrednost = sisplet_query("SELECT naslov FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ $rowVrednost = mysqli_fetch_array($sqlVrednost);
+ $stringHeader_title = $this->encodeText($rowVrednost['naslov']);
+ $this->pdf->MultiCell(30*$expand_width, 5,$stringHeader_title,0,'L',0,0,0,0,true,0);
+
+ //dodatno polje
+ if($spremenljivke['size'] == 2){
+
+ #enota
+ $rowVrednost = mysqli_fetch_array($sqlVrednost);
+
+ $stringHeader_title = $this->encodeText($rowVrednost['naslov']);
+
+
+ #odgovor
+ if ( $this->getUserId() ) {
+ $userAnswerString = "SELECT text2 FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND usr_id='".$this->getUserId()."' AND loop_id $loop_id;";
+ $sqlUserAnswer = sisplet_query($userAnswerString);
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+
+ //$this->pdf->SetTextColor(0,128,0);
+ $this->pdf->SetTextColor(179,0,128);
+ $this->pdf->MultiCell(30*$expand_width, 5, $this->encodeText($userAnswer['text2']), 1, 'R', 0, 0, 0 ,0, true);
+ $this->pdf->SetTextColor(0,0,0);
+ } else {
+ $this->pdf->MultiCell(30*$expand_width, 5, '', 1, 'R', 0, 0, 0 ,0, true);
+ }
+ $this->pdf->MultiCell(30*$expand_width, 5,$stringHeader_title,0,'L',0,1,0,0,true,0);
+ /*
+ #odgovor
+ if ( $this->getUserId() ) {
+ $userAnswerString = "SELECT text2 FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND usr_id='".$this->getUserId()."';";
+ $sqlUserAnswer = sisplet_query($userAnswerString);
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+
+ $this->pdf->SetTextColor(0,128,0);
+ $this->pdf->MultiCell(30, 5, $this->encodeText($userAnswer['text2']), 1, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->SetTextColor(0,0,0);
+ } else {
+ $this->pdf->MultiCell(30, 5, '', 1, 'L', 0, 1, 0 ,0, true);
+ }
+ #enota
+ $rowVrednost = mysqli_fetch_array($sqlVrednost);
+ $stringHeader_title = $rowVrednost['naslov'];
+ $this->pdf->MultiCell(30, 5,$stringHeader_title,0,'L',0,0,0,0,true,0);
+ */
+ } else {
+ $this->pdf->Ln(LINE_BREAK);
+ }
+ }
+ //brez enote
+ else{
+ $this->pdf->setX(20*$expand_width);
+ if ( $this->getUserId() )
+ {
+ $userAnswerString = "SELECT text FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND usr_id='".$this->getUserId()."' AND loop_id $loop_id;";
+ $sqlUserAnswer = sisplet_query($userAnswerString);
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+
+ //$this->pdf->SetTextColor(0,128,0);
+ $this->pdf->SetTextColor(179,0,128);
+ $this->pdf->MultiCell(30*$expand_width, 5, $this->encodeText($userAnswer['text']), 1, 'L', 0, 0, 0 ,0, true);
+ $this->pdf->SetTextColor(0,0,0);
+ }
+ else
+ {
+ $this->pdf->MultiCell(30*$expand_width, 5, '', 1, 'L', 0, 0, 0 ,0, true);
+ }
+
+ //dodatno polje
+ if($spremenljivke['size'] == 2){
+
+ if ( $this->getUserId() )
+ {
+ $userAnswerString = "SELECT text2 FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND usr_id='".$this->getUserId()."' AND loop_id $loop_id;";
+ $sqlUserAnswer = sisplet_query($userAnswerString);
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+
+ //$this->pdf->SetTextColor(0,128,0);
+ $this->pdf->SetTextColor(179,0,128);
+ $this->pdf->setX($this->pdf->getX() + 5);
+ $this->pdf->MultiCell(30*$expand_width, 5, $this->encodeText($userAnswer['text2']), 1, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->SetTextColor(0,0,0);
+ }
+ else
+ {
+ $this->pdf->setX($this->pdf->getX() + 5);
+ $this->pdf->MultiCell(30*$expand_width, 5, '', 1, 'L', 0, 1, 0 ,0, true);
+ }
+ }
+ else
+ $this->pdf->Ln(LINE_BREAK);
+ }
+
+ /*if ( $this->getUserId() )
+ {
+ $userAnswerString = "SELECT text FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND usr_id='".$this->getUserId()."';";
+ $sqlUserAnswer = sisplet_query($userAnswerString);
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+
+ $this->pdf->MultiCell(30, 5, $this->encodeText($userAnswer['text']), 1, 'L', 0, 1, 0 ,0, false);
+ }
+ else
+ {
+ $this->pdf->TextField('vpr_'. $spremenljivke['id'], 30, 5, array('multiline'=>true,'strokeColor'=>'dkGray'));
+ $this->pdf->TextBox(50,LINE_BREAK);
+ $this->pdf->Ln(LINE_BREAK);
+ }*/
+ break;
+ case 8: //datum
+ // Äe imamo odgovor od uporabnika, potem ga izpiÅ¡emo, Äene damo prazen box
+ if ( $this->getUserId() )
+ {
+ $userAnswerString = "SELECT text FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND usr_id='".$this->getUserId()."' AND loop_id $loop_id;";
+ $sqlUserAnswer = sisplet_query($userAnswerString);
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+
+ //$this->pdf->SetTextColor(0,128,0);
+ $this->pdf->SetTextColor(179,0,128);
+ $this->pdf->MultiCell(30*$expand_width, 5, $this->encodeText($userAnswer['text']), 1, 'L', 0, 1, 0 ,0, false);
+ $this->pdf->SetTextColor(0,0,0);
+ }
+ else
+ {
+ $this->pdf->TextField('vpr_'. $spremenljivke['id'], 30*$expand_width, 5, array('multiline'=>true,'strokeColor'=>'dkGray'));
+ $this->pdf->TextBox(50*$expand_width,LINE_BREAK);
+ $this->pdf->Ln(LINE_BREAK);
+ }
+ break;
+ case 17: //ranking
+
+ // iz baze preberemo vse moznosti
+ $sqlVrednosti = sisplet_query("SELECT id, naslov, naslov2, variable, other FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti))
+ {
+ // Äe imamo vnose, pogledamo kaj je odgovoril uporabnik
+ if ($this->getUserId())
+ {
+ $sqlUserAnswer = sisplet_query("SELECT vrstni_red FROM srv_data_rating WHERE spr_id=".$spremenljivke['id']." AND usr_id='".$this->getUserId()."' AND vre_id='".$rowVrednost['id']."' AND loop_id $loop_id");
+ $rowAnswers = mysqli_fetch_assoc($sqlUserAnswer);
+ }
+
+ //dodamo eno celico da zamaknemo malo
+ $this->pdf->Cell(2, 5, '');
+ $y=$this->pdf->GetY();
+ $x=$this->pdf->GetX();
+
+ $stringTitle = ($this->encodeText(( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) ));
+ //stetje stevila vrstic
+ $stetje_vrstic = $this->pdf->getNumLines($stringTitle, 90*$expand_width);
+ $y=$y+1;
+
+ $this->pdf->MultiCell(90*$expand_width, 1, $stringTitle,1,'L',0,0,$x,$y);
+ //$this->pdf->SetTextColor(0,128,0);
+ $this->pdf->SetTextColor(179,0,128);
+ $this->pdf->MultiCell(8, 6, $rowAnswers['vrstni_red'],1,'L',0,0,$x+100*$expand_width,$y);
+ $this->pdf->SetTextColor(0,0,0);
+
+ $stevec=1;
+ while($stevec<$stetje_vrstic)
+ {
+ $this->pdf->Ln(LINE_BREAK);
+ $stevec++;
+ }
+ $this->pdf->Ln(LINE_BREAK);
+ }
+
+ break;
+ case 18: //vsota
+
+ $sum = 0;
+
+ // iz baze preberemo vse moznosti
+ $sqlVrednosti = sisplet_query("SELECT id, naslov, naslov2, variable, other FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti))
+ {
+ // Äe imamo vnose, pogledamo kaj je odgovoril uporabnik
+ if ($this->getUserId())
+ {
+ $sqlUserAnswer = sisplet_query("SELECT text FROM srv_data_text".$this->db_table." WHERE spr_id=".$spremenljivke['id']." AND usr_id='".$this->getUserId()."' AND vre_id='".$rowVrednost['id']."' AND loop_id $loop_id");
+ $rowAnswers = mysqli_fetch_assoc($sqlUserAnswer);
+ }
+
+ //dodamo eno celico da zamaknemo malo
+ $this->pdf->Cell(2, 5, '');
+ $y=$this->pdf->GetY();
+ $x=$this->pdf->GetX();
+
+ $stringTitle = ($this->encodeText(( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) ));
+ //stetje stevila vrstic
+ $stetje_vrstic = $this->pdf->getNumLines($stringTitle, 90*$expand_width);
+ $y=$y+1;
+
+ $this->pdf->MultiCell(60*$expand_width, 1, $stringTitle,0,'R',0,0,$x,$y);
+ //$this->pdf->SetTextColor(0,128,0);
+ $this->pdf->SetTextColor(179,0,128);
+ $this->pdf->MultiCell(20*$expand_width, 6, $rowAnswers['text'],1,'L',0,0,$x+65*$expand_width,$y);
+ $this->pdf->SetTextColor(0,0,0);
+
+ $sum += (int)$rowAnswers['text'];
+
+ $stevec=1;
+ while($stevec<$stetje_vrstic)
+ {
+ $this->pdf->Ln(LINE_BREAK);
+ $stevec++;
+ }
+ $this->pdf->Ln(LINE_BREAK);
+ }
+
+ //izris crte
+ $this->currentStyle = array('width' => 0.1, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(128, 128, 128));
+ $cy = $this->pdf->getY()+2;
+ $this->pdf->Line(15, $cy , 110*$expand_width, $cy , $this->currentStyle);
+
+ //izris vsote
+ $y=$y+10;
+ $this->pdf->MultiCell(60*$expand_width, 1, $spremenljivke['vsota'],0,'R',0,0,$x,$y);
+ $this->pdf->MultiCell(20*$expand_width, 6, $sum,1,'L',0,0,$x+65*$expand_width,$y);
+ //omejitev vsote
+ if($spremenljivke['vsota_limit'] != 0 && $spremenljivke['vsota_limit'] == $spremenljivke['vsota_min'])
+ $limit = '('.$spremenljivke['vsota_min'].')';
+ elseif($spremenljivke['vsota_limit'] != 0 && $spremenljivke['vsota_min'] != 0)
+ $limit = '(min '.$spremenljivke['vsota_min'].', max '.$spremenljivke['vsota_limit'].')';
+ elseif($spremenljivke['vsota_limit'] != 0)
+ $limit = '(max '.$spremenljivke['vsota_limit'].')';
+ elseif($spremenljivke['vsota_min'] != 0)
+ $limit = '(min '.$spremenljivke['vsota_min'].')';
+
+ if($limit != ''){
+ $this->pdf->SetTextColor(255, 0, 0);
+ $this->pdf->MultiCell(50*$expand_width, 6, $limit,0,'L',0,0,$x+86,$y);
+ }
+
+ $this->pdf->Ln(LINE_BREAK);
+
+ break;
+ case 9: //SN-imena
+ if ( $this->getUserId() ){
+ $sqlUserAnswer = sisplet_query("SELECT text FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND usr_id='".$this->getUserId()."' AND loop_id $loop_id");
+ while($userAnswer = mysqli_fetch_array($sqlUserAnswer)){
+ $this->pdf->SetTextColor(179,0,128);
+ $this->pdf->MultiCell(80, 5, $this->encodeText($userAnswer['text']), 1, 'L', 0, 1, 0 ,0, false);
+ $this->pdf->MultiCell(80, 1, '', 0, 'L', 0, 1, 0 ,0, false);
+ $this->pdf->SetTextColor(0,0,0);
+ }
+ }
+ else{
+ $this->pdf->Ln(LINE_BREAK);
+ }
+ break;
+
+ case 10: // SN - social support dve koloni po 5 celic
+ $this->pdf->TabledTextBox(2,5);
+ break;
+ case 11: // SN - podvprasanje (podobno kot mgrid - z radio gumbki, 5 ponovitev)
+ case 14: // AW - podvprasanje
+ $sqlVrednosti = sisplet_query("SELECT naslov, naslov2, variable FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ $rowHeaders = array();
+ while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti))
+ {
+ $stringCell_title = $this->encodeText(( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) );
+ $rowHeaders[] =$stringCell_title;
+ }
+
+ $this->pdf->TabledTextBox(5,sizeof($rowHeaders)+1, array('rowHeaders' => $rowHeaders, 'type' => 'radio', 'vLine' => 0, 'hLine' => 0, 'headerBox' => 1, 'spaceWidth' => 2));
+ break;
+ case 12: // SN - number
+ case 15: // AW - number
+ $this->pdf->TabledTextBox(5,$spremenljivke['size']+1, array('type' => 'box', 'vLine' => 0, 'hLine' => 0, 'headerBox' => 1, 'spaceWidth' => 2));
+ break;
+ case 13: // SN - povezave
+ $this->pdf->TabledTextBox(5,5, array('type' => 'povezave', 'vLine' => 0, 'hLine' => 0, 'headerBox' => 1, 'spaceWidth' => 2));
+ break;
+ case 27:
+ //error_log("Heatmap @outputSpremenljivke");
+ #spremenljivke##############################
+ global $site_url;
+ global $site_path;
+ global $lang;
+ $usr_id = $this->getUserId();
+ $spr_id = $spremenljivke['id'];
+
+ $landscapeBgImgWidthMm = 140; //predefinirana sirina slike v mm za pdf dokument, ce je ta lezeca
+ $portraitBgImgWidthMm = 100; //predefinirana sirina slike v mm za pdf dokument, ce je ta pokoncna
+ #spremenljivke##############################konec
+
+ #pridobitev informacij o sliki in klikih iz baze ###################################################
+ $data4BgImage = sisplet_query("SELECT params from srv_spremenljivka WHERE id = $spr_id");
+ $rowBgImageHtml = mysqli_fetch_assoc($data4BgImage);
+ $spremenljivkaParams = new enkaParameters($rowBgImageHtml['params']);
+ $backgroundImgHtml = $spremenljivkaParams->get('hotspot_image');
+
+
+ $heatmap_show_counter_clicks = ($spremenljivkaParams->get('heatmap_show_counter_clicks') ? $spremenljivkaParams->get('heatmap_show_counter_clicks') : 0); //za prikazovanje/skrivanje stevca klikov
+ $heatmap_show_clicks = ($spremenljivkaParams->get('heatmap_show_clicks') ? $spremenljivkaParams->get('heatmap_show_clicks') : 0); //za prikazovanje/skrivanje klikov
+ $heatmap_num_clicks = ($spremenljivkaParams->get('heatmap_num_clicks') ? $spremenljivkaParams->get('heatmap_num_clicks') : 1); //stevilo moznih klikov
+ $heatmap_click_color = ($spremenljivkaParams->get('heatmap_click_color') ? $spremenljivkaParams->get('heatmap_click_color') : "");
+ $heatmap_click_size = ($spremenljivkaParams->get('heatmap_click_size') ? $spremenljivkaParams->get('heatmap_click_size') : 5);
+ $heatmap_click_shape = ($spremenljivkaParams->get('heatmap_click_shape') ? $spremenljivkaParams->get('heatmap_click_shape') : 1);
+ #pridobitev informacij o sliki in klikih iz baze ###################################################konec
+
+ #pridobitev slike za ozadje##############################################################
+ $position = strpos($backgroundImgHtml, 'src="');
+ $backgroundImg = substr($backgroundImgHtml, $position+5);
+ $position = strpos($backgroundImg, '"');
+ $backgroundImg = str_replace(substr($backgroundImg, $position),"",$backgroundImg);
+
+ $bgImageType = substr($backgroundImg, -3); //koncnica slike, tip slike
+ //$bgImageType = 'png';
+ //error_log($bgImageType);
+ #pridobitev slike za ozadje##############################################################konec
+
+ #pridobitev dimenzij slike za ozadje#####################################################
+
+ //realna velikost slike pobrana iz datoteke - ni v redu, ker je potrebno dobiti dimenzije, ki jih je nastavil uporabnik
+ $bgImgSize = getimagesize($backgroundImg);
+ //error_log("Width: $bgImgSize[0]");
+ //error_log("Height: $bgImgSize[1]");
+ $bgImgWidthPx = $bgImgSize[0];
+ $bgImgHeightPx = $bgImgSize[1];
+ //realna velikost slike pobrana iz datoteke - konec
+
+ //visina slike, ki jo je nastavil uporabnik
+ $positionImgHeight = strpos($backgroundImgHtml, 'height:');
+ $ImgHeight = substr($backgroundImgHtml, $positionImgHeight+7);
+ $positionImgheightPx = strpos($ImgHeight, 'px');
+ $ImgHeight = str_replace(substr($ImgHeight, $positionImgheightPx),"",$ImgHeight);
+ //error_log($ImgHeight);
+ //visina slike, ki jo je nastavil uporabnik - konec
+
+ //sirina slike, ki jo je nastavil uporabnik
+ $positionImgWidth = strpos($backgroundImgHtml, 'width:');
+ $ImgWidth = substr($backgroundImgHtml, $positionImgWidth+6);
+ $positionImgWidthPx = strpos($ImgWidth, 'px');
+ $ImgWidth = str_replace(substr($ImgWidth, $positionImgWidthPx),"",$ImgWidth);
+ //error_log($ImgWidth);
+ //sirina slike, ki jo je nastavil uporabnik - konec
+
+ #pridobitev dimenzij slike za ozadje#####################################################konec
+
+ #ureditev ustrezne velikosti slike za ozadje##############################################################
+ $bgImgWidthInMm = ($ImgWidth > $ImgHeight ? $landscapeBgImgWidthMm : $portraitBgImgWidthMm);
+ $bgImgHeightInMm = ($bgImgWidthInMm / $ImgWidth) * $ImgHeight;
+ //error_log("bgImgHeightInMm: $bgImgHeightInMm");
+ #ureditev ustrezne velikosti slike za ozadje##############################################################konec
+
+ #pridobitev koordinat klikanih tock za uporabnika $usr_id#################################################
+ $data4Coords = sisplet_query("SELECT lat, lng from srv_data_map WHERE usr_id = $usr_id AND spr_id = $spr_id");
+ $i = 0;
+ //error_log($spr_id);
+ #pridobitev koordinat klikanih tock za uporabnika $usr_id#################################################konec
+
+ #izris tock na sliko######################################################################################
+ //if($heatmap_show_clicks == 1){
+ define('UPLOAD_DIR', $site_path.'admin/exportclases/temp/');
+ $imageFinal = $this->pdf->prepareHeatmapImage($data4Coords, $backgroundImg, $lat, $lng, $ImgWidth, $ImgHeight, $heatmap_click_size, $heatmap_click_color, $heatmap_click_shape, $spr_id, $bgImageType, UPLOAD_DIR);
+ //}
+ #izris tock na sliko######################################################################################konec
+
+ //izris slike v pdf
+ //$this->pdf->Image($imageFinal, $x='', $y='', $w=$bgImgWidthInMm, $h, $type=$bgImageType);
+ $this->pdf->Image($imageFinal, $x='', $y='', $w=$bgImgWidthInMm, $bgImgHeightInMm, $type='png');
+
+ //izbris slike iz mape streznika
+ //if($heatmap_show_clicks == 1){
+ unlink($imageFinal);
+ //}
+
+ #izris stevca klikov######################################################################################
+ if($heatmap_show_counter_clicks){
+ //$this->pdf->Write(10, $lang['srv_vprasanje_heatmap_num_clicks'].': '.mysqli_num_rows($data4Coords).'/'.$heatmap_num_clicks);
+ $y=$this->pdf->GetY();
+ $this->pdf->setY($bgImgHeightInMm+$y);
+ $this->pdf->Write(10, $lang['srv_vprasanje_heatmap_num_clicks'].': ');
+ $this->pdf->Ln(LINE_BREAK);
+ $this->pdf->Write(10, mysqli_num_rows($data4Coords).'/'.$heatmap_num_clicks);
+ }
+ #izris stevca klikov######################################################################################konec
+ $this->pdf->Ln(LINE_BREAK);
+
+ break;
+ }
+
+ }
+
+
+
+ function outputVprasanjeValues($spremenljivke)
+ {
+ // razsiritev ce imamo landscape postavitev
+ $expand_width = $this->landscape == 1 ? 1.5 : 1;
+
+ // Izpisemo tekst vprasanja
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', $this->font);
+
+ $pozicija_vprasanja = $this->pdf->getY();
+ $sqlVrstic = sisplet_query("SELECT count(*) FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."'");
+ $rowVrstic = mysqli_fetch_row($sqlVrstic);
+ $visina = round(($rowVrstic[0]+2) * 8);
+
+ $naslov = $this->dataPiping($spremenljivke['naslov']);
+
+ $linecount_vprasanja = $this->getCellHeight($naslov, 90);
+ $this->currentHeight = $linecount_vprasanja;
+
+ if($pozicija_vprasanja + $linecount_vprasanja > 240/$expand_width)
+ {
+ $this->pdf->AddPage();
+ }
+
+ //izpis if-ov pri vprasanju
+ if($this->showIf == 1){
+
+ $sqlIf = sisplet_query("SELECT * FROM srv_branching WHERE element_spr='$spremenljivke[id]'");
+ $rowIf = mysqli_fetch_array($sqlIf);
+
+ if ($rowIf['parent'] > 0){
+ $rowb = Cache::srv_if($rowIf['parent']);
+
+ if ($rowb['tip'] == 0)
+ $this->displayIf($rowIf['parent']);
+ }
+ }
+
+ // stevilcenje vprasanj
+ $numberingText = ($this->numbering == 1) ? $spremenljivke['variable'].' - ' : '';
+
+ $this->pdf->setFont('','B',$this->font);
+ $this->pdf->MultiCell(80*$expand_width , 1, $numberingText . $this->encodeText($naslov),0,'L',0,0,0,0);
+ $this->pdf->setFont('','',$this->font);
+ }
+
+
+ function outputSpremenljivkeValues($spremenljivke){
+ global $site_url;
+
+ // razsiritev ce imamo landscape postavitev
+ $expand_width = $this->landscape == 1 ? 1.5 : 1;
+
+ // Ce je spremenljivka v loopu
+ $loop_id = $this->loop_id == null ? " IS NULL" : " = '".$this->loop_id."'";
+
+ switch ( $spremenljivke['tip'] )
+ {
+ case 1: //radio
+ case 2: //check
+ case 3: //select -> radio
+
+ // Äe imamo vnose, pogledamo kaj je odgovoril uporabnik
+ $sqlUserAnswerString = "SELECT vre_id FROM srv_data_vrednost".$this->db_table." WHERE spr_id='$spremenljivke[id]' AND usr_id='".$this->getUserId()."' AND loop_id $loop_id";
+ $sqlUserAnswer = sisplet_query($sqlUserAnswerString);
+ while ($rowAnswers = mysqli_fetch_assoc($sqlUserAnswer))
+ $userAnswer[$rowAnswers['vre_id']] = $rowAnswers['vre_id'];
+
+ // iz baze preberemo vse moznosti - ko nimamo izpisa z odgovori respondenta
+ $sqlVrednosti = sisplet_query("SELECT id, naslov, naslov2, variable, other FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+
+ $resultString = '';
+
+ while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti))
+ {
+ //izpisemo samo izbrane vrednosti
+ if( isset($userAnswer[$rowVrednost['id']]) ){
+
+ $stringTitle = ($this->encodeText(( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) ));
+ //stetje stevila vrstic
+ $stetje_vrstic = $this->pdf->getNumLines($stringTitle, 180*$expand_width);
+
+ // Å¡e dodamo textbox Äe je polj other
+ $_txt = '';
+ if ( $rowVrednost['other'] == 1 && $this->getUserId() )
+ {
+ $sqlOtherText = sisplet_query("SELECT * FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND vre_id='".$rowVrednost['id']."' AND usr_id='".$this->getUserId()."' AND loop_id $loop_id");
+ $row4 = mysqli_fetch_assoc($sqlOtherText);
+ $_txt = ' '.$row4['text'];
+ }
+
+ $resultString .= ' '.$stringTitle.$_txt.',';
+ }
+ }
+
+ $resultString = substr($resultString, 0, -1);
+ //$this->pdf->SetTextColor(0,128,0);
+ $this->pdf->SetTextColor(179,0,128);
+ $this->pdf->MultiCell(90*$expand_width, 1, $resultString,0,'L',0,0,95*$expand_width,0);
+ $this->pdf->SetTextColor(0,0,0);
+
+ $linecount_vprasanja = $this->getCellHeight($resultString, 90*$expand_width);
+ $this->currentHeight = ($linecount_vprasanja > $this->currentHeight) ? $linecount_vprasanja : $this->currentHeight;
+
+ $this->pdf->setY($this->pdf->getY() + $this->currentHeight);
+ //$this->pdf->Ln(LINE_BREAK);
+ break;
+
+ case 6: //multigrid
+ case 16:// multicheckbox
+
+ //izris dvojnega multigrida
+ if($spremenljivke['enota'] == 3){
+ $this->displayDoubleGridValues($spremenljivke);
+ break;
+ }
+
+ $sqlVrstic = sisplet_query("SELECT count(*) FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."'");
+ $rowVrstic = mysqli_fetch_row($sqlVrstic);
+ $visina = round(($rowVrstic[0]+2) * 8);
+
+ $defw_fc = 85*$expand_width;
+ $w_oc = 1;
+ $halfWidth = $w_oc/2;
+
+ $this->pdf->setX(15);
+
+ $sqlVrednosti = sisplet_query("SELECT *,id, naslov, naslov2, variable FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti))
+ {
+ $skipRow = false;
+
+ // Ce imamo nastavljeno preskakovanje podvprasanj preverimo ce je kaksen odgovor v vrstici
+ if($this->skipEmptySub == 1){
+
+ $skipRow = true;
+ if($spremenljivke['tip'] == 6)
+ $sqlUserAnswer = sisplet_query("SELECT grd_id FROM srv_data_grid".$this->db_table." WHERE spr_id = '".$rowVrednost['spr_id']."' AND usr_id = '".$this->getUserId()."' AND vre_id = '".$rowVrednost['id']."' AND loop_id $loop_id");
+ else
+ $sqlUserAnswer = sisplet_query("SELECT grd_id FROM srv_data_checkgrid".$this->db_table." WHERE spr_id = '".$rowVrednost['spr_id']."' AND usr_id = '".$this->getUserId()."' AND vre_id = '".$rowVrednost['id']."' AND loop_id $loop_id");
+
+ if(mysqli_num_rows($sqlUserAnswer) > 0)
+ $skipRow = false;
+ }
+
+ if($skipRow == false){
+ $this->currentHeight = 0;
+
+ $stringCell_title = $this->encodeText(( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) );
+ /*Zascita pred prepisovanjem na novo stran za bocne parametre*/
+ $pozicija_boka = $this->pdf->getY();
+ $pozicija_bokaX = $this->pdf->getX();
+
+ // Å¡e dodamo textbox Äe je polj other
+ $_txt = '';
+ if ( $rowVrednost['other'] == 1 && $this->getUserId() )
+ {
+ $sqlOtherText = sisplet_query("SELECT * FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND vre_id='".$rowVrednost['id']."' AND usr_id='".$this->getUserId()."' AND loop_id $loop_id");
+ $row4 = mysqli_fetch_assoc($sqlOtherText);
+ $_txt = ' '.$row4['text'];
+ }
+ $stringCell_title .= $_txt.':';
+
+ //$linecount_vprasanja = $this->pdf->getNumLines($stringCell_title, $defw_fc);
+ //$this->currentHeight = ($linecount_vprasanja > $this->currentHeight) ? $linecount_vprasanja : $this->currentHeight;
+ $this->currentHeight = ($this->getCellHeight($stringCell_title, $defw_fc) > $this->currentHeight ? $this->getCellHeight($stringCell_title, $defw_fc) : $this->currentHeight);
+
+ if($pozicija_boka + ($this->currentHeight/**4.7*/) > 250/$expand_width)
+ {
+ $this->pdf->AddPage();
+ $pozicija_boka = $this->pdf->getY();
+ }
+ /*Izpis boÄnega stolpca*/
+ $this->pdf->MultiCell($defw_fc, 1,$stringCell_title,0,'R',0,1,0,0,true,0);
+ $startY = $this->pdf->getY();
+ $endY = $this->pdf->getY();
+ $startX = $this->pdf->getX();
+
+ $sqlVsehVrednsti = sisplet_query("SELECT id, naslov FROM srv_grid WHERE spr_id='".$spremenljivke['id']."' ORDER BY 'vrstni_red'");
+ $startX = $startX + $defw_fc;
+ $startY = $pozicija_boka;
+
+ //izpis rezultatov
+ $resultString = '';
+ while ($rowVsehVrednosti = mysqli_fetch_assoc($sqlVsehVrednsti))
+ {
+ // poiÅ¡Äemo kaj je odgovoril uporabnik:
+ if($spremenljivke['tip']==16)
+ $sqlUserAnswer = sisplet_query("SELECT grd_id FROM srv_data_checkgrid".$this->db_table." WHERE spr_id = '".$rowVrednost['spr_id']."' AND usr_id = '".$this->getUserId()."' AND vre_id = '".$rowVrednost['id']."' AND grd_id = '".$rowVsehVrednosti['id']."' AND loop_id $loop_id");
+ else
+ $sqlUserAnswer = sisplet_query("SELECT grd_id FROM srv_data_grid".$this->db_table." where spr_id = '".$rowVrednost['spr_id']."' and usr_id = '".$this->getUserId()."' AND vre_id = '".$rowVrednost['id']."' AND loop_id $loop_id");
+
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+
+ $this->pdf->SetXY($startX + $w_oc , ($startY+$endY-7) /2);
+
+ if($rowVsehVrednosti['id'] == $userAnswer['grd_id']){
+ $resultString .= ' '.$this->encodeText($rowVsehVrednosti['naslov']).',';
+ }
+ }
+ $this->pdf->Cell($halfWidth, 0, '',0,0,1,0);
+ $resultString = substr($resultString, 0, -1);
+ //$this->pdf->SetTextColor(0,128,0);
+ $this->pdf->SetTextColor(179,0,128);
+ $this->pdf->MultiCell(100*$expand_width, 1, $resultString,0,'L',0,0,0,0);
+ $this->pdf->SetTextColor(0,0,0);
+ $this->pdf->Cell($halfWidth, 0, '',0,0,1,0);
+
+ /*$linecount_vprasanja = $this->pdf->getNumLines($resultString, 100*$expand_width);
+ $this->currentHeight = ($linecount_vprasanja > $this->currentHeight) ? $linecount_vprasanja : $this->currentHeight;*/
+ $this->currentHeight = ($this->getCellHeight($stringCell_title, $defw_fc) > $this->currentHeight ? $this->getCellHeight($stringCell_title, $defw_fc) : $this->currentHeight);
+
+ $this->pdf->setY($endY);
+ //$this->pdf->setY($this->pdf->getY() + $this->currentHeight/**4.7*/);
+ }
+ }
+
+ break;
+
+ case 21: //besedilo*
+
+ // Posebej ipisemo ce imamo samo en kos besedila brez pripisanega texta
+ if($spremenljivke['text_kosov'] == 1 && $spremenljivke['text_orientation'] == 0 && $this->type == 0){
+
+ $sqlVrednost = sisplet_query("SELECT * FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ $rowVrednost = mysqli_fetch_array($sqlVrednost);
+
+ $sqlUserAnswer = sisplet_query("SELECT text FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND usr_id='".$this->getUserId()."' AND vre_id='".$rowVrednost['id']."' AND loop_id $loop_id");
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+
+ // imamo upload vprašanje
+ if ($spremenljivke['upload'] == 1){
+ # imena datotek
+ if($userAnswer['text'] != '')
+ $answer = ''.$site_url.'main/survey/download.php?anketa='.$this->anketa['id'].'&code='.$userAnswer['text'].'';
+ else
+ $answer = '';
+ }
+ // imamo signature vprašanje
+ elseif($spremenljivke['signature'] == 1){
+ $answer = $userAnswer['text'];
+
+ // relativna pot
+ $image = $site_url.'main/survey/uploads/'.$this->getUserId().'_'.$spremenljivke['id'].'_'.$this->anketa['id'].'.png';
+ $this->pdf->Image($image, $x='', $y='', $w=140, $h, $type='PNG', $link='', $align='N', $resize=true, $dpi=1600, $palign='C', $ismask=false, $imgmask=false, $border=0);
+ }
+ else{
+ $answer = $userAnswer['text'];
+ }
+
+ $this->pdf->SetTextColor(179,0,128);
+ //$this->pdf->Write(0, $userAnswer['text'], '', 0, 'l', 1, 1);
+ $this->pdf->MultiCell(180*$expand_width, 1,$this->encodeText($answer),0,'L',0,1,0,0,true,0);
+ $this->pdf->SetTextColor(0,0,0);
+ }
+
+ else{
+ $count = $spremenljivke['text_kosov'];
+ $width = round(170/$count);
+ $this->currentHeight = 0;
+ if($spremenljivke['text_orientation'] == 1)
+ $width -= 20;
+
+ if($this->type == 2){
+ $this->pdf->setX(80);
+ }
+
+ $sqlVrednost = sisplet_query("SELECT * FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ for($i=0; $i<$count; $i++){
+ $rowVrednost = mysqli_fetch_array($sqlVrednost);
+
+ if($spremenljivke['text_orientation'] == 1){
+ $stringHeader_title = $this->encodeText($rowVrednost['naslov']);
+ $this->pdf->MultiCell(20, 1,$stringHeader_title.': ',0,'R',0,0,0,0,true,0);
+
+ $linecount_vprasanja = $this->pdf->getNumLines($stringHeader_title, 20);
+ $this->currentHeight = ($linecount_vprasanja > $this->currentHeight) ? $linecount_vprasanja : $this->currentHeight;
+ }
+
+ if ( $this->getUserId() )
+ {
+ $sqlUserAnswer = sisplet_query("SELECT text FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND usr_id='".$this->getUserId()."' AND vre_id='".$rowVrednost['id']."' AND loop_id $loop_id");
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+
+ // imamo upload vprašanje
+ if ($spremenljivke['upload'] == 1){
+ # imena datotek
+ if($userAnswer['text'] != '')
+ $answer = ''.$site_url.'main/survey/download.php?anketa='.$this->anketa['id'].'&code='.$userAnswer['text'].'';
+ else
+ $answer = '';
+ }
+ else{
+ $answer = $userAnswer['text'];
+ }
+
+ //$this->pdf->SetTextColor(0,128,0);
+ $this->pdf->SetTextColor(179,0,128);
+ $this->pdf->MultiCell($width, 1, $this->encodeText($answer), 0, 'L', 0, 0, 0 ,0, true, 0);
+ $this->pdf->SetTextColor(0,0,0);
+
+ $linecount_vprasanja = $this->pdf->getNumLines($answer, $width);
+ $this->currentHeight = ($linecount_vprasanja > $this->currentHeight) ? $linecount_vprasanja : $this->currentHeight;
+ }
+ else
+ {
+ $this->pdf->TextBoxes($width,18);
+ }
+ //$this->pdf->setX($this->pdf->getX() + (10/$count)+$width);
+ }
+
+ if($spremenljivke['text_orientation'] == 2){
+ mysqli_data_seek($sqlVrednost, 0);
+ $this->pdf->setY($this->pdf->getY() + 20);
+
+ for($i=0; $i<$count; $i++){
+ $rowVrednost = mysqli_fetch_array($sqlVrednost);
+
+ $stringHeader_title = $this->encodeText($rowVrednost['naslov']);
+ $this->pdf->MultiCell($width, 1,$stringHeader_title,0,'C',0,0,0,0,true,0);
+ $this->pdf->setX($this->pdf->getX() + 10/$count);
+
+ $linecount_vprasanja = $this->pdf->getNumLines($stringHeader_title, $width);
+ $this->currentHeight = ($linecount_vprasanja > $this->currentHeight) ? $linecount_vprasanja : $this->currentHeight;
+ }
+ }
+
+ $this->pdf->setY($this->pdf->getY() + $this->currentHeight*4.7);
+ }
+
+ break;
+
+ case 7: //number
+ error_log("Number @outputSpremenljivkeValues");
+ # z enoto na levi
+ if($spremenljivke['enota'] == 1){
+ # enota
+ $sqlVrednost = sisplet_query("SELECT naslov FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ $rowVrednost = mysqli_fetch_array($sqlVrednost);
+
+ $stringHeader_title = $this->encodeText($rowVrednost['naslov']);
+ $this->pdf->MultiCell(20, 5,$stringHeader_title,0,'R',0,0,0,0,true,0);
+ # odgovor
+ if ( $this->getUserId() ) {
+ $userAnswerString = "SELECT text FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND usr_id='".$this->getUserId()."' AND loop_id $loop_id;";
+ $sqlUserAnswer = sisplet_query($userAnswerString);
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+
+ //$this->pdf->SetTextColor(0,128,0);
+ $this->pdf->SetTextColor(179,0,128);
+ $this->pdf->MultiCell(20, 5, $this->encodeText($userAnswer['text']), 1, 'L', 0, 0, 0 ,0, true);
+ $this->pdf->SetTextColor(0,0,0);
+ } else {
+ $this->pdf->MultiCell(20, 5, '', 1, 'L', 0, 0, 0 ,0, true);
+ }
+
+ //dodatno polje
+ if($spremenljivke['size'] == 2){
+
+ #enota
+ $rowVrednost = mysqli_fetch_array($sqlVrednost);
+
+ $stringHeader_title = $this->encodeText($rowVrednost['naslov']);
+ $this->pdf->MultiCell(20, 5,$stringHeader_title,0,'R',0,0,0,0,true,0);
+
+ #odgovor
+ if ( $this->getUserId() )
+ {
+ $userAnswerString = "SELECT text2 FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND usr_id='".$this->getUserId()."' AND loop_id $loop_id;";
+ $sqlUserAnswer = sisplet_query($userAnswerString);
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+
+ //$this->pdf->SetTextColor(0,128,0);
+ $this->pdf->SetTextColor(179,0,128);
+ $this->pdf->MultiCell(20, 5, $this->encodeText($userAnswer['text2']), 1, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->SetTextColor(0,0,0);
+ }
+ else {
+ $this->pdf->MultiCell(20, 5, '', 1, 'L', 0, 1, 0 ,0, true);
+ }
+ }
+ else
+ $this->pdf->Ln(LINE_BREAK);
+ # z enoto na desni
+ } else if($spremenljivke['enota'] == 2){
+ #odgovor
+ if ( $this->getUserId() ) {
+ $userAnswerString = "SELECT text FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND usr_id='".$this->getUserId()."' AND loop_id $loop_id;";
+ $sqlUserAnswer = sisplet_query($userAnswerString);
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+
+ //$this->pdf->SetTextColor(0,128,0);
+ $this->pdf->SetTextColor(179,0,128);
+ $this->pdf->MultiCell(20, 5, $this->encodeText($userAnswer['text']), 1, 'R', 0, 0, 0 ,0, true);
+ $this->pdf->SetTextColor(0,0,0);
+ } else {
+ $this->pdf->MultiCell(20, 5, '', 1, 'R', 0, 0, 0 ,0, true);
+ }
+ # enota
+ $sqlVrednost = sisplet_query("SELECT naslov FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ $rowVrednost = mysqli_fetch_array($sqlVrednost);
+ $stringHeader_title = $this->encodeText($rowVrednost['naslov']);
+ $this->pdf->MultiCell(20, 5,$stringHeader_title,0,'L',0,0,0,0,true,0);
+
+ //dodatno polje
+ if($spremenljivke['size'] == 2){
+
+ #enota
+ $rowVrednost = mysqli_fetch_array($sqlVrednost);
+
+ $stringHeader_title = $this->encodeText($rowVrednost['naslov']);
+
+
+ #odgovor
+ if ( $this->getUserId() ) {
+ $userAnswerString = "SELECT text2 FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND usr_id='".$this->getUserId()."' AND loop_id $loop_id;";
+ $sqlUserAnswer = sisplet_query($userAnswerString);
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+
+ //$this->pdf->SetTextColor(0,128,0);
+ $this->pdf->SetTextColor(179,0,128);
+ $this->pdf->MultiCell(20, 5, $this->encodeText($userAnswer['text2']), 1, 'R', 0, 0, 0 ,0, true);
+ $this->pdf->SetTextColor(0,0,0);
+ } else {
+ $this->pdf->MultiCell(20, 5, '', 1, 'R', 0, 0, 0 ,0, true);
+ }
+ $this->pdf->MultiCell(20, 5,$stringHeader_title,0,'L',0,1,0,0,true,0);
+ /*
+ #odgovor
+ if ( $this->getUserId() ) {
+ $userAnswerString = "SELECT text2 FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND usr_id='".$this->getUserId()."';";
+ $sqlUserAnswer = sisplet_query($userAnswerString);
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+
+ $this->pdf->SetTextColor(0,128,0);
+ $this->pdf->MultiCell(30, 5, $this->encodeText($userAnswer['text2']), 1, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->SetTextColor(0,0,0);
+ } else {
+ $this->pdf->MultiCell(30, 5, '', 1, 'L', 0, 1, 0 ,0, true);
+ }
+ #enota
+ $rowVrednost = mysqli_fetch_array($sqlVrednost);
+ $stringHeader_title = $rowVrednost['naslov'];
+ $this->pdf->MultiCell(30, 5,$stringHeader_title,0,'L',0,0,0,0,true,0);
+ */
+ } else {
+ $this->pdf->Ln(LINE_BREAK);
+ }
+ }
+ //brez enote
+ else{
+ $this->pdf->setX(20);
+ if ( $this->getUserId() )
+ {
+ $userAnswerString = "SELECT text FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND usr_id='".$this->getUserId()."' AND loop_id $loop_id;";
+ $sqlUserAnswer = sisplet_query($userAnswerString);
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+
+ //$this->pdf->SetTextColor(0,128,0);
+ $this->pdf->SetTextColor(179,0,128);
+ $this->pdf->MultiCell(30, 5, $this->encodeText($userAnswer['text']), 1, 'L', 0, 0, 0 ,0, true);
+ $this->pdf->SetTextColor(0,0,0);
+ }
+ else
+ {
+ $this->pdf->MultiCell(30, 5, '', 1, 'L', 0, 0, 0 ,0, true);
+ }
+
+ //dodatno polje
+ if($spremenljivke['size'] == 2){
+
+ if ( $this->getUserId() )
+ {
+ $userAnswerString = "SELECT text2 FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND usr_id='".$this->getUserId()."' AND loop_id $loop_id;";
+ $sqlUserAnswer = sisplet_query($userAnswerString);
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+
+ //$this->pdf->SetTextColor(0,128,0);
+ $this->pdf->SetTextColor(179,0,128);
+ $this->pdf->setX($this->pdf->getX() + 5);
+ $this->pdf->MultiCell(30, 5, $this->encodeText($userAnswer['text2']), 1, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->SetTextColor(0,0,0);
+ }
+ else
+ {
+ $this->pdf->setX($this->pdf->getX() + 5);
+ $this->pdf->MultiCell(30, 5, '', 1, 'L', 0, 1, 0 ,0, true);
+ }
+ }
+ else
+ $this->pdf->Ln(LINE_BREAK);
+ }
+
+ /*if ( $this->getUserId() )
+ {
+ $userAnswerString = "SELECT text FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND usr_id='".$this->getUserId()."';";
+ $sqlUserAnswer = sisplet_query($userAnswerString);
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+
+ $this->pdf->MultiCell(30, 5, $this->encodeText($userAnswer['text']), 1, 'L', 0, 1, 0 ,0, false);
+ }
+ else
+ {
+ $this->pdf->TextField('vpr_'. $spremenljivke['id'], 30, 5, array('multiline'=>true,'strokeColor'=>'dkGray'));
+ $this->pdf->TextBox(50,LINE_BREAK);
+ $this->pdf->Ln(LINE_BREAK);
+ }*/
+ break;
+ case 8: //datum
+ // Äe imamo odgovor od uporabnika, potem ga izpiÅ¡emo, Äene damo prazen box
+ if ( $this->getUserId() )
+ {
+ $userAnswerString = "SELECT text FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND usr_id='".$this->getUserId()."' AND loop_id $loop_id;";
+ $sqlUserAnswer = sisplet_query($userAnswerString);
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+
+ //$this->pdf->SetTextColor(0,128,0);
+ $this->pdf->SetTextColor(179,0,128);
+ $this->pdf->MultiCell(30, 5, $this->encodeText($userAnswer['text']), 1, 'L', 0, 1, 0 ,0, false);
+ $this->pdf->SetTextColor(0,0,0);
+ }
+ else
+ {
+ $this->pdf->TextField('vpr_'. $spremenljivke['id'], 30, 5, array('multiline'=>true,'strokeColor'=>'dkGray'));
+ $this->pdf->TextBox(50,LINE_BREAK);
+ $this->pdf->Ln(LINE_BREAK);
+ }
+ break;
+ case 17: //ranking
+
+ // iz baze preberemo vse moznosti
+ $sqlVrednosti = sisplet_query("SELECT id, naslov, naslov2, variable, other FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti))
+ {
+ // Äe imamo vnose, pogledamo kaj je odgovoril uporabnik
+ if ($this->getUserId())
+ {
+ $sqlUserAnswer = sisplet_query("SELECT vrstni_red FROM srv_data_rating WHERE spr_id=".$spremenljivke['id']." AND usr_id='".$this->getUserId()."' AND vre_id='".$rowVrednost['id']."' AND loop_id $loop_id");
+ $rowAnswers = mysqli_fetch_assoc($sqlUserAnswer);
+ }
+
+ //dodamo eno celico da zamaknemo malo
+ $this->pdf->Cell(2, 5, '');
+ $y=$this->pdf->GetY();
+ $x=65;
+
+ $stringTitle = ($this->encodeText(( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) ));
+ //stetje stevila vrstic
+ $stetje_vrstic = $this->pdf->getNumLines($stringTitle, 90);
+ $y=$y+1;
+
+ $this->pdf->MultiCell(30, 1, $stringTitle,0,'R',0,0,$x,$y);
+ //$this->pdf->SetTextColor(0,128,0);
+ $this->pdf->SetTextColor(179,0,128);
+ $this->pdf->MultiCell(8, 6, $rowAnswers['vrstni_red'],1,'L',0,0,$x+35,$y);
+ $this->pdf->SetTextColor(0,0,0);
+
+ $stevec=1;
+ while($stevec<$stetje_vrstic)
+ {
+ $this->pdf->Ln(LINE_BREAK);
+ $stevec++;
+ }
+ $this->pdf->Ln(LINE_BREAK);
+ }
+
+ break;
+ case 18: //vsota
+
+ $sum = 0;
+ $this->pdf->setX(15);
+
+ // iz baze preberemo vse moznosti
+ $sqlVrednosti = sisplet_query("SELECT id, naslov, naslov2, variable, other FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti))
+ {
+ // Äe imamo vnose, pogledamo kaj je odgovoril uporabnik
+ if ($this->getUserId())
+ {
+ $sqlUserAnswer = sisplet_query("SELECT text FROM srv_data_text".$this->db_table." WHERE spr_id=".$spremenljivke['id']." AND usr_id='".$this->getUserId()."' AND vre_id='".$rowVrednost['id']."' AND loop_id $loop_id");
+ $rowAnswers = mysqli_fetch_assoc($sqlUserAnswer);
+ }
+
+ //dodamo eno celico da zamaknemo malo
+ $this->pdf->Cell(2, 5, '');
+ $y=$this->pdf->GetY();
+ $x=$this->pdf->GetX();
+
+ $stringTitle = ($this->encodeText(( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) ));
+ //stetje stevila vrstic
+ $stetje_vrstic = $this->pdf->getNumLines($stringTitle, 90);
+ $y=$y+1;
+
+ $this->pdf->MultiCell(60, 1, $stringTitle,0,'R',0,0,$x,$y);
+ //$this->pdf->SetTextColor(0,128,0);
+ $this->pdf->SetTextColor(179,0,128);
+ $this->pdf->MultiCell(20, 6, $rowAnswers['text'],1,'L',0,0,$x+65,$y);
+ $this->pdf->SetTextColor(0,0,0);
+
+ $sum += (int)$rowAnswers['text'];
+
+ $stevec=1;
+ while($stevec<$stetje_vrstic)
+ {
+ $this->pdf->Ln(LINE_BREAK);
+ $stevec++;
+ }
+ $this->pdf->Ln(LINE_BREAK);
+ }
+
+ //izris crte
+ $this->currentStyle = array('width' => 0.1, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(128, 128, 128));
+ $cy = $this->pdf->getY()+2;
+ $this->pdf->Line(15, $cy , 110, $cy , $this->currentStyle);
+
+ //izris vsote
+ $y=$y+10;
+ $this->pdf->MultiCell(60, 1, $spremenljivke['vsota'],0,'R',0,0,$x,$y);
+ $this->pdf->MultiCell(20, 6, $sum,1,'L',0,0,$x+65,$y);
+ //omejitev vsote
+ if($spremenljivke['vsota_limit'] != 0 && $spremenljivke['vsota_limit'] == $spremenljivke['vsota_min'])
+ $limit = '('.$spremenljivke['vsota_min'].')';
+ elseif($spremenljivke['vsota_limit'] != 0 && $spremenljivke['vsota_min'] != 0)
+ $limit = '(min '.$spremenljivke['vsota_min'].', max '.$spremenljivke['vsota_limit'].')';
+ elseif($spremenljivke['vsota_limit'] != 0)
+ $limit = '(max '.$spremenljivke['vsota_limit'].')';
+ elseif($spremenljivke['vsota_min'] != 0)
+ $limit = '(min '.$spremenljivke['vsota_min'].')';
+
+ if($limit != ''){
+ $this->pdf->SetTextColor(255, 0, 0);
+ $this->pdf->MultiCell(50, 6, $limit,0,'L',0,0,$x+86,$y);
+ }
+
+ $this->pdf->Ln(LINE_BREAK);
+
+ break;
+ case 9: //SN-imena
+ if ( $this->getUserId() ){
+
+ $answer = '';
+ $sqlUserAnswer = sisplet_query("SELECT text FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND usr_id='".$this->getUserId()."' AND loop_id $loop_id");
+ while($userAnswer = mysqli_fetch_array($sqlUserAnswer)){
+ $answer .= $this->encodeText($userAnswer['text']).', ';
+
+ }
+ $answer = substr($answer, 0, -2);
+
+ $this->pdf->SetTextColor(179,0,128);
+ $this->pdf->MultiCell(90*$expand_width, 1, $answer,0,'L',0,0,95*$expand_width,0);
+ $this->pdf->SetTextColor(0,0,0);
+
+ $linecount_vprasanja = $this->pdf->getNumLines($answer, 90*$expand_width);
+ $this->currentHeight = ($linecount_vprasanja > $this->currentHeight) ? $linecount_vprasanja : $this->currentHeight;
+
+ $this->pdf->setY($this->pdf->getY() + $this->currentHeight*4.7);
+ }
+ else{
+ $this->pdf->Ln(LINE_BREAK);
+ }
+ break;
+ case 27:
+ error_log("Heatmap @outputSpremenljivkeValues");
+ break;
+ }
+ }
+
+ //izris kratkega nacina doubleGrid
+ function displayDoubleGridValues($spremenljivke) {
+
+ // razsiritev ce imamo landscape postavitev
+ $expand_width = $this->landscape == 1 ? 1.5 : 1;
+
+ $sqlVrstic = sisplet_query("SELECT count(*) FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."'");
+ $rowVrstic = mysqli_fetch_row($sqlVrstic);
+ $visina = round(($rowVrstic[0]+2) * 8);
+
+ $defw_fc = 85;
+ $w_oc = 1;
+ $halfWidth = $w_oc/2;
+
+ //naslov prvega dela grida
+ $this->pdf->MultiCell(180, 1, $this->encodeText($spremenljivke['grid_subtitle1']),0,'C',0,1,0,0);
+
+ $sqlVrednosti = sisplet_query("SELECT *,id, naslov, naslov2, variable FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti))
+ {
+ $stringCell_title = $this->encodeText(( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) );
+ /*Zascita pred prepisovanjem na novo stran za bocne parametre*/
+ $pozicija_boka = $this->pdf->getY();
+ $pozicija_bokaX = $this->pdf->getX();
+ //$linecount_boka = $this->pdf->getNumLines($stringCell_title, $defw_fc);
+
+ // Å¡e dodamo textbox Äe je polj other
+ $_txt = '';
+ if ( $rowVrednost['other'] == 1 && $this->getUserId() )
+ {
+ $sqlOtherText = sisplet_query("SELECT * FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND vre_id='".$rowVrednost['id']."' AND usr_id='".$this->getUserId()."'");
+ $row4 = mysqli_fetch_assoc($sqlOtherText);
+ $_txt = ' '.$row4['text'];
+ }
+ $stringCell_title .= $_txt.':';
+
+ if($pozicija_boka + $visina > 250/$expand_width)
+ {
+ $this->pdf->AddPage();
+ $pozicija_boka = $this->pdf->getY();
+ }
+
+ /*Izpis boÄnega stolpca*/
+ $this->pdf->MultiCell($defw_fc, 0,$stringCell_title,0,'R',0,1,0,0,true,0);
+ $startY = $this->pdf->getY();
+ $endY = $this->pdf->getY();
+ $startX = $this->pdf->getX();
+// print_r($pozicija_boka. " : ". $startY."<br>");
+ $linecount_boka--;
+ $sqlVsehVrednsti = sisplet_query("SELECT id, naslov FROM srv_grid WHERE spr_id='".$spremenljivke['id']."' AND part='1' ORDER BY 'vrstni_red'");
+ $startX = $startX + $defw_fc;
+ $startY = $pozicija_boka;
+
+ //izpis rezultatov
+ $resultString = '';
+ while ($rowVsehVrednosti = mysqli_fetch_assoc($sqlVsehVrednsti))
+ {
+ // poiÅ¡Äemo kaj je odgovoril uporabnik:
+ $sqlUserAnswer = sisplet_query("SELECT grd_id FROM srv_data_checkgrid".$this->db_table." WHERE spr_id = '".$rowVrednost['spr_id']."' AND usr_id = '".$this->getUserId()."' AND vre_id = '".$rowVrednost['id']."' AND grd_id = '".$rowVsehVrednosti['id']."'");
+
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+
+ if($rowVsehVrednosti['id'] == $userAnswer['grd_id']){
+
+ $this->pdf->SetXY($startX + $w_oc , ($startY+$endY-7) /2);
+
+ $resultString .= ' '.$this->encodeText($rowVsehVrednosti['naslov']).',';
+ }
+ }
+
+ $this->pdf->Cell($halfWidth, 0, '',0,0,1,0);
+ $resultString = substr($resultString, 0, -1);
+ //$this->pdf->SetTextColor(0,128,0);
+ $this->pdf->SetTextColor(179,0,128);
+ $this->pdf->MultiCell(180, 1, $resultString,0,'L',0,0,0,0);
+ $this->pdf->SetTextColor(0,0,0);
+ $this->pdf->Cell($halfWidth, 0, '',0,0,1,0);
+
+ $this->pdf->setY($endY);
+ }
+
+ //se drugi del grida
+
+ //naslov drugega dela grida
+ $this->pdf->MultiCell(180, 1, $this->encodeText($spremenljivke['grid_subtitle2']),0,'C',0,1,0,0);
+
+ $sqlVrednosti = sisplet_query("SELECT *,id, naslov, naslov2, variable FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti))
+ {
+ $stringCell_title = $this->encodeText(( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) );
+ /*Zascita pred prepisovanjem na novo stran za bocne parametre*/
+ $pozicija_boka = $this->pdf->getY();
+ $pozicija_bokaX = $this->pdf->getX();
+ //$linecount_boka = $this->pdf->getNumLines($stringCell_title, $defw_fc);
+
+ // Å¡e dodamo textbox Äe je polj other
+ $_txt = '';
+ if ( $rowVrednost['other'] == 1 && $this->getUserId() )
+ {
+ $sqlOtherText = sisplet_query("SELECT * FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND vre_id='".$rowVrednost['id']."' AND usr_id='".$this->getUserId()."'");
+ $row4 = mysqli_fetch_assoc($sqlOtherText);
+ $_txt = ' '.$row4['text'];
+ }
+ $stringCell_title .= $_txt.':';
+
+ if($pozicija_boka + $visina > 250/$expand_width)
+ {
+ $this->pdf->AddPage();
+ $pozicija_boka = $this->pdf->getY();
+ }
+ /*Izpis boÄnega stolpca*/
+ $this->pdf->MultiCell($defw_fc, 0,$stringCell_title,0,'R',0,1,0,0,true,0);
+ $startY = $this->pdf->getY();
+ $endY = $this->pdf->getY();
+ $startX = $this->pdf->getX();
+// print_r($pozicija_boka. " : ". $startY."<br>");
+ $linecount_boka--;
+ $sqlVsehVrednsti = sisplet_query("SELECT id, naslov FROM srv_grid WHERE spr_id='".$spremenljivke['id']."' AND part='2' ORDER BY 'vrstni_red'");
+ $startX = $startX + $defw_fc;
+ $startY = $pozicija_boka;
+
+ //izpis rezultatov
+ $resultString = '';
+ while ($rowVsehVrednosti = mysqli_fetch_assoc($sqlVsehVrednsti))
+ {
+ // poiÅ¡Äemo kaj je odgovoril uporabnik:
+ $sqlUserAnswer = sisplet_query("SELECT grd_id FROM srv_data_checkgrid".$this->db_table." WHERE spr_id = '".$rowVrednost['spr_id']."' AND usr_id = '".$this->getUserId()."' AND vre_id = '".$rowVrednost['id']."' AND grd_id = '".$rowVsehVrednosti['id']."'");
+
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+
+ if($rowVsehVrednosti['id'] == $userAnswer['grd_id']){
+
+ $this->pdf->SetXY($startX + $w_oc , ($startY+$endY-7) /2);
+
+ $resultString .= ' '.$this->encodeText($rowVsehVrednosti['naslov']).',';
+ }
+ }
+
+ $this->pdf->Cell($halfWidth, 0, '',0,0,1,0);
+ $resultString = substr($resultString, 0, -1);
+ //$this->pdf->SetTextColor(0,128,0);
+ $this->pdf->SetTextColor(179,0,128);
+ $this->pdf->MultiCell(180, 1, $resultString,0,'L',0,0,0,0);
+ $this->pdf->SetTextColor(0,0,0);
+ $this->pdf->Cell($halfWidth, 0, '',0,0,1,0);
+
+ $this->pdf->setY($endY);
+ }
+ }
+
+ //izris dolgega nacina doubleGrid
+ function displayDoubleGrid($spremenljivke) {
+
+ // razsiritev ce imamo landscape postavitev
+ $expand_width = $this->landscape == 1 ? 1.5 : 1;
+
+ $sqlVrstic = sisplet_query("SELECT count(*) FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."'");
+ $rowVrstic = mysqli_fetch_row($sqlVrstic);
+ $visina = round(($rowVrstic[0]+2) * 6);
+
+ $defw_full = 200;
+ $defw_fc = 24; // sirina prve celice
+ $defw_max = 35; // max sirina ostalih celic
+
+ $sqlStVrednosti = sisplet_query("SELECT count(*) FROM srv_grid WHERE spr_id='".$spremenljivke['id']."' ORDER BY id");
+ $rowStVrednost = mysqli_fetch_row($sqlStVrednosti);
+
+ $kolon = $rowStVrednost[0]+1;
+
+ $w_oc = ( $defw_full - $defw_fc ) / $kolon;
+ if ( $w_oc > $defw_max )
+ $w_oc = $defw_max;
+
+ $countVrednosti=0;
+ $halfWidth = ($w_oc)/ 2;
+
+
+ //izpis naslovov posameznih delov grida
+ $this->pdf->MultiCell($defw_fc, LINE_BREAK, '',0,'C',0,0);
+ $this->pdf->MultiCell(80, LINE_BREAK, $this->encodeText($spremenljivke['grid_subtitle1']),'B','C',0,0);
+ $this->pdf->MultiCell(80, LINE_BREAK, $this->encodeText($spremenljivke['grid_subtitle2']),'B','C',0,1);
+
+ //izpis vmesne crte
+ $this->pdf->Line($defw_fc+95, $this->pdf->getY()-6, $defw_fc+95, $this->pdf->getY()+$visina);
+
+ /*Izpis presledka na zaÄetku*/
+ $this->pdf->Cell($defw_fc, 0,'');
+ // izišemo header celice
+ $sqlVsehVrednsti = sisplet_query("SELECT naslov, variable,vrstni_red FROM srv_grid WHERE spr_id='".$spremenljivke['id']."' ORDER BY part, vrstni_red");
+ $linecount = 0;
+ $maxlinecount = 0;
+ $linecount1 = 0;
+ $maxlinecount1 = 0;
+
+ while ($rowVsehVrednosti = mysqli_fetch_assoc($sqlVsehVrednsti))
+ {
+ // Äe je naslov null izpiÅ¡emo variable
+ $stringHeader_title = $this->encodeText( ( $rowVsehVrednosti['naslov'] ) ? $rowVsehVrednosti['naslov'] : $rowVsehVrednosti['variable'] );
+ /*Zascita pred prepisovanjem na novo stran za zgornje parametre*/
+ $pozicija_vrha = $this->pdf->getY();
+ //$linecount_vrha = $this->pdf->getNumLines($stringHeader_title, $w_oc);
+ if($pozicija_vrha + $visina > 250/$expand_width)
+ {
+ $this->pdf->AddPage();
+ $this->pdf->Cell($defw_fc, 0,'');
+ }
+ /*Izpis zgornje vrstice*/
+ $this->pdf->MultiCell($w_oc, 1,$stringHeader_title,0,'C',0,0,0,0,true,0);
+ if($linecount_vrha>$maxlinecount) {$maxlinecount=$linecount_vrha;}
+ $countVrednosti++;
+ }
+ $this->pdf->Ln(1.5 * LINE_BREAK);
+ $i=0;
+ while($i<($maxlinecount))
+ {
+ $this->pdf->Ln(LINE_BREAK);
+ $i++;
+ }
+
+ $sqlVrednosti = sisplet_query("SELECT *,id, naslov, naslov2, variable FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti))
+ {
+ $stringCell_title = $this->encodeText(( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) );
+ /*Zascita pred prepisovanjem na novo stran za bocne parametre*/
+ $pozicija_boka = $this->pdf->getY();
+ $pozicija_bokaX = $this->pdf->getX();
+ //$linecount_boka = $this->pdf->getNumLines($stringCell_title, $defw_fc);
+
+ // Å¡e dodamo textbox Äe je polj other
+ $_txt = '';
+ if ( $rowVrednost['other'] == 1 && $this->getUserId() )
+ {
+ $sqlOtherText = sisplet_query("SELECT * FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND vre_id='".$rowVrednost['id']."' AND usr_id='".$this->getUserId()."'");
+ $row4 = mysqli_fetch_assoc($sqlOtherText);
+ $_txt = ' '.$row4['text'];
+ }
+ $stringCell_title .= $_txt;
+
+ if($pozicija_boka + $visina > 250/$expand_width)
+ {
+ $this->pdf->AddPage();
+ $pozicija_boka = $this->pdf->getY();
+ }
+
+ /*Izpis boÄnega stolpca*/
+ $this->pdf->MultiCell($defw_fc, 0,$stringCell_title,0,'C',0,1,0,0,true,0);
+ $startY = $this->pdf->getY();
+ $endY = $this->pdf->getY();
+ $startX = $this->pdf->getX();
+// print_r($pozicija_boka. " : ". $startY."<br>");
+ $linecount_boka--;
+ $sqlVsehVrednsti = sisplet_query("SELECT id FROM srv_grid WHERE spr_id='".$spremenljivke['id']."' ORDER BY part, vrstni_red");
+ $shtevec=0;
+ $startX = $startX + $defw_fc;
+ $startY = $pozicija_boka;
+ while ($rowVsehVrednosti = mysqli_fetch_assoc($sqlVsehVrednsti))
+ {
+ // poiÅ¡Äemo kaj je odgovoril uporabnik:
+ if ($this->getGrupa())
+ {
+ $sqlUserAnswer = sisplet_query("SELECT grd_id FROM srv_data_checkgrid".$this->db_table." WHERE spr_id = '".$rowVrednost['spr_id']."' AND usr_id = '".$this->getUserId()."' AND vre_id = '".$rowVrednost['id']."' AND grd_id = '".$rowVsehVrednosti['id']."' ");
+
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+ }
+
+
+ $prop['full'] = ($rowVsehVrednosti['id'] == $userAnswer['grd_id']) ? true : false;
+ $this->pdf->SetXY($startX + $shtevec*$w_oc , ($startY+$endY)/2 - (CHCK_BTN_SIZE+1)/2);
+ $this->pdf->Cell($halfWidth, 0, '',0,0,1,0);
+ if($spremenljivke['tip']==6) {
+ $this->pdf->RadioButton('vpr_'. $rowVrednost['id'], RADIO_BTN_SIZE, $prop);
+ }
+ elseif($spremenljivke['tip']==16) {
+ $this->pdf->CheckBox('vpr_'. $spremenljivke['id'].'_'.$rowVrednost['id'], CHCK_BTN_SIZE, $prop);
+ }
+ else{
+ $this->pdf->setX($this->pdf->getX() - $w_oc/2);
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', 8);
+ //$this->pdf->SetTextColor(0,128,0);
+ $this->pdf->SetTextColor(179,0,128);
+ //$this->pdf->TextBoxes($w_oc,LINE_BREAK);
+ $this->pdf->MultiCell($w_oc-1, LINE_BREAK,$userAnswer['text'],1,'C',0,1,0,0,true,0);
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', $this->font);
+ $this->pdf->SetTextColor(0,0,0);
+ }
+ $this->pdf->Cell($halfWidth, 0, '',0,0,1,0);
+ $shtevec++;
+ }
+ $this->pdf->setY($endY);
+ }
+ }
+
+ // Izris mesanega multigrida
+ function displayGridMultiple($spremenljivke){
+
+ // razsiritev ce imamo landscape postavitev
+ $expand_width = $this->landscape == 1 ? 1.5 : 1;
+
+ $sqlVrstic = sisplet_query("SELECT count(*) FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."'");
+ $rowVrstic = mysqli_fetch_row($sqlVrstic);
+ $visina = round(($rowVrstic[0]+2) * 8);
+
+ $defw_full = 210*$expand_width;
+ $defw_fc = 24*$expand_width; // sirina prve celice
+ $defw_max = 35*$expand_width; // max sirina ostalih celic
+
+ $kolon = 1;
+
+ // Preverjamo ce imamo filter na podskupini grida - SAMO CE NE PRIHAJAMO IZ MAILA!
+ $tmp_svp_pv = array();
+ if($this->usr_type == null){
+ $dvp = SurveyUserSetting :: getInstance()->getSettings('default_variable_profile');
+ $_currentVariableProfile = SurveyVariablesProfiles :: checkDefaultProfile($dvp);
+
+ $tmp_svp_pv = SurveyVariablesProfiles :: getProfileVariables($_currentVariableProfile);
+ foreach ( $tmp_svp_pv as $vid => $variable) {
+ $tmp_svp_pv[$vid] = substr($vid, 0, strpos($vid, '_'));
+ }
+ }
+
+ // Loop po podskupinah gridov
+ $sqlSubGrid = sisplet_query("SELECT m.spr_id, s.tip, s.enota FROM srv_grid_multiple m, srv_spremenljivka s WHERE m.parent='".$spremenljivke['id']."' AND m.spr_id=s.id");
+ while($rowSubGrid = mysqli_fetch_array($sqlSubGrid)){
+
+ if((in_array($rowSubGrid['spr_id'],$tmp_svp_pv) || count($tmp_svp_pv) == 0) && $this->checkSpremenljivka($rowSubGrid['spr_id'], $gridMultiple=true)){
+ // Ce gre za podskupino multigrid z dropdowni - potem izrisemo samo en stolpec
+ if($rowSubGrid['tip'] == 6 && $rowSubGrid['enota'] == 2){
+ $kolon ++;
+ }
+ else{
+ $sqlStVrednosti = sisplet_query("SELECT count(*) FROM srv_grid WHERE spr_id='".$rowSubGrid['spr_id']."' ");
+ $rowStVrednost = mysqli_fetch_array($sqlStVrednosti);
+
+ $kolon += $rowStVrednost['count(*)'];
+ }
+ }
+ }
+
+ switch($kolon)
+ {
+ case 2:
+ $defw_fc = 110*$expand_width;
+ break;
+ case 3:
+ $defw_fc = 85*$expand_width;
+ break;
+ case 4:
+ $defw_fc = 60*$expand_width;
+ break;
+ case 5:
+ $defw_fc = 40*$expand_width;
+ break;
+ case 6:
+ $defw_fc = 35*$expand_width;
+ break;
+ default:
+ $defw_fc = 24*$expand_width;
+ }
+ $w_oc = ( $defw_full - $defw_fc ) / $kolon;
+ if ( $w_oc > $defw_max )
+ $w_oc = $defw_max;
+
+ $countVrednosti=0;
+ $halfWidth = ($w_oc)/ 2;
+
+
+ // Prelom strani ce je kateri od naslovov gridov predolg
+ $sqlVsehVrednsti = sisplet_query("SELECT g.naslov, g.variable, s.tip, s.enota FROM srv_grid g, srv_grid_multiple m, srv_spremenljivka s WHERE m.parent='".$spremenljivke['id']."' AND g.spr_id=m.spr_id AND m.spr_id=s.id ");
+ $linecount = 0;
+ $break = false;
+ while ($rowVsehVrednosti = mysqli_fetch_assoc($sqlVsehVrednsti))
+ {
+ // Pri multigrid dropdownih ne izpisujemo naslova
+ if($rowVsehVrednosti['tip'] != 6 || $rowVsehVrednosti['enota'] != 2){
+
+ // Äe je naslov null izpiÅ¡emo variable
+ $stringHeader_title = $this->encodeText( $rowVsehVrednosti['naslov'] ? $rowVsehVrednosti['naslov'] : $rowVsehVrednosti['variable'] );
+ /*Zascita pred prepisovanjem na novo stran za zgornje parametre*/
+ $pozicija_vrha = $this->pdf->getY();
+
+ $linecount = $this->pdf->getNumLines($stringHeader_title, $w_oc);
+ $this->currentHeight = ($linecount > $this->currentHeight) ? $linecount : $this->currentHeight;
+
+ if(!$break && $pozicija_vrha + $linecount*4.7 > 250/$expand_width)
+ {
+ $this->pdf->AddPage();
+ $break = true;
+ }
+ }
+ }
+
+ /*Izpis presledka na zaÄetku*/
+ $this->pdf->Cell($defw_fc, 0,'');
+
+ // izišemo header celice
+ $sqlSubGrid = sisplet_query("SELECT m.spr_id, m.vrstni_red, s.tip, s.enota FROM srv_grid_multiple m, srv_spremenljivka s WHERE m.parent='".$spremenljivke['id']."' AND m.spr_id=s.id ORDER BY m.vrstni_red");
+ while($rowSubGrid = mysqli_fetch_array($sqlSubGrid)){
+
+ if((in_array($rowSubGrid['spr_id'],$tmp_svp_pv) || count($tmp_svp_pv) == 0) && $this->checkSpremenljivka($rowSubGrid['spr_id'], $gridMultiple=true)){
+ $sqlVsehVrednsti = sisplet_query("SELECT naslov, variable FROM srv_grid WHERE spr_id='".$rowSubGrid['spr_id']."' ");
+ while ($rowVsehVrednosti = mysqli_fetch_assoc($sqlVsehVrednsti))
+ {
+ // Pri multigrid dropdownih ne izpisujemo naslova
+ if($rowSubGrid['tip'] != 6 || $rowSubGrid['enota'] != 2){
+ // Äe je naslov null izpiÅ¡emo variable
+ $stringHeader_title = $this->encodeText( $rowVsehVrednosti['naslov'] ? $rowVsehVrednosti['naslov'] : $rowVsehVrednosti['variable'] );
+
+ /*Izpis zgornje vrstice*/
+ $this->pdf->MultiCell($w_oc, 1,$stringHeader_title,0,'C',0,0,0,0,true,0);
+ }
+ else{
+ $this->pdf->MultiCell($w_oc, 1, '',0,'C',0,0,0,0,true,0);
+ break;
+ }
+ }
+ }
+ }
+
+ $this->pdf->setY($this->pdf->getY() + $this->currentHeight*6);
+
+ $row_count = 1;
+ $sqlVrednosti = sisplet_query("SELECT * FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti))
+ {
+ $skipRow = false;
+
+ // Ce imamo nastavljeno preskakovanje podvprasanj preverimo ce je kaksen odgovor v vrstici
+ if($this->skipEmptySub == 1){
+
+ $skipRow = true;
+
+ // Loop po podskupinah gridov
+ $sqlSubGrid = sisplet_query("SELECT m.spr_id, s.tip FROM srv_grid_multiple m, srv_spremenljivka s WHERE m.parent='".$spremenljivke['id']."' AND m.spr_id=s.id ORDER BY m.vrstni_red");
+ while($rowSubGrid = mysqli_fetch_array($sqlSubGrid)){
+
+ if((in_array($rowSubGrid['spr_id'],$tmp_svp_pv) || count($tmp_svp_pv) == 0) && $this->checkSpremenljivka($rowSubGrid['spr_id'], $gridMultiple=true)){
+ $sqlSubVar = sisplet_query("SELECT * FROM srv_vrednost WHERE spr_id='".$rowSubGrid['spr_id']."' AND vrstni_red='".$rowVrednost['vrstni_red']."' ");
+ $rowSubVar = mysqli_fetch_array($sqlSubVar);
+
+ if($rowSubGrid['tip'] == 6)
+ $sqlUserAnswer = sisplet_query("SELECT grd_id FROM srv_data_grid".$this->db_table." WHERE spr_id = '".$rowSubGrid['spr_id']."' AND usr_id = '".$this->getUserId()."' AND vre_id = '".$rowSubVar['id']."'");
+ elseif($rowSubGrid['tip'] == 16)
+ $sqlUserAnswer = sisplet_query("SELECT grd_id FROM srv_data_checkgrid".$this->db_table." WHERE spr_id = '".$rowSubGrid['spr_id']."' AND usr_id = '".$this->getUserId()."' AND vre_id = '".$rowSubVar['id']."'");
+ else
+ $sqlUserAnswer = sisplet_query("SELECT grd_id, text FROM srv_data_textgrid".$this->db_table." WHERE spr_id = '".$rowSubGrid['spr_id']."' AND usr_id = '".$this->getUserId()."' AND vre_id = '".$rowSubVar['id']."'");
+
+ if(mysqli_num_rows($sqlUserAnswer) > 0){
+ $skipRow = false;
+ break;
+ }
+ }
+ }
+ }
+
+ if($skipRow == false){
+
+ // barva vrstice
+ $row_color = $row_count%2;
+
+ $stringCell_title = $this->encodeText(( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) );
+ /*Zascita pred prepisovanjem na novo stran za bocne parametre*/
+ $pozicija_boka = $this->pdf->getY();
+ $pozicija_bokaX = $this->pdf->getX();
+ //$linecount_boka = $this->pdf->getNumLines($stringCell_title, $defw_fc);
+
+ // Å¡e dodamo textbox Äe je polj other
+ $_txt = '';
+ if ( $rowVrednost['other'] == 1 && $this->getUserId() )
+ {
+ $sqlOtherText = sisplet_query("SELECT * FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND vre_id='".$rowVrednost['id']."' AND usr_id='".$this->getUserId()."'");
+ $row4 = mysqli_fetch_assoc($sqlOtherText);
+ $_txt = ' '.$row4['text'];
+ }
+ $stringCell_title .= $_txt.':';
+
+ // Dobimo visino prve (bocne) celice
+ $height = $this->pdf->getNumLines($stringCell_title, $defw_fc);
+
+ // Loop po podskupinah gridov - pri multitext, multinumber in mg dropdown loopamo cez vrstico da dobimo visino najvisje celice
+ $sqlSubGrid = sisplet_query("SELECT m.spr_id, m.vrstni_red, s.tip, s.enota FROM srv_grid_multiple m, srv_spremenljivka s WHERE m.parent='".$spremenljivke['id']."' AND m.spr_id=s.id ORDER BY m.vrstni_red");
+ while($rowSubGrid = mysqli_fetch_array($sqlSubGrid)){
+
+ if((in_array($rowSubGrid['spr_id'],$tmp_svp_pv) || count($tmp_svp_pv) == 0) && $this->checkSpremenljivka($rowSubGrid['spr_id'], $gridMultiple=true)){
+ if($rowSubGrid['tip'] == 19 || $rowSubGrid['tip'] == 20){
+
+ $sqlSubVar = sisplet_query("SELECT * FROM srv_vrednost WHERE spr_id='".$rowSubGrid['spr_id']."' AND vrstni_red='".$rowVrednost['vrstni_red']."' ");
+ $rowSubVar = mysqli_fetch_array($sqlSubVar);
+
+ $sqlVsehVrednsti = sisplet_query("SELECT id FROM srv_grid WHERE spr_id='".$rowSubGrid['spr_id']."' ORDER BY vrstni_red");
+ while ($rowVsehVrednosti = mysqli_fetch_assoc($sqlVsehVrednsti)){
+ // poiÅ¡Äemo kaj je odgovoril uporabnik:
+ if ($this->getGrupa())
+ {
+ $sqlUserAnswer = sisplet_query("SELECT grd_id, text FROM srv_data_textgrid".$this->db_table." WHERE spr_id = '".$rowSubGrid['spr_id']."' AND usr_id = '".$this->getUserId()."' AND vre_id = '".$rowSubVar['id']."' AND grd_id = '".$rowVsehVrednosti['id']."' ");
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+ }
+ $linecount = $this->pdf->getNumLines($userAnswer['text'], $w_oc);
+ $height = ($linecount > $height) ? $linecount : $height;
+ }
+ }
+
+ // MG dropdown
+ elseif($rowSubGrid['tip'] == 6 && $rowSubGrid['enota'] == 2){
+
+ $sqlSubVar = sisplet_query("SELECT * FROM srv_vrednost WHERE spr_id='".$rowSubGrid['spr_id']."' AND vrstni_red='".$rowVrednost['vrstni_red']."' ");
+ $rowSubVar = mysqli_fetch_array($sqlSubVar);
+
+ $sqlUserAnswer = sisplet_query("SELECT d.grd_id, g.naslov, g.variable FROM srv_grid g INNER JOIN srv_data_grid".$this->db_table." d ON g.id=d.grd_id AND g.spr_id=d.spr_id WHERE d.spr_id='".$rowSubGrid['spr_id']."' AND d.usr_id='".$this->getUserId()."' AND d.vre_id='".$rowSubVar['id']."'");
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+
+ $title = $this->encodeText( $userAnswer['naslov'] ? $userAnswer['naslov'] : $userAnswer['variable'] );
+
+ $linecount = $this->pdf->getNumLines($title, $w_oc);
+ $height = ($linecount > $height) ? $linecount : $height;
+ }
+ }
+ }
+
+ if($height > 1){
+ $height = $height*4.5;
+ }
+ else{
+ $height = LINE_BREAK;
+ }
+
+
+ // Naredimo pb ce prebija katera vrstica
+ if($pozicija_boka + $height > 250/$expand_width)
+ {
+ $this->pdf->AddPage();
+ $pozicija_boka = $this->pdf->getY();
+ }
+
+
+ /*Izpis boÄnega stolpca*/
+ $startY = $this->pdf->getY();
+ $endY = $this->pdf->getY();
+ $this->pdf->MultiCell($defw_fc, 0,$stringCell_title,0,'C',0,1,0,0,true,0);
+ $startX = $this->pdf->getX();
+// print_r($pozicija_boka. " : ". $startY."<br>");
+ $linecount_boka--;
+
+ $shtevec=0;
+ $startX = $startX + $defw_fc;
+ $startY = $pozicija_boka;
+
+ $endY = $startY + $height + 3;
+
+
+ // Vsaka druga vrstica ima sivo ozadje
+ $XX = $this->pdf->getX();
+ $YY = $this->pdf->getY();
+ $this->pdf->setXY(15, $startY);
+ $this->pdf->SetFillColor(242,243,241);
+ $this->pdf->MultiCell($defw_full, $endY-$startY,'',0,'C',$row_color,1,0,0,true,0);
+ $this->pdf->SetFillColor(0);
+ $this->pdf->setXY($XX, $YY);
+ $row_count++;
+
+
+ // Loop po podskupinah gridov
+ $sqlSubGrid = sisplet_query("SELECT m.spr_id, s.tip, s.enota FROM srv_grid_multiple m, srv_spremenljivka s WHERE m.parent='".$spremenljivke['id']."' AND s.id=m.spr_id ORDER BY m.vrstni_red");
+ while($rowSubGrid = mysqli_fetch_array($sqlSubGrid)){
+
+ if((in_array($rowSubGrid['spr_id'],$tmp_svp_pv) || count($tmp_svp_pv) == 0) && $this->checkSpremenljivka($rowSubGrid['spr_id'], $gridMultiple=true)){
+ // Dobimo se var_id od trenutne podskupine
+ $sqlSubVar = sisplet_query("SELECT * FROM srv_vrednost WHERE spr_id='".$rowSubGrid['spr_id']."' AND vrstni_red='".$rowVrednost['vrstni_red']."' ");
+ $rowSubVar = mysqli_fetch_array($sqlSubVar);
+
+ // dropdown (samo izpisemo naslov odgovora - kot textbox)
+ if($rowSubGrid['tip'] == 6 && $rowSubGrid['enota'] == 2) {
+
+ $sqlUserAnswer = sisplet_query("SELECT d.grd_id, g.naslov, g.variable FROM srv_grid g INNER JOIN srv_data_grid".$this->db_table." d ON g.id=d.grd_id AND g.spr_id=d.spr_id WHERE d.spr_id='".$rowSubGrid['spr_id']."' AND d.usr_id='".$this->getUserId()."' AND d.vre_id='".$rowSubVar['id']."'");
+ if(mysqli_num_rows($sqlUserAnswer) > 0){
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+ $title = $this->encodeText( $userAnswer['naslov'] ? $userAnswer['naslov'] : $userAnswer['variable'] );
+ }
+ else
+ $title = '';
+
+ $this->pdf->SetXY($startX + $shtevec*$w_oc , ($startY+$endY)/2 - (CHCK_BTN_SIZE)/2);
+ $this->pdf->Cell($halfWidth, 0, '',0,0,1,0);
+
+ $this->pdf->SetXY($this->pdf->getX() - $w_oc/2, $startY + (CHCK_BTN_SIZE/2));
+
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', 8);
+ $this->pdf->SetTextColor(179,0,128);
+ $this->pdf->MultiCell($w_oc-1, $height, $title,1,'C',0,0,0,0,true,0);
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', $this->font);
+ $this->pdf->SetTextColor(0,0,0);
+
+ $this->pdf->Cell($halfWidth, 0, '',0,0,1,0);
+ $shtevec++;
+ }
+ else{
+ $sqlVsehVrednsti = sisplet_query("SELECT id, naslov, variable FROM srv_grid WHERE spr_id='".$rowSubGrid['spr_id']."' ORDER BY vrstni_red");
+ while ($rowVsehVrednosti = mysqli_fetch_assoc($sqlVsehVrednsti)){
+ // poiÅ¡Äemo kaj je odgovoril uporabnik:
+ if ($this->getGrupa())
+ {
+ if($rowSubGrid['tip'] == 6)
+ $sqlUserAnswer = sisplet_query("SELECT grd_id FROM srv_data_grid".$this->db_table." WHERE spr_id = '".$rowSubVar['spr_id']."' AND usr_id = '".$this->getUserId()."' AND vre_id = '".$rowSubVar['id']."'");
+ elseif($rowSubGrid['tip'] == 16)
+ $sqlUserAnswer = sisplet_query("SELECT grd_id FROM srv_data_checkgrid".$this->db_table." WHERE spr_id = '".$rowSubVar['spr_id']."' AND usr_id = '".$this->getUserId()."' AND vre_id = '".$rowSubVar['id']."' AND grd_id = '".$rowVsehVrednosti['id']."' ");
+ else
+ $sqlUserAnswer = sisplet_query("SELECT grd_id, text FROM srv_data_textgrid".$this->db_table." WHERE spr_id = '".$rowSubVar['spr_id']."' AND usr_id = '".$this->getUserId()."' AND vre_id = '".$rowSubVar['id']."' AND grd_id = '".$rowVsehVrednosti['id']."' ");
+
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+ }
+
+ $prop['full'] = ($rowVsehVrednosti['id'] == $userAnswer['grd_id']) ? true : false;
+
+ $this->pdf->SetXY($startX + $shtevec*$w_oc , ($startY+$endY)/2 - (CHCK_BTN_SIZE)/2);
+ $this->pdf->Cell($halfWidth, 0, '',0,0,1,0);
+
+ // radio
+ if($rowSubGrid['tip'] == 6) {
+ $this->pdf->SetXY($startX + $shtevec*$w_oc + $halfWidth, ($startY+$endY)/2 - (CHCK_BTN_SIZE*3/4));
+ $this->pdf->RadioButton('vpr_'. $rowSubVar['id'], RADIO_BTN_SIZE, $prop);
+ }
+ // checkbox
+ elseif($rowSubGrid['tip'] == 16) {
+ $this->pdf->SetXY($startX + $shtevec*$w_oc + $halfWidth, ($startY+$endY)/2 - (CHCK_BTN_SIZE)/2);
+ $this->pdf->CheckBox('vpr_'. $rowSubGrid['id'].'_'.$rowSubVar['id'], CHCK_BTN_SIZE, $prop);
+ }
+ // textbox
+ else{
+ $this->pdf->SetXY($this->pdf->getX() - $w_oc/2, $startY + (CHCK_BTN_SIZE/2));
+
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', 8);
+ //$this->pdf->SetTextColor(0,128,0);
+ $this->pdf->SetTextColor(179,0,128);
+ //$this->pdf->TextBoxes($w_oc,LINE_BREAK);
+ $this->pdf->MultiCell($w_oc-1, $height, $userAnswer['text'],1,'C',0,0,0,0,true,0);
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', $this->font);
+ $this->pdf->SetTextColor(0,0,0);
+ }
+
+ $this->pdf->Cell($halfWidth, 0, '',0,0,1,0);
+ $shtevec++;
+ }
+ }
+ }
+ }
+ $this->pdf->setY($endY);
+ }
+ }
+ }
+
+
+ function encodeText($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace("&scaron;","Å¡",$text);
+ $text = trim($text);
+
+ return strip_tags($text);
+ }
+
+/* Skrajsa niz in doda ... nakoncu
+ * snippet(phrase,[max length],[phrase tail])
+ * snippetgreedy(phrase,[max length before next space],[phrase tail])
+ *
+ * iz: http://snipplr.com/view/9520/php-substring-without-breaking-words/
+ */
+
+ function snippet($text,$length=64,$tail="...")
+ {
+ $text = trim($text);
+ $txtl = strlen($text);
+ if($txtl > $length)
+ {
+ for($i=1;$text[$length-$i]!=" ";$i++)
+ {
+ if($i == $length)
+ {
+ return substr($text,0,$length) . $tail;
+ }
+ }
+ $text = substr($text,0,$length-$i+1) . $tail;
+ }
+ return $text;
+ }
+
+ function drawLine()
+ {
+ $cy = $this->pdf->getY();
+ $this->pdf->Line(15, $cy , 195, $cy , $this->currentStyle);
+
+ }
+
+ function setGrupa($grupa) {$this->grupa = $grupa;}
+ function getGrupa() {return $this->grupa;}
+ function setUserId($usrId) {$this->usr_id = $usrId;}
+ function getUserId() {return ($this->usr_id)?$this->usr_id:false;}
+ function setDisplayFrontPage($display) {$this->pi['displayFrontPage'] = $display;}
+ function getDisplayFrontPage() {return ($this->pi['displayFrontPage'] == true || $this->pi['displayFrontPage'] == 1);}
+/// To bo najbolše dat v en class
+
+
+ /**
+ * @desc preveri ali so na trenutni grupi prikazana vprasanja (zaradi branchinga)
+ */
+ function checkGrupa () {
+
+ $sql = sisplet_query("SELECT id FROM srv_spremenljivka WHERE gru_id = '".$this->grupa."'");
+ if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
+ while ($row = mysqli_fetch_array($sql)) {
+
+ if ($this->checkSpremenljivka($row['id']))
+ return true;
+ }
+ return false;
+ }
+
+
+ /**
+ * @desc preveri ali je spremenljivka vidna (zaradi branchinga)
+ */
+ function checkSpremenljivka ($spremenljivka, $gridMultiple=false) {
+
+ $sql = sisplet_query("SELECT * FROM srv_spremenljivka WHERE id = '".$spremenljivka."'");
+ if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
+ $row = mysqli_fetch_array($sql);
+
+ // Ce vprasanje ni vidno ali ce uporabnik nima dostopa do vprasanja
+ if ($row['visible'] == 0 || !( ($this->admin_type <= $row['dostop'] && $this->admin_type>=0) || ($this->admin_type==-1 && $row['dostop']==4) ) )
+ return false;
+
+ // Kalklulacije in kvote ne prikazujemo
+ if($row['tip'] == 22 || $row['tip'] == 25)
+ return false;
+
+ // Preverjamo ce je vprasanje prazno in ce preskakujemo prazne
+ if($this->skipEmpty == 1 && !$gridMultiple){
+
+ $isEmpty = true;
+ switch ( $row['tip'] ){
+ case 1: //radio
+ case 2: //check
+ case 3: //select -> radio
+ $sqlUserAnswer = sisplet_query("SELECT * FROM srv_data_vrednost".$this->db_table." WHERE spr_id='$row[id]' AND usr_id='".$this->getUserId()."' AND vre_id!='-2'");
+ if(mysqli_num_rows($sqlUserAnswer) > 0)
+ $isEmpty = false;
+ break;
+
+ case 6: //multigrid
+ case 16:// multicheckbox
+ case 19:// multitext
+ case 20:// multinumber
+ if($row['tip'] == 6 && $row['enota'] != 3)
+ $sqlUserAnswer = sisplet_query("SELECT * FROM srv_data_grid".$this->db_table." WHERE spr_id = '".$row['id']."' AND usr_id = '".$this->getUserId()."'");
+ elseif($row['tip'] == 16 || ($row['tip'] == 6 && $row['enota'] == 3))
+ $sqlUserAnswer = sisplet_query("SELECT * FROM srv_data_checkgrid".$this->db_table." WHERE spr_id = '".$row['id']."' AND usr_id = '".$this->getUserId()."'");
+ else
+ $sqlUserAnswer = sisplet_query("SELECT * FROM srv_data_textgrid".$this->db_table." WHERE spr_id = '".$row['id']."' AND usr_id = '".$this->getUserId()."'");
+
+ if(mysqli_num_rows($sqlUserAnswer) > 0)
+ $isEmpty = false;
+ break;
+
+ case 7: //number
+ case 8: //datum
+ case 18: //vsota
+ case 21: //besedilo*
+ $sqlUserAnswer = sisplet_query("SELECT * FROM srv_data_text".$this->db_table." WHERE spr_id='".$row['id']."' AND usr_id='".$this->getUserId()."'");
+ if(mysqli_num_rows($sqlUserAnswer) > 0)
+ $isEmpty = false;
+ break;
+
+ case 17: //ranking
+ $sqlUserAnswer = sisplet_query("SELECT * FROM srv_data_rating WHERE spr_id=".$row['id']." AND usr_id='".$this->getUserId()."'");
+ if(mysqli_num_rows($sqlUserAnswer) > 0)
+ $isEmpty = false;
+ break;
+
+ case 24: //mesan multigrid
+ // loop po podskupinah gridov
+ $sqlSubGrid = sisplet_query("SELECT m.spr_id, s.tip, s.enota FROM srv_grid_multiple m, srv_spremenljivka s WHERE m.parent='".$spremenljivka."' AND m.spr_id=s.id");
+ while($rowSubGrid = mysqli_fetch_array($sqlSubGrid)){
+
+ if($rowSubGrid['tip'] == 6)
+ $sqlUserAnswer = sisplet_query("SELECT grd_id FROM srv_data_grid".$this->db_table." WHERE spr_id = '".$rowSubGrid['spr_id']."' AND usr_id = '".$this->getUserId()."'");
+ elseif($rowSubGrid['tip'] == 16)
+ $sqlUserAnswer = sisplet_query("SELECT grd_id FROM srv_data_checkgrid".$this->db_table." WHERE spr_id = '".$rowSubGrid['spr_id']."' AND usr_id = '".$this->getUserId()."'");
+ else
+ $sqlUserAnswer = sisplet_query("SELECT grd_id, text FROM srv_data_textgrid".$this->db_table." WHERE spr_id = '".$rowSubGrid['spr_id']."' AND usr_id = '".$this->getUserId()."'");
+
+ if(mysqli_num_rows($sqlUserAnswer) > 0){
+ $isEmpty = false;
+ break;
+ }
+ }
+ break;
+
+ case 5: //nagovor
+ // Ce je nagovor v loopu, ga prikazemo
+ if($this->loop_id != null)
+ $isEmpty = false;
+ break;
+
+ default:
+ $isEmpty = false;
+ break;
+ }
+
+ if($isEmpty == true){
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * @desc preveri ali se elementi v podanem IFu prikazejo ali ne
+ */
+ function checkIf ($if) {
+ if ($if == 0) return true;
+
+ // preverimo po strukturi navzgor
+ $sql = sisplet_query("SELECT * FROM srv_branching WHERE element_if = '".$if."'");
+ if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
+ $row = mysqli_fetch_array($sql);
+ if (!$this->checkIf($row['parent'])) return false;
+
+ // ce je IF oznacen kot blok, potem se vedno prikaze
+ $sql = sisplet_query("SELECT * FROM srv_if WHERE id = '$if'");
+ if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
+ $row = mysqli_fetch_array($sql);
+ if ($row['tip'] == 1) return true;
+
+
+ $eval = "if (";
+
+ $sql = sisplet_query("SELECT * FROM srv_condition WHERE if_id = '$if' ORDER BY vrstni_red ASC");
+ if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
+
+ $i = 0;
+ // zgeneriramo pogoje z oklepaji, ki jih potem spustimo skozi eval
+ while ($row = mysqli_fetch_array($sql)) {
+
+ if ($i++ != 0)
+ if ($row['conjunction'] == 0)
+ $eval .= ' && ';
+ else
+ $eval .= ' || ';
+
+ if ($row['negation'] == 1)
+ $eval .= ' ! ';
+
+ for ($i=1; $i<=$row['left_bracket']; $i++)
+ $eval .= ' ( ';
+
+ if ($this->checkCondition($row[id]))
+ $eval .= ' true ';
+ else
+ $eval .= ' false ';
+
+ for ($i=1; $i<=$row['right_bracket']; $i++)
+ $eval .= ' ) ';
+
+ }
+ $eval .= ") return true; else return false; ";
+
+ // ne glih best practice, ampak takle mamo...
+ return eval($eval);
+
+ }
+
+ /**
+ * @desc preveri podani condition
+ */
+ function checkCondition ($condition) {
+
+ $sql = sisplet_query("SELECT * FROM srv_condition WHERE id = '$condition'");
+ if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
+ $row = mysqli_fetch_array($sql);
+
+ // obicne spremenljivke
+ if ($row['spr_id'] > 0) {
+ $sql2 = sisplet_query("SELECT * FROM srv_spremenljivka WHERE id = '$row[spr_id]'");
+ $row2 = mysqli_fetch_array($sql2);
+
+
+ // radio, checkbox, dropdown in multigrid
+ if ($row2['tip'] <= 3 || $row2['tip'] == 6) {
+
+ // obicne spremenljivke
+ if ($row['vre_id'] == 0) {
+ $sql3 = sisplet_query("SELECT * FROM srv_condition_vre c, srv_data_vrednost v
+ WHERE c.cond_id='$condition' AND c.vre_id=v.vre_id
+ AND v.spr_id='$row[spr_id]' AND usr_id='".$this->getUserId()."'");
+ if ($row['operator'] == 0 && mysqli_num_rows($sql3) == 0)
+ return false;
+ elseif ($row['operator'] == 1 && mysqli_num_rows($sql3) > 0)
+ return false;
+ // multigrid
+ } elseif ($row['vre_id'] > 0) {
+ $sql3 = sisplet_query("SELECT * FROM srv_condition_grid c, srv_data_grid d
+ WHERE c.cond_id='$condition' AND d.spr_id='$row[spr_id]'
+ AND c.grd_id=d.grd_id AND d.usr_id='".$this->getUserId()."'");
+ if (!$sql3) echo mysqli_error($GLOBALS['connect_db']);
+ if ($row['operator'] == 0 && !mysqli_num_rows($sql3) > 0)
+ return false;
+ elseif ($row['operator'] == 1 && !mysqli_num_rows($sql3) == 0)
+ return false;
+ }
+
+ // number in text
+ } else {
+
+ $sql3 = sisplet_query("SELECT * FROM srv_data_text".$this->db_table." WHERE spr_id='$row[spr_id]' AND usr_id='".$this->getUserId()."'");
+ if (!$sql3) echo mysqli_error($GLOBALS['connect_db']);
+ $row3 = mysqli_fetch_array($sql3);
+
+ if ($row['operator'] == 0 && !($row3['text'] == $row['text']))
+ return false;
+ elseif ($row['operator'] == 1 && !($row3['text'] != $row['text']))
+ return false;
+ elseif ($row['operator'] == 2 && !($row3['text'] < $row['text']))
+ return false;
+ elseif ($row['operator'] == 3 && !($row3['text'] <= $row['text']))
+ return false;
+ elseif ($row['operator'] == 4 && !($row3['text'] > $row['text']))
+ return false;
+ elseif ($row['operator'] == 5 && !($row3['text'] >= $row['text']))
+ return false;
+
+ }
+
+ // recnum
+ } elseif ($row['spr_id'] == -1) {
+
+ $sqlu = sisplet_query("SELECT * FROM srv_user WHERE id = '".$this->getUserId()."'");
+ $rowu = mysqli_fetch_array($sqlu);
+
+ if (!($rowu['recnum'] % $row['modul'] == $row['ostanek']))
+ return false;
+
+ }
+
+ return true;
+ }
+
+ /**
+ * @desc poisce naslednjo stran - grupo, 0 pomeni konec
+ */
+ function findNextGrupa() {
+
+ //vrstni red trenutne grupe
+ if ($this->grupa > 0) {
+ $sql = sisplet_query("SELECT * FROM srv_grupa WHERE id = '".$this->grupa."'");
+ $row = mysqli_fetch_array($sql);
+ $vrstni_red = $row['vrstni_red'];
+ } else {
+ $vrstni_red = 0;
+ }
+
+ $sql = sisplet_query("SELECT * FROM srv_grupa WHERE ank_id='".$this->anketa['id']."' AND vrstni_red>'".$vrstni_red."' ORDER BY vrstni_red ASC LIMIT 1");
+
+ // naslednja stran
+ if (mysqli_num_rows($sql) > 0) {
+ $row = mysqli_fetch_array($sql);
+ return $row['id'];
+ }
+
+ // konec
+ else {
+ return 0;
+ }
+ }
+
+ /**
+ * poisce, ce ima podani element parenta, ki je loop
+ *
+ */
+ function find_parent_loop ($element_spr, $element_if=0) {
+
+ $sql = sisplet_query("SELECT parent FROM srv_branching WHERE element_spr = '$element_spr' AND element_if = '$element_if' AND ank_id='".$this->anketa['id']."'");
+ if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
+ $row = mysqli_fetch_array($sql);
+
+ if ($row['parent'] == 0) return 0;
+
+ $sql = sisplet_query("SELECT id FROM srv_if WHERE id = '$row[parent]' AND tip = '2'");
+ if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
+ if (mysqli_num_rows($sql) > 0)
+ return $row['parent'];
+ else
+ return $this->find_parent_loop(0, $row['parent']);
+
+ }
+
+ /**
+ * poisce naslednjo vre_id v loopu
+ *
+ */
+ function findNextLoopId ($if_id=0) {
+
+ if ($if_id == 0) {
+ $sql = sisplet_query("SELECT * FROM srv_loop_data WHERE id='$this->loop_id'");
+ $row = mysqli_fetch_array($sql);
+ $if_id = $row['if_id'];
+ $loop_id = $this->loop_id;
+ } else
+ $loop_id = 0;
+
+ $sql = sisplet_query("SELECT * FROM srv_loop WHERE if_id = '$if_id'");
+ $row = mysqli_fetch_array($sql);
+ $spr_id = $row['spr_id'];
+ $max = $row['max'];
+
+ $spr = Cache::srv_spremenljivka($spr_id);
+
+ if ($spr['tip'] == 2 || $spr['tip'] == 3 || $spr['tip'] == 9) {
+
+ $data_vrednost = array();
+ if($spr['tip'] == 9)
+ $sql1 = sisplet_query("SELECT vre_id FROM srv_data_text".$this->db_table." WHERE spr_id='$spr_id' AND usr_id='".$this->getUserId()."'");
+ else
+ $sql1 = sisplet_query("SELECT vre_id FROM srv_data_vrednost".$this->db_table." WHERE spr_id='$spr_id' AND usr_id='".$this->getUserId()."'");
+
+ while ($row1 = mysqli_fetch_array($sql1)) {
+ $data_vrednost[$row1['vre_id']] = 1;
+ }
+
+ $vre_id = '';
+ $i = 1;
+ //$sql = sisplet_query("SELECT * FROM srv_loop_vre WHERE if_id='$if_id'");
+ $sql = sisplet_query("SELECT * FROM srv_loop_vre lv, srv_vrednost v WHERE lv.if_id='$if_id' AND lv.vre_id=v.id ORDER BY v.vrstni_red ASC");
+ while ($row = mysqli_fetch_array($sql)) {
+
+ if ($row['tip'] == 0) { // izbran
+ if ( isset($data_vrednost[$row['vre_id']]) ) {
+ $vre_id .= ', '.$row['vre_id'];
+ $i++;
+ }
+ } elseif ($row['tip'] == 1) { // ni izbran
+ if ( !isset($data_vrednost[$row['vre_id']]) ) {
+ $vre_id .= ', '.$row['vre_id'];
+ $i++;
+ }
+ } elseif ($row['tip'] == 2) { // vedno
+ $vre_id .= ', '.$row['vre_id'];
+ $i++;
+ } // nikoli nimamo sploh v bazi, zato ni potrebno nic, ker se nikoli ne prikaze
+
+ if ($i > $max && $max>0) break;
+ }
+
+ $vre_id = substr($vre_id, 2);
+
+ if ($vre_id == '') return null;
+
+ $sql = sisplet_query("SELECT l.* FROM srv_loop_data l, srv_vrednost v WHERE l.if_id='$if_id' AND l.id > '$loop_id' AND l.vre_id IN ($vre_id) AND l.vre_id=v.id ORDER BY l.id ASC");
+ if (!$sql) { echo 'err56545'.mysqli_error($GLOBALS['connect_db']); die();}
+ $row = mysqli_fetch_array($sql);
+
+ if (mysqli_num_rows($sql) > 0)
+ return $row['id'];
+ else
+ return null;
+
+ // number
+ } elseif ($spr['tip'] == 7) {
+
+ $sql1 = sisplet_query("SELECT text FROM srv_data_text".$this->db_table." WHERE spr_id='$spr_id' AND usr_id='".$this->getUserId()."'");
+ $row1 = mysqli_fetch_array($sql1);
+
+ $num = (int)$row1['text'];
+ $sql2 = sisplet_query("SELECT * FROM srv_loop_data WHERE if_id='$if_id' AND id <= '$loop_id'");
+ if (mysqli_num_rows($sql2) >= $num || (mysqli_num_rows($sql2) >= $max && $max>0))
+ return null;
+
+ $sql = sisplet_query("SELECT * FROM srv_loop_data WHERE if_id='$if_id' AND id > '$loop_id'");
+ $row = mysqli_fetch_array($sql);
+
+ if (mysqli_num_rows($sql) > 0)
+ return $row['id'];
+ else
+ return null;
+
+ }
+ }
+
+ /**
+ * @desc V podanem stringu poisce spremenljivke in jih spajpa z vrednostmi
+ */
+ function dataPiping ($text) {
+
+ Common::getInstance()->Init($this->anketa['id']);
+ return Common::getInstance()->dataPiping($text, $this->usr_id, $this->loop_id);
+ }
+
+ function displayIf($if){
+ global $lang;
+
+ // razsiritev ce imamo landscape postavitev
+ $expand_width = $this->landscape == 1 ? 1.5 : 1;
+
+ $sql_if = sisplet_query("SELECT * FROM srv_if WHERE id = '$if'");
+ $row_if = mysqli_fetch_array($sql_if);
+
+ // Blok
+ if($row_if['tip'] == 1)
+ $output = strtoupper($lang['srv_block']).' ';
+ // Loop
+ elseif($row_if['tip'] == 2)
+ $output = strtoupper($lang['srv_loop']).' ';
+ // IF
+ else
+ $output = 'IF ';
+
+ $sql_if = sisplet_query("SELECT * FROM srv_if WHERE id = '$if'");
+ $row_if = mysqli_fetch_array($sql_if);
+ $output .= '('.$row_if['number'].') ';
+
+ $sql = Cache::srv_condition($if);
+
+ $bracket = 0;
+ $i = 0;
+ while ($row = mysqli_fetch_array($sql)) {
+
+ if ($i++ != 0)
+ if ($row['conjunction'] == 0)
+ $output .= ' and ';
+ else
+ $output .= ' or ';
+
+ if ($row['negation'] == 1)
+ $output .= ' NOT ';
+
+ for ($i=1; $i<=$row['left_bracket']; $i++)
+ $output .= ' ( ';
+
+ // obicajne spremenljivke
+ if ($row['spr_id'] > 0) {
+
+ $row2 = Cache::srv_spremenljivka($row['spr_id']);
+
+ // obicne spremenljivke
+ if ($row['vre_id'] == 0) {
+ $row1 = Cache::srv_spremenljivka($row['spr_id']);
+ // multigrid
+ } elseif ($row['vre_id'] > 0) {
+ $sql1 = sisplet_query("SELECT * FROM srv_vrednost WHERE id = '$row[vre_id]'");
+ $row1 = mysqli_fetch_array($sql1);
+ } else
+ $row1 = null;
+
+ $output .= $row1['variable'];
+
+ // radio, checkbox, dropdown in multigrid
+ if (($row2['tip'] <= 3 || $row2['tip'] == 6) && ($row['spr_id'] || $row['vre_id'])) {
+
+ if ($row['operator'] == 0)
+ $output .= ' = ';
+ else
+ $output .= ' != ';
+
+ $output .= '[';
+
+ // obicne spremenljivke
+ if ($row['vre_id'] == 0) {
+ $sql2 = sisplet_query("SELECT * FROM srv_condition_vre c, srv_vrednost v WHERE cond_id='$row[id]' AND c.vre_id=v.id");
+
+ $j = 0;
+ while ($row2 = mysqli_fetch_array($sql2)) {
+ if ($j++ != 0) $output .= ', ';
+ $output .= $row2['variable'];
+ }
+ // multigrid
+ } elseif ($row['vre_id'] > 0) {
+ $sql2 = sisplet_query("SELECT g.* FROM srv_condition_grid c, srv_grid g WHERE c.cond_id='$row[id]' AND c.grd_id=g.id AND g.spr_id='$row[spr_id]'");
+
+ $j = 0;
+ while ($row2 = mysqli_fetch_array($sql2)) {
+ if ($j++ != 0) $output .= ', ';
+ $output .= $row2['variable'];
+ }
+ }
+
+ $output .= ']';
+
+ // textbox in nubmer mata drugacne pogoje in opcije
+ } elseif ($row2['tip'] == 4 || $row2['tip'] == 21 || $row2['tip'] == 7 || $row2['tip'] == 22) {
+
+ if ($row['operator'] == 0)
+ $output .= ' = ';
+ elseif ($row['operator'] == 1)
+ $output .= ' <> ';
+ elseif ($row['operator'] == 2)
+ $output .= ' < ';
+ elseif ($row['operator'] == 3)
+ $output .= ' <= ';
+ elseif ($row['operator'] == 4)
+ $output .= ' > ';
+ elseif ($row['operator'] == 5)
+ $output .= ' >= ';
+
+ $output .= '\''.$row['text'].'\'';
+
+ }
+
+ // recnum
+ } elseif ($row['spr_id'] == -1) {
+
+ $output .= 'mod(recnum, '.$row['modul'].') = '.$row['ostanek'];
+
+ }
+
+ for ($i=1; $i<=$row['right_bracket']; $i++)
+ $output .= ' ) ';
+ }
+
+ if ($row_if['label'] != '') {
+ $output .= ' (';
+ $output .= ' '.$row_if['label'].' ';
+ $output .= ') ';
+ }
+
+ $this->pdf->SetTextColor(0,0,150);
+ $this->pdf->setFont('','B',$this->font);
+ $this->pdf->MultiCell(90*$expand_width, 1, $this->encodeText($output),0,'L',0,1,0,0);
+ $this->pdf->SetTextColor(0,0,0);
+ $this->pdf->setFont('','',$this->font);
+ }
+
+
+ function outputUser()
+ {
+ $sqlGrupeString = "SELECT id FROM srv_grupa WHERE ank_id='".$this->anketa['id']."' ORDER BY vrstni_red";
+ $sqlGrupe = sisplet_query($sqlGrupeString);
+
+ // filtriramo spremenljivke glede na profil - SAMO CE NE PRIHAJAMO IZ MAILA!
+ $tmp_svp_pv = array();
+ if($this->usr_type == null){
+ SurveyVariablesProfiles :: Init($this->anketa['id'], $this->resp_id, true, false);
+
+ $dvp = SurveyUserSetting :: getInstance()->getSettings('default_variable_profile');
+ $_currentVariableProfile = SurveyVariablesProfiles :: checkDefaultProfile($dvp);
+
+ $tmp_svp_pv = SurveyVariablesProfiles :: getProfileVariables($_currentVariableProfile);
+
+ foreach ( $tmp_svp_pv as $vid => $variable) {
+ $tmp_svp_pv[$vid] = substr($vid, 0, strpos($vid, '_'));
+ }
+ }
+
+ while ( $rowGrupe = mysqli_fetch_assoc( $sqlGrupe ) )
+ { // sprehodmo se skozi grupe ankete
+ $this->grupa = $rowGrupe['id'];
+
+ // Pogledamo prvo spremenljivko v grupi ce je v loopu
+ $sql = sisplet_query("SELECT * FROM srv_spremenljivka WHERE gru_id='".$this->grupa."' AND visible='1' ORDER BY vrstni_red ASC");
+ $row = mysqli_fetch_array($sql);
+
+ // ce je ima loop za parenta
+ $if_id = $this->find_parent_loop($row['id']);
+ if ($if_id > 0){
+ $sql1 = sisplet_query("SELECT * FROM srv_loop WHERE if_id = '$if_id'");
+ $row1 = mysqli_fetch_array($sql1);
+ $this->loop_id = $this->findNextLoopId($row1['if_id']);
+
+ $if = Cache::srv_if($if_id);
+ $loop_title = $if['label'];
+
+ // gremo cez vse spremenljivke v trenutnem loopu
+ while($this->loop_id != null){
+
+
+ // Izrisemo naslov loopa
+ $this->pdf->SetTextColor(0,0,200);
+ $this->pdf->SetDrawColor(0,0,200);
+ $this->pdf->setFont('','B',$this->font);
+
+ $this->pdf->Write (0, $this->encodeText($this->dataPiping($loop_title)), '', 0, 'L', 1, 1);
+
+ $this->pdf->SetTextColor(0,0,200);
+ $this->pdf->SetDrawColor(0,0,200);
+ $this->pdf->setFont('','',$this->font);
+
+
+ $sqlSpremenljivke = sisplet_query("SELECT * FROM srv_spremenljivka WHERE gru_id='".$this->grupa."' AND visible='1' ORDER BY vrstni_red ASC");
+ while ($rowSpremenljivke = mysqli_fetch_assoc($sqlSpremenljivke))
+ { // sprehodimo se skozi spremenljivke grupe
+ $spremenljivka = $rowSpremenljivke['id'];
+ if ( $this->checkSpremenljivka ($spremenljivka) /*|| $this->showIf == 1*/ )
+ { // lahko izrišemo spremenljivke
+
+ // po potrebi obarvamo vprašanja
+ $this->pdf->SetTextColor(0);
+ if ($rowSpremenljivke['visible'] == 0)
+ {
+ if ($rowSpremenljivke['sistem'] == 1)
+ { // Äe je oboje = vijolÄno
+ $this->pdf->SetTextColor(128,0 ,128);
+ }
+ else
+ { // ÄŒe je skrito = rdeÄe
+ $this->pdf->SetTextColor(255,0,0);
+ }
+ }
+ else if ($rowSpremenljivke['sistem'] == 1)
+ $this->pdf->SetTextColor(0,0,255);
+
+
+ $this->pdf->SetTextColor(0,0,0);
+ $this->pdf->SetDrawColor(0,0,0);
+
+ // Ce imamo kombinirano tabelo pogledamo ce prikazujemo katero od podtabel
+ if($rowSpremenljivke['tip'] == 24){
+
+ $subGrids = array();
+ $showGridMultiple = false;
+
+ // Loop po podskupinah gridov
+ $sqlSubGrid = sisplet_query("SELECT m.spr_id, s.tip, s.enota FROM srv_grid_multiple m, srv_spremenljivka s WHERE m.parent='".$spremenljivka."' AND m.spr_id=s.id");
+ while($rowSubGrid = mysqli_fetch_array($sqlSubGrid)){
+ if(in_array($rowSubGrid['spr_id'],$tmp_svp_pv) || count($tmp_svp_pv) == 0){
+ $showGridMultiple = true;
+ break;
+ }
+ }
+ }
+ // ce je nastavljen profil s filtriranimi spremenljivkami
+ if(in_array($spremenljivka,$tmp_svp_pv) || count($tmp_svp_pv) == 0 || ($rowSpremenljivke['tip'] == 24 && $showGridMultiple)){
+
+ $this->currentHeight = 0;
+
+ // NAVADEN IZPIS rezultatov spremenljivke - kratek samo pri radio, checkbox, multiradio, multicheckbox, besedilo
+ if( $this->type == 0 && in_array($rowSpremenljivke['tip'], array(1,2,3,6,16,21,7,8)) ){
+ if($rowSpremenljivke['tip'] < 4)
+ $this->outputVprasanjeValues($rowSpremenljivke);
+ else
+ $this->outputVprasanje($rowSpremenljivke);
+
+ $this->outputSpremenljivkeValues($rowSpremenljivke);
+ }
+
+ // KRATEK IZPIS rezultatov spremenljivke
+ elseif($this->type == 2 && $rowSpremenljivke['tip'] != 24){
+ $this->outputVprasanjeValues($rowSpremenljivke);
+ $this->outputSpremenljivkeValues($rowSpremenljivke);
+ }
+
+ // DOLG IZPIS rezultatov
+ else{
+ $this->outputVprasanje($rowSpremenljivke);
+ $this->outputSpremenljivke($rowSpremenljivke);
+ }
+
+ $this->pdf->Ln(LINE_BREAK);
+ }
+ }
+ }
+
+ $this->loop_id = $this->findNextLoopId();
+ }
+ }
+ // Navadne spremenljivke ki niso v loopu
+ else{
+ $sqlSpremenljivke = sisplet_query("SELECT * FROM srv_spremenljivka WHERE gru_id='".$this->grupa."' AND visible='1' ORDER BY vrstni_red ASC");
+ while ($rowSpremenljivke = mysqli_fetch_assoc($sqlSpremenljivke))
+ { // sprehodimo se skozi spremenljivke grupe
+ $spremenljivka = $rowSpremenljivke['id'];
+ if ( $this->checkSpremenljivka ($spremenljivka) /*|| $this->showIf == 1*/ )
+ { // lahko izrišemo spremenljivke
+
+ // po potrebi obarvamo vprašanja
+ $this->pdf->SetTextColor(0);
+ if ($rowSpremenljivke['visible'] == 0)
+ {
+ if ($rowSpremenljivke['sistem'] == 1)
+ { // Äe je oboje = vijolÄno
+ $this->pdf->SetTextColor(128,0 ,128);
+ }
+ else
+ { // ÄŒe je skrito = rdeÄe
+ $this->pdf->SetTextColor(255,0,0);
+ }
+ }
+ else if ($rowSpremenljivke['sistem'] == 1)
+ $this->pdf->SetTextColor(0,0,255);
+
+
+ $this->pdf->SetTextColor(0,0,0);
+ $this->pdf->SetDrawColor(0,0,0);
+
+ // Ce imamo kombinirano tabelo pogledamo ce prikazujemo katero od podtabel
+ if($rowSpremenljivke['tip'] == 24){
+
+ $subGrids = array();
+ $showGridMultiple = false;
+
+ // Loop po podskupinah gridov
+ $sqlSubGrid = sisplet_query("SELECT m.spr_id, s.tip, s.enota FROM srv_grid_multiple m, srv_spremenljivka s WHERE m.parent='".$spremenljivka."' AND m.spr_id=s.id");
+ while($rowSubGrid = mysqli_fetch_array($sqlSubGrid) || count($tmp_svp_pv) == 0){
+ if(in_array($rowSubGrid['spr_id'],$tmp_svp_pv)){
+ $showGridMultiple = true;
+ break;
+ }
+ }
+ }
+ // ce je nastavljen profil s filtriranimi spremenljivkami
+ if(in_array($spremenljivka,$tmp_svp_pv) || count($tmp_svp_pv) == 0 || ($rowSpremenljivke['tip'] == 24 && $showGridMultiple)){
+
+ $this->currentHeight = 0;
+
+ // NAVADEN IZPIS rezultatov spremenljivke - kratek samo pri radio, checkbox, multiradio, multicheckbox, besedilo
+ if( $this->type == 0 && in_array($rowSpremenljivke['tip'], array(1,2,3,6,16,21,7,8)) ){
+ if($rowSpremenljivke['tip'] < 4)
+ $this->outputVprasanjeValues($rowSpremenljivke);
+ else
+ $this->outputVprasanje($rowSpremenljivke);
+
+ $this->outputSpremenljivkeValues($rowSpremenljivke);
+ }
+
+ // KRATEK IZPIS rezultatov spremenljivke
+ elseif($this->type == 2 && $rowSpremenljivke['tip'] != 24){
+ $this->outputVprasanjeValues($rowSpremenljivke);
+ $this->outputSpremenljivkeValues($rowSpremenljivke);
+ }
+
+ // DOLG IZPIS rezultatov
+ else{
+ $this->outputVprasanje($rowSpremenljivke);
+ $this->outputSpremenljivke($rowSpremenljivke);
+ }
+
+ $this->pdf->Ln(LINE_BREAK);
+ }
+ }
+ }
+ }
+ }
+ if($this->pageBreak == 0){
+ $this->pdf->Ln(LINE_BREAK);
+ $this->drawLine();
+ $this->pdf->Ln(LINE_BREAK);
+ }
+ }
+
+
+ function getCellHeight($string, $width){
+
+ $this->pdf->startTransaction();
+ // get the number of lines calling you method
+ $linecount = $this->pdf->MultiCell($width, 0, $string, 0, 'L', 0, 0, '', '', true, 0, false, true, 0);
+ // restore previous object
+ $this->pdf = $this->pdf->rollbackTransaction();
+
+ $height = ($linecount <= 1) ? 4.7 : $linecount * ($this->pdf->getFontSize() * $this->pdf->getCellHeightRatio()) + 2;
+
+ return $height;
+ }
+
+ function convertPx2Mm($WidthInMm, $WidthPx, $NPx){
+ $convertedInMm = ($WidthInMm/$WidthPx)*$NPx;
+ //error_log("convertedInMm: $convertedInMm");
+ return $convertedInMm;
+ }
+}
+
+
+?> \ No newline at end of file
diff --git a/admin/exportclases/class.pdfIzvozStatus.php b/admin/exportclases/class.pdfIzvozStatus.php
new file mode 100644
index 0000000..34ed97f
--- /dev/null
+++ b/admin/exportclases/class.pdfIzvozStatus.php
@@ -0,0 +1,1052 @@
+<?php
+
+ global $site_path;
+
+ include_once('../../function.php');
+ include_once('../survey/definition.php');
+ require_once('../exportclases/class.enka.pdf.php');
+
+ define("ALLOW_HIDE_ZERRO_REGULAR", false); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za navadne odgovore
+ define("ALLOW_HIDE_ZERRO_MISSING", true); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za missinge
+
+ define("NUM_DIGIT_AVERAGE", 2, true); // stevilo digitalnih mest za povprecje
+ define("NUM_DIGIT_DEVIATION", 2, true); // stevilo digitalnih mest za povprecje
+
+ define("M_ANALIZA_DESCRIPTOR", "descriptor", true);
+ define("M_ANALIZA_FREQUENCY", "frequency", true);
+
+ define("FNT_FREESERIF", "freeserif", true);
+ define("FNT_FREESANS", "freesans", true);
+ define("FNT_HELVETICA", "helvetica", true);
+
+ define("FNT_MAIN_TEXT", FNT_FREESANS, true);
+ define("FNT_QUESTION_TEXT", FNT_FREESANS, true);
+ define("FNT_HEADER_TEXT", FNT_FREESANS, true);
+
+ define("FNT_MAIN_SIZE", 10, true);
+ define("FNT_QUESTION_SIZE", 9, true);
+ define("FNT_HEADER_SIZE", 10, true);
+
+ define("RADIO_BTN_SIZE", 3, true);
+ define("CHCK_BTN_SIZE", 3, true);
+ define("LINE_BREAK", 6, true);
+
+ define ('PDF_MARGIN_HEADER', 8);
+ define ('PDF_MARGIN_FOOTER', 12);
+ define ('PDF_MARGIN_TOP', 18);
+ define ('PDF_MARGIN_BOTTOM', 18);
+ define ('PDF_MARGIN_LEFT', 15);
+ define ('PDF_MARGIN_RIGHT', 15);
+
+
+/** Class za generacijo pdf-a
+ *
+ * @desc: po novem je potrebno form elemente generirati ro�no kot slike
+ *
+ */
+class PdfIzvozStatus {
+
+ var $anketa;// = array(); // trenutna anketa
+
+ var $pi=array('canCreate'=>false); // za shrambo parametrov in sporocil
+ var $pdf;
+ var $currentStyle;
+ var $db_table = '';
+
+ public static $ss = null; //SurveyStatistic class
+ public static $sas = null; // $sas = new SurveyAdminSettings();class
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null, $ssData)
+ {
+ global $site_path;
+ global $global_user_id;
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) )
+ {
+ $this->anketa['id'] = $anketa;
+ $this->anketa['podstran'] = $podstran;
+ // create new PDF document
+ $this->pdf = new enka_TCPDF('L', PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
+ }
+ else
+ {
+ $this->pi['msg'] = "Anketa ni izbrana!";
+ $this->pi['canCreate'] = false;
+ return false;
+ }
+
+
+ $this->sas = new SurveyAdminSettings(0,$this->anketa['id']);
+ //ustvarimo SurveyStatistic objekt in mu napolnimo variable
+ $this->ss = new SurveyStatistic();
+ $this->ss->Init($this->anketa['id'],true);
+ /*
+
+ $this->ss->realUsersByStatus_base = $ssData[0];
+
+ $this->ss->type = $ssData[1];
+ $this->ss->period = $ssData[2];
+ */
+ /* intervali se veÄ ne poÅ¡iljajo preko get, ker se polovijo iz porfila
+ if($ssData[1] != 'undefined')
+ $this->ss->startDate = $ssData[1];
+ if($ssData[2] != 'undefined')
+ $this->ss->endDate = $ssData[2];
+ $this->ss->type = $ssData[3];
+ $this->ss->period = $ssData[4];
+ //$this->ss->isDefaultFilters = false;
+ */
+
+ if ( SurveyInfo::getInstance()->SurveyInit($this->anketa['id']) && $this->init())
+ {
+ $this->anketa['uid'] = $global_user_id;
+ SurveyUserSetting::getInstance()->Init($this->anketa['id'], $this->anketa['uid']);
+ }
+ else
+ return false;
+ // ce smo prisli do tu je vse ok
+ $this->pi['canCreate'] = true;
+
+ return true;
+ }
+
+ // SETTERS && GETTERS
+
+ function checkCreate()
+ {
+ return $this->pi['canCreate'];
+ }
+ function getFile($fileName)
+ {
+ //Close and output PDF document
+ ob_end_clean();
+ $this->pdf->Output($fileName, 'I');
+ }
+
+
+ function init()
+ {
+ global $lang;
+
+ // array used to define the language and charset of the pdf file to be generated
+ $language_meta = Array();
+ $language_meta['a_meta_charset'] = 'UTF-8';
+ $language_meta['a_meta_dir'] = 'ltr';
+ $language_meta['a_meta_language'] = 'sl';
+ $language_meta['w_page'] = $lang['page'];
+
+ //set some language-dependent strings
+ $this->pdf->setLanguageArray($language_meta);
+
+ //set margins
+ $this->pdf->setPrintHeaderFirstPage(true);
+ $this->pdf->setPrintFooterFirstPage(true);
+ $this->pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
+ $this->pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
+ $this->pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
+
+ // set header and footer fonts
+ $this->pdf->setHeaderFont(Array(FNT_HEADER_TEXT, "I", FNT_HEADER_SIZE));
+ $this->pdf->setFooterFont(Array(FNT_HEADER_TEXT, 'I', FNT_HEADER_SIZE));
+
+
+ // set document information
+ $this->pdf->SetAuthor('An Order Form');
+ $this->pdf->SetTitle('An Order');
+ $this->pdf->SetSubject('An Order');
+
+ // set default header data
+ $this->pdf->SetHeaderData(null, null, "www.1ka.si", $this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()));
+
+ //set auto page breaks
+ $this->pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
+
+ $this->pdf->SetFont(FNT_MAIN_TEXT, '', FNT_MAIN_SIZE);
+ //set image scale factor
+ $this->pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
+ return true;
+ }
+
+ function encodeText($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace(array("&scaron;","&#353;","&#269;"),array("Å¡","Å¡","Ä"),$text);
+ return strip_tags($text);
+ }
+
+ function createPdf()
+ {
+ global $site_path;
+ global $lang;
+
+ // izpisemo prvo stran
+ //$this->createFrontPage();
+
+ $this->pdf->AddPage();
+
+ $this->pdf->setFont('','B','11');
+ $this->pdf->MultiCell(150, 5, 'Status', 0, 'L', 0, 1, 0 ,0, true);
+ $this->pdf->ln(5);
+
+ $this->pdf->setDrawColor(0, 0, 0, 255);
+ $this->pdf->setFont('','','6');
+
+ $this->display();
+ }
+
+ public function display() {
+ global $lang;
+
+ // imamo vnose, prikažemo statistiko
+ $this->ss->PrepareDateView();
+ $this->ss->PrepareStatusView();
+
+ $this->pdf->setDrawColor(200, 200, 200);
+ $this->pdf->setFillColor(150, 220, 150);
+
+ // zgornji boxi
+ $this -> DisplayInfoView();
+ $this -> DisplayStatusView();
+ $this -> DisplayAnswerStateView();
+
+ // spodnji boxi
+ $this -> DisplayReferalsView();
+ $this -> DisplayDateView();
+ $this -> DisplayPagesStateView();
+ }
+
+
+
+ /** Funkcija prikaze osnovnih informacij
+ *
+ */
+ function DisplayInfoView() {
+ global $lang;
+ global $site_url;
+
+ $X = 10;
+ $Y = 25;
+ $height = 80;
+ $this->pdf->setXY($X, $Y);
+
+ //izrisemo okvir
+ $this->pdf->setFont('','B','8');
+ $this->pdf->SetTextColor(180, 0, 0);
+ $this->pdf->MultiCell(90, $height, $this->encodeText($lang['srv_statistic_info_title']), 1, 'L', 0, 0, 0 ,0, true);
+
+ $this->pdf->setXY($X, $Y+8);
+ $this->pdf->setFont('','','6');
+ $this->pdf->SetTextColor(0, 0, 0);
+
+ //ime ankete
+ $this->pdf->Cell(20, 3, $this->encodeText($lang['srv_info_name'].':'), 0, 0, 'L', 0);
+ $this->pdf->Cell(70, 3, $this->encodeText(SurveyInfo::getSurveyTitle()), 0, 1, 'L', 0);
+ $this->pdf->setX($X);
+
+ //katere napredne možnosti so vklopljene
+ $row = SurveyInfo::getSurveyRow();
+ $enabled_advanced = null;
+ $prefix = '';
+ if ($row['uporabnost'] == 1) {
+ $enabled_advanced .= $prefix . $lang['srv_vrsta_survey_type_4'];
+ $prefix = ', ';
+ }
+ if ($row['user_from_cms'] == 1) {
+ $enabled_advanced .= $prefix . $lang['srv_vrsta_survey_type_5'];
+ $prefix = ', ';
+ }
+ if ($row['quiz'] == 1) {
+ $enabled_advanced .= $prefix . $lang['srv_vrsta_survey_type_6'];
+ $prefix = ', ';
+ }
+ if ($row['phone'] == 1) {
+ $enabled_advanced .= $prefix . $lang['srv_vrsta_survey_type_7'];
+ $prefix = ', ';
+ }
+ if ($row['social_network'] == 1) {
+ $enabled_advanced .= $prefix . $lang['srv_vrsta_survey_type_8'];
+ $prefix = ', ';
+ }
+ //tip ankete
+ $this->pdf->Cell(20, 3, $this->encodeText($lang['srv_info_type'].':'), 0, 0, 'L', 0);
+ $this->pdf->Cell(70, 3, $this->encodeText($lang['srv_vrsta_survey_type_'.SurveyInfo::getSurveyType()] . ($enabled_advanced != null ? ' ('.$enabled_advanced.')' : '' )), 0, 1, 'L', 0);
+ $this->pdf->setX($X);
+
+ //vprašanj, variabel
+ $this->pdf->Cell(20, 3, $this->encodeText($lang['srv_info_questions'].':'), 0, 0, 'L', 0);
+ $this->pdf->Cell(15, 3, $this->encodeText(SurveyInfo::getSurveyQuestionCount()), 0, 0, 'L', 0);
+ $this->pdf->Cell(20, 3, $this->encodeText($lang['srv_info_variables'].':'), 0, 0, 'L', 0);
+ $this->pdf->Cell(15, 3, $this->encodeText(SurveyInfo::getSurveyVariableCount()), 0, 1, 'L', 0);
+ $this->pdf->setX($X);
+
+ //uporabnikov, odgovorov
+ $this->pdf->Cell(20, 3, $this->encodeText($lang['srv_analiza_stUporabnikov'].':'), 0, 0, 'L', 0);
+ $this->pdf->Cell(15, 3, $this->encodeText(SurveyInfo::getSurveyAnswersCount()), 0, 0, 'L', 0);
+ $this->pdf->Cell(20, 3, $this->encodeText($lang['srv_info_answers_valid'].':'), 0, 0, 'L', 0);
+ $this->pdf->Cell(15, 3, $this->encodeText(SurveyInfo::getSurveyApropriateAnswersCount()), 0, 1, 'L', 0);
+ $this->pdf->setX($X);
+
+ //jezik ankete
+ $this->pdf->Cell(20, 3, $this->encodeText($lang['srv_info_language'].':'), 0, 0, 'L', 0);
+ $this->pdf->Cell(70, 3, $this->encodeText(SurveyInfo::getRespondentLanguage()), 0, 1, 'L', 0);
+ $this->pdf->setX($X);
+
+ //avtor
+ $this->pdf->Cell(20, 3, $this->encodeText($lang['srv_info_creator'].':'), 0, 0, 'L', 0);
+ $text = '';
+ $text .= SurveyInfo::getSurveyInsertName();
+ if (SurveyInfo::getSurveyInsertDate() && SurveyInfo::getSurveyInsertDate() != "00.00.0000")
+ $text .= SurveyInfo::getDateTimeSeperator() . $this->ss->dateFormat(SurveyInfo::getSurveyInsertDate(),DATE_FORMAT_SHORT);
+ if (SurveyInfo::getSurveyInsertTime() && SurveyInfo::getSurveyInsertTime() != "00:00:00")
+ $text .= SurveyInfo::getDateTimeSeperator() . $this->ss->dateFormat(SurveyInfo::getSurveyInsertTime(),TIME_FORMAT_SHORT);
+ $this->pdf->Cell(70, 3, $this->encodeText($text), 0, 1, 'L', 0);
+ $this->pdf->setX($X);
+
+ //spreminjal
+ $this->pdf->Cell(20, 3, $this->encodeText($lang['srv_info_modify'].':'), 0, 0, 'L', 0);
+ $text = '';
+ $text .= SurveyInfo::getSurveyEditName();
+ if (SurveyInfo::getSurveyEditDate() && SurveyInfo::getSurveyEditDate() != "00.00.0000")
+ $text .= SurveyInfo::getDateTimeSeperator() . $this->ss->dateFormat(SurveyInfo::getSurveyEditDate(),DATE_FORMAT_SHORT);
+ if (SurveyInfo::getSurveyEditTime() && SurveyInfo::getSurveyEditTime() != "00:00:00")
+ $text .= SurveyInfo::getDateTimeSeperator() . $this->ss->dateFormat(SurveyInfo::getSurveyEditTime(),TIME_FORMAT_SHORT);
+ $this->pdf->Cell(70, 3, $this->encodeText($text), 0, 1, 'L', 0);
+ $this->pdf->setX($X);
+
+ //dostop, Kdo razen avtorja ima dostop
+ $dostop = SurveyInfo::getSurveyAccessUsers();
+ if ($dostop) {
+ $this->pdf->Cell(20, 3, $this->encodeText($lang['srv_info_access'].':'), 0, 0, 'L', 0);
+ $prefix='';
+ foreach ( $dostop as $user) {
+ $prefix .= $user['name'].'; ';
+ }
+ $prefix = substr($prefix, 0, -2);
+ $this->pdf->Cell(70, 3, $this->encodeText($prefix), 0, 1, 'L', 0);
+ $this->pdf->setX($X);
+ }
+
+ //aktivnost
+ $activity = SurveyInfo:: getSurveyActivity();
+ $_last_active = end($activity);
+ $this->pdf->Cell(20, 3, $this->encodeText($lang['srv_displaydata_status'].':'), 0, 0, 'L', 0);
+ if (SurveyInfo::getSurveyColumn('active') == 1) {
+ $this->pdf->SetTextColor(0,150,0);
+ $this->pdf->Cell(70, 3, $this->encodeText($lang['srv_anketa_active2']), 0, 1, 'L', 0);
+ } else {
+ # preverimo ali je bila anketa že aktivirana
+ if (!isset($_last_active['starts'])) {
+ # anketa Å¡e sploh ni bila aktivirana
+ $this->pdf->SetTextColor(255,120,0);
+ $this->pdf->Cell(70, 3, $this->encodeText($lang['srv_survey_non_active_notActivated']), 0, 1, 'L', 0);
+ } else {
+ # anketa je že bila aktivirna ampak je sedaj neaktivna
+ $this->pdf->SetTextColor(255,120,0);
+ $this->pdf->Cell(70, 3, $this->encodeText($lang['srv_survey_non_active']), 0, 1, 'L', 0);
+ }
+ }
+ $this->pdf->SetTextColor(0);
+ $this->pdf->setX($X);
+
+ //trajanje: datumi aktivnosti
+ if ( count($activity) > 0 ) {
+ $this->pdf->Cell(20, 3, $this->encodeText($lang['srv_info_activity'].':'), 0, 0, 'L', 0);
+ $prefix = '';
+ foreach ($activity as $active) {
+ $_starts = explode('-',$active['starts']);
+ $_expire = explode('-',$active['expire']);
+
+ $prefix .= $_starts[2].'.'.$_starts[1].'.'.$_starts[0].'-'.$_expire[2].'.'.$_expire[1].'.'.$_expire[0];
+ $prefix .= '; ';
+ }
+ $this->pdf->Cell(70, 3, $this->encodeText($prefix), 0, 1, 'L', 0);
+ $this->pdf->setX($X);
+ }
+
+
+ # predviceni cas trajanja enkete
+ $skupni_cas = $this->sas->testiranje_cas(1);
+ $skupni_predvideni_cas = $this->sas->testiranje_predvidenicas(1);
+
+ $d = new Dostop();
+
+ //predviceni cas trajanja enkete
+ $this->pdf->Cell(20, 3, $this->encodeText($lang['srv_info_duration'].':'), 0, 0, 'L', 0);
+ $text = '';
+ $text .= ($skupni_cas != '') ? $skupni_cas.', ' : '';
+ $text .= $lang['srv_predvideno'].': '.$skupni_predvideni_cas;
+ $this->pdf->Cell(70, 3, $this->encodeText($text), 0, 1, 'L', 0);
+ $this->pdf->setX($X);
+
+ //VNOSI - pvi / zadnji vnos
+ $prvi_vnos_date = SurveyInfo::getSurveyFirstEntryDate();
+ $prvi_vnos_time = SurveyInfo::getSurveyFirstEntryTime();
+ $zadnji_vnos_date = SurveyInfo::getSurveyLastEntryDate();
+ $zadnji_vnos_time = SurveyInfo::getSurveyLastEntryTime();
+ if ($prvi_vnos_date != null) {
+ $this->pdf->Cell(20, 3, $this->encodeText($lang['srv_info_first_entry'].':'), 0, 0, 'L', 0);
+
+ $text = '';
+ $text .= $this->ss->dateFormat($prvi_vnos_date,DATE_FORMAT_SHORT);
+ $text .= $prvi_vnos_time != null ? (SurveyInfo::$dateTimeSeperator .$this->ss->dateFormat($prvi_vnos_time,TIME_FORMAT_SHORT)) : '';
+ $this->pdf->Cell(15, 3, $this->encodeText($text), 0, 0, 'L', 0);
+ }
+ if ($zadnji_vnos_date != null) {
+ $this->pdf->Cell(20, 3, $this->encodeText($lang['srv_info_last_entry'].':'), 0, 0, 'L', 0);
+
+ $text = '';
+ $text .= $this->ss->dateFormat($zadnji_vnos_date,DATE_FORMAT_SHORT);
+ $text .= $zadnji_vnos_time != null ? (SurveyInfo::$dateTimeSeperator .$this->ss->dateFormat($zadnji_vnos_time,TIME_FORMAT_SHORT)) : '';
+ $this->pdf->Cell(15, 3, $this->encodeText($text), 0, 0, 'L', 0);
+ }
+ $this->pdf->Cell(0, 0, '', 0, 1, 'L', 0);
+ $this->pdf->setX($X);
+
+ // Komentarji
+ $SD = new SurveyDiagnostics($this->anketa['id']);
+ $comments = $SD->testComments();
+
+ list($commentsAll,$commentsUnresolved,$commentsQuestionAll,$commentsQuestionUnresolved,$commentsUser,$commentsUserFinished) = $comments;
+
+ $commentsUserUnresolved = $commentsUser - $commentsUserFinished;
+ if (( (int)$commentsAll
+ +(int)$commentsUnresolved
+ +(int)$commentsQuestionAll
+ +(int)$commentsQuestionUnresolved
+ +(int)$commentsUser
+ +(int)$commentsUserFinished
+ ) > 0 ) {
+
+ $this->pdf->Cell(20, 3, $this->encodeText($lang['srv_diagnostic_4_element_0'].':'), 0, 0, 'L', 0);
+ $this->pdf->Cell(70, 3, $this->encodeText($lang['srv_diagnostic_4_element_1'].': '.(int)$commentsAll.' / '.(int)$commentsUnresolved), 0, 1, 'L', 0);
+ $this->pdf->setX($X);
+
+ $this->pdf->Cell(20, 3, $this->encodeText(''), 0, 0, 'L', 0);
+ $this->pdf->Cell(70, 3, $this->encodeText($lang['srv_diagnostic_4_element_6'].': '.(int)$commentsQuestionAll.' / '.(int)$commentsQuestionUnresolved), 0, 1, 'L', 0);
+ $this->pdf->setX($X);
+
+ $this->pdf->Cell(20, 3, $this->encodeText(''), 0, 0, 'L', 0);
+ $this->pdf->Cell(70, 3, $this->encodeText($lang['srv_diagnostic_4_element_7'].': '.(int)$commentsUser.' / '.(int)$commentsUserUnresolved), 0, 1, 'L', 0);
+ $this->pdf->setX($X);
+ }
+ }
+
+ /** Funkcija prikaže statuse
+ *
+ */
+ function DisplayStatusView() {
+ global $lang;
+
+ $X = 105;
+ $Y = 25;
+ $height = 80;
+ $this->pdf->setXY($X, $Y);
+
+ //izrisemo okvir
+ $this->pdf->setFont('','B','8');
+ $this->pdf->SetTextColor(180, 0, 0);
+ $this->pdf->MultiCell(90, $height, $this->encodeText($lang['srv_statistic_status_title']), 1, 'L', 0, 0, 0 ,0, true);
+
+ $this->pdf->setXY($X, $Y+8);
+ $this->pdf->setFont('','','6');
+ $this->pdf->SetTextColor(0, 0, 0);
+
+ $cntValid = 0; // da vemo ali izpisemo skupne
+ $cntNonValid = 0; // da vemo ali izpisemo skupne
+
+ foreach ($this->ss->appropriateStatus as $status) {
+ if (!($this->ss->hideNullValues_status && $this->ss->userByStatus['valid'][$status] == 0)) {// da ne delamo po neporebnem
+ $this->pdf->Cell(45, 0, $this->encodeText($lang['srv_userstatus_'.$status] . ' ('.$status.') :'), 0, 0, 'L', 0);
+ $this->pdf->Cell(45, 0, $this->encodeText($this->ss->userByStatus['valid'][$status]), 0, 1, 'L', 0);
+
+ $cntValid++;
+ $this->pdf->setX($X);
+ }
+ }
+
+ // vsota vlejavnih
+ if ($cntValid > 0 || !$this->ss->hideNullValues_status) {
+ $this->pdf->setFont('','B','6');
+ $this->pdf->Cell(45, 0, $this->encodeText($lang['srv_statistic_redirection_sum_valid']), 'T', 0, 'L', 0);
+ $this->pdf->Cell(45, 0, $this->encodeText($this->ss->cntUserByStatus['valid']), 'T', 1, 'L', 0);
+
+ $this->pdf->setY($this->pdf->getY() + 3);
+ $this->pdf->setX($X);
+ $this->pdf->setFont('','','6');
+ }
+
+ // izpišemo še neveljavne
+ foreach ($this->ss->unAppropriateStatus as $status) {
+ if (!($this->ss->hideNullValues_status && $this->ss->userByStatus['nonvalid'][$status] == 0)) {// da ne delamo po neporebnem
+ $this->pdf->Cell(45, 0, $this->encodeText($lang['srv_userstatus_'.$status] . ' ('.$status.') :'), 0, 0, 'L', 0);
+ $this->pdf->Cell(45, 0, $this->encodeText($this->ss->userByStatus['nonvalid'][$status]), 0, 1, 'L', 0);
+
+ $cntNonValid++;
+ $this->pdf->setX($X);
+ }
+ }
+ // se status null (neznan status)
+ if (!($this->ss->hideNullValues_status && $this->ss->userByStatus['nonvalid'][-1] == 0)) {// da ne delamo po neporebnem
+ $this->pdf->Cell(45, 0, $this->encodeText($lang['srv_userstatus_null']), 0, 0, 'L', 0);
+ $this->pdf->Cell(45, 0, $this->encodeText(isset($this->ss->userByStatus['nonvalid'][-1]) ? $this->ss->userByStatus['nonvalid'][-1] : '0'), 0, 1, 'L', 0);
+
+ $cntNonValid++;
+ $this->pdf->setX($X);
+ }
+
+ // vsota nevlejavnih
+ if ($cntNonValid > 0 || !$this->ss->hideNullValues_status) {
+ $this->pdf->setFont('','B','6');
+ $this->pdf->Cell(45, 0, $this->encodeText($lang['srv_statistic_redirection_sum_nonvalid']), 'T', 0, 'L', 0);
+ $this->pdf->Cell(45, 0, $this->encodeText($this->ss->cntUserByStatus['nonvalid']), 'T', 1, 'L', 0);
+
+ $this->pdf->setY($this->pdf->getY() + 3);
+ $this->pdf->setX($X);
+ $this->pdf->setFont('','','6');
+ }
+ $this->pdf->setFont('','B','6');
+ $this->pdf->Cell(45, 0, $this->encodeText($lang['srv_statistic_redirection_sum']), 'T', 0, 'L', 0);
+ $this->pdf->Cell(45, 0, $this->encodeText($this->ss->cntUserByStatus['valid']+$this->ss->cntUserByStatus['nonvalid']), 'T', 1, 'L', 0);
+ $this->pdf->setFont('','','6');
+
+ $this->pdf->setX($X);
+
+ # preštejemo še neposlana vabila
+ $str = "SELECT count(*) FROM srv_invitations_recipients WHERE ank_id='".$this->anketa['id']."' AND sent='0' AND deleted='0'";
+ $qry = sisplet_query($str);
+ list($cntUnsent) = mysqli_fetch_row($qry);
+ $this->ss->userByStatus['invitation'][0] = (int)$cntUnsent;
+
+ # Å¡e email vabila
+ foreach ($this->ss->invitationStatus as $status)
+ {
+ if (!($this->ss->hideNullValues_status && $this->ss->userByStatus['invitation'][$status] == 0))
+ {// da ne delamo po neporebnem
+ //echo '<span class="dashboard_status_span">' . $lang['srv_userstatus_'.$status] . ' ('.$status.') :</span>' . $this->ss->userByStatus['invitation'][$status].'<br/>';
+ $this->pdf->Cell(45, 0, $this->encodeText($lang['srv_userstatus_'.$status] . ' ('.$status.') :'), 0, 0, 'L', 0);
+ $this->pdf->Cell(45, 0, $this->encodeText($this->ss->userByStatus['invitation'][$status]), 0, 1, 'L', 0);
+
+ $cntInvitation++;
+ $this->pdf->setX($X);
+ }
+ }
+
+ // vsota emaili
+ if ($cntInvitation > 0 || !$this->ss->hideNullValues_status) {
+ //echo '<div class="anl_dash_bt full strong"><span class="dashboard_status_span">'.$lang['srv_statistic_redirection_sum_invitation'].'</span>'.($this->cntUserByStatus['invitation']).'<br/></div><br/>';
+ $this->pdf->setFont('','B','6');
+ $this->pdf->Cell(45, 0, $this->encodeText($lang['srv_statistic_redirection_sum_invitation']), 'T', 0, 'L', 0);
+ $this->pdf->Cell(45, 0, $this->encodeText($this->ss->cntUserByStatus['invitation']), 'T', 1, 'L', 0);
+
+ $this->pdf->setY($this->pdf->getY() + 3);
+ $this->pdf->setX($X);
+ $this->pdf->setFont('','','6');
+ }
+
+ // testni podatki
+ if ((int)$this->ss->testDataCount > 0) {
+ $this->pdf->setFont('','B','6');
+
+ $this->pdf->Cell(90, 6, '', 'B', 1, 'L', 0);
+ $this->pdf->setX($X);
+
+ $this->pdf->Cell(45, 0, $this->encodeText($lang['srv_statistic_redirection_test']), 'T', 0, 'L', 0);
+ $this->pdf->Cell(45, 0, $this->encodeText((int)$this->ss->testDataCount), 'T', 1, 'L', 0);
+
+ $this->pdf->setX($X);
+ $this->pdf->setFont('','','6');
+ }
+
+ // Skupaj enot
+ SurveySetting::getInstance()->setSID($this->anketa);
+ $view_count = SurveySetting::getInstance()->getSurveyMiscSetting('view_count'); if ($view_count == "") $view_count = 0;
+
+ if ($view_count > 0 || !$this->ss->hideNullValues_status){
+ $this->pdf->setFont('','B','6');
+ $this->pdf->Cell(45, 0, $this->encodeText($lang['srv_statistic_redirection_sum_view']), 'T', 0, 'L', 0);
+ $this->pdf->Cell(45, 0, $this->encodeText($view_count), 'T', 1, 'L', 0);
+
+ $this->pdf->setX($X);
+ $this->pdf->setFont('','','6');
+ }
+ }
+
+ /** Funkcija prikaže statuse odgovorov
+ *
+ */
+ function DisplayAnswerStateView() {
+ global $lang;
+
+ $X = 200;
+ $Y = 25;
+ $height = 80;
+ $this->pdf->setXY($X, $Y);
+
+ //izrisemo okvir
+ $this->pdf->setFont('','B','8');
+ $this->pdf->SetTextColor(180, 0, 0);
+ $this->pdf->MultiCell(90, $height, $this->encodeText($lang['srv_statistic_answer_state_title']), 1, 'L', 0, 0, 0 ,0, true);
+
+ $this->pdf->setXY($X, $Y+8);
+ $this->pdf->setFont('','B','6');
+ $this->pdf->SetTextColor(0, 0, 0);
+
+
+ $order = array('3ll','4ll','5ll',5,6);
+
+ $this->pdf->Cell(40, 0, $this->encodeText($lang['srv_statistic_answer_state_status']), 'B', 0, 'L', 0);
+ $this->pdf->Cell(25, 0, $this->encodeText($lang['srv_statistic_answer_state_frequency']), 'BLR', 0, 'C', 0);
+ $this->pdf->Cell(25, 0, $this->encodeText($lang['srv_statistic_answer_state_percent']), 'B', 1, 'C', 0);
+ $this->pdf->setX($X);
+
+ $this->pdf->setFont('','','6');
+ foreach ($order as $key) {
+ $this->pdf->Cell(40, 0, $this->encodeText($lang['srv_userstatus_'.$key]), 0, 0, 'L', 0);
+
+ #frekvenca
+ $this->pdf->Cell(25, 0, $this->encodeText($this->ss->realUsersByStatus[$key]['cnt'] > 0 ? $this->ss->realUsersByStatus[$key]['cnt'] : '0'), 'LR', 0, 'C', 0);
+ #procenti
+ $this->pdf->Cell(25, 0, $this->encodeText( ((float)$this->ss->realUsersByStatus[$key]['percent'] > 1.0) ? '--' : $this->formatNumber($this->ss->realUsersByStatus[$key]['percent']*100,NUM_DIGIT_PERCENT,'%') ), 0, 1, 'C', 0);
+ $this->pdf->setX($X);
+ }
+ }
+
+
+ /** Funkcija za prikaz referalov
+ *
+ */
+ function DisplayReferalsView() {
+ global $lang;
+ global $admin_type;
+
+ $height = 80;
+ $X = 10;
+ $Y = $height+30;
+
+ $this->pdf->setXY($X, $Y);
+
+ //izrisemo okvir
+ $this->pdf->setFont('','B','8');
+ $this->pdf->SetTextColor(180, 0, 0);
+ $this->pdf->MultiCell(90, $height, $this->encodeText($lang['srv_statistic_redirection_title']), 1, 'L', 0, 0, 0 ,0, true);
+
+ $this->pdf->setXY($X, $Y+8);
+ $this->pdf->setFont('','B','6');
+ $this->pdf->SetTextColor(0, 0, 0);
+
+ // izrisemo graf
+ if ( ( $this->ss->cntValidRedirections + $this->ss->cntNonValidRedirections ) > 0) {
+ $maxValue = $this->ss->maxRedirection * GRAPH_REDUCE;
+ $value_sum = 0;
+
+ $this->pdf->Cell(20, 0, $this->encodeText($lang['srv_statistic_redirection_site']), 0, 0, 'L', 0);
+ $this->pdf->Cell(70, 0, $this->encodeText($lang['srv_statistic_redirection_click']), 0, 1, 'R', 0);
+ $this->pdf->setX($X);
+
+ $this->pdf->Cell(90, 3, $this->encodeText(''), 'T', 1, 'L', 0);
+ $this->pdf->setX($X);
+
+ $this->pdf->setFont('','','6');
+ if (count($this->ss->userRedirections["valid"])) {
+ $lineCount = 0;
+ foreach ($this->ss->userRedirections["valid"] as $key => $value) {
+
+ // zaenkrat je max stevilo vrstic 13 - drugace prebije na drugo stran
+ if($lineCount == 13){
+ $this->pdf->Cell(90, 0, ' ...', 0, 1, 'L', 0);
+ $this->pdf->setY($this->pdf->getY() + 1);
+ $this->pdf->setX($X);
+ break;
+ }
+
+ $this->pdf->Cell(20, 0, $this->encodeText($key), 0, 0, 'L', 0);
+
+ $width = ($maxValue && $value) ? (round($value / $maxValue * 60, 0)) : 0.1;
+ $width = ($width == 0) ? 0.1 : $width;
+ $this->pdf->Cell($width, 0, $this->encodeText(''), 1, 0, 'L', 1);
+
+ $this->pdf->Cell(10, 0, $this->encodeText($value), 0, 1, 'L', 0);
+
+ $this->pdf->setY($this->pdf->getY() + 1);
+ $this->pdf->setX($X);
+ $value_sum += $value;
+
+ $lineCount++;
+ }
+ }
+
+ // dodamo Å¡e direktni link
+ if ($this->ss->userRedirections["direct"] > 0) {
+ $value = $this->ss->userRedirections["direct"];
+ $this->pdf->Cell(20, 0, $this->encodeText($lang['srv_statistic_redirection_direct']), 0, 0, 'L', 0);
+
+ $width = ($maxValue && $value) ? (round($value / $maxValue * 60, 0)) : 0.1;
+ $width = ($width == 0) ? 0.1 : $width;
+ $this->pdf->Cell($width, 0, $this->encodeText(''), 1, 0, 'L', 1);
+
+ $this->pdf->Cell(10, 0, $this->encodeText($value), 0, 1, 'L', 0);
+
+ $this->pdf->setY($this->pdf->getY() + 1);
+ $this->pdf->setX($X);
+ $value_sum += $value;
+ }
+
+ // dodamo Å¡e email klik
+ if ($this->ss->userRedirections["email"] > 0) {
+ $value = $this->ss->userRedirections["email"];
+ $this->pdf->Cell(20, 0, $this->encodeText($lang['srv_statistic_redirection_email']), 0, 0, 'L', 0);
+
+ $width = ($maxValue && $value) ? (round($value / $maxValue * 60, 0)) : 0.1;
+ $width = ($width == 0) ? 0.1 : $width;
+ $this->pdf->Cell($width, 0, $this->encodeText(''), 1, 0, 'L', 1);
+
+ $this->pdf->Cell(10, 0, $this->encodeText($value), 0, 1, 'L', 0);
+
+ $this->pdf->setY($this->pdf->getY() + 1);
+ $this->pdf->setX($X);
+ $value_sum += $value;
+ }
+
+ // dodamo sumo
+ $this->pdf->setFont('','B','6');
+ $this->pdf->Cell(20, 0, $this->encodeText($lang['srv_statistic_redirection_sum_clicked']), 'T', 0, 'L', 0);
+ $this->pdf->Cell(70, 0, $this->encodeText($value_sum), 'T', 1, 'L', 0);
+ $this->pdf->setFont('','','6');
+ $this->pdf->setY($this->pdf->getY() + 3);
+ $this->pdf->setX($X);
+
+ // dodamo se neveljavne
+ $value_sum_nonvalid = 0;
+ for ($key = 2; $key >= 0; $key--) {
+ $value = $this->ss->userRedirections["$key"];
+ if ($value > 0) {
+ $this->pdf->Cell(20, 0, $this->encodeText($lang['srv_userstatus_'.$key]), 0, 0, 'L', 0);
+
+ $width = ($maxValue && $value) ? (round($value / $maxValue * 60, 0)) : 0.1;
+ $width = ($width == 0) ? 0.1 : $width;
+ $this->pdf->Cell($width, 0, $this->encodeText(''), 1, 0, 'L', 1);
+
+ $this->pdf->Cell(10, 0, $this->encodeText($value), 0, 1, 'L', 0);
+
+ $this->pdf->setY($this->pdf->getY() + 1);
+ $this->pdf->setX($X);
+ $value_sum_nonvalid += $value;
+ }
+ }
+ // dodamo sumo
+ if ($value_sum_nonvalid > 0 ) {
+ $this->pdf->Cell(20, 0, $this->encodeText($lang['srv_statistic_redirection_sum_nonvalid']), 0, 0, 'L', 0);
+ $this->pdf->Cell(70, 0, $this->encodeText($value_sum_nonvalid), 0, 1, 'L', 0);
+
+ $this->pdf->setY($this->pdf->getY() + 3);
+ $this->pdf->setX($X);
+ }
+ if (!($value_sum_nonvalid == 0 || $value_sum == 0 )) {
+ $this->pdf->Cell(20, 0, $this->encodeText($lang['srv_statistic_redirection_sum']), 0, 0, 'L', 0);
+ $this->pdf->Cell(70, 0, $this->encodeText($value_sum+$value_sum_nonvalid), 0, 1, 'L', 0);
+
+ $this->pdf->setY($this->pdf->getY() + 3);
+ $this->pdf->setX($X);
+ }
+ }
+ else {
+ $this->pdf->Cell(90, 0, $this->encodeText($lang['srv_statistic_show_no_referals']), 0, 1, 'L', 0);
+ $this->pdf->setX($X);
+ }
+
+
+ $this->pdf->setFont('','B','6');
+ $this->pdf->Cell(90, 0, $this->encodeText($lang['srv_count_ip_list'].': '.count($this->ss->ip_list)), 0, 1, 'L', 0);
+ $this->pdf->setX($X);
+
+ $this->pdf->setFont('','','6');
+ if ($admin_type==0 && count($this->ss->ip_list) > 0) {
+
+ $this->pdf->Cell(90, 0, $this->encodeText($lang['srv_detail_ip_list']), 0, 1, 'L', 0);
+ $this->pdf->setX($X);
+
+ foreach($this->ss->ip_list AS $key => $val) {
+ $this->pdf->Cell(20, 0, $this->encodeText($val), 0, 0, 'L', 0);
+ $this->pdf->Cell(70, 0, $this->encodeText($key), 0, 1, 'L', 0);
+ $this->pdf->setX($X);
+ }
+ }
+ }
+
+ /** Funkcija prikaze statistike
+ *
+ */
+ function DisplayDateView() {
+ global $lang;
+
+ $height = 80;
+ $X = 105;
+ $Y = $height+30;
+
+ $this->pdf->setXY($X, $Y);
+
+ //izrisemo okvir
+ $this->pdf->setFont('','B','8');
+ $this->pdf->SetTextColor(180, 0, 0);
+ $this->pdf->MultiCell(90, $height, $this->encodeText($lang['srv_statistic_timeline_title']), 1, 'L', 0, 0, 0 ,0, true);
+
+ $this->pdf->setXY($X, $Y+8);
+ $this->pdf->setFont('','','6');
+ $this->pdf->SetTextColor(0, 0, 0);
+
+ $this->ss->maxValue *= GRAPH_REDUCE;
+ $cnt=0;
+
+ if ($this->ss->arrayRange) {
+ $lineCount = 0;
+ foreach ($this->ss->arrayRange as $key => $value) {
+
+ // zaenkrat je max stevilo vrstic 19 - drugace prebije na drugo stran
+ if($lineCount == 19){
+ $this->pdf->Cell(90, 0, ' ...', 0, 1, 'L', 0);
+ $this->pdf->setY($this->pdf->getY() + 1);
+ $this->pdf->setX($X);
+ break;
+ }
+
+ $label = $this->ss->formatStatsString($key, $this->ss->period);
+
+ $this->pdf->Cell(20, 0, $this->encodeText($label), 0, 0, 'L', 0);
+
+ $width = ($this->ss->maxValue && $value) ? (round($value / $this->ss->maxValue * 60, 0)) : 0.1;
+ $width = ($width == 0) ? 0.1 : $width;
+ $this->pdf->Cell($width, 0, $this->encodeText(''), 1, 0, 'L', 1);
+
+ $this->pdf->Cell(10, 0, $this->encodeText($value), 0, 1, 'L', 0);
+
+ $this->pdf->setY($this->pdf->getY() + 1);
+ $this->pdf->setX($X);
+ $cnt+=$value;
+
+ $lineCount++;
+ }
+
+ // dodamo sumo
+ $this->pdf->setFont('','B','6');
+ $this->pdf->Cell(20, 0, $this->encodeText($lang['srv_statistic_redirection_sum'].':'), 'T', 0, 'L', 0);
+ $this->pdf->Cell(70, 0, $this->encodeText($cnt), 'T', 1, 'L', 0);
+ $this->pdf->setFont('','','6');
+ }
+ else {
+ $this->pdf->Cell(90, 0, $this->encodeText($lang['srv_no_data']), 0, 1, 'L', 0);
+ }
+ }
+
+ /** Funkcija za prikaz klikov po straneh
+ *
+ */
+ function DisplayPagesStateView() {
+ global $lang;
+
+ $height = 80;
+ $X = 200;
+ $Y = $height+30;
+
+ $this->pdf->setXY($X, $Y);
+
+ //izrisemo okvir
+ $this->pdf->setFont('','B','8');
+ $this->pdf->SetTextColor(180, 0, 0);
+ $this->pdf->MultiCell(90, $height, $this->encodeText($lang['srv_statistic_pages_state_title']), 1, 'L', 0, 0, 0 ,0, true);
+
+ $this->pdf->setXY($X, $Y+8);
+ $this->pdf->setFont('','','6');
+ $this->pdf->SetTextColor(0, 0, 0);
+
+ //ali lovimo samo strani ki niso bile preskoÄene
+ $grupa_jump = "AND ug.preskocena = 0 ";
+
+ $sql = "SELECT g.id, g.naslov, COUNT(ug.usr_id) cnt FROM srv_grupa g".
+ " LEFT JOIN (SELECT * FROM srv_user_grupa".$this->ss->db_table." ug WHERE".
+ " ug.time_edit BETWEEN '".$this->ss->startDate."' AND '".$this->ss->endDate."' + INTERVAL 1 DAY ".$grupa_jump.") as ug ON g.id = ug.gru_id".
+ " WHERE g.ank_id = '".$this->ss->getSurveyId()."' GROUP BY g.id ORDER BY g.vrstni_red";
+
+ $qry = sisplet_query($sql);
+ $pages=array();
+ $maxValue = 0;
+ while ($row = mysqli_fetch_assoc($qry)) {
+ $pages[$row['id']] = array('naslov'=>$row['naslov'],'cnt'=>$row['cnt']);
+ $maxValue = max($maxValue, $row['cnt']);
+ }
+
+ $maxValue = max($maxValue, $this->ss->realUsersByStatus['3ll']['cnt']);
+ $maxValue = $maxValue * GRAPH_REDUCE;
+
+
+ $this->pdf->Cell(20, 0, $this->encodeText($lang['srv_statistic_answer_state_status']), 0, 0, 'L', 0);
+ $this->pdf->Cell(70, 0, $this->encodeText($lang['srv_statistic_redirection_click']), 0, 1, 'R', 0);
+ $this->pdf->setX($X);
+
+ $this->pdf->Cell(90, 3, $this->encodeText(''), 'T', 1, 'L', 0);
+ $this->pdf->setX($X);
+
+ # status 3 - "Klik na anketo"
+ $value = $this->ss->realUsersByStatus['3ll']['cnt'];
+ $this->pdf->Cell(20, 0, $this->encodeText($lang['srv_userstatus_3']), 0, 0, 'L', 0);
+
+ $width = ($maxValue && $value) ? (round($value / $maxValue * 60, 0)) : 0.1;
+ $width = ($width == 0) ? 0.1 : $width;
+ $this->pdf->Cell($width, 0, $this->encodeText(''), 1, 0, 'L', 1);
+
+ $this->pdf->Cell(10, 0, $this->encodeText($value), 0, 1, 'L', 0);
+
+ $this->pdf->setY($this->pdf->getY() + 1);
+ $this->pdf->setX($X);
+
+ # status 4 - "Klik na prvo stran"
+ $value = $this->ss->realUsersByStatus['4ll']['cnt'];
+ $this->pdf->Cell(20, 0, $this->encodeText($lang['srv_userstatus_4']), 0, 0, 'L', 0);
+
+ $width = ($maxValue && $value) ? (round($value / $maxValue * 60, 0)) : 0.1;
+ $width = ($width == 0) ? 0.1 : $width;
+ $this->pdf->Cell($width, 0, $this->encodeText(''), 1, 0, 'L', 1);
+
+ $this->pdf->Cell(10, 0, $this->encodeText($value), 0, 1, 'L', 0);
+
+ $this->pdf->setY($this->pdf->getY() + 1);
+ $this->pdf->setX($X);
+
+ # status 5 - "Za&#269;el izpolnjevati",
+ $value = $this->ss->realUsersByStatus[5]['cnt'];
+ $this->pdf->Cell(20, 0, $this->encodeText($lang['srv_userstatus_5']), 0, 0, 'L', 0);
+
+ $width = ($maxValue && $value) ? (round($value / $maxValue * 60, 0)) : 0.1;
+ $width = ($width == 0) ? 0.1 : $width;
+ $this->pdf->Cell($width, 0, $this->encodeText(''), 1, 0, 'L', 1);
+
+ $this->pdf->Cell(10, 0, $this->encodeText($value), 0, 1, 'L', 0);
+
+ $this->pdf->setY($this->pdf->getY() + 1);
+ $this->pdf->setX($X);
+
+ #strani
+ $this->pdf->Cell(90, 3, $this->encodeText(''), 'T', 1, 'L', 0);
+ $this->pdf->setX($X);
+
+ $lineCount = 0;
+ foreach ($pages as $key => $page) {
+
+ // zaenkrat je max vrstic 9 - drugace prebije na drugo stran
+ if($lineCount == 9){
+ $this->pdf->Cell(90, 0, ' ...', 0, 1, 'L', 0);
+ $this->pdf->setY($this->pdf->getY() + 1);
+ $this->pdf->setX($X);
+ break;
+ }
+
+ $value = $page['cnt'];
+ $this->pdf->Cell(20, 0, $this->encodeText($page['naslov']), 0, 0, 'L', 0);
+
+ $width = ($maxValue && $value) ? (round($value / $maxValue * 60, 0)) : 0.1;
+ $width = ($width == 0) ? 0.1 : $width;
+ $this->pdf->Cell($width, 0, $this->encodeText(''), 1, 0, 'L', 1);
+
+ $this->pdf->Cell(10, 0, $this->encodeText($value), 0, 1, 'L', 0);
+
+ $this->pdf->setY($this->pdf->getY() + 1);
+ $this->pdf->setX($X);
+
+ $lineCount++;
+ }
+
+ #strani
+ $this->pdf->Cell(90, 3, $this->encodeText(''), 'T', 1, 'L', 0);
+ $this->pdf->setX($X);
+
+
+ # status 6 - "Koncal",
+ $value6 = $this->ss->realUsersByStatus[6]['cnt'];
+ $this->pdf->Cell(20, 0, $this->encodeText($lang['srv_userstatus_6']), 0, 0, 'L', 0);
+
+ $width = ($maxValue && $value6) ? (round($value6 / $maxValue * 60, 0)) : 0.1;
+ $width = ($width == 0) ? 0.1 : $width;
+ $this->pdf->Cell($width, 0, $this->encodeText(''), 1, 0, 'L', 1);
+
+ $this->pdf->Cell(10, 0, $this->encodeText($value6), 0, 1, 'L', 0);
+
+ $this->pdf->setY($this->pdf->getY() + 1);
+ $this->pdf->setX($X);
+
+ #Äe imamo lurkerje 6l dodamo skupaj konaÄal anketo (to je 6 + 6l) in nato Å¡e koliko jih je samo s statusom 6 (konÄal anketo)
+ # status 6l - "Koncal - lurker", izpiÅ¡emo samo Äe obstajajo 6l
+ $lurkerjev = $this->ss->realUsersByStatus['6ll']['cnt'] - $value6;
+ if ($lurkerjev > 0) {
+ $valueall = $this->ss->realUsersByStatus['6ll']['cnt'] ;
+
+ # konÄal s tem da je lurker (6l)
+ $this->pdf->Cell(20, 0, $this->encodeText($lang['srv_userstatus_6l']), 0, 0, 'L', 0);
+
+ $width = ($maxValue && $lurkerjev) ? (round($lurkerjev / $maxValue * 60, 0)) : 0.1;
+ $width = ($width == 0) ? 0.1 : $width;
+ $this->pdf->Cell($width, 0, $this->encodeText(''), 1, 0, 'L', 1);
+
+ $this->pdf->Cell(10, 0, $this->encodeText($lurkerjev), 0, 1, 'L', 0);
+
+ $this->pdf->setY($this->pdf->getY() + 1);
+ $this->pdf->setX($X);
+
+ #Ärta
+ $this->pdf->Cell(90, 3, $this->encodeText(''), 'T', 1, 'L', 0);
+ $this->pdf->setX($X);
+
+ # konÄal ne glede na to ali je lurker
+ $this->pdf->Cell(20, 0, $this->encodeText($lang['srv_userstatus_all']), 0, 0, 'L', 0);
+
+ $width = ($maxValue && $valueall) ? (round($valueall / $maxValue * 60, 0)) : 0.1;
+ $width = ($width == 0) ? 0.1 : $width;
+ $this->pdf->Cell($width, 0, $this->encodeText(''), 1, 0, 'L', 1);
+ $this->pdf->Cell(10, 0, $this->encodeText($valueall), 0, 1, 'L', 0);
+ }
+ }
+
+
+ /*Skrajsa tekst in doda '...' na koncu*/
+ function snippet($text,$length=64,$tail="...")
+ {
+ $text = trim($text);
+ $txtl = strlen($text);
+ if($txtl > $length)
+ {
+ for($i=1;$text[$length-$i]!=" ";$i++)
+ {
+ if($i == $length)
+ {
+ return substr($text,0,$length) . $tail;
+ }
+ }
+ $text = substr($text,0,$length-$i+1) . $tail;
+ }
+ return $text;
+ }
+
+ function drawLine()
+ {
+ $cy = $this->pdf->getY();
+ $this->pdf->Line(15, $cy , 195, $cy , $this->currentStyle);
+ }
+
+ function setUserId($usrId) {$this->anketa['uid'] = $usrId;}
+ function getUserId() {return ($this->anketa['uid'])?$this->anketa['uid']:false;}
+
+ function formatNumber($value,$digit=0,$sufix="")
+ {
+ if ( $value <> 0 && $value != null )
+ $result = round($value,$digit);
+ else
+ $result = "0";
+ $result = number_format($result, $digit, ',', '.').$sufix;
+
+ return $result;
+ }
+}
+
+?> \ No newline at end of file
diff --git a/admin/exportclases/class.pptIzvozAnalizaCharts.php b/admin/exportclases/class.pptIzvozAnalizaCharts.php
new file mode 100644
index 0000000..de395d3
--- /dev/null
+++ b/admin/exportclases/class.pptIzvozAnalizaCharts.php
@@ -0,0 +1,1060 @@
+<?php
+
+ global $site_path;
+
+ include_once('../../function.php');
+ include_once('../survey/definition.php');
+ include_once('../exportclases/class.pdfIzvozAnalizaSums.php');
+ include_once('../exportclases/class.pdfIzvozAnalizaFrekvenca.php');
+ require_once('../exportclases/class.enka.pdf.php');
+
+ /** Include path **/
+ set_include_path('../exportclases/');
+
+ /** PHPPowerPoint */
+ include '../exportclases/PHPPowerPoint.php';
+
+ /** PHPPowerPoint_IOFactory */
+ include '../exportclases/PHPPowerPoint/IOFactory.php';
+
+ define("ALLOW_HIDE_ZERRO_REGULAR", false); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za navadne odgovore
+ define("ALLOW_HIDE_ZERRO_MISSING", true); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za missinge
+
+ define("NUM_DIGIT_AVERAGE", 2, true); // stevilo digitalnih mest za povprecje
+ define("NUM_DIGIT_DEVIATION", 2, true); // stevilo digitalnih mest za povprecje
+
+ define("M_ANALIZA_DESCRIPTOR", "descriptor", true);
+ define("M_ANALIZA_FREQUENCY", "frequency", true);
+
+
+/**
+ * @desc Class za generacijo ppt-ja
+ */
+class PptIzvozAnalizaCharts {
+
+ var $anketa; // trenutna anketa
+ var $spremenljivka; // trenutna spremenljivka
+
+ var $headFileName = null; // pot do header fajla
+ var $dataFileName = null; // pot do data fajla
+ var $dataFileStatus = null; // status data datoteke
+
+ var $ppt;
+ var $currentStyle;
+
+ var $skin;
+ var $numbering;
+ var $frontpage;
+
+ var $sessionData; // podatki ki so bili prej v sessionu - za nastavitve, ki se prenasajo v izvoze...
+
+ var $current_loop = 'undefined';
+
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null, $sprID = null, $loop = null)
+ {
+ global $site_path;
+ global $global_user_id;
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) ){
+
+ $this->anketa = $anketa;
+ $this->spremenljivka = $sprID;
+
+ SurveyAnalysis::Init($this->anketa);
+ SurveyAnalysis::$setUpJSAnaliza = false;
+
+ SurveyChart::Init($this->anketa);
+
+ // create new PPT document
+ $this->ppt = new PHPPowerPoint();
+
+ // Poskrbimo za datoteko s podatki
+ $SDF = SurveyDataFile::get_instance();
+ $SDF->init($this->anketa);
+ $SDF->prepareFiles();
+
+ $this->headFileName = $SDF->getHeaderFileName();
+ $this->dataFileName = $SDF->getDataFileName();
+ $this->dataFileStatus = $SDF->getStatus();
+
+ SurveyZankaProfiles :: Init($this->anketa, $global_user_id);
+ $this->current_loop = ($loop != null) ? $loop : $this->current_loop;
+
+ // preberemo nastavitve iz baze (prej v sessionu)
+ SurveyUserSession::Init($this->anketa);
+ $this->sessionData = SurveyUserSession::getData('charts');
+ }
+ else{
+ return false;
+ }
+
+ if ( SurveyInfo::getInstance()->SurveyInit($this->anketa) ){
+ SurveyUserSetting::getInstance()->Init($this->anketa, $global_user_id);
+
+ $this->skin = SurveyUserSetting :: getInstance()->getSettings('default_chart_profile_skin');
+ $this->numbering = SurveyDataSettingProfiles :: getSetting('chartNumbering');
+ $this->frontpage = SurveyDataSettingProfiles :: getSetting('chartFP');
+ }
+ else
+ return false;
+
+ return true;
+ }
+
+ function getFile($fileName)
+ {
+ //Close and output PDF document
+ ob_end_clean();
+
+ $objWriter = PHPPowerPoint_IOFactory::createWriter($this->ppt, 'PowerPoint2007');
+
+ header("Pragma: no-cache");
+ header("Expires: 0");
+ header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
+ header("Content-Type: application/force-download");
+ header("Content-Type: application/octet-stream");
+ header("Content-Type: application/download");;
+ header("Content-Disposition: attachment;filename=".$fileName);
+ ob_clean();
+ flush();
+
+ $objWriter->save('php://output');
+
+ //readfile(str_replace('.php', '.pptx', __FILE__));
+
+ exit;
+ }
+
+ function encodeText($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace(array("&scaron;","&#353;","&#269;"),array("�","�","�"),$text);
+ return strip_tags($text);
+ }
+
+ function createPpt(){
+ global $site_path;
+ global $lang;
+
+ $this->ppt->getProperties()->setCreator("1ka");
+ $this->ppt->getProperties()->setLastModifiedBy("1ka");
+ $this->ppt->getProperties()->setTitle("PPT Izvoz");
+ $this->ppt->getProperties()->setSubject("PPT Izvoz");
+ $this->ppt->getProperties()->setDescription("PPT Izvoz grafov");
+ $this->ppt->getProperties()->setKeywords("office 2007 openxml php");
+ $this->ppt->getProperties()->setCategory("PPT Izvoz grafov");
+
+ $this->ppt->removeSlideByIndex(0);
+
+
+ // izpisemo prvo stran
+ if($this->frontpage == 1){
+ $this->createFrontPage();
+ }
+
+
+ # preberemo header
+ if ($this->headFileName !== null) {
+ //polovimo podatke o nastavitvah trenutnega profila (missingi..)
+ SurveyAnalysis::$missingProfileData = SurveyMissingProfiles::getProfile(SurveyAnalysis::$currentMissingProfile);
+
+ // Preverimo ce imamo zanke (po skupinah)
+ SurveyAnalysis::$_LOOPS = SurveyZankaProfiles::getFiltersForLoops();
+
+ # Äe nimamo zank
+ if(count(SurveyAnalysis::$_LOOPS) == 0){
+
+ $this->displayCharts();
+ }
+ else{
+ // izrisemo samo eno tabelo iz enega loopa
+ if($this->current_loop > 0){
+
+ $loop = SurveyAnalysis::$_LOOPS[(int)$this->current_loop-1];
+ $loop['cnt'] = $this->current_loop;
+ SurveyAnalysis::$_CURRENT_LOOP = $loop;
+
+ $this->displayCharts();
+ }
+ // Izrisemo vse tabele spremenljivka (iz vseh loopov)
+ else{
+ $loop_cnt = 0;
+ # Äe mamo zanke
+ foreach(SurveyAnalysis::$_LOOPS AS $loop) {
+ $loop_cnt++;
+ $loop['cnt'] = $loop_cnt;
+ SurveyAnalysis::$_CURRENT_LOOP = $loop;
+
+ // Izpisemo naslov zanke za skupino
+ /*$currentSlide = $this->ppt->createSlide();
+ $shape = $currentSlide->createRichTextShape();
+ $shape->setHeight(30);
+ $shape->setWidth(600);
+ $shape->setOffsetX(20);
+ $shape->setOffsetY(90);
+ //$shape->getAlignment()->setHorizontal( PHPPowerPoint_Style_Alignment::HORIZONTAL_CENTER );
+ $textRun = $shape->createTextRun($lang['srv_zanka_note'].$loop['text']);
+ $textRun->getFont()->setBold(true);
+ $textRun->getFont()->setSize(12);
+ $textRun->getFont()->setColor( new PHPPowerPoint_Style_Color( 'FF000000' ) );*/
+
+ $this->displayCharts();
+ }
+ }
+ }
+
+ } // end if else ($_headFileName == null)
+
+ }
+
+ function displayCharts(){
+ global $site_path;
+ global $lang;
+
+ #preberemo HEADERS iz datoteke
+ SurveyAnalysis::$_HEADERS = unserialize(file_get_contents($this->headFileName));
+
+ # polovimo frekvence
+ SurveyAnalysis::getFrequencys();
+ $vars_count = count(SurveyAnalysis::$_FILTRED_VARIABLES);
+
+ #odstranimo sistemske variable
+ SurveyAnalysis::removeSystemVariables();
+
+
+ foreach (SurveyAnalysis::$_HEADERS AS $spid => $spremenljivka) {
+ # preverjamo ali je meta
+ if (($spremenljivka['tip'] != 'm'
+ && in_array($spremenljivka['tip'], SurveyAnalysis::$_FILTRED_TYPES ))
+ && (!isset($_spid) || (isset($_spid) && $_spid == $spid))
+ && ($this->spremenljivka == $spid || $this->spremenljivka == null) ) {
+ # ali imamo sfiltrirano spremenljivko
+ if ($vars_count == 0 || ($vars_count > 0 && isset(SurveyAnalysis::$_FILTRED_VARIABLES[$spid]) ) ) {
+
+ // Ce imamo radio tip in manj kot 5 variabel po defaultu prikazemo piechart
+ $vars = count($spremenljivka['options']);
+ $type = 0;
+ if( ($spremenljivka['tip'] == 1 || $spremenljivka['tip'] == 3) && $vars < 5 )
+ $type = 2;
+
+ //ce imamo nominalno spremenljivko ali ce je samo 1 variabla nimamo povprecij
+ if($spremenljivka['tip'] == 6 && ($spremenljivka['cnt_all'] == 1 || $spremenljivka['skala'] == 1) && $type == 0 )
+ $type = 2;
+
+ /*if($spremenljivka['tip'] == 4 || $spremenljivka['tip'] == 19 || $spremenljivka['tip'] == 21 || $spremenljivka['tip'] == 22){
+ // ce imamo vklopljeno nastavitev prikaz tabel med grafi (default)
+ if($spremenljivka['tip'] == 19)
+ self::sumMultiText($spid, 'sums');
+ else
+ self::frequencyVertical($spid);
+ }*/
+ if( in_array($spremenljivka['tip'],array(1,2,3,6,7,8,16,17,18,20)) ){
+ // Prikazemo posamezen graf
+ $this->displayChart($spid, $type);
+ }
+ }
+
+ } // end if $spremenljivka['tip'] != 'm'
+
+ } // end foreach self::$_HEADERS
+ }
+
+ // Vstavimo graf
+ function displayChart($spid, $type=0, $sort=0, $value_type=0){
+ global $site_path;
+ global $lang;
+
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ // ce ga imamo v sessionu ga preberemo
+ if(isset($this->sessionData[$spid])){
+
+ // Napolnimo podatke za graf - rabimo za cache
+ if(count(SurveyAnalysis::$_LOOPS) == 0)
+ $settings =$this->sessionData[$spid];
+ else
+ $settings = $this->sessionData[$spid][SurveyAnalysis::$_CURRENT_LOOP['cnt']];
+
+ $DataSet = SurveyChart::getDataSet($spid, $settings);
+
+ // nimamo nobenih podatkov in imamo vklopljeno opcijo da ne prikazujemo praznih grafov - vrnemo 0
+ if($DataSet == 0){
+ self::displayEmptyWarning($spid);
+ return;
+ }
+
+ // preberemo ime slike iz sessiona
+ $imgName = $settings['name'];
+ }
+ // ce ga nimamo v sessionu
+ else{
+ // Napolnimo podatke za graf - rabimo za cache
+ $settings = SurveyChart::getDefaultSettings();
+
+ $DataSet = SurveyChart::getDataSet($spid, $settings);
+
+ // nimamo nobenih podatkov in imamo vklopljeno opcijo da ne prikazujemo praznih grafov - vrnemo 0
+ if($DataSet == 0){
+ self::displayEmptyWarning($spid);
+ return;
+ }
+
+ $ID = self::generateChartId($spid, $settings, $DataSet->GetNumerus());
+
+ $Cache = new pCache('pChart/Cache/');
+ $Cache = new pCache('../survey/pChart/Cache/');
+ $imgName = $Cache->GetHash($ID,$DataSet->GetData());
+ }
+
+
+ $stevilcenje = ($this->numbering == 1 ? $spremenljivka['variable'].' - ' : '');
+ $title = $stevilcenje . $spremenljivka['naslov'];
+
+ if(SurveyDataSettingProfiles :: getSetting('chartNumerusText') == 0){
+ $title .= ' (n = '.$DataSet->GetNumerus().')';
+ }
+
+ // IZRIS GRAFA
+ $currentSlide = $this->ppt->createSlide();
+
+ // slika
+ $shape = $currentSlide->createDrawingShape();
+ $shape->setName('Chart');
+ $shape->setDescription($title);
+ $shape->setPath('../survey/pChart/Cache/'.$imgName);
+ $shape->setWidth(800);
+ //$shape->setHeight(400);
+ $shape->setOffsetX(75);
+ $shape->setOffsetY(130);
+
+ // naslov
+ $shape = $currentSlide->createRichTextShape();
+ $shape->setHeight(80);
+ $shape->setWidth(600);
+ $shape->setOffsetX(170);
+ $shape->setOffsetY(40);
+ $shape->getAlignment()->setHorizontal( PHPPowerPoint_Style_Alignment::HORIZONTAL_CENTER );
+ $textRun = $shape->createTextRun($title);
+ $textRun->getFont()->setBold(true);
+ $textRun->getFont()->setSize(16);
+ $textRun->getFont()->setColor( new PHPPowerPoint_Style_Color( 'FF000000' ) );
+
+ if($spremenljivka['tip'] == 2){
+ $shape = $currentSlide->createRichTextShape();
+ $shape->setHeight(30);
+ $shape->setWidth(600);
+ $shape->setOffsetX(170);
+ $shape->setOffsetY(90);
+ $shape->getAlignment()->setHorizontal( PHPPowerPoint_Style_Alignment::HORIZONTAL_CENTER );
+ $textRun = $shape->createTextRun($lang['srv_info_checkbox']);
+ $textRun->getFont()->setBold(false);
+ $textRun->getFont()->setSize(12);
+ $textRun->getFont()->setColor( new PHPPowerPoint_Style_Color( 'FF000000' ) );
+ }
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ /*$_answersOther = $DataSet->GetOther();
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ self::outputOtherAnswers($oAnswers);
+ }
+ }*/
+ }
+
+
+ // dodamo prvo stran
+ function createFrontPage(){
+ global $lang;
+
+ $currentSlide = $this->ppt->createSlide();
+
+ $shape = $currentSlide->createRichTextShape();
+
+ $shape->setWidth(600);
+ $shape->setOffsetX(170);
+ $shape->setOffsetY(200);
+ $shape->getAlignment()->setHorizontal( PHPPowerPoint_Style_Alignment::HORIZONTAL_CENTER );
+ $textRun = $shape->createTextRun(SurveyInfo::getInstance()->getSurveyTitle());
+ $textRun->getFont()->setBold(true);
+ $textRun->getFont()->setSize(38);
+ $textRun->getFont()->setColor( new PHPPowerPoint_Style_Color( 'FF000000' ) );
+
+ $shape->createBreak();
+
+ $textRun = $shape->createTextRun($lang['srv_analiza_charts']);
+ $textRun->getFont()->setBold(true);
+ $textRun->getFont()->setSize(22);
+ $textRun->getFont()->setColor( new PHPPowerPoint_Style_Color( 'FF000000' ) );
+
+ $shape->createBreak();
+ $shape->createBreak();
+
+ $textRun = $shape->createTextRun($this->getEntryDates());
+ $textRun->getFont()->setBold(false);
+ $textRun->getFont()->setSize(14);
+ $textRun->getFont()->setColor( new PHPPowerPoint_Style_Color( 'FF000000' ) );
+ }
+
+
+ function setUserId($usrId) {$this->anketa['uid'] = $usrId;}
+ function getUserId() {return ($this->anketa['uid'])?$this->anketa['uid']:false;}
+
+ // vrnemo string za prvi in zadnji vnos
+ function getEntryDates(){
+ global $lang;
+
+ $prvi_vnos_date = SurveyInfo::getSurveyFirstEntryDate();
+ $prvi_vnos_time = SurveyInfo::getSurveyFirstEntryTime();
+ $zadnji_vnos_date = SurveyInfo::getSurveyLastEntryDate();
+ $zadnji_vnos_time = SurveyInfo::getSurveyLastEntryTime();
+
+ if ($prvi_vnos_date != null) {
+ $first = $this->dateFormat($prvi_vnos_date,'j.n.y');
+ $first .= $prvi_vnos_time != null ? (SurveyInfo::$dateTimeSeperator .$this->dateFormat($prvi_vnos_time,'G:i')) : '';
+ }
+ if ($zadnji_vnos_date != null) {
+ $last = $this->dateFormat($zadnji_vnos_date,'j.n.y');
+ $last .= $zadnji_vnos_time != null ? (SurveyInfo::$dateTimeSeperator .$this->dateFormat($zadnji_vnos_time,'G:i')) : '';
+ }
+
+ $text = $lang['srv_setting_collectdata_datetime'].$first.' '.$lang['s_to'].' '.$last;
+
+ return $text;
+ }
+
+ function dateFormat($input, $format) {
+ if ($input != '..') {
+ return date($format,strtotime($input));
+ } else {
+ return '';
+ }
+ }
+
+ function formatNumber($value,$digit=0,$sufix="")
+ {
+ if ( $value <> 0 && $value != null )
+ $result = round($value,$digit);
+ else
+ $result = "0";
+ $result = number_format($result, $digit, ',', '.').$sufix;
+
+ return $result;
+ }
+
+ /** Izriše frekvence v vertikalni obliki
+ *
+ * @param unknown_type $spid
+ */
+ function frequencyVertical($spid) {
+ global $lang;
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+ # Äe je besedilo * in je samo ena kategorija je inline legenda false
+ $inline_legenda = (SurveyAnalysis::$_HEADERS[$spid]['cnt_all'] == 1 || in_array($spremenljivka['tip'],array(1,8) ) ) ? false: true;
+
+ # koliko zapisov prikažemo naenkrat
+ //$num_show_records = SurveyAnalysis::getNumRecords();
+ $chartTableMore = SurveyDataSettingProfiles :: getSetting('chartTableMore');
+ $num_show_records = ($chartTableMore == 0) ? 10 : 1000;
+
+ // ce imamo prazno in ne prikazujemo praznih tabel
+ $hideEmpty = SurveyDataSettingProfiles :: getSetting('hideEmpty');
+ if($hideEmpty == 1){
+
+ $emptyData = true;
+
+ if (count($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $_variables_count = count($grid['variables']);
+
+ if ($_variables_count > 0 )
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+
+ if(SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] > 0)
+ $emptyData = false;
+ }
+ }
+
+ if($emptyData){
+ self::displayEmptyWarning($spid);
+ return;
+ }
+ }
+
+ $this->pdf->ln(5);
+
+ $this->pdf->setFont('','b','6');
+ $stevilcenje = ($this->numbering == 1 ? $spremenljivka['variable'].' - ' : '');
+ $title = $stevilcenje . $spremenljivka['naslov'];
+ $this->pdf->MultiCell(165, 5, $title, 0, 'C', 0, 1, 0 ,0, true);
+
+ //prva vrstica
+ /*$this->pdf->setFont('','b','6');
+ $this->pdf->MultiCell(18, 5, $this->encodeText($spremenljivka['variable']), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(162, 5, $this->encodeText($spremenljivka['naslov']), 1, 'C', 0, 1, 0 ,0, true);*/
+
+ //druga vrstica
+ self::tableHeader();
+ $this->pdf->setFont('','','6');
+ // konec naslovne vrstice
+
+
+ $_answersOther = array();
+
+ # dodamo opcijo kje izrisujemo legendo
+ $options=array('inline_legenda' => $inline_legenda, 'isTextAnswer' => false, 'isOtherAnswer' => false);
+
+ # izpišemo vlejavne odgovore
+ if (count($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $_variables_count = count($grid['variables']);
+
+ # dodamo dodatne vrstice z albelami grida
+ if ($_variables_count > 0 )
+ foreach ($grid['variables'] AS $vid => $variable ){
+
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if (($variable['text'] != true && $variable['other'] != true)
+ || (in_array($spremenljivka['tip'],array(4,8,21)))){
+ # dodamo ime podvariable
+ $counter = 0;
+ $_kumulativa = 0;
+ //SurveyAnalysis::$_FREQUENCYS[$_sequence]
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'] AS $vkey => $vAnswer) {
+
+ if ($counter < $num_show_records) {
+ if ($vAnswer['cnt'] > 0 || true) { # izpisujemo samo tiste ki nisno 0
+ if (in_array($spremenljivka['tip'],array(4,7,8,19,20,21))) { // text, number, datum, mtext, mnumber, text*
+ $options['isTextAnswer'] = true;
+ # ali prikažemo vse odgovore ali pa samo toliko koliko je nastavljeno v TEXT_ANSWER_LIMIT
+ $options['textAnswerExceed'] = ($counter >= TEXT_ANSWER_LIMIT && count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']) > TEXT_ANSWER_LIMIT+2) ? true : false; # ali zaÄnemo skrivati tekstovne odgovore
+ } else {
+ $options['isTextAnswer'] = false;
+ $options['textAnswerExceed'] = false;
+ }
+ $counter = self::outputValidAnswerVertical($counter,$vkey,$vAnswer,$_sequence,$spid,$_kumulativa,$options);
+ }
+ }
+ }
+ # izpišemo sumo veljavnih
+ $counter = self::outputSumaValidAnswerVertical($counter,$_sequence,$spid,$options);
+ }
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'] AS $ikey => $iAnswer) {
+ if ($iAnswer['cnt'] > 0 ) { # izpisujemo samo tiste ki nisno 0
+ $counter = self::outputInvalidAnswerVertical($counter,$ikey,$iAnswer,$_sequence,$spid,$options);
+ }
+ }
+ # izpišemo sumo veljavnih
+ $counter = self::outputSumaInvalidAnswerVertical($counter,$_sequence,$spid,$options);
+ }
+ #izpišemo še skupno sumo
+ $counter = self::outputSumaVertical($counter,$_sequence,$spid,$options);
+ } else {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ }
+ }
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ //pdfIzvozAnalizaSums::outputOtherAnswers($oAnswers);
+ }
+ }
+
+ $this->pdf->ln(5);
+ }
+
+
+ function outputValidAnswerVertical($counter,$vkey,$vAnswer,$_sequence,$spid,&$_kumulativa,$_options=array()) {
+ global $lang;
+
+ $text = array();
+
+ # opcije
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ 'textAnswerExceed'=>false # ali presegamo Å¡tevilo tekstovnih odgovorov za prikaz
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+ //$cssBck = ' '.SurveyAnalysis::$cssColors['0_' . ($counter & 1)];
+ $fill = ($counter % 2 == 1) ? 1 : 0;
+
+ $_valid = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] > 0 ) ? 100*$vAnswer['cnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] : 0;
+ $_percent = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] > 0 ) ? 100*$vAnswer['cnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] : 0;
+ $_kumulativa += $_valid;
+
+ # ali presegamo Å¡tevilo prikazanih vrstic, takrat v zadnji prikazani dodamo link veÄ.. ostale vrstice pa skrijemo
+ if ($options['textAnswerExceed'] == true) {
+ if ($counter == TEXT_ANSWER_LIMIT ) {
+ # link za veÄ
+ $show_more = '<div id="valid_row_togle_'.$_sequence.'" class="floatRight blue pointer" onclick="showHidenTextRow(\''.$_sequence.'\');return false;">(veÄ...)</div>'.NEW_LINE;
+ } elseif ($counter > TEXT_ANSWER_LIMIT ) {
+ $hide_row = ' hidden';
+ $_exceed = true;
+ }
+ }
+
+ //if ($counter < TEXT_MAX_ANSWER_LIMIT) {
+ $text[] = '';
+
+ $addText = (($options['isTextAnswer'] == false && (string)$vkey != $vAnswer['text']) ? ' ('.$vAnswer['text'] .')' : '');
+ $text[] = $this->encodeText(' '.$vkey.$addText);
+
+ $text[] = (int)$vAnswer['cnt'];
+
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($_percent, NUM_DIGIT_PERCENT, '%'));
+
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($_valid, NUM_DIGIT_PERCENT, '%'));
+
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($_kumulativa, NUM_DIGIT_PERCENT, '%'));
+
+ /*} elseif ($counter == TEXT_MAX_ANSWER_LIMIT ) {
+ echo '<tr id="'.$spid.'_'.$_sequence.'_'.$counter.'" name="valid_row_'.$_sequence.'">';
+ echo '<td class="anl_bl anl_ac anl_br gray anl_dash_bt anl_dash_bb" colspan="'.(6+(int)SurveyAnalysis::$_HEADERS[$spid]['show_valid_percent']+((int)SurveyAnalysis::$_SHOW_LEGENDA*2)).'"> . . . Prikazujemo samo prvih '.TEXT_MAX_ANSWER_LIMIT.' veljavnih odgovorov!</td>';
+ echo '</tr>';
+ }*/
+
+ $arrayParams = array('fill' => $fill, 'align2' => 'C');
+
+ self::tableRow($text, $arrayParams);
+
+ $counter++;
+ return $counter;
+ }
+
+ function outputSumaValidAnswerVertical($counter,$_sequence,$spid,$_options=array()) {
+ global $lang;
+
+ $text = array();
+
+ # opcije
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ 'textAnswerExceed'=>false # ali presegamo Å¡tevilo tekstovnih odgovorov za prikaz
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+
+ $_percent = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] > 0 ) ? 100*SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] : 0;
+
+ $_brez_MV = ((int)SurveyAnalysis::$currentMissingProfile == 2) ? TRUE : FALSE;
+
+ $_sufix = '';
+
+ $text[] = $this->encodeText($lang['srv_anl_valid']);
+ $text[] = $this->encodeText($lang['srv_anl_suma1']);
+
+ $text[] = $this->encodeText(SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] > 0 ? SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] : 0);
+
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($_percent, NUM_DIGIT_PERCENT, '%'));
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber(100, NUM_DIGIT_PERCENT, '%'));
+
+ $text[] = '';
+
+
+ self::tableRow($text);
+
+ $counter++;
+ return $counter;
+ }
+
+ function outputInvalidAnswerVertical($counter,$vkey,$vAnswer,$_sequence,$spid,$_options=array()) {
+ global $lang;
+
+ $text = array();
+
+ # opcije
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ 'textAnswerExceed'=>false # ali presegamo Å¡tevilo tekstovnih odgovorov za prikaz
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+
+ $_percent = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] > 0 ) ? 100*$vAnswer['cnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] : 0;
+ $_invalid = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'] > 0 ) ? 100*$vAnswer['cnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'] : 0;
+
+ $_sufix = '';
+
+ $_Z_MV = ((int)SurveyAnalysis::$missingProfileData['display_mv_type'] === 2) ? TRUE : FALSE;
+ if($_Z_MV){
+ $text[] = '';
+
+ $text[] = $this->encodeText($vkey.' (' . $vAnswer['text'].')');
+ //echo '<div class="floatRight anl_detail_percent anl_w50 anl_ac anl_dash_bl">'.SurveyAnalysis::formatNumber($_invalid, NUM_DIGIT_PERCENT, '%').'</div>'.NEW_LINE;
+ //echo '<div class="floatRight anl_detail_percent anl_w30 anl_ac">'.$vAnswer['cnt'].'</div>'.NEW_LINE;
+
+ $text[] = $this->encodeText((int)$vAnswer['cnt']);
+
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($_percent, NUM_DIGIT_PERCENT, '%'));
+
+ $text[] = '';
+ $text[] = '';
+
+ $arrayParams = array('align2' => 'C');
+
+ $this->tableRow($text);
+ }
+
+ $counter++;
+ return $counter;
+ }
+
+ function outputSumaInvalidAnswerVertical($counter,$_sequence,$spid,$_options = array()) {
+ global $lang;
+
+ # opcije
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ 'textAnswerExceed'=>false # ali presegamo Å¡tevilo tekstovnih odgovorov za prikaz
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+ $cssBck = ' '.SurveyAnalysis::$cssColors['text_' . ($counter & 1)];
+ $_percent = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] > 0 ) ? 100*SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] : 0;
+
+ $_brez_MV = ((int)SurveyAnalysis::$missingProfileData['display_mv_type'] === 0) ? TRUE : FALSE;
+ if(!$_brez_MV){
+ $text = array();
+
+ $text[] = $this->encodeText($lang['srv_anl_missing']);
+
+ $text[] = $this->encodeText(SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt']);
+
+ $answer['cnt'] = SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'] > 0 ? SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'] : 0;
+ $text[] = $this->encodeText((int)$answer['cnt']);
+
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($_percent, NUM_DIGIT_PERCENT, '%'));
+ $text[] = '';
+ $text[] = '';
+
+ $this->tableRow($text);
+ }
+
+ $counter++;
+ return $counter;
+ }
+
+ function outputSumaVertical($counter,$_sequence,$spid, $_options = array()) {
+ global $lang;
+
+ # opcije
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ 'textAnswerExceed'=>false # ali presegamo Å¡tevilo tekstovnih odgovorov za prikaz
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+
+ $cssBck = ' '.SurveyAnalysis::$cssColors['0_' .($counter & 1)];
+
+ $_brez_MV = ((int)SurveyAnalysis::$missingProfileData['display_mv_type'] === 0) ? TRUE : FALSE;
+ if(!$_brez_MV){
+
+ $text = array();
+
+ $text[] = '';
+ $text[] = $this->encodeText($lang['srv_anl_suma2']);
+ $text[] = $this->encodeText((SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] ? SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] : 0));
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber('100', NUM_DIGIT_PERCENT, '%'));
+ $text[] = '';
+ $text[] = '';
+
+ $this->tableRow($text);
+ }
+ }
+
+ /** izpišemo tabelo z tekstovnimi odgovori drugo
+ *
+ * @param $skey
+ * @param $oAnswers
+ * @param $spid
+ */
+ function outputOtherAnswers($oAnswers) {
+ global $lang;
+ $spid = $oAnswers['spid'];
+ $_variable = SurveyAnalysis::$_HEADERS[$spid]['grids'][$oAnswers['gid']]['variables'][$oAnswers['vid']];
+ $_sequence = $_variable['sequence'];
+ $_frekvence = SurveyAnalysis::$_FREQUENCYS[$_variable['sequence']];
+
+
+ // Naslov posameznega grafa
+ $stevilcenje = ($this->numbering == 1 ? $_variable['variable'].' - ' : '');
+ $title = $stevilcenje . SurveyAnalysis::$_HEADERS[$oAnswers['spid']]['variable'].' ('.$_variable['naslov'].' )';
+ $this->pdf->setFont('','b','6');
+ $this->pdf->MultiCell(165, 5, $title, 0, 'C', 0, 1, 0 ,0, true);
+ $this->pdf->setFont('','','6');
+
+ $counter = 0;
+ $_kumulativa = 0;
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'] AS $vkey => $vAnswer) {
+ if ($vAnswer['cnt'] > 0 ) { # izpisujemo samo tiste ki nisno 0
+ $counter = self::outputValidAnswerVertical($counter,$vkey,$vAnswer,$_sequence,$spid,$_kumulativa,array('isOtherAnswer'=>true));
+ }
+ }
+ # izpišemo sumo veljavnih
+ //$counter = self::outputSumaValidAnswerVertical($counter,$_sequence,$spid,array('isOtherAnswer'=>true));
+ }
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'] AS $ikey => $iAnswer) {
+ if ($iAnswer['cnt'] > 0 ) { # izpisujemo samo tiste ki nisno 0
+ $counter = self::outputInvalidAnswerVertical($counter,$ikey,$iAnswer,$_sequence,$spid,array('isOtherAnswer'=>true));
+ }
+ }
+ # izpišemo sumo veljavnih
+ //$counter = self::outputSumaInvalidAnswerVertical($counter,$_sequence,$spid,array('isOtherAnswer'=>true));
+ }
+ #izpišemo še skupno sumo
+ //$counter = self::outputSumaVertical($counter,$_sequence,$spid,array('isOtherAnswer'=>true));
+
+ $this->pdf->setY($this->pdf->getY() + 5);
+ }
+
+ /** Izriše tekstovne odgovore kot tabelo z navedbami
+ *
+ * @param unknown_type $spid
+ */
+ function sumMultiText($spid,$_from) {
+ global $lang;
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ # koliko zapisov prikažemo naenkrat
+ //$num_show_records = SurveyAnalysis::getNumRecords();
+ $chartTableMore = SurveyDataSettingProfiles :: getSetting('chartTableMore');
+ $num_show_records = ($chartTableMore == 0) ? 10 : 1000;
+
+ $_answers = SurveyAnalysis::getAnswers($spremenljivka,$num_show_records);
+
+ // ce imamo prazno in de prikazujemo praznih tabel
+ $hideEmpty = SurveyDataSettingProfiles :: getSetting('hideEmpty');
+ if($_answers['validCnt'] == 0 && $hideEmpty == 1){
+ self::displayEmptyWarning($spid);
+ return;
+ }
+
+ $this->pdf->ln(5);
+
+ $this->pdf->setFont('','b','6');
+ $stevilcenje = ($this->numbering == 1 ? $spremenljivka['variable'].' - ' : '');
+ $title = $stevilcenje . $spremenljivka['naslov'];
+ $this->pdf->MultiCell(165, 5, $title, 0, 'C', 0, 1, 0 ,0, true);
+
+
+ $_cols = $spremenljivka['cnt_all'] / $spremenljivka['cnt_grids'];
+
+ $_answers = SurveyAnalysis::getAnswers($spremenljivka,$num_show_records);
+
+ $_all_valid_answers_cnt = $_answers['validCnt'];
+ $_valid_answers = $_answers['valid'];
+
+
+ //prva vrstica
+ $this->pdf->MultiCell(19, 5, $this->encodeText(''), 0, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(37, 5, $this->encodeText($lang['srv_analiza_opisne_subquestion']), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(90, 5, $this->encodeText($lang['srv_analiza_opisne_arguments']), 1, 'C', 0, 1, 0 ,0, true);
+
+ $this->pdf->setFont('','','6');
+ //konec naslovnih vrstic
+
+
+ $_answersOther = array();
+ $_grids_count = count($spremenljivka['grids']);
+ if ($_grids_count > 0) {
+ # naslovna vrstica
+ $_row = $spremenljivka['grids'][0];
+
+ $this->pdf->MultiCell(19, 5, $this->encodeText(''), 0, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(37, 14, $this->encodeText(''), 1, 'C', 0, 0, 0 ,0, true);
+
+ $count = 0;
+ $text = array();
+ foreach ($_row['variables'] AS $rid => $_col ){
+ $_sequence = $_col['sequence']; # id kolone z podatki
+
+ if ($_col['other'] != true) {
+ $text[] = $_col['naslov'];
+ }
+ else {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+
+ $count++;
+ }
+ $this->dynamicCells($text, $count, 90, 14);
+ $this->pdf->ln(5);
+
+ $last = 0;
+
+ $height = 9;
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $_variables_count = count($grid['variables']);
+
+ $this->pdf->MultiCell(19, 5, $this->encodeText(''), 0, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(37, $height, $this->encodeText($grid['naslov']), 1, 'C', 0, 0, 0 ,0, true);
+
+ if ($_variables_count > 0) {
+ # preštejemo max vrstic na grupo
+ $_max_i = 0;
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ $_max_i = max($_max_i,min($num_show_records,SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt']));
+ }
+
+ # za barvanje
+ $last = ($last & 1) ? 0 : 1 ;
+
+ $count = 0;
+ $text = array();
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if ($variable['other'] != true) {
+
+ # tabela z navedbami
+ $index=0;
+ # odvisno ali imamo odgovor
+ if (count($_valid_answers) > 0) {
+ $text2 = '';
+ foreach ($_valid_answers AS $answer) {
+ $index++;
+
+ $_ans = $answer[$_sequence];
+
+ if ($_ans != null && $_ans != '') {
+ $text2 .= $_ans.', ';
+ }
+ }
+ $text[] = substr($text2, 0, -2);
+ }
+ else {
+ $text[] = '&nbsp;';
+ }
+
+ $count++;
+ }
+
+ }
+ $last = $_max_i;
+ }
+ $this->dynamicCells($text, $count, 90, $height);
+ $this->pdf->ln($height);
+ }
+ }
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ self::outputOtherAnswers($oAnswers);
+ }
+ }
+
+ $this->pdf->ln(5);
+ }
+
+ // Izpis opozorila ce ni vnesenih podatkov in ne prikazujemo grafa
+ function displayEmptyWarning($spid){
+
+ /*$spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ // Naslov posameznega grafa
+ $this->pdf->setFont('','b','6');
+ $this->pdf->MultiCell(165, 5, 'Graf '.$spremenljivka['variable'].' nima veljavnih podatkov!', 0, 'C', 0, 1, 0 ,0, true);
+ $this->pdf->setFont('','','6');*/
+ }
+
+
+ function tableHeader(){
+ global $lang;
+
+ $naslov = array();
+ $naslov[] = '';
+ $naslov[] = $this->encodeText($lang['srv_analiza_frekvence_titleAnswers']);
+ $naslov[] = $this->encodeText($lang['srv_analiza_frekvence_titleFrekvenca']);
+ $naslov[] = $this->encodeText($lang['srv_analiza_frekvence_titleOdstotek']);
+ $naslov[] = $this->encodeText($lang['srv_analiza_frekvence_titleVeljavni']);
+ $naslov[] = $this->encodeText($lang['srv_analiza_frekvence_titleKumulativa']);
+
+ $params = array('border' => 'TB', 'bold' => 'B', 'align2' => 'C');
+
+ self::tableRow($naslov, $params);
+ }
+
+ function tableRow($arrayText, $arrayParams=array()){
+
+ $linecount = $this->pdf->getNumLines($this->encodeText($arrayText[1]), 90);
+ $linecount == 1 ? $height = 4.7 : $height = 4.7 + ($linecount-1)*3.3;
+
+ //ce smo na prelomu strani
+ if( ($this->pdf->getY() + $height) > 270){
+ $this->drawLine();
+ $this->pdf->AddPage('P');
+ $arrayParams['border'] .= 'T';
+ }
+
+ if($arrayParams['align2'] != 'C')
+ $arrayParams['align2'] = 'L';
+
+ $fill = (isset($arrayParams['fill'])) ? $arrayParams['fill'] : 0;
+
+ $this->pdf->MultiCell(19, $height, /*$this->encodeText($arrayText[0])*/'', 0, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(100, $height, $this->encodeText($arrayText[1]), 1, $arrayParams['align2'], $fill, 0, 0 ,0, true);
+ $this->pdf->MultiCell(27, $height, $arrayText[2], 1, 'C', $fill, 1, 0 ,0, true);
+ /*$this->pdf->MultiCell(18, $height, $this->encodeText($arrayText[3]), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(18, $height, $this->encodeText($arrayText[4]), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(18, $height, $this->encodeText($arrayText[5]), 1, 'C', 0, 1, 0 ,0, true);*/
+ }
+
+ //izrisemo dinamicne celice (podamo sirino, stevilo celic in vsebino)
+ function dynamicCells($arrayText, $count, $width, $height, $arrayParams=array()){
+
+ if($count > 0){
+ $singleWidth = round($width / $count);
+ $lastWidth = $width - (($count-1)*$singleWidth);
+ }
+ else{
+ $singleWidth = $width;
+ $lastWidth = $width;
+ }
+
+ if($arrayText[0] == '')
+ $arrayText[0] = '';
+
+ /*$linecount = $this->pdf->getNumLines($this->encodeText($arrayText[1]), 30);
+ $linecount == 1 ? $height = 1 : $height = 4.7 + ($linecount-1)*3.3;*/
+
+ for($i=0; $i<$count-1; $i++){
+ if($arrayText[$i] == '')
+ $arrayText[$i] = '';
+
+ $this->pdf->MultiCell($singleWidth, $height, $this->encodeText($arrayText[$i]), 1, 'C', 0, 0, 0 ,0, true);
+ }
+
+ //zadnje polje izrisemo druge sirine ker se drugace zaradi zaokrozevanja tabela porusi
+ $lastWidth = ($lastWidth < 4) ? 4 : $lastWidth;
+ if($count > 0)
+ $this->pdf->MultiCell($lastWidth, $height, $this->encodeText($arrayText[$count-1]), 1, 'C', 0, 0, 0 ,0, true);
+ else
+ $this->pdf->MultiCell($lastWidth, $height, $this->encodeText(''), 1, 'C', 0, 0, 0 ,0, true);
+ }
+}
+
+?> \ No newline at end of file
diff --git a/admin/exportclases/class.pptIzvozHeatmapImage.php b/admin/exportclases/class.pptIzvozHeatmapImage.php
new file mode 100644
index 0000000..d8455f2
--- /dev/null
+++ b/admin/exportclases/class.pptIzvozHeatmapImage.php
@@ -0,0 +1,1008 @@
+<?php
+
+ global $site_path;
+
+ include_once('../../function.php');
+ include_once('../survey/definition.php');
+ require_once('../exportclases/class.enka.pdf.php');
+
+ /** Include path **/
+ set_include_path('../exportclases/');
+
+ /** PHPPowerPoint */
+ include '../exportclases/PHPPowerPoint.php';
+
+ /** PHPPowerPoint_IOFactory */
+ include '../exportclases/PHPPowerPoint/IOFactory.php';
+
+ define("ALLOW_HIDE_ZERRO_REGULAR", false); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za navadne odgovore
+ define("ALLOW_HIDE_ZERRO_MISSING", true); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za missinge
+
+ define("NUM_DIGIT_AVERAGE", 2, true); // stevilo digitalnih mest za povprecje
+ define("NUM_DIGIT_DEVIATION", 2, true); // stevilo digitalnih mest za povprecje
+
+ define("M_ANALIZA_DESCRIPTOR", "descriptor", true);
+ define("M_ANALIZA_FREQUENCY", "frequency", true);
+
+
+/**
+ * @desc Class za generacijo ppt-ja
+ */
+class pptIzvozHeatmapImage {
+
+ var $anketa; // trenutna anketa
+ var $spremenljivka; // trenutna spremenljivka
+
+ var $headFileName = null; // pot do header fajla
+ var $dataFileName = null; // pot do data fajla
+ var $dataFileStatus = null; // status data datoteke
+
+ var $ppt;
+ var $currentStyle;
+
+ var $skin;
+ var $numbering;
+ var $frontpage;
+
+ var $sessionData; // podatki ki so bili prej v sessionu - za nastavitve, ki se prenasajo v izvoze...
+
+ var $current_loop = 'undefined';
+
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null, $sprID = null, $loop = null)
+ {
+ global $site_path;
+ global $global_user_id;
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) )
+ {
+ $this->anketa = $anketa;
+ $this->spremenljivka = $sprID;
+
+ SurveyAnalysis::Init($this->anketa);
+ SurveyAnalysis::$setUpJSAnaliza = false;
+
+ SurveyChart::Init($this->anketa);
+
+ // create new PPT document
+ $this->ppt = new PHPPowerPoint();
+
+ // Poskrbimo za datoteko s podatki
+ $SDF = SurveyDataFile::get_instance();
+ $SDF->init($this->anketa);
+ $SDF->prepareFiles();
+
+ $this->headFileName = $SDF->getHeaderFileName();
+ $this->dataFileName = $SDF->getDataFileName();
+ $this->dataFileStatus = $SDF->getStatus();
+
+ SurveyZankaProfiles :: Init($this->anketa, $global_user_id);
+ $this->current_loop = ($loop != null) ? $loop : $this->current_loop;
+
+ // preberemo nastavitve iz baze (prej v sessionu)
+ SurveyUserSession::Init($this->anketa);
+ $this->sessionData = SurveyUserSession::getData('charts');
+ }
+ else
+ {
+ return false;
+ }
+
+ if ( SurveyInfo::getInstance()->SurveyInit($this->anketa) )
+ {
+ SurveyUserSetting::getInstance()->Init($this->anketa, $global_user_id);
+ $this->skin = SurveyUserSetting :: getInstance()->getSettings('default_chart_profile_skin');
+ $this->numbering = SurveyDataSettingProfiles :: getSetting('chartNumbering');
+ $this->frontpage = SurveyDataSettingProfiles :: getSetting('chartFP');
+ }
+ else
+ return false;
+
+ return true;
+ }
+
+ function getFile($fileName)
+ {
+ //Close and output PDF document
+ ob_end_clean();
+
+ $objWriter = PHPPowerPoint_IOFactory::createWriter($this->ppt, 'PowerPoint2007');
+
+ header("Pragma: no-cache");
+ header("Expires: 0");
+ header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
+ header("Content-Type: application/force-download");
+ header("Content-Type: application/octet-stream");
+ header("Content-Type: application/download");;
+ header("Content-Disposition: attachment;filename=".$fileName);
+ ob_clean();
+ flush();
+
+ $objWriter->save('php://output');
+
+ //readfile(str_replace('.php', '.pptx', __FILE__));
+
+ exit;
+ }
+
+ function encodeText($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace(array("&scaron;","&#353;","&#269;"),array("�","�","�"),$text);
+ return strip_tags($text);
+ }
+
+ function createPpt(){
+ global $site_path;
+ global $lang;
+
+ $this->ppt->getProperties()->setCreator("1ka");
+ $this->ppt->getProperties()->setLastModifiedBy("1ka");
+ $this->ppt->getProperties()->setTitle("PPT Izvoz");
+ $this->ppt->getProperties()->setSubject("PPT Izvoz");
+ $this->ppt->getProperties()->setDescription("PPT Izvoz grafov");
+ $this->ppt->getProperties()->setKeywords("office 2007 openxml php");
+ $this->ppt->getProperties()->setCategory("PPT Izvoz grafov");
+
+ $this->ppt->removeSlideByIndex(0);
+
+
+ // izpisemo prvo stran
+ if($this->frontpage == 1){
+ $this->createFrontPage();
+ }
+
+
+ # preberemo header
+ if ($this->headFileName !== null) {
+ //polovimo podatke o nastavitvah trenutnega profila (missingi..)
+ SurveyAnalysis::$missingProfileData = SurveyMissingProfiles::getProfile(SurveyAnalysis::$currentMissingProfile);
+
+ // Preverimo ce imamo zanke (po skupinah)
+ SurveyAnalysis::$_LOOPS = SurveyZankaProfiles::getFiltersForLoops();
+
+ # Äe nimamo zank
+ if(count(SurveyAnalysis::$_LOOPS) == 0){
+ $this->displayImage($this->spremenljivka);
+ //$this->displayCharts();
+ }
+ else{
+ // izrisemo samo eno tabelo iz enega loopa
+ if($this->current_loop > 0){
+
+ $loop = SurveyAnalysis::$_LOOPS[(int)$this->current_loop-1];
+ $loop['cnt'] = $this->current_loop;
+ SurveyAnalysis::$_CURRENT_LOOP = $loop;
+
+ //$this->displayCharts();
+ $this->displayImage($this->spremenljivka);
+ }
+ // Izrisemo vse tabele spremenljivka (iz vseh loopov)
+ else{
+ $loop_cnt = 0;
+ # Äe mamo zanke
+ foreach(SurveyAnalysis::$_LOOPS AS $loop) {
+ $loop_cnt++;
+ $loop['cnt'] = $loop_cnt;
+ SurveyAnalysis::$_CURRENT_LOOP = $loop;
+
+ // Izpisemo naslov zanke za skupino
+ /*$currentSlide = $this->ppt->createSlide();
+ $shape = $currentSlide->createRichTextShape();
+ $shape->setHeight(30);
+ $shape->setWidth(600);
+ $shape->setOffsetX(20);
+ $shape->setOffsetY(90);
+ //$shape->getAlignment()->setHorizontal( PHPPowerPoint_Style_Alignment::HORIZONTAL_CENTER );
+ $textRun = $shape->createTextRun($lang['srv_zanka_note'].$loop['text']);
+ $textRun->getFont()->setBold(true);
+ $textRun->getFont()->setSize(12);
+ $textRun->getFont()->setColor( new PHPPowerPoint_Style_Color( 'FF000000' ) );*/
+
+ $this->displayCharts();
+ }
+ }
+ }
+
+ } // end if else ($_headFileName == null)
+
+ }
+
+ function displayCharts(){
+ global $site_path;
+ global $lang;
+
+ #preberemo HEADERS iz datoteke
+ SurveyAnalysis::$_HEADERS = unserialize(file_get_contents($this->headFileName));
+
+ # polovimo frekvence
+ SurveyAnalysis::getFrequencys();
+ $vars_count = count(SurveyAnalysis::$_FILTRED_VARIABLES);
+
+ #odstranimo sistemske variable
+ SurveyAnalysis::removeSystemVariables();
+
+
+ foreach (SurveyAnalysis::$_HEADERS AS $spid => $spremenljivka) {
+ # preverjamo ali je meta
+ if (($spremenljivka['tip'] != 'm'
+ && in_array($spremenljivka['tip'], SurveyAnalysis::$_FILTRED_TYPES ))
+ && (!isset($_spid) || (isset($_spid) && $_spid == $spid))
+ && ($this->spremenljivka == $spid || $this->spremenljivka == null) ) {
+ # ali imamo sfiltrirano spremenljivko
+ if ($vars_count == 0 || ($vars_count > 0 && isset(SurveyAnalysis::$_FILTRED_VARIABLES[$spid]) ) ) {
+
+ // Ce imamo radio tip in manj kot 5 variabel po defaultu prikazemo piechart
+ $vars = count($spremenljivka['options']);
+ $type = 0;
+ if( ($spremenljivka['tip'] == 1 || $spremenljivka['tip'] == 3) && $vars < 5 )
+ $type = 2;
+
+ //ce imamo nominalno spremenljivko ali ce je samo 1 variabla nimamo povprecij
+ if($spremenljivka['tip'] == 6 && ($spremenljivka['cnt_all'] == 1 || $spremenljivka['skala'] == 1) && $type == 0 )
+ $type = 2;
+
+ /*if($spremenljivka['tip'] == 4 || $spremenljivka['tip'] == 19 || $spremenljivka['tip'] == 21 || $spremenljivka['tip'] == 22){
+ // ce imamo vklopljeno nastavitev prikaz tabel med grafi (default)
+ if($spremenljivka['tip'] == 19)
+ self::sumMultiText($spid, 'sums');
+ else
+ self::frequencyVertical($spid);
+ }*/
+ if( in_array($spremenljivka['tip'],array(1,2,3,6,7,8,16,17,18,20)) ){
+ // Prikazemo posamezen graf
+ $this->displayChart($spid, $type);
+ }
+ }
+
+ } // end if $spremenljivka['tip'] != 'm'
+
+ } // end foreach self::$_HEADERS
+ }
+
+ // Vstavimo graf
+ function displayImage($spid, $type=0, $sort=0, $value_type=0){
+ global $site_path;
+ global $lang;
+ global $site_url;
+
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ $image = $site_path.'main/survey/uploads/heatmap'.$spid.'.png'; //mora biti local path in ne url
+
+ $stevilcenje = ($this->numbering == 1 ? $spremenljivka['variable'].' - ' : '');
+ $title = $stevilcenje . $spremenljivka['naslov'];
+
+/* if(SurveyDataSettingProfiles :: getSetting('chartNumerusText') == 0){
+ $title .= ' (n = '.$DataSet->GetNumerus().')';
+ } */
+
+ // IZRIS GRAFA
+ $currentSlide = $this->ppt->createSlide();
+
+ // slika
+ $shape = $currentSlide->createDrawingShape();
+ $shape->setName('Chart');
+ $shape->setDescription($title);
+ $shape->setPath($image);
+ $shape->setWidth(800);
+ //$shape->setHeight(400);
+ $shape->setOffsetX(75);
+ $shape->setOffsetY(130);
+
+ // naslov
+ $shape = $currentSlide->createRichTextShape();
+ $shape->setHeight(80);
+ $shape->setWidth(600);
+ $shape->setOffsetX(170);
+ $shape->setOffsetY(40);
+ $shape->getAlignment()->setHorizontal( PHPPowerPoint_Style_Alignment::HORIZONTAL_CENTER );
+ $textRun = $shape->createTextRun($title);
+ $textRun->getFont()->setBold(true);
+ $textRun->getFont()->setSize(16);
+ $textRun->getFont()->setColor( new PHPPowerPoint_Style_Color( 'FF000000' ) );
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ /*$_answersOther = $DataSet->GetOther();
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ self::outputOtherAnswers($oAnswers);
+ }
+ }*/
+ }
+
+ // dodamo prvo stran
+ function createFrontPage(){
+ global $lang;
+
+ $currentSlide = $this->ppt->createSlide();
+
+ $shape = $currentSlide->createRichTextShape();
+
+ $shape->setWidth(600);
+ $shape->setOffsetX(170);
+ $shape->setOffsetY(200);
+ $shape->getAlignment()->setHorizontal( PHPPowerPoint_Style_Alignment::HORIZONTAL_CENTER );
+ $textRun = $shape->createTextRun(SurveyInfo::getInstance()->getSurveyTitle());
+ $textRun->getFont()->setBold(true);
+ $textRun->getFont()->setSize(38);
+ $textRun->getFont()->setColor( new PHPPowerPoint_Style_Color( 'FF000000' ) );
+
+ $shape->createBreak();
+
+ $textRun = $shape->createTextRun($lang['srv_analiza_charts']);
+ $textRun->getFont()->setBold(true);
+ $textRun->getFont()->setSize(22);
+ $textRun->getFont()->setColor( new PHPPowerPoint_Style_Color( 'FF000000' ) );
+
+ $shape->createBreak();
+ $shape->createBreak();
+
+ $textRun = $shape->createTextRun($this->getEntryDates());
+ $textRun->getFont()->setBold(false);
+ $textRun->getFont()->setSize(14);
+ $textRun->getFont()->setColor( new PHPPowerPoint_Style_Color( 'FF000000' ) );
+ }
+
+
+ function setUserId($usrId) {$this->anketa['uid'] = $usrId;}
+ function getUserId() {return ($this->anketa['uid'])?$this->anketa['uid']:false;}
+
+ // vrnemo string za prvi in zadnji vnos
+ function getEntryDates(){
+ global $lang;
+
+ $prvi_vnos_date = SurveyInfo::getSurveyFirstEntryDate();
+ $prvi_vnos_time = SurveyInfo::getSurveyFirstEntryTime();
+ $zadnji_vnos_date = SurveyInfo::getSurveyLastEntryDate();
+ $zadnji_vnos_time = SurveyInfo::getSurveyLastEntryTime();
+
+ if ($prvi_vnos_date != null) {
+ $first = $this->dateFormat($prvi_vnos_date,'j.n.y');
+ $first .= $prvi_vnos_time != null ? (SurveyInfo::$dateTimeSeperator .$this->dateFormat($prvi_vnos_time,'G:i')) : '';
+ }
+ if ($zadnji_vnos_date != null) {
+ $last = $this->dateFormat($zadnji_vnos_date,'j.n.y');
+ $last .= $zadnji_vnos_time != null ? (SurveyInfo::$dateTimeSeperator .$this->dateFormat($zadnji_vnos_time,'G:i')) : '';
+ }
+
+ $text = $lang['srv_setting_collectdata_datetime'].$first.' '.$lang['s_to'].' '.$last;
+
+ return $text;
+ }
+
+ function dateFormat($input, $format) {
+ if ($input != '..') {
+ return date($format,strtotime($input));
+ } else {
+ return '';
+ }
+ }
+
+ function formatNumber($value,$digit=0,$sufix="")
+ {
+ if ( $value <> 0 && $value != null )
+ $result = round($value,$digit);
+ else
+ $result = "0";
+ $result = number_format($result, $digit, ',', '.').$sufix;
+
+ return $result;
+ }
+
+ /** Izriše frekvence v vertikalni obliki
+ *
+ * @param unknown_type $spid
+ */
+ function frequencyVertical($spid) {
+ global $lang;
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+ # Äe je besedilo * in je samo ena kategorija je inline legenda false
+ $inline_legenda = (SurveyAnalysis::$_HEADERS[$spid]['cnt_all'] == 1 || in_array($spremenljivka['tip'],array(1,8) ) ) ? false: true;
+
+ # koliko zapisov prikažemo naenkrat
+ //$num_show_records = SurveyAnalysis::getNumRecords();
+ $chartTableMore = SurveyDataSettingProfiles :: getSetting('chartTableMore');
+ $num_show_records = ($chartTableMore == 0) ? 10 : 1000;
+
+ // ce imamo prazno in ne prikazujemo praznih tabel
+ $hideEmpty = SurveyDataSettingProfiles :: getSetting('hideEmpty');
+ if($hideEmpty == 1){
+
+ $emptyData = true;
+
+ if (count($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $_variables_count = count($grid['variables']);
+
+ if ($_variables_count > 0 )
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+
+ if(SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] > 0)
+ $emptyData = false;
+ }
+ }
+
+ if($emptyData){
+ self::displayEmptyWarning($spid);
+ return;
+ }
+ }
+
+ $this->pdf->ln(5);
+
+ $this->pdf->setFont('','b','6');
+ $stevilcenje = ($this->numbering == 1 ? $spremenljivka['variable'].' - ' : '');
+ $title = $stevilcenje . $spremenljivka['naslov'];
+ $this->pdf->MultiCell(165, 5, $title, 0, 'C', 0, 1, 0 ,0, true);
+
+ //prva vrstica
+ /*$this->pdf->setFont('','b','6');
+ $this->pdf->MultiCell(18, 5, $this->encodeText($spremenljivka['variable']), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(162, 5, $this->encodeText($spremenljivka['naslov']), 1, 'C', 0, 1, 0 ,0, true);*/
+
+ //druga vrstica
+ self::tableHeader();
+ $this->pdf->setFont('','','6');
+ // konec naslovne vrstice
+
+
+ $_answersOther = array();
+
+ # dodamo opcijo kje izrisujemo legendo
+ $options=array('inline_legenda' => $inline_legenda, 'isTextAnswer' => false, 'isOtherAnswer' => false);
+
+ # izpišemo vlejavne odgovore
+ if (count($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $_variables_count = count($grid['variables']);
+
+ # dodamo dodatne vrstice z albelami grida
+ if ($_variables_count > 0 )
+ foreach ($grid['variables'] AS $vid => $variable ){
+
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if (($variable['text'] != true && $variable['other'] != true)
+ || (in_array($spremenljivka['tip'],array(4,8,21)))){
+ # dodamo ime podvariable
+ $counter = 0;
+ $_kumulativa = 0;
+ //SurveyAnalysis::$_FREQUENCYS[$_sequence]
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'] AS $vkey => $vAnswer) {
+
+ if ($counter < $num_show_records) {
+ if ($vAnswer['cnt'] > 0 || true) { # izpisujemo samo tiste ki nisno 0
+ if (in_array($spremenljivka['tip'],array(4,7,8,19,20,21))) { // text, number, datum, mtext, mnumber, text*
+ $options['isTextAnswer'] = true;
+ # ali prikažemo vse odgovore ali pa samo toliko koliko je nastavljeno v TEXT_ANSWER_LIMIT
+ $options['textAnswerExceed'] = ($counter >= TEXT_ANSWER_LIMIT && count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']) > TEXT_ANSWER_LIMIT+2) ? true : false; # ali zaÄnemo skrivati tekstovne odgovore
+ } else {
+ $options['isTextAnswer'] = false;
+ $options['textAnswerExceed'] = false;
+ }
+ $counter = self::outputValidAnswerVertical($counter,$vkey,$vAnswer,$_sequence,$spid,$_kumulativa,$options);
+ }
+ }
+ }
+ # izpišemo sumo veljavnih
+ $counter = self::outputSumaValidAnswerVertical($counter,$_sequence,$spid,$options);
+ }
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'] AS $ikey => $iAnswer) {
+ if ($iAnswer['cnt'] > 0 ) { # izpisujemo samo tiste ki nisno 0
+ $counter = self::outputInvalidAnswerVertical($counter,$ikey,$iAnswer,$_sequence,$spid,$options);
+ }
+ }
+ # izpišemo sumo veljavnih
+ $counter = self::outputSumaInvalidAnswerVertical($counter,$_sequence,$spid,$options);
+ }
+ #izpišemo še skupno sumo
+ $counter = self::outputSumaVertical($counter,$_sequence,$spid,$options);
+ } else {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ }
+ }
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ //pdfIzvozAnalizaSums::outputOtherAnswers($oAnswers);
+ }
+ }
+
+ $this->pdf->ln(5);
+ }
+
+
+ function outputValidAnswerVertical($counter,$vkey,$vAnswer,$_sequence,$spid,&$_kumulativa,$_options=array()) {
+ global $lang;
+
+ $text = array();
+
+ # opcije
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ 'textAnswerExceed'=>false # ali presegamo Å¡tevilo tekstovnih odgovorov za prikaz
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+ //$cssBck = ' '.SurveyAnalysis::$cssColors['0_' . ($counter & 1)];
+ $fill = ($counter % 2 == 1) ? 1 : 0;
+
+ $_valid = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] > 0 ) ? 100*$vAnswer['cnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] : 0;
+ $_percent = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] > 0 ) ? 100*$vAnswer['cnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] : 0;
+ $_kumulativa += $_valid;
+
+ # ali presegamo Å¡tevilo prikazanih vrstic, takrat v zadnji prikazani dodamo link veÄ.. ostale vrstice pa skrijemo
+ if ($options['textAnswerExceed'] == true) {
+ if ($counter == TEXT_ANSWER_LIMIT ) {
+ # link za veÄ
+ $show_more = '<div id="valid_row_togle_'.$_sequence.'" class="floatRight blue pointer" onclick="showHidenTextRow(\''.$_sequence.'\');return false;">(veÄ...)</div>'.NEW_LINE;
+ } elseif ($counter > TEXT_ANSWER_LIMIT ) {
+ $hide_row = ' hidden';
+ $_exceed = true;
+ }
+ }
+
+ //if ($counter < TEXT_MAX_ANSWER_LIMIT) {
+ $text[] = '';
+
+ $addText = (($options['isTextAnswer'] == false && (string)$vkey != $vAnswer['text']) ? ' ('.$vAnswer['text'] .')' : '');
+ $text[] = $this->encodeText(' '.$vkey.$addText);
+
+ $text[] = (int)$vAnswer['cnt'];
+
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($_percent, NUM_DIGIT_PERCENT, '%'));
+
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($_valid, NUM_DIGIT_PERCENT, '%'));
+
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($_kumulativa, NUM_DIGIT_PERCENT, '%'));
+
+ /*} elseif ($counter == TEXT_MAX_ANSWER_LIMIT ) {
+ echo '<tr id="'.$spid.'_'.$_sequence.'_'.$counter.'" name="valid_row_'.$_sequence.'">';
+ echo '<td class="anl_bl anl_ac anl_br gray anl_dash_bt anl_dash_bb" colspan="'.(6+(int)SurveyAnalysis::$_HEADERS[$spid]['show_valid_percent']+((int)SurveyAnalysis::$_SHOW_LEGENDA*2)).'"> . . . Prikazujemo samo prvih '.TEXT_MAX_ANSWER_LIMIT.' veljavnih odgovorov!</td>';
+ echo '</tr>';
+ }*/
+
+ $arrayParams = array('fill' => $fill, 'align2' => 'C');
+
+ self::tableRow($text, $arrayParams);
+
+ $counter++;
+ return $counter;
+ }
+
+ function outputSumaValidAnswerVertical($counter,$_sequence,$spid,$_options=array()) {
+ global $lang;
+
+ $text = array();
+
+ # opcije
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ 'textAnswerExceed'=>false # ali presegamo Å¡tevilo tekstovnih odgovorov za prikaz
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+
+ $_percent = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] > 0 ) ? 100*SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] : 0;
+
+ $_brez_MV = ((int)SurveyAnalysis::$currentMissingProfile == 2) ? TRUE : FALSE;
+
+ $_sufix = '';
+
+ $text[] = $this->encodeText($lang['srv_anl_valid']);
+ $text[] = $this->encodeText($lang['srv_anl_suma1']);
+
+ $text[] = $this->encodeText(SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] > 0 ? SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] : 0);
+
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($_percent, NUM_DIGIT_PERCENT, '%'));
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber(100, NUM_DIGIT_PERCENT, '%'));
+
+ $text[] = '';
+
+
+ self::tableRow($text);
+
+ $counter++;
+ return $counter;
+ }
+
+ function outputInvalidAnswerVertical($counter,$vkey,$vAnswer,$_sequence,$spid,$_options=array()) {
+ global $lang;
+
+ $text = array();
+
+ # opcije
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ 'textAnswerExceed'=>false # ali presegamo Å¡tevilo tekstovnih odgovorov za prikaz
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+
+ $_percent = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] > 0 ) ? 100*$vAnswer['cnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] : 0;
+ $_invalid = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'] > 0 ) ? 100*$vAnswer['cnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'] : 0;
+
+ $_sufix = '';
+
+ $_Z_MV = ((int)SurveyAnalysis::$missingProfileData['display_mv_type'] === 2) ? TRUE : FALSE;
+ if($_Z_MV){
+ $text[] = '';
+
+ $text[] = $this->encodeText($vkey.' (' . $vAnswer['text'].')');
+ //echo '<div class="floatRight anl_detail_percent anl_w50 anl_ac anl_dash_bl">'.SurveyAnalysis::formatNumber($_invalid, NUM_DIGIT_PERCENT, '%').'</div>'.NEW_LINE;
+ //echo '<div class="floatRight anl_detail_percent anl_w30 anl_ac">'.$vAnswer['cnt'].'</div>'.NEW_LINE;
+
+ $text[] = $this->encodeText((int)$vAnswer['cnt']);
+
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($_percent, NUM_DIGIT_PERCENT, '%'));
+
+ $text[] = '';
+ $text[] = '';
+
+ $arrayParams = array('align2' => 'C');
+
+ $this->tableRow($text);
+ }
+
+ $counter++;
+ return $counter;
+ }
+
+ function outputSumaInvalidAnswerVertical($counter,$_sequence,$spid,$_options = array()) {
+ global $lang;
+
+ # opcije
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ 'textAnswerExceed'=>false # ali presegamo Å¡tevilo tekstovnih odgovorov za prikaz
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+ $cssBck = ' '.SurveyAnalysis::$cssColors['text_' . ($counter & 1)];
+ $_percent = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] > 0 ) ? 100*SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] : 0;
+
+ $_brez_MV = ((int)SurveyAnalysis::$missingProfileData['display_mv_type'] === 0) ? TRUE : FALSE;
+ if(!$_brez_MV){
+ $text = array();
+
+ $text[] = $this->encodeText($lang['srv_anl_missing']);
+
+ $text[] = $this->encodeText(SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt']);
+
+ $answer['cnt'] = SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'] > 0 ? SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'] : 0;
+ $text[] = $this->encodeText((int)$answer['cnt']);
+
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($_percent, NUM_DIGIT_PERCENT, '%'));
+ $text[] = '';
+ $text[] = '';
+
+ $this->tableRow($text);
+ }
+
+ $counter++;
+ return $counter;
+ }
+
+ function outputSumaVertical($counter,$_sequence,$spid, $_options = array()) {
+ global $lang;
+
+ # opcije
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ 'textAnswerExceed'=>false # ali presegamo Å¡tevilo tekstovnih odgovorov za prikaz
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+
+ $cssBck = ' '.SurveyAnalysis::$cssColors['0_' .($counter & 1)];
+
+ $_brez_MV = ((int)SurveyAnalysis::$missingProfileData['display_mv_type'] === 0) ? TRUE : FALSE;
+ if(!$_brez_MV){
+
+ $text = array();
+
+ $text[] = '';
+ $text[] = $this->encodeText($lang['srv_anl_suma2']);
+ $text[] = $this->encodeText((SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] ? SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] : 0));
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber('100', NUM_DIGIT_PERCENT, '%'));
+ $text[] = '';
+ $text[] = '';
+
+ $this->tableRow($text);
+ }
+ }
+
+ /** izpišemo tabelo z tekstovnimi odgovori drugo
+ *
+ * @param $skey
+ * @param $oAnswers
+ * @param $spid
+ */
+ function outputOtherAnswers($oAnswers) {
+ global $lang;
+ $spid = $oAnswers['spid'];
+ $_variable = SurveyAnalysis::$_HEADERS[$spid]['grids'][$oAnswers['gid']]['variables'][$oAnswers['vid']];
+ $_sequence = $_variable['sequence'];
+ $_frekvence = SurveyAnalysis::$_FREQUENCYS[$_variable['sequence']];
+
+
+ // Naslov posameznega grafa
+ $stevilcenje = ($this->numbering == 1 ? $_variable['variable'].' - ' : '');
+ $title = $stevilcenje . SurveyAnalysis::$_HEADERS[$oAnswers['spid']]['variable'].' ('.$_variable['naslov'].' )';
+ $this->pdf->setFont('','b','6');
+ $this->pdf->MultiCell(165, 5, $title, 0, 'C', 0, 1, 0 ,0, true);
+ $this->pdf->setFont('','','6');
+
+ $counter = 0;
+ $_kumulativa = 0;
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'] AS $vkey => $vAnswer) {
+ if ($vAnswer['cnt'] > 0 ) { # izpisujemo samo tiste ki nisno 0
+ $counter = self::outputValidAnswerVertical($counter,$vkey,$vAnswer,$_sequence,$spid,$_kumulativa,array('isOtherAnswer'=>true));
+ }
+ }
+ # izpišemo sumo veljavnih
+ //$counter = self::outputSumaValidAnswerVertical($counter,$_sequence,$spid,array('isOtherAnswer'=>true));
+ }
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'] AS $ikey => $iAnswer) {
+ if ($iAnswer['cnt'] > 0 ) { # izpisujemo samo tiste ki nisno 0
+ $counter = self::outputInvalidAnswerVertical($counter,$ikey,$iAnswer,$_sequence,$spid,array('isOtherAnswer'=>true));
+ }
+ }
+ # izpišemo sumo veljavnih
+ //$counter = self::outputSumaInvalidAnswerVertical($counter,$_sequence,$spid,array('isOtherAnswer'=>true));
+ }
+ #izpišemo še skupno sumo
+ //$counter = self::outputSumaVertical($counter,$_sequence,$spid,array('isOtherAnswer'=>true));
+
+ $this->pdf->setY($this->pdf->getY() + 5);
+ }
+
+ /** Izriše tekstovne odgovore kot tabelo z navedbami
+ *
+ * @param unknown_type $spid
+ */
+ function sumMultiText($spid,$_from) {
+ global $lang;
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ # koliko zapisov prikažemo naenkrat
+ //$num_show_records = SurveyAnalysis::getNumRecords();
+ $chartTableMore = SurveyDataSettingProfiles :: getSetting('chartTableMore');
+ $num_show_records = ($chartTableMore == 0) ? 10 : 1000;
+
+ $_answers = SurveyAnalysis::getAnswers($spremenljivka,$num_show_records);
+
+ // ce imamo prazno in de prikazujemo praznih tabel
+ $hideEmpty = SurveyDataSettingProfiles :: getSetting('hideEmpty');
+ if($_answers['validCnt'] == 0 && $hideEmpty == 1){
+ self::displayEmptyWarning($spid);
+ return;
+ }
+
+ $this->pdf->ln(5);
+
+ $this->pdf->setFont('','b','6');
+ $stevilcenje = ($this->numbering == 1 ? $spremenljivka['variable'].' - ' : '');
+ $title = $stevilcenje . $spremenljivka['naslov'];
+ $this->pdf->MultiCell(165, 5, $title, 0, 'C', 0, 1, 0 ,0, true);
+
+
+ $_cols = $spremenljivka['cnt_all'] / $spremenljivka['cnt_grids'];
+
+ $_answers = SurveyAnalysis::getAnswers($spremenljivka,$num_show_records);
+
+ $_all_valid_answers_cnt = $_answers['validCnt'];
+ $_valid_answers = $_answers['valid'];
+
+
+ //prva vrstica
+ $this->pdf->MultiCell(19, 5, $this->encodeText(''), 0, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(37, 5, $this->encodeText($lang['srv_analiza_opisne_subquestion']), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(90, 5, $this->encodeText($lang['srv_analiza_opisne_arguments']), 1, 'C', 0, 1, 0 ,0, true);
+
+ $this->pdf->setFont('','','6');
+ //konec naslovnih vrstic
+
+
+ $_answersOther = array();
+ $_grids_count = count($spremenljivka['grids']);
+ if ($_grids_count > 0) {
+ # naslovna vrstica
+ $_row = $spremenljivka['grids'][0];
+
+ $this->pdf->MultiCell(19, 5, $this->encodeText(''), 0, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(37, 14, $this->encodeText(''), 1, 'C', 0, 0, 0 ,0, true);
+
+ $count = 0;
+ $text = array();
+ foreach ($_row['variables'] AS $rid => $_col ){
+ $_sequence = $_col['sequence']; # id kolone z podatki
+
+ if ($_col['other'] != true) {
+ $text[] = $_col['naslov'];
+ }
+ else {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+
+ $count++;
+ }
+ $this->dynamicCells($text, $count, 90, 14);
+ $this->pdf->ln(5);
+
+ $last = 0;
+
+ $height = 9;
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $_variables_count = count($grid['variables']);
+
+ $this->pdf->MultiCell(19, 5, $this->encodeText(''), 0, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(37, $height, $this->encodeText($grid['naslov']), 1, 'C', 0, 0, 0 ,0, true);
+
+ if ($_variables_count > 0) {
+ # preštejemo max vrstic na grupo
+ $_max_i = 0;
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ $_max_i = max($_max_i,min($num_show_records,SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt']));
+ }
+
+ # za barvanje
+ $last = ($last & 1) ? 0 : 1 ;
+
+ $count = 0;
+ $text = array();
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if ($variable['other'] != true) {
+
+ # tabela z navedbami
+ $index=0;
+ # odvisno ali imamo odgovor
+ if (count($_valid_answers) > 0) {
+ $text2 = '';
+ foreach ($_valid_answers AS $answer) {
+ $index++;
+
+ $_ans = $answer[$_sequence];
+
+ if ($_ans != null && $_ans != '') {
+ $text2 .= $_ans.', ';
+ }
+ }
+ $text[] = substr($text2, 0, -2);
+ }
+ else {
+ $text[] = '&nbsp;';
+ }
+
+ $count++;
+ }
+
+ }
+ $last = $_max_i;
+ }
+ $this->dynamicCells($text, $count, 90, $height);
+ $this->pdf->ln($height);
+ }
+ }
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ self::outputOtherAnswers($oAnswers);
+ }
+ }
+
+ $this->pdf->ln(5);
+ }
+
+ // Izpis opozorila ce ni vnesenih podatkov in ne prikazujemo grafa
+ function displayEmptyWarning($spid){
+
+ /*$spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ // Naslov posameznega grafa
+ $this->pdf->setFont('','b','6');
+ $this->pdf->MultiCell(165, 5, 'Graf '.$spremenljivka['variable'].' nima veljavnih podatkov!', 0, 'C', 0, 1, 0 ,0, true);
+ $this->pdf->setFont('','','6');*/
+ }
+
+
+ function tableHeader(){
+ global $lang;
+
+ $naslov = array();
+ $naslov[] = '';
+ $naslov[] = $this->encodeText($lang['srv_analiza_frekvence_titleAnswers']);
+ $naslov[] = $this->encodeText($lang['srv_analiza_frekvence_titleFrekvenca']);
+ $naslov[] = $this->encodeText($lang['srv_analiza_frekvence_titleOdstotek']);
+ $naslov[] = $this->encodeText($lang['srv_analiza_frekvence_titleVeljavni']);
+ $naslov[] = $this->encodeText($lang['srv_analiza_frekvence_titleKumulativa']);
+
+ $params = array('border' => 'TB', 'bold' => 'B', 'align2' => 'C');
+
+ self::tableRow($naslov, $params);
+ }
+
+ function tableRow($arrayText, $arrayParams=array()){
+
+ $linecount = $this->pdf->getNumLines($this->encodeText($arrayText[1]), 90);
+ $linecount == 1 ? $height = 4.7 : $height = 4.7 + ($linecount-1)*3.3;
+
+ //ce smo na prelomu strani
+ if( ($this->pdf->getY() + $height) > 270){
+ $this->drawLine();
+ $this->pdf->AddPage('P');
+ $arrayParams['border'] .= 'T';
+ }
+
+ if($arrayParams['align2'] != 'C')
+ $arrayParams['align2'] = 'L';
+
+ $fill = (isset($arrayParams['fill'])) ? $arrayParams['fill'] : 0;
+
+ $this->pdf->MultiCell(19, $height, /*$this->encodeText($arrayText[0])*/'', 0, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(100, $height, $this->encodeText($arrayText[1]), 1, $arrayParams['align2'], $fill, 0, 0 ,0, true);
+ $this->pdf->MultiCell(27, $height, $arrayText[2], 1, 'C', $fill, 1, 0 ,0, true);
+ /*$this->pdf->MultiCell(18, $height, $this->encodeText($arrayText[3]), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(18, $height, $this->encodeText($arrayText[4]), 1, 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(18, $height, $this->encodeText($arrayText[5]), 1, 'C', 0, 1, 0 ,0, true);*/
+ }
+
+ //izrisemo dinamicne celice (podamo sirino, stevilo celic in vsebino)
+ function dynamicCells($arrayText, $count, $width, $height, $arrayParams=array()){
+
+ if($count > 0){
+ $singleWidth = round($width / $count);
+ $lastWidth = $width - (($count-1)*$singleWidth);
+ }
+ else{
+ $singleWidth = $width;
+ $lastWidth = $width;
+ }
+
+ if($arrayText[0] == '')
+ $arrayText[0] = '';
+
+ /*$linecount = $this->pdf->getNumLines($this->encodeText($arrayText[1]), 30);
+ $linecount == 1 ? $height = 1 : $height = 4.7 + ($linecount-1)*3.3;*/
+
+ for($i=0; $i<$count-1; $i++){
+ if($arrayText[$i] == '')
+ $arrayText[$i] = '';
+
+ $this->pdf->MultiCell($singleWidth, $height, $this->encodeText($arrayText[$i]), 1, 'C', 0, 0, 0 ,0, true);
+ }
+
+ //zadnje polje izrisemo druge sirine ker se drugace zaradi zaokrozevanja tabela porusi
+ $lastWidth = ($lastWidth < 4) ? 4 : $lastWidth;
+ if($count > 0)
+ $this->pdf->MultiCell($lastWidth, $height, $this->encodeText($arrayText[$count-1]), 1, 'C', 0, 0, 0 ,0, true);
+ else
+ $this->pdf->MultiCell($lastWidth, $height, $this->encodeText(''), 1, 'C', 0, 0, 0 ,0, true);
+ }
+}
+
+?> \ No newline at end of file
diff --git a/admin/exportclases/class.rtf.php b/admin/exportclases/class.rtf.php
new file mode 100644
index 0000000..5d6bdfa
--- /dev/null
+++ b/admin/exportclases/class.rtf.php
@@ -0,0 +1,430 @@
+<?php
+
+/*
+ * RTF Generation PHP Class
+ * ------------------------
+ * ** Based on a project found on phpclasses.org - Can't find it anymore... :(
+ *
+ * FIXES AND MORE:
+ * ---------------
+ * 1. Enhanced color support
+ * 2. Font support added (6 fonts for now)
+ * 3. Image support added (a bit buggy but working)
+ * 4. Color defines added for simple reference
+ * 5. List support added
+ * 6. Fix for some special characters (words with accents)
+ * 7. Fix for text and image alignment
+ * 8. Page jump support added ( see new_page() )
+ * 9. Minor fixes
+ * ===============================================================
+ * DISCLAIMER:
+ * ===============================================================
+ *
+ * This php class is distributed as-is.
+ * So do not bother for broken functions, nor any non-working thing.
+ *
+ * If you find a bug please notify me... and if you can, please attach the solution!!!
+ *
+ * Hints and suggestions are welcome!!!
+ *
+ * Michele
+ * michele (at) xtnet (dot) it
+ *
+ */
+
+// START OF COLOR TABLE
+define('BLACK', 0);
+define('DARKGRAY', 1);
+define('LIGHTBLUE', 2);
+define('CYAN', 3);
+define('LIGHTGREEN', 4);
+define('PURPLE', 5);
+define('RED', 6);
+define('YELLOW', 7);
+define('WHITE', 8);
+define('BLUE', 9);
+define('DARKCYAN', 10);
+define('DARKGREEN', 11);
+define('DARKPURPLE',12);
+define('BROWN', 13);
+define('DARKYELLOW',14);
+define('GRAY', 15);
+define('LIGHTGRAY', 16);
+define('ORANGE', 17);
+define('LIGHTGRAY2', 18);
+// END OF COLOR TABLE
+
+class RTF
+{
+ var $MyRTF;
+ var $dfl_FontID;
+ var $dfl_FontSize = 20;
+ var $FontID;
+ var $TextDecoration;
+
+ /**
+ * Creates the RTF file on RAM and writed the header
+ * including the font table and the color table
+ *
+ * see also: load_color_table() e load_font_table()
+ *
+ * @return void
+ *
+ */
+ function __construct($landscape = false)
+ {
+ $this->MyRTF="{\\rtf1\\ansi\n";
+
+ if($landscape)
+ $this->MyRTF .= "\landscape\paperw15840\paperh12240\margl720\margr720\margt720\margb720";
+
+ $this->load_color_table();
+ $this->load_font_table();
+ $this->MyRTF .= "\n{\n\n";
+ }
+
+ /**
+ * Loads the color table (RGB)
+ *
+ * @return void
+ *
+ */
+ function load_color_table()
+ {
+ $this->MyRTF.="{\\colortbl;\n".
+ "\\red0\\green0\\blue0;\\red0\\green0\\blue255;\\red0\\green255\\blue255;\n".
+ "\\red0\\green255\\blue0;\\red255\\green0\\blue255;\\red255\green0\\blue0;\n".
+ "\\red255\\green255\\blue0;\\red255\\green255\\blue255;\\red0\green0\\blue128;\n".
+ "\\red0\\green128\\blue128;\\red0\\green128\\blue0;\\red179\\green0\\blue128;\n".
+ "\\red128\\green0\\blue0;\\red128\\green128\\blue0;\\red128\\green128\\blue128;\n".
+ "\\red192\\green192\\blue192;\\red255\\green120\\blue0;\\red242\\green243\\blue241;\n".
+ "}\n";
+ }
+
+ /**
+ * Loads the fonts table
+ *
+ * @return void
+ *
+ */
+ function load_font_table()
+ {
+ $this->MyRTF .= "{\\fonttbl\n".
+ "{\\f0\\froman\\fcharset0\\fprq2 Times New Roman;}\n".
+ "{\\f1\\fswiss\\fcharset0\\fprq2 Arial;}\n".
+ "{\\f2\\fswiss\\fcharset0\\fprq2 Arial Black;}\n".
+ "{\\f3\\fswiss\\fcharset0\\fprq2 Verdana;}\n".
+ "{\\f4\\fswiss\\fcharset0\\fprq2 Tahoma;}\n".
+ "{\\f5\\fmodern\\fcharset0\\fprq2 Courier New;}\n".
+ "}";
+ }
+
+ /**
+ * These two function will insert into the document the *CURRENT* time
+ * and/or the *CURRENT* date. So, it's not the date of the last modify as these
+ * values will change upon the opening of the generated document.
+ *
+ * @return string
+ *
+ */
+ function cur_date() { return "\\chdate "; }
+ function cur_time() { return "\\chtime "; }
+
+
+ /**
+ * Creates a list taking values from an array using bullets.
+ *
+ * @arg1 array
+ * @arg2 keyword (left|center|right|justify)
+ * @return void|NULL on failure
+ *
+ */
+ function add_list($array, $align = 'left')
+ {
+ if (!is_array($array)) return NULL;
+
+ foreach ($array as $k => $v)
+ {
+ $this->MyRTF .= "{ ";
+ $this->bullet($v, $align);
+ $this->MyRTF .= "} ";
+ $this->paragraph();
+ }
+ }
+
+ /**
+ * Creates a list field using bullets.
+ *
+ * @arg1 string
+ * @arg2 keyword (left|center|right|justify)
+ * @return void
+ *
+ */
+ function bullet($text, $align = 'left')
+ {
+ $this->TextDecoration .= "\\bullet "; // 2 spaces are needed at the end for spacing the word from the bullet
+ $this->add_text($text, $align);
+ }
+
+ /**
+ * Insert some text in the document
+ *
+ * @arg1 string
+ * @arg2 keyword (left|center|right|justify)
+ * @return void
+ *
+ */
+ function add_text($msg, $align = 'left')
+ {
+ /** FIX RITORNI A CAPO **/
+ $msg = str_replace("\r", "", $msg);
+ $msg = str_replace("\n", "", $msg);
+
+ /** FIX LETTERE ACCENTATE ** /
+ $msg = str_replace("à", "\\'e0", $msg);
+ $msg = str_replace("è", "\\'e8", $msg);
+ $msg = str_replace("é", "\\'e9", $msg);
+ $msg = str_replace("ì", "\\'ec", $msg);
+ $msg = str_replace("ò", "\\'f2", $msg);
+ $msg = str_replace("ù", "\\'f9", $msg);
+*/
+ $this->align($align);
+ $this->MyRTF .= "{";
+
+ if (empty($this->TextDecoration))
+ {
+ $this->TextDecoration .= $this->_font($this->dfl_FontID);
+ $this->TextDecoration .= $this->_font_size($this->dfl_FontSize);
+ }
+
+ $this->MyRTF .= $this->TextDecoration;
+ $this->MyRTF .= "{";
+ $this->MyRTF .= $msg;
+ $this->MyRTF .= "}} ";
+
+ $this->TextDecoration = '';
+ }
+
+ /**
+ * Insert one or ${times} carriage returns in the document
+ *
+ * @arg1 int
+ * @return void
+ *
+ */
+ function new_line($times = 1)
+ {
+ for ($i=0; $i<$times; $i++)
+ { $this->MyRTF .= "\\line\n"; }
+ }
+
+ /**
+ * Ends the current paragraph (or thought to do so... duh)
+ *
+ * @return void
+ *
+ */
+ function paragraph() { $this->MyRTF .= "\\par\n"; }
+
+ /**
+ * Text formatting functions
+ *
+ * bold: grassetto
+ * italic: corsivo
+ * underline: sottolineato
+ * caps: testo in maiuscolo
+ * emboss: effetto testo in rilievo
+ * engrave: effetto testo scavato
+ * outline: effetto testo con contorno
+ * shadow: effetto testo con ombra
+ * sub: pedice
+ * super: apice
+ *
+ * @arg1 int (0|1) 1: default
+ * @return void
+ *
+ */
+ function bold($s = 1) { return ($s == 0) ? " \\b0 " : "\\b "; }
+ function italic($s = 1) { return ($s == 0) ? " \\i0 " : "\\i "; }
+ function underline($s = 1) { return ($s == 0) ? " \\ulnone " : "\\ul "; }
+ function caps($s = 1) { return ($s == 0) ? " \\caps0 " : "\\caps "; }
+ function emboss($s = 1) { return ($s == 0) ? " \\embo0 " : "\\embo "; }
+ function engrave($s = 1) { return ($s == 0) ? " \\impr0 " : "\\impr "; }
+ function outline($s = 1) { return ($s == 0) ? " \\outl0 " : "\\outl "; }
+ function shadow($s = 1) { return ($s == 0) ? " \\shad0 " : "\\shad "; }
+ function sub($s = 1) { return ($s == 0) ? " \\nosupersub " : "\\shad "; }
+ function super($s = 1) { return ($s == 0) ? " \\nosupersub " : "\\super "; }
+
+ /**
+ * Internal function used to set the font type
+ * (Not to be used directly. set_font() function as been written for this)
+ *
+ * @arg1 int
+ * @return string
+ *
+ */
+ function _font($id = 0) { return ("\\f$id "); }
+ /**
+ * Internal function used to set the font size (X pt == X*2 pt)
+ * (Not to be used directly. set_font_size() function as been written for this)
+ *
+ * @arg1 int
+ * @return string
+ *
+ */
+ function _font_size($size = 20) { return ("\\fs$size "); }
+ /**
+ * Sets the default font used in the document ( set_default_font() )
+ * used when the font is not assigned using set_font() function before
+ * calling the add_text() function. Same thing for set_default_font_size().
+ *
+ * @arg1 string
+ * @arg2 int
+ * @return void
+ *
+ */
+ function set_default_font($font_name, $font_size = 10 )
+ {
+ $this->dfl_FontID = $this->get_font_id($font_name);
+ $this->set_default_font_size($font_size);
+ }
+
+ function set_default_font_size($font_size = 8)
+ {
+ $this->dfl_FontSize = ($font_size * 2);
+ }
+
+ /**
+ * Returns the requested font id (used in RTF syntax)
+ *
+ * @arg1 string
+ * @return int
+ *
+ */
+ function get_font_id($font_name = NULL)
+ {
+ switch ( strtolower($font_name) )
+ {
+ case 'times': return(0); break;
+ case 'arial': return(1); break;
+ case 'arial black': return(2); break;
+ case 'verdana': return(3); break;
+ case 'tahoma': return(4); break;
+ case 'courier new': return(5); break;
+ default: return(0); break;
+ }
+ }
+
+ /**
+ * Sets the font size only
+ *
+ * @arg1 int
+ * @return void
+ *
+ */
+ function set_font_size($size)
+ {
+ $size *= 2;
+ $this->TextDecoration .= $this->_font_size($size);
+ }
+
+ /**
+ * Sets the text font and its size
+ *
+ * @arg1 string (font name)
+ * @arg2 int (font size)
+ * @return void
+ *
+ */
+ function set_font($font, $size = 10)
+ {
+ $this->FontID = $this->get_font_id($font);
+ $this->TextDecoration .= $this->_font($this->FontID);
+ $this->set_font_size($size);
+ }
+
+ /**
+ * Jump to the next page of the document
+ *
+ * @return void
+ *
+ */
+ function new_page() { $this->MyRTF .= "\\page\n"; }
+
+ /**
+ * Sets the font's color
+ *
+ * @return void
+ */
+ function color($ColorID=0) { return "\\cf$ColorID "; }
+
+ /**
+ * Align text and images
+ * (This is not intended to be used directly)
+ *
+ * @arg1 keyword (left|center|right|justify)
+ *
+ */
+ function align($where = 'left')
+ {
+ switch ( strtolower ($where) )
+ {
+ case 'left': $this->MyRTF .= "\\ql "; break;
+ case 'center': $this->MyRTF .= "\\qc "; break;
+ case 'right': $this->MyRTF .= "\\qr "; break;
+ case 'justify': $this->MyRTF .= "\\qj "; break;
+ default: $this->align('left'); break;
+ }
+ }
+
+ /**
+ * Insert an image and manages its alignment on the document
+ * ** TODO ** :: fix bug on image size handling
+ *
+ * @arg1 string (image filename)
+ * @arg2 int (int 1-100)
+ * @arg3 keyword (left|center|right|justify)
+ * @return void
+ */
+ function add_image($image, $ratio, $align = 'left', $breakAfter = true)
+ {
+ $file = @file_get_contents($image);
+
+ if (empty($file))
+ return NULL;
+
+ $this->align($align);
+ $this->MyRTF .= "{";
+ $this->MyRTF .= "\\pict\\jpegblip\\picscalex". $ratio ."\\picscaley". $ratio ."\\bliptag132000428 ";
+ $this->MyRTF .= trim(bin2hex($file));
+ $this->MyRTF .= "\n}\n";
+
+ if($breakAfter)
+ $this->paragraph();
+ }
+
+ /**
+ * View/Download of the created RTF files
+ * NOTE: View feature is for *DEBUG* purposes
+ *
+ * @arg1 string
+ * @return void
+ *
+ */
+ function display($filename = "document.rtf", $download = true)
+ {
+ $this->MyRTF .= "\n}\n}\n";
+
+ if ($download == true) // Download
+ {
+ header("Content-type: application/msword");
+ header("Content-Lenght: ". sizeof($this->MyRTF));
+ header("Content-Disposition: inline; filename=". $filename);
+ }
+
+ print $this->MyRTF;
+ }
+
+}
+
+?>
diff --git a/admin/exportclases/class.rtfIzvoz.php b/admin/exportclases/class.rtfIzvoz.php
new file mode 100644
index 0000000..31c5442
--- /dev/null
+++ b/admin/exportclases/class.rtfIzvoz.php
@@ -0,0 +1,2106 @@
+<?php
+/*
+ * Created on 28.2.2009
+ *
+ */
+require("class.enka.rtf.php");
+require_once('../../vendor/autoload.php');
+
+
+define("FNT_TIMES", "Times New Roman", true);
+define("FNT_ARIAL", "Arial", true);
+
+define("FNT_MAIN_TEXT", FNT_TIMES, true);
+define("FNT_QUESTION_TEXT", FNT_TIMES, true);
+define("FNT_HEADER_TEXT", FNT_TIMES, true);
+
+define("FNT_MAIN_SIZE", 12, true);
+define("FNT_QUESTION_SIZE", 10, true);
+define("FNT_HEADER_SIZE", 10, true);
+
+
+class RtfIzvoz {
+
+ var $anketa;// = array(); // trenutna anketa
+ var $grupa = null; // trenutna grupa
+ var $usrId = null; // trenutni user
+ var $spremenljivka; // trenutna spremenljivka
+ var $usr_id; // ID trenutnega uporabnika
+ var $printPreview = false; // ali kliÄe konstruktor
+ var $pi=array('canCreate'=>false); // za shrambo parametrov in sporocil
+ var $rtf;
+
+ var $db_table = '';
+
+ var $language = -1; // Katero verzijo prevoda izvazamo
+
+ var $type = 0; // tip izpisa - 0->navaden, 1->iz prve strani, 2->s komentarji
+ var $commentType = 1; // tip izpisa komentarjev
+ var $showIf = 0; // izpis if-ov
+ var $font = 10; // velikost pisave
+ var $numbering = 0; // ostevillcevanje vprasanj
+ var $showIntro = 0; // prikaz uvoda
+
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null, $type = 0, $commentType = 1){
+ global $site_path;
+ global $global_user_id;
+ global $site_url;
+ global $lang;
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) )
+ {
+ $this->anketa['id'] = $anketa;
+ $this->usrId = $_GET['usr_id'];
+
+ $this->type = $type;
+ $this->commentType = $commentType;
+
+ // Po novem imamo globalne nastavitve
+ SurveySetting::getInstance()->Init($anketa);
+ $this->font = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_font_size');
+ $this->showIf = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_show_if');
+ $this->numbering = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_numbering');
+ $this->showIntro = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_show_intro');
+
+ if(isset($_GET['language'])){
+ $this->language = $_GET['language'];
+
+ // Naložimo jezikovno datoteko
+ $file = '../../lang/'.$this->language.'.php';
+ include($file);
+ $_SESSION['langX'] = $site_url .'lang/'.$this->language.'.php';
+ }
+
+ // create new RTF document
+ $this->rtf = new enka_RTF();
+ }
+ else
+ {
+ $this->pi['msg'] = "Anketa ni izbrana!";
+ $this->pi['canCreate'] = false;
+ return false;
+ }
+ if ( SurveyInfo::getInstance()->SurveyInit($this->anketa['id']) && $this->init())
+ {
+ $this->anketa['uid'] = $global_user_id;
+ SurveyUserSetting::getInstance()->Init($this->anketa['id'], $this->anketa['uid']);
+
+ if (SurveyInfo::getInstance()->getSurveyColumn('db_table') == 1)
+ $this->db_table = '_active';
+ }
+ else
+ return false;
+ // ce smo prisli do tu je vse ok
+ $this->pi['canCreate'] = true;
+ return true;
+ }
+
+ function getAnketa()
+ { return $this->anketa['id']; }
+
+ function checkCreate()
+ {
+ return $this->pi['canCreate'];
+ }
+
+ function getFile($fileName)
+ {
+ //Close and output rtf document
+// $this->rtf->Output($fileName, 'I');
+ $this->rtf->display($fileName = 'anketa'.time().'.rtf',true);
+ }
+
+
+
+ function init(){
+ global $lang;
+
+ // dodamo avtorja in naslov
+ $this->rtf->WriteTitle();
+
+ if ($this->language != -1) {
+ SurveySetting::getInstance()->Init($this->anketa['id']);
+ $_lang = '_'.$this->language;
+ $srv_novaanketa_kratkoime = SurveySetting::getInstance()->getSurveyMiscSetting('srvlang_srv_novaanketa_kratkoime'.$_lang);
+ }
+ else{
+ $srv_novaanketa_kratkoime = SurveyInfo::getInstance()->getSurveyAkronim();
+ }
+ $this->rtf->WriteHeader($this->enkaEncode($srv_novaanketa_kratkoime), 'left');
+ $this->rtf->WriteHeader($this->enkaEncode($srv_novaanketa_kratkoime), 'right');
+
+ $this->rtf->WriteFooter($lang['page']." {PAGE} / {NUMPAGES}", 'right');
+
+ $this->rtf->set_default_font(FNT_TIMES, $this->font);
+
+ return true;
+ }
+
+ function createRtf(){
+ // Izpis vprasanj s komentarji
+ if($this->type == 2)
+ $this->outputCommentaries();
+
+ // Izpis vprasalnika oz odgovorov enega respondenta
+ else
+ $this->outputSurvey();
+ }
+
+ // Izpis vprasalnika (z ali brez odgovorov)
+ function outputSurvey(){
+ global $lang;
+
+ $rowA = SurveyInfo::getInstance()->getSurveyRow();
+
+
+ // izpišemo prvo stran
+ $this->createFrontPage();
+
+
+ // Izpisemo vprasalnik
+
+ // ce obstaja intro izpisemo intro - pri izpisu vprasalnika brez odgovorov (ce smo na prvi strani moramo biti v razsirjenem nacinu)
+ if( ($rowA['expanded'] != 0 || $this->type != 1) && $this->showIntro == 1 ){
+ if ( SurveyInfo::getInstance()->getSurveyShowIntro() )
+ {
+ $intro = (SurveyInfo::getInstance()->getSurveyIntro() == '') ? $lang['srv_intro'] : SurveyInfo::getInstance()->getSurveyIntro();
+
+ // po potrebi prevedemo uvod
+ $naslovIntro = $this->srv_language_intro();
+ if ($naslovIntro != '') {
+ $intro = $naslovIntro;
+ }
+
+ // ce obstaja intro izpisemo intro
+ $this->rtf->add_text($intro);
+ $this->rtf->new_line(3);
+ }
+ }
+
+ // filtriramo spremenljivke glede na profil
+ SurveyVariablesProfiles :: Init($this->anketa['id']);
+
+ $dvp = SurveyUserSetting :: getInstance()->getSettings('default_variable_profile');
+ $_currentVariableProfile = SurveyVariablesProfiles :: checkDefaultProfile($dvp);
+
+ $tmp_svp_pv = SurveyVariablesProfiles :: getProfileVariables($_currentVariableProfile);
+
+ foreach ( $tmp_svp_pv as $vid => $variable) {
+ $tmp_svp_pv[$vid] = substr($vid, 0, strpos($vid, '_'));
+ }
+
+ $sqlGrupeString = "SELECT id FROM srv_grupa WHERE ank_id='".$this->anketa['id']."' ORDER BY vrstni_red";
+ $sqlGrupe = sisplet_query($sqlGrupeString);
+
+ while ( $rowGrupe = mysqli_fetch_assoc( $sqlGrupe ) )
+ { // sprehodmo se skozi grupe ankete
+ $this->grupa = $rowGrupe['id'];
+
+ $zaporedna = 0;
+ $sqlSpremenljivke = sisplet_query("SELECT * FROM srv_spremenljivka WHERE gru_id='".$this->grupa."' AND visible='1' ORDER BY vrstni_red ASC");
+ while ($rowSpremenljivke = mysqli_fetch_assoc($sqlSpremenljivke))
+ { // sprehodimo se skozi spremenljivke grupe
+ $spremenljivka = $rowSpremenljivke['id'];
+ if ( $this->checkSpremenljivka ($spremenljivka) /*|| $this->showIf == 1*/ )
+ { // lahko izrišemo spremenljivke
+
+ // Äe imamo Å¡tevilÄenje Type = 1 potem Å¡tevilÄimo V1
+ if (SurveyInfo::getInstance()->getSurveyCountType())
+ $zaporedna++;
+ $stevilcenje = ( SurveyInfo::getInstance()->getSurveyCountType() ) ?
+ ( ( SurveyInfo::getInstance()->getSurveyCountType() == 2 ) ? $rowSpremenljivke['variable'].") " : $zaporedna.") " ) : null;
+
+
+ // izpis skrcenega vprasalnika (samo pri izpisu iz urejanja)
+ if($rowA['expanded'] == 0 && $this->type == 1){
+ $this->outputVprasanjeCollapsed($rowSpremenljivke, $stevilcenje);
+ }
+
+ // izpis navadnega vprasalnika
+ else{
+ $this->outputVprasanje($rowSpremenljivke, $stevilcenje);
+ $this->outputSpremenljivke($rowSpremenljivke);
+ }
+
+
+ $this->rtf->new_line(1);
+ }
+ }
+ }
+
+ // Äe izpisujemo grupo, ne izpisujemo zakljucka
+ if ( !$this->getGrupa() ){
+ if ( SurveyInfo::getInstance()->getSurveyShowConcl() && SurveyInfo::getInstance()->getSurveyConcl() )
+ { // ce obstaja footer izpisemo footer
+ $this->rtf->add_text(SurveyInfo::getInstance()->getSurveyConcl());
+ }
+ }
+ }
+
+ // Izpis vprasanj s komentarji
+ function outputCommentaries(){
+ global $lang;
+ global $site_url;
+ global $admin_type;
+ global $global_user_id;
+
+ $this->createFrontPage();
+
+
+ $f = new Forum;
+ $c = 0;
+
+ $b = new Branching($this->anketa['id']);
+
+ $rowi = SurveyInfo::getInstance()->getSurveyRow();
+
+ SurveySetting::getInstance()->Init($this->anketa['id']);
+ $question_resp_comment_viewadminonly = SurveySetting::getInstance()->getSurveyMiscSetting('question_resp_comment_viewadminonly');
+ $question_comment_viewadminonly = SurveySetting::getInstance()->getSurveyMiscSetting('question_comment_viewadminonly');
+ $question_comment_viewauthor = SurveySetting::getInstance()->getSurveyMiscSetting('question_comment_viewauthor');
+ $sortpostorder = SurveySetting::getInstance()->getSurveyMiscSetting('sortpostorder');
+ $question_note_view = SurveySetting::getInstance()->getSurveyMiscSetting('question_note_view');
+ $addfieldposition = SurveySetting::getInstance()->getSurveyMiscSetting('addfieldposition');
+ $commentmarks = SurveySetting::getInstance()->getSurveyMiscSetting('commentmarks');
+ $commentmarks_who = SurveySetting::getInstance()->getSurveyMiscSetting('commentmarks_who');
+
+ $sql = sisplet_query("SELECT s.* FROM srv_spremenljivka s, srv_grupa g WHERE s.gru_id=g.id AND g.ank_id='".$this->anketa['id']."' ORDER BY g.vrstni_red ASC, s.vrstni_red ASC");
+
+ if ( mysqli_num_rows($sql) > 0 && ( (int)$question_resp_comment_viewadminonly + (int)$question_comment_viewadminonly ) > 0 ) {
+ while ($row = mysqli_fetch_array($sql)) {
+
+ $sql1 = sisplet_query("SELECT thread, note FROM srv_spremenljivka WHERE id = '$row[id]'");
+ $row1 = mysqli_fetch_array($sql1);
+
+ $orderby = $sortpostorder == 1 ? 'DESC' : 'ASC' ;
+ $tid = $row1['thread'];
+
+ $only_unresolved = " ";
+ $only_unresolved2 = " ";
+
+ if ($this->commentType == 1) $only_unresolved = " AND ocena <= 1 ";
+ if ($this->commentType == 1) $only_unresolved2 = " AND text2 <= 1 ";
+
+ if ($this->commentType == 2) $only_unresolved = " AND ocena = 0 ";
+ if ($this->commentType == 2) $only_unresolved2 = " AND text2 = 0 ";
+
+ if ($this->commentType == 3) $only_unresolved = " AND ocena = 1 ";
+ if ($this->commentType == 3) $only_unresolved2 = " AND text2 = 1 ";
+
+ if ($this->commentType == 4) $only_unresolved = " AND ocena = 2 ";
+ if ($this->commentType == 4) $only_unresolved2 = " AND text2 = 2 ";
+
+ if ($this->commentType == 5) $only_unresolved = " AND ocena = 3 ";
+ if ($this->commentType == 5) $only_unresolved2 = " AND text2 = 3 ";
+
+
+ $tema_vsebuje = substr($lang['srv_forum_intro'],0,10); // da ne prikazujemo 1. default sporocila
+
+ if ($admin_type <= $question_comment_viewadminonly) { // vidi vse komentarje
+ $sqlt = sisplet_query("SELECT * FROM post WHERE vsebina NOT LIKE '%{$tema_vsebuje}%' AND tid='$tid' $only_unresolved ORDER BY time $orderby, id $orderby");
+ } elseif ($question_comment_viewauthor==1) { // vidi samo svoje komentarje
+ $sqlt = sisplet_query("SELECT * FROM post WHERE vsebina NOT LIKE '%{$tema_vsebuje}%' AND tid='$tid' $only_unresolved AND uid='$global_user_id' ORDER BY time $orderby, id $orderby");
+ } else { // ne vidi nobenih komentarjev
+ $sqlt = sisplet_query("SELECT * FROM post WHERE 1=0");
+ }
+
+ $sql2 = sisplet_query("SELECT COUNT(*) AS count FROM srv_data_text".$this->db_table." WHERE spr_id='0' AND vre_id='$row[id]' $only_unresolved2");
+ $row2 = mysqli_fetch_array($sql2);
+
+ if ( mysqli_num_rows($sqlt) > 0 || $row2['count'] > 0 || $row1['note'] != '') {
+ $c++;
+
+ $this->outputVprasanje($row, null);
+ $this->outputSpremenljivke($row);
+
+ if ($admin_type <= $question_note_view || $question_note_view == '') {
+
+ if ($row1['note'] != '') {
+
+ $this->rtf->add_text($this->rtf->bold(1).$this->enkaEncode($lang['hour_comment']).$this->rtf->bold(0));
+ $this->rtf->new_line(1);
+
+ $this->rtf->add_text($this->enkaEncode($row1['note']));
+ $this->rtf->new_line(1);
+ }
+ }
+
+ // komentarji na vprasanje
+ if ($row1['thread'] > 0) {
+
+ if (mysqli_num_rows($sqlt) > 0) {
+
+ $this->rtf->add_text($this->rtf->bold(1).$this->enkaEncode($lang['srv_admin_comment']).$this->rtf->bold(0));
+ $this->rtf->new_line(2);
+
+ $i = 0;
+ while ($rowt = mysqli_fetch_array($sqlt)) {
+
+ $this->rtf->add_text($this->rtf->bold(1).$this->enkaEncode($f->user($rowt['uid'])).$this->rtf->bold(0).$this->enkaEncode(' ('.$f->datetime1($rowt['time']).'):'));
+ $this->rtf->new_line(1);
+
+ // Popravimo vsebino ce imamo replike
+ $vsebina = iconv("iso-8859-2", "UTF-8", $rowt['vsebina']);
+ $odgovori = explode("<blockquote style=\"margin-left:20px\">", $vsebina);
+
+ $this->rtf->add_text($this->enkaEncode($odgovori[0]));
+ $this->rtf->new_line(2);
+
+ unset($odgovori[0]);
+ foreach($odgovori as $odgovor){
+
+ $odgovor = explode('<br />', $odgovor);
+ $avtor = explode('</b> ', $odgovor[0]);
+
+ $this->rtf->add_text(' \tab '.$this->rtf->bold(1).$this->enkaEncode($avtor[0]).$this->rtf->bold(0).$this->enkaEncode($avtor[1]));
+ $this->rtf->new_line(1);
+
+ $this->rtf->add_text(' \tab '.$this->enkaEncode($odgovor[1]));
+ $this->rtf->new_line(2);
+ }
+ }
+ }
+ }
+
+ // komentarji respondentov
+ if ($row2['count'] > 0) {
+
+ if ($admin_type <= $question_resp_comment_viewadminonly) {
+
+ $this->rtf->add_text($this->rtf->bold(1).$this->enkaEncode($lang['srv_repondent_comment']).$this->rtf->bold(0));
+ $this->rtf->new_line(2);
+
+ if ($this->commentType == 1) $only_unresolved = " AND d.text2 <= 1 "; else $only_unresolved = " ";
+
+ $sqlt = sisplet_query("SELECT d.*, u.time_edit FROM srv_data_text".$this->db_table." d, srv_user u WHERE d.spr_id='0' AND d.vre_id='$row[id]' AND u.id=d.usr_id $only_unresolved2 ORDER BY d.id ASC");
+ if (!$sqlt) echo mysqli_error($GLOBALS['connect_db']);
+ while ($rowt = mysqli_fetch_array($sqlt)) {
+
+ $this->rtf->add_text($this->enkaEncode($f->datetime1($rowt['time_edit']).':'));
+ $this->rtf->new_line(1);
+
+ $this->rtf->add_text($this->enkaEncode($rowt['text']));
+ $this->rtf->new_line(2);
+ }
+ }
+ }
+
+ $this->rtf->new_line(2);
+ }
+ }
+
+ /*if ($c == 0) {
+ //echo $lang['srv_no_comments_solved'].'<br/>';
+ }*/
+
+ }
+
+ else {
+ //echo $lang['srv_no_comments'].'<br/>';
+ }
+ }
+
+ // Izpis skrcenih vprasanj - v eni vrstici
+ function outputVprasanjeCollapsed($spremenljivke, $zaporedna){
+ global $lang;
+
+ $b = new Branching($this->anketa['id']);
+
+ $sqlIf = sisplet_query("SELECT * FROM srv_branching WHERE element_spr='$spremenljivke[id]'");
+ $rowIf = mysqli_fetch_array($sqlIf);
+
+ // Zamik zaradi ifov
+ $zamik = ( $b->level($spremenljivke['id'],0) > 0 ? (($b->level($spremenljivke['id'],0)-1)) : 0 );
+ for($i=0; $i<$zamik; $i++){
+ $this->rtf->add_text('\tab');
+ }
+
+ $rowl = $this->srv_language_spremenljivka($spremenljivke);
+ if (strip_tags($rowl['naslov']) != '') $spremenljivke['naslov'] = $rowl['naslov'];
+
+ //izpis if-ov pri vprasanju
+ if(/*$this->showIf == 1*/ true){
+
+ if ($rowIf['parent'] > 0){
+ $rowb = Cache::srv_if($rowIf['parent']);
+
+ if ($rowb['tip'] == 0){
+ $this->displayIf($rowIf['parent']);
+ $this->rtf->new_line(1);
+ $zamik ++;
+ }
+ }
+ }
+
+ for($i=0; $i<$zamik; $i++){
+ $this->rtf->add_text('\tab');
+ }
+
+ // stevilcenje vprasanj
+ $numberingText = '('.$spremenljivke['variable'].') ';
+
+ $this->rtf->add_text($this->rtf->color(11).$numberingText.$this->rtf->color(0));
+ $this->rtf->add_text($this->enkaEncode($spremenljivke['naslov']));
+ $this->rtf->add_text($this->rtf->color(15).$this->enkaEncode(' ( '.$lang['srv_vprasanje_tip_long_'.$spremenljivke['tip']].' )').$this->rtf->color(0));
+ $this->rtf->new_line(1);
+
+ // izpis pagebreaka
+ if($b->pagebreak($spremenljivke['id'])){
+
+ /*$this->currentStyle = array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter', 'dash' => '2,2', 'color' => array(128, 128, 128));
+ $cy = $this->pdf->getY()+3;
+ $this->pdf->Line(15, $cy , 195, $cy , $this->currentStyle);*/
+ $this->rtf->new_line(1);
+ $this->rtf->TextCell('', array('width' => 9200, 'height' => 0,
+ 'align' => 'center', 'valign' => 'middle' , 'border' => 'top',
+ 'colorF' => "0", 'colorB' => "0" ) );
+ }
+ }
+
+ function outputVprasanje($spremenljivke, $zaporedna){
+
+ $rowl = $this->srv_language_spremenljivka($spremenljivke);
+ if (strip_tags($rowl['naslov']) != '') $spremenljivke['naslov'] = $rowl['naslov'];
+ if (strip_tags($rowl['info']) != '') $spremenljivke['info'] = $rowl['info'];
+
+ //izpis if-ov pri vprasanju
+ if($this->showIf == 1){
+
+ /*$sqlIf = sisplet_query("SELECT * FROM srv_branching WHERE element_spr='$spremenljivke[id]'");
+ $rowIf = mysqli_fetch_array($sqlIf);
+
+ if ($rowIf['parent'] > 0){
+ $rowb = Cache::srv_if($rowIf['parent']);
+
+ if ($rowb['tip'] == 0){
+ $this->displayIf($rowIf['parent']);
+ $this->rtf->new_line(1);
+ }
+ }*/
+
+ // Po novem izpisemo pred vsakim vprasanjem vse ife znotraj katerih se nahaja
+ $b = new Branching($this->anketa['id']);
+ $parents = $b->get_parents($spremenljivke['id']);
+
+ $parents = explode('p_', $parents);
+ foreach ($parents AS $key => $val) {
+ if ( is_numeric(trim($val)) ) {
+ $parents[$key] = (int)$val;
+ } else {
+ unset($parents[$key]);
+ }
+ }
+
+ foreach ($parents AS $if) {
+ $this->displayIf($if);
+ $this->rtf->new_line(1);
+ }
+ }
+
+ // stevilcenje vprasanj
+ $numberingText = ($this->numbering == 1) ? $spremenljivke['variable'].' - ' : '';
+
+ // pretvorimo html v rtf
+ $text = $this->rtf->HTMLtoRTF($numberingText . $spremenljivke['naslov']);
+
+ $this->rtf->add_text($this->rtf->bold(1).$this->enkaEncode($text).$this->rtf->bold(0));
+
+ if($spremenljivke['orientation']!=0){ //ce ni vodoravno ob vprasanju, pejdi v novo vrstico
+ // Izpisemo opombo, ce jo imamo
+ if($spremenljivke['info'] != ''){
+ $this->rtf->new_line(1);
+
+ $this->rtf->set_font_size($this->font-2);
+ $this->rtf->add_text($this->rtf->color(15).$this->enkaEncode($spremenljivke['info']).$this->rtf->color(0));
+ $this->rtf->set_font_size($this->font);
+ }
+
+ //$this->rtf->add_text($numberingText . $this->enkaEncode($spremenljivke['naslov']));
+
+ $this->rtf->new_line(1);
+ }
+ }
+
+ function outputSpremenljivke($spremenljivke)
+ {
+ global $lang;
+ switch ( $spremenljivke['tip'] )
+ {
+ case 1: //radio
+ case 2: //check
+ case 3: //select -> radio
+
+ if($spremenljivke['orientation']!=0){ //ce ni vodoravno ob vprasanju, pejdi v novo vrstico
+ $this->rtf->new_line(1);
+ }
+
+ // iz baze preberemo vse moznosti
+ $sqlVrednosti = sisplet_query("SELECT id, naslov, naslov2, variable FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+
+ //ce imamo prikaz v vec stoplcih
+ $spremenljivkaParams = new enkaParameters($spremenljivke['params']);
+ $stolpci = ($spremenljivkaParams->get('stolpci') ? $spremenljivkaParams->get('stolpci') : 1);
+ $checkbox_limit = ($spremenljivkaParams->get('checkbox_limit') ? $spremenljivkaParams->get('checkbox_limit') : 0);
+
+ if ($stolpci > 1 && $spremenljivke['orientation']==1) {
+ //echo '<div style="float:left; width:'.(100/$stolpci).'%">';
+ $kategorij = mysqli_num_rows($sqlVrednosti);
+ $v_stolpcu = ceil($kategorij / $stolpci);
+
+ $width = round(10000 / $stolpci);
+
+ $this->rtf->MyRTF .= "{\par";
+ $tableHeader = '\trowd\trql\trrh400';
+ }
+
+
+ $count = 0;
+ $table = '';
+ $tableEnd = '';
+ $SeznamTable = array();
+ $SeznamBorders = array();
+
+ $PredefinedSeznamBorders = array();
+ $PredefinedSeznamBorders[0] = array('top', 'left', 'right');
+ $PredefinedSeznamBorders[1] = array('left', 'right');
+ $PredefinedSeznamBorders[2] = array('right', 'left', 'bottom');
+ $AllBorders = array('top', 'left', 'right', 'bottom');
+
+ if($spremenljivke['orientation']!=10)
+ { //ce ni image hot spot
+ while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti))
+ {
+ //popravimo lokacijo ce imamo postavitev v vec stolpcih
+ if ( ($stolpci > 1) && ($spremenljivke['orientation']==1) && ($count % $v_stolpcu == 0) ) {
+
+ $yPos = floor($count / $v_stolpcu) + 1;
+
+ $table .= '\clvertalc\cellx'.( $yPos * $width );
+ $tableEnd .= '\pard\intbl ';
+ }
+
+ # po potrebi prevedemo naslov
+ $naslov = $this->srv_language_vrednost($rowVrednost['id']);
+ if ($naslov != '') {
+ $rowVrednost['naslov'] = $naslov;
+ }
+
+ $stringTitle = $this->enkaEncode( ( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) );
+
+ if($spremenljivke['orientation']==1){ //navpicno
+ if( isset($userAnswer[$rowVrednost['id']]) ){
+ if(($stolpci > 1) && ($spremenljivke['orientation']==1))
+ $tableEnd .= $this->rtf->ImageToString( ( ( $spremenljivke['tip'] == 2 ) ? "checkbox2.png" : "radio2.png"), "15");
+ else
+ $this->rtf->MyRTF .= $this->rtf->ImageToString( ( ( $spremenljivke['tip'] == 2 ) ? "checkbox2.png" : "radio2.png"), "15");
+ }
+ else{
+ if(($stolpci > 1) && ($spremenljivke['orientation']==1))
+ $tableEnd .= $this->rtf->ImageToString( ( ( $spremenljivke['tip'] == 2 ) ? "checkbox.png" : "radio.png"), "15");
+ else
+ $this->rtf->MyRTF .= $this->rtf->ImageToString( ( ( $spremenljivke['tip'] == 2 ) ? "checkbox.png" : "radio.png"), "15");
+ }
+
+ if(($stolpci > 1) && ($spremenljivke['orientation']==1))
+ $tableEnd .= ' '.$stringTitle.'\\line\n';
+ else{
+ $this->rtf->add_text(" ".$stringTitle);
+ $this->rtf->new_line(1);
+ }
+
+ $count++;
+
+ if ( ($stolpci > 1) && ($spremenljivke['orientation']==1) && ($count % $v_stolpcu == 0 || $count == $kategorij) ) {
+ $tableEnd .= ' \ql\cell';
+ }
+ }elseif($spremenljivke['orientation']==7){ //navpicno - tekst levo
+
+ if(($stolpci > 1) && ($spremenljivke['orientation']==7))
+ $tableEnd .= ' '.$stringTitle.' ';
+ else{
+ $this->rtf->add_text(" ".$stringTitle. "\t");
+ }
+
+ if( isset($userAnswer[$rowVrednost['id']]) ){
+ if(($stolpci > 1) && ($spremenljivke['orientation']==7)){
+ $tableEnd .= $this->rtf->ImageToString( ( ( $spremenljivke['tip'] == 2 ) ? "checkbox2.png" : "radio2.png"), "15");
+ $tableEnd .= '\\line\n';
+ }
+
+ else
+ $this->rtf->MyRTF .= $this->rtf->ImageToString( ( ( $spremenljivke['tip'] == 2 ) ? "checkbox2.png" : "radio2.png"), "15");
+ }
+ else{
+ if(($stolpci > 1) && ($spremenljivke['orientation']==7)){
+ $tableEnd .= $this->rtf->ImageToString( ( ( $spremenljivke['tip'] == 2 ) ? "checkbox.png" : "radio.png"), "15");
+ $tableEnd .= '\\line\n';
+ }
+ else
+ $this->rtf->MyRTF .= $this->rtf->ImageToString( ( ( $spremenljivke['tip'] == 2 ) ? "checkbox.png" : "radio.png"), "15");
+ }
+
+ $count++;
+
+ if ( ($stolpci > 1) && ($spremenljivke['orientation']==7) && ($count % $v_stolpcu == 0 || $count == $kategorij) ) {
+ $tableEnd .= ' \ql\cell';
+ }else{
+ $this->rtf->new_line(1);
+ }
+ }elseif($spremenljivke['orientation']==0){ //vodoravno ob vprasanju
+ if( isset($userAnswer[$rowVrednost['id']]) ){
+ if(($stolpci > 1) && ($spremenljivke['orientation']==0))
+ $tableEnd .= $this->rtf->ImageToString( ( ( $spremenljivke['tip'] == 2 ) ? "checkbox2.png" : "radio2.png"), "15");
+ else
+ $this->rtf->MyRTF .= $this->rtf->ImageToString( ( ( $spremenljivke['tip'] == 2 ) ? "checkbox2.png" : "radio2.png"), "15");
+ }
+ else{
+ if(($stolpci > 1) && ($spremenljivke['orientation']==0))
+ $tableEnd .= $this->rtf->ImageToString( ( ( $spremenljivke['tip'] == 2 ) ? "checkbox.png" : "radio.png"), "15");
+ else
+ $this->rtf->MyRTF .= $this->rtf->ImageToString( ( ( $spremenljivke['tip'] == 2 ) ? "checkbox.png" : "radio.png"), "15");
+ }
+
+ if(($stolpci > 1) && ($spremenljivke['orientation']==0))
+ //$tableEnd .= ' '.$stringTitle.'\\line\n';
+ $tableEnd .= ' '.$stringTitle;
+ else{
+ $this->rtf->add_text(" ".$stringTitle);
+ //$this->rtf->new_line(1);
+ }
+
+ $count++;
+
+ if ( ($stolpci > 1) && ($spremenljivke['orientation']==0) && ($count % $v_stolpcu == 0 || $count == $kategorij) ) {
+ $tableEnd .= ' \ql\cell';
+ }
+ } elseif($spremenljivke['orientation']==2){ //vodoravno pod vprasanjem
+ if( isset($userAnswer[$rowVrednost['id']]) ){
+ if(($stolpci > 1) && ($spremenljivke['orientation']==2))
+ $tableEnd .= $this->rtf->ImageToString( ( ( $spremenljivke['tip'] == 2 ) ? "checkbox2.png" : "radio2.png"), "15");
+ else
+ $this->rtf->MyRTF .= $this->rtf->ImageToString( ( ( $spremenljivke['tip'] == 2 ) ? "checkbox2.png" : "radio2.png"), "15");
+ }
+ else{
+ if(($stolpci > 1) && ($spremenljivke['orientation']==2))
+ $tableEnd .= $this->rtf->ImageToString( ( ( $spremenljivke['tip'] == 2 ) ? "checkbox.png" : "radio.png"), "15");
+ else
+ $this->rtf->MyRTF .= $this->rtf->ImageToString( ( ( $spremenljivke['tip'] == 2 ) ? "checkbox.png" : "radio.png"), "15");
+ }
+
+ if(($stolpci > 1) && ($spremenljivke['orientation']==2))
+ //$tableEnd .= ' '.$stringTitle.'\\line\n';
+ $tableEnd .= ' '.$stringTitle;
+ else{
+ $this->rtf->add_text(" ".$stringTitle);
+ //$this->rtf->new_line(1);
+ }
+
+ $count++;
+
+ if ( ($stolpci > 1) && ($spremenljivke['orientation']==0) && ($count % $v_stolpcu == 0 || $count == $kategorij) ) {
+ $tableEnd .= ' \ql\cell';
+ }
+ }elseif($spremenljivke['orientation']==6){ //izberite s seznama
+ array_push( $SeznamTable, array($stringTitle) );
+
+ if($count == 0){
+ array_push( $SeznamBorders, $PredefinedSeznamBorders[0]);
+ }elseif($count != 0 && $count != (mysqli_num_rows($sqlVrednosti) - 1)){
+ array_push( $SeznamBorders, $PredefinedSeznamBorders[1]);
+ } elseif($count == (mysqli_num_rows($sqlVrednosti) - 1)){
+ array_push( $SeznamBorders, $PredefinedSeznamBorders[2]);
+ }
+ $count++;
+ }elseif($spremenljivke['orientation']==8){ //povleci-spusti
+ array_push( $SeznamTable, array($stringTitle) );
+
+ if($count == 0){
+ array_push( $SeznamBorders, $PredefinedSeznamBorders[0]);
+ }elseif($count != 0 && $count != (mysqli_num_rows($sqlVrednosti) - 1)){
+ array_push( $SeznamBorders, $PredefinedSeznamBorders[1]);
+ } elseif($count == (mysqli_num_rows($sqlVrednosti) - 1)){
+ array_push( $SeznamBorders, $PredefinedSeznamBorders[2]);
+ }
+
+
+ $count++;
+ }else{
+ if( isset($userAnswer[$rowVrednost['id']]) ){
+ if(($stolpci > 1) && ($spremenljivke['orientation']==1))
+ $tableEnd .= $this->rtf->ImageToString( ( ( $spremenljivke['tip'] == 2 ) ? "checkbox2.png" : "radio2.png"), "15");
+ else
+ $this->rtf->MyRTF .= $this->rtf->ImageToString( ( ( $spremenljivke['tip'] == 2 ) ? "checkbox2.png" : "radio2.png"), "15");
+ }
+ else{
+ if(($stolpci > 1) && ($spremenljivke['orientation']==1))
+ $tableEnd .= $this->rtf->ImageToString( ( ( $spremenljivke['tip'] == 2 ) ? "checkbox.png" : "radio.png"), "15");
+ else
+ $this->rtf->MyRTF .= $this->rtf->ImageToString( ( ( $spremenljivke['tip'] == 2 ) ? "checkbox.png" : "radio.png"), "15");
+ }
+
+ if(($stolpci > 1) && ($spremenljivke['orientation']==1))
+ $tableEnd .= ' '.$stringTitle.'\\line\n';
+ else{
+ $this->rtf->add_text(" ".$stringTitle);
+ $this->rtf->new_line(1);
+ }
+
+ $count++;
+
+ if ( ($stolpci > 1) && ($spremenljivke['orientation']==1) && ($count % $v_stolpcu == 0 || $count == $kategorij) ) {
+ $tableEnd .= ' \ql\cell';
+ }
+ }
+
+ }
+ }
+
+ if($spremenljivke['orientation']==6){ //izberite s seznama
+ $this->rtf->TableFromArraySelect( array( 4750, 4750 ), $SeznamTable, $SeznamBorders, mysqli_num_rows($sqlVrednosti));
+ }
+ if($spremenljivke['orientation']==8){ //povleci-spusti
+ //$this->rtf->TableFromArrayDragDrop( array( 4750, 4750 ), $SeznamTable, $SeznamBorders, mysqli_num_rows($sqlVrednosti));
+ $this->rtf->TableFromArrayDragDrop( array( 3000, 3000 ), $SeznamTable, $SeznamBorders, mysqli_num_rows($sqlVrednosti));
+ }
+ if($spremenljivke['orientation']==10)//image hot spot
+ {
+ $odgovor = "Image hot spot";
+ $this->rtf->TextCell($odgovor, array('width' => 6500, 'height' => 5, 'border' => array('top','bottom', 'left','right') ) );
+ $this->rtf->new_line(1);
+ }
+
+ if ($stolpci > 1 && $spremenljivke['orientation'] == 1) {
+
+ $tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+ $this->rtf->MyRTF .= "}";
+ }
+
+ if($spremenljivke['orientation']==0){ //ce je vodoravno ob vprasanju, pride opomba na koncu
+ // Izpisemo opombo, ce jo imamo
+ if($spremenljivke['info'] != ''){
+ $this->rtf->new_line(1);
+
+ $this->rtf->set_font_size($this->font-2);
+ $this->rtf->add_text($this->rtf->color(15).$this->enkaEncode($spremenljivke['info']).$this->rtf->color(0));
+ $this->rtf->set_font_size($this->font);
+ }
+
+ //$this->rtf->add_text($numberingText . $this->enkaEncode($spremenljivke['naslov']));
+ $this->rtf->new_line(1);
+ }
+
+ $this->rtf->new_line(1);
+ break;
+
+ case 6: // multigrid
+ case 16: // multicheckbox
+ case 19: // multitext
+ case 20: // multinumber
+
+ //izris dvojnega multigrida
+ if($spremenljivke['enota'] == 3){
+ $this->displayDoubleGrid($spremenljivke);
+
+ break;
+ }
+
+ if($spremenljivke['enota']!=10){ //ce ni image hot spot
+
+ //za izberite s seznama in povleci-spusti
+ if($spremenljivke['enota'] == 6)
+ {
+ $headerTitles = array();
+ $stringCellTitles = array();
+ }elseif($spremenljivke['enota'] == 9)
+ {
+ $headerTitles = array();
+ //$headerTitles = array($lang['srv_drag_drop_answers'].": ");
+ $stringCellTitles = array();
+ //$stringCellTitles = array($lang['srv_ranking_avaliable_categories'].": ");
+ $odgovor = "Drag and drop";
+ $this->rtf->TextCell($odgovor, array('width' => 7000, 'height' => 1, 'border' => array('top','bottom', 'left','right') ) );
+ $this->rtf->new_line(1);
+ $this->rtf->TextCells($this->enkaEncode($lang['srv_ranking_avaliable_categories']), $lang['srv_drag_drop_answers']);
+ }
+ //za izberite s seznama in povleci-spusti - konec
+
+
+ $this->rtf->MyRTF .= "{\\par\\fs22";
+
+ $sqlStVrednosti = sisplet_query("SELECT count(*) AS count FROM srv_grid WHERE spr_id='".$spremenljivke['id']."' ORDER BY id");
+ $rowStVrednost = mysqli_fetch_row($sqlStVrednosti);
+
+ $defw_full = 10500;
+ if($rowStVrednost[0] < 6 && ($spremenljivke['tip'] != 6 || $spremenljivke['enota'] != 1)){
+ $defw_fc = 4300; // first cell width
+ }
+ else{
+ $defw_fc = 2000; // first cell width
+ }
+
+ $kolon = $rowStVrednost[0]+1;
+ // Ce imamo diferencial
+ if($spremenljivke['tip'] == 6 && $spremenljivke['enota'] == 1)
+ $w_oc = ( $defw_full - (2*$defw_fc) ) / $kolon;
+ else
+ $w_oc = ( $defw_full - $defw_fc ) / $kolon;
+ $defw_max = floor($w_oc);
+
+ $tableHeader_base = "\\trowd\\trhdr\\trgaph20\\trleft0\\trrh162";
+ $tableHeader_width = "\\cellx".$defw_fc;
+ $tableHeader_title = "\\pard\\intbl\\qc{}\\cell";
+ $tableHeader_finish = "\\pard\\intbl\\row";
+
+ $sqlVsehVrednsti = sisplet_query("SELECT naslov, id, variable FROM srv_grid WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ $rowCnt = 0;
+ while ($rowVsehVrednosti = mysqli_fetch_assoc($sqlVsehVrednsti))
+ {
+ $rowCnt++;
+ $tableHeader_width .= "\\cellx". ( $rowCnt * $defw_max + $defw_fc );
+
+ # priredimo naslov Äe prevajamo anketo
+ $naslov = $this->srv_language_grid($spremenljivke['id'], $rowVsehVrednosti['id']);
+ if ($naslov != '') {
+ $rowVsehVrednosti['naslov'] = $naslov;
+ }
+
+ // Äe ni naslova vzamemo variable
+ $stringHeader_title = $this->enkaEncode( ( $rowVsehVrednosti['naslov'] ) ? $rowVsehVrednosti['naslov'] : $rowVsehVrednosti['variable'] );
+ $tableHeader_title .= "\\pard\\intbl\\qc{".$this->enkaEncode($stringHeader_title)."}\\cell";
+
+ if($spremenljivke['enota'] == 6 || $spremenljivke['enota'] == 9)
+ {
+ array_push($headerTitles, $this->enkaEncode($stringHeader_title));
+ }
+ }
+
+ if($spremenljivke['enota'] != 6 && $spremenljivke['enota'] != 9)
+ {
+ // izpišemo header celice
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader_base.$tableHeader_width.$tableHeader_title.$tableHeader_finish);
+ }
+ // loopamo skozi vrstice in pripravimo podatke za tabelo z radii
+ $row_count = 1;
+ $sqlVrednosti = sisplet_query("SELECT * FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti)){
+ $i=1;
+
+ // barva vrstice
+ $row_color = ($row_count%2 == 1) ? '\\clcbpat18' : '';
+
+ # po potrebi prevedemo naslov
+ $naslov = $this->srv_language_vrednost($rowVrednost['id']);
+ if ($naslov != '') {
+ $rowVrednost['naslov'] = $naslov;
+ }
+
+ // Äe ni naslova vzamemo naslov2, Äe ne pa variable
+ $stringCell_title = $this->enkaEncode( ( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) );
+ $tableHeader_base = "\\trowd\\trgaph12\\trleft0\\trrh262";
+
+ if($spremenljivke['enota'] == 9) //povleci-spusti
+ {
+ $tableHeader_width = "\\cellx".$defw_fc;
+ }else
+ {
+ $tableHeader_width = $row_color."\\cellx".$defw_fc;
+ }
+
+
+ $tableHeader_title = "\\pard\\intbl\\ql\cf0 ".$this->enkaEncode($stringCell_title)."\\cf0\\cell";
+ $tableHeader_finish = "\\pard\\intbl\\row";
+
+ if($spremenljivke['enota'] == 6 && $spremenljivke['enota'] == 9)
+ {
+ array_push($stringCellTitles, $tableHeader_title);
+ }
+
+ $sqlVsehVrednsti = sisplet_query("SELECT id FROM srv_grid WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ while ($rowVsehVrednosti = mysqli_fetch_assoc($sqlVsehVrednsti)){
+
+ $full = false;
+
+ if($spremenljivke['tip'] == 6 && ($spremenljivke['enota'] != 6 && $spremenljivke['enota'] != 9) )
+ {
+ $tableHeader_width .= "\clvertalc".$row_color."\\cellx". ( $i * $defw_max + $defw_fc );
+ if($full)
+ $tableHeader_title .= "\\pard\\intbl\\qc{". $this->rtf->ImageToString("radio2.png", "15")."}\\cell";
+ else
+ $tableHeader_title .= "\\pard\\intbl\\qc{". $this->rtf->ImageToString("radio.png", "15")."}\\cell";
+ }
+ elseif($spremenljivke['tip'] == 16 && ($spremenljivke['enota'] != 6 && $spremenljivke['enota'] != 9) )
+ {
+ $tableHeader_width .= "\clvertalc".$row_color."\\cellx". ( $i * $defw_max + $defw_fc );
+ if($full)
+ $tableHeader_title .= "\\pard\\intbl\\qc{". $this->rtf->ImageToString("checkbox2.png", "15")."}\\cell";
+ else
+ $tableHeader_title .= "\\pard\\intbl\\qc{". $this->rtf->ImageToString("checkbox.png", "15")."}\\cell";
+ }
+ //else{
+ elseif($spremenljivke['enota'] != 6 && $spremenljivke['enota'] != 9)
+ {
+ $tableHeader_width .= "\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10".$row_color."\\cellx". ( $i * $defw_max + $defw_fc );
+ $tableHeader_width .= '\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ $tableHeader_title .= '\\pard\\intbl'.$this->rtf->color(12).' '.$this->rtf->color(0).'\qc{}\\cell';
+ }elseif($spremenljivke['enota'] == 6) //izberite s seznama
+ {
+ if($i == 1)
+ {
+ $odgovoriSeznam = implode("\\line ", $headerTitles); //vsako vrednost iz polja dej v string vsaka v svojo vrstico
+ //$tableHeader_width .= "\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10".$row_color."\\cellx7000";
+ $tableHeader_width .= "\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\\cellx7000";
+ $tableHeader_title .= '\\pard\\intbl'.$this->rtf->color(12).' '.$this->rtf->color(0).'\qc{'.$odgovoriSeznam.'}\\cell';
+ }
+ }elseif($spremenljivke['enota'] == 9) //povleci-spusti
+ {
+ if($i == 1 && $row_count == 1)
+ {
+ $odgovoriSeznam = implode("\\line ", $headerTitles); //vsako vrednost iz polja dej v string vsaka v svojo vrstico
+ //$tableHeader_width .= "\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10".$row_color."\\cellx7000";
+ //$tableHeader_width .= "\clbrdrt".$row_color."\\cellx7000";
+ $tableHeader_width .= "\clbrdrt\\cellx7000";
+ $tableHeader_title .= '\\pard\\intbl'.$this->rtf->color(12).' '.$this->rtf->color(0).'\qc{'.$odgovoriSeznam.'}\\cell';
+ }
+ }
+ $i++;
+ }
+ // Ce imamo diferencial
+ if($spremenljivke['tip'] == 6 && $spremenljivke['enota'] == 1){
+ $stringCell_title2 = $this->enkaEncode($rowVrednost['naslov2']);
+ $tableHeader_width .= $row_color."\\cellx".( ($i-1) * $defw_max + 2*$defw_fc );
+ $tableHeader_title .= "\\pard\\intbl\\ql\cf0 ".$this->enkaEncode($stringCell_title2)."\\cf0\\cell";
+ }
+
+ $row_count++;
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader_base.$tableHeader_width.$tableHeader_title.$tableHeader_finish);
+ }
+ $this->rtf->MyRTF .= "}";
+ }
+
+ if($spremenljivke['enota']==10)//image hot spot
+ {
+ $odgovor = "Image hot spot";
+ $this->rtf->TextCell($odgovor, array('width' => 6500, 'height' => 5, 'border' => array('top','bottom', 'left','right') ) );
+ $this->rtf->new_line(1);
+ }
+/* if($spremenljivke['enota']==9){ //povleci-spusti
+ //$this->rtf->TableFromArrayDragDrop( array( 4750, 4750 ), $SeznamTable, $SeznamBorders, mysqli_num_rows($sqlVrednosti));
+ //$this->rtf->TableFromArrayDragDropGrid( array( 3000, 3000 ), $odgovoriSeznam, $SeznamBorders, mysqli_num_rows($sqlVrednosti));
+
+ if(mysqli_num_rows($sqlVsehVrednsti) > mysqli_num_rows($sqlVrednosti))
+ {
+ $numOfRows = mysqli_num_rows($sqlVsehVrednsti);
+ }else
+ {
+ $numOfRows = mysqli_num_rows($sqlVrednosti);
+ }
+
+ $this->rtf->TableFromArrayDragDropGrid( array( 3000, 3000 ), $stringCellTitles, $numOfRows);
+
+ } */
+
+ $this->rtf->new_line(1);
+ break;
+
+ case 24: // mesan multigrid
+ $this->displayGridMultiple($spremenljivke);
+ break;
+
+ case 4: //text
+ $this->rtf->TextCell("", array('width' => 9500, 'height' => 3, 'border' => array('top','bottom', 'left','right') ) );
+ $this->rtf->new_line(1);
+ break;
+
+ case 21: //besedilo*
+ $this->rtf->new_line(1);
+ $list = array();
+
+ $this->rtf->MyRTF .= "{\par";
+
+ $defw_full = 9500;
+ $defw_part = round($defw_full / $spremenljivke['text_kosov']);
+
+ $tableHeader = '\trowd\trql\trrh800';
+ $podnapisi = '\trowd\trql';
+
+ // iz baze preberemo vse moznosti
+ $sqlVrednosti = sisplet_query("SELECT id, naslov, naslov2, variable FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ for($i=0; $i<$spremenljivke['text_kosov']; $i++){
+
+ $rowVrednost = mysqli_fetch_array($sqlVrednosti);
+
+ # po potrebi prevedemo naslov
+ $naslov = $this->srv_language_vrednost($rowVrednost['id']);
+ if ($naslov != '') {
+ $rowVrednost['naslov'] = $naslov;
+ }
+
+ $stringTitle = $this->enkaEncode( ( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) );
+ $list[] = $stringTitle;
+
+ if($spremenljivke['text_orientation'] == 1){
+ $table .= '\cellx'.( $i * $defw_part + 1000).'\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx'.( ($i+1) * $defw_part);
+ $tableEnd .= '\pard\intbl '.$this->enkaEncode($stringTitle).'\qc\cell\pard\intbl'.$this->rtf->color(12).' '.$userAnswer['text'].$this->rtf->color(0).'\cell';
+ }
+ else{
+ $table .= '\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx'.( ($i+1) * $defw_part );
+ $tableEnd .= '\pard\intbl'.$this->rtf->color(12).' '.$userAnswer['text'].$this->rtf->color(0).'\cell';
+ }
+
+ if($spremenljivke['text_orientation'] == 2){
+ $podnapisi .= '\cellx'.( ($i+1) * $defw_part ).'';
+ $podnapisiEnd .= '\pard\intbl '.$this->enkaEncode($stringTitle).'\qc\cell';
+ }
+ }
+ $tableEnd .= '\pard\intbl\row';
+ $podnapisiEnd .= '\pard\intbl\row';
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd.($spremenljivke['text_orientation'] == 2 ? $podnapisi.$podnapisiEnd : ''));
+ $this->rtf->MyRTF .= "}";
+ $this->rtf->new_line(1);
+
+
+ // Izris polj drugo - ne vem...
+ $sqlVrednost = sisplet_query("SELECT * FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' and other!='0' order BY vrstni_red");
+ while($rowVrednost = mysqli_fetch_array($sqlVrednost)) {
+
+ # po potrebi prevedemo naslov
+ $naslov = $this->srv_language_vrednost($rowVrednost['id']);
+ if ($naslov != '') {
+ $rowVrednost['naslov'] = $naslov;
+ }
+
+ $this->rtf->MyRTF .= $this->rtf->ImageToString("checkbox.png", "15").' '.$this->rtf->enkaEncode($rowVrednost['naslov']);
+ $this->rtf->new_line(1);
+ }
+
+ break;
+
+ case 5: //label
+ $this->rtf->new_line(2);
+ break;
+
+ case 7: //number
+ $this->rtf->new_line(1);
+ $list = array();
+
+ $this->rtf->MyRTF .= "{\par";
+
+ // iz baze preberemo vse moznosti
+ $sqlVrednosti = sisplet_query("SELECT id, naslov, naslov2, variable FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ $rowVrednost = mysqli_fetch_array($sqlVrednosti);
+
+ # po potrebi prevedemo naslov
+ $naslov = $this->srv_language_vrednost($rowVrednost['id']);
+ if ($naslov != '') {
+ $rowVrednost['naslov'] = $naslov;
+ }
+
+ $stringTitle = $this->enkaEncode( ( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) );
+ $list[] = $stringTitle;
+
+ if($spremenljivke['size'] == 1) {
+ if ($spremenljivke['enota'] == 1) {
+ #enota na levi
+ $table = '\trowd\trql\cellx1500\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx3000'
+ .'\qc\pard\intbl '.($this->snippet($this->enkaEncode($stringTitle),20,'...') )
+ .'\qc\cell\pard\intbl '.$this->rtf->color(12).' '.$this->rtf->color(0)
+ .'\qc\cell\pard\intbl\row';
+ } elseif ($spremenljivke['enota'] == 2) {
+ #enota na desni
+ $table = '\trowd\trql\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx1500\cellx3000';
+ $table .= '\qc\pard \intbl '.$this->rtf->color(12).' '.$this->rtf->color(0)
+ .'\qc\cell \pard \intbl '.($this->snippet($this->enkaEncode($stringTitle),20,'...') )
+ .'\qc\cell\pard\intbl\row';
+ } else {
+ #brez enote
+ $table = '\trowd\trql\cellx1500\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx3000'
+ .'\qc\pard\intbl '.
+ '\qc\cell\pard\intbl '.$this->rtf->color(12).' '.$this->rtf->color(0)
+ .'\qc\cell\pard\intbl\row';
+ }
+ } else{
+ $rowVrednost = mysqli_fetch_array($sqlVrednosti);
+
+ # po potrebi prevedemo naslov
+ $naslov = $this->srv_language_vrednost($rowVrednost['id']);
+ if ($naslov != '') {
+ $rowVrednost['naslov'] = $naslov;
+ }
+
+ $stringTitle2 = $this->enkaEncode( ( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) );
+
+ if ($spremenljivke['enota'] == 1) {
+ #enota na levi
+ $table = '\trowd\trql\cellx1500\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx3000\cellx4500\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx6000';
+ $table .= '\qc\pard \intbl '.($this->snippet($this->enkaEncode($stringTitle),20,'...') )
+ .'\qc\cell \pard \intbl '.$this->rtf->color(12).' '.$this->rtf->color(0)
+ .'\qc\cell \pard \intbl '.($this->snippet($this->enkaEncode($stringTitle2),20,'...') )
+ .'\qc\cell \pard \intbl '.$this->rtf->color(12).' '.$this->rtf->color(0)
+ .'\qc\cell \pard \intbl \row';
+ } else if ($spremenljivke['enota'] == 2) {
+ #enota na desni
+ $table = '\trowd\trql\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx1500\cellx3000\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx4500\cellx6000';
+ $table .= '\qc\pard \intbl '.$this->rtf->color(12).' '.$this->rtf->color(0)
+ .'\qc\cell \pard \intbl '.($this->snippet($this->enkaEncode($stringTitle),20,'...') )
+ .'\qc\cell \pard \intbl '.$this->rtf->color(12).' '.$this->rtf->color(0)
+ .'\qc\cell \pard \intbl '.($this->snippet($this->enkaEncode($stringTitle2),20,'...') )
+ .'\qc\cell \pard \intbl \row';
+
+ } else {
+ #brez eneote
+ $table = '\trowd\trql\cellx1500\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx3000\cellx4500\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx6000';
+ $table .= '\qc\pard \intbl '
+ .'\qc\cell \pard \intbl '.$this->rtf->color(12).' '.$this->rtf->color(0)
+ .'\qc\cell \pard \intbl '
+ .'\qc\cell \pard \intbl '.$this->rtf->color(12).' '.$this->rtf->color(0)
+ .'\qc\cell \pard \intbl \row';
+
+ }
+ }
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($table);
+ $this->rtf->MyRTF .= "}";
+ $this->rtf->new_line(1);
+
+ // Izris polj drugo - ne vem...
+ $sqlVrednost = sisplet_query("SELECT * FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' and other!='0' order BY vrstni_red");
+ while($rowVrednost = mysqli_fetch_array($sqlVrednost)) {
+
+ # po potrebi prevedemo naslov
+ $naslov = $this->srv_language_vrednost($rowVrednost['id']);
+ if ($naslov != '') {
+ $rowVrednost['naslov'] = $naslov;
+ }
+
+ $this->rtf->MyRTF .= $this->rtf->ImageToString("checkbox.png", "15").' '.$this->enkaEncode($rowVrednost['naslov']);
+ $this->rtf->new_line(1);
+ }
+
+ break;
+
+ case 8: //datum
+ $this->rtf->MyRTF .= $this->rtf->color(12);
+ $this->rtf->TextCell($this->enkaEncode($userAnswer['text']), array('width' => 2000, 'height' => 1, 'border' => array('top','bottom', 'left','right') ) );
+ $this->rtf->MyRTF .= $this->rtf->color(0);
+ $this->rtf->new_line(1);
+
+ // Izris polj drugo - ne vem...
+ $sqlVrednost = sisplet_query("SELECT * FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' and other!='0' order BY vrstni_red");
+ while($rowVrednost = mysqli_fetch_array($sqlVrednost)) {
+
+ # po potrebi prevedemo naslov
+ $naslov = $this->srv_language_vrednost($rowVrednost['id']);
+ if ($naslov != '') {
+ $rowVrednost['naslov'] = $naslov;
+ }
+
+ $this->rtf->MyRTF .= $this->rtf->ImageToString("checkbox.png", "15").' '.$this->enkaEncode($rowVrednost['naslov']);
+ $this->rtf->new_line(1);
+ }
+
+ break;
+
+ case 18: //vsota
+ $this->rtf->new_line(1);
+ $list = array();
+
+ $this->rtf->MyRTF .= "{\par";
+
+ // iz baze preberemo vse moznosti
+ $sum = 0;
+ $sqlVrednosti = sisplet_query("SELECT id, naslov, naslov2, variable FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti)){
+
+ # po potrebi prevedemo naslov
+ $naslov = $this->srv_language_vrednost($rowVrednost['id']);
+ if ($naslov != '') {
+ $rowVrednost['naslov'] = $naslov;
+ }
+
+ $stringTitle = $this->enkaEncode( ( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) );
+ $list[] = $stringTitle;
+
+ $table .= '\trowd\trql\cellx5000\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx5800\pard\intbl '.$this->snippet($this->enkaEncode($stringTitle),50,'...').'\~\~\qr\cell\pard\intbl'.$this->rtf->color(12).' '.$this->enkaEncode($rowAnswers['text']).$this->rtf->color(0).'\qc\cell\pard\intbl\row';
+
+ $sum += (int)$rowAnswers['text'];
+ }
+
+ $table .= '\trowd \trql\clbrdrb\brdrs\brdrw10\cellx6000\pard \intbl \cell \pard \intbl \row';
+ $table .= '\trowd \trql\cellx6000\pard \intbl \cell \pard \intbl \row';
+
+ $stringTitle = $spremenljivke['vsota'];
+ $table .= '\trowd \trql\cellx5000\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx5800\pard \intbl '.$this->snippet($this->enkaEncode($stringTitle),50,'...').'\~\~\qr\cell \pard \intbl '.$sum.'\qc\cell \pard \intbl \row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($table);
+
+ $this->rtf->MyRTF .= "}";
+ $this->rtf->new_line(1);
+ break;
+
+ case 17: //ranking
+ $this->rtf->new_line(1);
+ $list = array();
+
+ $this->rtf->MyRTF .= "{\par";
+
+ // iz baze preberemo vse moznosti
+ $sqlVrednosti = sisplet_query("SELECT id, naslov, naslov2, variable FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti)){
+
+ # po potrebi prevedemo naslov
+ $naslov = $this->srv_language_vrednost($rowVrednost['id']);
+ if ($naslov != '') {
+ $rowVrednost['naslov'] = $naslov;
+ }
+
+ $stringTitle = $this->enkaEncode( ( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) );
+ $list[] = $stringTitle;
+
+ $table .= '\trowd \trql\cellx1500\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx2300\pard \intbl '.$this->enkaEncode($stringTitle).' \qc\cell \pard \intbl'.$this->rtf->color(12).' '.$this->enkaEncode($rowAnswers['vrstni_red']).$this->rtf->color(0).'\qc\cell \pard \intbl \row';
+ }
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($table);
+ $this->rtf->MyRTF .= "}";
+ $this->rtf->new_line(1);
+ break;
+ case 26: //lokacija
+ $odgovor = "Google Maps";
+ $this->rtf->TextCell($odgovor, array('width' => 6500, 'height' => 5, 'border' => array('top','bottom', 'left','right') ) );
+ $this->rtf->new_line(1);
+ break;
+ case 27: //heatmap
+ $odgovor = "Heatmap";
+ $this->rtf->TextCell($odgovor, array('width' => 6500, 'height' => 5, 'border' => array('top','bottom', 'left','right') ) );
+ $this->rtf->new_line(1);
+ break;
+ }
+ }
+
+ function displayDoubleGrid($spremenljivke) {
+
+ $this->rtf->MyRTF .= "{\\par\\fs22";
+ $defw_full = 9500;
+ $defw_fc = 1200; // first cell width
+ $defw_max = 800; // max other cell width
+
+ $maxcellx = 9500;
+
+ $sqlStVrednosti = sisplet_query("SELECT count(*) AS count FROM srv_grid WHERE spr_id='".$spremenljivke['id']."' ORDER BY id");
+ $rowStVrednost = mysqli_fetch_row($sqlStVrednosti);
+ $kolon = $rowStVrednost[0]+1;
+ $w_oc = ( $defw_full - $defw_fc ) / $kolon;
+ if ( $w_oc > $defw_max )
+ $w_oc = $defw_max;
+
+ //izpis dveh podnaslovov gridov
+ $tableHeader_base = "\\trowd\\trhdr\\trgaph20\\trleft0\\trrh162";
+
+ $tableHeader_width = "\\cellx".$defw_fc;
+ $tableHeader_title = "\\pard\\intbl\\qc{}\\cell";
+
+ $tableHeader_width .= "\\clbrdrb\\brdrs\\brdrw10\\cellx". ( ($kolon-1)*400 + $defw_fc );
+ $tableHeader_title .= "\\pard\\intbl\\qc{".$this->enkaEncode($spremenljivke['grid_subtitle1'])."}\\cell";
+ $tableHeader_width .= "\\clbrdrl\\brdrs\\brdrw10\\clbrdrb\\brdrs\\brdrw10\\cellx". ( ($kolon-1)*800 + $defw_fc );
+ $tableHeader_title .= "\\pard\\intbl\\qc{".$this->enkaEncode($spremenljivke['grid_subtitle2'])."}\\cell";
+
+ $tableHeader_finish = "\\pard\\intbl\\row";
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader_base.$tableHeader_width.$tableHeader_title.$tableHeader_finish);
+
+
+ $tableHeader_base = "\\trowd\\trhdr\\trgaph20\\trleft0\\trrh162";
+ $tableHeader_width = "\\cellx".$defw_fc;
+ $tableHeader_title = "\\pard\\intbl\\qc{}\\cell";
+ $tableHeader_finish = "\\pard\\intbl\\row";
+
+ $sqlVsehVrednsti = sisplet_query("SELECT naslov, id, variable, part FROM srv_grid WHERE spr_id='".$spremenljivke['id']."' ORDER BY part, vrstni_red");
+ $rowCnt = 0;
+ $border = false;
+ while ($rowVsehVrednosti = mysqli_fetch_assoc($sqlVsehVrednsti))
+ {
+ //izris srednjega borderja
+ if($border == false && $rowVsehVrednosti['part'] == 2){
+ $border = true;
+ $leftBorder = '\clbrdrl\brdrs\brdrw10';
+ }
+ else
+ $leftBorder = '';
+
+ $rowCnt++;
+ $tableHeader_width .= $leftBorder."\\cellx". ( $rowCnt * 800 +$defw_fc );
+
+ # priredimo naslov Äe prevajamo anketo
+ $naslov = $this->srv_language_grid($spremenljivke['id'], $rowVsehVrednosti['id']);
+ if ($naslov != '') {
+ $rowVsehVrednosti['naslov'] = $naslov;
+ }
+
+ // Äe ni naslova vzamemo variable
+ $stringHeader_title = $this->enkaEncode( ( $rowVsehVrednosti['naslov'] ) ? $rowVsehVrednosti['naslov'] : $rowVsehVrednosti['variable'] );
+ $tableHeader_title .= "\\pard\\intbl\\qc{".$this->enkaEncode($stringHeader_title)."}\\cell";
+ }
+ // izpišemo header celice
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader_base.$tableHeader_width.$tableHeader_title.$tableHeader_finish);
+
+ // loopamo skozi vrstice in pripravimo podatke za tabelo z radii
+ $sqlVrednosti = sisplet_query("SELECT * FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti)){
+ $i=1;
+
+ # po potrebi prevedemo naslov
+ $naslov = $this->srv_language_vrednost($rowVrednost['id']);
+ if ($naslov != '') {
+ $rowVrednost['naslov'] = $naslov;
+ }
+
+ // Äe ni naslova vzamemo naslov2, Äe ne pa variable
+ $stringCell_title = $this->enkaEncode( ( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) );
+
+ // Å¡e dodamo textbox Äe je polj other
+ $_txt = '';
+ $stringCell_title .= $_txt;
+
+ $tableHeader_base = "\\trowd\\trgaph12\\trleft0\\trrh262";
+ $tableHeader_width = "\\cellx".$defw_fc;
+ $tableHeader_title = "\\pard\\intbl\\ql\cf0 ".$this->enkaEncode($stringCell_title)."\\cf0\\cell";
+ $tableHeader_finish = "\\pard\\intbl\\row";
+
+ $border = false;
+ $sqlVsehVrednsti = sisplet_query("SELECT id, part FROM srv_grid WHERE spr_id='".$spremenljivke['id']."' ORDER BY part, vrstni_red");
+ while ($rowVsehVrednosti = mysqli_fetch_assoc($sqlVsehVrednsti)){
+
+ //izris srednjega borderja
+ if($border == false && $rowVsehVrednosti['part'] == 2){
+ $border = true;
+ $leftBorder = '\clbrdrl\brdrs\brdrw10';
+ }
+ else
+ $leftBorder = '';
+
+ $full = false;
+
+ if($spremenljivke['tip'] == 6){
+ $tableHeader_width .= "\clvertalc".$leftBorder."\\cellx". ( $i * 800 +$defw_fc );
+ if($full)
+ $tableHeader_title .= "\\pard\\intbl\\qc{". $this->rtf->ImageToString("radio2.png", "15")."}\\cell";
+ else
+ $tableHeader_title .= "\\pard\\intbl\\qc{". $this->rtf->ImageToString("radio.png", "15")."}\\cell";
+ }
+ elseif($spremenljivke['tip'] == 16){
+ $tableHeader_width .= "\clvertalc".$leftBorder."\\cellx". ( $i * 800 +$defw_fc );
+ if($full)
+ $tableHeader_title .= "\\pard\\intbl\\qc{". $this->rtf->ImageToString("checkbox2.png", "15")."}\\cell";
+ else
+ $tableHeader_title .= "\\pard\\intbl\\qc{". $this->rtf->ImageToString("checkbox.png", "15")."}\\cell";
+ }
+ $i++;
+ }
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader_base.$tableHeader_width.$tableHeader_title.$tableHeader_finish);
+ }
+ $this->rtf->MyRTF .= "}";
+ $this->rtf->new_line(1);
+ }
+
+ // Izpis mesanega multigrida
+ function displayGridMultiple($spremenljivke){
+
+ $this->rtf->MyRTF .= "{\\par\\fs22";
+
+ $defw_full = 10500;
+ if($rowStVrednost[0] < 6){
+ $defw_fc = 4300; // first cell width
+ }
+ else{
+ $defw_fc = 2000; // first cell width
+ }
+
+ $sqlStVrednosti = sisplet_query("SELECT count(*) FROM srv_grid g, srv_grid_multiple m WHERE m.spr_id=g.spr_id AND m.parent='".$spremenljivke['id']."'");
+ $rowStVrednost = mysqli_fetch_array($sqlStVrednosti);
+
+ $kolon = $rowStVrednost['count(*)'] + 1;
+ $w_oc = ( $defw_full - $defw_fc ) / $kolon;
+ $defw_max = floor($w_oc);
+
+ $tableHeader_base = "\\trowd\\trhdr\\trgaph20\\trleft0\\trrh162";
+ $tableHeader_width = "\\cellx".$defw_fc;
+ $tableHeader_title = "\\pard\\intbl\\qc{}\\cell";
+ $tableHeader_finish = "\\pard\\intbl\\row";
+
+ $sqlM = sisplet_query("SELECT * FROM srv_grid_multiple WHERE parent='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ $multiple = array();
+ while ($rowM = mysqli_fetch_array($sqlM)) {
+ $multiple[] = $rowM['spr_id'];
+ }
+
+ $sqlVsehVrednsti = sisplet_query("SELECT g.id,g.naslov,g.variable,m.vrstni_red FROM srv_grid g, srv_grid_multiple m WHERE m.parent='".$spremenljivke['id']."' AND g.spr_id=m.spr_id ORDER BY m.vrstni_red");
+ $sqlMultiple = sisplet_query("SELECT g.*, s.tip, s.enota, s.dostop FROM srv_grid g, srv_grid_multiple m, srv_spremenljivka s WHERE s.id=g.spr_id AND g.spr_id=m.spr_id AND m.spr_id IN (".implode($multiple, ',').") ORDER BY m.vrstni_red, g.vrstni_red");
+ $rowCnt = 0;
+ while ($rowVsehVrednosti = mysqli_fetch_assoc($sqlVsehVrednsti))
+ {
+ $rowCnt++;
+ $tableHeader_width .= "\\cellx". ( $rowCnt * $defw_max + $defw_fc );
+
+ # priredimo naslov Äe prevajamo anketo
+ $rowMultiple = mysqli_fetch_array($sqlMultiple);
+ $naslov = $this->srv_language_grid($rowMultiple['spr_id'], $rowMultiple['id']);
+ if ($naslov != '') {
+ $rowVsehVrednosti['naslov'] = $naslov;
+ }
+
+ // Äe ni naslova vzamemo variable
+ $stringHeader_title = $this->enkaEncode( ( $rowVsehVrednosti['naslov'] ) ? $rowVsehVrednosti['naslov'] : $rowVsehVrednosti['variable'] );
+ $tableHeader_title .= "\\pard\\intbl\\qc{".$this->enkaEncode($stringHeader_title)."}\\cell";
+ }
+ // izpišemo header celice
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader_base.$tableHeader_width.$tableHeader_title.$tableHeader_finish);
+
+ // loopamo skozi vrstice in pripravimo podatke za tabelo z radii
+ $row_count = 1;
+ $sqlVrednosti = sisplet_query("SELECT * FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti)){
+ $i=1;
+
+ // barva vrstice
+ $row_color = ($row_count%2 == 1) ? '\\clcbpat18' : '';
+
+ # po potrebi prevedemo naslov
+ $naslov = $this->srv_language_vrednost($rowVrednost['id']);
+ if ($naslov != '') {
+ $rowVrednost['naslov'] = $naslov;
+ }
+
+ // Äe ni naslova vzamemo naslov2, Äe ne pa variable
+ $stringCell_title = $this->enkaEncode( ( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) );
+ $tableHeader_base = "\\trowd\\trgaph12\\trleft0\\trrh262";
+ $tableHeader_width = $row_color."\\cellx".$defw_fc;
+ $tableHeader_title = "\\pard\\intbl\\ql\cf0 ".$this->enkaEncode($stringCell_title)."\\cf0\\cell";
+ $tableHeader_finish = "\\pard\\intbl\\row";
+
+ $sqlVsehVrednsti = sisplet_query("SELECT g.id AS id, s.tip AS tip, m.vrstni_red AS vrstni_red FROM srv_grid g, srv_spremenljivka s, srv_grid_multiple m WHERE m.parent='".$spremenljivke['id']."' AND m.spr_id=s.id AND s.id=g.spr_id ORDER BY m.vrstni_red");
+ while ($rowVsehVrednosti = mysqli_fetch_assoc($sqlVsehVrednsti)){
+
+ $full = false;
+
+ if($rowVsehVrednosti['tip'] == 6){
+ $tableHeader_width .= "\clvertalc".$row_color."\\cellx". ( $i * $defw_max + $defw_fc );
+ if($full)
+ $tableHeader_title .= "\\pard\\intbl\\qc{". $this->rtf->ImageToString("radio2.png", "15")."}\\cell";
+ else
+ $tableHeader_title .= "\\pard\\intbl\\qc{". $this->rtf->ImageToString("radio.png", "15")."}\\cell";
+ }
+ elseif($rowVsehVrednosti['tip'] == 16){
+ $tableHeader_width .= "\clvertalc".$row_color."\\cellx". ( $i * $defw_max + $defw_fc );
+ if($full)
+ $tableHeader_title .= "\\pard\\intbl\\qc{". $this->rtf->ImageToString("checkbox2.png", "15")."}\\cell";
+ else
+ $tableHeader_title .= "\\pard\\intbl\\qc{". $this->rtf->ImageToString("checkbox.png", "15")."}\\cell";
+ }
+ else{
+ $tableHeader_width .= "\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10".$row_color."\\cellx". ( $i * $defw_max + $defw_fc );
+ $tableHeader_width .= '\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ $tableHeader_title .= '\\pard\\intbl'.$this->rtf->color(12).' '.$this->rtf->color(0).'\qc{}\\cell';
+ }
+ $i++;
+ }
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader_base.$tableHeader_width.$tableHeader_title.$tableHeader_finish);
+
+ $row_count++;
+ }
+ $this->rtf->MyRTF .= "}";
+ $this->rtf->new_line(1);
+ }
+
+
+ function createFrontPage(){
+ global $lang;
+
+ if ($this->language != -1) {
+ SurveySetting::getInstance()->Init($this->anketa['id']);
+ $_lang = '_'.$this->language;
+ $srv_anketa_naslov = SurveySetting::getInstance()->getSurveyMiscSetting('srvlang_srv_novaanketa_kratkoime'.$_lang);
+ }
+ else{
+ $srv_anketa_naslov = SurveyInfo::getInstance()->getSurveyAkronim();
+ }
+
+ $this->rtf->new_line(10);
+
+ if($this->allResults == 1){
+ $this->rtf->TextCell($this->rtf->bold(1).$this->enkaEncode($srv_anketa_naslov).$this->rtf->bold(0).'\\line\n '.$lang['export_firstpage_results'], array('width' => 9500, 'height' => 3,
+ 'align' => 'center', 'valign' => 'middle' , 'border' => array('top','bottom', 'left','right'),
+ 'colorF' => "0", 'colorB' => "0" ) );
+ }
+ elseif($this->allResults == 2){
+ $this->rtf->TextCell($this->rtf->bold(1).$this->enkaEncode($srv_anketa_naslov).$this->rtf->bold(0).'\\line\n '.$lang['srv_testiranje_komentarji'], array('width' => 9500, 'height' => 3,
+ 'align' => 'center', 'valign' => 'middle' , 'border' => array('top','bottom', 'left','right'),
+ 'colorF' => "0", 'colorB' => "0" ) );
+ }
+ else{
+ $this->rtf->TextCell($this->enkaEncode($srv_anketa_naslov), array('width' => 9500, 'height' => 3,
+ 'align' => 'center', 'valign' => 'middle' , 'border' => array('top','bottom', 'left','right'),
+ 'colorF' => "0", 'colorB' => "0" ) );
+ }
+
+ $this->rtf->new_line(3);
+ // dodamo info:
+ $this->rtf->TextCell("", array('width' => 9500, 'height' => 1,
+ 'align' => 'left', 'valign' => 'bottom' , 'border' => array('bottom'),'colorF' => "0" ) );
+
+ $infoTable = array();
+ array_push( $infoTable, array( $lang['export_firstpage_shortname'].': '.$this->enkaEncode(SurveyInfo::getInstance()->getSurveyTitle()), "" ) );
+ if ( SurveyInfo::getInstance()->getSurveyTitle() != SurveyInfo::getInstance()->getSurveyAkronim() )
+ array_push( $infoTable, array( $lang['export_firstpage_longname'].': '.$this->enkaEncode($srv_anketa_naslov), "" ) );
+ array_push( $infoTable, array( $lang['export_firstpage_qcount'].': '.SurveyInfo::getInstance()->getSurveyQuestionCount(), "" ) );
+
+ // Aktiviranost
+ $activity = SurveyInfo:: getSurveyActivity();
+ $_last_active = end($activity);
+ if (SurveyInfo::getSurveyColumn('active') == 1) {
+ array_push( $infoTable, array( $this->rtf->color(11).$this->enkaEncode($lang['srv_anketa_active2']).$this->rtf->color(0), "") );
+ } else {
+ # preverimo ali je bila anketa že aktivirana
+ if (!isset($_last_active['starts'])) {
+ # anketa Å¡e sploh ni bila aktivirana
+ array_push( $infoTable, array( $this->rtf->color(17).$this->enkaEncode($lang['srv_survey_non_active_notActivated']).$this->rtf->color(0), "") );
+ } else {
+ # anketa je že bila aktivirna ampak je sedaj neaktivna
+ array_push( $infoTable, array( $this->rtf->color(17).$this->enkaEncode($lang['srv_survey_non_active']).$this->rtf->color(0), "") );
+ }
+ }
+
+ // Aktivnost
+ if( count($activity) > 0 ){
+ array_push( $infoTable, array( $lang['export_firstpage_active_from'].': '.SurveyInfo::getInstance()->getSurveyStartsDate(), $lang['export_firstpage_active_until'].': '.SurveyInfo::getInstance()->getSurveyExpireDate() ) );
+ }
+
+ array_push( $infoTable, array( $lang['export_firstpage_author'].': '.SurveyInfo::getInstance()->getSurveyInsertName(), $lang['export_firstpage_edit'].': '.SurveyInfo::getInstance()->getSurveyEditName() ) );
+ array_push( $infoTable, array( $lang['export_firstpage_date'].': '.SurveyInfo::getInstance()->getSurveyInsertDate(), $lang['export_firstpage_date'].': '.SurveyInfo::getInstance()->getSurveyEditDate() ) );
+ array_push( $infoTable, array( $lang['export_firstpage_desc'].': '.SurveyInfo::getInstance()->getSurveyInfo(), "" ) );
+ $this->rtf->TableFromArray( array( 4750, 4750 ), $infoTable, array('spacer' => 0));
+
+ if($this->allResults != 1)
+ $this->rtf->new_page();
+ }
+
+ function enkaEncode($text)
+ {
+ global $site_url;
+
+ // preverimo text za img tage in jih zamenjamo z ustrezno sliko
+ $pattern = '/<img[^>]+src[\\s=\'"]';
+ $pattern .= '+([^"\'>\\s]+)/is';
+ if(preg_match($pattern, $text, $match, PREG_OFFSET_CAPTURE)){
+
+ // relativna pot
+ if(substr($match[1][0], 0, 1) == '/')
+ $image = $site_url.$match[1][0];
+ else
+ $image = $match[1][0];
+
+ $file = @file_get_contents($image);
+
+
+ // Resizamo sliko na pravo velikost
+ $imgSize = getimagesize($image);
+ $origHeight = $imgSize[1];
+ $origWidth = $imgSize[0];
+
+ // Dobimo nastavljeno visino slike
+ $pattern = '/<img[^>]+height[\\s=\'"]';
+ $pattern .= '+([^"\'>\\s]+)/is';
+ preg_match($pattern, $text, $match, PREG_OFFSET_CAPTURE);
+ $height = round($match[1][0] / $origHeight) * 100;
+
+ // Dobimo nastavljeno sirino slike
+ $pattern = '/<img[^>]+width[\\s=\'"]';
+ $pattern .= '+([^"\'>\\s]+)/is';
+ preg_match($pattern, $text, $match, PREG_OFFSET_CAPTURE);
+ $width = round($match[1][0] / $origWidth) * 100;
+
+
+ $result .= "{";
+ $result .= "\\pict\\jpegblip\\picscalex".$width."\\picscaley".$height."\\bliptag132000428 ";
+ $result .= trim(bin2hex($file));
+ $result .= "\n}\n";
+
+ $text = preg_replace("/<img[^>]+\>/i", $result, $text);
+ }
+
+ // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+
+ $transliterationTable = array(
+ 'à' => 'a',
+ 'À' => 'A',
+ 'è' => 'e',
+ 'È' => 'E',
+ 'ì' => 'i',
+ 'Ì' => 'I',
+ 'ò' => 'o',
+ 'Ã’' => 'O',
+ 'ù' => 'u',
+ 'Ù' => 'U',
+ 'ø' => 'o',
+ 'Ø' => 'O',
+ 'Ã¥' => 'a',
+ 'Ã…' => 'A',
+ 'Æ' => 'AE',
+ 'æ' => 'ae'
+ );
+ $text = str_replace(array_keys($transliterationTable), array_values($transliterationTable), $text);
+
+ return strip_tags($text);
+ }
+
+/* Skrajsa niz in doda ... nakoncu
+ * snippet(phrase,[max length],[phrase tail])
+ * snippetgreedy(phrase,[max length before next space],[phrase tail])
+ *
+ * iz: http://snipplr.com/view/9520/php-substring-without-breaking-words/
+ */
+ function snippet($text,$length=64,$tail="...")
+ {
+ $text = trim($text);
+ $txtl = strlen($text);
+ if($txtl > $length)
+ {
+ for($i=1;$text[$length-$i]!=" ";$i++)
+ {
+ if($i == $length)
+ {
+ return substr($text,0,$length) . $tail;
+ }
+ }
+ $text = substr($text,0,$length-$i+1) . $tail;
+ }
+ return $text;
+ }
+
+ function setGrupa($grupa) {$this->grupa = $grupa;}
+ function getGrupa() {return $this->grupa;}
+ function setUserId($usrId) {$this->usrId = $usrId;}
+ function getUserId() {return ($this->usrId)?$this->usrId:false;}
+ function setDisplayFrontPage($display) {$this->pi['displayFrontPage'] = $display;}
+ function getDisplayFrontPage() {return ($this->pi['displayFrontPage'] == true || $this->pi['displayFrontPage'] == 1);}
+
+ /**
+ * @desc preveri ali so na trenutni grupi prikazana vprasanja (zaradi branchinga)
+ */
+ function checkGrupa () {
+
+ $sql = sisplet_query("SELECT id FROM srv_spremenljivka WHERE gru_id = '".$this->grupa."'");
+ if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
+ while ($row = mysqli_fetch_array($sql)) {
+
+ if ($this->checkSpremenljivka($row['id']))
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * @desc preveri ali je spremenljivka vidna (zaradi branchinga)
+ */
+ function checkSpremenljivka ($spremenljivka) {
+
+ $sql = sisplet_query("SELECT * FROM srv_spremenljivka WHERE id = '".$spremenljivka."'");
+ if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
+ $row = mysqli_fetch_array($sql);
+
+ if ($row['visible'] == 0) return false;
+
+ $sql1 = sisplet_query("SELECT * FROM srv_branching WHERE element_spr = '".$spremenljivka."'");
+ if (!$sql1) echo mysqli_error($GLOBALS['connect_db']);
+ $row1 = mysqli_fetch_array($sql1);
+
+ /*if (!$this->checkIf($row1['parent']))
+ return false;*/
+
+ return true;
+ }
+
+ /**
+ * @desc preveri ali se elementi v podanem IFu prikazejo ali ne
+ */
+ function checkIf ($if) {
+ if ($if == 0) return true;
+
+ // preverimo po strukturi navzgor
+ $sql = sisplet_query("SELECT * FROM srv_branching WHERE element_if = '".$if."'");
+ if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
+ $row = mysqli_fetch_array($sql);
+ if (!$this->checkIf($row['parent'])) return false;
+
+ // ce je IF oznacen kot blok, potem se vedno prikaze
+ $sql = sisplet_query("SELECT * FROM srv_if WHERE id = '$if'");
+ if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
+ $row = mysqli_fetch_array($sql);
+ if ($row['tip'] == 1) return true;
+
+
+ $eval = "if (";
+
+ $sql = sisplet_query("SELECT * FROM srv_condition WHERE if_id = '$if' ORDER BY vrstni_red ASC");
+ if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
+
+ $i = 0;
+ // zgeneriramo pogoje z oklepaji, ki jih potem spustimo skozi eval
+ while ($row = mysqli_fetch_array($sql)) {
+
+ if ($i++ != 0)
+ if ($row['conjunction'] == 0)
+ $eval .= ' && ';
+ else
+ $eval .= ' || ';
+
+ if ($row['negation'] == 1)
+ $eval .= ' ! ';
+
+ for ($i=1; $i<=$row['left_bracket']; $i++)
+ $eval .= ' ( ';
+
+ if ($this->checkCondition($row[id]))
+ $eval .= ' true ';
+ else
+ $eval .= ' false ';
+
+ for ($i=1; $i<=$row['right_bracket']; $i++)
+ $eval .= ' ) ';
+
+ }
+ $eval .= ") return true; else return false; ";
+
+ // ne glih best practice, ampak takle mamo...
+ return eval($eval);
+
+ }
+
+ /**
+ * @desc preveri podani condition
+ */
+ function checkCondition ($condition) {
+
+ $sql = sisplet_query("SELECT * FROM srv_condition WHERE id = '$condition'");
+ if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
+ $row = mysqli_fetch_array($sql);
+
+ // obicne spremenljivke
+ if ($row['spr_id'] > 0) {
+ $sql2 = sisplet_query("SELECT * FROM srv_spremenljivka WHERE id = '$row[spr_id]'");
+ $row2 = mysqli_fetch_array($sql2);
+
+
+ // radio, checkbox, dropdown in multigrid
+ if ($row2['tip'] <= 3 || $row2['tip'] == 6) {
+
+ // obicne spremenljivke
+ if ($row['vre_id'] == 0) {
+ $sql3 = sisplet_query("SELECT * FROM srv_condition_vre c, srv_data_vrednost".$this->db_table." v
+ WHERE c.cond_id='$condition' AND c.vre_id=v.vre_id
+ AND v.spr_id='$row[spr_id]' AND usr_id='".$this->getUserId()."'");
+ if ($row['operator'] == 0 && mysqli_num_rows($sql3) == 0)
+ return false;
+ elseif ($row['operator'] == 1 && mysqli_num_rows($sql3) > 0)
+ return false;
+ // multigrid
+ } elseif ($row['vre_id'] > 0) {
+ $sql3 = sisplet_query("SELECT * FROM srv_condition_grid c, srv_data_grid".$this->db_table." d
+ WHERE c.cond_id='$condition' AND d.spr_id='$row[spr_id]'
+ AND c.grd_id=d.grd_id AND d.usr_id='".$this->getUserId()."'");
+ if (!$sql3) echo mysqli_error($GLOBALS['connect_db']);
+ if ($row['operator'] == 0 && !mysqli_num_rows($sql3) > 0)
+ return false;
+ elseif ($row['operator'] == 1 && !mysqli_num_rows($sql3) == 0)
+ return false;
+ }
+
+ // number in text
+ } else {
+
+ $sql3 = sisplet_query("SELECT * FROM srv_data_text".$this->db_table." WHERE spr_id='$row[spr_id]' AND usr_id='".$this->getUserId()."'");
+ if (!$sql3) echo mysqli_error($GLOBALS['connect_db']);
+ $row3 = mysqli_fetch_array($sql3);
+
+ if ($row['operator'] == 0 && !($row3['text'] == $row['text']))
+ return false;
+ elseif ($row['operator'] == 1 && !($row3['text'] != $row['text']))
+ return false;
+ elseif ($row['operator'] == 2 && !($row3['text'] < $row['text']))
+ return false;
+ elseif ($row['operator'] == 3 && !($row3['text'] <= $row['text']))
+ return false;
+ elseif ($row['operator'] == 4 && !($row3['text'] > $row['text']))
+ return false;
+ elseif ($row['operator'] == 5 && !($row3['text'] >= $row['text']))
+ return false;
+
+ }
+
+ // recnum
+ } elseif ($row['spr_id'] == -1) {
+
+ $sqlu = sisplet_query("SELECT * FROM srv_user WHERE id = '".$this->getUserId()."'");
+ $rowu = mysqli_fetch_array($sqlu);
+
+ if (!($rowu['recnum'] % $row['modul'] == $row['ostanek']))
+ return false;
+
+ }
+
+ return true;
+ }
+
+ /**
+ * @desc poisce naslednjo stran - grupo, 0 pomeni konec
+ */
+ function findNextGrupa() {
+
+ //vrstni red trenutne grupe
+ if ($this->grupa > 0) {
+ $sql = sisplet_query("SELECT * FROM srv_grupa WHERE id = '".$this->grupa."'");
+ $row = mysqli_fetch_array($sql);
+ $vrstni_red = $row['vrstni_red'];
+ } else {
+ $vrstni_red = 0;
+ }
+
+ $sql = sisplet_query("SELECT * FROM srv_grupa WHERE ank_id='".$this->anketa['id']."' AND vrstni_red>'".$vrstni_red."' ORDER BY vrstni_red ASC LIMIT 1");
+
+ // naslednja stran
+ if (mysqli_num_rows($sql) > 0) {
+ $row = mysqli_fetch_array($sql);
+ return $row['id'];
+ }
+
+ // konec
+ else {
+ return 0;
+ }
+ }
+
+ // preverja ce je v stringu img in vrne razbit niz ce je
+ function checkImage($text)
+ {
+ $textArray = array();
+
+ $pattern = '/<img[^>]+src[\\s=\'"]';
+ $pattern .= '+([^"\'>\\s]+)/is';
+
+ if(preg_match($pattern, $text, $match, PREG_OFFSET_CAPTURE)){
+ $textArray['image'] = $match[1][0];
+
+ $text = preg_replace("/<img[^>]+\>/i", "", $text);
+ $textArray['text1'] = substr($text, 0, $match[0][1]);
+ $textArray['text2'] = substr($text, $match[0][1]);
+ }
+
+ return $textArray;
+ }
+
+ function displayIf($if){
+ global $lang;
+
+ $sql_if = sisplet_query("SELECT * FROM srv_if WHERE id = '$if'");
+ $row_if = mysqli_fetch_array($sql_if);
+
+ // Blok
+ if($row_if['tip'] == 1)
+ $output = strtoupper($lang['srv_block']).' ';
+ // Loop
+ elseif($row_if['tip'] == 2)
+ $output = strtoupper($lang['srv_loop']).' ';
+ // IF
+ else
+ $output = 'IF ';
+
+ $sql_if = sisplet_query("SELECT * FROM srv_if WHERE id = '$if'");
+ $row_if = mysqli_fetch_array($sql_if);
+ $output .= '('.$row_if['number'].') ';
+
+ $sql = Cache::srv_condition($if);
+
+ $bracket = 0;
+ $i = 0;
+ while ($row = mysqli_fetch_array($sql)) {
+
+ if ($i++ != 0)
+ if ($row['conjunction'] == 0)
+ $output .= ' and ';
+ else
+ $output .= ' or ';
+
+ if ($row['negation'] == 1)
+ $output .= ' NOT ';
+
+ for ($i=1; $i<=$row['left_bracket']; $i++)
+ $output .= ' ( ';
+
+ // obicajne spremenljivke
+ if ($row['spr_id'] > 0) {
+
+ $row2 = Cache::srv_spremenljivka($row['spr_id']);
+
+ // obicne spremenljivke
+ if ($row['vre_id'] == 0) {
+ $row1 = Cache::srv_spremenljivka($row['spr_id']);
+ // multigrid
+ } elseif ($row['vre_id'] > 0) {
+ $sql1 = sisplet_query("SELECT * FROM srv_vrednost WHERE id = '$row[vre_id]'");
+ $row1 = mysqli_fetch_array($sql1);
+ } else
+ $row1 = null;
+
+ $output .= $row1['variable'];
+
+ // radio, checkbox, dropdown in multigrid
+ if (($row2['tip'] <= 3 || $row2['tip'] == 6) && ($row['spr_id'] || $row['vre_id'])) {
+
+ if ($row['operator'] == 0)
+ $output .= ' = ';
+ else
+ $output .= ' != ';
+
+ $output .= '[';
+
+ // obicne spremenljivke
+ if ($row['vre_id'] == 0) {
+ $sql2 = sisplet_query("SELECT * FROM srv_condition_vre c, srv_vrednost v WHERE cond_id='$row[id]' AND c.vre_id=v.id");
+
+ $j = 0;
+ while ($row2 = mysqli_fetch_array($sql2)) {
+ if ($j++ != 0) $output .= ', ';
+ $output .= $row2['variable'];
+ }
+ // multigrid
+ } elseif ($row['vre_id'] > 0) {
+ $sql2 = sisplet_query("SELECT g.* FROM srv_condition_grid c, srv_grid g WHERE c.cond_id='$row[id]' AND c.grd_id=g.id AND g.spr_id='$row[spr_id]'");
+
+ $j = 0;
+ while ($row2 = mysqli_fetch_array($sql2)) {
+ if ($j++ != 0) $output .= ', ';
+ $output .= $row2['variable'];
+ }
+ }
+
+ $output .= ']';
+
+ // textbox in nubmer mata drugacne pogoje in opcije
+ } elseif ($row2['tip'] == 4 || $row2['tip'] == 21 || $row2['tip'] == 7 || $row2['tip'] == 22) {
+
+ if ($row['operator'] == 0)
+ $output .= ' = ';
+ elseif ($row['operator'] == 1)
+ $output .= ' <> ';
+ elseif ($row['operator'] == 2)
+ $output .= ' < ';
+ elseif ($row['operator'] == 3)
+ $output .= ' <= ';
+ elseif ($row['operator'] == 4)
+ $output .= ' > ';
+ elseif ($row['operator'] == 5)
+ $output .= ' >= ';
+
+ $output .= '\''.$row['text'].'\'';
+
+ }
+
+ // recnum
+ } elseif ($row['spr_id'] == -1) {
+
+ $output .= 'mod(recnum, '.$row['modul'].') = '.$row['ostanek'];
+
+ }
+
+ for ($i=1; $i<=$row['right_bracket']; $i++)
+ $output .= ' ) ';
+ }
+
+ if ($row_if['label'] != '') {
+ $output .= ' (';
+ $output .= ' '.$row_if['label'].' ';
+ $output .= ') ';
+ }
+
+ $this->rtf->add_text($this->rtf->bold(1).$this->enkaEncode($output).$this->rtf->bold(0));
+ }
+
+ /**
+ * prevod za srv_spremenljivka
+ */
+ function srv_language_spremenljivka ($spremenljivka) {
+
+ if ($this->language != -1) {
+ $sqll = sisplet_query("SELECT * FROM srv_language_spremenljivka WHERE ank_id='".$this->anketa['id']."' AND spr_id='".$spremenljivka['id']."' AND lang_id='".$this->language."'");
+ $rowl = mysqli_fetch_array($sqll);
+
+ return $rowl;
+ }
+
+ return false;
+ }
+
+ /**
+ * vrne prevod za srv_vrednost
+ *
+ * @param mixed $vrednost
+ */
+ function srv_language_vrednost ($vrednost) {
+
+ if ($this->language != -1) {
+ $sqll = sisplet_query("SELECT * FROM srv_language_vrednost WHERE ank_id='".$this->anketa['id']."' AND vre_id='".$vrednost."' AND lang_id='".$this->language."'");
+ $rowl = mysqli_fetch_array($sqll);
+
+ if ($rowl['naslov'] != '')
+ return strip_tags($rowl['naslov']);
+ }
+
+ return false;
+ }
+
+ /**
+ * vrne prevod za srv_grid
+ *
+ * @param mixed $vrednost
+ */
+ function srv_language_grid ($spremenljivka, $grid) {
+
+ if ($this->language != -1) {
+ $sqll = sisplet_query("SELECT * FROM srv_language_grid WHERE ank_id='".$this->anketa['id']."' AND spr_id='".$spremenljivka."' AND grd_id='".$grid."' AND lang_id='".$this->language."'");
+ $rowl = mysqli_fetch_array($sqll);
+
+ if ($rowl['naslov'] != '') return $rowl['naslov'];
+ }
+
+ return false;
+ }
+
+ /**
+ * vrne prevod za uvod
+ *
+ */
+ function srv_language_intro () {
+
+ // Prevedemo uvod ce je slucajno potrebno
+ if ($this->language != -1) {
+ $sql1 = sisplet_query("SELECT naslov FROM srv_language_spremenljivka WHERE ank_id='".$this->anketa['id']."' AND spr_id='-1' AND lang_id='".$this->language."'");
+ $row1 = mysqli_fetch_array($sql1);
+
+ if ($row1['naslov'] != '')
+ return strip_tags($row1['naslov']);
+ }
+
+ return false;
+ }
+
+}
+
+
+?>
diff --git a/admin/exportclases/class.rtfIzvozAnalizaBreak.php b/admin/exportclases/class.rtfIzvozAnalizaBreak.php
new file mode 100644
index 0000000..ea0e0b5
--- /dev/null
+++ b/admin/exportclases/class.rtfIzvozAnalizaBreak.php
@@ -0,0 +1,1552 @@
+<?php
+
+ global $site_path;
+
+ include_once('../../function.php');
+ include_once('../survey/definition.php');
+ include_once('../exportclases/class.rtfIzvozAnalizaFunctions.php');
+ require_once("class.enka.rtf.php");
+
+ define("FNT_TIMES", "Times New Roman", true);
+ define("FNT_ARIAL", "Arial", true);
+
+ define("FNT_MAIN_TEXT", FNT_TIMES, true);
+ define("FNT_QUESTION_TEXT", FNT_TIMES, true);
+ define("FNT_HEADER_TEXT", FNT_TIMES, true);
+
+ define("FNT_MAIN_SIZE", 12, true);
+ define("FNT_QUESTION_SIZE", 10, true);
+ define("FNT_HEADER_SIZE", 10, true);
+
+ define("M_ANALIZA_DESCRIPTOR", "descriptor", true);
+ define("M_ANALIZA_FREQUENCY", "frequency", true);
+ define("ALLOW_HIDE_ZERRO_REGULAR", false); // omogo�imo delovanje prikazovanja/skrivanja ni�elnih vnosti za navadne odgovore
+ define("ALLOW_HIDE_ZERRO_MISSING", true); // omogo�imo delovanje prikazovanja/skrivanja ni�elnih vnosti za missinge
+
+
+/** Class za generacijo rtf-a
+ */
+class RtfIzvozAnalizaBreak {
+
+ var $anketa;// = array(); // trenutna anketa
+
+ var $pi=array('canCreate'=>false); // za shrambo parametrov in sporocil
+ var $rtf;
+
+ public $breakClass = null; // break class
+ public $crosstabClass = null; // crosstab class
+
+ var $spr = 0; // spremenljivka za katero delamo razbitje
+ var $seq; // sekvenca
+
+ var $break_percent; // opcija za odstotke
+ public $break_charts = 0; // ali prikazujemo graf ali tabelo
+
+ var $firstElement = true;
+
+ var $sessionData; // podatki ki so bili prej v sessionu - za nastavitve, ki se prenasajo v izvoze...
+
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null)
+ {
+ global $site_path;
+ global $global_user_id;
+
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) )
+ {
+ $this->anketa['id'] = $anketa;
+
+ // create new RTF document
+ $this->rtf = new enka_RTF(true);
+ }
+ else
+ {
+ $this->pi['msg'] = "Anketa ni izbrana!";
+ $this->pi['canCreate'] = false;
+ return false;
+ }
+
+ $_GET['a'] = A_ANALYSIS;
+
+ // preberemo nastavitve iz baze (prej v sessionu)
+ SurveyUserSession::Init($this->anketa['id']);
+ $this->sessionData = SurveyUserSession::getData();
+
+ // ustvarimo break objekt
+ $this->breakClass = new SurveyBreak($anketa);
+ $this->spr = $this->sessionData['break']['spr'];
+ # poiÅ¡Äemo sekvenco
+ $this->seq = $this->sessionData['break']['seq'];
+
+ $this->break_percent = (isset($this->sessionData['break_percent']) && $this->sessionData['break_percent'] == false) ? false : true;
+
+ if ( SurveyInfo::getInstance()->SurveyInit($this->anketa['id']) && $this->init())
+ {
+ $this->anketa['uid'] = $global_user_id;
+ SurveyUserSetting::getInstance()->Init($this->anketa['id'], $this->anketa['uid']);
+ }
+ else
+ return false;
+ // ce smo prisli do tu je vse ok
+ $this->pi['canCreate'] = true;
+ return true;
+ }
+
+ function getAnketa()
+ { return $this->anketa['id']; }
+
+ function checkCreate()
+ {
+ return $this->pi['canCreate'];
+ }
+
+ function getFile($fileName)
+ {
+ $this->rtf->display($fileName = "analiza.rtf",true);
+ }
+
+ function init()
+ {
+ global $lang;
+
+ // dodamo avtorja in naslov
+ $this->rtf->WriteTitle();
+ $this->rtf->WriteHeader($this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()), 'left');
+ $this->rtf->WriteHeader($this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()), 'right');
+ $this->rtf->WriteFooter($lang['page']." {PAGE} / {NUMPAGES}", 'right');
+ $this->rtf->set_default_font(FNT_TIMES, FNT_MAIN_SIZE);
+ return true;
+ }
+
+ function createRtf()
+ {
+ global $site_path;
+ global $lang;
+
+ // izpisemo prvo stran
+ //$this->createFrontPage();
+
+ $this->rtf->draw_title($lang['export_analisys_break']);
+ $this->rtf->new_line(2);
+
+ if ($this->spr != 0){
+ # poiÅ¡Äemo pripadajoÄe variable
+ $_spr_data = $this->breakClass->_HEADERS[$this->spr];
+
+ # poiÅ¡Äemo opcije
+ $options = $_spr_data['options'];
+
+ # za vsako opcijo posebej izraÄunamo povpreÄja za vse spremenljivke
+ $frequencys = null;
+ if (count($options) > 0) {
+ foreach ($options as $okey => $option) {
+
+ # zloopamo skozi variable
+ $okeyfrequencys = $this->breakClass->getAllFrequencys($okey, $this->seq, $this->spr);
+ if ($okeyfrequencys != null) {
+ if ($frequencys == null) {
+ $frequencys = array();
+ }
+ $frequencys[$okey] = $okeyfrequencys;
+ }
+ }
+ }
+ $this->displayBreak($this->spr,$frequencys);
+
+ } else {
+ $this->rtf->MyRTF .= $lang['srv_break_error_note_1'];
+ }
+ }
+
+ function displayBreak($forSpr, $frequencys) {
+
+ # Äe ne uporabljamo privzetega Äasovnega profila izpiÅ¡emo opozorilo
+ //SurveyTimeProfiles :: printIsDefaultProfile(false);
+
+ # Äe imamo filter ifov ga izpiÅ¡emo
+ //SurveyConditionProfiles:: getConditionString();
+
+ # Äe imamo filter spremenljivk ga izpiÅ¡emo
+ //SurveyVariablesProfiles:: getProfileString(true);
+ //SurveyDataSettingProfiles :: getVariableTypeNote();
+
+ # Äe rekodiranje
+ //$SR = new SurveyRecoding($this->anketa);
+ //$SR -> getProfileString();
+
+ # filtriranje po spremenljivkah
+ $_FILTRED_VARIABLES = SurveyVariablesProfiles::getProfileVariables(SurveyVariablesProfiles::checkDefaultProfile(), true);
+
+ # ali prikazujemo tabele ali grafe
+ $this->break_charts = (isset($this->sessionData['break']['break_show_charts']) && (int)$this->sessionData['break']['break_show_charts'] == 1) ? 1 : 0;
+
+
+ foreach ($this->breakClass->_HEADERS AS $skey => $spremenljivka) {
+
+ $spremenljivka['id'] = $skey;
+ $tip = $spremenljivka['tip'];
+ if ( is_numeric($tip)
+ && $tip != 4 #text
+ && $tip != 5 #label
+ && $tip != 8 #datum
+ && $tip != 9 #SN-imena
+ && $tip != 19 #multitext
+ && $tip != 21 #besedilo*
+ && ( count($_FILTRED_VARIABLES) == 0 || (count($_FILTRED_VARIABLES) > 0 && isset($_FILTRED_VARIABLES[$skey]) ))
+ ) {
+
+ $this->displayBreakSpremenljivka($forSpr,$frequencys,$spremenljivka);
+ } else if ( is_numeric($tip)
+ && (
+ $tip == 4 #text
+ || $tip == 19 #multitext
+ || $tip == 21 #besedilo*
+ || $tip == 20 #multi numer*
+ ) && ( count($_FILTRED_VARIABLES) == 0 || (count($_FILTRED_VARIABLES) > 0 && isset($_FILTRED_VARIABLES[$skey]) ) )
+ ) {
+ $this->displayBreakSpremenljivka($forSpr,$frequencys,$spremenljivka);
+ }
+ }
+ }
+
+ function displayBreakSpremenljivka($forSpr,$frequencys,$spremenljivka) {
+ $tip = $spremenljivka['tip'];
+ $skala = $spremenljivka['skala'];
+ if ($forSpr != $spremenljivka['id']) {
+ switch ($tip) {
+ # radio, dropdown
+ case 1:
+ case 3:
+ $this->displayCrosstabs($forSpr,$frequencys,$spremenljivka);
+ break;
+ #multigrid
+ case 6:
+ if ($spremenljivka['skala'] == 0) {
+ $this->displayBreakTableMgrid($forSpr,$frequencys,$spremenljivka);
+ } else {
+ $this->displayCrosstabs($forSpr,$frequencys,$spremenljivka);
+ }
+ break;
+ # checkbox
+ case 2:
+ $this->displayCrosstabs($forSpr,$frequencys,$spremenljivka);
+ break;
+ #number
+ case 7:
+ #ranking
+ case 17:
+ #vsota
+ case 18:
+ #multinumber
+ case 20:
+ $this->displayBreakTableNumber($forSpr,$frequencys,$spremenljivka);
+ break ;
+ case 19:
+ $this->displayBreakTableText($forSpr,$frequencys,$spremenljivka);
+ break ;
+ #multicheck
+ case 16:
+ $this->displayCrosstabs($forSpr,$frequencys,$spremenljivka);
+ break;
+ case 4:
+
+ case 21:
+ # po novem besedilo izpisujemo v klasiÄni tabeli
+ $this->displayBreakTableText($forSpr,$frequencys,$spremenljivka);
+
+ #$this->displayCrosstabs($forSpr,$frequencys,$spremenljivka);
+ break;
+ default:
+ $this->displayCrosstabs($forSpr,$frequencys,$spremenljivka);
+ break;
+ }
+
+ $this->firstElement = false;
+ }
+ }
+
+
+ function displayBreakTableMgrid($forSpr,$frequencys,$spremenljivka) {
+ global $lang;
+
+ // Ce izrisujemo graf
+ if($this->break_charts == 1){
+ $this->displayChart($forSpr,$frequencys,$spremenljivka,$type = 'mgrid');
+ }
+
+ // Ce izrisujemo tabelo
+ else{
+
+ $keysCount = count($frequencys);
+ $sequences = explode('_',$spremenljivka['sequences']);
+ $forSpremenljivka = $this->breakClass->_HEADERS[$forSpr];
+ $tip = $spremenljivka['tip'];
+
+ # izraÄunamo povpreÄja za posamezne sekvence
+ $means = array();
+ foreach ($frequencys AS $fkey => $fkeyFrequency) {
+ foreach ($sequences AS $sequence) {
+ $means[$fkey][$sequence] = $this->breakClass->getMeansFromKey($frequencys[$fkey][$sequence]);
+ }
+ }
+
+ if ($tip != 16 && $tip != 20) {
+ if ($tip == 1 || $tip == 3) {
+ if (count($spremenljivka['options']) < 15) {
+ $rowspan = 2;
+ $colspan = count($spremenljivka['options'])+1;
+ } else {
+ $rowspan = 1;
+ $colspan = 1;
+ }
+ } else {
+ $rowspan = 2;
+ $colspan = count($sequences);
+ }
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '\clbrdrt\brdrs\brdrw10';
+ $borderLR = '\clbrdrl\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ $border = '\clbrdrb\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrt\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ //$align = ($arrayParams['align']=='center' ? '\qc' : '\ql');
+ $bold = '\b';
+
+ //nastavitve tabele - (sirine celic, border...)
+ $defw_full = 13500;
+ $defw_part = 5500;
+ $defw_part2 = 8000;
+ $defw_part3 = floor(8000 / $colspan);
+
+
+ // zacetek tabele
+ $this->rtf->MyRTF .= $this->rtf->_font_size(16);
+ $this->rtf->MyRTF .= "{\par";
+
+
+ // PRVA VRSTICA
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderLR.$borderT.'\clvmgf\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText($forSpremenljivka['naslov'].' ('.$forSpremenljivka['variable'].')'). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($spremenljivka['naslov'].' ('.$spremenljivka['variable'].')'). '\qc\cell';
+ $tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ // DRUGA VRSTICA
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderLR.$borderB.'\clvmrg\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+
+ $i=1;
+ if ($tip != 1 && $tip != 3) {
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $i*$defw_part3 );
+ $tableEnd .= '\pard\intbl\b0 '.$this->encodeText($variable['naslov'].' ('.$variable['variable'].')'). '\qc\cell';
+ $i++;
+ }
+ }
+ }
+ else if (count($spremenljivka['options']) < 15) {
+ foreach ($spremenljivka['options'] AS $okey => $option) {
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $i*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.$this->encodeText($option.' ('.$okey.')'). '\qc\cell';
+ $i++;
+ }
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $i*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.$this->encodeText('povpreÄje'). '\qc\cell';
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ // VRSTICE S PODATKI
+ foreach ($frequencys AS $fkey => $fkeyFrequency) {
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderLR.$borderB.'\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl '.$this->encodeText($forSpremenljivka['options'][$fkey]). '\qc\cell';
+
+ $i=1;
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ if ($variable['other'] != 1) {
+ $sequence = $variable['sequence'];
+ if (($tip == 1 || $tip == 3) && count($spremenljivka['options']) < 15) {
+ foreach ($spremenljivka['options'] AS $okey => $option) {
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $i*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.$this->encodeText($frequencys[$fkey][$sequence]['valid'][$okey]['cnt']). '\qc\cell';
+ $i++;
+ }
+ }
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $i*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.self::formatNumber($means[$fkey][$sequence],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),''). '\qc\cell';
+ $i++;
+ }
+ }
+ }
+ $tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+
+ // konec tabele
+ $this->rtf->MyRTF .= "}";
+ $this->rtf->new_line(3);
+ }
+
+ else {
+ $rowspan = 2;
+ $colspan = $spremenljivka['grids'][0]['cnt_vars'];
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '\clbrdrt\brdrs\brdrw10';
+ $borderLR = '\clbrdrl\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ $border = '\clbrdrb\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrt\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ $bold = '\b';
+
+ //nastavitve tabele - (sirine celic, border...)
+ $defw_full = 13500;
+ $defw_part = 5500;
+ $defw_part2 = 8000;
+ $defw_part3 = floor(8000 / $colspan);
+
+
+ # za multicheck razdelimo na grupe - skupine
+ foreach ($frequencys AS $fkey => $frequency) {
+
+ $this->rtf->MyRTF .= '\b '.$this->encodeText('Tabela za: ('.$forSpremenljivka['variable'].') = '.$forSpremenljivka['options'][$fkey]). '\b0';
+ $this->rtf->new_line(1);
+
+ // zacetek tabele
+ $this->rtf->MyRTF .= $this->rtf->_font_size(16);
+ $this->rtf->MyRTF .= "{\par";
+
+
+ // 1. vrstica
+ $tableHeader = '\trowd\trql\trrh400';
+ $table = '\clvertalc'.$border.'\cellx'.( $defw_part + $defw_part2 );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText($spremenljivka['naslov'].' ('.$spremenljivka['variable'].')'). '\qc\cell';
+ $tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ //2. vrstica
+ $tableHeader = '\trowd\trql\trrh400';
+ $table = '\clvertalc'.$border.'\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText(''). '\qc\cell';
+
+ $i=1;
+ foreach ($spremenljivka['grids'][0]['variables'] AS $vkey => $variable) {
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $i*$defw_part3 );
+ $tableEnd .= '\pard\intbl\b0 '.$this->encodeText($variable['naslov']). '\qc\cell';
+ $i++;
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ // vrstice s podatki
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+
+ $tableHeader = '\trowd\trql\trrh400';
+ $table = '\clvertalc'.$border.'\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl '.$this->encodeText('('.$grid['variable'].') '.$grid['naslov']). '\qc\cell';
+
+ $i=1;
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $sequence = $variable['sequence'];
+
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $i*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.self::formatNumber($means[$fkey][$sequence],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),''). '\qc\cell';
+ $i++;
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+
+ // konec tabele
+ $this->rtf->MyRTF .= "}";
+ $this->rtf->new_line(3);
+ }
+ }
+ }
+ }
+
+ function displayBreakTableNumber($forSpr,$frequencys,$spremenljivka) {
+ global $lang;
+
+ $keysCount = count($frequencys);
+ $sequences = explode('_',$spremenljivka['sequences']);
+ $forSpremenljivka = $this->breakClass->_HEADERS[$forSpr];
+ $tip = $spremenljivka['tip'];
+
+ # izraÄunamo povpreÄja za posamezne sekvence
+ $means = array();
+ $totalMeans = array();
+ $totalFreq = array();
+ foreach ($frequencys AS $fkey => $fkeyFrequency) {
+ foreach ($sequences AS $sequence) {
+ $means[$fkey][$sequence] = $this->breakClass->getMeansFromKey($frequencys[$fkey][$sequence]);
+ }
+ }
+
+
+ // Ce izrisujemo graf
+ if($this->break_charts == 1){
+
+ // Number, vsota, ranking graf
+ if($tip != 20 ){
+ $this->displayChart($forSpr,$frequencys,$spremenljivka,$type = 'number');
+ }
+
+ // Multinumber graf
+ else{
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+
+ // Izrisujemo samo 1 graf v creportu
+ if($_GET['m'] == 'analysis_creport'){
+
+ if($spremenljivka['break_sub_table']['key'] == $gkey){
+ $this->displayChart($forSpr,$frequencys,$spremenljivka,$type = 'number');
+ }
+ }
+
+ // Izrisujemo vse zaporedne grafe
+ else{
+ $spremenljivka['break_sub_table']['key'] = $gkey;
+ $spremenljivka['break_sub_table']['sequence'] = $grid['variables'][0]['sequence'];
+
+ $this->displayChart($forSpr,$frequencys,$spremenljivka,$type = 'number');
+ }
+ }
+ }
+ }
+
+ // Izrisujemo tabelo
+ else{
+ # za multi number naredimo po skupinah
+ if ($tip != 20) {
+
+ $rowspan = 3;
+ $colspan = count($sequences);
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '\clbrdrt\brdrs\brdrw10';
+ $borderLR = '\clbrdrl\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ $border = '\clbrdrb\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrt\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ //$align = ($arrayParams['align']=='center' ? '\qc' : '\ql');
+ $bold = '\b';
+
+ //nastavitve tabele - (sirine celic, border...)
+ $defw_full = 13500;
+ $defw_part = 5500;
+ $defw_part2 = 8000;
+ $defw_part3 = floor(8000 / $colspan);
+
+
+ // zacetek tabele
+ $this->rtf->MyRTF .= $this->rtf->_font_size(16);
+ $this->rtf->MyRTF .= "{\par";
+
+
+ // PRVA VRSTICA
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderLR.$borderT.'\clvmgf\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText($forSpremenljivka['naslov'].' ('.$forSpremenljivka['variable'].')'). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($spremenljivka['naslov'].' ('.$spremenljivka['variable'].')'). '\qc\cell';
+ $tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ // DRUGA VRSTICA
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderLR.'\clvmrg\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+
+ $i=1;
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $i*$defw_part3 );
+ $tableEnd .= '\pard\intbl\b0 '.$this->encodeText($variable['naslov'].' ('.$variable['variable'].')'). '\qc\cell';
+ $i++;
+ }
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ // TRETJA VRSTICA
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderLR.$borderB.'\clvmrg\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+
+ $i=1;
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $i*$defw_part3 );
+ $tableEnd .= '\pard\intbl\b0 '.$this->encodeText('PovpreÄje'). '\qc\cell';
+ $i++;
+ }
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ // VRSTICE S PODATKI
+ foreach ($frequencys AS $fkey => $fkeyFrequency) {
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderLR.$borderB.'\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl '.$this->encodeText($forSpremenljivka['options'][$fkey]). '\qc\cell';
+
+ $i=1;
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ if ($variable['other'] != 1) {
+ $sequence = $variable['sequence'];
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $i*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.self::formatNumber($means[$fkey][$sequence],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),''). '\qc\cell';
+
+ $totalMeans[$sequence] += ($this->breakClass->getMeansFromKey($fkeyFrequency[$sequence])*(int)$frequencys[$fkey][$sequence]['validCnt']);
+ $totalFreq[$sequence]+= (int)$frequencys[$fkey][$sequence]['validCnt'];
+
+ $i++;
+ }
+ }
+ }
+ $tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+
+
+ // dodamo Å¡e skupno sumo in povpreÄje
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderLR.$borderB.'\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl '.$this->encodeText('Skupaj'). '\qc\cell';
+
+ $i=1;
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ foreach ($grid['variables'] AS $vkey => $variable) {
+
+ $sequence = $variable['sequence'];
+ if ($variable['other'] != 1) {
+ #povpreÄja
+ $totalMean = $totalFreq[$sequence] > 0 ? $totalMeans[$sequence] / $totalFreq[$sequence] : 0;
+
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $i*$defw_part3 );
+ $tableEnd .= '\pard\intbl\b '.self::formatNumber($totalMean ,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),''). '\b0\qc\cell';
+
+ $i++;
+ }
+ }
+ }
+ $tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ // konec tabele
+ $this->rtf->MyRTF .= "}";
+ $this->rtf->new_line(3);
+ }
+
+ else {
+ $rowspan = 3;
+ $colspan = count($spremenljivka['grids'][0]['variables']);
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '\clbrdrt\brdrs\brdrw10';
+ $borderLR = '\clbrdrl\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ $border = '\clbrdrb\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrt\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ $bold = '\b';
+
+ //nastavitve tabele - (sirine celic, border...)
+ $defw_full = 13500;
+ $defw_part = 5500;
+ $defw_part2 = 8000;
+ $defw_part3 = floor(8000 / $colspan);
+
+
+ # za multicheck razdelimo na grupe - skupine
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+
+ $this->rtf->MyRTF .= '\b '.$this->encodeText('Tabela za: '.$spremenljivka['naslov'].' ('.$spremenljivka['variable'].') = '.$grid['naslov'].' ('.$grid['variable'].')'). '\b0';
+ $this->rtf->new_line(1);
+
+
+ // zacetek tabele
+ $this->rtf->MyRTF .= $this->rtf->_font_size(16);
+ $this->rtf->MyRTF .= "{\par";
+
+ // PRVA VRSTICA
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderLR.$borderT.'\clvmgf\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText($forSpremenljivka['naslov'].' ('.$forSpremenljivka['variable'].')'). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($spremenljivka['naslov'].' ('.$spremenljivka['variable'].') - '.$grid['naslov'].' ('.$grid['variable'].')'). '\qc\cell';
+ $tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ // DRUGA VRSTICA
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderLR.'\clvmrg\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+
+ $i=1;
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $i*$defw_part3 );
+ $tableEnd .= '\pard\intbl\b0 '.$this->encodeText($variable['naslov'].' ('.$variable['variable'].')'). '\qc\cell';
+ $i++;
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ // TRETJA VRSTICA
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderLR.$borderB.'\clvmrg\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+
+ $i=1;
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $i*$defw_part3 );
+ $tableEnd .= '\pard\intbl\b0 '.$this->encodeText('PovpreÄje'). '\qc\cell';
+ $i++;
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ // vrstice s podatki
+ foreach ($forSpremenljivka['options'] AS $okey => $option) {
+
+ $tableHeader = '\trowd\trql\trrh400';
+ $table = '\clvertalc'.$border.'\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl '.$this->encodeText($option). '\qc\cell';
+
+ $i=1;
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $sequence = $variable['sequence'];
+
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $i*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.self::formatNumber($means[$okey][$sequence],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),''). '\qc\cell';
+
+ $totalMeans[$sequence] += ($means[$okey][$sequence]*(int)$frequencys[$okey][$sequence]['validCnt']);
+ $totalFreq[$sequence]+= (int)$frequencys[$okey][$sequence]['validCnt'];
+
+ $i++;
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+
+ // dodamo Å¡e skupno sumo in povpreÄje
+ $tableHeader = '\trowd\trql\trrh400';
+ $table = '\clvertalc'.$border.'\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl '.$this->encodeText('Skupaj'). '\qc\cell';
+
+ $i=1;
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $sequence = $variable['sequence'];
+
+ if ($variable['other'] != 1) {
+ #povpreÄja
+ $totalMean = $totalFreq[$sequence] > 0 ? $totalMeans[$sequence] / $totalFreq[$sequence] : 0;
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $i*$defw_part3 );
+ $tableEnd .= '\pard\intbl\b '.self::formatNumber($totalMean,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),''). '\b0\qc\cell';
+
+ $i++;
+ }
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ // konec tabele
+ $this->rtf->MyRTF .= "}";
+ $this->rtf->new_line(3);
+ }
+ }
+ }
+ }
+
+ function displayBreakTableText($forSpr,$frequencys,$spremenljivka) {
+ global $lang;
+
+ $keysCount = count($frequencys);
+ $sequences = explode('_',$spremenljivka['sequences']);
+ $forSpremenljivka = $this->breakClass->_HEADERS[$forSpr];
+ $tip = $spremenljivka['tip'];
+
+ # izraÄunamo povpreÄja za posamezne sekvence
+ $texts = array();
+ foreach ($frequencys AS $fkey => $fkeyFrequency) {
+ foreach ($sequences AS $sequence) {
+ $texts[$fkey][$sequence] = $this->breakClass->getTextFromKey($fkeyFrequency[$sequence]);
+ }
+ }
+
+ $rowspan = 3;
+ $colspan = count($spremenljivka['grids'][0]['variables']);
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '\clbrdrt\brdrs\brdrw10';
+ $borderLR = '\clbrdrl\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ $border = '\clbrdrb\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrt\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ $bold = '\b';
+
+ //nastavitve tabele - (sirine celic, border...)
+ $defw_full = 13500;
+ $defw_part = 5500;
+ $defw_part2 = 8000;
+ $defw_part3 = floor(8000 / $colspan);
+
+
+ # za multicheck razdelimo na grupe - skupine
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+
+ $this->rtf->MyRTF .= '\b '.$this->encodeText('Tabela za: '.$spremenljivka['naslov'].' ('.$spremenljivka['variable'].') = '.$grid['naslov'].' ('.$grid['variable'].')'). '\b0';
+ $this->rtf->new_line(1);
+
+
+ // zacetek tabele
+ $this->rtf->MyRTF .= $this->rtf->_font_size(16);
+ $this->rtf->MyRTF .= "{\par";
+
+ // PRVA VRSTICA
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderLR.$borderT.'\clvmgf\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText($forSpremenljivka['naslov'].' ('.$forSpremenljivka['variable'].')'). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($spremenljivka['naslov'].' ('.$spremenljivka['variable'].') - '.$grid['naslov'].' ('.$grid['variable'].')'). '\qc\cell';
+ $tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ // DRUGA VRSTICA
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderLR.$borderB.'\clvmrg\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+
+ $i=1;
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $i*$defw_part3 );
+ $tableEnd .= '\pard\intbl\b0 '.$this->encodeText($variable['naslov'].' ('.$variable['variable'].')'). '\qc\cell';
+ $i++;
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ // vrstice s podatki
+ foreach ($forSpremenljivka['options'] AS $okey => $option) {
+
+ $tableHeader = '\trowd\trql\trrh400';
+ $table = '\clvertalc'.$border.'\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl '.$this->encodeText($option). '\qc\cell';
+
+ $i=1;
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $sequence = $variable['sequence'];
+
+ if (count($texts[$okey][$sequence]) > 0) {
+ $text = '';
+ foreach ($texts[$okey][$sequence] AS $ky => $units) {
+ $text .= ' '.$units['text'].'\\line\n';
+ }
+ $text = substr($text,0,-7);
+
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $i*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.$this->encodeText($text). '\qc\cell';
+ }
+ else{
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $i*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.$this->encodeText(''). '\qc\cell';
+ }
+
+ $i++;
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+
+
+ // konec tabele
+ $this->rtf->MyRTF .= "}";
+ $this->rtf->new_line(3);
+
+ $this->rtf->MyRTF .= $this->rtf->_font_size(24);
+ }
+ }
+
+ function displayCrosstabs($forSpr,$frequencys,$spremenljivka) {
+ global $lang;
+
+ //ustvarimo crosstab objekt
+ $this->crosstabClass = new SurveyCrosstabs();
+ $this->crosstabClass->Init($this->anketa['id']);
+
+ $spr1 = $this->spr;
+ $seq1 = $this->seq;
+ $grd1 = 'undefined';
+ foreach ($this->breakClass->_HEADERS[$spr1]['grids'] AS $gid => $grid) {
+ foreach ($grid['variables'] AS $vkey => $vrednost) {
+ if ($vrednost['sequence'] == $seq1) {
+ $grd1 = $gid;
+ }
+ }
+ }
+
+ $spr2 = $spremenljivka['id'];
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ if (($spremenljivka['tip'] == 16 || $spremenljivka['tip'] == 6) && $this->break_charts != 1) {
+
+ $text = 'Tabela za: '.$spremenljivka['naslov'].' ('.$spremenljivka['variable'].') = '.$grid['naslov'];
+ if ($spremenljivka['tip'] != 6) {
+ $text .= ' ('.$grid['variable'].')';
+ }
+ $this->rtf->MyRTF .= '\b '.$this->encodeText($text). '\b0';
+ $this->rtf->new_line(1);
+ }
+
+ $seq2 = $grid['variables'][0]['sequence'];
+ $grd2 = $gid;
+
+ $this->crosstabClass->setVariables($seq2,$spr2,$grd2,$seq1,$spr1,$grd1);
+
+ if($this->break_charts == 1){
+ $this->crosstabClass->fromBreak = false;
+ $this->displayChart($forSpr,$frequencys,$spremenljivka,$type = 'crosstab');
+ }
+ else{
+ $this->displayCrosstabsTable();
+ }
+ }
+ }
+
+ function displayCrosstabsTable() {
+ global $lang;
+
+ if ($this->crosstabClass->getSelectedVariables(1) !== null && $this->crosstabClass->getSelectedVariables(2) !== null) {
+ $variables1 = $this->crosstabClass->getSelectedVariables(1);
+ $variables2 = $this->crosstabClass->getSelectedVariables(2);
+ foreach ($variables1 AS $v_first) {
+ foreach ($variables2 AS $v_second) {
+
+ $crosstabs = null;
+ $crosstabs_value = null;
+
+ $crosstabs = $this->crosstabClass->createCrostabulation($v_first, $v_second);
+ $crosstabs_value = $crosstabs['crosstab'];
+
+ # podatki spremenljivk
+ $spr1 = $this->crosstabClass->_HEADERS[$v_first['spr']];
+ $spr2 = $this->crosstabClass->_HEADERS[$v_second['spr']];
+
+ $grid1 = $spr1['grids'][$v_first['grd']];
+ $grid2 = $spr2['grids'][$v_second['grd']];
+
+ #Å¡tevilo vratic in Å¡tevilo kolon
+ $cols = count($crosstabs['options1']);
+ $rows = count($crosstabs['options2']);
+
+ # ali prikazujemo vrednosti variable pri spremenljivkah
+ $show_variables_values = $this->crosstabClass->doValues;
+
+ # nastavitve oblike
+ if (($this->crosstabClass->crossChk1 || $this->crosstabClass->crossChk2 || $this->crosstabClass->crossChk3) && ($this->crosstabClass->crossChkEC || $this->crosstabClass->crossChkRE || $this->crosstabClass->crossChkSR || $this->crosstabClass->crossChkAR)) {
+ # dodamo procente in residuale
+ $rowSpan = 3;
+ $numColumnPercent = $this->crosstabClass->crossChk1 + $this->crosstabClass->crossChk2 + $this->crosstabClass->crossChk3;
+ $numColumnResidual = $this->crosstabClass->crossChkEC + $this->crosstabClass->crossChkRE + $this->crosstabClass->crossChkSR + $this->crosstabClass->crossChkAR;
+ $tblColumn = max($numColumnPercent,$numColumnResidual);
+ } else if ($this->crosstabClass->crossChk1 || $this->crosstabClass->crossChk2 || $this->crosstabClass->crossChk3) {
+ # imamo samo procente
+ $rowSpan = 2;
+ $numColumnPercent = $this->crosstabClass->crossChk1 + $this->crosstabClass->crossChk2 + $this->crosstabClass->crossChk3;
+ $numColumnResidual = 0;
+ $tblColumn = $numColumnPercent;
+ } else if ($this->crosstabClass->crossChkEC || $this->crosstabClass->crossChkRE || $this->crosstabClass->crossChkSR || $this->crosstabClass->crossChkAR) {
+ # imamo samo residuale
+ $rowSpan = 2;
+ $numColumnPercent = 0;
+ $numColumnResidual = $this->crosstabClass->crossChkEC + $this->crosstabClass->crossChkRE + $this->crosstabClass->crossChkSR + $this->crosstabClass->crossChkAR;
+ $tblColumn = $numColumnResidual;
+ } else {
+ #prikazujemo samo podatke
+ $rowSpan = 1;
+ $numColumnPercent = 0;
+ $numColumnResidual = 0;
+ $tblColumn = 1;
+ }
+
+ //nastavitve tabele - (sirine celic, border...)
+ $defw_full = 10500;
+ $defw_part = 1500;
+ $defw_part2 = ($cols > 2) ? 9000 : 7500;
+ //izracun sirine ene celice
+ $singleWidth = floor( $defw_part2 / ($cols) );
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '\clbrdrt\brdrs\brdrw10';
+ $borderLR = '\clbrdrl\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ $border = '\clbrdrb\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrt\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ //$align = ($arrayParams['align']=='center' ? '\qc' : '\ql');
+ $bold = '\b';
+
+
+ # izri�emo tabelo
+ $this->rtf->MyRTF .= $this->rtf->_font_size(16);
+ $this->rtf->MyRTF .= "{\par";
+
+ # najprej izri�emo NASLOVNE VRSTICE
+ # za multicheckboxe popravimo naslov, na podtip
+ $sub_q1 = null;
+ if ($spr1['tip'] == '6' || $spr1['tip'] == '16' || $spr1['tip'] == '17' || $spr1['tip'] == '19' || $spr1['tip'] == '20') {
+ foreach ($spr1['grids'] AS $grid) {
+ foreach ($grid['variables'] AS $variable) {
+ if ($variable['sequence'] == $v_first['seq']) {
+ $sub_q1 = strip_tags($spr1['naslov']);
+ if ($show_variables_values == true ) {
+ $sub_q1 .= '&nbsp;('.strip_tags($spr1['variable']).')';
+ }
+ if ($spr1['tip'] == '16') {
+ $sub_q1 .= ', ' . strip_tags($grid1['naslov']) . ($show_variables_values == true ? '&nbsp;(' . strip_tags($grid1['variable']) . ')' : '');
+ } else {
+ $sub_q1 .= ', ' . strip_tags($variable['naslov']) . ($show_variables_values == true ? '&nbsp;(' . strip_tags($variable['variable']) . ')' : '');
+ }
+ }
+ }
+ }
+ }
+ if ($sub_q1 == null) {
+ $sub_q1 .= strip_tags($spr1['naslov']);
+ $sub_q1 .= ($show_variables_values == true ? '&nbsp;('.strip_tags($spr1['variable']).')' : '');
+ }
+
+ $sub_q2 = null;
+ if ($spr2['tip'] == '6' || $spr2['tip'] == '16' || $spr2['tip'] == '17' || $spr2['tip'] == '19' || $spr2['tip'] == '20') {
+ foreach ($spr2['grids'] AS $grid) {
+ foreach ($grid['variables'] AS $variable) {
+ if ($variable['sequence'] == $v_second['seq']) {
+ $sub_q2 = strip_tags($spr2['naslov']);
+ if ($show_variables_values == true) {
+ $sub_q2 .= '&nbsp;('.strip_tags($spr2['variable']).')';
+ }
+ if ($spr2['tip'] == '16') {
+ $sub_q2.= ', ' . strip_tags($grid2['naslov']) . ($show_variables_values == true ? '&nbsp;(' . strip_tags($grid2['variable']) . ')' : '');
+ } else {
+ $sub_q2.= ', ' . strip_tags($variable['naslov']) . ($show_variables_values == true ? '&nbsp;(' . strip_tags($variable['variable']) . ')' : '');
+ }
+ }
+ }
+ }
+ }
+ if ($sub_q2 == null) {
+ $sub_q2 .= strip_tags($spr2['naslov']);
+ $sub_q2 .= ($show_variables_values == true ? '&nbsp;('.strip_tags($spr2['variable']).')' : '');
+ }
+
+
+ //prva vrstica
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+ $table .= '\clvertalc\cellx'.( 2 * $defw_part );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($sub_q1). '\qc\cell';
+ $table .= '\clvertalc\cellx'.( 2 * $defw_part + $defw_part2 + $singleWidth );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+ //druga vrstica
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+ $table .= '\clvertalc\cellx'.( 2 * $defw_part );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+
+
+ if (count($crosstabs['options1']) > 0 ) {
+ $i=1;
+ foreach ($crosstabs['options1'] as $ckey1 =>$crossVariabla) {
+ #ime variable
+ $text = $crossVariabla['naslov'];
+ # �e ni tekstovni odgovor dodamo key
+ if ($crossVariabla['type'] != 't') {
+ $text .= ' ( '.$ckey1.' )';
+ }
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + $i * $singleWidth );
+ $tableEnd .= '\pard\intbl'.$bold.' '. $this->encodeText($text). '\qc\cell';
+
+ $i++;
+ }
+ }
+
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + $defw_part2 + $singleWidth );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($lang['srv_analiza_crosstab_skupaj']). '\qc\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+
+ //VMESNE VRSTICE
+ $cntY = 0;
+ if (count($crosstabs['options2']) > 0) {
+
+ //POSAMEZNA VMESNA VRSTICA
+ foreach ($crosstabs['options2'] as $ckey2 =>$crossVariabla2) {
+ $cntY++;
+
+
+ for($j=1; $j<=$rowSpan; $j++){
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ if( $cntY == 1 && $j == 1 ){
+ $table = '\clvertalc'.$borderLR.$borderT.'\clvmgf\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText($sub_q2). '\qc\cell';
+ }
+ else{
+ $table = '\clvertalc'.$borderLR.'\clvmrg\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+ }
+
+
+
+ $text = $crossVariabla2['naslov'];
+ if ($crossVariabla2['type'] !== 't') {
+ $text .= ' ('.$ckey2.')';
+ }
+ if($j == 1){
+ $table .= '\clvertalc'.$borderLR.$borderT.'\cellx'.( 2 * $defw_part );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($text). '\qc\cell';
+ }
+ else{
+ $table .= '\clvertalc'.$borderLR.'\cellx'.( 2 * $defw_part );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+ }
+
+
+
+ //del vrstice z vsebino
+ $bold = '\b0';
+ $i=1;
+ foreach ($crosstabs['options1'] as $ckey1 => $crossVariabla1) {
+
+ //FREKVENCE
+ if( $j == 1 ){
+ $text = ((int)$crosstabs_value[$ckey1][$ckey2] > 0) ? $crosstabs_value[$ckey1][$ckey2] : 0;
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + $i * $singleWidth );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($text). '\qc\cell';
+ }
+
+ //PROCENTI
+ elseif( $j == 2 && $numColumnPercent > 0 ){
+ $x = 1;
+ if ($this->crosstabClass->crossChk1) {
+ #procent vrstica
+ $text = $this->formatNumber($this->crosstabClass->getCrossTabPercentage($crosstabs['sumaVrstica'][$ckey2], $crosstabs_value[$ckey1][$ckey2]), 2, '%');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnPercent));
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ if ($this->crosstabClass->crossChk2) {
+ #procent stolpec
+ $text = $this->formatNumber($this->crosstabClass->getCrossTabPercentage($crosstabs['sumaStolpec'][$ckey1], $crosstabs_value[$ckey1][$ckey2]), 2, '%');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnPercent));
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ if ($this->crosstabClass->crossChk3) {
+ #procent skupni
+ $text = $this->formatNumber($this->crosstabClass->getCrossTabPercentage($crosstabs['sumaSkupna'], $crosstabs_value[$ckey1][$ckey2]), 2, '%');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnPercent));
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ }
+
+ //RESIDUALI
+ else{
+ $x = 1;
+ if ($this->crosstabClass->crossChkEC) {
+ $text = $this->formatNumber($crosstabs['exC'][$ckey1][$ckey2], 3, '');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnResidual));
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ if ($this->crosstabClass->crossChkRE) {
+ $text = $this->formatNumber($crosstabs['res'][$ckey1][$ckey2], 3, '');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnResidual));
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ if ($this->crosstabClass->crossChkSR) {
+ $text = $this->formatNumber($crosstabs['stR'][$ckey1][$ckey2], 3, '');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnResidual));
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ if ($this->crosstabClass->crossChkAR) {
+ $text = $this->formatNumber($crosstabs['adR'][$ckey1][$ckey2], 3, '');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnResidual));
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ }
+
+ $i++;
+ }
+
+ //SKUPAJ
+ if( $j == 1){
+ $bold = '\b';
+
+ $text = (int)$crosstabs['sumaVrstica'][$ckey2];
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + $defw_part2 + $singleWidth );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($text). '\qc\cell';
+
+ $bold = '\b0';
+ }
+ elseif( $j == 2 && $numColumnPercent > 0 ){
+ $x = 1;
+ # suma po vrsticah v procentih
+ if ($this->crosstabClass->crossChk1) {
+ $text = $this->formatNumber(100, 2, '%');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnPercent));
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ if ($this->crosstabClass->crossChk2) {
+ $text = $this->formatNumber( ($crosstabs['sumaSkupna'] > 0 ? (100 * $crosstabs['sumaVrstica'][$ckey2] / $crosstabs['sumaSkupna']) : 0), 2, '%');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnPercent));
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ if ($this->crosstabClass->crossChk3) {
+ $text = $this->formatNumber( ($crosstabs['sumaSkupna'] > 0 ? (100 * $crosstabs['sumaVrstica'][$ckey2] / $crosstabs['sumaSkupna']) : 0), 2, '%');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnPercent));
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ }
+ else{
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + $i * $singleWidth );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+ $bold = '\b';
+ }
+ }
+ }
+ $cntY++;
+
+
+ // skupni sestevki po stolpcih - ZADNJA VRSTICA
+ //popravimo row span (residualov ne upostevamo)
+ $rowSpan = $numColumnResidual > 0 ? $rowSpan-1 : $rowSpan;
+
+ for($j=1; $j<=$rowSpan; $j++){
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ if($j == 1){
+ $table = '\clvertalc'.$borderT.'\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+
+ $table .= '\clvertalc'.$borderLR.$borderT.'\cellx'.( 2 * $defw_part );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($lang['srv_analiza_crosstab_skupaj']). '\qc\cell';
+ }
+ else{
+ $table = '\clvertalc\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+
+ $table .= '\clvertalc'.$borderLR.$borderB.'\cellx'.( 2 * $defw_part );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+ }
+
+ if (count($crosstabs['options1']) > 0){
+
+ $i=1;
+ $bold = '\b0';
+ foreach ($crosstabs['options1'] as $ckey1 => $crossVariabla1) {
+
+ if($j == 1){
+ $bold = '\b';
+
+ $text = (int)$crosstabs['sumaStolpec'][$ckey1];
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + $i * $singleWidth );
+ $tableEnd .= '\pard\intbl'.$bold.' '. $this->encodeText($text). '\qc\cell';
+
+ $bold = '\b0';
+ }
+
+ else{
+ $x = 1;
+ # suma po stolpcih v procentih
+ if ($this->crosstabClass->crossChk1) {
+ $text = $this->formatNumber( ($crosstabs['sumaSkupna'] > 0 ? (100 * $crosstabs['sumaStolpec'][$ckey1] / $crosstabs['sumaSkupna']) : 0), 2, '%');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnPercent));
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ if ($this->crosstabClass->crossChk2) {
+ $text = $this->formatNumber(100, 2, '%');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnPercent));
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ if ($this->crosstabClass->crossChk3)
+ {
+ $text = $this->formatNumber( ($crosstabs['sumaSkupna'] > 0 ? (100 * $crosstabs['sumaStolpec'][$ckey1] / $crosstabs['sumaSkupna']) : 0), 2, '%');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnPercent));
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ }
+
+ $i++;
+ }
+ }
+
+
+ # skupna suma
+ if($j == 1){
+ $bold = '\b';
+
+ $text = (int)$crosstabs['sumaSkupna'];
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + $defw_part2 + $singleWidth );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($text). '\qc\cell';
+
+ $bold = '\b0';
+ }
+
+ else{
+ $x = 1;
+ # suma po stolpcih v procentih
+ if ($this->crosstabClass->crossChk1) {
+ $text = $this->formatNumber(100, 2, '%');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnPercent));
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ if ($this->crosstabClass->crossChk2) {
+ $text = $this->formatNumber(100, 2, '%');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnPercent));
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ if ($this->crosstabClass->crossChk3) {
+ $text = $this->formatNumber(100, 2, '%');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnPercent));
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ }
+
+ $bold = '\b';
+ $tableEnd .= '\pard\intbl\row';
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+
+ //konec tabele
+ $this->rtf->MyRTF .= "}";
+ $this->rtf->new_line(3);
+ }
+ }
+ }
+ }
+
+ function displayChart($forSpr,$frequencys,$spremenljivka,$type){
+ global $lang;
+
+ // Zgeneriramo id vsake tabele (glede na izbrani spremenljivki za generiranje)
+ if($type == 'crosstab'){
+ $chartID = implode('_', $this->crosstabClass->variabla1[0]);
+ $chartID .= '_'.$this->crosstabClass->variabla2[0]['seq'].'_'.$this->crosstabClass->variabla2[0]['spr'].'_undefined';
+ $chartID .= '_counter_0'/*.$this->crosstabClass->counter*/;
+
+ $settings = $this->sessionData['crosstab_charts'][$chartID];
+ }
+
+ else{
+ if($spremenljivka['tip'] == 20){
+ // Preberemo za kateri grid izrisujemo tabelo
+ $gkey = $spremenljivka['break_sub_table']['key'];
+
+ $spr1 = $this->sessionData['break']['seq'].'-'. $this->sessionData['break']['spr'].'-undefined';
+ $spr2 = $spremenljivka['grids'][$gkey]['variables'][0]['sequence'].'-'.$spremenljivka['id'].'-undefined';
+ }
+ else{
+ $spr1 = $this->sessionData['break']['seq'].'-'. $this->sessionData['break']['spr'].'-undefined';
+ $spr2 = $spremenljivka['grids'][0]['variables'][0]['sequence'].'-'.$spremenljivka['id'].'-undefined';
+ }
+
+ $chartID = $spr1.'_'.$spr2;
+
+ $settings = $this->sessionData['break_charts'][$chartID];
+ }
+
+ $imgName = $settings['name'];
+
+
+ // IZRIS GRAFA
+ if(!$this->firstElement){
+ $this->rtf->new_page();
+ $this->rtf->new_line(2);
+ }
+
+ // Naslov posameznega grafa
+ $title = $spremenljivka['naslov'] . ' ('.$spremenljivka['variable'].')';
+ if($spremenljivka['tip'] == 20){
+ $grid = $spremenljivka['grids'][$gkey];
+ $subtitle = $grid['naslov'] . ' ('.$grid['variable'].')';
+ }
+ elseif($spremenljivka['tip'] == 16 || $spremenljivka['tip'] == 6){
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ if($this->crosstabClass->variabla1[0]['seq'] == $grid['variables'][0]['sequence']){
+ $subtitle = $grid['naslov'];
+ if ($spremenljivka['tip'] != 6) {
+ $subtitle .= ' ('.$grid['variable'].')';
+ }
+ break;
+ }
+ }
+ }
+
+ $this->rtf->add_text('\b '.$this->encodeText($title).' \b0', 'center');
+ $this->rtf->new_line();
+ if($spremenljivka['tip'] == 20 || $spremenljivka['tip'] == 16 || $spremenljivka['tip'] == 6){
+ $this->rtf->add_text('\b '.$this->encodeText($subtitle).' \b0', 'center');
+ $this->rtf->new_line();
+ }
+
+ $scale = 100;
+
+ $this->rtf->add_image('pChart/Cache/'.$imgName, $scale, 'center');
+
+ $this->rtf->new_line(2);
+ }
+
+
+
+ /*Skrajsa tekst in doda '...' na koncu*/
+ function snippet($text,$length=64,$tail="...")
+ {
+ $text = trim($text);
+ $txtl = strlen($text);
+ if($txtl > $length)
+ {
+ for($i=1;$text[$length-$i]!=" ";$i++)
+ {
+ if($i == $length)
+ {
+ return substr($text,0,$length) . $tail;
+ }
+ }
+ $text = substr($text,0,$length-$i+1) . $tail;
+ }
+ return $text;
+ }
+
+
+ function formatNumber($value,$digit=0,$sufix="")
+ {
+ if ( $value <> 0 && $value != null )
+ $result = round($value,$digit);
+ else
+ $result = "0";
+ $result = number_format($result, $digit, ',', '.').$sufix;
+
+ return $result;
+ }
+
+ function encodeText($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace(array("&scaron;","&#353;","&#269;"),array("�","�","�"),$text);
+ return strip_tags($text);
+ }
+}
+
+?>
diff --git a/admin/exportclases/class.rtfIzvozAnalizaCReport.php b/admin/exportclases/class.rtfIzvozAnalizaCReport.php
new file mode 100644
index 0000000..a2151ec
--- /dev/null
+++ b/admin/exportclases/class.rtfIzvozAnalizaCReport.php
@@ -0,0 +1,1616 @@
+<?php
+
+require_once("class.enka.rtf.php");
+require_once('../../vendor/autoload.php');
+include_once('../exportclases/class.rtfIzvozAnalizaFunctions.php');
+include_once('../../function.php');
+include_once('../survey/definition.php');
+
+
+define("FNT_TIMES", "Times New Roman", true);
+define("FNT_ARIAL", "Arial", true);
+
+define("FNT_MAIN_TEXT", FNT_TIMES, true);
+define("FNT_QUESTION_TEXT", FNT_TIMES, true);
+define("FNT_HEADER_TEXT", FNT_TIMES, true);
+
+define("FNT_MAIN_SIZE", 12, true);
+define("FNT_QUESTION_SIZE", 10, true);
+define("FNT_HEADER_SIZE", 10, true);
+
+
+class RtfIzvozAnalizaCReport {
+
+ var $ank_id; // trenutna anketa
+ var $usr_id; // trenutni user
+
+ var $printPreview = false; // ali kli?e konstruktor
+ var $pi=array('canCreate'=>false); // za shrambo parametrov in sporocil
+ var $rtf;
+
+ private $headFileName = null; # pot do header fajla
+ private $dataFileName = null; # pot do data fajla
+ private $dataFileStatus = null; # status data datoteke
+
+ var $creportProfile = 0; // Izbran profil porocila
+
+ var $sessionData; // podatki ki so bili prej v sessionu - za nastavitve, ki se prenasajo v izvoze...
+
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null)
+ {
+ global $site_path;
+ global $global_user_id;
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) )
+ {
+ $this->ank_id = $anketa;
+
+ SurveyAnalysis::Init($this->ank_id);
+ SurveyAnalysis::$setUpJSAnaliza = false;
+
+ // Nastavimo pravi profil porocila
+ $this->creportProfile = SurveyUserSetting :: getInstance()->getSettings('default_creport_profile');
+ $this->creportProfile = isset($this->creportProfile) ? $this->creportProfile : 0;
+
+ // Testiramo kako je obrnjen dokument (ce vsebuje crosstabe, means ali ttest je lanscape)
+ $orientation = ($this->landscapeTest()) ? true : false;
+
+ // create new RTF document
+ $this->rtf = new enka_RTF($orientation);
+
+ // Poskrbimo za datoteko s podatki
+ $SDF = SurveyDataFile::get_instance();
+ $SDF->init($this->ank_id);
+ $SDF->prepareFiles();
+
+ $this->headFileName = $SDF->getHeaderFileName();
+ $this->dataFileName = $SDF->getDataFileName();
+ $this->dataFileStatus = $SDF->getStatus();
+
+ // Inicializiramo in polovimo nastavitve missing profila
+ SurveyStatusProfiles::Init($this->ank_id);
+
+ SurveyMissingProfiles :: Init($this->ank_id,$global_user_id);
+ SurveyConditionProfiles :: Init($this->ank_id, $global_user_id);
+ SurveyZankaProfiles :: Init($this->ank_id, $global_user_id);
+ SurveyTimeProfiles :: Init($this->ank_id, $global_user_id);
+
+ SurveyDataSettingProfiles :: Init($this->ank_id);
+
+ //polovimo podatke o nastavitvah trenutnega profila (missingi..)
+ SurveyAnalysis::$missingProfileData = SurveyMissingProfiles::getProfile(SurveyAnalysis::$currentMissingProfile);
+ #preberemo HEADERS iz datoteke
+ SurveyAnalysis::$_HEADERS = unserialize(file_get_contents($this->headFileName));
+ # odstranimo sistemske variable tipa email, ime, priimek, geslo
+ SurveyAnalysis::removeSystemVariables();
+ # polovimo frekvence
+ SurveyAnalysis::getFrequencys();
+
+ // preberemo nastavitve iz baze (prej v sessionu)
+ SurveyUserSession::Init($this->ank_id);
+ $this->sessionData = SurveyUserSession::getData();
+ }
+ else
+ {
+ $this->pi['msg'] = "Anketa ni izbrana!";
+ $this->pi['canCreate'] = false;
+ return false;
+ }
+ if ( SurveyInfo::getInstance()->SurveyInit($this->ank_id) && $this->init())
+ {
+ $this->usr_id = $global_user_id;
+ SurveyUserSetting::getInstance()->Init($this->ank_id, $this->usr_id);
+ }
+ else
+ return false;
+
+ // ce smo prisli do tu je vse ok
+ $this->pi['canCreate'] = true;
+
+ return true;
+ }
+
+ function checkCreate()
+ {
+ return $this->pi['canCreate'];
+ }
+
+ function getFile($fileName)
+ {
+ //Close and output rtf document
+// $this->rtf->Output($fileName, 'I');
+ $this->rtf->display($fileName = "analiza.rtf",true);
+ }
+
+
+ function init()
+ {
+ global $lang;
+
+ // dodamo avtorja in naslov
+ $this->rtf->WriteTitle();
+ $this->rtf->WriteHeader($this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()), 'left');
+ $this->rtf->WriteHeader($this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()), 'right');
+ $this->rtf->WriteFooter($lang['page']." {PAGE} / {NUMPAGES}", 'right');
+ $this->rtf->set_default_font(FNT_TIMES, FNT_MAIN_SIZE);
+ return true;
+ }
+
+ function createRtf()
+ {
+ global $site_path;
+ global $lang;
+
+ // izpisemo prvo stran
+ //$this->createFrontPage();
+
+ $what = 'creport_title_profile_'.$this->creportProfile;
+ $sql = sisplet_query("SELECT value FROM srv_user_setting_for_survey WHERE sid='$this->ank_id' AND uid='$this->usr_id' AND what='$what'");
+
+ if(mysqli_num_rows($sql) == 0){
+ $titleString = $lang['export_analisys_creport'].': '.SurveyInfo::getInstance()->getSurveyTitle();
+ }
+ else{
+ $row = mysqli_fetch_array($sql);
+ $titleString = $row['value'];
+ }
+
+ $this->rtf->draw_title($this->encodeText($titleString));
+
+ $this->rtf->MyRTF .= $this->rtf->_font_size(16);
+
+ $sql = sisplet_query("SELECT * FROM srv_custom_report WHERE ank_id='$this->ank_id' AND usr_id='$this->usr_id' AND profile='$this->creportProfile' ORDER BY vrstni_red ASC");
+ if(mysqli_num_rows($sql) > 0){
+
+ // Loop po vseh dodanih elementih porocila
+ while($row = mysqli_fetch_array($sql)){
+
+ switch($row['type']){
+
+ // sumarnik
+ case '1':
+ // naslov elementa
+ $this->displayTitle($row);
+
+ $this->displaySum($row);
+
+ // Komentar elementa
+ $this->displayComment($row['text']);
+
+ break;
+
+ // frekvence
+ case '2':
+ // naslov elementa
+ $this->displayTitle($row);
+
+ $this->displayFreq($row);
+
+ // Komentar elementa
+ $this->displayComment($row['text']);
+
+ break;
+
+ // opisne
+ case '3':
+ // naslov elementa
+ $this->displayTitle($row);
+
+ $this->displayDesc($row);
+
+ // Komentar elementa
+ $this->displayComment($row['text']);
+
+ break;
+
+ // grafi
+ case '4':
+ // naslov elementa
+ $this->displayTitle($row);
+
+ $this->displayChart($row);
+
+ // Komentar elementa
+ $this->displayComment($row['text']);
+
+ break;
+
+ // crosstab
+ case '5':
+ // naslov elementa
+ $this->displayTitle($row);
+
+ // tabela
+ if($row['sub_type'] == '0')
+ $this->displayCrosstab($row);
+ // graf
+ else
+ $this->displayCrosstabChart($row);
+
+ // Komentar elementa
+ $this->displayComment($row['text']);
+
+ break;
+
+ // mean
+ case '6':
+ // naslov elementa
+ $this->displayTitle($row);
+
+ // tabela
+ if($row['sub_type'] == '0')
+ $this->displayMean($row);
+ // graf
+ else
+ $this->displayMeanChart($row);
+
+ // Komentar elementa
+ $this->displayComment($row['text']);
+
+ break;
+
+ // ttest
+ case '7':
+ // naslov elementa
+ $this->displayTitle($row);
+
+ // tabela
+ if($row['sub_type'] == '0')
+ $this->displayTTest($row);
+ // graf
+ else
+ $this->displayTTestChart($row);
+
+ // Komentar elementa
+ $this->displayComment($row['text']);
+
+ break;
+
+ // text
+ case '8':
+ $this->displayText($row['text']);
+
+ break;
+
+ // break
+ case '9':
+ // naslov elementa
+ $this->displayTitle($row);
+
+ // tabela
+ if($row['sub_type'] == '0')
+ $this->displayBreak($row);
+ // graf
+ else
+ $this->displayBreakChart($row);
+
+ // Komentar elementa
+ $this->displayComment($row['text']);
+
+ break;
+
+ // page break
+ case '-1':
+ $this->rtf->new_page();
+
+ break;
+ }
+ }
+ }
+ }
+
+
+ // Izpisemo sumarnik element
+ function displaySum($element){
+
+ $spid = $element['spr1'];
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ # preverjamo ali je meta
+ if (($spremenljivka['tip'] != 'm')
+ && (!isset($_spid) || (isset($_spid) && $_spid == $spid))
+ && (($global_user_id === 0 || $global_user_id === null) || in_array($spremenljivka['tip'], SurveyAnalysis::$_FILTRED_TYPES ) )) {
+
+ # ali imamo sfiltrirano spremenljivko
+ //if (isset(SurveyAnalysis::$_FILTRED_VARIABLES[$spid])) {
+
+ rtfIzvozAnalizaFunctions::init($this->ank_id, $this, $from='sums');
+
+ # prikazujemo v odvisnosti od kategorije spremenljivke
+ switch ($spremenljivka['tip']) {
+ case 1:
+ # radio - prikaže navpiÄno
+ rtfIzvozAnalizaFunctions::sumVertical($spid,'sums');
+ break;
+
+ case 2:
+ #checkbox Äe je dihotomna:
+ rtfIzvozAnalizaFunctions::sumVerticalCheckbox($spid,'sums');
+ break;
+
+ case 3:
+ # dropdown - prikjaže navpiÄno
+ rtfIzvozAnalizaFunctions::sumVertical($spid,'sums');
+ break;
+
+ case 6:
+ # multigrid
+ rtfIzvozAnalizaFunctions::sumHorizontal($spid,'sums');
+ break;
+
+ case 16:
+ #multicheckbox Äe je dihotomna:
+ rtfIzvozAnalizaFunctions::sumMultiHorizontalCheckbox($spid,'sums');
+ break;
+
+ case 17:
+ #razvrÅ¡Äanje Äe je ordinalna
+ rtfIzvozAnalizaFunctions::sumHorizontal($spid,'sums');
+ break;
+
+ case 4: # text
+ case 8: # datum
+ rtfIzvozAnalizaFunctions::sumTextVertical($spid,'sums');
+ break;
+
+ case 21: # besedilo*
+ # varabla tipa »besedilo« je v sumarniku IDENTIČNA kot v FREKVENCAH.
+ if ($spremenljivka['cnt_all'] == 1) {
+ // Äe je enodimenzionalna prikažemo kot frekvence
+ // predvsem zaradi vprašanj tipa: language, email...
+ rtfIzvozAnalizaFunctions::sumTextVertical($spid,'sums');
+ } else {
+ rtfIzvozAnalizaFunctions::sumMultiText($spid,'sums');
+ }
+ break;
+
+ case 19: # multitext
+ rtfIzvozAnalizaFunctions::sumMultiText($spid,'sums');
+ break;
+
+ case 7:
+ case 18:
+ case 22:
+ # variabla tipa »število« je v sumarniku identiÄna kot v DESCRIPTIVES.
+ rtfIzvozAnalizaFunctions::sumNumberVertical($spid,'sums');
+ break;
+
+ case 20:
+ # variabla tipa »število« je v sumarniku identiÄna kot v DESCRIPTIVES.
+ rtfIzvozAnalizaFunctions::sumMultiNumber($spid,'sums');
+ break;
+
+ case 5:
+ # nagovor
+ rtfIzvozAnalizaFunctions::sumNagovor($spid,'sums');
+ break;
+ }
+
+ //}
+
+ } // end if $spremenljivka['tip'] != 'm'
+ }
+
+ // Izpisemo frekvence element
+ function displayFreq($element){
+
+ $spid = $element['spr1'];
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ # preverjamo ali je meta
+ if (($spremenljivka['tip'] != 'm')
+ && (!isset($_spid) || (isset($_spid) && $_spid == $spid))
+ && (($global_user_id === 0 || $global_user_id === null) || in_array($spremenljivka['tip'], SurveyAnalysis::$_FILTRED_TYPES ) )) {
+
+ # ali imamo sfiltrirano spremenljivko
+ //if (isset(SurveyAnalysis::$_FILTRED_VARIABLES[$spid])) {
+
+ rtfIzvozAnalizaFunctions::init($this->ank_id, $this, $from='freq');
+
+ # prikazujemo v odvisnosti od kategorije spremenljivke
+ switch ($spremenljivka['tip']) {
+ case 1: # radio - prikjaže navpiÄno
+ case 2: #checkbox Äe je dihotomna:
+ case 3: # dropdown - prikjaže navpiÄno
+ case 6: # multigrid
+ case 4: # text
+ case 7:# variabla tipa »število«
+ case 8: # datum
+ case 16: #multicheckbox Äe je dihotomna:
+ case 17: #razvrÅ¡Äanje Äe je ordinalna
+ case 18: # vsota
+ case 19: # multitext
+ case 20: # multi number
+ case 21: # besedilo*
+ case 22: # kalkulacija
+ rtfIzvozAnalizaFunctions::frequencyVertical($spid);
+ break;
+ case 5:
+ # nagovor
+ rtfIzvozAnalizaFunctions::sumNagovor($spid,'freq');
+ break;
+ }
+ //}
+
+ } // end if $spremenljivka['tip'] != 'm'
+ }
+
+ // Izpisemo opisne stat element
+ function displayDesc($element){
+ global $lang;
+
+ # polovimo frekvence
+ SurveyAnalysis::getDescriptives();
+
+ $spid = $element['spr1'];
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ rtfIzvozAnalizaFunctions::init($this->ank_id, $this, $from='desc');
+
+ rtfIzvozAnalizaFunctions::descTableHeader();
+
+ # preverjamo ali je meta
+ if ($spremenljivka['tip'] != 'm'
+ && ( count(SurveyAnalysis::$_FILTRED_VARIABLES) == 0 || (count(SurveyAnalysis::$_FILTRED_VARIABLES) > 0 && isset(SurveyAnalysis::$_FILTRED_VARIABLES[$spid]) ))
+ && in_array($spremenljivka['tip'], SurveyAnalysis::$_FILTRED_TYPES)) {
+
+ $show_enota = false;
+ # preverimo ali imamo samo eno variablo in Äe iammo enoto
+ if ((int)$spremenljivka['enota'] != 0 || $spremenljivka['cnt_all'] > 1 ) {
+ $show_enota = true;
+ }
+
+ # izpišemo glavno vrstico z podatki
+ $_sequence = null;
+ # za enodimenzijske tipe izpišemo podatke kar v osnovni vrstici
+ if (!$show_enota) {
+// if ($spremenljivka['tip'] == 1 || $spremenljivka['tip'] == 3
+// || $spremenljivka['tip'] == 4 || $spremenljivka['tip'] == 7 || $spremenljivka['tip'] == 8) {
+ $variable = $spremenljivka['grids'][0]['variables'][0];
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ rtfIzvozAnalizaFunctions::displayDescriptivesSpremenljivkaRow($spid, $spremenljivka,$show_enota,$_sequence);
+ } else {
+ if ($spremenljivka['tip'] == 1 || $spremenljivka['tip'] == 3) {
+ $variable = $spremenljivka['grids'][0]['variables'][0];
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ $show_enota = false;
+ }
+ rtfIzvozAnalizaFunctions::displayDescriptivesSpremenljivkaRow($spid, $spremenljivka,$show_enota,$_sequence);
+ #zloopamo skozi variable
+ $_sequence = null;
+ $grd_cnt=0;
+ if (count($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+
+ if (count($spremenljivka['grids']) > 1 && $grd_cnt !== 0 && $spremenljivka['tip'] != 6) {
+ $grid['new_grid'] = true;
+ }
+ $grd_cnt++;
+ # dodamo dodatne vrstice z albelami grida
+ if (count ($grid['variables']) > 0)
+ foreach ($grid['variables'] AS $vid => $variable ){
+ # dodamo ostale vrstice
+ $do_show = ($variable['other'] !=1 && ($spremenljivka['tip'] == 1 || $spremenljivka['tip'] == 3 || $spremenljivka['tip'] == 5 || $spremenljivka['tip'] == 8 ))
+ ? false
+ : true;
+ if ($do_show) {
+ rtfIzvozAnalizaFunctions::displayDescriptivesVariablaRow($spremenljivka,$grid,$variable);
+
+ }
+ $grid['new_grid'] = false;
+
+ }
+ }
+ } //else: if (!$show_enota)
+
+ rtfIzvozAnalizaFunctions::tableEnd();
+
+ } // end if $spremenljivka['tip'] != 'm'
+ }
+
+ // Izpisemo graf element
+ function displayChart($element){
+
+ $spid = $element['spr1'];
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ # preverjamo ali je meta
+ if (($spremenljivka['tip'] != 'm'
+ && in_array($spremenljivka['tip'], SurveyAnalysis::$_FILTRED_TYPES ))
+ && (!isset($_spid) || (isset($_spid) && $_spid == $spid))) {
+ # ali imamo sfiltrirano spremenljivko
+ //if ($vars_count == 0 || ($vars_count > 0 && isset(SurveyAnalysis::$_FILTRED_VARIABLES[$spid]) ) ) {
+
+ // Ce imamo radio tip in manj kot 5 variabel po defaultu prikazemo piechart
+ $vars = count($spremenljivka['options']);
+ $type = 0;
+ if( ($spremenljivka['tip'] == 1 || $spremenljivka['tip'] == 3) && $vars < 5 )
+ $type = 2;
+
+ //ce imamo nominalno spremenljivko ali ce je samo 1 variabla nimamo povprecij
+ if($spremenljivka['tip'] == 6 && ($spremenljivka['cnt_all'] == 1 || $spremenljivka['skala'] == 1) && $type == 0 )
+ $type = 2;
+
+ rtfIzvozAnalizaFunctions::init($this->ank_id, $this, $from='charts');
+
+ if($spremenljivka['tip'] == 4 || $spremenljivka['tip'] == 19 || $spremenljivka['tip'] == 21 || $spremenljivka['tip'] == 22){
+ // ce imamo vklopljeno nastavitev prikaz tabel med grafi (default)
+ if($spremenljivka['tip'] == 19)
+ rtfIzvozAnalizaFunctions::sumMultiText($spid, 'sums');
+ else
+ rtfIzvozAnalizaFunctions::frequencyVertical($spid);
+ }
+ elseif( in_array($spremenljivka['tip'],array(1,2,3,6,7,8,16,17,18,20)) ){
+ // Prikazemo posamezen graf
+ rtfIzvozAnalizaFunctions::displayChart($spid, $type);
+ }
+ //}
+
+ } // end if $spremenljivka['tip'] != 'm'
+ }
+
+ // Izpisemo crosstab tabelo
+ function displayCrosstab($element){
+ global $lang;
+
+ // Napolnimo podatke crosstabu
+ $crossData1 = explode("-", $element['spr1']);
+ $crossData2 = explode("-", $element['spr2']);
+
+ $crosstabClass = new SurveyCrosstabs();
+ $crosstabClass->Init($this->ank_id);
+
+ $crosstabClass->setVariables($crossData1[0],$crossData1[1],$crossData1[2],$crossData2[0],$crossData2[1],$crossData2[2]);
+
+ // Naslov
+ if($element['spr1'] == '' || $element['spr2'] == '')
+ $title = $lang['srv_select_spr'];
+ else{
+ $show_variables_values = true;
+
+ $spr1 = $crosstabClass->_HEADERS[$crossData1[1]];
+ $spr2 = $crosstabClass->_HEADERS[$crossData2[1]];
+
+ # za multicheckboxe popravimo naslov, na podtip
+ $sub_q1 = null;
+ $sub_q2 = null;
+ if ($spr1['tip'] == '6' || $spr1['tip'] == '7' || $spr1['tip'] == '16' || $spr1['tip'] == '17' || $spr1['tip'] == '18' || $spr1['tip'] == '19' || $spr1['tip'] == '20' || $spr1['tip'] == '21' ) {
+ foreach ($spr1['grids'] AS $grid) {
+ foreach ($grid['variables'] AS $variable) {
+ if ($variable['sequence'] == $v_first['seq']) {
+ $sub_q1 .= strip_tags($spr1['naslov']);
+ if ($show_variables_values == true ) {
+ $sub_q1 .= ' ('.strip_tags($spr1['variable']).')';
+ }
+ if ($spr1['tip'] == '16') {
+ $sub_q1 .= strip_tags($grid1['naslov']) . ($show_variables_values == true ? ' (' . strip_tags($grid1['variable']) . ')' : '');
+ } else {
+ $sub_q1 .= strip_tags($variable['naslov']) . ($show_variables_values == true ? ' (' . strip_tags($variable['variable']) . ')' : '');
+ }
+ }
+ }
+ }
+ }
+ if ($sub_q1 == null) {
+ $sub_q1 .= strip_tags($spr1['naslov']);
+ $sub_q1 .= ($show_variables_values == true ? '&nbsp;('.strip_tags($spr1['variable']).')' : '');
+ }
+ if ($spr2['tip'] == '6' || $spr2['tip'] == '7' || $spr2['tip'] == '16' || $spr2['tip'] == '17' || $spr2['tip'] == '18' || $spr2['tip'] == '19' || $spr2['tip'] == '20' || $spr2['tip'] == '21') {
+ foreach ($spr2['grids'] AS $grid) {
+ foreach ($grid['variables'] AS $variable) {
+ if ($variable['sequence'] == $v_second['seq']) {
+ $sub_q2 .= strip_tags($spr2['naslov']);
+ if ($show_variables_values == true) {
+ $sub_q2 .= ' ('.strip_tags($spr2['variable']).')';
+ }
+ if ($spr2['tip'] == '16') {
+ $sub_q2.= strip_tags($grid2['naslov']) . ($show_variables_values == true ? ' (' . strip_tags($grid2['variable']) . ')' : '');
+ } else {
+ $sub_q2.= strip_tags($variable['naslov']) . ($show_variables_values == true ? ' (' . strip_tags($variable['variable']) . ')' : '');
+ }
+ }
+ }
+ }
+ }
+ if ($sub_q2 == null) {
+ $sub_q2 .= strip_tags($spr2['naslov']);
+ $sub_q2 .= ($show_variables_values == true ? ' ('.strip_tags($spr2['variable']).')' : '');
+ }
+
+ $title = $sub_q1 . ' / ' . $sub_q2;
+ }
+
+ $subtitle = '('.$lang['srv_crosstabs']. ($element['sub_type'] == 1 ? ' - '.$lang['srv_chart'] : '') .')';
+
+ $title .= ' <span class="anl_ita">'.$subtitle.'</span>';
+
+ rtfIzvozAnalizaFunctions::init($this->ank_id, $this, $from='crosstab', $crosstabClass);
+ rtfIzvozAnalizaFunctions::displayCrosstabsTable();
+ }
+
+ // Izpisemo crosstab graf
+ function displayCrosstabChart($element){
+ // Napolnimo podatke crosstabu
+ $crossData1 = explode("-", $element['spr2']);
+ $crossData2 = explode("-", $element['spr1']);
+
+ $crosstabClass = new SurveyCrosstabs();
+ $crosstabClass->Init($this->ank_id);
+
+
+ // Ce iz breaka klicemo graf za crosstab tabelo moramo popravit grid
+ if($element['type'] == '9'){
+ foreach ($crosstabClass->_HEADERS[$crossData1[1]]['grids'] AS $gid => $grid) {
+ foreach ($grid['variables'] AS $vkey => $vrednost) {
+ if ($vrednost['sequence'] == $crossData1[0]) {
+ $crossData1[2] = $gid;
+ }
+ }
+ }
+ }
+
+ $crosstabClass->setVariables($crossData1[0],$crossData1[1],$crossData1[2],$crossData2[0],$crossData2[1],$crossData2[2]);
+
+ // Naslov
+ if($element['spr1'] == '' || $element['spr2'] == '')
+ $title = $lang['srv_select_spr'];
+ else{
+ $show_variables_values = true;
+
+ $spr1 = $crosstabClass->_HEADERS[$crossData1[1]];
+ $spr2 = $crosstabClass->_HEADERS[$crossData2[1]];
+
+ # za multicheckboxe popravimo naslov, na podtip
+ $sub_q1 = null;
+ $sub_q2 = null;
+ if ($spr1['tip'] == '6' || $spr1['tip'] == '7' || $spr1['tip'] == '16' || $spr1['tip'] == '17' || $spr1['tip'] == '18' || $spr1['tip'] == '19' || $spr1['tip'] == '20' || $spr1['tip'] == '21' ) {
+ foreach ($spr1['grids'] AS $grid) {
+ foreach ($grid['variables'] AS $variable) {
+ if ($variable['sequence'] == $v_first['seq']) {
+ $sub_q1 .= strip_tags($spr1['naslov']);
+ if ($show_variables_values == true ) {
+ $sub_q1 .= ' ('.strip_tags($spr1['variable']).')';
+ }
+ if ($spr1['tip'] == '16') {
+ $sub_q1 .= strip_tags($grid1['naslov']) . ($show_variables_values == true ? ' (' . strip_tags($grid1['variable']) . ')' : '');
+ } else {
+ $sub_q1 .= strip_tags($variable['naslov']) . ($show_variables_values == true ? ' (' . strip_tags($variable['variable']) . ')' : '');
+ }
+ }
+ }
+ }
+ }
+ if ($sub_q1 == null) {
+ $sub_q1 .= strip_tags($spr1['naslov']);
+ $sub_q1 .= ($show_variables_values == true ? '&nbsp;('.strip_tags($spr1['variable']).')' : '');
+ }
+ if ($spr2['tip'] == '6' || $spr2['tip'] == '7' || $spr2['tip'] == '16' || $spr2['tip'] == '17' || $spr2['tip'] == '18' || $spr2['tip'] == '19' || $spr2['tip'] == '20' || $spr2['tip'] == '21') {
+ foreach ($spr2['grids'] AS $grid) {
+ foreach ($grid['variables'] AS $variable) {
+ if ($variable['sequence'] == $v_second['seq']) {
+ $sub_q2 .= strip_tags($spr2['naslov']);
+ if ($show_variables_values == true) {
+ $sub_q2 .= ' ('.strip_tags($spr2['variable']).')';
+ }
+ if ($spr2['tip'] == '16') {
+ $sub_q2.= strip_tags($grid2['naslov']) . ($show_variables_values == true ? ' (' . strip_tags($grid2['variable']) . ')' : '');
+ } else {
+ $sub_q2.= strip_tags($variable['naslov']) . ($show_variables_values == true ? ' (' . strip_tags($variable['variable']) . ')' : '');
+ }
+ }
+ }
+ }
+ }
+ if ($sub_q2 == null) {
+ $sub_q2 .= strip_tags($spr2['naslov']);
+ $sub_q2 .= ($show_variables_values == true ? ' ('.strip_tags($spr2['variable']).')' : '');
+ }
+
+ $title = $sub_q1 . ' / ' . $sub_q2;
+ }
+
+ $subtitle = '('.$lang['srv_crosstabs']. ($element['sub_type'] == 1 ? ' - '.$lang['srv_chart'] : '') .')';
+
+ $title .= ' <span class="anl_ita">'.$subtitle.'</span>';
+
+ $this->crosstabVars = array($sub_q1, $sub_q2);
+
+ rtfIzvozAnalizaFunctions::init($this->ank_id, $this, $from='crosstab_chart', $crosstabClass);
+ rtfIzvozAnalizaFunctions::displayCrosstabChart();
+ }
+
+ // Izpisemo mean tabelo
+ function displayMean($element){
+
+ // ustvarimo means objekt
+ $meansClass = new SurveyMeans($this->ank_id);
+
+ // Napolnimo podatke crosstabu
+ $meanData1 = explode("-", $element['spr2']);
+ $meanData2 = explode("-", $element['spr1']);
+
+ $v_first = array('seq' => $meanData1[0], 'spr' => $meanData1[1], 'grd' => $meanData1[2]);
+ $v_second = array('seq' => $meanData2[0], 'spr' => $meanData2[1], 'grd' => $meanData2[2]);
+
+ $_means[0] = $meansClass->createMeans($v_first, $v_second);
+
+ rtfIzvozAnalizaFunctions::init($this->ank_id, $this, $from='mean', $meansClass);
+ rtfIzvozAnalizaFunctions::displayMeansTable($_means);
+ }
+
+ // Izpisemo mean graf
+ function displayMeanChart($element){
+
+ // ustvarimo means objekt
+ $meansClass = new SurveyMeans($this->ank_id);
+
+ // Napolnimo podatke crosstabu
+ $meanData1 = explode("-", $element['spr2']);
+ $meanData2 = explode("-", $element['spr1']);
+
+ $v_first = array('seq' => $meanData1[0], 'spr' => $meanData1[1], 'grd' => $meanData1[2]);
+ $v_second = array('seq' => $meanData2[0], 'spr' => $meanData2[1], 'grd' => $meanData2[2]);
+
+ $this->meanData2[0] = $v_first;
+ $this->meanData1[0] = $v_second;
+
+ $_means[0] = $meansClass->createMeans($v_first, $v_second);
+
+ rtfIzvozAnalizaFunctions::init($this->ank_id, $this, $from='mean_chart', $meansClass);
+ rtfIzvozAnalizaFunctions::displayMeanChart(0);
+ }
+
+ // Izpisemo ttest tabelo
+ function displayTTest($element){
+
+ // ustvarimo ttest objekt
+ $ttestClass = new SurveyTTest($this->ank_id);
+
+ // Nastavimo session da lahko pravilno izrisemo tabelo/graf
+ $ttestData1 = explode("-", $element['spr1']);
+ $ttestData2 = explode("-", $element['spr2']);
+
+ $dataArray = array();
+
+ $dataArray['spr2'] = $ttestData1[1];
+ $dataArray['grid2'] = $ttestData1[2];
+ $dataArray['seq2'] = $ttestData1[0];
+ $dataArray['label2'] = strip_tags($this->getTTestLabel($element['spr1'], $ttestClass));
+
+ $dataArray['sub_conditions'][0] = $ttestData1[3];
+ $dataArray['sub_conditions'][1] = $ttestData1[4];
+
+ $dataArray['variabla'][0]['seq'] = $ttestData2[0];
+ $dataArray['variabla'][0]['spr'] = $ttestData2[1];
+ $dataArray['variabla'][0]['grd'] = $ttestData2[2];
+
+ // Shranimo spremenjene nastavitve v bazo
+ SurveyUserSession::Init($this->ank_id);
+ $sessionData = SurveyUserSession::getData('ttest');
+ $sessionData = $dataArray;
+ SurveyUserSession::saveData($sessionData, 'ttest');
+
+ // ustvarimo ttest objekt
+ $ttestClass = new SurveyTTest($this->ank_id);
+
+ if (count($this->sessionData['ttest']['sub_conditions']) > 1 ) {
+ $variables1 = $ttestClass->getSelectedVariables();
+ if (count($variables1) > 0) {
+ foreach ($variables1 AS $v_first) {
+ $ttest = null;
+ $ttest = $ttestClass->createTTest($v_first, $this->sessionData['ttest']['sub_conditions']);
+
+ rtfIzvozAnalizaFunctions::init($this->ank_id, $this, $from='ttest', $ttestClass);
+ rtfIzvozAnalizaFunctions::displayTTestTable($ttest);
+ }
+ }
+ }
+ }
+
+ // Izpisemo ttest graf
+ function displayTTestChart($element){
+
+ // ustvarimo ttest objekt
+ $ttestClass = new SurveyTTest($this->ank_id);
+
+ // Nastavimo session da lahko pravilno izrisemo tabelo/graf
+ $ttestData1 = explode("-", $element['spr1']);
+ $ttestData2 = explode("-", $element['spr2']);
+
+ $dataArray = array();
+
+ $dataArray['spr2'] = $ttestData1[1];
+ $dataArray['grid2'] = $ttestData1[2];
+ $dataArray['seq2'] = $ttestData1[0];
+ $dataArray['label2'] = strip_tags($this->getTTestLabel($element['spr1'], $ttestClass));
+
+ $dataArray['sub_conditions'][0] = $ttestData1[3];
+ $dataArray['sub_conditions'][1] = $ttestData1[4];
+
+ $dataArray['variabla'][0]['seq'] = $ttestData2[0];
+ $dataArray['variabla'][0]['spr'] = $ttestData2[1];
+ $dataArray['variabla'][0]['grd'] = $ttestData2[2];
+
+ // Shranimo spremenjene nastavitve v bazo
+ SurveyUserSession::Init($this->ank_id);
+ $sessionData = SurveyUserSession::getData('ttest');
+ $sessionData = $dataArray;
+ SurveyUserSession::saveData($sessionData, 'ttest');
+
+ // ustvarimo ttest objekt
+ $ttestClass = new SurveyTTest($this->ank_id);
+
+ if (count($this->sessionData['ttest']['sub_conditions']) > 1 ) {
+ $variables1 = $ttestClass->getSelectedVariables();
+ if (count($variables1) > 0) {
+ foreach ($variables1 AS $v_first) {
+
+ rtfIzvozAnalizaFunctions::init($this->ank_id, $this, $from='ttest_chart', $ttestClass);
+ rtfIzvozAnalizaFunctions::displayTTestChart();
+ }
+ }
+ }
+ }
+
+ // Izpisemo crosstab tabelo
+ function displayBreak($element){
+ global $lang;
+
+ // Napolnimo podatke breaku
+ $breakData1 = explode("-", $element['spr1']);
+ $breakData2 = explode("-", $element['spr2']);
+
+ $breakClass = new SurveyBreak($this->ank_id);
+
+ $forSpr = $breakData1[1];
+ $_spr_data = $breakClass->_HEADERS[$forSpr];
+
+ # poiÅ¡Äemo sekvenco
+ $sekvenca = $breakData1[0];
+
+ # poiÅ¡Äemo opcije
+ $opcije = $_spr_data['options'];
+
+ if ((int)$_spr_data['tip'] != 2) {
+ $seqences[] = $sekvenca;
+ $options = $opcije;
+ } else {
+ # za checkboxe imamo veÄ sekvenc
+ $seqences = explode('_',$_spr_data['sequences']);
+ $options[1] = $opcije[1];
+ }
+
+ # za vsako opcijo posebej izraÄunamo povpreÄja za vse spremenljivke
+ /*$frequencys = array();
+ if (count($seqences) > 0) {
+ foreach ($seqences as $seq) {
+
+ if (count($options) > 0) {
+ foreach ($options as $oKey => $option) {
+ # zloopamo skozi variable
+ $oKeyfrequencys = $breakClass->getAllFrequencys($oKey, $seq, $forSpr);
+ if ($oKeyfrequencys != null) {
+ $frequencys[$seq][$oKey] = $oKeyfrequencys;
+ }
+ }
+ }
+ }
+ }*/
+ $frequencys = null;
+ if (count($options) > 0) {
+ foreach ($options as $okey => $option) {
+
+ # zloopamo skozi variable
+ $okeyfrequencys = $breakClass->getAllFrequencys($okey, $sekvenca, $forSpr);
+ if ($okeyfrequencys != null) {
+ if ($frequencys == null) {
+ $frequencys = array();
+ }
+ $frequencys[$okey] = $okeyfrequencys;
+ }
+ }
+ }
+
+ $spremenljivka = $breakClass->_HEADERS[$breakData2[1]];
+ $spremenljivka['id'] = $breakData2[1];
+
+ $tip = $spremenljivka['tip'];
+ $skala = $spremenljivka['skala'];
+
+
+ // Izrisujemo tabelo ki ni crosstab
+ if( ($tip == 6 && $skala == 0) || in_array($tip, array(4,7,17,18,19,20,21)) ){
+
+ rtfIzvozAnalizaFunctions::init($this->ank_id, $this, $from='break', $breakClass);
+
+ if($tip == 6 && $skala == 0)
+ rtfIzvozAnalizaFunctions::displayBreakTableMgrid($forSpr,$frequencys,$spremenljivka);
+
+ elseif($tip == 4 || $tip == 19 || $tip == 21){
+ // Nastavimo se katero podtabelo izrisemo (sekvenca odvisne spr)
+ $spremenljivka['break_sub_table']['sequence'] = $breakData2[0];
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ if($spremenljivka['break_sub_table']['sequence'] == $grid['variables'][0]['sequence']){
+ $spremenljivka['break_sub_table']['key'] = $gkey;
+ break;
+ }
+ }
+
+ rtfIzvozAnalizaFunctions::displayBreakTableText($forSpr,$frequencys,$spremenljivka);
+ }
+
+ else{
+ // Nastavimo se katero podtabelo izrisemo (sekvenca odvisne spr)
+ $spremenljivka['break_sub_table']['sequence'] = $breakData2[0];
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ if($spremenljivka['break_sub_table']['sequence'] == $grid['variables'][0]['sequence']){
+ $spremenljivka['break_sub_table']['key'] = $gkey;
+ break;
+ }
+ }
+
+ rtfIzvozAnalizaFunctions::displayBreakTableNumber($forSpr,$frequencys,$spremenljivka);
+ }
+ }
+
+ // Izrisujemo crosstab
+ else{
+ $this->displayCrosstab($element);
+ }
+ }
+
+ // Izpisemo crosstab graf
+ function displayBreakChart($element){
+ // Napolnimo podatke breaku
+ $breakData1 = explode("-", $element['spr1']);
+ $breakData2 = explode("-", $element['spr2']);
+
+ $breakClass = new SurveyBreak($this->ank_id);
+
+ $forSpr = $breakData1[1];
+ $_spr_data = $breakClass->_HEADERS[$forSpr];
+
+ # poiÅ¡Äemo sekvenco
+ $sekvenca = $breakData1[0];
+
+ # poiÅ¡Äemo opcije
+ $opcije = $_spr_data['options'];
+
+ if ((int)$_spr_data['tip'] != 2) {
+ $seqences[] = $sekvenca;
+ $options = $opcije;
+ } else {
+ # za checkboxe imamo veÄ sekvenc
+ $seqences = explode('_',$_spr_data['sequences']);
+ $options[1] = $opcije[1];
+ }
+
+ $frequencys = null;
+ if (count($options) > 0) {
+ foreach ($options as $okey => $option) {
+
+ # zloopamo skozi variable
+ $okeyfrequencys = $breakClass->getAllFrequencys($okey, $sekvenca, $forSpr);
+ if ($okeyfrequencys != null) {
+ if ($frequencys == null) {
+ $frequencys = array();
+ }
+ $frequencys[$okey] = $okeyfrequencys;
+ }
+ }
+ }
+
+ $spremenljivka = $breakClass->_HEADERS[$breakData2[1]];
+ $spremenljivka['id'] = $breakData2[1];
+
+ $tip = $spremenljivka['tip'];
+ $skala = $spremenljivka['skala'];
+
+
+ // Pri textovnih tipih vedno izrisemo tabelo
+ if($tip == 4 || $tip == 21 || $tip == 19){
+ // Nastavimo se katero podtabelo izrisemo (sekvenca odvisne spr)
+ $spremenljivka['break_sub_table']['sequence'] = $breakData2[0];
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ if($spremenljivka['break_sub_table']['sequence'] == $grid['variables'][0]['sequence']){
+ $spremenljivka['break_sub_table']['key'] = $gkey;
+ break;
+ }
+ }
+
+ rtfIzvozAnalizaFunctions::init($this->ank_id, $this, $from='break', $breakClass);
+ rtfIzvozAnalizaFunctions::displayBreakTableText($forSpr,$frequencys,$spremenljivka);
+ }
+
+ // Izrisujemo graf ki ni crosstab
+ elseif( ($tip == 6 && $skala == 0) || in_array($tip, array(7,17,18,20)) ){
+
+ rtfIzvozAnalizaFunctions::init($this->ank_id, $this, $from='break', $breakClass);
+
+ if($tip == 6 && $skala == 0)
+ rtfIzvozAnalizaFunctions::displayBreakChart($forSpr,$frequencys,$spremenljivka);
+
+ else{
+ // Nastavimo se katero podtabelo izrisemo (sekvenca odvisne spr)
+ $spremenljivka['break_sub_table']['sequence'] = $breakData2[0];
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ if($spremenljivka['break_sub_table']['sequence'] == $grid['variables'][0]['sequence']){
+ $spremenljivka['break_sub_table']['key'] = $gkey;
+ break;
+ }
+ }
+
+ rtfIzvozAnalizaFunctions::displayBreakChart($forSpr,$frequencys,$spremenljivka);
+ }
+ }
+
+ // Izrisujemo crosstab
+ else{
+ $this->displayCrosstabChart($element);
+ }
+ }
+
+ // Izpisemo element z besedilom elementa
+ function displayText($text){
+ global $lang;
+
+ // pretvorimo html text v rtf
+ $text = $this->rtf->HTMLtoRTF($text);
+
+ $this->rtf->TextCell($this->enkaEncode($text), array('width' => 10000, 'height' => 1,
+ 'align' => 'justify', 'valign' => 'bottom' , 'border' => '','colorF' => "0" ) );
+
+ $this->rtf->new_line(1);
+ }
+
+
+ // Izpisemo naslov elementa
+ function displayTitle($element){
+ global $lang;
+
+ // sumarnik
+ if($element['type'] == '1'){
+ $spr = SurveyAnalysis::$_HEADERS[$element['spr1']];
+
+ if($element['spr1'] == '')
+ $title = $lang['srv_select_spr'];
+ else
+ $title = $spr['variable'].' - '.$spr['naslov'];
+
+ $subtitle = ' ('.$lang['srv_sumarnik'].')';
+ }
+
+ // freq
+ elseif($element['type'] == '2'){
+ $spr = SurveyAnalysis::$_HEADERS[$element['spr1']];
+
+ if($element['spr1'] == '')
+ $title = $lang['srv_select_spr'];
+ else
+ $title = $spr['variable'].' - '.$spr['naslov'];
+
+ $subtitle = ' ('.$lang['srv_frequency'].')';
+ }
+
+ // desc
+ elseif($element['type'] == '3'){
+ $spr = SurveyAnalysis::$_HEADERS[$element['spr1']];
+
+ if($element['spr1'] == '')
+ $title = $lang['srv_select_spr'];
+ else
+ $title = $spr['variable'].' - '.$spr['naslov'];
+
+ $subtitle = ' ('.$lang['srv_descriptor'].')';
+ }
+
+ // chart
+ elseif($element['type'] == '4'){
+ $spr = SurveyAnalysis::$_HEADERS[$element['spr1']];
+
+ if($element['spr1'] == '')
+ $title = $lang['srv_select_spr'];
+ else
+ $title = $spr['variable'].' - '.$spr['naslov'];
+
+ $subtitle = ' ('.$lang['srv_chart'].')';
+ }
+
+ // crosstab
+ elseif($element['type'] == '5'){
+
+ // Napolnimo podatke crosstabu
+ $crossData1 = explode("-", $element['spr1']);
+ $crossData2 = explode("-", $element['spr2']);
+
+ $crosstabClass = new SurveyCrosstabs();
+ $crosstabClass->Init($this->ank_id);
+
+ $crosstabClass->setVariables($crossData1[0],$crossData1[1],$crossData1[2],$crossData2[0],$crossData2[1],$crossData2[2]);
+
+ // Naslov
+ if($element['spr1'] == '' || $element['spr2'] == '')
+ $title = $lang['srv_select_spr'];
+ else{
+ $show_variables_values = true;
+
+ $spr1 = $crosstabClass->_HEADERS[$crossData1[1]];
+ $spr2 = $crosstabClass->_HEADERS[$crossData2[1]];
+
+ # za multicheckboxe popravimo naslov, na podtip
+ $sub_q1 = null;
+ $sub_q2 = null;
+ if ($spr1['tip'] == '6' || $spr1['tip'] == '7' || $spr1['tip'] == '16' || $spr1['tip'] == '17' || $spr1['tip'] == '18' || $spr1['tip'] == '19' || $spr1['tip'] == '20' || $spr1['tip'] == '21' ) {
+ foreach ($spr1['grids'] AS $grid) {
+ foreach ($grid['variables'] AS $variable) {
+ if ($variable['sequence'] == $v_first['seq']) {
+ $sub_q1 .= strip_tags($spr1['naslov']);
+ if ($show_variables_values == true ) {
+ $sub_q1 .= ' ('.strip_tags($spr1['variable']).')';
+ }
+ if ($spr1['tip'] == '16') {
+ $sub_q1 .= '<br />'. strip_tags($grid1['naslov']) . ($show_variables_values == true ? ' (' . strip_tags($grid1['variable']) . ')' : '');
+ } else {
+ $sub_q1 .= '<br />' . strip_tags($variable['naslov']) . ($show_variables_values == true ? ' (' . strip_tags($variable['variable']) . ')' : '');
+ }
+ }
+ }
+ }
+ }
+ if ($sub_q1 == null) {
+ $sub_q1 .= strip_tags($spr1['naslov']);
+ $sub_q1 .= ($show_variables_values == true ? '&nbsp;('.strip_tags($spr1['variable']).')' : '');
+ }
+ if ($spr2['tip'] == '6' || $spr2['tip'] == '7' || $spr2['tip'] == '16' || $spr2['tip'] == '17' || $spr2['tip'] == '18' || $spr2['tip'] == '19' || $spr2['tip'] == '20' || $spr2['tip'] == '21') {
+ foreach ($spr2['grids'] AS $grid) {
+ foreach ($grid['variables'] AS $variable) {
+ if ($variable['sequence'] == $v_second['seq']) {
+ $sub_q2 .= strip_tags($spr2['naslov']);
+ if ($show_variables_values == true) {
+ $sub_q2 .= ' ('.strip_tags($spr2['variable']).')';
+ }
+ if ($spr2['tip'] == '16') {
+ $sub_q2.= '<br />' . strip_tags($grid2['naslov']) . ($show_variables_values == true ? ' (' . strip_tags($grid2['variable']) . ')' : '');
+ } else {
+ $sub_q2.= '<br />' . strip_tags($variable['naslov']) . ($show_variables_values == true ? ' (' . strip_tags($variable['variable']) . ')' : '');
+ }
+ }
+ }
+ }
+ }
+ if ($sub_q2 == null) {
+ $sub_q2 .= strip_tags($spr2['naslov']);
+ $sub_q2 .= ($show_variables_values == true ? ' ('.strip_tags($spr2['variable']).')' : '');
+ }
+
+ $title = $sub_q1 . ' / ' . $sub_q2;
+ }
+
+ $subtitle = ' ('.$lang['srv_crosstabs']. ($element['sub_type'] == 1 ? ' - '.$lang['srv_chart'] : '') .')';
+ }
+
+ // mean
+ elseif($element['type'] == '6'){
+
+ // ustvarimo means objekt
+ $meansClass = new SurveyMeans($this->ank_id);
+
+ // Napolnimo podatke crosstabu
+ $meanData1 = explode("-", $element['spr2']);
+ $meanData2 = explode("-", $element['spr1']);
+
+ $v_first = array('seq' => $meanData1[0], 'spr' => $meanData1[1], 'grd' => $meanData1[2]);
+ $v_second = array('seq' => $meanData2[0], 'spr' => $meanData2[1], 'grd' => $meanData2[2]);
+
+ $means[0] = $meansClass->createMeans($v_first, $v_second);
+
+ // Nastavimo variable (potrebno za grafe
+ $meansClass->variabla1[0] = $v_second;
+ $meansClass->variabla2[0] = $v_first;
+
+ // Naslov
+ if($element['spr1'] == '' || $element['spr2'] == ''){
+ $title = $lang['srv_select_spr'];
+ }
+ else{
+ $label2 = strip_tags($meansClass->getSpremenljivkaTitle($means[0]['v1']));
+ $label1 = strip_tags($meansClass->getSpremenljivkaTitle($means[0]['v2']));
+
+ $title = $label1 . ' / ' . $label2;
+ }
+
+ $subtitle = ' ('.$lang['srv_means']. ($element['sub_type'] == 1 ? ' - '.$lang['srv_chart'] : '') .')';
+ }
+
+ // ttest
+ elseif($element['type'] == '7'){
+
+ // ustvarimo ttest objekt
+ $ttestClass = new SurveyTTest($this->ank_id);
+
+ // Naslov
+ if($element['spr1'] == '' || $element['spr2'] == ''){
+ $title = $lang['srv_select_spr'];
+ }
+ else{
+ $label2 = strip_tags($this->getTTestLabel($element['spr2'], $ttestClass));
+ $label1 = strip_tags($this->getTTestLabel($element['spr1'], $ttestClass));
+
+ $title = $label1 . ' / ' . $label2;
+ }
+
+ $subtitle = ' ('.$lang['srv_ttest']. ($element['sub_type'] == 1 ? ' - '.$lang['srv_chart'] : '') .')';
+ }
+
+ // break
+ elseif($element['type'] == '9'){
+
+ // ustvarimo ttest objekt
+ $breakClass = new SurveyBreak($this->ank_id);
+
+ $breakData1 = explode("-", $element['spr1']);
+ $breakData2 = explode("-", $element['spr2']);
+
+
+ $label1 = '';
+ $variables = $breakClass->getVariableList(2);
+ foreach ($variables as $variable) {
+
+ if($breakData1[0] == $variable['sequence']){
+ $label1 = ( (int)$variable['sub'] == 0 ? '' : ( (int)$variable['sub'] == 1 ? '&nbsp;&nbsp;' : '&nbsp;&nbsp;&nbsp;&nbsp;' )) . $variable['variableNaslov'];
+ $label1 = (strlen($label1) > 60) ? substr($label1, 0, 57).'...' : $label1;
+
+ break;
+ }
+ }
+
+ $label2 = '';
+ $variables = $this->getBreakDependentVariableList($breakClass);
+ foreach ($variables as $variable) {
+
+ if($breakData2[0] == $variable['sequence']){
+ //$label2 = $variable['variableNaslov'];
+ $label2 = (strlen($variable['variableNaslov']) > 60) ? substr($variable['variableNaslov'], 0, 57).'...' : $variable['variableNaslov'];
+
+ break;
+ }
+ }
+
+ $title = $label1 . ' / ' . $label2;
+ $subtitle = '('.$lang['srv_break']. ($element['sub_type'] == 1 ? ' - '.$lang['srv_chart'] : '') .')';
+ }
+
+
+ $this->rtf->new_line(3);
+
+ $this->rtf->set_font("Arial Black", 9);
+
+ $this->rtf->add_text($this->encodeText($title), 'center');
+ $this->rtf->set_font("Arial", 9);
+ $this->rtf->add_text($this->encodeText($subtitle), 'center');
+ $this->rtf->new_line();
+ }
+
+ function getTTestLabel($spr, $ttestClass){
+
+ $data = explode("-", $spr);
+
+ $spid = $data[1];
+ $seq = $data[0];
+ $grid = $data[2];
+
+ $spr_data = $ttestClass->_HEADERS[$spid];
+ if ($grid == 'undefined') {
+
+ # imamp lahko veÄ variabel
+ foreach ($spr_data['grids'] as $gkey => $grid ) {
+
+ foreach ($grid['variables'] as $vkey => $variable) {
+ $sequence = $variable['sequence'];
+ if ($sequence == $seq) {
+ $sprLabel = '('.$variable['variable'].') '. $variable['naslov'];
+ }
+ }
+ }
+ } else {
+ # imamo subgrid
+ $sprLabel = '('.$spr_data['grids'][$grid]['variable'].') '. $spr_data['grids'][$grid]['naslov'];
+ }
+
+ return $sprLabel;
+ }
+
+ /** funkcija vrne seznam primern variabel za break
+ *
+ */
+ function getBreakDependentVariableList($breakClass) {
+
+ $variablesList = array();
+
+ # zloopamo skozi header in dodamo variable (potrebujemo posamezne sekvence)
+ foreach ($breakClass->_HEADERS AS $skey => $spremenljivka) {
+
+ $tip = $spremenljivka['tip'];
+
+ $_dropdown_condition = (is_numeric($tip) && $tip != 5 && $tip != 8 && $tip != 9) ? true : false;
+ if ($_dropdown_condition) {
+
+ $cnt_all = (int)$spremenljivka['cnt_all'];
+ if ( $cnt_all == '1' || in_array($tip, array(1,2,3,4,7,17,18,21,22)) || ($tip == 6 && $spremenljivka['enota'] == 2) ) {
+
+ # pri tipu radio ali select dodamo tisto variablo ki ni polje "drugo"
+ if ($tip == 1 || $tip == 3 ) {
+ if (count($spremenljivka['grids']) == 1 ) {
+ # Äe imamo samo en grid ( lahko je veÄ variabel zaradi polja drugo.
+ $grid = $spremenljivka['grids'][0];
+ if (count ($grid['variables']) > 0) {
+ foreach ($grid['variables'] AS $vid => $variable ){
+ if ($variable['other'] != 1) {
+ # imampo samo eno sekvenco grids[0]variables[0]
+ $variablesList[] = array(
+ 'tip'=>$tip,
+ 'spr_id'=>$skey,
+ 'sequence'=>$spremenljivka['grids'][0]['variables'][$vid]['sequence'],
+ 'variableNaslov'=>'('.$spremenljivka['variable'].')&nbsp;'.strip_tags($spremenljivka['naslov']),
+ 'canChoose'=>true,
+ 'sub'=>0);
+
+ }
+ }
+ }
+ }
+ }
+
+ else {
+ # imampo samo eno sekvenco grids[0]variables[0]
+ $variablesList[] = array(
+ 'tip'=>$tip,
+ 'spr_id'=>$skey,
+ 'sequence'=>$spremenljivka['grids'][0]['variables'][0]['sequence'],
+ 'variableNaslov'=>'('.$spremenljivka['variable'].')&nbsp;'.strip_tags($spremenljivka['naslov']),
+ 'canChoose'=>true,
+ 'sub'=>0);
+ }
+ }
+ else if ($cnt_all > 1){
+ # imamo veÄ skupin ali podskupin, zato zlopamo skozi gride in variable
+ if (count($spremenljivka['grids']) > 0 ) {
+ $variablesList[] = array(
+ 'tip'=>$tip,
+
+ 'variableNaslov'=>'('.$spremenljivka['variable'].')&nbsp;'.strip_tags($spremenljivka['naslov']),
+ 'canChoose'=>false,
+ 'sub'=>0);
+ # ali imamo en grid, ali veÄ (tabele
+ if (count($spremenljivka['grids']) == 1 ) {
+ # Äe imamo samo en grid ( lahko je veÄ variabel zaradi polja drugo.
+ $grid = $spremenljivka['grids'][0];
+ if (count ($grid['variables']) > 0) {
+ foreach ($grid['variables'] AS $vid => $variable ){
+ if ($variable['other'] != 1) {
+ $variablesList[] = array(
+ 'tip'=>$tip,
+ 'spr_id'=>$skey,
+ 'sequence'=>$variable['sequence'],
+ 'variableNaslov'=>'('.$variable['variable'].')&nbsp;'.strip_tags($variable['naslov']),
+ 'canChoose'=>true,
+ 'sub'=>1);
+ }
+ }
+ }
+
+ } elseif($tip == 6) {
+ # imamo veÄ gridov - tabele
+ foreach($spremenljivka['grids'] AS $gid => $grid) {
+ $sub = 0;
+ if ($grid['variable'] != '') {
+ $sub++;
+ $variablesList[] = array(
+ 'tip'=>$tip,
+ 'variableNaslov'=>'('.$grid['variable'].')&nbsp;'.strip_tags($grid['naslov']),
+ 'canChoose'=>false,
+ 'sub'=>$sub);
+ }
+ if (count ($grid['variables']) > 0) {
+ $sub++;
+ foreach ($grid['variables'] AS $vid => $variable ){
+ if ($variable['other'] != 1) {
+ $variablesList[] = array(
+ 'tip'=>$tip,
+ 'spr_id'=>$skey,
+ 'sequence'=>$variable['sequence'],
+ 'variableNaslov'=>'('.$variable['variable'].')&nbsp;'.strip_tags($variable['naslov']),
+ 'canChoose'=>true,
+ 'sub'=>$sub);
+ }
+ }
+ }
+ }
+ } else {
+ foreach($spremenljivka['grids'] AS $gid => $grid) {
+ $sub = 0;
+ if ($grid['variable'] != '') {
+ $sub++;
+ $variablesList[] = array(
+ 'tip'=>$tip,
+ 'spr_id'=>$skey,
+ 'grd_id'=>$gid,
+ 'sequence'=>$grid['variables'][0]['sequence'],
+ 'variableNaslov'=>'('.$grid['variable'].')&nbsp;'.strip_tags($grid['naslov']),
+ 'canChoose'=>true,
+ 'sub'=>1);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return $variablesList;
+ }
+
+
+ // Izpisemo komentar elementa
+ function displayComment($text){
+ global $lang;
+
+ if($text != ''){
+
+ // pretvorimo html text v rtf
+ $text = $this->rtf->HTMLtoRTF($text);
+
+ $this->rtf->TextCell($this->enkaEncode($text), array('width' => 10000, 'height' => 1,
+ 'align' => 'left', 'valign' => 'bottom' , 'border' => '','colorF' => "0" ) );
+
+ $this->rtf->new_line(1);
+ }
+ }
+
+
+ function createFrontPage()
+ {
+ global $lang;
+
+ $this->rtf->new_line(10);
+ $this->rtf->TextCell($this->encodeText( SurveyInfo::getInstance()->getSurveyTitle()), array('width' => 9500, 'height' => 3,
+ 'align' => 'center', 'valign' => 'middle' , 'border' => array('top','bottom', 'left','right'),
+ 'colorF' => "0", 'colorB' => "0" ) );
+ $this->rtf->new_line(3);
+ // dodamo info:
+ $this->rtf->TextCell("", array('width' => 9500, 'height' => 1,
+ 'align' => 'left', 'valign' => 'bottom' , 'border' => array('bottom'),'colorF' => "0" ) );
+
+ $infoTable = array();
+
+ $imenaTable = array();
+ if ( SurveyInfo::getInstance()->getSurveyTitle() != SurveyInfo::getInstance()->getSurveyAkronim() )
+ $imenaTable[] = array($lang['export_firstpage_shortname'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()), "");
+ if ( SurveyInfo::getInstance()->getSurveyTitle() != SurveyInfo::getInstance()->getSurveyAkronim() )
+ $imenaTable[] = array($lang['export_firstpage_longname'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyTitle()), "");
+
+ $imenaTable[] = array($lang['export_firstpage_qcount'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyQuestionCount()), "" );
+ $imenaTable[] = array($lang['export_firstpage_active_from'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyStartsDate()),"" );
+ $imenaTable[] = array($lang['export_firstpage_active_until'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyExpireDate()),"" );
+ $imenaTable[] = array($lang['export_firstpage_author'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyInsertName()),"" );
+ $imenaTable[] = array($lang['export_firstpage_edit'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyEditName()),"" );
+ $imenaTable[] = array($lang['export_firstpage_date'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyInsertDate()),"" );
+ $imenaTable[] = array($lang['export_firstpage_date'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyEditDate()),"" );
+ $imenaTable[] = array($lang['export_firstpage_desc'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyInfo()),"" );
+ $this->rtf->TableFromArray( array( 4600, 4600 ), $imenaTable);
+
+ $this->rtf->new_page();
+ }
+
+ function enkaEncode($text){ // popravimo sumnike ce je potrebno
+
+ // preverimo text za img tage in jih zamenjamo z ustrezno sliko
+ $pattern = '/<img[^>]+src[\\s=\'"]';
+ $pattern .= '+([^"\'>\\s]+)/is';
+ if(preg_match($pattern, $text, $match, PREG_OFFSET_CAPTURE)){
+
+ // relativna pot
+ if(substr($match[1][0], 0, 1) == '/')
+ $image = $site_url.$match[1][0];
+ else
+ $image = $match[1][0];
+
+ $file = @file_get_contents($image);
+
+
+ // Resizamo sliko na pravo velikost
+ $imgSize = getimagesize($image);
+ $origHeight = $imgSize[1];
+ $origWidth = $imgSize[0];
+
+ // Dobimo nastavljeno visino slike
+ $pattern = '/<img[^>]+height[\\s=\'"]';
+ $pattern .= '+([^"\'>\\s]+)/is';
+ preg_match($pattern, $text, $match, PREG_OFFSET_CAPTURE);
+ $height = round($match[1][0] / $origHeight) * 100;
+
+ // Dobimo nastavljeno sirino slike
+ $pattern = '/<img[^>]+width[\\s=\'"]';
+ $pattern .= '+([^"\'>\\s]+)/is';
+ preg_match($pattern, $text, $match, PREG_OFFSET_CAPTURE);
+ $width = round($match[1][0] / $origWidth) * 100;
+
+
+ $result .= "{";
+ $result .= "\\pict\\jpegblip\\picscalex".$width."\\picscaley".$height."\\bliptag132000428 ";
+ $result .= trim(bin2hex($file));
+ $result .= "\n}\n";
+
+ $text = preg_replace("/<img[^>]+\>/i", $result, $text);
+ }
+
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ return strip_tags($text);
+ }
+
+ function encodeText($text){ // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace(array("&scaron;","&#353;","&#269;"),array("�","�","�"),$text);
+ return strip_tags($text);
+ }
+
+ function formatNumber($value,$digit=0,$sufix="")
+ {
+ if ( $value <> 0 && $value != null )
+ $result = round($value,$digit);
+ else
+ $result = "0";
+ $result = number_format($result, $digit, ',', '.').$sufix;
+
+ return $result;
+ }
+
+ /* Skrajsa niz in doda ... nakoncu
+ * snippet(phrase,[max length],[phrase tail])
+ * snippetgreedy(phrase,[max length before next space],[phrase tail])
+ *
+ * iz: http://snipplr.com/view/9520/php-substring-without-breaking-words/
+ */
+ function snippet($text,$length=64,$tail="...")
+ {
+ $text = trim($text);
+ $txtl = strlen($text);
+ if($txtl > $length)
+ {
+ for($i=1;$text[$length-$i]!=" ";$i++)
+ {
+ if($i == $length)
+ {
+ return substr($text,0,$length) . $tail;
+ }
+ }
+ $text = substr($text,0,$length-$i+1) . $tail;
+ }
+ return $text;
+ }
+
+ function setDisplayFrontPage($display) {$this->pi['displayFrontPage'] = $display;}
+ function getDisplayFrontPage() {return ($this->pi['displayFrontPage'] == true || $this->pi['displayFrontPage'] == 1);}
+
+ // Ce imamo v porocilu tabelo crosstab ali ttest ali means imamo landscape orientacijo
+ function landscapeTest(){
+ global $global_user_id;
+
+ $sql = sisplet_query("SELECT * FROM srv_custom_report WHERE ank_id='$this->ank_id' AND usr_id='$global_user_id' AND profile='$this->creportProfile' AND sub_type='0' AND (type='5' OR type='6' OR type='7' OR type='9')");
+
+ if(mysqli_num_rows($sql) > 0)
+ return true;
+ else
+ return false;
+ }
+
+
+}
+
+
+?>
diff --git a/admin/exportclases/class.rtfIzvozAnalizaCharts.php b/admin/exportclases/class.rtfIzvozAnalizaCharts.php
new file mode 100644
index 0000000..8c4662a
--- /dev/null
+++ b/admin/exportclases/class.rtfIzvozAnalizaCharts.php
@@ -0,0 +1,494 @@
+<?php
+
+ global $site_path;
+
+ include_once('../../function.php');
+ include_once('../survey/definition.php');
+ include_once('../exportclases/class.rtfIzvozAnalizaSums.php');
+ include_once('../exportclases/class.rtfIzvozAnalizaFrekvenca.php');
+ include_once('../exportclases/class.rtfIzvozAnalizaFunctions.php');
+ require_once('../exportclases/class.enka.rtf.php');
+
+ define("FNT_TIMES", "Times New Roman", true);
+ define("FNT_ARIAL", "Arial", true);
+
+ define("FNT_MAIN_TEXT", FNT_TIMES, true);
+ define("FNT_QUESTION_TEXT", FNT_TIMES, true);
+ define("FNT_HEADER_TEXT", FNT_TIMES, true);
+
+ define("FNT_MAIN_SIZE", 12, true);
+ define("FNT_QUESTION_SIZE", 10, true);
+ define("FNT_HEADER_SIZE", 10, true);
+
+ define("M_ANALIZA_DESCRIPTOR", "descriptor", true);
+ define("M_ANALIZA_FREQUENCY", "frequency", true);
+ define("ALLOW_HIDE_ZERRO_REGULAR", false); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za navadne odgovore
+ define("ALLOW_HIDE_ZERRO_MISSING", true); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za missinge
+
+
+class RtfIzvozAnalizaCharts {
+
+ var $anketa; // trenutna anketa
+ var $grupa = null; // trenutna grupa
+ var $usrId = null; // trenutni user
+ var $spremenljivka; // trenutna spremenljivka
+ var $usr_id; // ID trenutnega uporabnika
+ var $printPreview = false; // ali kli?e konstruktor
+ var $pi=array('canCreate'=>false); // za shrambo parametrov in sporocil
+ var $rtf;
+
+ var $headFileName = null; // pot do header fajla
+ var $dataFileName = null; // pot do data fajla
+ var $dataFileStatus = null; // status data datoteke
+
+ var $skin;
+ var $numbering;
+ var $frontpage;
+
+ var $sessionData; // podatki ki so bili prej v sessionu - za nastavitve, ki se prenasajo v izvoze...
+
+ var $current_loop = 'undefined';
+
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null, $sprID = null, $loop = null)
+ {
+ global $site_path;
+ global $global_user_id;
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) ){
+
+ $this->anketa = $anketa;
+ $this->spremenljivka = $sprID;
+
+
+ // Poskrbimo za datoteko s podatki
+ $SDF = SurveyDataFile::get_instance();
+ $SDF->init($this->anketa);
+ $SDF->prepareFiles();
+
+ $this->headFileName = $SDF->getHeaderFileName();
+ $this->dataFileName = $SDF->getDataFileName();
+ $this->dataFileStatus = $SDF->getStatus();
+
+ SurveyZankaProfiles :: Init($this->anketa, $global_user_id);
+ $this->current_loop = ($loop != null) ? $loop : $this->current_loop;
+
+ SurveyAnalysis::Init($this->anketa);
+ SurveyAnalysis::$setUpJSAnaliza = false;
+
+ # inicializiramo grafe
+ SurveyChart::Init($this->anketa);
+
+ // create new RTF document
+ $this->rtf = new enka_RTF();
+
+ // preberemo nastavitve iz baze (prej v sessionu)
+ SurveyUserSession::Init($this->anketa);
+ $this->sessionData = SurveyUserSession::getData('charts');
+ }
+ else
+ {
+ $this->pi['msg'] = "Anketa ni izbrana!";
+ $this->pi['canCreate'] = false;
+ return false;
+ }
+ if ( SurveyInfo::getInstance()->SurveyInit($this->anketa) && $this->init())
+ {
+ SurveyUserSetting::getInstance()->Init($this->anketa, $global_user_id);
+
+ $this->skin = SurveyUserSetting :: getInstance()->getSettings('default_chart_profile_skin');
+ $this->numbering = SurveyDataSettingProfiles :: getSetting('chartNumbering');
+ $this->frontpage = SurveyDataSettingProfiles :: getSetting('chartFP');
+ }
+ else
+ return false;
+
+ // ce smo prisli do tu je vse ok
+ $this->pi['canCreate'] = true;
+ return true;
+ }
+
+ function getAnketa()
+ { return $this->anketa; }
+
+ function checkCreate()
+ {
+ return $this->pi['canCreate'];
+ }
+
+ function getFile($fileName)
+ {
+ //Close and output rtf document
+// $this->rtf->Output($fileName, 'I');
+ $this->rtf->display($fileName = "analiza.rtf",true);
+ }
+
+ function init()
+ {
+ global $lang;
+
+ // dodamo avtorja in naslov
+ $this->rtf->WriteTitle();
+ $this->rtf->WriteHeader($this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()), 'left');
+ $this->rtf->WriteHeader($this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()), 'right');
+ $this->rtf->WriteFooter($lang['page']." {PAGE} / {NUMPAGES}", 'right');
+ $this->rtf->set_default_font(FNT_TIMES, FNT_MAIN_SIZE);
+ return true;
+ }
+
+ function createRtf()
+ {
+ global $site_path;
+ global $lang;
+
+ // izpisemo prvo stran
+ if($this->frontpage == 1)
+ $this->createFrontPage();
+ else{
+ //$this->rtf->draw_title('ANALIZA - Grafi');
+ $this->rtf->set_font("Arial Black", 15);
+ $TITLE = $this->rtf->bold(1) . $this->rtf->underline(1) . $lang['export_analisys_charts'] . $this->rtf->underline(0) . $this->rtf->bold(0);
+ $this->rtf->new_line();
+ $this->rtf->add_text($TITLE, 'left');
+ $this->rtf->new_line();
+
+ // Datum zbiranja podatkov
+ $this->rtf->TextCell($this->getEntryDates(), array('width' => 9500, 'height' => 1,
+ 'align' => 'left', 'valign' => 'top' , 'border' => '','colorF' => "0" ));
+ }
+
+ $this->rtf->MyRTF .= $this->rtf->_font_size(16);
+
+ # preberemo header
+ if ($this->headFileName !== null) {
+ //polovimo podatke o nastavitvah trenutnega profila (missingi..)
+ SurveyAnalysis::$missingProfileData = SurveyMissingProfiles::getProfile(SurveyAnalysis::$currentMissingProfile);
+
+ // Preverimo ce imamo zanke (po skupinah)
+ SurveyAnalysis::$_LOOPS = SurveyZankaProfiles::getFiltersForLoops();
+
+ # Äe nimamo zank
+ if(count(SurveyAnalysis::$_LOOPS) == 0){
+
+ $this->displayCharts();
+ }
+ else{
+ // izrisemo samo eno tabelo iz enega loopa
+ if($this->current_loop > 0){
+
+ $loop = SurveyAnalysis::$_LOOPS[(int)$this->current_loop-1];
+ $loop['cnt'] = $this->current_loop;
+ SurveyAnalysis::$_CURRENT_LOOP = $loop;
+
+ // Izpisemo naslov zanke za skupino
+ $this->rtf->new_line(2);
+ $this->rtf->MyRTF .= $this->rtf->_font_size(24);
+ $this->rtf->TextCell($this->rtf->bold(1) .$this->enkaEncode($lang['srv_zanka_note'].$loop['text']).$this->rtf->bold(1), array('width' => 9500, 'height' => 1,
+ 'align' => 'left', 'valign' => 'top' , 'border' => '','colorF' => "0" ));
+ $this->rtf->set_font("Arial", 8);
+ $this->rtf->MyRTF .= $this->rtf->_font_size(16);
+
+ $this->displayCharts();
+ }
+ // Izrisemo vse tabele spremenljivka (iz vseh loopov)
+ else{
+ $loop_cnt = 0;
+ # Äe mamo zanke
+ foreach(SurveyAnalysis::$_LOOPS AS $loop) {
+ $loop_cnt++;
+ $loop['cnt'] = $loop_cnt;
+ SurveyAnalysis::$_CURRENT_LOOP = $loop;
+
+ // Izpisemo naslov zanke za skupino
+ $this->rtf->new_line(2);
+ $this->rtf->MyRTF .= $this->rtf->_font_size(24);
+ $this->rtf->TextCell($this->rtf->bold(1) .$this->enkaEncode($lang['srv_zanka_note'].$loop['text']).$this->rtf->bold(1), array('width' => 9500, 'height' => 1,
+ 'align' => 'left', 'valign' => 'top' , 'border' => '','colorF' => "0" ));
+ $this->rtf->set_font("Arial", 8);
+ $this->rtf->MyRTF .= $this->rtf->_font_size(16);
+
+ $this->displayCharts();
+ }
+ }
+ }
+
+ } // end if else ($_headFileName == null)
+
+ }
+
+ function displayCharts(){
+ global $site_path;
+ global $lang;
+
+ #preberemo HEADERS iz datoteke
+ SurveyAnalysis::$_HEADERS = unserialize(file_get_contents($this->headFileName));
+
+ # polovimo frekvence
+ SurveyAnalysis::getFrequencys();
+
+ #odstranimo sistemske variable
+ SurveyAnalysis::removeSystemVariables();
+
+ $vars_count = count(SurveyAnalysis::$_FILTRED_VARIABLES);
+ foreach (SurveyAnalysis::$_HEADERS AS $spid => $spremenljivka) {
+ # preverjamo ali je meta
+ if (($spremenljivka['tip'] != 'm'
+ && in_array($spremenljivka['tip'], SurveyAnalysis::$_FILTRED_TYPES ))
+ && (!isset($_spid) || (isset($_spid) && $_spid == $spid))
+ && ($this->spremenljivka == $spid || $this->spremenljivka == null) ) {
+ # ali imamo sfiltrirano spremenljivko
+ if ($vars_count == 0 || ($vars_count > 0 && isset(SurveyAnalysis::$_FILTRED_VARIABLES[$spid]) ) ) {
+
+ rtfIzvozAnalizaFunctions::init($this->anketa, $this, $from='charts');
+
+ // Ce imamo radio tip in manj kot 5 variabel po defaultu prikazemo piechart
+ $vars = count($spremenljivka['options']);
+ $type = 0;
+ if( ($spremenljivka['tip'] == 1 || $spremenljivka['tip'] == 3) && $vars < 5 )
+ $type = 2;
+
+ //ce imamo nominalno spremenljivko ali ce je samo 1 variabla nimamo povprecij
+ if($spremenljivka['tip'] == 6 && ($spremenljivka['cnt_all'] == 1 || $spremenljivka['skala'] == 1) && $type == 0 )
+ $type = 2;
+
+
+ if($spremenljivka['tip'] == 4 || $spremenljivka['tip'] == 19 || $spremenljivka['tip'] == 21 || $spremenljivka['tip'] == 22){
+
+ //$this->displayTitle($spid);
+
+ $hideEmpty = SurveyDataSettingProfiles :: getSetting('hideEmpty');
+
+ // ce imamo vklopljeno nastavitev prikaz tabel med grafi (default)
+ if($spremenljivka['tip'] == 19){
+
+ $_answers = SurveyAnalysis::getAnswers($spremenljivka,10);
+
+ // Preverimo ce je prazna in ne izpisujemo praznih
+ if($_answers['validCnt'] != 0 || $hideEmpty != 1){
+ rtfIzvozAnalizaFunctions::sumMultiText($spid, 'sums', $displayTitle=true);
+ }
+ }
+ else{
+
+ $emptyData = false;
+ if($hideEmpty == 1){
+
+ $emptyData = true;
+ if (count($spremenljivka['grids']) > 0){
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+
+ $_variables_count = count($grid['variables']);
+
+ if ($_variables_count > 0 )
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+
+ if(SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] > 0)
+ $emptyData = false;
+ }
+ }
+ }
+ }
+
+ // Preverimo ce je prazna in ne izpisujemo praznih
+ if($emptyData == false || $hideEmpty != 1){
+ rtfIzvozAnalizaFunctions::frequencyVertical($spid, $displayTitle=true);
+ }
+ }
+ }
+ elseif( in_array($spremenljivka['tip'],array(1,2,3,6,7,8,16,17,18,20)) ){
+
+ //$this->displayTitle($spid);
+
+ rtfIzvozAnalizaFunctions::displayChart($spid, $type, $displayTitle=true);
+ }
+ }
+
+ } // end if $spremenljivka['tip'] != 'm'
+
+ } // end foreach self::$_HEADERS
+ }
+
+
+ function createFrontPage()
+ {
+ global $lang;
+
+ $this->rtf->new_line(10);
+ $this->rtf->TextCell($this->rtf->bold(1).$this->enkaEncode( SurveyInfo::getInstance()->getSurveyTitle()).$this->rtf->bold(0).'\\line\n '.$lang['srv_analiza_charts'], array('width' => 9500, 'height' => 3,
+ 'align' => 'center', 'valign' => 'middle' , 'border' => array('top','bottom', 'left','right'),
+ 'colorF' => "0", 'colorB' => "0" ) );
+
+ // Datum zbiranja podatkov
+ $text =
+ $this->rtf->TextCell($this->getEntryDates(), array('width' => 9500, 'height' => 1,
+ 'align' => 'center', 'valign' => 'bottom' , 'border' => '','colorF' => "0" ));
+
+ $this->rtf->new_line(3);
+ // dodamo info:
+ $this->rtf->TextCell("", array('width' => 9500, 'height' => 1,
+ 'align' => 'left', 'valign' => 'bottom' , 'border' => array('bottom'),'colorF' => "0" ) );
+
+ $infoTable = array();
+
+ $imenaTable = array();
+ if ( SurveyInfo::getInstance()->getSurveyTitle() != SurveyInfo::getInstance()->getSurveyAkronim() )
+ $imenaTable[] = array($lang['export_firstpage_shortname'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()), "");
+ if ( SurveyInfo::getInstance()->getSurveyTitle() != SurveyInfo::getInstance()->getSurveyAkronim() )
+ $imenaTable[] = array($lang['export_firstpage_longname'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyTitle()), "");
+
+ $imenaTable[] = array($lang['export_firstpage_qcount'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyQuestionCount()), "" );
+
+ // Aktiviranost
+ $activity = SurveyInfo:: getSurveyActivity();
+ $_last_active = end($activity);
+ if (SurveyInfo::getSurveyColumn('active') == 1) {
+ $imenaTable[] = array($this->rtf->color(11).$this->enkaEncode($lang['srv_anketa_active2']).$this->rtf->color(0), "");
+ } else {
+ # preverimo ali je bila anketa že aktivirana
+ if (!isset($_last_active['starts'])) {
+ # anketa Å¡e sploh ni bila aktivirana
+ $imenaTable[] = array($this->rtf->color(17).$this->enkaEncode($lang['srv_survey_non_active_notActivated']).$this->rtf->color(0), "");
+ } else {
+ # anketa je že bila aktivirna ampak je sedaj neaktivna
+ $imenaTable[] = array($this->rtf->color(17).$this->enkaEncode($lang['srv_survey_non_active']).$this->rtf->color(0), "");
+ }
+ }
+
+ // Aktivnost
+ if( count($activity) > 0 ){
+ $imenaTable[] = array($lang['export_firstpage_active_from'].': '.SurveyInfo::getInstance()->getSurveyStartsDate(), $lang['export_firstpage_active_until'].': '.SurveyInfo::getInstance()->getSurveyExpireDate());
+ }
+
+ $imenaTable[] = array($lang['export_firstpage_author'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyInsertName()),"" );
+ $imenaTable[] = array($lang['export_firstpage_edit'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyEditName()),"" );
+ $imenaTable[] = array($lang['export_firstpage_date'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyInsertDate()),"" );
+ $imenaTable[] = array($lang['export_firstpage_date'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyEditDate()),"" );
+ $imenaTable[] = array($lang['export_firstpage_desc'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyInfo()),"" );
+ $this->rtf->TableFromArray( array( 4600, 4600 ), $imenaTable);
+
+ $this->rtf->new_page();
+ }
+
+ function enkaEncode($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ return strip_tags($text);
+ }
+
+ function encodeText($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace(array("&scaron;","&#353;","&#269;"),array("Å¡","Å¡","Ä"),$text);
+ return strip_tags($text);
+ }
+
+ function snippet($text,$length=64,$tail="...")
+ {
+ /*$text = trim($text);
+ $txtl = strlen($text);
+ if($txtl > $length)
+ {
+ for($i=1;$text[$length-$i]!=" ";$i++)
+ {
+ if($i == $length)
+ {
+ return substr($text,0,$length) . $tail;
+ }
+ }
+ $text = substr($text,0,$length-$i+1) . $tail;
+ }*/
+ return $text;
+ }
+
+ function setGrupa($grupa) {$this->grupa = $grupa;}
+ function getGrupa() {return $this->grupa;}
+ function setUserId($usrId) {$this->usrId = $usrId;}
+ function getUserId() {return ($this->usrId)?$this->usrId:false;}
+ function setDisplayFrontPage($display) {$this->pi['displayFrontPage'] = $display;}
+ function getDisplayFrontPage() {return ($this->pi['displayFrontPage'] == true || $this->pi['displayFrontPage'] == 1);}
+
+ // vrnemo string za prvi in zadnji vnos
+ function getEntryDates(){
+ global $lang;
+
+ $prvi_vnos_date = SurveyInfo::getSurveyFirstEntryDate();
+ $prvi_vnos_time = SurveyInfo::getSurveyFirstEntryTime();
+ $zadnji_vnos_date = SurveyInfo::getSurveyLastEntryDate();
+ $zadnji_vnos_time = SurveyInfo::getSurveyLastEntryTime();
+
+ if ($prvi_vnos_date != null) {
+ $first = $this->dateFormat($prvi_vnos_date,'j.n.y');
+ $first .= $prvi_vnos_time != null ? (SurveyInfo::$dateTimeSeperator .$this->dateFormat($prvi_vnos_time,'G:i')) : '';
+ }
+ if ($zadnji_vnos_date != null) {
+ $last = $this->dateFormat($zadnji_vnos_date,'j.n.y');
+ $last .= $zadnji_vnos_time != null ? (SurveyInfo::$dateTimeSeperator .$this->dateFormat($zadnji_vnos_time,'G:i')) : '';
+ }
+
+ $text = $lang['srv_setting_collectdata_datetime'].$first.' '.$lang['s_to'].' '.$last;
+
+ return $text;
+ }
+
+ function dateFormat($input, $format) {
+ if ($input != '..') {
+ return date($format,strtotime($input));
+ } else {
+ return '';
+ }
+ }
+
+ function formatNumber ($value, $digit = 0, $sufix = "") {
+ if ($value <> 0 && $value != null)
+ $result = round($value, $digit);
+ else
+ $result = "0";
+ $result = number_format($result, $digit, '.', ',') . $sufix;
+
+ return $result;
+ }
+
+
+ // Izpis opozorila ce ni vnesenih podatkov in ne prikazujemo grafa
+ function displayEmptyWarning($spid){
+
+ /*$spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ // Naslov posameznega grafa
+ $this->rtf->set_font("Arial Black", 8);
+
+ $this->rtf->new_line();
+ $this->rtf->add_text('Graf '.$spremenljivka['variable'].' nima veljavnih podatkov!', 'center');
+ $this->rtf->new_line();*/
+ }
+
+ function displayTitle($spid){
+ global $lang;
+
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ $this->rtf->new_line(3);
+
+ $stevilcenje = ($this->numbering == 1 ? $spremenljivka['variable'].' - ' : '');
+ $title = $stevilcenje . $spremenljivka['naslov'];
+ $TITLE = $this->rtf->bold(1) . $title . $this->rtf->bold(0);
+
+ // IZRIS GRAFA
+ $this->rtf->set_font("Arial Black", 8);
+ $this->rtf->add_text($TITLE, 'center');
+ $this->rtf->new_line();
+ if($spremenljivka['tip'] == 2){
+ $this->rtf->set_font("Arial", 7);
+ $this->rtf->add_text($lang['srv_info_checkbox'], 'center');
+ $this->rtf->new_line();
+ }
+ }
+}
+
+
+?>
diff --git a/admin/exportclases/class.rtfIzvozAnalizaCrosstab.php b/admin/exportclases/class.rtfIzvozAnalizaCrosstab.php
new file mode 100644
index 0000000..3b6e554
--- /dev/null
+++ b/admin/exportclases/class.rtfIzvozAnalizaCrosstab.php
@@ -0,0 +1,867 @@
+<?php
+
+ global $site_path;
+
+ include_once('../../function.php');
+ include_once('../survey/definition.php');
+ include_once('../exportclases/class.rtfIzvozAnalizaFunctions.php');
+ require_once("class.enka.rtf.php");
+
+ define("FNT_TIMES", "Times New Roman", true);
+ define("FNT_ARIAL", "Arial", true);
+
+ define("FNT_MAIN_TEXT", FNT_TIMES, true);
+ define("FNT_QUESTION_TEXT", FNT_TIMES, true);
+ define("FNT_HEADER_TEXT", FNT_TIMES, true);
+
+ define("FNT_MAIN_SIZE", 12, true);
+ define("FNT_QUESTION_SIZE", 10, true);
+ define("FNT_HEADER_SIZE", 10, true);
+
+ define("M_ANALIZA_DESCRIPTOR", "descriptor", true);
+ define("M_ANALIZA_FREQUENCY", "frequency", true);
+ define("ALLOW_HIDE_ZERRO_REGULAR", false); // omogo�imo delovanje prikazovanja/skrivanja ni�elnih vnosti za navadne odgovore
+ define("ALLOW_HIDE_ZERRO_MISSING", true); // omogo�imo delovanje prikazovanja/skrivanja ni�elnih vnosti za missinge
+
+
+/** Class za generacijo rtf-a
+ */
+class RtfIzvozAnalizaCrosstab {
+
+ var $anketa;// = array(); // trenutna anketa
+ var $grupa = null; // trenutna grupa
+ var $usrId = null; // trenutni user
+ var $spremenljivka; // trenutna spremenljivka
+ var $usr_id; // ID trenutnega uporabnika
+ var $printPreview = false; // ali kli?e konstruktor
+ var $pi=array('canCreate'=>false); // za shrambo parametrov in sporocil
+ var $rtf;
+
+ public static $crosstabClass = null; //crosstab class
+
+ var $crossData1;
+ var $crossData2;
+
+ var $crosstabVars;
+ var $counter;
+
+ var $sessionData; // podatki ki so bili prej v sessionu - za nastavitve, ki se prenasajo v izvoze...
+
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null, $crossData1, $crossData2)
+ {
+ global $site_path;
+ global $global_user_id;
+
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) )
+ {
+ $this->anketa['id'] = $anketa;
+
+ // create new RTF document
+ $this->rtf = new enka_RTF(true);
+ }
+ else
+ {
+ $this->pi['msg'] = "Anketa ni izbrana!";
+ $this->pi['canCreate'] = false;
+ return false;
+ }
+
+ $_GET['a'] = A_ANALYSIS;
+
+ // preberemo nastavitve iz baze (prej v sessionu)
+ SurveyUserSession::Init($this->anketa['id']);
+ $this->sessionData = SurveyUserSession::getData('crosstab_charts');
+
+ //ustvarimo crosstab objekt in mu napolnimo variable (var1, var2, checkboxi)
+ $this->crosstabClass = new SurveyCrosstabs();
+ $this->crosstabClass->Init($anketa);
+
+ for($i=0; $i<sizeof($crossData1)/3; $i++){
+ $index = $i * 3;
+ $this->crossData1[$i] = array($crossData1[$index],$crossData1[$index+1],$crossData1[$index+2]);
+ }
+ for($i=0; $i<sizeof($crossData2)/3; $i++){
+ $index = $i * 3;
+ $this->crossData2[$i] = array($crossData2[$index],$crossData2[$index+1],$crossData2[$index+2]);
+ }
+
+ //$this->crosstabClass->setVariables($crossData2[0],$crossData2[1],$crossData2[2],$crossData1[0],$crossData1[1],$crossData1[2]);
+
+ if ( SurveyInfo::getInstance()->SurveyInit($this->anketa['id']) && $this->init())
+ {
+ $this->anketa['uid'] = $global_user_id;
+ SurveyUserSetting::getInstance()->Init($this->anketa['id'], $this->anketa['uid']);
+ }
+ else
+ return false;
+ // ce smo prisli do tu je vse ok
+ $this->pi['canCreate'] = true;
+ return true;
+ }
+
+ function getAnketa()
+ { return $this->anketa['id']; }
+
+ function checkCreate()
+ {
+ return $this->pi['canCreate'];
+ }
+
+ function getFile($fileName)
+ {
+ $this->rtf->display($fileName = "analiza.rtf",true);
+ }
+
+ function init()
+ {
+ global $lang;
+
+ // dodamo avtorja in naslov
+ $this->rtf->WriteTitle();
+ $this->rtf->WriteHeader($this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()), 'left');
+ $this->rtf->WriteHeader($this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()), 'right');
+ $this->rtf->WriteFooter($lang['page']." {PAGE} / {NUMPAGES}", 'right');
+ $this->rtf->set_default_font(FNT_TIMES, FNT_MAIN_SIZE);
+ return true;
+ }
+
+ function createRtf()
+ {
+ global $site_path;
+ global $lang;
+
+ // izpisemo prvo stran
+ //$this->createFrontPage();
+
+ $this->rtf->draw_title($lang['export_analisys_crosstabs']);
+ $this->rtf->new_line(1);
+
+ # polovimo nastavtve missing profila
+ //SurveyConditionProfiles:: getConditionString();
+
+ $this->crosstabClass->_LOOPS = SurveyZankaProfiles::getFiltersForLoops();
+ if (count($this->crosstabClass->_LOOPS) > 0) {
+ # ce mamo zanke
+ foreach ( $this->crosstabClass->_LOOPS AS $loop) {
+
+ $this->crosstabClass->_CURRENT_LOOP = $loop;
+ $this->displayCrosstabsTable();
+ }
+ } else {
+ // loopamo cez vse izbrane variable in izrisemo vse tabele
+ $addPage = false;
+ $this->counter = 0;
+ for($j=0; $j<sizeof($this->crossData2); $j++){
+ for($i=0; $i<sizeof($this->crossData1); $i++){
+
+ if($addPage){
+ $this->rtf->new_page();
+ $this->rtf->new_line(3);
+ }
+ else
+ $addPage = true;
+
+ $this->crosstabClass->setVariables($this->crossData2[$j][0],$this->crossData2[$j][1],$this->crossData2[$j][2],$this->crossData1[$i][0],$this->crossData1[$i][1],$this->crossData1[$i][2]);
+
+ $this->displayCrosstabsTable();
+
+ $this->counter++;
+ }
+ }
+ }
+ }
+
+ public function displayCrosstabsTable() {
+ global $lang;
+
+ if ($this->crosstabClass->getSelectedVariables(1) !== null && $this->crosstabClass->getSelectedVariables(2) !== null) {
+ $variables1 = $this->crosstabClass->getSelectedVariables(1);
+ $variables2 = $this->crosstabClass->getSelectedVariables(2);
+ foreach ($variables1 AS $v_first) {
+ foreach ($variables2 AS $v_second) {
+
+ $crosstabs = null;
+ $crosstabs_value = null;
+
+ $crosstabs = $this->crosstabClass->createCrostabulation($v_first, $v_second);
+ $crosstabs_value = $crosstabs['crosstab'];
+
+ # podatki spremenljivk
+ $spr1 = $this->crosstabClass->_HEADERS[$v_first['spr']];
+ $spr2 = $this->crosstabClass->_HEADERS[$v_second['spr']];
+
+ $grid1 = $spr1['grids'][$v_first['grd']];
+ $grid2 = $spr2['grids'][$v_second['grd']];
+
+ #Å¡tevilo vratic in Å¡tevilo kolon
+ $cols = count($crosstabs['options1']);
+ $rows = count($crosstabs['options2']);
+
+ # ali prikazujemo vrednosti variable pri spremenljivkah
+ $show_variables_values = $this->crosstabClass->doValues;
+
+ # nastavitve oblike
+ if (($this->crosstabClass->crossChk1 || $this->crosstabClass->crossChk2 || $this->crosstabClass->crossChk3) && ($this->crosstabClass->crossChkEC || $this->crosstabClass->crossChkRE || $this->crosstabClass->crossChkSR || $this->crosstabClass->crossChkAR)) {
+ # dodamo procente in residuale
+ $rowSpan = 3;
+ $numColumnPercent = $this->crosstabClass->crossChk1 + $this->crosstabClass->crossChk2 + $this->crosstabClass->crossChk3;
+ $numColumnResidual = $this->crosstabClass->crossChkEC + $this->crosstabClass->crossChkRE + $this->crosstabClass->crossChkSR + $this->crosstabClass->crossChkAR;
+ $tblColumn = max($numColumnPercent,$numColumnResidual);
+ } else if ($this->crosstabClass->crossChk1 || $this->crosstabClass->crossChk2 || $this->crosstabClass->crossChk3) {
+ # imamo samo procente
+ $rowSpan = 2;
+ $numColumnPercent = $this->crosstabClass->crossChk1 + $this->crosstabClass->crossChk2 + $this->crosstabClass->crossChk3;
+ $numColumnResidual = 0;
+ $tblColumn = $numColumnPercent;
+ } else if ($this->crosstabClass->crossChkEC || $this->crosstabClass->crossChkRE || $this->crosstabClass->crossChkSR || $this->crosstabClass->crossChkAR) {
+ # imamo samo residuale
+ $rowSpan = 2;
+ $numColumnPercent = 0;
+ $numColumnResidual = $this->crosstabClass->crossChkEC + $this->crosstabClass->crossChkRE + $this->crosstabClass->crossChkSR + $this->crosstabClass->crossChkAR;
+ $tblColumn = $numColumnResidual;
+ } else {
+ #prikazujemo samo podatke
+ $rowSpan = 1;
+ $numColumnPercent = 0;
+ $numColumnResidual = 0;
+ $tblColumn = 1;
+ }
+
+ //nastavitve tabele - (sirine celic, border...)
+ $defw_full = 10500;
+ $defw_part = 1500;
+ $defw_part2 = ($cols > 2) ? 9000 : 7500;
+ //izracun sirine ene celice
+ $singleWidth = floor( $defw_part2 / ($cols) );
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '\clbrdrt\brdrs\brdrw10';
+ $borderLR = '\clbrdrl\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ $border = '\clbrdrb\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrt\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ //$align = ($arrayParams['align']=='center' ? '\qc' : '\ql');
+ $bold = '\b';
+
+
+ # izri�emo tabelo
+ $this->rtf->MyRTF .= $this->rtf->_font_size(16);
+ $this->rtf->MyRTF .= "{\par";
+
+ # najprej izri�emo NASLOVNE VRSTICE
+ # za multicheckboxe popravimo naslov, na podtip
+ $sub_q1 = null;
+ if ($spr1['tip'] == '6' || $spr1['tip'] == '16' || $spr1['tip'] == '17' || $spr1['tip'] == '19' || $spr1['tip'] == '20') {
+ foreach ($spr1['grids'] AS $grid) {
+ foreach ($grid['variables'] AS $variable) {
+ if ($variable['sequence'] == $v_first['seq']) {
+ $sub_q1 = strip_tags($spr1['naslov']);
+ if ($show_variables_values == true ) {
+ $sub_q1 .= '&nbsp;('.strip_tags($spr1['variable']).')';
+ }
+ if ($spr1['tip'] == '16') {
+ $sub_q1 .= ', ' . strip_tags($grid1['naslov']) . ($show_variables_values == true ? '&nbsp;(' . strip_tags($grid1['variable']) . ')' : '');
+ } else {
+ $sub_q1 .= ', ' . strip_tags($variable['naslov']) . ($show_variables_values == true ? '&nbsp;(' . strip_tags($variable['variable']) . ')' : '');
+ }
+ }
+ }
+ }
+ }
+ if ($sub_q1 == null) {
+ $sub_q1 .= strip_tags($spr1['naslov']);
+ $sub_q1 .= ($show_variables_values == true ? '&nbsp;('.strip_tags($spr1['variable']).')' : '');
+ }
+
+ $sub_q2 = null;
+ if ($spr2['tip'] == '6' || $spr2['tip'] == '16' || $spr2['tip'] == '17' || $spr2['tip'] == '19' || $spr2['tip'] == '20') {
+ foreach ($spr2['grids'] AS $grid) {
+ foreach ($grid['variables'] AS $variable) {
+ if ($variable['sequence'] == $v_second['seq']) {
+ $sub_q2 = strip_tags($spr2['naslov']);
+ if ($show_variables_values == true) {
+ $sub_q2 .= '&nbsp;('.strip_tags($spr2['variable']).')';
+ }
+ if ($spr2['tip'] == '16') {
+ $sub_q2.= ', ' . strip_tags($grid2['naslov']) . ($show_variables_values == true ? '&nbsp;(' . strip_tags($grid2['variable']) . ')' : '');
+ } else {
+ $sub_q2.= ', ' . strip_tags($variable['naslov']) . ($show_variables_values == true ? '&nbsp;(' . strip_tags($variable['variable']) . ')' : '');
+ }
+ }
+ }
+ }
+ }
+ if ($sub_q2 == null) {
+ $sub_q2 .= strip_tags($spr2['naslov']);
+ $sub_q2 .= ($show_variables_values == true ? '&nbsp;('.strip_tags($spr2['variable']).')' : '');
+ }
+
+ $this->crosstabVars = array($sub_q1, $sub_q2);
+
+ //prva vrstica
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+ $table .= '\clvertalc\cellx'.( 2 * $defw_part );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($sub_q1). '\qc\cell';
+ $table .= '\clvertalc\cellx'.( 2 * $defw_part + $defw_part2 + $singleWidth );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+ //druga vrstica
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+ $table .= '\clvertalc\cellx'.( 2 * $defw_part );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+
+
+ if (count($crosstabs['options1']) > 0 ) {
+ $i=1;
+ foreach ($crosstabs['options1'] as $ckey1 =>$crossVariabla) {
+ #ime variable
+ $text = $crossVariabla['naslov'];
+ # �e ni tekstovni odgovor dodamo key
+ if ($crossVariabla['type'] != 't') {
+ $text .= ' ( '.$ckey1.' )';
+ }
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + $i * $singleWidth );
+ $tableEnd .= '\pard\intbl'.$bold.' '. $this->encodeText($text). '\qc\cell';
+
+ $i++;
+ }
+ }
+
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + $defw_part2 + $singleWidth );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($lang['srv_analiza_crosstab_skupaj']). '\qc\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+
+ //VMESNE VRSTICE
+ $cntY = 0;
+ if (count($crosstabs['options2']) > 0) {
+
+ //POSAMEZNA VMESNA VRSTICA
+ foreach ($crosstabs['options2'] as $ckey2 =>$crossVariabla2) {
+ $cntY++;
+
+
+ for($j=1; $j<=$rowSpan; $j++){
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ if( $cntY == 1 && $j == 1 ){
+ $table = '\clvertalc'.$borderLR.$borderT.'\clvmgf\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText($sub_q2). '\qc\cell';
+ }
+ else{
+ $table = '\clvertalc'.$borderLR.'\clvmrg\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+ }
+
+
+
+ $text = $crossVariabla2['naslov'];
+ if ($crossVariabla2['type'] !== 't') {
+ $text .= ' ('.$ckey2.')';
+ }
+ if($j == 1){
+ $table .= '\clvertalc'.$borderLR.$borderT.'\cellx'.( 2 * $defw_part );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($text). '\qc\cell';
+ }
+ else{
+ $table .= '\clvertalc'.$borderLR.'\cellx'.( 2 * $defw_part );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+ }
+
+
+
+ //del vrstice z vsebino
+ $bold = '\b0';
+ $i=1;
+ foreach ($crosstabs['options1'] as $ckey1 => $crossVariabla1) {
+
+ //FREKVENCE
+ if( $j == 1 ){
+ $text = ((int)$crosstabs_value[$ckey1][$ckey2] > 0) ? $crosstabs_value[$ckey1][$ckey2] : 0;
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + $i * $singleWidth );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($text). '\qc\cell';
+ }
+
+ //PROCENTI
+ elseif( $j == 2 && $numColumnPercent > 0 ){
+ $x = 1;
+ if ($this->crosstabClass->crossChk1) {
+ #procent vrstica
+ $text = $this->formatNumber($this->crosstabClass->getCrossTabPercentage($crosstabs['sumaVrstica'][$ckey2], $crosstabs_value[$ckey1][$ckey2]), 2, '%');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnPercent));
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ if ($this->crosstabClass->crossChk2) {
+ #procent stolpec
+ $text = $this->formatNumber($this->crosstabClass->getCrossTabPercentage($crosstabs['sumaStolpec'][$ckey1], $crosstabs_value[$ckey1][$ckey2]), 2, '%');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnPercent));
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ if ($this->crosstabClass->crossChk3) {
+ #procent skupni
+ $text = $this->formatNumber($this->crosstabClass->getCrossTabPercentage($crosstabs['sumaSkupna'], $crosstabs_value[$ckey1][$ckey2]), 2, '%');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnPercent));
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ }
+
+ //RESIDUALI
+ else{
+ $x = 1;
+ if ($this->crosstabClass->crossChkEC) {
+ $text = $this->formatNumber($crosstabs['exC'][$ckey1][$ckey2], 3, '');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnResidual));
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ if ($this->crosstabClass->crossChkRE) {
+ $text = $this->formatNumber($crosstabs['res'][$ckey1][$ckey2], 3, '');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnResidual));
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ if ($this->crosstabClass->crossChkSR) {
+ $text = $this->formatNumber($crosstabs['stR'][$ckey1][$ckey2], 3, '');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnResidual));
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ if ($this->crosstabClass->crossChkAR) {
+ $text = $this->formatNumber($crosstabs['adR'][$ckey1][$ckey2], 3, '');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnResidual));
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ }
+
+ $i++;
+ }
+
+ //SKUPAJ
+ if( $j == 1){
+ $bold = '\b';
+
+ $text = (int)$crosstabs['sumaVrstica'][$ckey2];
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + $defw_part2 + $singleWidth );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($text). '\qc\cell';
+
+ $bold = '\b0';
+ }
+ elseif( $j == 2 && $numColumnPercent > 0 ){
+ $x = 1;
+ # suma po vrsticah v procentih
+ if ($this->crosstabClass->crossChk1) {
+ $text = $this->formatNumber(100, 2, '%');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnPercent));
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ if ($this->crosstabClass->crossChk2) {
+ $text = $this->formatNumber( ($crosstabs['sumaSkupna'] > 0 ? (100 * $crosstabs['sumaVrstica'][$ckey2] / $crosstabs['sumaSkupna']) : 0), 2, '%');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnPercent));
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ if ($this->crosstabClass->crossChk3) {
+ $text = $this->formatNumber( ($crosstabs['sumaSkupna'] > 0 ? (100 * $crosstabs['sumaVrstica'][$ckey2] / $crosstabs['sumaSkupna']) : 0), 2, '%');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnPercent));
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ }
+ else{
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + $i * $singleWidth );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+ $bold = '\b';
+ }
+ }
+ }
+ $cntY++;
+
+
+ // skupni sestevki po stolpcih - ZADNJA VRSTICA
+ //popravimo row span (residualov ne upostevamo)
+ $rowSpan = $numColumnResidual > 0 ? $rowSpan-1 : $rowSpan;
+
+ for($j=1; $j<=$rowSpan; $j++){
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ if($j == 1){
+ $table = '\clvertalc'.$borderT.'\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+
+ $table .= '\clvertalc'.$borderLR.$borderT.'\cellx'.( 2 * $defw_part );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($lang['srv_analiza_crosstab_skupaj']). '\qc\cell';
+ }
+ else{
+ $table = '\clvertalc\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+
+ $table .= '\clvertalc'.$borderLR.$borderB.'\cellx'.( 2 * $defw_part );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+ }
+
+ if (count($crosstabs['options1']) > 0){
+
+ $i=1;
+ $bold = '\b0';
+ foreach ($crosstabs['options1'] as $ckey1 => $crossVariabla1) {
+
+ if($j == 1){
+ $bold = '\b';
+
+ $text = (int)$crosstabs['sumaStolpec'][$ckey1];
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + $i * $singleWidth );
+ $tableEnd .= '\pard\intbl'.$bold.' '. $this->encodeText($text). '\qc\cell';
+
+ $bold = '\b0';
+ }
+
+ else{
+ $x = 1;
+ # suma po stolpcih v procentih
+ if ($this->crosstabClass->crossChk1) {
+ $text = $this->formatNumber( ($crosstabs['sumaSkupna'] > 0 ? (100 * $crosstabs['sumaStolpec'][$ckey1] / $crosstabs['sumaSkupna']) : 0), 2, '%');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnPercent));
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ if ($this->crosstabClass->crossChk2) {
+ $text = $this->formatNumber(100, 2, '%');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnPercent));
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ if ($this->crosstabClass->crossChk3)
+ {
+ $text = $this->formatNumber( ($crosstabs['sumaSkupna'] > 0 ? (100 * $crosstabs['sumaStolpec'][$ckey1] / $crosstabs['sumaSkupna']) : 0), 2, '%');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnPercent));
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ }
+
+ $i++;
+ }
+ }
+
+
+ # skupna suma
+ if($j == 1){
+ $bold = '\b';
+
+ $text = (int)$crosstabs['sumaSkupna'];
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + $defw_part2 + $singleWidth );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($text). '\qc\cell';
+
+ $bold = '\b0';
+ }
+
+ else{
+ $x = 1;
+ # suma po stolpcih v procentih
+ if ($this->crosstabClass->crossChk1) {
+ $text = $this->formatNumber(100, 2, '%');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnPercent));
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ if ($this->crosstabClass->crossChk2) {
+ $text = $this->formatNumber(100, 2, '%');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnPercent));
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ if ($this->crosstabClass->crossChk3) {
+ $text = $this->formatNumber(100, 2, '%');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnPercent));
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ }
+
+ $bold = '\b';
+ $tableEnd .= '\pard\intbl\row';
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+
+
+
+
+ /*
+ $this->pdf->MultiCell(25, $height, $this->encodeText('&nbsp; '), 'T', 'C', 0, 0, 0 ,0, true);
+ $this->pdf->MultiCell(20, $height, $this->encodeText($lang['srv_analiza_crosstab_skupaj']), 1, 'C', 0, 0, 0 ,0, true);
+
+ $this->pdf->setFont('','','5');
+
+ if (count($crosstabs['options1']) > 0){
+ foreach ($crosstabs['options1'] as $ckey1 => $crossVariabla1) {
+
+ $data = array();
+
+ # prikazujemo eno od treh mo�nosti
+ if ($this->crosstabClass->crossChk0) {
+ # suma po stolpcih
+ $data[] = (int)$crosstabs['sumaStolpec'][$ckey1];
+ }
+ if ($this->crosstabClass->crossChk1 || $this->crosstabClass->crossChk2 || $this->crosstabClass->crossChk3) {
+ # suma po stolpcih v procentih
+ if ($this->crosstabClass->crossChk1) {
+ $data[] = $this->formatNumber( ($crosstabs['sumaSkupna'] > 0 ? (100 * $crosstabs['sumaStolpec'][$ckey1] / $crosstabs['sumaSkupna']) : 0), 2, '%');
+ }
+ if ($this->crosstabClass->crossChk2) {
+ $data[] = $this->formatNumber(100, 2, '%');
+ }
+ if ($this->crosstabClass->crossChk3)
+ {
+ $data[] = $this->formatNumber( ($crosstabs['sumaSkupna'] > 0 ? (100 * $crosstabs['sumaStolpec'][$ckey1] / $crosstabs['sumaSkupna']) : 0), 2, '%');
+ }
+ }
+
+ $this->displayCell($data, $singleWidth, $rowSpan, $this->crosstabClass->crossChk0, $numColumnPercent, 0);
+ }
+
+ # zadnja celica z skupno sumo
+ $data = array();
+
+ if ($this->crosstabClass->crossChk0) {
+ # skupna suma
+ $data[] = (int)$crosstabs['sumaSkupna'];
+ }
+ if ($this->crosstabClass->crossChk1 || $this->crosstabClass->crossChk2 || $this->crosstabClass->crossChk3) {
+ # suma po stolpcih v procentih
+ if ($this->crosstabClass->crossChk1) {
+ $data[] = $this->formatNumber(100, 2, '%');
+ }
+ if ($this->crosstabClass->crossChk2) {
+ $data[] = $this->formatNumber(100, 2, '%');
+ }
+ if ($this->crosstabClass->crossChk3) {
+ $data[] = $this->formatNumber(100, 2, '%');
+ }
+ }
+
+ $this->displayCell($data, $singleWidth, $rowSpan, $this->crosstabClass->crossChk0, $numColumnPercent, 0);
+ }*/
+
+ //konec tabele
+ $this->rtf->MyRTF .= "}";
+ $this->rtf->new_line(1);
+
+
+ // Izris grafa (ce je vklopljena nastavitev)
+ if($this->sessionData['showChart'] == '1'){
+ $this->displayChart();
+ }
+ }
+ }
+ }
+ }
+
+
+ /*
+ prikazemo posamezno celico s podatki
+ $data - vsebina (array)
+ $width - sirina celice
+ $numRows - stevilo vrstic (1, 2 ali 3)
+ frekvence - da ali ne
+ $numColumnPercent - stevilo stolpcev pri procentih (1, 2 ali 3)
+ $numColumnResidual - stevilo stolpcev pri procentih (1, 2, 3 ali 4)
+ */
+ function displayCell($data, $width, $numRows, $frekvence, $numColumnPercent, $numColumnResidual){
+
+ $height = ($numRows == 1 ? 8 : 5);
+ $fullHeight = ($height == 8 ? $height : $numRows*$height);
+ $i=0;
+
+ //preberemo pozicijo - zacetek celice
+ $y = $this->pdf->GetY();
+ $x = $this->pdf->GetX();
+
+ $this->pdf->setDrawColor(170, 170, 170);
+
+ //izrisemo frekvence
+ if($frekvence == 1){
+ $this->pdf->MultiCell($width, $height, $this->encodeText($data[$i]), 1, 'C', 0, 1, 0 ,0, true);
+ $i++;
+ }
+
+ if($numColumnPercent > 0){
+
+ $this->pdf->setX($x);
+ $singleWidth = round($width/$numColumnPercent);
+
+ for($j=1; $j<$numColumnPercent; $j++){
+ $this->pdf->MultiCell($singleWidth, $height, $this->encodeText($data[$i]), 1, 'C', 0, 0, 0 ,0, true);
+ $i++;
+ }
+ $this->pdf->MultiCell($width - (($numColumnPercent-1)*$singleWidth), $height, $this->encodeText($data[$i]), 1, 'C', 0, 1, 0 ,0, true);
+ $i++;
+ }
+
+ if($numColumnResidual > 0){
+
+ $this->pdf->setX($x);
+ $singleWidth = round($width/$numColumnResidual);
+
+ for($j=1; $j<$numColumnResidual; $j++){
+ $this->pdf->MultiCell($singleWidth, $height, $this->encodeText($data[$i]), 1, 'C', 0, 0, 0 ,0, true);
+ $i++;
+ }
+ $this->pdf->MultiCell($width - (($numColumnResidual-1)*$singleWidth), $height, $this->encodeText($data[$i]), 1, 'C', 0, 1, 0 ,0, true);
+ $i++;
+ }
+
+ //zaradi preglednosti narisemo okvir celotne celice
+ $this->pdf->setDrawColor(0, 0, 0, 255);
+ $this->pdf->SetXY($x, $y);
+ $this->pdf->MultiCell($width, $fullHeight, '', 1, 'C', 0, 1, 0 ,0, true);
+
+ //na koncu nastavimo pozicijo na pravo mesto
+ $this->pdf->SetXY($x+$width, $y);
+ }
+
+ function displayChart(){
+ global $lang;
+
+ // Zgeneriramo id vsake tabele (glede na izbrani spremenljivki za generiranje)
+ $chartID = implode('_', $this->crosstabClass->variabla1[0]).'_'.implode('_', $this->crosstabClass->variabla2[0]);
+ $chartID .= '_counter_'.$this->counter;
+
+ $settings = $this->sessionData[$chartID];
+ $imgName = $settings['name'];
+
+
+ // IZRIS GRAFA
+ $this->rtf->new_page();
+ $this->rtf->new_line(5);
+
+ // Naslov posameznega grafa
+ $this->rtf->set_font("Arial Black", 8);
+
+ if($settings['type'] == 1 || $settings['type'] == 4)
+ $title = $this->rtf->bold(1) .$this->crosstabVars[0].' / '.$this->crosstabVars[1] . $this->rtf->bold(0);
+ else
+ $title = $this->rtf->bold(1) .$this->crosstabVars[0] . $this->rtf->bold(0);
+
+ $this->rtf->add_text($this->encodeText($title), 'center');
+ $this->rtf->new_line();
+
+ $this->rtf->set_font("Times New Roman", 10);
+
+ $scale = 100;
+
+ $this->rtf->add_image('pChart/Cache/'.$imgName, $scale, 'center');
+ }
+
+
+
+ /*Skrajsa tekst in doda '...' na koncu*/
+ function snippet($text,$length=64,$tail="...")
+ {
+ $text = trim($text);
+ $txtl = strlen($text);
+ if($txtl > $length)
+ {
+ for($i=1;$text[$length-$i]!=" ";$i++)
+ {
+ if($i == $length)
+ {
+ return substr($text,0,$length) . $tail;
+ }
+ }
+ $text = substr($text,0,$length-$i+1) . $tail;
+ }
+ return $text;
+ }
+
+ function setUserId($usrId) {$this->anketa['uid'] = $usrId;}
+ function getUserId() {return ($this->anketa['uid'])?$this->anketa['uid']:false;}
+
+ function formatNumber($value,$digit=0,$sufix="")
+ {
+ if ( $value <> 0 && $value != null )
+ $result = round($value,$digit);
+ else
+ $result = "0";
+ $result = number_format($result, $digit, ',', '.').$sufix;
+
+ return $result;
+ }
+
+ function encodeText($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace(array("&scaron;","&#353;","&#269;"),array("�","�","�"),$text);
+ return strip_tags($text);
+ }
+}
+
+?>
diff --git a/admin/exportclases/class.rtfIzvozAnalizaFrekvenca.php b/admin/exportclases/class.rtfIzvozAnalizaFrekvenca.php
new file mode 100644
index 0000000..4aee074
--- /dev/null
+++ b/admin/exportclases/class.rtfIzvozAnalizaFrekvenca.php
@@ -0,0 +1,541 @@
+<?php
+
+ global $site_path;
+
+ include_once('../../function.php');
+ include_once('../survey/definition.php');
+ include_once('../exportclases/class.rtfIzvozAnalizaSums.php');
+ include_once('../exportclases/class.rtfIzvozAnalizaFunctions.php');
+ require_once('../exportclases/class.enka.rtf.php');
+
+ define("FNT_TIMES", "Times New Roman", true);
+ define("FNT_ARIAL", "Arial", true);
+
+ define("FNT_MAIN_TEXT", FNT_TIMES, true);
+ define("FNT_QUESTION_TEXT", FNT_TIMES, true);
+ define("FNT_HEADER_TEXT", FNT_TIMES, true);
+
+ define("FNT_MAIN_SIZE", 12, true);
+ define("FNT_QUESTION_SIZE", 10, true);
+ define("FNT_HEADER_SIZE", 10, true);
+
+ define("M_ANALIZA_DESCRIPTOR", "descriptor", true);
+ define("M_ANALIZA_FREQUENCY", "frequency", true);
+ define("ALLOW_HIDE_ZERRO_REGULAR", false); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za navadne odgovore
+ define("ALLOW_HIDE_ZERRO_MISSING", true); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za missinge
+
+
+class RtfIzvozAnalizaFrekvenca {
+
+ var $anketa;// = array(); // trenutna anketa
+ var $grupa = null; // trenutna grupa
+ var $usrId = null; // trenutni user
+ var $spremenljivka; // trenutna spremenljivka
+ var $usr_id; // ID trenutnega uporabnika
+ var $printPreview = false; // ali kli?e konstruktor
+ var $pi=array('canCreate'=>false); // za shrambo parametrov in sporocil
+ var $rtf;
+
+ private $headFileName = null; # pot do header fajla
+ private $dataFileName = null; # pot do data fajla
+ private $dataFileStatus = null; # status data datoteke
+ private $CID = null; # class za inkrementalno dodajanje fajlov
+
+ var $current_loop = 'undefined';
+
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null, $sprID = null, $loop = null){
+ global $site_path;
+ global $global_user_id;
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) ){
+
+ $this->anketa['id'] = $anketa;
+ $this->spremenljivka = $sprID;
+
+ SurveyAnalysis::Init($this->anketa['id']);
+ SurveyAnalysis::$setUpJSAnaliza = false;
+
+ // create new RTF document
+ $this->rtf = new enka_RTF();
+
+ // Poskrbimo za datoteko s podatki
+ $SDF = SurveyDataFile::get_instance();
+ $SDF->init($this->anketa['id']);
+ $SDF->prepareFiles();
+
+ $this->headFileName = $SDF->getHeaderFileName();
+ $this->dataFileName = $SDF->getDataFileName();
+ $this->dataFileStatus = $SDF->getStatus();
+
+ SurveyZankaProfiles :: Init($this->anketa['id'], $global_user_id);
+ $this->current_loop = ($loop != null) ? $loop : $this->current_loop;
+ }
+ else{
+ $this->pi['msg'] = "Anketa ni izbrana!";
+ $this->pi['canCreate'] = false;
+ return false;
+ }
+
+ if ( SurveyInfo::getInstance()->SurveyInit($this->anketa['id']) && $this->init()){
+ $this->anketa['uid'] = $global_user_id;
+ SurveyUserSetting::getInstance()->Init($this->anketa['id'], $this->anketa['uid']);
+ }
+ else
+ return false;
+
+ // ce smo prisli do tu je vse ok
+ $this->pi['canCreate'] = true;
+
+ return true;
+ }
+
+ function getAnketa()
+ { return $this->anketa['id']; }
+
+ function checkCreate()
+ {
+ return $this->pi['canCreate'];
+ }
+
+ function getFile($fileName)
+ {
+ //Close and output rtf document
+// $this->rtf->Output($fileName, 'I');
+ $this->rtf->display($fileName = "analiza.rtf",true);
+ }
+
+ function init()
+ {
+ global $lang;
+
+ // dodamo avtorja in naslov
+ $this->rtf->WriteTitle();
+ $this->rtf->WriteHeader($this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()), 'left');
+ $this->rtf->WriteHeader($this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()), 'right');
+ $this->rtf->WriteFooter($lang['page']." {PAGE} / {NUMPAGES}", 'right');
+ $this->rtf->set_default_font(FNT_TIMES, FNT_MAIN_SIZE);
+ return true;
+ }
+
+ function createRtf()
+ {
+ global $site_path;
+ global $lang;
+
+ // izpisemo prvo stran
+ //$this->createFrontPage();
+
+ $this->rtf->draw_title($lang['export_analisys_freq']);
+ $this->rtf->MyRTF .= $this->rtf->_font_size(16);
+
+ # preberemo header
+ if ($this->headFileName !== null) {
+ //polovimo podatke o nastavitvah trenutnega profila (missingi..)
+ SurveyAnalysis::$missingProfileData = SurveyMissingProfiles::getProfile(SurveyAnalysis::$currentMissingProfile);
+
+ // Preverimo ce imamo zanke (po skupinah)
+ SurveyAnalysis::$_LOOPS = SurveyZankaProfiles::getFiltersForLoops();
+
+ # Äe nimamo zank
+ if(count(SurveyAnalysis::$_LOOPS) == 0){
+
+ $this->displayTables();
+ }
+ else{
+ // izrisemo samo eno tabelo iz enega loopa
+ if($this->current_loop > 0){
+
+ $loop = SurveyAnalysis::$_LOOPS[(int)$this->current_loop-1];
+ $loop['cnt'] = $this->current_loop;
+ SurveyAnalysis::$_CURRENT_LOOP = $loop;
+
+ // Izpisemo naslov zanke za skupino
+ $this->rtf->new_line(1);
+ $this->rtf->set_font("Arial Black", 9);
+ $this->rtf->add_text($this->enkaEncode($lang['srv_zanka_note'].$loop['text']), 'left');
+ $this->rtf->set_font("Arial", 8);
+ $this->rtf->new_line();
+
+ $this->displayTables();
+ }
+ // Izrisemo vse tabele spremenljivka (iz vseh loopov)
+ else{
+ $loop_cnt = 0;
+ # Äe mamo zanke
+ foreach(SurveyAnalysis::$_LOOPS AS $loop) {
+ $loop_cnt++;
+ $loop['cnt'] = $loop_cnt;
+ SurveyAnalysis::$_CURRENT_LOOP = $loop;
+
+ // Izpisemo naslov zanke za skupino
+ $this->rtf->new_line(1);
+ $this->rtf->set_font("Arial Black", 9);
+ $this->rtf->add_text($this->enkaEncode($lang['srv_zanka_note'].$loop['text']), 'left');
+ $this->rtf->set_font("Arial", 8);
+ $this->rtf->new_line();
+
+ $this->displayTables();
+ }
+ }
+ }
+
+ } // end if else ($_headFileName == null)
+ }
+
+ function displayTables(){
+ global $site_path;
+ global $lang;
+ global $global_user_id;
+
+ #preberemo HEADERS iz datoteke
+ SurveyAnalysis::$_HEADERS = unserialize(file_get_contents($this->headFileName));
+
+ # polovimo frekvence
+ SurveyAnalysis::getFrequencys();
+
+ #odstranimo sistemske variable
+ SurveyAnalysis::removeSystemVariables();
+
+ $vars_count = count(SurveyAnalysis::$_FILTRED_VARIABLES);
+ foreach (SurveyAnalysis::$_HEADERS AS $spid => $spremenljivka) {
+ # preverjamo ali je meta
+ if (($spremenljivka['tip'] != 'm'
+ && in_array($spremenljivka['tip'], SurveyAnalysis::$_FILTRED_TYPES ))
+ && (!isset($_spid) || (isset($_spid) && $_spid == $spid))
+ && ($this->spremenljivka == $spid || $this->spremenljivka == null) ) {
+ # ali imamo sfiltrirano spremenljivko
+ if ($vars_count == 0 || ($vars_count > 0 && isset(SurveyAnalysis::$_FILTRED_VARIABLES[$spid]) ) ) {
+
+ # prikazujemo v odvisnosti od kategorije spremenljivke
+ switch ($spremenljivka['tip']) {
+ case 1: # radio - prikjaže navpiÄno
+ case 2: #checkbox Äe je dihotomna:
+ case 3: # dropdown - prikjaže navpiÄno
+ case 6: # multigrid
+ case 4: # text
+ case 7:# variabla tipa »število«
+ case 8: # datum
+ case 16: #multicheckbox Äe je dihotomna:
+ case 17: #razvrÅ¡Äanje Äe je ordinalna
+ case 18: # vsota
+ case 19: # multitext
+ case 20: # multi number
+ case 21: # besedilo*
+ case 22: # kalkulacija
+ self::frequencyVertical($spid);
+ break;
+ case 5:
+ # nagovor
+ rtfIzvozAnalizaSums::sumNagovor($spid,'freq');
+ break;
+
+ }
+
+ }
+
+ } // end if $spremenljivka['tip'] != 'm'
+
+ } // end foreach SurveyAnalysis::$_HEADERS
+ }
+
+
+ /** Izriše frekvence v vertikalni obliki
+ *
+ * @param unknown_type $spid
+ */
+ function frequencyVertical($spid) {
+ global $lang;
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+ # Äe je besedilo * in je samo ena kategorija je inline legenda false
+ $inline_legenda = (SurveyAnalysis::$_HEADERS[$spid]['cnt_all'] == 1 || in_array($spremenljivka['tip'],array(1,8) ) ) ? false: true;
+
+ //prva vrstica
+ self::tableFirstLine($spremenljivka['variable'], $spremenljivka['naslov']);
+
+ //druga vrstica
+ self::tableHeader();
+ // konec naslovne vrstice
+
+
+ $_answersOther = array();
+
+ # dodamo opcijo kje izrisujemo legendo
+ $options=array('inline_legenda' => $inline_legenda, 'isTextAnswer' => false, 'isOtherAnswer' => false);
+
+ # izpišemo vlejavne odgovore
+ $_current_grid = null;
+ if (count($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $_variables_count = count($grid['variables']);
+
+ # dodamo dodatne vrstice z albelami grida
+ if ($_variables_count > 0 )
+ foreach ($grid['variables'] AS $vid => $variable ){
+
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if (($variable['text'] != true && $variable['other'] != true)
+ || (in_array($spremenljivka['tip'],array(4,8,21,22)))){
+ # dodamo ime podvariable
+ //if ($_variables_count > 1 && in_array($spremenljivka['tip'],array(2,6,7,16,17,18,19,20,21))) {
+ if ($inline_legenda) {
+ # ali riÅ¡emo dvojno Ärto med grupami
+ if ( $_current_grid != $gid && $_current_grid !== null && $spremenljivka['tip'] != 6) {
+ $options['doubleTop'] = true;
+ $_current_grid = $gid;
+ } else {
+ $options['doubleTop'] = false;
+ $_current_grid = $gid;
+ }
+ self::outputSubVariablaVertical($spremenljivka,$variable,$grid,$spid,$options);
+ }
+
+ $maxAnswer = (SurveyDataSettingProfiles :: getSetting('numOpenAnswers') > 0) ? SurveyDataSettingProfiles :: getSetting('numOpenAnswers') : 30;
+ $counter = 0;
+ $_kumulativa = 0;
+ //SurveyAnalysis::$_FREQUENCYS[$_sequence]
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'] AS $vkey => $vAnswer) {
+
+ if ($counter < $maxAnswer) {
+ if ($vAnswer['cnt'] > 0 || true) { # izpisujemo samo tiste ki nisno 0
+ if (in_array($spremenljivka['tip'],array(4,7,8,19,20,21))) { // text, number, datum, mtext, mnumber, text*
+ $options['isTextAnswer'] = true;
+ } else {
+ $options['isTextAnswer'] = false;
+ }
+ $counter = rtfIzvozAnalizaSums::outputValidAnswerVertical($counter,$vkey,$vAnswer,$_sequence,$spid,$_kumulativa,$options);
+ }
+ }
+ }
+ # izpišemo sumo veljavnih
+ $counter = rtfIzvozAnalizaSums::outputSumaValidAnswerVertical($counter,$_sequence,$spid,$options);
+ }
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'] AS $ikey => $iAnswer) {
+ if ($iAnswer['cnt'] > 0 ) { # izpisujemo samo tiste ki nisno 0
+ $counter = rtfIzvozAnalizaSums::outputInvalidAnswerVertical($counter,$ikey,$iAnswer,$_sequence,$spid,$options);
+ }
+ }
+ # izpišemo sumo veljavnih
+ $counter = rtfIzvozAnalizaSums::outputSumaInvalidAnswerVertical($counter,$_sequence,$spid,$options);
+ }
+ #izpišemo še skupno sumo
+ $counter = rtfIzvozAnalizaSums::outputSumaVertical($counter,$_sequence,$spid,$options);
+ } else {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ }
+ }
+ self::tableEnd();
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ rtfIzvozAnalizaSums::outputOtherAnswers($oAnswers);
+ $this->tableEnd();
+ }
+ }
+ }
+
+ function outputSubVariablaVertical($spremenljivka,$variable,$grid,$spid,$_options = array()) {
+ global $lang;
+
+ $text = array();
+
+ # opcije
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ 'textAnswerExceed'=>false # ali presegamo Å¡tevilo tekstovnih odgovorov za prikaz
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+
+ $text[] = $this->encodeText($variable['variable']);
+
+ $text[] = $this->encodeText($variable['naslov']);
+
+ $text[] = '&nbsp; ';
+ $text[] = '&nbsp; ';
+ $text[] = '&nbsp; ';
+ $text[] = '&nbsp; ';
+
+ self::tableRow($text);
+ }
+
+
+ function createFrontPage()
+ {
+ global $lang;
+
+ $this->rtf->new_line(10);
+ $this->rtf->TextCell($this->encodeText( SurveyInfo::getInstance()->getSurveyTitle()), array('width' => 9500, 'height' => 3,
+ 'align' => 'center', 'valign' => 'middle' , 'border' => array('top','bottom', 'left','right'),
+ 'colorF' => "0", 'colorB' => "0" ) );
+ $this->rtf->new_line(3);
+ // dodamo info:
+ $this->rtf->TextCell("", array('width' => 9500, 'height' => 1,
+ 'align' => 'left', 'valign' => 'bottom' , 'border' => array('bottom'),'colorF' => "0" ) );
+
+ $infoTable = array();
+
+ $imenaTable = array();
+ if ( SurveyInfo::getInstance()->getSurveyTitle() != SurveyInfo::getInstance()->getSurveyAkronim() )
+ $imenaTable[] = array($lang['export_firstpage_shortname'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()), "");
+ if ( SurveyInfo::getInstance()->getSurveyTitle() != SurveyInfo::getInstance()->getSurveyAkronim() )
+ $imenaTable[] = array($lang['export_firstpage_longname'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyTitle()), "");
+
+ $imenaTable[] = array($lang['export_firstpage_qcount'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyQuestionCount()), "" );
+ $imenaTable[] = array($lang['export_firstpage_active_from'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyStartsDate()),"" );
+ $imenaTable[] = array($lang['export_firstpage_active_until'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyExpireDate()),"" );
+ $imenaTable[] = array($lang['export_firstpage_author'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyInsertName()),"" );
+ $imenaTable[] = array($lang['export_firstpage_edit'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyEditName()),"" );
+ $imenaTable[] = array($lang['export_firstpage_date'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyInsertDate()),"" );
+ $imenaTable[] = array($lang['export_firstpage_date'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyEditDate()),"" );
+ $imenaTable[] = array($lang['export_firstpage_desc'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyInfo()),"" );
+ $this->rtf->TableFromArray( array( 4600, 4600 ), $imenaTable);
+
+ $this->rtf->new_page();
+ }
+
+ function enkaEncode($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ return strip_tags($text);
+ }
+
+ function encodeText($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace(array("&scaron;","&#353;","&#269;"),array("Å¡","Å¡","Ä"),$text);
+ return strip_tags($text);
+ }
+
+ function snippet($text,$length=64,$tail="...")
+ {
+ /*$text = trim($text);
+ $txtl = strlen($text);
+ if($txtl > $length)
+ {
+ for($i=1;$text[$length-$i]!=" ";$i++)
+ {
+ if($i == $length)
+ {
+ return substr($text,0,$length) . $tail;
+ }
+ }
+ $text = substr($text,0,$length-$i+1) . $tail;
+ }*/
+ return $text;
+ }
+
+ function setGrupa($grupa) {$this->grupa = $grupa;}
+ function getGrupa() {return $this->grupa;}
+ function setUserId($usrId) {$this->usrId = $usrId;}
+ function getUserId() {return ($this->usrId)?$this->usrId:false;}
+ function setDisplayFrontPage($display) {$this->pi['displayFrontPage'] = $display;}
+ function getDisplayFrontPage() {return ($this->pi['displayFrontPage'] == true || $this->pi['displayFrontPage'] == 1);}
+
+
+ function tableFirstLine($field1, $field2){
+ global $lang;
+
+ $defw_full = 10300;
+ $defw_part = 900;
+ $defw_part2 = 9400;
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '\clbrdrt\brdrs\brdrw10';
+ //$align = ($arrayParams['align']=='center' ? '\qc' : '\ql');
+ $bold = '\b';
+
+ $this->rtf->MyRTF .= "{\par";
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($field1),20,'...') . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($field2),20,'...') . '\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+
+ function tableHeader(){
+ global $lang;
+
+ $naslov = array();
+ $naslov[] = '&nbsp; ';
+ $naslov[] = $this->encodeText($lang['srv_analiza_frekvence_titleAnswers']);
+ $naslov[] = $this->encodeText($lang['srv_analiza_frekvence_titleFrekvenca']);
+ $naslov[] = $this->encodeText($lang['srv_analiza_frekvence_titleOdstotek']);
+ $naslov[] = $this->encodeText($lang['srv_analiza_frekvence_titleVeljavni']);
+ $naslov[] = $this->encodeText($lang['srv_analiza_frekvence_titleKumulativa']);
+
+ $params = array('borderB' => 1, 'bold' => 'B', 'align2' => 'C');
+
+ self::tableRow($naslov, $params);
+ }
+
+ function tableRow($arrayText, $arrayParams=array()){
+
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part = 1300;
+ $defw_part2 = 4200;
+
+ //$borderB = ($arrayParams['borderB']==1 ? '\clbrdrb\brdrs\brdrw10' : '');
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = ($arrayParams['borderT']==1 ? '\clbrdrt\brdrs\brdrw10' : '');
+ $align = ($arrayParams['align2']=='C' ? '\qc' : '\ql');
+ $bold = ($arrayParams['bold']=='B' ? '\b' : '\b0');
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($arrayText[0]),20,'...') . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($arrayText[1]),20,'...') .$align.'\cell';
+
+ for($i=0; $i<4; $i++){
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + ($i+1) * $defw_part + $defw_part2);
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($arrayText[$i+2]),20,'...').'\qc\cell';
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+
+
+ function tableEnd(){
+
+ $this->rtf->MyRTF .= "}";
+ $this->rtf->new_line(1);
+ }
+
+
+ function formatNumber ($value, $digit = 0, $sufix = "") {
+ if ($value <> 0 && $value != null)
+ $result = round($value, $digit);
+ else
+ $result = "0";
+ $result = number_format($result, $digit, '.', ',') . $sufix;
+
+ return $result;
+ }
+
+}
+
+
+?>
diff --git a/admin/exportclases/class.rtfIzvozAnalizaFunctions.php b/admin/exportclases/class.rtfIzvozAnalizaFunctions.php
new file mode 100644
index 0000000..8882154
--- /dev/null
+++ b/admin/exportclases/class.rtfIzvozAnalizaFunctions.php
@@ -0,0 +1,4193 @@
+<?php
+
+ global $site_path;
+
+ include_once('../../function.php');
+ include_once('../survey/definition.php');
+ require_once('../exportclases/class.enka.rtf.php');
+
+class RtfIzvozAnalizaFunctions {
+
+ public static $anketa;
+ public static $user_id;
+ public static $from;
+
+ public static $exportClass; // instanca razreda v katerem izrisujemo PDF
+ public static $analizaClass; // instanca razreda kjer imamo analize (crosstab, means, ttest...)
+
+ private static $sessionData; // podatki ki so bili prej v sessionu - za nastavitve, ki se prenasajo v izvoze...
+
+
+ static function init($anketa, $exportClass, $from='sums', $analizaClass=null){
+ global $global_user_id;
+
+ self::$anketa = $anketa;
+ self::$user_id = $global_user_id;
+
+ self::$from = $from;
+
+ self::$exportClass = $exportClass;
+
+ if($analizaClass != null)
+ self::$analizaClass = $analizaClass;
+
+ // preberemo nastavitve iz baze (prej v sessionu)
+ SurveyUserSession::Init($anketa);
+ self::$sessionData = SurveyUserSession::getData();
+ }
+
+
+ // Izrisemo CROSSTAB TABELO
+ public static function displayCrosstabsTable() {
+ global $lang;
+
+ if (self::$analizaClass->getSelectedVariables(1) !== null && self::$analizaClass->getSelectedVariables(2) !== null) {
+ $variables2 = self::$analizaClass->getSelectedVariables(1);
+ $variables1 = self::$analizaClass->getSelectedVariables(2);
+ foreach ($variables1 AS $v_first) {
+ foreach ($variables2 AS $v_second) {
+
+ $crosstabs = null;
+ $crosstabs_value = null;
+
+ $crosstabs = self::$analizaClass->createCrostabulation($v_first, $v_second);
+ $crosstabs_value = $crosstabs['crosstab'];
+
+ # podatki spremenljivk
+ $spr1 = self::$analizaClass->_HEADERS[$v_first['spr']];
+ $spr2 = self::$analizaClass->_HEADERS[$v_second['spr']];
+
+ $grid1 = $spr1['grids'][$v_first['grd']];
+ $grid2 = $spr2['grids'][$v_second['grd']];
+
+ #Å¡tevilo vratic in Å¡tevilo kolon
+ $cols = count($crosstabs['options1']);
+ $rows = count($crosstabs['options2']);
+
+ # ali prikazujemo vrednosti variable pri spremenljivkah
+ $show_variables_values = self::$analizaClass->doValues;
+
+ # nastavitve oblike
+ if ((self::$analizaClass->crossChk1 || self::$analizaClass->crossChk2 || self::$analizaClass->crossChk3) && (self::$analizaClass->crossChkEC || self::$analizaClass->crossChkRE || self::$analizaClass->crossChkSR || self::$analizaClass->crossChkAR)) {
+ # dodamo procente in residuale
+ $rowSpan = 3;
+ $numColumnPercent = self::$analizaClass->crossChk1 + self::$analizaClass->crossChk2 + self::$analizaClass->crossChk3;
+ $numColumnResidual = self::$analizaClass->crossChkEC + self::$analizaClass->crossChkRE + self::$analizaClass->crossChkSR + self::$analizaClass->crossChkAR;
+ $tblColumn = max($numColumnPercent,$numColumnResidual);
+ } else if (self::$analizaClass->crossChk1 || self::$analizaClass->crossChk2 || self::$analizaClass->crossChk3) {
+ # imamo samo procente
+ $rowSpan = 2;
+ $numColumnPercent = self::$analizaClass->crossChk1 + self::$analizaClass->crossChk2 + self::$analizaClass->crossChk3;
+ $numColumnResidual = 0;
+ $tblColumn = $numColumnPercent;
+ } else if (self::$analizaClass->crossChkEC || self::$analizaClass->crossChkRE || self::$analizaClass->crossChkSR || self::$analizaClass->crossChkAR) {
+ # imamo samo residuale
+ $rowSpan = 2;
+ $numColumnPercent = 0;
+ $numColumnResidual = self::$analizaClass->crossChkEC + self::$analizaClass->crossChkRE + self::$analizaClass->crossChkSR + self::$analizaClass->crossChkAR;
+ $tblColumn = $numColumnResidual;
+ } else {
+ #prikazujemo samo podatke
+ $rowSpan = 1;
+ $numColumnPercent = 0;
+ $numColumnResidual = 0;
+ $tblColumn = 1;
+ }
+
+ //nastavitve tabele - (sirine celic, border...)
+ $defw_full = 10500;
+ $defw_part = 1500;
+
+ if($cols == 1)
+ $defw_part2 = 5000;
+ elseif($cols == 2)
+ $defw_part2 = 7500;
+ else
+ $defw_part2 = 8500;
+
+ //izracun sirine ene celice
+ $singleWidth = floor( $defw_part2 / ($cols) );
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '\clbrdrt\brdrs\brdrw10';
+ $borderLR = '\clbrdrl\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ $border = '\clbrdrb\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrt\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ //$align = ($arrayParams['align']=='center' ? '\qc' : '\ql');
+ $bold = '\b';
+
+
+ # izri�emo tabelo
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->_font_size(16);
+ self::$exportClass->rtf->MyRTF .= "{\par";
+
+ # najprej izri�emo NASLOVNE VRSTICE
+ # za multicheckboxe popravimo naslov, na podtip
+ $sub_q1 = null;
+ if ($spr1['tip'] == '6' || $spr1['tip'] == '16' || $spr1['tip'] == '17' || $spr1['tip'] == '19' || $spr1['tip'] == '20') {
+ foreach ($spr1['grids'] AS $grid) {
+ foreach ($grid['variables'] AS $variable) {
+ if ($variable['sequence'] == $v_first['seq']) {
+ $sub_q1 = strip_tags($spr1['naslov']);
+ if ($show_variables_values == true ) {
+ $sub_q1 .= '&nbsp;('.strip_tags($spr1['variable']).')';
+ }
+ if ($spr1['tip'] == '16') {
+ $sub_q1 .= ', ' . strip_tags($grid1['naslov']) . ($show_variables_values == true ? '&nbsp;(' . strip_tags($grid1['variable']) . ')' : '');
+ } else {
+ $sub_q1 .= ', ' . strip_tags($variable['naslov']) . ($show_variables_values == true ? '&nbsp;(' . strip_tags($variable['variable']) . ')' : '');
+ }
+ }
+ }
+ }
+ }
+ if ($sub_q1 == null) {
+ $sub_q1 .= strip_tags($spr1['naslov']);
+ $sub_q1 .= ($show_variables_values == true ? '&nbsp;('.strip_tags($spr1['variable']).')' : '');
+ }
+
+ $sub_q2 = null;
+ if ($spr2['tip'] == '6' || $spr2['tip'] == '16' || $spr2['tip'] == '17' || $spr2['tip'] == '19' || $spr2['tip'] == '20') {
+ foreach ($spr2['grids'] AS $grid) {
+ foreach ($grid['variables'] AS $variable) {
+ if ($variable['sequence'] == $v_second['seq']) {
+ $sub_q2 = strip_tags($spr2['naslov']);
+ if ($show_variables_values == true) {
+ $sub_q2 .= '&nbsp;('.strip_tags($spr2['variable']).')';
+ }
+ if ($spr2['tip'] == '16') {
+ $sub_q2.= ', ' . strip_tags($grid2['naslov']) . ($show_variables_values == true ? '&nbsp;(' . strip_tags($grid2['variable']) . ')' : '');
+ } else {
+ $sub_q2.= ', ' . strip_tags($variable['naslov']) . ($show_variables_values == true ? '&nbsp;(' . strip_tags($variable['variable']) . ')' : '');
+ }
+ }
+ }
+ }
+ }
+ if ($sub_q2 == null) {
+ $sub_q2 .= strip_tags($spr2['naslov']);
+ $sub_q2 .= ($show_variables_values == true ? '&nbsp;('.strip_tags($spr2['variable']).')' : '');
+ }
+
+ //self::$exportClass->crosstabVars = array($sub_q1, $sub_q2);
+
+ //prva vrstica
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.self::$exportClass->encodeText('&nbsp; '). '\qc\cell';
+ $table .= '\clvertalc\cellx'.( 2 * $defw_part );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->encodeText('&nbsp; '). '\qc\cell';
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($sub_q1). '\qc\cell';
+ $table .= '\clvertalc\cellx'.( 2 * $defw_part + $defw_part2 + $singleWidth );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->encodeText('&nbsp; '). '\qc\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+ //druga vrstica
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.self::$exportClass->encodeText('&nbsp; '). '\qc\cell';
+ $table .= '\clvertalc\cellx'.( 2 * $defw_part );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->encodeText('&nbsp; '). '\qc\cell';
+
+
+ if (count($crosstabs['options1']) > 0 ) {
+ $i=1;
+ foreach ($crosstabs['options1'] as $ckey1 =>$crossVariabla) {
+ #ime variable
+ $text = $crossVariabla['naslov'];
+ # �e ni tekstovni odgovor dodamo key
+ if ($crossVariabla['type'] != 't') {
+ $text .= ' ( '.$ckey1.' )';
+ }
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + $i * $singleWidth );
+ $tableEnd .= '\pard\intbl'.$bold.' '. self::$exportClass->encodeText($text). '\qc\cell';
+
+ $i++;
+ }
+ }
+
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + $defw_part2 + $singleWidth );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($lang['srv_analiza_crosstab_skupaj']). '\qc\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+
+ //VMESNE VRSTICE
+ $cntY = 0;
+ if (count($crosstabs['options2']) > 0) {
+
+ //POSAMEZNA VMESNA VRSTICA
+ foreach ($crosstabs['options2'] as $ckey2 =>$crossVariabla2) {
+ $cntY++;
+
+
+ for($j=1; $j<=$rowSpan; $j++){
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ if( $cntY == 1 && $j == 1 ){
+ $table = '\clvertalc'.$borderLR.$borderT.'\clvmgf\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($sub_q2). '\qc\cell';
+ }
+ else{
+ $table = '\clvertalc'.$borderLR.'\clvmrg\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.self::$exportClass->encodeText('&nbsp; '). '\qc\cell';
+ }
+
+
+
+ $text = $crossVariabla2['naslov'];
+ if ($crossVariabla2['type'] !== 't') {
+ $text .= ' ('.$ckey2.')';
+ }
+ if($j == 1){
+ $table .= '\clvertalc'.$borderLR.$borderT.'\cellx'.( 2 * $defw_part );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($text). '\qc\cell';
+ }
+ else{
+ $table .= '\clvertalc'.$borderLR.'\cellx'.( 2 * $defw_part );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->encodeText('&nbsp; '). '\qc\cell';
+ }
+
+
+
+ //del vrstice z vsebino
+ $bold = '\b0';
+ $i=1;
+ foreach ($crosstabs['options1'] as $ckey1 => $crossVariabla1) {
+
+ //FREKVENCE
+ if( $j == 1 ){
+ $text = ((int)$crosstabs_value[$ckey1][$ckey2] > 0) ? $crosstabs_value[$ckey1][$ckey2] : 0;
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + $i * $singleWidth );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($text). '\qc\cell';
+ }
+
+ //PROCENTI
+ elseif( $j == 2 && $numColumnPercent > 0 ){
+ $x = 1;
+ if (self::$analizaClass->crossChk1) {
+ #procent vrstica
+ $text = self::$exportClass->formatNumber(self::$analizaClass->getCrossTabPercentage($crosstabs['sumaVrstica'][$ckey2], $crosstabs_value[$ckey1][$ckey2]), 2, '%');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnPercent));
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ if (self::$analizaClass->crossChk2) {
+ #procent stolpec
+ $text = self::$exportClass->formatNumber(self::$analizaClass->getCrossTabPercentage($crosstabs['sumaStolpec'][$ckey1], $crosstabs_value[$ckey1][$ckey2]), 2, '%');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnPercent));
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ if (self::$analizaClass->crossChk3) {
+ #procent skupni
+ $text = self::$exportClass->formatNumber(self::$analizaClass->getCrossTabPercentage($crosstabs['sumaSkupna'], $crosstabs_value[$ckey1][$ckey2]), 2, '%');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnPercent));
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ }
+
+ //RESIDUALI
+ else{
+ $x = 1;
+ if (self::$analizaClass->crossChkEC) {
+ $text = self::$exportClass->formatNumber($crosstabs['exC'][$ckey1][$ckey2], 3, '');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnResidual));
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ if (self::$analizaClass->crossChkRE) {
+ $text = self::$exportClass->formatNumber($crosstabs['res'][$ckey1][$ckey2], 3, '');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnResidual));
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ if (self::$analizaClass->crossChkSR) {
+ $text = self::$exportClass->formatNumber($crosstabs['stR'][$ckey1][$ckey2], 3, '');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnResidual));
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ if (self::$analizaClass->crossChkAR) {
+ $text = self::$exportClass->formatNumber($crosstabs['adR'][$ckey1][$ckey2], 3, '');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnResidual));
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ }
+
+ $i++;
+ }
+
+ //SKUPAJ
+ if( $j == 1){
+ $bold = '\b';
+
+ $text = (int)$crosstabs['sumaVrstica'][$ckey2];
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + $defw_part2 + $singleWidth );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($text). '\qc\cell';
+
+ $bold = '\b0';
+ }
+ elseif( $j == 2 && $numColumnPercent > 0 ){
+ $x = 1;
+ # suma po vrsticah v procentih
+ if (self::$analizaClass->crossChk1) {
+ $text = self::$exportClass->formatNumber(100, 2, '%');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnPercent));
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ if (self::$analizaClass->crossChk2) {
+ $text = self::$exportClass->formatNumber( ($crosstabs['sumaSkupna'] > 0 ? (100 * $crosstabs['sumaVrstica'][$ckey2] / $crosstabs['sumaSkupna']) : 0), 2, '%');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnPercent));
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ if (self::$analizaClass->crossChk3) {
+ $text = self::$exportClass->formatNumber( ($crosstabs['sumaSkupna'] > 0 ? (100 * $crosstabs['sumaVrstica'][$ckey2] / $crosstabs['sumaSkupna']) : 0), 2, '%');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnPercent));
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ }
+ else{
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + $i * $singleWidth );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->encodeText('&nbsp; '). '\qc\cell';
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+ $bold = '\b';
+ }
+ }
+ }
+ $cntY++;
+
+
+ // skupni sestevki po stolpcih - ZADNJA VRSTICA
+ //popravimo row span (residualov ne upostevamo)
+ $rowSpan = $numColumnResidual > 0 ? $rowSpan-1 : $rowSpan;
+
+ for($j=1; $j<=$rowSpan; $j++){
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ if($j == 1){
+ $table = '\clvertalc'.$borderT.'\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.self::$exportClass->encodeText('&nbsp; '). '\qc\cell';
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($lang['srv_analiza_crosstab_skupaj']). '\qc\cell';
+ }
+ else{
+ $table = '\clvertalc\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.self::$exportClass->encodeText('&nbsp; '). '\qc\cell';
+
+ $table .= '\clvertalc'.$borderLR.$borderB.'\cellx'.( 2 * $defw_part );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->encodeText('&nbsp; '). '\qc\cell';
+ }
+
+ if (count($crosstabs['options1']) > 0){
+
+ $i=1;
+ $bold = '\b0';
+ foreach ($crosstabs['options1'] as $ckey1 => $crossVariabla1) {
+
+ if($j == 1){
+ $bold = '\b';
+
+ $text = (int)$crosstabs['sumaStolpec'][$ckey1];
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + $i * $singleWidth );
+ $tableEnd .= '\pard\intbl'.$bold.' '. self::$exportClass->encodeText($text). '\qc\cell';
+
+ $bold = '\b0';
+ }
+
+ else{
+ $x = 1;
+ # suma po stolpcih v procentih
+ if (self::$analizaClass->crossChk1) {
+ $text = self::$exportClass->formatNumber( ($crosstabs['sumaSkupna'] > 0 ? (100 * $crosstabs['sumaStolpec'][$ckey1] / $crosstabs['sumaSkupna']) : 0), 2, '%');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnPercent));
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ if (self::$analizaClass->crossChk2) {
+ $text = self::$exportClass->formatNumber(100, 2, '%');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnPercent));
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ if (self::$analizaClass->crossChk3)
+ {
+ $text = self::$exportClass->formatNumber( ($crosstabs['sumaSkupna'] > 0 ? (100 * $crosstabs['sumaStolpec'][$ckey1] / $crosstabs['sumaSkupna']) : 0), 2, '%');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnPercent));
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ }
+
+ $i++;
+ }
+ }
+
+
+ # skupna suma
+ if($j == 1){
+ $bold = '\b';
+
+ $text = (int)$crosstabs['sumaSkupna'];
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + $defw_part2 + $singleWidth );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($text). '\qc\cell';
+
+ $bold = '\b0';
+ }
+
+ else{
+ $x = 1;
+ # suma po stolpcih v procentih
+ if (self::$analizaClass->crossChk1) {
+ $text = self::$exportClass->formatNumber(100, 2, '%');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnPercent));
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ if (self::$analizaClass->crossChk2) {
+ $text = self::$exportClass->formatNumber(100, 2, '%');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnPercent));
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ if (self::$analizaClass->crossChk3) {
+ $text = self::$exportClass->formatNumber(100, 2, '%');
+
+ $table .= '\clvertalc'.$border.'\cellx'.( 2 * $defw_part + ($i-1) * $singleWidth + $x * round($singleWidth/$numColumnPercent));
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($text). '\qc\cell';
+
+ $x++;
+ }
+ }
+
+ $bold = '\b';
+ $tableEnd .= '\pard\intbl\row';
+
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+
+ //konec tabele
+ self::$exportClass->rtf->MyRTF .= "}";
+ }
+ }
+ }
+ }
+ /*
+ prikazemo posamezno celico s podatki
+ $data - vsebina (array)
+ $width - sirina celice
+ $numRows - stevilo vrstic (1, 2 ali 3)
+ frekvence - da ali ne
+ $numColumnPercent - stevilo stolpcev pri procentih (1, 2 ali 3)
+ $numColumnResidual - stevilo stolpcev pri procentih (1, 2, 3 ali 4)
+ */
+ static function displayCrosstabsCell($data, $width, $numRows, $frekvence, $numColumnPercent, $numColumnResidual){
+
+ $height = ($numRows == 1 ? 8 : 5);
+ $fullHeight = ($height == 8 ? $height : $numRows*$height);
+ $i=0;
+
+ //preberemo pozicijo - zacetek celice
+ $y = self::$exportClass->pdf->GetY();
+ $x = self::$exportClass->pdf->GetX();
+
+ self::$exportClass->pdf->setDrawColor(170, 170, 170);
+
+ //izrisemo frekvence
+ if($frekvence == 1){
+ self::$exportClass->pdf->MultiCell($width, $height, self::$exportClass->encodeText($data[$i]), 1, 'C', 0, 1, 0 ,0, true);
+ $i++;
+ }
+
+ if($numColumnPercent > 0){
+
+ self::$exportClass->pdf->setX($x);
+ $singleWidth = round($width/$numColumnPercent);
+
+ for($j=1; $j<$numColumnPercent; $j++){
+ self::$exportClass->pdf->MultiCell($singleWidth, $height, self::$exportClass->encodeText($data[$i]), 1, 'C', 0, 0, 0 ,0, true);
+ $i++;
+ }
+ self::$exportClass->pdf->MultiCell($width - (($numColumnPercent-1)*$singleWidth), $height, self::$exportClass->encodeText($data[$i]), 1, 'C', 0, 1, 0 ,0, true);
+ $i++;
+ }
+
+ if($numColumnResidual > 0){
+
+ self::$exportClass->pdf->setX($x);
+ $singleWidth = round($width/$numColumnResidual);
+
+ for($j=1; $j<$numColumnResidual; $j++){
+ self::$exportClass->pdf->MultiCell($singleWidth, $height, self::$exportClass->encodeText($data[$i]), 1, 'C', 0, 0, 0 ,0, true);
+ $i++;
+ }
+ self::$exportClass->pdf->MultiCell($width - (($numColumnResidual-1)*$singleWidth), $height, self::$exportClass->encodeText($data[$i]), 1, 'C', 0, 1, 0 ,0, true);
+ $i++;
+ }
+
+ //zaradi preglednosti narisemo okvir celotne celice
+ self::$exportClass->pdf->setDrawColor(0, 0, 0, 255);
+ self::$exportClass->pdf->SetXY($x, $y);
+ self::$exportClass->pdf->MultiCell($width, $fullHeight, '', 1, 'C', 0, 1, 0 ,0, true);
+
+ //na koncu nastavimo pozicijo na pravo mesto
+ self::$exportClass->pdf->SetXY($x+$width, $y);
+ }
+
+ // Izrisemo CROSSTAB GRAF
+ public static function displayCrosstabChart(){
+ global $lang;
+
+ // Zgeneriramo id vsake tabele (glede na izbrani spremenljivki za generiranje)
+ $chartID = implode('_', self::$analizaClass->variabla1[0]).'_'.implode('_', self::$analizaClass->variabla2[0]);
+ $chartID .= '_counter_'.(!self::$exportClass->counter ? 0 : self::$exportClass->counter);
+
+ $settings = self::$sessionData['crosstab_charts'][$chartID];
+ $imgName = $settings['name'];
+
+
+ // IZRIS GRAFA
+ //self::$exportClass->rtf->new_page();
+ //self::$exportClass->rtf->new_line(5);
+
+ // Naslov posameznega grafa
+ /*self::$exportClass->rtf->set_font("Arial Black", 8);
+
+ if($settings['type'] == 1 || $settings['type'] == 4)
+ $title = self::$exportClass->rtf->bold(1) .self::$exportClass->crosstabVars[0].' / '.self::$exportClass->crosstabVars[1] . self::$exportClass->rtf->bold(0);
+ else
+ $title = self::$exportClass->rtf->bold(1) .self::$exportClass->crosstabVars[0] . self::$exportClass->rtf->bold(0);
+
+ self::$exportClass->rtf->add_text(self::$exportClass->encodeText($title), 'center');
+ self::$exportClass->rtf->new_line(); */
+
+ self::$exportClass->rtf->set_font("Times New Roman", 10);
+
+ //$scale = 100;
+ $size = getimagesize('pChart/Cache/'.$imgName);
+ if($size[0] == 800)
+ $scale = 75;
+ elseif($size[0] == 2400)
+ $scale = 50;
+ else
+ $scale = 100;
+
+ self::$exportClass->rtf->add_image('pChart/Cache/'.$imgName, $scale, 'center');
+ }
+
+
+ // Izrisemo MEANS TABELO
+ public static function displayMeansTable($_means) {
+ global $lang;
+
+ #Å¡tevilo vratic in Å¡tevilo kolon
+ $cols = count($_means);
+ # preberemo kr iz prvega loopa
+ $rows = count($_means[0]['options']);
+
+ // sirina ene celice
+ $singleWidth = round( 180 / $cols / 2 );
+
+ //nastavitve tabele - (sirine celic, border...)
+ $defw_full = 10500;
+ $defw_part = 5700;
+ $defw_part2 = 8500;
+ //$defw_part3 = 8500;
+ //izracun sirine ene celice
+ $singleWidth = floor( $defw_part2 / ($cols*2) );
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '\clbrdrt\brdrs\brdrw10';
+ $borderLR = '\clbrdrl\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ $border = '\clbrdrb\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrt\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ //$align = ($arrayParams['align']=='center' ? '\qc' : '\ql');
+ $bold = '\b';
+
+
+ // zacetek tabele
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->_font_size(16);
+ self::$exportClass->rtf->MyRTF .= "{\par";
+
+
+ // prva vrstica
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $label2 = self::$analizaClass->getSpremenljivkaTitle($_means[0]['v2']);
+ $table = '\clvertalc'.$borderLR.$borderT.'\clvmgf\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($label2). '\qc\cell';
+
+ for ($i = 0; $i < $cols; $i++) {
+
+ $label1 = self::$analizaClass->getSpremenljivkaTitle($_means[$i]['v1']);
+
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + (($i+1) * 2 * $singleWidth) );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($label1). '\qc\cell';
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ // druga vrstica
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderLR.'\clvmrg\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.self::$exportClass->encodeText('&nbsp; '). '\qc\cell';
+
+ for ($i = 0; $i < $cols; $i++) {
+
+ $label1 = self::$analizaClass->getSpremenljivkaTitle($_means[$i]['v1']);
+
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + (((($i+1) * 2) - 1) * $singleWidth) );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($lang['srv_means_label']). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + (($i+1) * 2 * $singleWidth) );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($lang['srv_means_label4']). '\qc\cell';
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ // vrstice s podatki
+ if (count($_means[0]['options']) > 0) {
+ foreach ($_means[0]['options'] as $ckey2 =>$crossVariabla2) {
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $variabla = $crossVariabla2['naslov'];
+ # Äe ni tekstovni odgovor dodamo key
+ if ($crossVariabla2['type'] !== 't' ) {
+ if ($crossVariabla2['vr_id'] == null) {
+ $variabla .= ' ( '.$ckey2.' )';
+ } else {
+ $variabla .= ' ( '.$crossVariabla2['vr_id'].' )';
+ }
+ }
+ $table = '\clvertalc'.$border.'\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($variabla). '\b0\qc\cell';
+
+ # celice z vsebino
+ for ($i = 0; $i < $cols; $i++) {
+
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + (((($i+1) * 2) - 1) * $singleWidth) );
+ $tableEnd .= '\pard\intbl '.self::$exportClass->encodeText(self::$analizaClass->formatNumber($_means[$i]['result'][$ckey2], SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_RESIDUAL'))). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + (($i+1) * 2 * $singleWidth) );
+ $tableEnd .= '\pard\intbl '.self::$exportClass->encodeText((int)$_means[$i]['sumaVrstica'][$ckey2]). '\qc\cell';
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+ }
+
+ // SKUPAJ
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$border.'\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($lang['srv_means_label3']). '\b0\qc\cell';
+
+ for ($i = 0; $i < $cols; $i++) {
+
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + (((($i+1) * 2) - 1) * $singleWidth) );
+ $tableEnd .= '\pard\intbl '.self::$exportClass->encodeText(self::$analizaClass->formatNumber($_means[$i]['sumaMeans'], SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_RESIDUAL'))). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + (($i+1) * 2 * $singleWidth) );
+ $tableEnd .= '\pard\intbl '.self::$exportClass->encodeText((int)$_means[$i]['sumaSkupna']). '\qc\cell';
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ // konec tabele
+ self::$exportClass->rtf->MyRTF .= "}";
+ }
+
+ // Izrisemo MEANS GRAF
+ public static function displayMeanChart($counter){
+ global $lang;
+
+ $variables1 = self::$exportClass->meanData1;
+ $variables2 = self::$exportClass->meanData2;
+
+ $pos1 = floor($counter / count($variables2));
+ $pos2 = $counter % count($variables2);
+
+ $chartID = implode('_', $variables1[$pos1]).'_'.implode('_', $variables2[$pos2]);
+ $chartID .= '_counter_'.$counter;
+
+
+ $settings = self::$sessionData['mean_charts'][$chartID];
+ $imgName = $settings['name'];
+
+ // IZRIS GRAFA
+ //$scale = 100;
+ $size = getimagesize('pChart/Cache/'.$imgName);
+ if($size[0] == 800)
+ $scale = 75;
+ elseif($size[0] == 2400)
+ $scale = 50;
+ else
+ $scale = 100;
+
+ self::$exportClass->rtf->add_image('pChart/Cache/'.$imgName, $scale, 'center');
+
+ self::$exportClass->rtf->new_line();
+ }
+
+
+ // Izrisemo TTEST TABELO
+ public static function displayTTestTable($ttest) {
+ global $lang;
+
+ # preverimo ali imamo izbrano odvisno spremenljivko
+ $spid1 = self::$sessionData['ttest']['variabla'][0]['spr'];
+ $seq1 = self::$sessionData['ttest']['variabla'][0]['seq'];
+ $grid1 = self::$sessionData['ttest']['variabla'][0]['grd'];
+
+
+ if (is_array($ttest) && count($ttest) > 0 && (int)$seq1 > 0) {
+
+ $spr_data_1 = self::$analizaClass->_HEADERS[$spid1];
+ if ($grid1 == 'undefined') {
+
+ # imamp lahko veÄ variabel
+ $seq = $seq1;
+ foreach ($spr_data_1['grids'] as $gkey => $grid ) {
+
+ foreach ($grid['variables'] as $vkey => $variable) {
+ $sequence = $variable['sequence'];
+ if ($sequence == $seq) {
+ $sprLabel1 = '('.$variable['variable'].') '. $variable['naslov'];
+ }
+ }
+ }
+ } else {
+ # imamo subgrid
+ $sprLabel1 = '('.$spr_data_1['grids'][$grid1]['variable'].') '. $spr_data_1['grids'][$grid1]['naslov'];
+ }
+
+ # polovio labele
+ $spid2 = self::$sessionData['ttest']['spr2'];
+ $sprLabel2 = trim(str_replace('&nbsp;','',self::$sessionData['ttest']['label2']));
+ $label1 = self::$analizaClass->getVariableLabels(self::$sessionData['ttest']['sub_conditions'][0]);
+ $label2 = self::$analizaClass->getVariableLabels(self::$sessionData['ttest']['sub_conditions'][1]);
+
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '\clbrdrt\brdrs\brdrw10';
+ $borderLR = '\clbrdrl\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ $border = '\clbrdrb\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrt\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ //$align = ($arrayParams['align']=='center' ? '\qc' : '\ql');
+ $bold = '\b';
+
+ //nastavitve tabele - (sirine celic, border...)
+ $defw_full = 13500;
+ $defw_part = 5000;
+ $defw_part2 = 9000;
+ $defw_part3 = 1000;
+
+
+ // zacetek tabele
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->_font_size(16);
+ self::$exportClass->rtf->MyRTF .= "{\par";
+
+
+ // prva vrstica
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderLR.$borderT.'\clvmgf\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($sprLabel2). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($sprLabel1). '\qc\cell';
+ $tableEnd .= '\pard\intbl\row';
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+
+ // druga vrstica
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderLR.$borderB.'\clvmrg\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.self::$exportClass->encodeText('&nbsp; '). '\qc\cell';
+
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $defw_part3 );
+ $tableEnd .= '\pard\intbl\b0 '.self::$exportClass->encodeText('n'). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + 2*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.self::$exportClass->encodeText('x'). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + 3*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.self::$exportClass->encodeText('s^2'). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + 4*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.self::$exportClass->encodeText('se(x)'). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + 5*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.self::$exportClass->encodeText('±1,96×se(x)'). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + 6*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.self::$exportClass->encodeText('d'). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + 7*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.self::$exportClass->encodeText('se(d)'). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + 8*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.self::$exportClass->encodeText('Sig.'). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + 9*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.self::$exportClass->encodeText('t'). '\qc\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ // vrstici s podatki
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderLR.$borderB.'\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($label1). '\qc\cell';
+
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $defw_part3 );
+ $tableEnd .= '\pard\intbl\b0 '.self::$exportClass->formatNumber($ttest[1]['n'], 0). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + 2*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.self::$exportClass->formatNumber($ttest[1]['x'], 3). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + 3*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.self::$exportClass->formatNumber($ttest[1]['s2'], 3). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + 4*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.self::$exportClass->formatNumber($ttest[1]['se'], 3). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + 5*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.self::$exportClass->formatNumber($ttest[1]['margin'], 3). '\qc\cell';
+ $table .= '\clvertalc'.$borderLR.'\clvmgf\cellx'.( $defw_part + 6*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.self::$exportClass->formatNumber($ttest['d'], 3). '\qc\cell';
+ $table .= '\clvertalc'.$borderLR.'\clvmgf\cellx'.( $defw_part + 7*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.self::$exportClass->formatNumber($ttest['sed'], 3). '\qc\cell';
+ $table .= '\clvertalc'.$borderLR.'\clvmgf\cellx'.( $defw_part + 8*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.self::$exportClass->formatNumber($ttest['sig'], 3). '\qc\cell';
+ $table .= '\clvertalc'.$borderLR.'\clvmgf\cellx'.( $defw_part + 9*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.self::$exportClass->formatNumber($ttest['t'], 3). '\qc\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderLR.$borderB.'\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($label2). '\qc\cell';
+
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $defw_part3 );
+ $tableEnd .= '\pard\intbl\b0 '.self::$exportClass->formatNumber($ttest[2]['n'], 0). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + 2*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.self::$exportClass->formatNumber($ttest[2]['x'], 3). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + 3*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.self::$exportClass->formatNumber($ttest[2]['s2'], 3). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + 4*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.self::$exportClass->formatNumber($ttest[2]['se'], 3). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + 5*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.self::$exportClass->formatNumber($ttest[2]['margin'], 3). '\qc\cell';
+ $table .= '\clvertalc'.$borderLR.$borderB.'\clvmrg\cellx'.( $defw_part + 6*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.self::$exportClass->encodeText('&nbsp; '). '\qc\cell';
+ $table .= '\clvertalc'.$borderLR.$borderB.'\clvmrg\cellx'.( $defw_part + 7*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.self::$exportClass->encodeText('&nbsp; '). '\qc\cell';
+ $table .= '\clvertalc'.$borderLR.$borderB.'\clvmrg\cellx'.( $defw_part + 8*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.self::$exportClass->encodeText('&nbsp; '). '\qc\cell';
+ $table .= '\clvertalc'.$borderLR.$borderB.'\clvmrg\cellx'.( $defw_part + 9*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.self::$exportClass->encodeText('&nbsp; '). '\qc\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ // konec tabele
+ self::$exportClass->rtf->MyRTF .= "}";
+ }
+ }
+
+ // Izrisemo TTEST GRAF
+ public static function displayTTestChart(){
+ global $lang;
+
+ $tableChart = new SurveyTableChart(self::$anketa, self::$analizaClass, 'ttest');
+ $tableChart->setTTestChartSession();
+
+ $spid1 = self::$sessionData['ttest']['variabla'][0]['spr'];
+ $seq1 = self::$sessionData['ttest']['variabla'][0]['seq'];
+ $grid1 = self::$sessionData['ttest']['variabla'][0]['grd'];
+ $sub1 = self::$sessionData['ttest']['sub_conditions'][0];
+ $sub2 = self::$sessionData['ttest']['sub_conditions'][1];
+ $chartID = $sub1.'_'.$sub2.'_'.$spid1.'_'.$seq1.'_'.$grid1;
+
+ $settings = self::$sessionData['ttest_charts'][$chartID];
+ $imgName = $settings['name'];
+
+ // IZRIS GRAFA
+ //$scale = 100;
+ $size = getimagesize('pChart/Cache/'.$imgName);
+ if($size[0] == 800)
+ $scale = 75;
+ elseif($size[0] == 2400)
+ $scale = 50;
+ else
+ $scale = 100;
+
+ self::$exportClass->rtf->add_image('pChart/Cache/'.$imgName, $scale, 'center');
+
+ self::$exportClass->rtf->new_line();
+ }
+
+
+ // Izrisemo BREAK MULTIGRID TABELO
+ static function displayBreakTableMgrid($forSpr,$frequencys,$spremenljivka) {
+ global $lang;
+
+ $keysCount = count($frequencys);
+ $sequences = explode('_',$spremenljivka['sequences']);
+ $forSpremenljivka = self::$analizaClass->_HEADERS[$forSpr];
+ $tip = $spremenljivka['tip'];
+
+ # izraÄunamo povpreÄja za posamezne sekvence
+ $means = array();
+ foreach ($frequencys AS $fkey => $fkeyFrequency) {
+ foreach ($sequences AS $sequence) {
+ $means[$fkey][$sequence] = self::$analizaClass->getMeansFromKey($frequencys[$fkey][$sequence]);
+ }
+ }
+
+ if ($tip != 16 && $tip != 20) {
+ if ($tip == 1 || $tip == 3) {
+ if (count($spremenljivka['options']) < 15) {
+ $rowspan = 2;
+ $colspan = count($spremenljivka['options'])+1;
+ } else {
+ $rowspan = 1;
+ $colspan = 1;
+ }
+ } else {
+ $rowspan = 2;
+ $colspan = count($sequences);
+ }
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '\clbrdrt\brdrs\brdrw10';
+ $borderLR = '\clbrdrl\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ $border = '\clbrdrb\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrt\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ //$align = ($arrayParams['align']=='center' ? '\qc' : '\ql');
+ $bold = '\b';
+
+ //nastavitve tabele - (sirine celic, border...)
+ $defw_full = 13500;
+ $defw_part = 5500;
+ $defw_part2 = 8000;
+ $defw_part3 = floor(8000 / $colspan);
+
+
+ // zacetek tabele
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->_font_size(16);
+ self::$exportClass->rtf->MyRTF .= "{\par";
+
+
+ // PRVA VRSTICA
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderLR.$borderT.'\clvmgf\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($forSpremenljivka['naslov'].' ('.$forSpremenljivka['variable'].')'). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($spremenljivka['naslov'].' ('.$spremenljivka['variable'].')'). '\qc\cell';
+ $tableEnd .= '\pard\intbl\row';
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ // DRUGA VRSTICA
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderLR.$borderB.'\clvmrg\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.self::$exportClass->encodeText('&nbsp; '). '\qc\cell';
+
+ $i=1;
+ if ($tip != 1 && $tip != 3) {
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $i*$defw_part3 );
+ $tableEnd .= '\pard\intbl\b0 '.self::$exportClass->encodeText($variable['naslov'].' ('.$variable['variable'].')'). '\qc\cell';
+ $i++;
+ }
+ }
+ }
+ else if (count($spremenljivka['options']) < 15) {
+ foreach ($spremenljivka['options'] AS $okey => $option) {
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $i*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.self::$exportClass->encodeText($option.' ('.$okey.')'). '\qc\cell';
+ $i++;
+ }
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $i*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.self::$exportClass->encodeText('povpreÄje'). '\qc\cell';
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ // VRSTICE S PODATKI
+ foreach ($frequencys AS $fkey => $fkeyFrequency) {
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderLR.$borderB.'\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl '.self::$exportClass->encodeText($forSpremenljivka['options'][$fkey]). '\qc\cell';
+
+ $i=1;
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ if ($variable['other'] != 1) {
+ $sequence = $variable['sequence'];
+ if (($tip == 1 || $tip == 3) && count($spremenljivka['options']) < 15) {
+ foreach ($spremenljivka['options'] AS $okey => $option) {
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $i*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.self::$exportClass->encodeText($frequencys[$fkey][$sequence]['valid'][$okey]['cnt']). '\qc\cell';
+ $i++;
+ }
+ }
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $i*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.SurveyAnalysis::formatNumber($means[$fkey][$sequence],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),''). '\qc\cell';
+ $i++;
+ }
+ }
+ }
+ $tableEnd .= '\pard\intbl\row';
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+
+ // konec tabele
+ self::$exportClass->rtf->MyRTF .= "}";
+ self::$exportClass->rtf->new_line(3);
+ }
+
+ else {
+ $rowspan = 2;
+ $colspan = $spremenljivka['grids'][0]['cnt_vars'];
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '\clbrdrt\brdrs\brdrw10';
+ $borderLR = '\clbrdrl\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ $border = '\clbrdrb\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrt\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ $bold = '\b';
+
+ //nastavitve tabele - (sirine celic, border...)
+ $defw_full = 13500;
+ $defw_part = 5500;
+ $defw_part2 = 8000;
+ $defw_part3 = floor(8000 / $colspan);
+
+
+ # za multicheck razdelimo na grupe - skupine
+ foreach ($frequencys AS $fkey => $frequency) {
+
+ // zacetek tabele
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->_font_size(16);
+ self::$exportClass->rtf->MyRTF .= "{\par";
+
+
+ // 1. vrstica
+ $tableHeader = '\trowd\trql\trrh400';
+ $table = '\clvertalc'.$border.'\cellx'.( $defw_part + $defw_part2 );
+ $tableEnd = '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($spremenljivka['naslov'].' ('.$spremenljivka['variable'].')'). '\qc\cell';
+ $tableEnd .= '\pard\intbl\row';
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ //2. vrstica
+ $tableHeader = '\trowd\trql\trrh400';
+ $table = '\clvertalc'.$border.'\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.self::$exportClass->encodeText(''). '\qc\cell';
+
+ $i=1;
+ foreach ($spremenljivka['grids'][0]['variables'] AS $vkey => $variable) {
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $i*$defw_part3 );
+ $tableEnd .= '\pard\intbl\b0 '.self::$exportClass->encodeText($variable['naslov']). '\qc\cell';
+ $i++;
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ // vrstice s podatki
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+
+ $tableHeader = '\trowd\trql\trrh400';
+ $table = '\clvertalc'.$border.'\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl '.self::$exportClass->encodeText('('.$grid['variable'].') '.$grid['naslov']). '\qc\cell';
+
+ $i=1;
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $sequence = $variable['sequence'];
+
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $i*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.SurveyAnalysis::formatNumber($means[$fkey][$sequence],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),''). '\qc\cell';
+ $i++;
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+
+ // konec tabele
+ self::$exportClass->rtf->MyRTF .= "}";
+ self::$exportClass->rtf->new_line(3);
+ }
+ }
+ }
+
+ // Izrisemo BREAK MULTIGRID TABELO
+ static function displayBreakTableNumber($forSpr,$frequencys,$spremenljivka) {
+ global $lang;
+
+ $keysCount = count($frequencys);
+ $sequences = explode('_',$spremenljivka['sequences']);
+ $forSpremenljivka = self::$analizaClass->_HEADERS[$forSpr];
+ $tip = $spremenljivka['tip'];
+
+ # izraÄunamo povpreÄja za posamezne sekvence
+ $means = array();
+ $totalMeans = array();
+ $totalFreq = array();
+ foreach ($frequencys AS $fkey => $fkeyFrequency) {
+ foreach ($sequences AS $sequence) {
+ $means[$fkey][$sequence] = self::$analizaClass->getMeansFromKey($frequencys[$fkey][$sequence]);
+ }
+ }
+
+
+ # za multi number naredimo po skupinah
+ if ($tip != 20) {
+
+ $rowspan = 3;
+ $colspan = count($sequences);
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '\clbrdrt\brdrs\brdrw10';
+ $borderLR = '\clbrdrl\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ $border = '\clbrdrb\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrt\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ //$align = ($arrayParams['align']=='center' ? '\qc' : '\ql');
+ $bold = '\b';
+
+ //nastavitve tabele - (sirine celic, border...)
+ $defw_full = 13500;
+ $defw_part = 5500;
+ $defw_part2 = 8000;
+ $defw_part3 = floor(8000 / $colspan);
+
+
+ // zacetek tabele
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->_font_size(16);
+ self::$exportClass->rtf->MyRTF .= "{\par";
+
+
+ // PRVA VRSTICA
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderLR.$borderT.'\clvmgf\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($forSpremenljivka['naslov'].' ('.$forSpremenljivka['variable'].')'). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($spremenljivka['naslov'].' ('.$spremenljivka['variable'].')'). '\qc\cell';
+ $tableEnd .= '\pard\intbl\row';
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ // DRUGA VRSTICA
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderLR.'\clvmrg\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.self::$exportClass->encodeText('&nbsp; '). '\qc\cell';
+
+ $i=1;
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $i*$defw_part3 );
+ $tableEnd .= '\pard\intbl\b0 '.self::$exportClass->encodeText($variable['naslov'].' ('.$variable['variable'].')'). '\qc\cell';
+ $i++;
+ }
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ // TRETJA VRSTICA
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderLR.$borderB.'\clvmrg\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.self::$exportClass->encodeText('&nbsp; '). '\qc\cell';
+
+ $i=1;
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $i*$defw_part3 );
+ $tableEnd .= '\pard\intbl\b0 '.self::$exportClass->encodeText('PovpreÄje'). '\qc\cell';
+ $i++;
+ }
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ // VRSTICE S PODATKI
+ foreach ($frequencys AS $fkey => $fkeyFrequency) {
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderLR.$borderB.'\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl '.self::$exportClass->encodeText($forSpremenljivka['options'][$fkey]). '\qc\cell';
+
+ $i=1;
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ if ($variable['other'] != 1) {
+ $sequence = $variable['sequence'];
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $i*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.SurveyAnalysis::formatNumber($means[$fkey][$sequence],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),''). '\qc\cell';
+
+ $totalMeans[$sequence] += (self::$analizaClass->getMeansFromKey($fkeyFrequency[$sequence])*(int)$frequencys[$fkey][$sequence]['validCnt']);
+ $totalFreq[$sequence]+= (int)$frequencys[$fkey][$sequence]['validCnt'];
+
+ $i++;
+ }
+ }
+ }
+ $tableEnd .= '\pard\intbl\row';
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+
+
+ // dodamo Å¡e skupno sumo in povpreÄje
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderLR.$borderB.'\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl '.self::$exportClass->encodeText('Skupaj'). '\qc\cell';
+
+ $i=1;
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ foreach ($grid['variables'] AS $vkey => $variable) {
+
+ $sequence = $variable['sequence'];
+ if ($variable['other'] != 1) {
+ #povpreÄja
+ $totalMean = $totalFreq[$sequence] > 0 ? $totalMeans[$sequence] / $totalFreq[$sequence] : 0;
+
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $i*$defw_part3 );
+ $tableEnd .= '\pard\intbl\b '.SurveyAnalysis::formatNumber($totalMean ,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),''). '\b0\qc\cell';
+
+ $i++;
+ }
+ }
+ }
+ $tableEnd .= '\pard\intbl\row';
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ // konec tabele
+ self::$exportClass->rtf->MyRTF .= "}";
+ self::$exportClass->rtf->new_line(3);
+ }
+
+ else {
+ $rowspan = 3;
+ $colspan = count($spremenljivka['grids'][0]['variables']);
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '\clbrdrt\brdrs\brdrw10';
+ $borderLR = '\clbrdrl\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ $border = '\clbrdrb\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrt\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ $bold = '\b';
+
+ //nastavitve tabele - (sirine celic, border...)
+ $defw_full = 13500;
+ $defw_part = 5500;
+ $defw_part2 = 8000;
+ $defw_part3 = floor(8000 / $colspan);
+
+
+ # za multinumber izrisemo samo izbrano podtabelo
+ $gkey = $spremenljivka['break_sub_table']['key'];
+ $grid = $spremenljivka['grids'][$gkey];
+
+
+ // zacetek tabele
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->_font_size(16);
+ self::$exportClass->rtf->MyRTF .= "{\par";
+
+ // PRVA VRSTICA
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderLR.$borderT.'\clvmgf\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($forSpremenljivka['naslov'].' ('.$forSpremenljivka['variable'].')'). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($spremenljivka['naslov'].' ('.$spremenljivka['variable'].') - '.$grid['naslov'].' ('.$grid['variable'].')'). '\qc\cell';
+ $tableEnd .= '\pard\intbl\row';
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ // DRUGA VRSTICA
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderLR.'\clvmrg\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.self::$exportClass->encodeText('&nbsp; '). '\qc\cell';
+
+ $i=1;
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $i*$defw_part3 );
+ $tableEnd .= '\pard\intbl\b0 '.self::$exportClass->encodeText($variable['naslov'].' ('.$variable['variable'].')'). '\qc\cell';
+ $i++;
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ // TRETJA VRSTICA
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderLR.$borderB.'\clvmrg\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.self::$exportClass->encodeText('&nbsp; '). '\qc\cell';
+
+ $i=1;
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $i*$defw_part3 );
+ $tableEnd .= '\pard\intbl\b0 '.self::$exportClass->encodeText('PovpreÄje'). '\qc\cell';
+ $i++;
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ // vrstice s podatki
+ foreach ($forSpremenljivka['options'] AS $okey => $option) {
+
+ $tableHeader = '\trowd\trql\trrh400';
+ $table = '\clvertalc'.$border.'\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl '.self::$exportClass->encodeText($option). '\qc\cell';
+
+ $i=1;
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $sequence = $variable['sequence'];
+
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $i*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.SurveyAnalysis::formatNumber($means[$okey][$sequence],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),''). '\qc\cell';
+
+ $totalMeans[$sequence] += ($means[$okey][$sequence]*(int)$frequencys[$okey][$sequence]['validCnt']);
+ $totalFreq[$sequence]+= (int)$frequencys[$okey][$sequence]['validCnt'];
+
+ $i++;
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+
+ // dodamo Å¡e skupno sumo in povpreÄje
+ $tableHeader = '\trowd\trql\trrh400';
+ $table = '\clvertalc'.$border.'\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl '.self::$exportClass->encodeText('Skupaj'). '\qc\cell';
+
+ $i=1;
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $sequence = $variable['sequence'];
+
+ if ($variable['other'] != 1) {
+ #povpreÄja
+ $totalMean = $totalFreq[$sequence] > 0 ? $totalMeans[$sequence] / $totalFreq[$sequence] : 0;
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $i*$defw_part3 );
+ $tableEnd .= '\pard\intbl\b '.SurveyAnalysis::formatNumber($totalMean,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),''). '\b0\qc\cell';
+
+ $i++;
+ }
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ // konec tabele
+ self::$exportClass->rtf->MyRTF .= "}";
+ self::$exportClass->rtf->new_line(3);
+ }
+ }
+
+ // Izrisemo BREAK MULTIGRID TABELO
+ static function displayBreakTableText($forSpr,$frequencys,$spremenljivka) {
+ global $lang;
+
+ $keysCount = count($frequencys);
+ $sequences = explode('_',$spremenljivka['sequences']);
+ $forSpremenljivka = self::$analizaClass->_HEADERS[$forSpr];
+ $tip = $spremenljivka['tip'];
+
+ # izraÄunamo povpreÄja za posamezne sekvence
+ $texts = array();
+ foreach ($frequencys AS $fkey => $fkeyFrequency) {
+ foreach ($sequences AS $sequence) {
+ $texts[$fkey][$sequence] = self::$analizaClass->getTextFromKey($fkeyFrequency[$sequence]);
+ }
+ }
+
+ $rowspan = 3;
+ $colspan = count($spremenljivka['grids'][0]['variables']);
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '\clbrdrt\brdrs\brdrw10';
+ $borderLR = '\clbrdrl\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ $border = '\clbrdrb\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrt\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ $bold = '\b';
+
+ //nastavitve tabele - (sirine celic, border...)
+ $defw_full = 13500;
+ $defw_part = 5500;
+ $defw_part2 = 8000;
+ $defw_part3 = floor(8000 / $colspan);
+
+
+ # za multinumber izrisemo samo izbrano podtabelo
+ $gkey = $spremenljivka['break_sub_table']['key'];
+ $grid = $spremenljivka['grids'][$gkey];
+
+
+ // zacetek tabele
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->_font_size(16);
+ self::$exportClass->rtf->MyRTF .= "{\par";
+
+ // PRVA VRSTICA
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderLR.$borderT.'\clvmgf\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($forSpremenljivka['naslov'].' ('.$forSpremenljivka['variable'].')'). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($spremenljivka['naslov'].' ('.$spremenljivka['variable'].') - '.$grid['naslov'].' ('.$grid['variable'].')'). '\qc\cell';
+ $tableEnd .= '\pard\intbl\row';
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ // DRUGA VRSTICA
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderLR.$borderB.'\clvmrg\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.self::$exportClass->encodeText('&nbsp; '). '\qc\cell';
+
+ $i=1;
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $i*$defw_part3 );
+ $tableEnd .= '\pard\intbl\b0 '.self::$exportClass->encodeText($variable['naslov'].' ('.$variable['variable'].')'). '\qc\cell';
+ $i++;
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ // vrstice s podatki
+ foreach ($forSpremenljivka['options'] AS $okey => $option) {
+
+ $tableHeader = '\trowd\trql\trrh400';
+ $table = '\clvertalc'.$border.'\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl '.self::$exportClass->encodeText($option). '\qc\cell';
+
+ $i=1;
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $sequence = $variable['sequence'];
+
+ if (count($texts[$okey][$sequence]) > 0) {
+ $text = '';
+ foreach ($texts[$okey][$sequence] AS $ky => $units) {
+ $text .= ' '.$units['text'].'\\line\n';
+ }
+ $text = substr($text,0,-7);
+
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $i*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.self::$exportClass->encodeText($text). '\qc\cell';
+ }
+ else{
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $i*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.self::$exportClass->encodeText(''). '\qc\cell';
+ }
+
+ $i++;
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+
+
+ // konec tabele
+ self::$exportClass->rtf->MyRTF .= "}";
+ self::$exportClass->rtf->new_line(3);
+
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->_font_size(24);
+ }
+
+ // Izrisemo BREAK GRAF
+ static function displayBreakChart($forSpr,$frequencys,$spremenljivka){
+ global $lang;
+
+ if($spremenljivka['tip'] == 20){
+ // Preberemo za kateri grid izrisujemo tabelo
+ $gkey = $spremenljivka['break_sub_table']['key'];
+
+ $spr1 = self::$sessionData['break']['seq'].'-'. self::$sessionData['break']['spr'].'-undefined';
+ $spr2 = $spremenljivka['grids'][$gkey]['variables'][0]['sequence'].'-'.$spremenljivka['id'].'-undefined';
+ }
+ else{
+ $spr1 = self::$sessionData['break']['seq'].'-'. self::$sessionData['break']['spr'].'-undefined';
+ $spr2 = $spremenljivka['grids'][0]['variables'][0]['sequence'].'-'.$spremenljivka['id'].'-undefined';
+ }
+
+ $chartID = $spr1.'_'.$spr2;
+
+ $settings = self::$sessionData['break_charts'][$chartID];
+
+ $imgName = $settings['name'];
+
+ $size = getimagesize('pChart/Cache/'.$imgName);
+ if($size[0] == 800)
+ $scale = 75;
+ elseif($size[0] == 2400)
+ $scale = 50;
+ else
+ $scale = 100;
+
+ self::$exportClass->rtf->add_image('pChart/Cache/'.$imgName, $scale, 'center');
+ }
+
+
+ // Izrisujemo NAVADEN GRAF
+ public static function displayChart($spid, $type=0, $displayTitle=false){
+ global $site_path;
+ global $lang;
+
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ // ce ga imamo v sessionu ga preberemo
+ if(isset(self::$sessionData['charts'][$spid])){
+
+ // Napolnimo podatke za graf - rabimo za cache
+ if(count(SurveyAnalysis::$_LOOPS) == 0)
+ $settings = self::$sessionData['charts'][$spid];
+ else
+ $settings = self::$sessionData['charts'][$spid][SurveyAnalysis::$_CURRENT_LOOP['cnt']];
+
+ $DataSet = SurveyChart::getDataSet($spid, $settings);
+
+ // nimamo nobenih podatkov in imamo vklopljeno opcijo da ne prikazujemo praznih grafov - vrnemo 0
+ if($DataSet == 0){
+ //self::displayEmptyWarning($spid);
+ return;
+ }
+
+ // preberemo ime slike iz sessiona
+ $imgName = $settings['name'];
+ }
+ // ce ga nimamo v sessionu
+ else{
+ // Napolnimo podatke za graf - rabimo za cache
+ $settings = SurveyChart::getDefaultSettings();
+
+ $DataSet = SurveyChart::getDataSet($spid, $settings);
+
+ // nimamo nobenih podatkov in imamo vklopljeno opcijo da ne prikazujemo praznih grafov - vrnemo 0
+ if($DataSet == 0){
+ //self::displayEmptyWarning($spid);
+ return;
+ }
+
+ $ID = SurveyChart::generateChartId($spid, $settings, $DataSet->GetNumerus());
+
+ $Cache = new pCache('pChart/Cache/');
+ $Cache = new pCache('../survey/pChart/Cache/');
+ $imgName = $Cache->GetHash($ID,$DataSet->GetData());
+ }
+
+ $stevilcenje = (self::$exportClass->numbering == 1 ? $spremenljivka['variable'].' - ' : '');
+ $title = $stevilcenje . $spremenljivka['naslov'];
+ $TITLE = self::$exportClass->rtf->bold(1) . $title . self::$exportClass->rtf->bold(0);
+
+ if($displayTitle){
+
+ self::$exportClass->rtf->new_line(3);
+
+ $stevilcenje = (self::$exportClass->numbering == 1 ? $spremenljivka['variable'].' - ' : '');
+ $title = $stevilcenje . $spremenljivka['naslov'];
+ $TITLE = self::$exportClass->rtf->bold(1) . $title . self::$exportClass->rtf->bold(0);
+ self::$exportClass->rtf->set_font("Arial Black", 8);
+ self::$exportClass->rtf->add_text($TITLE, 'center');
+
+ if(SurveyDataSettingProfiles :: getSetting('chartNumerusText') == 0){
+ self::$exportClass->rtf->set_font("Arial", 8);
+ self::$exportClass->rtf->add_text('(n = '.$DataSet->GetNumerus().')', 'center');
+ $TITLE .= '(n = '.$DataSet->GetNumerus().')';
+ }
+
+ self::$exportClass->rtf->new_line();
+ if($spremenljivka['tip'] == 2){
+ self::$exportClass->rtf->set_font("Arial", 7);
+ self::$exportClass->rtf->add_text($lang['srv_info_checkbox'], 'center');
+ self::$exportClass->rtf->new_line();
+ }
+ }
+
+ // IZRIS GRAFA
+ $size = getimagesize('pChart/Cache/'.$imgName);
+ if($size[0] == 800)
+ $scale = 75;
+ elseif($size[0] == 2400)
+ $scale = 50;
+ else
+ $scale = 100;
+ self::$exportClass->rtf->add_image('pChart/Cache/'.$imgName, $scale, 'center');
+
+ self::$exportClass->rtf->new_line();
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ $_answersOther = $DataSet->GetOther();
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+
+ $spid = $oAnswers['spid'];
+ $_variable = SurveyAnalysis::$_HEADERS[$spid]['grids'][$oAnswers['gid']]['variables'][$oAnswers['vid']];
+ $_sequence = $_variable['sequence'];
+ if(count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']) > 0){
+ self::outputOtherAnswers($oAnswers);
+ self::tableEnd();
+ }
+ }
+ }
+ }
+
+ static function chartTableRow($arrayText, $arrayParams=array()){
+
+ $defw_full = 9500;
+ $defw_part = 7700;
+ $defw_part2 = 1800;
+
+ //$borderB = ($arrayParams['borderB']==1 ? '\clbrdrb\brdrs\brdrw10' : '');
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ //$borderT = ($arrayParams['borderT']==1 ? '\clbrdrt\brdrs\brdrw10' : '');
+ $borderT = '\clbrdrt\brdrs\brdrw10';
+ $align = ($arrayParams['align2']=='C' ? '\qc' : '\ql');
+ $bold = ($arrayParams['bold']=='B' ? '\b' : '\b0');
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+
+ if($arrayParams['type'] == 1){
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->enkaEncode($arrayText[1]) .$align.'\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part + $defw_part2);
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($arrayText[2]),20,'...').'\qc\cell';
+ }
+ else{
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->enkaEncode($arrayText[1]) .$align.'\cell';
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+
+ static function chartTableHeader(){
+ global $lang;
+
+ self::$exportClass->rtf->MyRTF .= "{\par";
+
+ $naslov = array();
+ $naslov[] = '&nbsp; ';
+ $naslov[] = self::$exportClass->encodeText($lang['srv_analiza_frekvence_titleAnswers']);
+ $naslov[] = self::$exportClass->encodeText($lang['srv_analiza_frekvence_titleFrekvenca']);
+ $naslov[] = self::$exportClass->encodeText($lang['srv_analiza_frekvence_titleOdstotek']);
+ $naslov[] = self::$exportClass->encodeText($lang['srv_analiza_frekvence_titleVeljavni']);
+ $naslov[] = self::$exportClass->encodeText($lang['srv_analiza_frekvence_titleKumulativa']);
+
+ $params = array('borderB' => 1, 'borderT' => 1, 'bold' => 'B', 'align2' => 'C', 'type' => 1);
+
+ self::chartTableRow($naslov, $params);
+ }
+
+ // Izriše sumarnik v vertikalni obliki
+ static function sumVertical($spid,$_from) {
+ global $lang;
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+ # dodamo opcijo kje izrisujemo legendo
+ $inline_legenda = false;
+ $options=array('inline_legenda' => $inline_legenda, 'isTextAnswer' => false, 'isOtherAnswer' => false);
+
+ //prva vrstica
+ self::sumsTableFirstLine($spremenljivka['variable'], $spremenljivka['naslov']);
+
+ //druga vrstica
+ self::sumsTableHeader();
+
+ $show_valid_percent = (SurveyAnalysis::$_HEADERS[$spid]['show_valid_percent'] == true) ? 1 : 0;
+ // konec naslovne vrstice
+
+
+ $_answersOther = array();
+ $sum_xi_fi=0;
+ $N = 0;
+
+ $_tmp_for_div = array();
+ # izpišemo vlejavne odgovore
+ if (count($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ # dodamo dodatne vrstice z albelami grida
+ if (count($grid['variables']) > 0 )
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if ($variable['text'] != true && $variable['other'] != true) {
+
+ $maxAnswer = (SurveyDataSettingProfiles :: getSetting('numOpenAnswers') > 0) ? SurveyDataSettingProfiles :: getSetting('numOpenAnswers') : 30;
+ $counter = 0;
+ $_kumulativa = 0;
+
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'] AS $vkey => $vAnswer) {
+
+ // za povpreÄje
+ $xi = $vkey;
+ $fi = $vAnswer['cnt'];
+
+ $sum_xi_fi += $xi * $fi ;
+ $N += $fi;
+
+ if ($vAnswer['cnt'] > 0 /*&& $counter < $maxAnswer*/ || true) { # izpisujemo samo tiste ki nisno 0
+
+ $counter = self::outputValidAnswerVertical($counter,$vkey,$vAnswer,$_sequence,$spid,$_kumulativa,$options);
+ }
+ # za poznejÅ¡e raÄunannje odklona
+ $_tmp_for_div[] = array('xi'=>$xi, 'fi'=>$fi, 'sequence'=>$_sequence);
+ }
+ # izpišemo sumo veljavnih
+ $counter = self::outputSumaValidAnswerVertical($counter,$_sequence,$spid,$options);
+ }
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'] AS $ikey => $iAnswer) {
+ if ($iAnswer['cnt'] > 0 ) { # izpisujemo samo tiste ki nisno 0
+ $counter = self::outputInvalidAnswerVertical($counter,$ikey,$iAnswer,$_sequence,$spid,$options);
+ }
+ }
+ # izpišemo sumo veljavnih
+ $counter = self::outputSumaInvalidAnswerVertical($counter,$_sequence,$spid,$options);
+ }
+ #izpišemo še skupno sumo
+ $counter = self::outputSumaVertical($counter,$_sequence,$spid,$options);
+ } else {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ }
+ }
+
+ # odklon
+ $avg = ($N > 0) ? $sum_xi_fi / $N : 0;
+ #standardna diviacija
+ $div = 0;
+ $sum_pow_xi_fi_avg = 0;
+ foreach ( $_tmp_for_div as $tkey => $_tmp_div_data) {
+ $xi = $_tmp_div_data['xi'];
+ $fi = $_tmp_div_data['fi'];
+
+ $sum_pow_xi_fi_avg += pow(($xi - $avg),2) * $fi;
+ }
+ $div = (($N -1) > 0) ? sqrt($sum_pow_xi_fi_avg / ($N -1)) : 0;
+
+ self::$exportClass->rtf->MyRTF .= "}";
+
+ # izpiÅ¡emo Å¡e odklon in povpreÄje
+ if ($show_valid_percent == 1 && SurveyAnalysis::$_HEADERS[$spid]['skala'] != 1) {
+
+ self::$exportClass->rtf->MyRTF .= "{\par";
+
+ $defw_full = 10300;
+ $defw_part0 = 1100;
+ $defw_part = 1300;
+ $defw_part2 = 4000;
+
+ $bold = '\b0';
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '\clbrdrt\brdrs\brdrw10';
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table .= '\clvertalc\cellx'.( $defw_part0 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode('&nbsp; '),20,'...') . '\qc\cell';
+
+ $table .= '\clvertalc\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode('&nbsp; '),20,'...') . '\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part + $defw_part2);
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($lang['srv_analiza_opisne_povprecje']),20,'...').'\qc\cell';
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 2*$defw_part + $defw_part2);
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode(SurveyAnalysis::formatNumber($avg,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'')),20,'...').'\qc\cell';
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 3*$defw_part + $defw_part2);
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($lang['srv_analiza_opisne_odklon']),20,'...').'\qc\cell';
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 4*$defw_part + $defw_part2);
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode(SurveyAnalysis::formatNumber($div,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'')),20,'...').'\qc\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+ self::tableEnd();
+ }
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ self::outputOtherAnswers($oAnswers);
+ self::tableEnd();
+ }
+ }
+ }
+
+ static function sumVerticalCheckbox($spid,$_from) {
+ global $lang;
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+ $_answersOther = array();
+
+ $inline_legenda = count ($spremenljivka['grids']) > 1;
+ if ($variable['other'] != '1' && $variable['text'] != '1') {
+ $_tip = SurveyAnalysis::getSpremenljivkaLegenda($spremenljivka,'izrazanje');
+ $_oblika = SurveyAnalysis::getSpremenljivkaLegenda($spremenljivka,'skala');
+ } else {
+ $_tip = $lang['srv_analiza_vrsta_bese'];
+ $_oblika = $lang['srv_analiza_oblika_nomi'];
+ }
+ # ugotovimo koliko imamo kolon
+ if (count($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $_clmn_cnt[$gid] = $grid['cnt_vars']-$grid['cnt_other'];
+ if (count ($grid['variables']) > 0)
+ foreach ($grid['variables'] AS $vid => $variable) {
+ $_sequence = $variable['sequence'];
+ $_valid_cnt[$gid] = max($_valid_cnt[$gid], SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt']);
+ $_approp_cnt[$gid] = max($_approp_cnt[$gid], SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt']);
+ if ($variable['other'] == true) {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ $_valid[$gid][$vid] = SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'];
+ $_navedbe[$gid] += SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt'];
+ }
+ }
+
+
+ //prva vrstica
+ self::sumsTableFirstLine($spremenljivka['variable'], $spremenljivka['naslov']);
+
+ //druga vrstica
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part = 1000;
+ $defw_part2 = 2400;
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $align = '\ql';
+ $bold = '\b';
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode('&nbsp; '),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($lang['srv_analiza_opisne_subquestion']),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 5 * $defw_part + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($lang['srv_analiza_opisne_units']),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 7 * $defw_part + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($lang['srv_analiza_opisne_arguments']),20,'...') . $align . '\qc\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+ //tretja vrstica
+ $text = array();
+
+ $text[] = '';
+ $text[] = '';
+ $text[] = self::$exportClass->encodeText($lang['srv_analiza_opisne_frequency']);
+ $text[] = self::$exportClass->encodeText($lang['srv_analiza_opisne_valid']);
+ $text[] = self::$exportClass->encodeText('% - '.$lang['srv_analiza_opisne_valid']);
+ $text[] = self::$exportClass->encodeText($lang['srv_analiza_num_units_valid']);
+ $text[] = self::$exportClass->encodeText('% - '.$lang['srv_analiza_num_units_valid']);
+ $text[] = self::$exportClass->encodeText($lang['srv_analiza_opisne_frequency']);
+ $text[] = self::$exportClass->encodeText('%');
+
+ self::sumsTableRowVerticalCheckbox($text);
+ //konec naslovnih vrstic
+
+ $_max_valid = 0;
+ $_max_appropriate = 0;
+ if (count ($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] as $gid => $grid) {
+ if (count ($grid['variables']) > 0)
+ foreach ($grid['variables'] AS $vid => $variable) {
+ if ($variable['other'] != 1) {
+ $_sequence = $variable['sequence'];
+
+ $text = array();
+
+ $text[] = self::$exportClass->encodeText($variable['variable']);
+ $text[] = self::$exportClass->encodeText($variable['naslov']);
+
+ // Frekvence
+ $text[] = self::$exportClass->encodeText((int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt']);
+
+ // Veljavni
+ $text[] = self::$exportClass->encodeText((int)(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt']+(int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['0']['cnt']));
+
+ // Procent veljavni
+ $_percent = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] > 0 ) ? 100*SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] : 0;
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::formatNumber($_percent,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%'));
+
+ $_max_appropriate = max($_max_appropriate, (int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt']);
+ $_max_valid = max ($_max_valid, ((int)(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt']+(int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['0']['cnt'])));
+
+ // Ustrezni
+ $text[] = self::$exportClass->encodeText((int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt']);
+
+ // % Ustrezni
+ $valid = (int)(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt']+(int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['0']['cnt']);
+ $valid = (int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt'];
+ $_percent = ($_max_appropriate > 0 ) ? 100*$valid / $_max_appropriate : 0;
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::formatNumber($_percent,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%'));
+
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt']);
+
+ $_percent = ($_navedbe[$gid] > 0 ) ? 100*SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt'] / $_navedbe[$gid] : 0;
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::formatNumber($_percent,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%'));
+
+ self::sumsTableRowVerticalCheckbox($text);
+
+ } else {
+ # drugo
+ }
+ }
+
+ $text = array();
+
+ $text[] = '';
+
+ $text[] = self::$exportClass->encodeText($lang['srv_anl_suma_valid']);
+
+ $text[] = '';
+
+ $text[] = self::$exportClass->encodeText($_max_valid);
+ $text[] = '';
+
+ $text[] = self::$exportClass->encodeText($_max_appropriate);
+ $text[] = '';
+
+ $text[] = self::$exportClass->encodeText($_navedbe[$gid]);
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::formatNumber('100',SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%'));
+
+ self::sumsTableRowVerticalCheckbox($text);
+ }
+ self::tableEnd();
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ self::outputOtherAnswers($oAnswers);
+ self::tableEnd();
+ }
+ }
+ }
+
+ /** Izriše nagovor
+ *
+ */
+ static function sumNagovor($spid,$_from) {
+ global $lang;
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+ $_tip = SurveyAnalysis::getSpremenljivkaLegenda($spremenljivka,'izrazanje');
+ $_oblika = SurveyAnalysis::getSpremenljivkaLegenda($spremenljivka,'skala');
+
+ self::tableFirstLine($spremenljivka['variable'], $spremenljivka['naslov']);
+ self::tableEnd();
+ }
+
+ /** Izriše number odgovore v vertikalni obliki
+ *
+ * @param unknown_type $spid
+ */
+ static function sumNumberVertical($spid,$_from) {
+ global $lang;
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ # dodamo opcijo kje izrisujemo legendo
+ # Äe je besedilo * in je samo ena kategorija je inline legenda false
+ $inline_legenda = (SurveyAnalysis::$_HEADERS[$spid]['cnt_all'] == 1 || in_array($spremenljivka['tip'],array(1,8) ) ) ? false: true;
+ $options=array('inline_legenda' => $inline_legenda, 'isTextAnswer' => false, 'isOtherAnswer' => false, 'textAnswerExceed' => false);
+
+ # ali izpisujemo enoto:
+ $show_enota = true;
+ if ((int)$spremenljivka['enota'] == 0 && SurveyAnalysis::$_HEADERS[$spid]['cnt_all'] == 1) {
+ $show_enota = false;
+ }
+
+ # ugotovimo koliko imamo kolon
+ if (count($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $_clmn_cnt[$gid] = $grid['cnt_vars']-$grid['cnt_other'];
+ if (count($grid['variables']) > 0)
+ foreach ($grid['variables'] AS $vid => $variable) {
+ $_sequence = $variable['sequence'];
+ $_approp_cnt[$gid] = max($_approp_cnt[$gid], SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt']);
+
+ # za povpreÄje
+ $sum_xi_fi=0;
+ $N = 0;
+ $div=0;
+ $min = null;
+ $max = null;
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']) > 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'] AS $xi => $_validFreq) {
+
+ $fi = $_validFreq['cnt'];
+ $sum_xi_fi += $xi * $fi ;
+ $N += $fi;
+ $min = $min != null ? min($min,$xi) : $xi;
+ $max = max($max,$xi);
+ }
+ }
+
+ #povpreÄje
+ $avg = ($N > 0) ? $sum_xi_fi / $N : 0;
+ $sum_avg += $avg;
+ SurveyAnalysis::$_FREQUENCYS[$_sequence]['validAvg'] = $avg;
+ SurveyAnalysis::$_FREQUENCYS[$_sequence]['validMin'] = $min;
+ SurveyAnalysis::$_FREQUENCYS[$_sequence]['validMax'] = $max;
+
+ #standardna diviacija
+ $div = 0;
+ $sum_pow_xi_fi_avg = 0;
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']) > 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'] AS $xi => $_validFreq) {
+ $fi = $_validFreq['cnt'];
+ $sum_pow_xi_fi_avg += pow(($xi - $avg),2) * $fi;
+ }
+ }
+ SurveyAnalysis::$_FREQUENCYS[$_sequence]['validDiv'] = (($N -1) > 0) ? sqrt($sum_pow_xi_fi_avg / ($N -1)) : 0;
+
+ #doloÄimo Å¡e polja drugo za kasnejÅ¡i prikaz
+ if ($variable['other'] == true) {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ }
+ }
+
+ //prva vrstica
+ self::sumsTableFirstLine($spremenljivka['variable'], $spremenljivka['naslov']);
+
+ //druga vrstica
+ $text = array();
+
+ $text[] = '&nbsp; ';
+
+ if ($show_enota) {
+ if ($spremenljivka['tip'] == 20 || $spremenljivka['tip'] == 7) {
+ $text[] = self::$exportClass->encodeText($lang['srv_analiza_opisne_subquestion']);;
+ } else {
+ $text[] = self::$exportClass->encodeText($lang['srv_analiza_opisne_variable_text']);
+ }
+ } else {
+ $text[] = '&nbsp; ';
+ }
+
+ $text[] = self::$exportClass->encodeText($lang['srv_analiza_opisne_m']);
+ $text[] = self::$exportClass->encodeText($lang['srv_analiza_num_units']);
+ $text[] = self::$exportClass->encodeText($lang['srv_analiza_opisne_povprecje']);
+ $text[] = self::$exportClass->encodeText($lang['srv_analiza_opisne_odklon']);
+ $text[] = self::$exportClass->encodeText($lang['srv_analiza_opisne_min']);
+ $text[] = self::$exportClass->encodeText($lang['srv_analiza_opisne_max']);
+
+ $params = array('bold' => 'B');
+
+ self::sumsTableRowNumberVertical($text, $params);
+ //konec naslovnih vrstic
+
+ $_answersOther = array();
+ $_grupa_cnt = 0;
+ if (count($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ if (count($spremenljivka['grids']) > 1 && $_grupa_cnt !== 0 && $spremenljivka['tip'] != 6) {
+ $grid['new_grid'] = true;
+ }
+
+ $_grupa_cnt ++;
+ if (count($grid['variables']) > 0) {
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if ($variable['other'] != true) {
+ $_sequence = $variable['sequence'];
+
+ $text = array();
+
+ if ($spremenljivka['tip'] != 7 ) {
+ $text[] = self::$exportClass->encodeText($variable['variable']);
+ }
+ else
+ $text[] = '&nbsp; ';
+
+ if ($show_enota) {
+ $text[] = self::$exportClass->encodeText((count($grid['variables']) > 1 && $spremenljivka['tip'] == 20 ? $grid['naslov'] . ' - ' : '' ).$variable['naslov']);
+ } else {
+ $text[] = '&nbsp; ';;
+ }
+
+ $text[] = self::$exportClass->encodeText((int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt']);
+ $text[] = self::$exportClass->encodeText((int)$_approp_cnt[$gid]);
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::formatNumber(SurveyAnalysis::$_FREQUENCYS[$_sequence]['validAvg'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),''));
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::formatNumber(SurveyAnalysis::$_FREQUENCYS[$_sequence]['validDiv'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_DEVIATION'),''));
+ $text[] = self::$exportClass->encodeText((int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['validMin']);
+ $text[] = self::$exportClass->encodeText((int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['validMax']);
+
+ self::sumsTableRowNumberVertical($text);
+
+ } else {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ $grid['new_grid'] = false;
+ }
+
+ }
+ }
+ self::tableEnd();
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ self::outputOtherAnswers($oAnswers);
+ self::tableEnd();
+ }
+ }
+ }
+
+ /** Izriše sumarnik v horizontalni obliki za multigrid
+ *
+ * @param unknown_type $spid - spremenljivka ID
+ */
+ static function sumHorizontal($spid,$_from) {
+ global $lang;
+
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+ $_answersOther = array();
+ $_clmn_cnt = count($spremenljivka['options']);
+
+ # pri razvrÅ¡Äanju dodamo dva polja za povpreÄje in odklon
+ $additional_field = false;
+ $add_fld = 0;
+
+ if ($spremenljivka['tip'] == 17 || $spremenljivka['tip'] == 1 || $spremenljivka['tip'] == 3 || ($spremenljivka['tip'] == 6 && $spremenljivka['skala'] != 1)) {
+ $additional_field = true;
+ $add_fld = 2;
+ }
+
+ # pri radiu in dropdown ne prikazujemo podvprašanj
+ $_sub_question_col = 1;
+ if ($spremenljivka['tip'] == 1 || $spremenljivka['tip'] == 3) {
+ $_sub_question_col = 0;
+ }
+
+ //prva vrstica
+ self::sumsTableFirstLine($spremenljivka['variable'], $spremenljivka['naslov']);
+
+ //druga vrstica
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part = 750;
+ $defw_part2 = 1800;
+ $defw_part3 = 4600;
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '';
+ $align = '\ql';
+ $bold = '\b';
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode('&nbsp; '),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($lang['srv_analiza_opisne_subquestion']),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + $defw_part3 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($lang['srv_analiza_opisne_answers']),20,'...') . $align . '\qc\cell';
+
+ if ($additional_field){
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($lang['srv_analiza_opisne_valid']),20,'...').'\qc\cell';
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 2 * $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($lang['srv_analiza_num_units']),20,'...').'\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 3 * $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($lang['srv_analiza_opisne_povprecje']),20,'...').'\qc\cell';
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 4 * $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($lang['srv_analiza_opisne_odklon']),20,'...').'\qc\cell';
+ }
+ else{
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 2 * $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($lang['srv_analiza_opisne_valid']),20,'...').'\qc\cell';
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 4 * $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($lang['srv_analiza_num_units']),20,'...').'\qc\cell';
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+ $_variables = $grid['variables'];
+
+ //tretja vrstica
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part = 750;
+ $defw_part2 = 1800;
+ $defw_part3 = 4600;
+
+ //$borderB = ($arrayParams['borderB']==1 ? '\clbrdrb\brdrs\brdrw10' : '');
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '';
+ $align = '';
+ $bold = '\b0';
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd = '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode('&nbsp; '),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode('&nbsp; '),20,'...') . $align . '\cell';
+
+ $defw_dynamic = round($defw_part3 / ($_clmn_cnt+1));
+ $count = 1;
+ if (count($spremenljivka['options']) > 0) {
+ foreach ( $spremenljivka['options'] as $key => $kategorija) {
+ // misinge imamo zdruzene
+ $_label = $kategorija;
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + ($count * $defw_dynamic) );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($_label),20,'...').'\qc\cell';
+
+ $count++;
+ }
+ }
+
+ //suma
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($lang['srv_anl_suma1']),20,'...').'\qc\cell';
+
+ if ($additional_field){
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode('&nbsp; '),20,'...').'\qc\cell';
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 2 * $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode('&nbsp; '),20,'...').'\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 3 * $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode('&nbsp; '),20,'...').'\qc\cell';
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 4 * $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode('&nbsp; '),20,'...').'\qc\cell';
+ }
+ else{
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 2 * $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode('&nbsp; '),20,'...').'\qc\cell';
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 4 * $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode('&nbsp; '),20,'...').'\qc\cell';
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ //konec naslovnih vrstic
+
+
+ #zlopamo skozi gride
+ $podtabela = 0;
+ if (count($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $cssBack = "anl_bck_desc_2 ";
+ # zloopamo skozi variable
+ if (count($grid['variables']) > 0)
+ foreach ($grid['variables'] AS $vid => $variable ) {
+ $_sequence = $variable['sequence'];
+ if ($variable['other'] != true) {
+
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part = 750;
+ $defw_part2 = 1800;
+ $defw_part3 = 4600;
+
+ //$borderB = ($arrayParams['borderB']==1 ? '\clbrdrb\brdrs\brdrw10' : '');
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '';
+ $align = '';
+ $bold = '';
+
+ // Ce gre za dvojno tabelo naredimo vrstico s naslovom podtabele
+ if($spremenljivka['tip'] == 6 && $spremenljivka['enota'] == 3){
+
+ // ÄŒe zaÄnemo z drugo podtabelo izpiÅ¡emo vrstico z naslovom
+ if($podtabela != $grid['part']){
+
+ $subtitle = $spremenljivka['double'][$grid['part']]['subtitle'];
+ $subtitle = $subtitle == '' ? $lang['srv_grid_subtitle_def'].' '.$grid['part'] : $subtitle;
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_full );
+ $tableEnd = '\pard\intbl '.self::$exportClass->enkaEncode($subtitle) . $align . '\qc\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->enkaEncode($tableHeader.$table.$tableEnd);
+
+ $podtabela = $grid['part'];
+ }
+ }
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd = '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($variable['variable']),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($variable['naslov']),20,'...') . $align . '\cell';
+
+
+ # za odklon in povpreÄje
+ $sum_xi_fi=0;
+ $N = 0;
+ $div=0;
+
+ $defw_dynamic = round($defw_part3 / ($_clmn_cnt+1));
+ $count = 1;
+ if (count($spremenljivka['options']) > 0) {
+ foreach ( $spremenljivka['options'] as $key => $kategorija) {
+ if ($additional_field) { # za odklon in povpreÄje
+ $xi = $key;
+ $fi = SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'][$key]['cnt'];
+ $sum_xi_fi += $xi * $fi ;
+ $N += $fi;
+ }
+
+ $_percent = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] > 0 ) ? SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'][$key]['cnt'] * 100 / SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] : 0;
+
+ $text = SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'][$key]['cnt'] .' ('. SurveyAnalysis::formatNumber($_percent,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%') .')';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + ($count * $defw_dynamic) );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($text),20,'...').'\qc\cell';
+
+ $count++;
+ }
+ }
+ //suma
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode((int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'].' ('.SurveyAnalysis::formatNumber(100,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%').')'),20,'...').'\qc\cell';
+
+ if ($additional_field){
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode(SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt']),20,'...').'\qc\cell';
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 2 * $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode(SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt']),20,'...').'\qc\cell';
+
+ # odklon
+ $avg = ($N > 0) ? $sum_xi_fi / $N : 0;
+ #standardna diviacija
+ $div = 0;
+ $sum_pow_xi_fi_avg = 0;
+ if (count($spremenljivka['options']) > 0) {
+ foreach ( $spremenljivka['options'] as $xi => $kategorija) {
+ $fi = SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'][$xi]['cnt'];
+ $sum_pow_xi_fi_avg += pow(($xi - $avg),2) * $fi;
+ }
+ }
+ $div = (($N -1) > 0) ? sqrt($sum_pow_xi_fi_avg / ($N -1)) : 0;
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 3 * $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode(SurveyAnalysis::formatNumber($avg,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'')),20,'...').'\qc\cell';
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 4 * $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode(SurveyAnalysis::formatNumber($div,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'')),20,'...').'\qc\cell';
+ }
+ else{
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 2 * $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode(SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt']),20,'...').'\qc\cell';
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 4 * $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode(SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt']),20,'...').'\qc\cell';
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+ } else {
+ # immamo polje drugo
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ }
+ }
+ self::tableEnd();
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ self::outputOtherAnswers($oAnswers);
+ self::tableEnd();
+ }
+ }
+ }
+
+ /** Izriše tekstovne odgovore v vertikalni obliki
+ *
+ * @param unknown_type $spid
+ */
+ static function sumTextVertical($spid,$_from) {
+ global $lang;
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ # dodamo opcijo kje izrisujemo legendo
+ # Äe je besedilo * in je samo ena kategorija je inline legenda false
+ $inline_legenda = (SurveyAnalysis::$_HEADERS[$spid]['cnt_all'] == 1 || in_array($spremenljivka['tip'],array(1,8) ) ) ? false: true;
+ $options=array('inline_legenda' => $inline_legenda, 'isTextAnswer' => false, 'isOtherAnswer' => false, 'textAnswerExceed' => false);
+
+
+ //prva vrstica
+ self::sumsTableFirstLine($spremenljivka['variable'], $spremenljivka['naslov']);
+
+ //druga vrstica
+ self::sumsTableHeader();
+ //konec naslovnih vrstic
+
+
+ $_answersOther = array();
+ $_grids_count = count($spremenljivka['grids']);
+ if ($_grids_count > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $_variables_count = count($grid['variables']);
+ if ($_variables_count > 0)
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if ($variable['other'] != true) {
+ # dodamo dodatne vrstice z labelami grida
+ if ($_variables_count > 1) {
+ self::outputGridLabelVertical($gid,$grid,$vid,$variable,$spid,$options);
+ }
+
+ $maxAnswer = (SurveyDataSettingProfiles :: getSetting('numOpenAnswers') > 0) ? SurveyDataSettingProfiles :: getSetting('numOpenAnswers') : 30;
+ $counter = 0;
+ $_kumulativa = 0;
+ //SurveyAnalysis::$_FREQUENCYS[$_sequence]
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'] AS $vkey => $vAnswer) {
+ if ($vAnswer['cnt'] > 0 && $counter < $maxAnswer) { # izpisujemo samo tiste ki nisno 0
+ # ali prikažemo vse odgovore ali pa samo toliko koliko je nastavljeno v TEXT_ANSWER_LIMIT
+ $textAnswerExceed = ($counter >= TEXT_ANSWER_LIMIT && count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']) > TEXT_ANSWER_LIMIT+2) ? true : false; # ali zaÄnemo skrivati tekstovne odgovore
+ $options['isTextAnswer']=true;
+ $options['textAnswerExceed'] = $textAnswerExceed;
+ $counter = self::outputValidAnswerVertical($counter,$vkey,$vAnswer,$_sequence,$spid,$_kumulativa,$options);
+ }
+ }
+ # izpišemo sumo veljavnih
+ $counter = self::outputSumaValidAnswerVertical($counter,$_sequence,$spid,$options);
+ }
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'] AS $ikey => $iAnswer) {
+ if ($iAnswer['cnt'] > 0 ) { # izpisujemo samo tiste ki nisno 0
+ $counter = self::outputInvalidAnswerVertical($counter,$ikey,$iAnswer,$_sequence,$spid,$options);
+ }
+ }
+ # izpišemo sumo veljavnih
+ $counter = self::outputSumaInvalidAnswerVertical($counter,$_sequence,$spid,$options);
+ }
+ #izpišemo še skupno sumo
+ $counter = self::outputSumaVertical($counter,$_sequence,$spid,$options);
+ } else {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ }
+ }
+ self::tableEnd();
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ self::outputOtherAnswers($oAnswers);
+ self::tableEnd();
+ }
+ }
+ }
+
+ /** Izriše tekstovne odgovore kot tabelo z navedbami
+ *
+ * @param unknown_type $spid
+ */
+ static function sumMultiText($spid,$_from,$displayTitle=false) {
+ global $lang;
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ $_cols = $spremenljivka['cnt_all'] / $spremenljivka['cnt_grids'];
+
+ # koliko zapisov prikažemo naenkrat
+ $maxAnswer = (SurveyDataSettingProfiles :: getSetting('numOpenAnswers') > 0) ? SurveyDataSettingProfiles :: getSetting('numOpenAnswers') : 30;
+
+ $_answers = SurveyAnalysis::getAnswers($spremenljivka,$maxAnswer);
+
+ $_all_valid_answers_cnt = $_answers['validCnt'];
+ $_valid_answers = $_answers['valid'];
+
+
+ // Naslov tabele
+ if($displayTitle){
+ self::$exportClass->rtf->new_line(3);
+
+ $stevilcenje = (self::$exportClass->numbering == 1 ? $spremenljivka['variable'].' - ' : '');
+ $title = $stevilcenje . $spremenljivka['naslov'];
+ $TITLE = self::$exportClass->rtf->bold(1) . $title . self::$exportClass->rtf->bold(0);
+
+ self::$exportClass->rtf->set_font("Arial Black", 8);
+ self::$exportClass->rtf->add_text($TITLE, 'center');
+ self::$exportClass->rtf->new_line();
+ if($spremenljivka['tip'] == 2){
+ self::$exportClass->rtf->set_font("Arial", 7);
+ self::$exportClass->rtf->add_text($lang['srv_info_checkbox'], 'center');
+ self::$exportClass->rtf->new_line();
+ }
+ }
+
+ //prva vrstica
+ if(self::$from != 'charts'){
+ self::sumsTableFirstLine($spremenljivka['variable'], $spremenljivka['naslov']);
+ }
+ else{
+ self::$exportClass->rtf->MyRTF .= "{\par";
+ }
+
+ //druga vrstica
+ if(self::$from == 'charts'){
+ if(isset(self::$sessionData['charts'][$spid]))
+ $type = self::$sessionData['charts'][$spid]['type'];
+ else
+ $type = 0;
+ }
+ if(self::$from != 'charts' || (self::$from == 'charts' && $type == 1)){
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part2 = 2600;
+
+ //$borderB = ($arrayParams['borderB']==1 ? '\clbrdrb\brdrs\brdrw10' : '');
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '\clbrdrt\brdrs\brdrw10';
+ $align = '';
+ $bold = '\b';
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd = '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode('&nbsp; '),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($lang['srv_analiza_opisne_subquestion']),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_full );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($lang['srv_analiza_opisne_arguments']),20,'...').'\qc\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+
+ //konec naslovnih vrstic
+
+
+ $_answersOther = array();
+ $_grids_count = count($spremenljivka['grids']);
+ if ($_grids_count > 0) {
+ # naslovna vrstica
+ $_row = $spremenljivka['grids'][0];
+
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part2 = 2600;
+ $defw_part3 = 6800;
+
+ //$borderB = ($arrayParams['borderB']==1 ? '\clbrdrb\brdrs\brdrw10' : '');
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '\clbrdrt\brdrs\brdrw10';
+ $align = '';
+ $bold = '\b0';
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd = '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode('&nbsp; '),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode('&nbsp; '),20,'...') . $align . '\cell';
+
+ $var_count = count($_row['variables']);
+ $defw_dynamic = round($defw_part3 / $var_count);
+ $count = 1;
+ foreach ($_row['variables'] AS $rid => $_col ){
+ $_sequence = $_col['sequence']; # id kolone z podatki
+ if ($_col['other'] != true) {
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + ($defw_dynamic * $count) );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($_col['naslov']),20,'...').'\qc\cell';
+ }
+ else {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+
+ $count++;
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ //podatkovne vrstice
+ $count = 1;
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $_variables_count = count($grid['variables']);
+
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part2 = 2600;
+ $defw_part3 = 6800;
+
+ //$borderB = ($arrayParams['borderB']==1 ? '\clbrdrb\brdrs\brdrw10' : '');
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '';
+ $align = '';
+ $bold = '';
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd = '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($grid['variable']),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($grid['naslov']),20,'...') . $align . '\cell';
+
+ if ($_variables_count > 0) {
+
+ $defw_dynamic = round($defw_part3 / $_variables_count);
+ $count = 1;
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if ($variable['other'] != true) {
+ # tabela z navedbami
+ # odvisno ali imamo odgovor
+ if (count($_valid_answers) > 0) {
+ $text = '';
+ foreach ($_valid_answers AS $answer) {
+
+ $_ans = $answer[$_sequence];
+
+ if ($_ans != null && $_ans != '') {
+ $text .= $_ans.', \line ';
+ }
+ }
+
+ $text = substr($text, 0, -8);
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + ($defw_dynamic * $count) );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->enkaEncode($text).'\qc\cell';
+ }
+ else {
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + ($defw_dynamic * $count) );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode('&nbsp;'),20,'...').'\qc\cell';
+ }
+
+ $count++;
+ }
+ }
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+ }
+
+ // Ce je vec odgovorov kot jih prikazemo izpisemo na dnu izpisanih/vseh
+ if($_all_valid_answers_cnt > $maxAnswer){
+ $tableHeader = '\trowd\trql\trrh400';
+ $table = '\clvertalc\cellx'.( 10300 );
+ $tableEnd = '\pard\intbl '.self::$exportClass->encodeText($maxAnswer.' / '.$_all_valid_answers_cnt). '\qr\cell';
+ $tableEnd .= '\pard\intbl\row';
+
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+
+ self::tableEnd();
+
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+
+ $spid = $oAnswers['spid'];
+ $_variable = SurveyAnalysis::$_HEADERS[$spid]['grids'][$oAnswers['gid']]['variables'][$oAnswers['vid']];
+ $_sequence = $_variable['sequence'];
+ if(count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']) > 0){
+ self::outputOtherAnswers($oAnswers);
+ self::tableEnd();
+ }
+ }
+ }
+ }
+
+ /** Izriše sumarnik v horizontalni obliki za multi checbox
+ *
+ * @param unknown_type $spid - spremenljivka ID
+ */
+ static function sumMultiHorizontalCheckbox($spid,$_from) {
+ global $lang;
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+ $_answersOther = array();
+
+ # ugotovimo koliko imamo kolon
+ $gid=0;
+ $_clmn_cnt = SurveyAnalysis::$_HEADERS[$spid]['grids'][$gid]['cnt_vars']-SurveyAnalysis::$_HEADERS[$spid]['grids'][$gid]['cnt_other'];
+ # tekst vprašanja
+
+
+ /////////////////PRVA TABELA////////////////
+ //prva vrstica
+ self::sumsTableFirstLine($spremenljivka['variable'], $spremenljivka['naslov']);
+
+ //druga vrstica
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part = 1100;
+ $defw_part2 = 2200;
+ $defw_part3 = 5000;
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '';
+ $align = '\ql';
+ $bold = '\b';
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd = '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode('&nbsp; '),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($lang['srv_analiza_opisne_subquestion']),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + $defw_part3 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($lang['srv_analiza_opisne_answers']),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($lang['srv_analiza_opisne_valid']),20,'...').'\qc\cell';
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 2 * $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($lang['srv_analiza_num_units']),20,'...').'\qc\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+ //tretja vrstica
+ $_variables = SurveyAnalysis::$_HEADERS[$spid]['grids'][$gid]['variables'];
+
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part = 1100;
+ $defw_part2 = 2200;
+ $defw_part3 = 5000;
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '';
+ $align = '\ql';
+ $bold = '\b0';
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd = '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode('&nbsp; '),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode('&nbsp; '),20,'...') . $align . '\cell';
+
+ $defw_dynamic = round($defw_part3 / count($_variables) );
+ $count = 1;
+ foreach ($_variables AS $vkey => $variable) {
+ if ($variable['other'] != true) {
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + ($count * $defw_dynamic) );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($variable['naslov'].' ('.$variable['gr_id']. ')'),20,'...').'\qc\cell';
+ }
+ $count++;
+ }
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode('&nbsp; '),20,'...').'\qc\cell';
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 2 * $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode('&nbsp; '),20,'...').'\qc\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ //podatkovne vrstice
+ foreach (SurveyAnalysis::$_HEADERS[$spid]['grids'] AS $gid => $grids) {
+ $_cnt = 0;
+
+ # vodoravna vrstice s podatki
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part = 1100;
+ $defw_part2 = 2200;
+ $defw_part3 = 5000;
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '';
+ $align = '\ql';
+ $bold = '\b0';
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd = '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($grids['variable']),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($grids['naslov']),20,'...') . $align . '\cell';
+
+ $_arguments = 0;
+ $_max_appropriate = 0;
+ $_max_cnt = 0;
+
+ // prikaz frekvenc
+ $defw_dynamic = round($defw_part3 / count($grids['variables']) );
+ $count = 1;
+ foreach ($grids['variables'] AS $vkey => $variable) {
+ $_sequence = $variable['sequence'];
+ $_valid = SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'];
+ $_cnt = SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt'];
+ $_arguments += $_cnt;
+
+ $_max_appropriate = max($_max_appropriate, (int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt']);
+ $_max_cnt = max ($_max_cnt, ((int)(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt']+(int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['0']['cnt'])));
+
+ if ($variable['other'] == true) {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vkey,'sequence'=>$_sequence);
+ }
+
+ if ($variable['other'] != true) {
+
+ $_percent = ($_valid > 0 ) ? $_cnt * 100 / $_valid : 0;
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + ($count * $defw_dynamic) );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($_cnt.' ('.SurveyAnalysis::formatNumber($_percent,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%'). ')'),20,'...').'\qc\cell';
+ }
+
+ $count++;
+ }
+
+ # veljavno
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($_max_cnt),20,'...').'\qc\cell';
+ #ustrezno
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 2 * $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($_max_appropriate),20,'...').'\qc\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+
+ self::tableEnd();
+ /////////////////KONEC PRVE TABELE////////////////
+
+
+
+ ////////////DRUGA TABELA///////////////////
+ //prva vrstica
+ self::sumsTableFirstLine($spremenljivka['variable'], $spremenljivka['naslov']);
+
+ //druga vrstica
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part2 = 2200;
+ $defw_part3 = 7200;
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '';
+ $align = '\ql';
+ $bold = '\b';
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd = '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode('&nbsp; '),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($lang['srv_analiza_opisne_subquestion']),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + $defw_part3 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($lang['srv_analiza_opisne_arguments']),20,'...') . $align . '\qc\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+ //tretja vrstica
+ $_variables = SurveyAnalysis::$_HEADERS[$spid]['grids'][$gid]['variables'];
+
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part2 = 2200;
+ $defw_part3 = 7200;
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '';
+ $align = '\ql';
+ $bold = '\b0';
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd = '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode('&nbsp; '),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode('&nbsp; '),20,'...') . $align . '\cell';
+
+ $defw_dynamic = round($defw_part3 / (count($_variables)+1) );
+ $count = 1;
+ foreach ($_variables AS $vkey => $variable) {
+ if ($variable['other'] != true) {
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + ($count * $defw_dynamic) );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($variable['naslov'].' ('.$variable['gr_id']. ')'),20,'...').'\qc\cell';
+ }
+ $count++;
+ }
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_full );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($lang['srv_anl_suma1']),20,'...').'\qc\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ //vrstice s podatki
+ foreach (SurveyAnalysis::$_HEADERS[$spid]['grids'] AS $gid => $grids) {
+ $_cnt = 0;
+
+ # vodoravna vrstice s podatki
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part2 = 2200;
+ $defw_part3 = 7200;
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '';
+ $align = '\ql';
+ $bold = '\b0';
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd = '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($grids['variable']),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($grids['naslov']),20,'...') . $align . '\cell';
+
+ $_arguments = 0;
+ $_max_appropriate = 0;
+ $_max_cnt = 0;
+
+ // prikaz frekvenc
+ foreach ($grids['variables'] AS $vkey => $variable) {
+ $_sequence = $variable['sequence'];
+ $_valid = SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'];
+ $_cnt = SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt'];
+ $_arguments += $_cnt;
+
+ $_max_appropriate = max($_max_appropriate, (int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt']);
+ $_max_cnt = max ($_max_cnt, ((int)(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt']+(int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['0']['cnt'])));
+
+ if ($variable['other'] == true) {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vkey,'sequence'=>$_sequence);
+ }
+
+ if ($variable['other'] != true) {
+ $_percent = ($_valid > 0 ) ? $_cnt * 100 / $_valid : 0;
+ }
+ }
+
+ $defw_dynamic = round($defw_part3 / (count($_variables)+1) );
+ $count = 1;
+ foreach ($grids['variables'] AS $vkey => $variable) {
+ if ($variable['other'] != true) {
+ $_sequence = $variable['sequence'];
+ $_cnt = SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt'];
+
+ $_percent = ($_arguments > 0 ) ? $_cnt * 100 / $_arguments : 0;
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + ($count * $defw_dynamic) );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($_cnt.' ('.SurveyAnalysis::formatNumber($_percent,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%'). ')'),20,'...').'\qc\cell';
+
+ $count++;
+ }
+ }
+
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_full );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($_arguments),20,'...').'\qc\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+
+ self::tableEnd();
+ ///////////KONEC DRUGE TABELE//////////////
+
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ self::outputOtherAnswers($oAnswers);
+ self::tableEnd();
+ }
+ }
+ }
+
+ /** IzriÅ¡e multi number odgovore. izpiÅ¡e samo povpreÄja
+ *
+ * @param unknown_type $spid
+ */
+ static function sumMultiNumber($spid,$_from) {
+ global $lang;
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ $_cols = $spremenljivka['cnt_all'] / $spremenljivka['cnt_grids'];
+
+
+ //prva vrstica
+ self::sumsTableFirstLine($spremenljivka['variable'], $spremenljivka['naslov']);
+
+ //druga vrstica
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part2 = 2200;
+ $defw_part3 = 7200;
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '';
+ $align = '\ql';
+ $bold = '\b';
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd = '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode('&nbsp; '),20,'...') . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($lang['srv_analiza_opisne_subquestion']),20,'...') . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + $defw_part3 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($lang['srv_analiza_sums_average']),20,'...') . '\qc\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ $_answersOther = array();
+ $_grids_count = count($spremenljivka['grids']);
+ if ($_grids_count > 0) {
+ # naslovna vrstica
+ $_row = $spremenljivka['grids'][0];
+
+
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part2 = 2200;
+ $defw_part3 = 7200;
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '';
+ $align = '\ql';
+ $bold = '\b0';
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd = '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode('&nbsp; '),20,'...') . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode('&nbsp; '),20,'...') . '\cell';
+
+ $defw_dynamic = round($defw_part3 / count($_row['variables']) );
+ $count = 1;
+ foreach ( $_row['variables'] AS $rid => $_col ) {
+ $_sequence = $_col['sequence']; # id kolone z podatki
+
+ if ($_col['other'] != true) {
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + ($count * $defw_dynamic) );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($_col['naslov']),20,'...').'\qc\cell';
+ }
+ else {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+
+ $count++;
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ $last = 0;
+
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $_variables_count = count($grid['variables']);
+
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part2 = 2200;
+ $defw_part3 = 7200;
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '';
+ $align = '\ql';
+ $bold = '\b0';
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd = '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($grid['variable']),20,'...') . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($grid['naslov']),20,'...') . '\cell';
+
+ if ($_variables_count > 0) {
+
+ $defw_dynamic = round($defw_part3 / $_variables_count );
+ $count = 1;
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if ($variable['other'] != true) {
+ # tabela z navedbami
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + ($count * $defw_dynamic) );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode(SurveyAnalysis::formatNumber(SurveyAnalysis::$_FREQUENCYS[$_sequence]['average'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'')),20,'...').'\qc\cell';
+ }
+ $count++;
+ }
+ $tableEnd .= '\pard\intbl\row';
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+ }
+ }
+ self::tableEnd();
+ }
+
+ static function sumsTableFirstLine($field1, $field2){
+ global $lang;
+
+ $defw_full = 10300;
+ $defw_part = 900;
+ $defw_part2 = 9400;
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '\clbrdrt\brdrs\brdrw10';
+ //$align = ($arrayParams['align']=='center' ? '\qc' : '\ql');
+ $bold = '\b';
+
+ self::$exportClass->rtf->MyRTF .= "{\par";
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($field1),20,'...') . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($field2),20,'...') . '\ql\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+ static function sumsTableHeader(){
+ global $lang;
+
+ $naslov = array();
+ $naslov[] = '&nbsp; ';
+ $naslov[] = self::$exportClass->encodeText($lang['srv_analiza_frekvence_titleAnswers']);
+ $naslov[] = self::$exportClass->encodeText($lang['srv_analiza_frekvence_titleFrekvenca']);
+ $naslov[] = self::$exportClass->encodeText($lang['srv_analiza_frekvence_titleOdstotek']);
+ $naslov[] = self::$exportClass->encodeText($lang['srv_analiza_frekvence_titleVeljavni']);
+ $naslov[] = self::$exportClass->encodeText($lang['srv_analiza_frekvence_titleKumulativa']);
+
+ $params = array('borderB' => 1, 'bold' => 'B', 'align2' => 'C');
+
+ self::sumsTableRow($naslov, $params);
+ }
+ static function sumsTableRow($arrayText, $arrayParams=0){
+
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part = 1300;
+ $defw_part2 = 4200;
+
+ //$borderB = ($arrayParams['borderB']==1 ? '\clbrdrb\brdrs\brdrw10' : '');
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = ($arrayParams['borderT']==1 ? '\clbrdrt\brdrs\brdrw10' : '');
+ $align2 = ($arrayParams['align2']=='C' ? '\qc' : '\ql');
+ $bold = ($arrayParams['bold']=='B' ? '\b' : '\b0');
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($arrayText[0]),20,'...') . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->enkaEncode($arrayText[1]) . $align2 . '\cell';
+
+ for($i=0; $i<4; $i++){
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + ($i+1) * $defw_part + $defw_part2);
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($arrayText[$i+2]),20,'...').'\qc\cell';
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+ static function sumsTableRowVerticalCheckbox($arrayText, $arrayParams=0){
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part = 1000;
+ $defw_part2 = 2400;
+
+ //$borderB = ($arrayParams['borderB']==1 ? '\clbrdrb\brdrs\brdrw10' : '');
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = ($arrayParams['borderT']==1 ? '\clbrdrt\brdrs\brdrw10' : '');
+ $align = ($arrayParams['align']=='C' ? '\qc' : '\ql');
+ $bold = ($arrayParams['bold']=='B' ? '\b' : '\b0');
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($arrayText[0]),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($arrayText[1]),20,'...') . $align . '\cell';
+
+ for($i=0; $i<7; $i++){
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + ($i+1) * $defw_part + $defw_part2);
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($arrayText[$i+2]),20,'...').'\qc\cell';
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+ static function sumsTableRowNumberVertical($arrayText, $arrayParams=0){
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part = 1100;
+ $defw_part2 = 2800;
+
+ //$borderB = ($arrayParams['borderB'] == 1 ? '\clbrdrb\brdrs\brdrw10' : '');
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = ($arrayParams['borderT'] == 1 ? '\clbrdrt\brdrs\brdrw10' : '');
+ $borderS = '\clbrdrl\brdrs\brdrw10';
+ $align = ($arrayParams['align']=='C' ? '\qc' : '\ql');
+ $bold = ($arrayParams['bold']=='B' ? '\b' : '\b0');
+
+ if($arrayText[1] == '&nbsp; '){
+ $borderB = '';
+ $borderT = '';
+ $borderS = '';
+ }
+
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($arrayText[0]),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT. $borderS . $borderB . $borderS. '\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($arrayText[1]),20,'...') . $align . '\cell';
+
+ for($i=0; $i<6; $i++){
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + ($i+1) * $defw_part + $defw_part2);
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($arrayText[$i+2]),20,'...').'\qc\cell';
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+ static function sumsTableRowHorizontal($arrayText, $arrayParams=0){
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part = 1100;
+ $defw_part2 = 2200;
+ $defw_part3 = 3900;
+
+ //$borderB = ($arrayParams['borderB']==1 ? '\clbrdrb\brdrs\brdrw10' : '');
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = ($arrayParams['borderT']==1 ? '\clbrdrt\brdrs\brdrw10' : '');
+ $align = ($arrayParams['align']=='C' ? '\qc' : '\ql');
+ $bold = ($arrayParams['bold']=='B' ? '\b' : '\b0');
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($arrayText[0]),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($arrayText[1]),20,'...') . $align . '\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + $defw_part3 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($arrayText[2]),20,'...') . $align . '\qc\cell';
+
+ for($i=0; $i<3; $i++){
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + ($i+1) * $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($arrayText[$i+3]),20,'...').'\qc\cell';
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+ static function sumsTableRowMultiText($arrayText, $arrayParams=0){
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part2 = 2200;
+ $defw_part3 = 7200;
+
+ //$borderB = ($arrayParams['borderB']==1 ? '\clbrdrb\brdrs\brdrw10' : '');
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = ($arrayParams['borderT']==1 ? '\clbrdrt\brdrs\brdrw10' : '');
+ $align = ($arrayParams['align']=='C' ? '\qc' : '\ql');
+ $bold = ($arrayParams['bold']=='B' ? '\b' : '\b0');
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($arrayText[0]),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($arrayText[1]),20,'...') . $align . '\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + $defw_part3 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($arrayText[2]),20,'...') . $align . '\qc\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+
+
+ /** Izriše vrstico z opisnimi
+ *
+ * @param unknown_type $spremenljivka
+ * @param unknown_type $variable
+ */
+ public static function displayDescriptivesVariablaRow($spremenljivka,$grid,$variable=null) {
+ global $lang;
+
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if ($_sequence != null) {
+ $_desc = SurveyAnalysis::$_DESCRIPTIVES[$_sequence];
+ }
+
+ $text = array();
+
+ $text[] = self::$exportClass->encodeText($variable['variable']);
+ $text[] = self::$exportClass->encodeText($variable['naslov']);
+
+ #veljavno
+ $text[] = self::$exportClass->encodeText((int)$_desc['validCnt']);
+
+ #ustrezno
+ $text[] = self::$exportClass->encodeText((int)$_desc['allCnt']);
+
+ if (isset($_desc['avg']) && (int)$spremenljivka['skala'] !== 1)
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::formatNumber($_desc['avg'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),''));
+ else if (isset($_desc['avg']) && $spremenljivka['tip'] == 2 && (int)$spremenljivka['skala'] == 1 )
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::formatNumber($_desc['avg']*100,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'&nbsp;%'));
+ else
+ $text[] = self::$exportClass->encodeText('');
+
+ if (isset($_desc['div']) && (int)$spremenljivka['skala'] !== 1)
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::formatNumber($_desc['div'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_DEVIATION'),''));
+ else
+ $text[] = self::$exportClass->encodeText('');
+
+ $text[] = self::$exportClass->encodeText((int)$spremenljivka['skala'] !== 1 ? $_desc['min'] : '');
+ $text[] = self::$exportClass->encodeText((int)$spremenljivka['skala'] !== 1 ? $_desc['max'] : '');
+
+ self::descTableRow($text);
+ }
+
+ /** Izriše vrstico z opisnimi
+ *
+ * @param unknown_type $spremenljivka
+ * @param unknown_type $variable
+ */
+ public static function displayDescriptivesSpremenljivkaRow($spid,$spremenljivka,$show_enota,$_sequence = null) {
+ global $lang;
+
+ if ($_sequence != null) {
+ $_desc = SurveyAnalysis::$_DESCRIPTIVES[$_sequence];
+ }
+
+ $text = array();
+
+ $text[] = self::$exportClass->encodeText($spremenljivka['variable']);
+ $text[] = self::$exportClass->encodeText($spremenljivka['naslov']);
+
+ #veljavno
+ $text[] = self::$exportClass->encodeText((!$show_enota ? (int)$_desc['validCnt'] : '&nbsp; '));
+
+ #ustrezno
+ $text[] = self::$exportClass->encodeText((!$show_enota ? (int)$_desc['allCnt'] : '&nbsp; '));
+
+ if (isset($_desc['avg']) && (int)$spremenljivka['skala'] !== 1)
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::formatNumber($_desc['avg'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),''));
+ else
+ $text[] = self::$exportClass->encodeText('&nbsp; ');
+
+ if (isset($_desc['div']) && (int)$spremenljivka['skala'] !== 1)
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::formatNumber($_desc['div'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_DEVIATION'),''));
+ else
+ $text[] = self::$exportClass->encodeText('&nbsp; ');
+
+ $text[] = self::$exportClass->encodeText((int)$spremenljivka['skala'] !== 1 ? $_desc['min'] : '');
+ $text[] = self::$exportClass->encodeText((int)$spremenljivka['skala'] !== 1 ? $_desc['max'] : '');
+
+ $params = array('bold' => 'B');
+
+ self::descTableRow($text, $params);
+ }
+
+ static function descTableHeader(){
+ global $lang;
+
+ self::$exportClass->rtf->MyRTF .= "{\par";
+
+ $text = array();
+
+ $text[] = self::$exportClass->encodeText($lang['srv_analiza_opisne_variable']);
+ $text[] = self::$exportClass->encodeText($lang['srv_analiza_opisne_variable_text']);
+
+ $text[] = self::$exportClass->encodeText($lang['srv_analiza_opisne_m']);
+ $text[] = self::$exportClass->encodeText($lang['srv_analiza_num_units']);
+ $text[] = self::$exportClass->encodeText($lang['srv_analiza_opisne_povprecje']);
+ $text[] = self::$exportClass->encodeText($lang['srv_analiza_opisne_odklon']);
+ $text[] = self::$exportClass->encodeText($lang['srv_analiza_opisne_min']);
+ $text[] = self::$exportClass->encodeText($lang['srv_analiza_opisne_max']);
+
+ $params = array('borderT' => 1, 'borderB' => 1, 'bold' => 'B', 'align2' => 'C');
+
+ self::descTableRow($text, $params);
+ }
+ static function descTableRow($arrayText, $arrayParams=array()){
+
+ $defw_full = 10300;
+ $defw_part = 1100;
+ $defw_part2 = 2600;
+
+ //$borderB = ($arrayParams['borderB']==1 ? '\clbrdrb\brdrs\brdrw10' : '');
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = ($arrayParams['borderT']==1 ? '\clbrdrt\brdrs\brdrw10' : '');
+ $align = ($arrayParams['align2']=='C' ? '\qc' : '\ql');
+ $bold = ($arrayParams['bold']=='B' ? '\b' : '\b0');
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($arrayText[0]),20,'...') . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->enkaEncode($arrayText[1]). $align . '\cell';
+
+ for($i=0; $i<6; $i++){
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( ($i+2) * $defw_part + $defw_part2);
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($arrayText[$i+2]),20,'...').'\qc\cell';
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+
+
+ /** Izriše frekvence v vertikalni obliki
+ *
+ * @param unknown_type $spid
+ */
+ public static function frequencyVertical($spid, $displayTitle=false) {
+ global $lang;
+
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+ # Äe je besedilo * in je samo ena kategorija je inline legenda false
+ $inline_legenda = (SurveyAnalysis::$_HEADERS[$spid]['cnt_all'] == 1 || in_array($spremenljivka['tip'],array(1,8) ) ) ? false: true;
+
+ # koliko zapisov prikažemo naenkrat
+ $maxAnswer = (SurveyDataSettingProfiles :: getSetting('numOpenAnswers') > 0) ? SurveyDataSettingProfiles :: getSetting('numOpenAnswers') : 30;
+
+
+ // Naslov tabele
+ if($displayTitle){
+
+ self::$exportClass->rtf->new_line(3);
+
+ $stevilcenje = (self::$exportClass->numbering == 1 ? $spremenljivka['variable'].' - ' : '');
+ $title = $stevilcenje . $spremenljivka['naslov'];
+ $TITLE = self::$exportClass->rtf->bold(1) . $title . self::$exportClass->rtf->bold(0);
+
+ self::$exportClass->rtf->set_font("Arial Black", 8);
+ self::$exportClass->rtf->add_text($TITLE, 'center');
+ self::$exportClass->rtf->new_line();
+ if($spremenljivka['tip'] == 2){
+ self::$exportClass->rtf->set_font("Arial", 7);
+ self::$exportClass->rtf->add_text($lang['srv_info_checkbox'], 'center');
+ self::$exportClass->rtf->new_line();
+ }
+ }
+
+ if(self::$from == 'charts'){
+
+ if(isset(self::$sessionData['charts'][$spid]))
+ $settings = self::$sessionData['charts'][$spid];
+ else
+ $settings = array('type' => 0, 'show_legend' => 0);
+
+ if($settings['type'] == 1)
+ self::chartTableHeader();
+ else
+ self::$exportClass->rtf->MyRTF .= "{\par";
+ }
+ else{
+ //prva vrstica
+ self::freqTableFirstLine($spremenljivka['variable'], $spremenljivka['naslov']);
+
+ //druga vrstica
+ self::freqTableHeader();
+ }
+ // konec naslovne vrstice
+
+
+ $_answersOther = array();
+
+ # dodamo opcijo kje izrisujemo legendo
+ $options=array('inline_legenda' => $inline_legenda, 'isTextAnswer' => false, 'isOtherAnswer' => false);
+
+ # izpišemo vlejavne odgovore
+ $_current_grid = null;
+ $maxCounter = 0;
+ if (count($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $_variables_count = count($grid['variables']);
+
+ # dodamo dodatne vrstice z albelami grida
+ if ($_variables_count > 0 )
+ foreach ($grid['variables'] AS $vid => $variable ){
+
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if (($variable['text'] != true && $variable['other'] != true)
+ || (in_array($spremenljivka['tip'],array(4,8,21,22)))){
+ # dodamo ime podvariable
+ //if ($_variables_count > 1 && in_array($spremenljivka['tip'],array(2,6,7,16,17,18,19,20,21))) {
+ if ($inline_legenda) {
+ # ali riÅ¡emo dvojno Ärto med grupami
+ if ( $_current_grid != $gid && $_current_grid !== null && $spremenljivka['tip'] != 6) {
+ $options['doubleTop'] = true;
+ $_current_grid = $gid;
+ } else {
+ $options['doubleTop'] = false;
+ $_current_grid = $gid;
+ }
+ self::outputSubVariablaVertical($spremenljivka,$variable,$grid,$spid,$options);
+ }
+ $counter = 0;
+ $_kumulativa = 0;
+ //SurveyAnalysis::$_FREQUENCYS[$_sequence]
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'] AS $vkey => $vAnswer) {
+
+ if ($counter < $maxAnswer) {
+ if ($vAnswer['cnt'] > 0 || true) { # izpisujemo samo tiste ki nisno 0
+ if (in_array($spremenljivka['tip'],array(4,7,8,19,20,21))) { // text, number, datum, mtext, mnumber, text*
+ $options['isTextAnswer'] = true;
+ } else {
+ $options['isTextAnswer'] = false;
+ }
+ $counter = self::outputValidAnswerVertical($counter,$vkey,$vAnswer,$_sequence,$spid,$_kumulativa,$options);
+ }
+ }
+ }
+ # izpišemo sumo veljavnih
+ $counter = self::outputSumaValidAnswerVertical($counter,$_sequence,$spid,$options);
+ }
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'] AS $ikey => $iAnswer) {
+ if ($iAnswer['cnt'] > 0 ) { # izpisujemo samo tiste ki nisno 0
+ $counter = self::outputInvalidAnswerVertical($counter,$ikey,$iAnswer,$_sequence,$spid,$options);
+ }
+ }
+ # izpišemo sumo veljavnih
+ $counter = self::outputSumaInvalidAnswerVertical($counter,$_sequence,$spid,$options);
+ }
+ #izpišemo še skupno sumo
+ $counter = self::outputSumaVertical($counter,$_sequence,$spid,$options);
+
+ // Dobimo stevilo vseh odgovorov (ce ne prikazemo vseh izpisemo na dnu)
+ $maxCounter = (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']) > $maxCounter) ? count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']) : $maxCounter;
+ }
+ else {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ }
+ }
+
+ // Ce je vec odgovorov kot jih prikazemo izpisemo na dnu izpisanih/vseh
+ if($maxCounter > $maxAnswer){
+ if(self::$from == 'charts'){
+ $tableHeader = '\trowd\trql\trrh400';
+ $table .= '\clvertalc\cellx'.( 9500 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($maxAnswer.' / '.$maxCounter) .'\qr\cell';
+ $tableEnd .= '\pard\intbl\row';
+ }
+ else{
+ $tableHeader = '\trowd\trql\trrh400';
+ $table .= '\clvertalc\cellx'.( 8700 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->encodeText($maxAnswer.' / '.$maxCounter) .'\qr\cell';
+ $tableEnd .= '\pard\intbl\row';
+ }
+
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+
+ self::tableEnd();
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+
+ $spid = $oAnswers['spid'];
+ $_variable = SurveyAnalysis::$_HEADERS[$spid]['grids'][$oAnswers['gid']]['variables'][$oAnswers['vid']];
+ $_sequence = $_variable['sequence'];
+ if(count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']) > 0){
+ self::outputOtherAnswers($oAnswers);
+ self::tableEnd();
+ }
+ }
+ }
+ }
+
+ public static function outputSubVariablaVertical($spremenljivka,$variable,$grid,$spid,$_options = array()) {
+ global $lang;
+
+ $text = array();
+
+ # opcije
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ 'textAnswerExceed'=>false # ali presegamo Å¡tevilo tekstovnih odgovorov za prikaz
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+
+ $text[] = self::$exportClass->encodeText($variable['variable']);
+
+ $text[] = self::$exportClass->encodeText($variable['naslov']);
+
+ $text[] = '&nbsp; ';
+ $text[] = '&nbsp; ';
+ $text[] = '&nbsp; ';
+ $text[] = '&nbsp; ';
+
+ if(self::$from != 'charts')
+ self::freqTableRow($text);
+ else{
+ if(isset(self::$sessionData['charts'][$spid]))
+ $settings = self::$sessionData['charts'][$spid];
+ else
+ $settings = array('type' => 0, 'show_legend' => 0);
+
+ $arrayParams = array('fill' => $fill, 'bold' => 'B', 'align2' => 'L', 'type' => $settings['type']);
+ self::chartTableRow($text, $arrayParams);
+ }
+ }
+
+ static function freqTableFirstLine($field1, $field2){
+ global $lang;
+
+ $defw_full = 10300;
+ $defw_part = 900;
+ $defw_part2 = 9400;
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '\clbrdrt\brdrs\brdrw10';
+ //$align = ($arrayParams['align']=='center' ? '\qc' : '\ql');
+ $bold = '\b';
+
+ self::$exportClass->rtf->MyRTF .= "{\par";
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($field1),20,'...') . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($field2),20,'...') . '\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+ static function freqTableHeader(){
+ global $lang;
+
+ $naslov = array();
+ $naslov[] = '&nbsp; ';
+ $naslov[] = self::$exportClass->encodeText($lang['srv_analiza_frekvence_titleAnswers']);
+ $naslov[] = self::$exportClass->encodeText($lang['srv_analiza_frekvence_titleFrekvenca']);
+ $naslov[] = self::$exportClass->encodeText($lang['srv_analiza_frekvence_titleOdstotek']);
+ $naslov[] = self::$exportClass->encodeText($lang['srv_analiza_frekvence_titleVeljavni']);
+ $naslov[] = self::$exportClass->encodeText($lang['srv_analiza_frekvence_titleKumulativa']);
+
+ $params = array('borderB' => 1, 'bold' => 'B', 'align2' => 'C');
+
+ self::freqTableRow($naslov, $params);
+ }
+ static function freqTableRow($arrayText, $arrayParams=array()){
+
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part = 1300;
+ $defw_part2 = 4200;
+
+ //$borderB = ($arrayParams['borderB']==1 ? '\clbrdrb\brdrs\brdrw10' : '');
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = ($arrayParams['borderT']==1 ? '\clbrdrt\brdrs\brdrw10' : '');
+ $align = ($arrayParams['align2']=='C' ? '\qc' : '\ql');
+ $bold = ($arrayParams['bold']=='B' ? '\b' : '\b0');
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($arrayText[0]),20,'...') . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($arrayText[1]),20,'...') .$align.'\cell';
+
+ for($i=0; $i<4; $i++){
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + ($i+1) * $defw_part + $defw_part2);
+ $tableEnd .= '\pard\intbl'.$bold.' '.self::$exportClass->snippet(self::$exportClass->enkaEncode($arrayText[$i+2]),20,'...').'\qc\cell';
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+
+ self::$exportClass->rtf->MyRTF .= self::$exportClass->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+
+
+ static function outputValidAnswerVertical($counter,$vkey,$vAnswer,$_sequence,$spid,&$_kumulativa,$_options=array()) {
+ global $lang;
+
+ $text = array();
+
+ # opcije
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ 'textAnswerExceed'=>false # ali presegamo Å¡tevilo tekstovnih odgovorov za prikaz
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+ $cssBck = ' '.SurveyAnalysis::$cssColors['0_' . ($counter & 1)];
+
+ $_valid = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] > 0 ) ? 100*$vAnswer['cnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] : 0;
+ $_percent = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] > 0 ) ? 100*$vAnswer['cnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] : 0;
+ $_kumulativa += $_valid;
+
+ # ali presegamo Å¡tevilo prikazanih vrstic, takrat v zadnji prikazani dodamo link veÄ.. ostale vrstice pa skrijemo
+ if ($options['textAnswerExceed'] == true) {
+ if ($counter == TEXT_ANSWER_LIMIT ) {
+ # link za veÄ
+ $show_more = '<div id="valid_row_togle_'.$_sequence.'" class="floatRight blue pointer" onclick="showHidenTextRow(\''.$_sequence.'\');return false;">(veÄ...)</div>'.NEW_LINE;
+ } elseif ($counter > TEXT_ANSWER_LIMIT ) {
+ $hide_row = ' hidden';
+ $_exceed = true;
+ }
+ }
+
+
+ $text[] = '&nbsp; ';
+
+ $addText = (($options['isTextAnswer'] == false && (string)$vkey != $vAnswer['text']) ? ' ('.$vAnswer['text'] .')' : '');
+ $text[] = self::$exportClass->encodeText($vkey.$addText);
+
+ $text[] = self::$exportClass->encodeText((int)$vAnswer['cnt']);
+
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::formatNumber($_percent, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'));
+
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::formatNumber($_valid, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'));
+
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::formatNumber($_kumulativa, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'));
+
+ if(self::$from == 'charts'){
+
+ if(isset(self::$sessionData['charts'][$spid]))
+ $settings = self::$sessionData['charts'][$spid];
+ else
+ $settings = array('type' => 0, 'show_legend' => 0);
+
+ $align = $settings['show_legend'] == 0 ? 'C' : 'L';
+ $arrayParams = array('fill' => $fill, 'align2' => $align, 'type' => $settings['type']);
+
+ self::chartTableRow($text, $arrayParams);
+ }
+ else
+ self::sumsTableRow($text);
+
+ $counter++;
+ return $counter;
+ }
+
+ static function outputSumaValidAnswerVertical($counter,$_sequence,$spid,$_options=array()) {
+ global $lang;
+
+ $text = array();
+
+ # opcije
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ 'textAnswerExceed'=>false # ali presegamo Å¡tevilo tekstovnih odgovorov za prikaz
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+
+ $_percent = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] > 0 ) ? 100*SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] : 0;
+
+ $_brez_MV = ((int)SurveyAnalysis::$currentMissingProfile === 2) ? TRUE : FALSE;
+
+ $_sufix = '';
+
+ $text[] = self::$exportClass->encodeText($lang['srv_anl_valid']);
+ $text[] = self::$exportClass->encodeText($lang['srv_anl_suma1']);
+
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] > 0 ? SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] : 0);
+
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::formatNumber($_percent, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'));
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::formatNumber(100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'));
+
+ $text[] = '&nbsp; ';
+
+ if(self::$from == 'charts'){
+ if(isset(self::$sessionData['charts'][$spid]))
+ $settings = self::$sessionData['charts'][$spid];
+ else
+ $settings = array('type' => 0, 'show_legend' => 0);
+
+ $arrayParams = array('fill' => $fill, 'align2' => 'L', 'type' => $settings['type']);
+
+ if($settings['type'] == 1)
+ self::chartTableRow($text, $arrayParams);
+ }
+ else
+ self::sumsTableRow($text);
+
+ $counter++;
+ return $counter;
+ }
+
+ static function outputInvalidAnswerVertical($counter,$vkey,$vAnswer,$_sequence,$spid,$_options=array()) {
+ global $lang;
+
+ $text = array();
+
+ # opcije
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ 'textAnswerExceed'=>false # ali presegamo Å¡tevilo tekstovnih odgovorov za prikaz
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+
+ $_percent = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] > 0 ) ? 100*$vAnswer['cnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] : 0;
+ $_invalid = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'] > 0 ) ? 100*$vAnswer['cnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'] : 0;
+
+ $_Z_MV = ((int)SurveyAnalysis::$missingProfileData['display_mv_type'] === 2) ? TRUE : FALSE;
+ if($_Z_MV){
+ $text[] = '&nbsp; ';
+
+ $text[] = self::$exportClass->encodeText($vkey.' (' . $vAnswer['text'].')');
+ //echo '<div class="floatRight anl_detail_percent anl_w50 anl_ac anl_dash_bl">'.SurveyAnalysis::formatNumber($_invalid, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%').'</div>'.NEW_LINE;
+ //echo '<div class="floatRight anl_detail_percent anl_w30 anl_ac">'.$vAnswer['cnt'].'</div>'.NEW_LINE;
+
+ $text[] = self::$exportClass->encodeText((int)$vAnswer['cnt']);
+
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::formatNumber($_percent, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'));
+
+ $text[] = '&nbsp; ';
+ $text[] = '&nbsp; ';
+
+ if(self::$from == 'charts'){
+ //self::chartTableRow($text);
+ }
+ else
+ self::sumsTableRow($text);
+ }
+
+ $counter++;
+ return $counter;
+ }
+
+ static function outputSumaInvalidAnswerVertical($counter,$_sequence,$spid,$_options = array()) {
+ global $lang;
+
+ # opcije
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ 'textAnswerExceed'=>false # ali presegamo Å¡tevilo tekstovnih odgovorov za prikaz
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+ $cssBck = ' '.SurveyAnalysis::$cssColors['text_' . ($counter & 1)];
+ $_percent = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] > 0 ) ? 100*SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] : 0;
+
+ $_brez_MV = ((int)SurveyAnalysis::$missingProfileData['display_mv_type'] === 0) ? TRUE : FALSE;
+ if(!$_brez_MV){
+ $text = array();
+
+ $text[] = self::$exportClass->encodeText($lang['srv_anl_missing']);
+
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt']);
+
+ $answer['cnt'] = SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'] > 0 ? SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'] : 0;
+ $text[] = self::$exportClass->encodeText((int)$answer['cnt']);
+
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::formatNumber($_percent, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'));
+ $text[] = '';
+ $text[] = '';
+
+ if(self::$from == 'charts'){
+ //self::chartTableRow($text);
+ }
+ else
+ self::sumsTableRow($text);
+ }
+
+ $counter++;
+ return $counter;
+ }
+
+ static function outputSumaVertical($counter,$_sequence,$spid, $_options = array()) {
+ global $lang;
+
+ # opcije
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ 'textAnswerExceed'=>false # ali presegamo Å¡tevilo tekstovnih odgovorov za prikaz
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+
+ $cssBck = ' '.SurveyAnalysis::$cssColors['0_' .($counter & 1)];
+
+ $_brez_MV = ((int)SurveyAnalysis::$missingProfileData['display_mv_type'] === 0) ? TRUE : FALSE;
+ if(!$_brez_MV){
+
+ $text = array();
+
+ $text[] = '';
+ $text[] = self::$exportClass->encodeText($lang['srv_anl_suma2']);
+ $text[] = self::$exportClass->encodeText((SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] ? SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] : 0));
+ $text[] = self::$exportClass->encodeText(SurveyAnalysis::formatNumber('100', SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'));
+ $text[] = '';
+ $text[] = '';
+
+ if(self::$from == 'charts'){
+ //self::chartTableRow($text, $arrayParams);
+ }
+ else
+ self::sumsTableRow($text);
+ }
+ }
+
+ /** izpišemo tabelo z tekstovnimi odgovori drugo
+ *
+ * @param $skey
+ * @param $oAnswers
+ * @param $spid
+ */
+ public static function outputOtherAnswers($oAnswers) {
+ global $lang;
+ $spid = $oAnswers['spid'];
+ $_variable = SurveyAnalysis::$_HEADERS[$spid]['grids'][$oAnswers['gid']]['variables'][$oAnswers['vid']];
+ $_sequence = $_variable['sequence'];
+ $_frekvence = SurveyAnalysis::$_FREQUENCYS[$_variable['sequence']];
+
+
+ if(self::$from == 'charts'){
+ self::chartTableHeader();
+ }
+ else{
+ //prva vrstica
+ self::sumsTableFirstLine($_variable['variable'], SurveyAnalysis::$_HEADERS[$oAnswers['spid']]['variable'].' ('.$_variable['naslov'].' )');
+
+ //druga vrstica
+ self::sumsTableHeader();
+ }
+ // konec naslovne vrstice
+
+ $counter = 1;
+ $_kumulativa = 0;
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'] AS $vkey => $vAnswer) {
+ if ($vAnswer['cnt'] > 0 ) { # izpisujemo samo tiste ki nisno 0
+ $counter = self::outputValidAnswerVertical($counter,$vkey,$vAnswer,$_sequence,$spid,$_kumulativa,array('isOtherAnswer'=>true));
+ }
+ }
+ # izpišemo sumo veljavnih
+ $counter = self::outputSumaValidAnswerVertical($counter,$_sequence,$spid,array('isOtherAnswer'=>true));
+ }
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'] AS $ikey => $iAnswer) {
+ if ($iAnswer['cnt'] > 0 ) { # izpisujemo samo tiste ki nisno 0
+ $counter = self::outputInvalidAnswerVertical($counter,$ikey,$iAnswer,$_sequence,$spid,array('isOtherAnswer'=>true));
+ }
+ }
+ # izpišemo sumo veljavnih
+ $counter = self::outputSumaInvalidAnswerVertical($counter,$_sequence,$spid,array('isOtherAnswer'=>true));
+ }
+ #izpišemo še skupno sumo
+ $counter = self::outputSumaVertical($counter,$_sequence,$spid,array('isOtherAnswer'=>true));
+ }
+
+ /** za multi grid tekstovne vrstice doda vrstico z labeliami grida
+ *
+ * @param $gkey
+ * @param $gAnswer
+ * @param $spid
+ * @param $_options
+ */
+ public static function outputGridLabelVertical($gid,$grid,$vid,$variable,$spid,$_options=array()) {
+
+ $text = array();
+
+ $text[] = self::$exportClass->encodeText($variable['variable']);
+ $text[] = self::$exportClass->encodeText(($grid['naslov'] != '' ? $grid['naslov']. '&nbsp;-&nbsp;' : '').$variable['naslov']);
+
+ $text[] = '';
+ $text[] = '';
+ $text[] = '';
+ $text[] = '';
+
+ self::sumsTableRow($text);
+
+ $counter++;
+ return $counter;
+ }
+
+
+
+ static function tableEnd(){
+ self::$exportClass->rtf->MyRTF .= "}";
+ self::$exportClass->rtf->new_line(1);
+ }
+
+
+ /*Skrajsa tekst in doda '...' na koncu*/
+ static function snippet($text,$length=64,$tail="...")
+ {
+ $text = trim($text);
+ $txtl = strlen($text);
+ if($txtl > $length)
+ {
+ for($i=1;$text[$length-$i]!=" ";$i++)
+ {
+ if($i == $length)
+ {
+ return substr($text,0,$length) . $tail;
+ }
+ }
+ $text = substr($text,0,$length-$i+1) . $tail;
+ }
+ return $text;
+ }
+
+}
+
+?> \ No newline at end of file
diff --git a/admin/exportclases/class.rtfIzvozAnalizaMean.php b/admin/exportclases/class.rtfIzvozAnalizaMean.php
new file mode 100644
index 0000000..bada509
--- /dev/null
+++ b/admin/exportclases/class.rtfIzvozAnalizaMean.php
@@ -0,0 +1,407 @@
+<?php
+
+ global $site_path;
+
+ include_once('../../function.php');
+ include_once('../survey/definition.php');
+ include_once('../exportclases/class.rtfIzvozAnalizaFunctions.php');
+ require_once("class.enka.rtf.php");
+
+ define("FNT_TIMES", "Times New Roman", true);
+ define("FNT_ARIAL", "Arial", true);
+
+ define("FNT_MAIN_TEXT", FNT_TIMES, true);
+ define("FNT_QUESTION_TEXT", FNT_TIMES, true);
+ define("FNT_HEADER_TEXT", FNT_TIMES, true);
+
+ define("FNT_MAIN_SIZE", 12, true);
+ define("FNT_QUESTION_SIZE", 10, true);
+ define("FNT_HEADER_SIZE", 10, true);
+
+ define("M_ANALIZA_DESCRIPTOR", "descriptor", true);
+ define("M_ANALIZA_FREQUENCY", "frequency", true);
+ define("ALLOW_HIDE_ZERRO_REGULAR", false); // omogo�imo delovanje prikazovanja/skrivanja ni�elnih vnosti za navadne odgovore
+ define("ALLOW_HIDE_ZERRO_MISSING", true); // omogo�imo delovanje prikazovanja/skrivanja ni�elnih vnosti za missinge
+
+
+/** Class za generacijo rtf-a
+ */
+class RtfIzvozAnalizaMean {
+
+ var $anketa;// = array(); // trenutna anketa
+ var $grupa = null; // trenutna grupa
+ var $usrId = null; // trenutni user
+ var $spremenljivka; // trenutna spremenljivka
+ var $usr_id; // ID trenutnega uporabnika
+ var $printPreview = false; // ali kli?e konstruktor
+ var $pi=array('canCreate'=>false); // za shrambo parametrov in sporocil
+ var $rtf;
+
+ public static $meansClass = null; //means class
+
+ var $meanData1;
+ var $meanData2;
+
+ var $sessionData; // podatki ki so bili prej v sessionu - za nastavitve, ki se prenasajo v izvoze...
+
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null)
+ {
+ global $site_path;
+ global $global_user_id;
+
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) )
+ {
+ $this->anketa['id'] = $anketa;
+
+ // create new RTF document
+ $this->rtf = new enka_RTF(true);
+ }
+ else
+ {
+ $this->pi['msg'] = "Anketa ni izbrana!";
+ $this->pi['canCreate'] = false;
+ return false;
+ }
+
+ $_GET['a'] = A_ANALYSIS;
+
+ // preberemo nastavitve iz baze (prej v sessionu)
+ SurveyUserSession::Init($this->anketa['id']);
+ $this->sessionData = SurveyUserSession::getData();
+
+ //ustvarimo mean objekt in mu napolnimo variable (var1, var2, checkboxi)
+ $this->meansClass = new SurveyMeans($anketa);
+
+ if ( SurveyInfo::getInstance()->SurveyInit($this->anketa['id']) && $this->init())
+ {
+ $this->anketa['uid'] = $global_user_id;
+ SurveyUserSetting::getInstance()->Init($this->anketa['id'], $this->anketa['uid']);
+ }
+ else
+ return false;
+ // ce smo prisli do tu je vse ok
+ $this->pi['canCreate'] = true;
+ return true;
+ }
+
+ function getAnketa()
+ { return $this->anketa['id']; }
+
+ function checkCreate()
+ {
+ return $this->pi['canCreate'];
+ }
+
+ function getFile($fileName)
+ {
+ $this->rtf->display($fileName = "analiza.rtf",true);
+ }
+
+ function init()
+ {
+ global $lang;
+
+ // dodamo avtorja in naslov
+ $this->rtf->WriteTitle();
+ $this->rtf->WriteHeader($this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()), 'left');
+ $this->rtf->WriteHeader($this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()), 'right');
+ $this->rtf->WriteFooter($lang['page']." {PAGE} / {NUMPAGES}", 'right');
+ $this->rtf->set_default_font(FNT_TIMES, FNT_MAIN_SIZE);
+ return true;
+ }
+
+ function createRtf()
+ {
+ global $site_path;
+ global $lang;
+
+ // izpisemo prvo stran
+ //$this->createFrontPage();
+
+ $this->rtf->draw_title($lang['export_analisys_means']);
+
+ # polovimo nastavtve missing profila
+ //SurveyConditionProfiles:: getConditionString();
+
+
+ $this->meanData1 = $this->sessionData['means']['means_variables']['variabla1'];
+ $this->meanData2 = $this->sessionData['means']['means_variables']['variabla2'];
+
+ $means = array();
+ # Äe ne uporabljamo privzetega Äasovnega profila izpiÅ¡emo opozorilo
+ //$doNewLine = SurveyTimeProfiles :: printIsDefaultProfile(false);
+
+ # Äe imamo filter ifov ga izpiÅ¡emo
+ //$doNewLine = SurveyConditionProfiles:: getConditionString($doNewLine );
+
+ # Äe imamo filter spremenljivk ga izpiÅ¡emo
+ //$doNewLine = SurveyVariablesProfiles:: getProfileString($doNewLine , true) || $doNewLine;
+
+ if ($this->meanData1 !== null && $this->meanData2 !== null) {
+ $variables1 = $this->meanData2;
+ $variables2 = $this->meanData1;
+ $c1=0;
+ $c2=0;
+
+ if(is_array($variables2) && count($variables2) > 0){
+ #prikazujemo loÄeno
+ if ($this->sessionData['means']['meansSeperateTables'] == true || $this->sessionData['mean_charts']['showChart'] == '1') {
+ foreach ($variables2 AS $v_second) {
+ if (is_array($variables1) && count($variables1) > 0) {
+ foreach ($variables1 AS $v_first) {
+ $_means = $this->meansClass->createMeans($v_first, $v_second);
+ if ($_means != null) {
+ $means[$c1][0] = $_means;
+ }
+ $c1++;
+ }
+ }
+ }
+ }
+ #prikazujemo skupaj
+ else {
+ foreach ($variables2 AS $v_second) {
+ if (is_array($variables1) && count($variables1) > 0) {
+ foreach ($variables1 AS $v_first) {
+ $_means = $this->meansClass->createMeans($v_first, $v_second);
+ if ($_means != null) {
+ $means[$c1][$c2] = $_means;
+ }
+ $c2++;
+ }
+ }
+ $c1++;
+ $c2=0;
+ }
+ }
+ }
+
+
+ if (is_array($means) && count($means) > 0) {
+
+ $count = 0;
+ foreach ($means AS $mean_sub_grup) {
+
+ if($this->sessionData['mean_charts']['showChart'] == '1'){
+ if($count > 0){
+ $this->rtf->new_page();
+ $this->rtf->new_line(2);
+ }
+
+ $this->displayMeansTable($mean_sub_grup);
+ $this->displayChart($count);
+ }
+ else{
+ if($count != 0)
+ $this->rtf->new_line(3);
+
+ $this->displayMeansTable($mean_sub_grup);
+ }
+
+ $count++;
+ }
+ }
+ }
+ }
+
+ public function displayMeansTable($_means) {
+ global $lang;
+
+ #Å¡tevilo vratic in Å¡tevilo kolon
+ $cols = count($_means);
+ # preberemo kr iz prvega loopa
+ $rows = count($_means[0]['options']);
+
+ // sirina ene celice
+ $singleWidth = round( 180 / $cols / 2 );
+
+ //nastavitve tabele - (sirine celic, border...)
+ $defw_full = 10500;
+ $defw_part = 5700;
+ $defw_part2 = 8500;
+ //$defw_part3 = 8500;
+ //izracun sirine ene celice
+ $singleWidth = floor( $defw_part2 / ($cols*2) );
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '\clbrdrt\brdrs\brdrw10';
+ $borderLR = '\clbrdrl\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ $border = '\clbrdrb\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrt\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ //$align = ($arrayParams['align']=='center' ? '\qc' : '\ql');
+ $bold = '\b';
+
+
+ // zacetek tabele
+ $this->rtf->MyRTF .= $this->rtf->_font_size(16);
+ $this->rtf->MyRTF .= "{\par";
+
+
+ // prva vrstica
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $label2 = $this->meansClass->getSpremenljivkaTitle($_means[0]['v2']);
+ $table = '\clvertalc'.$borderLR.$borderT.'\clvmgf\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText($label2). '\qc\cell';
+
+ for ($i = 0; $i < $cols; $i++) {
+
+ $label1 = $this->meansClass->getSpremenljivkaTitle($_means[$i]['v1']);
+
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + (($i+1) * 2 * $singleWidth) );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($label1). '\qc\cell';
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ // druga vrstica
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderLR.'\clvmrg\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+
+ for ($i = 0; $i < $cols; $i++) {
+
+ $label1 = $this->meansClass->getSpremenljivkaTitle($_means[$i]['v1']);
+
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + (((($i+1) * 2) - 1) * $singleWidth) );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($lang['srv_means_label']). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + (($i+1) * 2 * $singleWidth) );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($lang['srv_means_label4']). '\qc\cell';
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ // vrstice s podatki
+ if (count($_means[0]['options']) > 0) {
+ foreach ($_means[0]['options'] as $ckey2 =>$crossVariabla2) {
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $variabla = $crossVariabla2['naslov'];
+ # Äe ni tekstovni odgovor dodamo key
+ if ($crossVariabla2['type'] !== 't' ) {
+ if ($crossVariabla2['vr_id'] == null) {
+ $variabla .= ' ( '.$ckey2.' )';
+ } else {
+ $variabla .= ' ( '.$crossVariabla2['vr_id'].' )';
+ }
+ }
+ $table = '\clvertalc'.$border.'\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText($variabla). '\b0\qc\cell';
+
+ # celice z vsebino
+ for ($i = 0; $i < $cols; $i++) {
+
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + (((($i+1) * 2) - 1) * $singleWidth) );
+ $tableEnd .= '\pard\intbl '.$this->encodeText($this->meansClass->formatNumber($_means[$i]['result'][$ckey2], SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_RESIDUAL'))). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + (($i+1) * 2 * $singleWidth) );
+ $tableEnd .= '\pard\intbl '.$this->encodeText((int)$_means[$i]['sumaVrstica'][$ckey2]). '\qc\cell';
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+ }
+
+ // SKUPAJ
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$border.'\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText($lang['srv_means_label3']). '\b0\qc\cell';
+
+ for ($i = 0; $i < $cols; $i++) {
+
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + (((($i+1) * 2) - 1) * $singleWidth) );
+ $tableEnd .= '\pard\intbl '.$this->encodeText($this->meansClass->formatNumber($_means[$i]['sumaMeans'], SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_RESIDUAL'))). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + (($i+1) * 2 * $singleWidth) );
+ $tableEnd .= '\pard\intbl '.$this->encodeText((int)$_means[$i]['sumaSkupna']). '\qc\cell';
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ // konec tabele
+ $this->rtf->MyRTF .= "}";
+ $this->rtf->new_line(1);
+ }
+
+ function displayChart($counter){
+ global $lang;
+
+ $variables1 = $this->meanData1;
+ $variables2 = $this->meanData2;
+
+ $pos1 = floor($counter / count($variables2));
+ $pos2 = $counter % count($variables2);
+
+ $chartID = implode('_', $variables1[$pos1]).'_'.implode('_', $variables2[$pos2]);
+ $chartID .= '_counter_'.$counter;
+
+
+ $settings = $this->sessionData['mean_charts'][$chartID];
+ $imgName = $settings['name'];
+
+ // IZRIS GRAFA
+ $this->rtf->new_line();
+ $this->rtf->new_line();
+ $this->rtf->new_line();
+
+ $scale = 100;
+
+ $this->rtf->add_image('pChart/Cache/'.$imgName, $scale, 'center');
+ }
+
+
+ /*Skrajsa tekst in doda '...' na koncu*/
+ function snippet($text,$length=64,$tail="...")
+ {
+ $text = trim($text);
+ $txtl = strlen($text);
+ if($txtl > $length)
+ {
+ for($i=1;$text[$length-$i]!=" ";$i++)
+ {
+ if($i == $length)
+ {
+ return substr($text,0,$length) . $tail;
+ }
+ }
+ $text = substr($text,0,$length-$i+1) . $tail;
+ }
+ return $text;
+ }
+
+ function setUserId($usrId) {$this->anketa['uid'] = $usrId;}
+ function getUserId() {return ($this->anketa['uid'])?$this->anketa['uid']:false;}
+
+ function formatNumber($value,$digit=0,$sufix="")
+ {
+ if ( $value <> 0 && $value != null )
+ $result = round($value,$digit);
+ else
+ $result = "0";
+ $result = number_format($result, $digit, ',', '.').$sufix;
+
+ return $result;
+ }
+
+ function encodeText($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace(array("&scaron;","&#353;","&#269;"),array("�","�","�"),$text);
+ return strip_tags($text);
+ }
+}
+
+?>
diff --git a/admin/exportclases/class.rtfIzvozAnalizaMultiCrosstab.php b/admin/exportclases/class.rtfIzvozAnalizaMultiCrosstab.php
new file mode 100644
index 0000000..95917ec
--- /dev/null
+++ b/admin/exportclases/class.rtfIzvozAnalizaMultiCrosstab.php
@@ -0,0 +1,1316 @@
+<?php
+
+ global $site_path;
+
+ include_once('../../function.php');
+ include_once('../survey/definition.php');
+ include_once('../exportclases/class.rtfIzvozAnalizaFunctions.php');
+ require_once("class.enka.rtf.php");
+
+ define("FNT_TIMES", "Times New Roman", true);
+ define("FNT_ARIAL", "Arial", true);
+
+ define("FNT_MAIN_TEXT", FNT_TIMES, true);
+ define("FNT_QUESTION_TEXT", FNT_TIMES, true);
+ define("FNT_HEADER_TEXT", FNT_TIMES, true);
+
+ define("FNT_MAIN_SIZE", 12, true);
+ define("FNT_QUESTION_SIZE", 10, true);
+ define("FNT_HEADER_SIZE", 10, true);
+
+ define("M_ANALIZA_DESCRIPTOR", "descriptor", true);
+ define("M_ANALIZA_FREQUENCY", "frequency", true);
+ define("ALLOW_HIDE_ZERRO_REGULAR", false); // omogo�imo delovanje prikazovanja/skrivanja ni�elnih vnosti za navadne odgovore
+ define("ALLOW_HIDE_ZERRO_MISSING", true); // omogo�imo delovanje prikazovanja/skrivanja ni�elnih vnosti za missinge
+
+
+/** Class za generacijo rtf-a
+ */
+class RtfIzvozAnalizaMultiCrosstab {
+
+ var $anketa;// = array(); // trenutna anketa
+ var $pi=array('canCreate'=>false); // za shrambo parametrov in sporocil
+ var $rtf;
+
+ public static $multiCrosstabClass = null; // crosstab class
+
+ private $cellWidth = 1; // sirina celice s podatki
+ private $cellSpan = 1; // stevilo vrstic v celici s podatki
+
+ private $table = '';
+ private $tableHeader = '';
+ private $tableEnd = '';
+
+ private $XPosition = 0; // Trenuten X polozaj
+
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null){
+ global $site_path;
+ global $global_user_id;
+
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) ){
+ $this->anketa['id'] = $anketa;
+
+ // create new RTF document
+ $this->rtf = new enka_RTF(true);
+ }
+ else{
+ $this->pi['msg'] = "Anketa ni izbrana!";
+ $this->pi['canCreate'] = false;
+
+ return false;
+ }
+
+ $_GET['a'] = A_ANALYSIS;
+
+ //ustvarimo multicrosstabs objekt
+ $this->multiCrosstabClass = new SurveyMultiCrosstabs($anketa);
+
+ if ( SurveyInfo::getInstance()->SurveyInit($this->anketa['id']) && $this->init()){
+ $this->anketa['uid'] = $global_user_id;
+
+ SurveyUserSetting::getInstance()->Init($this->anketa['id'], $this->anketa['uid']);
+ SurveyDataSettingProfiles::Init($this->anketa['id']);
+ }
+ else
+ return false;
+
+ // ce smo prisli do tu je vse ok
+ $this->pi['canCreate'] = true;
+
+ return true;
+ }
+
+ function checkCreate(){
+ return $this->pi['canCreate'];
+ }
+
+ function getFile($fileName){
+ $this->rtf->display($fileName = "analiza.rtf",true);
+ }
+
+ function init(){
+ global $lang;
+
+ // dodamo avtorja in naslov
+ $this->rtf->WriteTitle();
+ $this->rtf->WriteHeader($this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()), 'left');
+ $this->rtf->WriteHeader($this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()), 'right');
+ $this->rtf->WriteFooter($lang['page']." {PAGE} / {NUMPAGES}", 'right');
+ $this->rtf->set_default_font(FNT_TIMES, FNT_MAIN_SIZE);
+
+ return true;
+ }
+
+
+ function createRtf(){
+ global $site_path;
+ global $lang;
+
+ $this->rtf->draw_title($lang['srv_multicrosstabs']);
+
+ // Napolnimo variable s katerimi lahko operiramo
+ $this->multiCrosstabClass->getVariableList();
+
+ // Izris tabele
+ $this->displayTable();
+
+ // Izris legende
+ $this->displayLegend();
+ }
+
+ public function displayTable(){
+ global $site_path;
+ global $lang;
+
+ // Napolnimo variable ki so ze izbrane
+ $this->multiCrosstabClass->getSelectedVars();
+
+
+ // Izpisemo naslov tabele
+ $this->rtf->set_font("Arial Black", 12);
+ $text = $this->rtf->bold(1) . $this->encodeText($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['title']) . $this->rtf->bold(0);
+ $this->rtf->add_text($text);
+ $this->rtf->new_line();
+ $this->rtf->set_font("Times New Roman", 10);
+
+
+ // Izrisemo tabelo
+ // Najprej izracunamo dimenzije
+ $fullWidth = 14000;
+
+ if($this->multiCrosstabClass->rowSpan == 0)
+ $colspan = 1;
+ elseif(!$this->multiCrosstabClass->rowLevel2)
+ $colspan = 2;
+ else
+ $colspan = 4;
+
+ $metaWidth = $colspan * 1500;
+ $dataWidth = $fullWidth - $metaWidth;
+
+ $dataCellSpan = 0;
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['numerus'] == 1)
+ $dataCellSpan++;
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['percent'] == 1)
+ $dataCellSpan++;
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['avgVar'] != '')
+ $dataCellSpan++;
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['delezVar'] != '')
+ $dataCellSpan++;
+
+ $this->cellSpan = ($dataCellSpan == 0) ? 1 : $dataCellSpan;
+
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '\clbrdrt\brdrs\brdrw10';
+ $borderLR = '\clbrdrl\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ $border = '\clbrdrb\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrt\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ $bold = '\b';
+
+
+ // Zacetek tabele
+ $this->rtf->MyRTF .= $this->rtf->_font_size(16);
+ $this->rtf->MyRTF .= "{\par";
+
+
+ if($this->multiCrosstabClass->colSpan == 0){
+ $this->cellWidth = round($dataWidth/2);
+ }
+ // Imamo 2 nivoja
+ elseif($this->multiCrosstabClass->colLevel2){
+
+ $this->cellWidth = round($dataWidth / $this->multiCrosstabClass->colSpan);
+
+ $this->tableHeader = '\trowd\trql\trrh400';
+
+ // Izrisemo VERTIKALNO izbrane spremenljivkec - 1. vrstica
+ $this->table = '\clvertalc\cellx'.( $metaWidth );
+ $this->tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+ if(count($this->multiCrosstabClass->selectedVars['ver'])){
+ $cnt=1;
+ $this->XPosition = $metaWidth;
+ foreach($this->multiCrosstabClass->selectedVars['ver'] as $var){
+
+ // Ce imamo tudi 2. nivo pri doloceni spremenljivki
+ if(count($var['sub']) > 0){
+ $width = $this->cellWidth * count($this->multiCrosstabClass->variablesList[$var['sub'][0]['spr']]['options']) * count($this->multiCrosstabClass->variablesList[$var['spr']]['options']);
+
+ $this->table .= '\clvertalc'.$border.'\cellx'.( $this->XPosition + $width );
+ $this->tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->multiCrosstabClass->variablesList[$var['spr']]['naslov'], 25). '\qc\cell';
+ }
+ else{
+ $width = $this->cellWidth * count($this->multiCrosstabClass->variablesList[$var['spr']]['options']);
+
+ $this->table .= '\clvertalc'.$border.'\clvmgf\cellx'.( $this->XPosition + $width );
+ $this->tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->multiCrosstabClass->variablesList[$var['spr']]['naslov'], 25). '\qc\cell';
+ }
+
+ $cnt++;
+ $this->XPosition += $width;
+ }
+ }
+ $this->tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($this->tableHeader.$this->table.$this->tableEnd);
+
+ // Izrisemo VARIABLE za spremenljivko - 2. vrstica
+ $this->table = '\clvertalc\cellx'.( $metaWidth );
+ $this->tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+ if(count($this->multiCrosstabClass->selectedVars['ver'])){
+ $cnt=1;
+ $this->XPosition = $metaWidth;
+ foreach($this->multiCrosstabClass->selectedVars['ver'] as $var){
+
+ // Ce imamo tudi 2. nivo pri doloceni spremenljivki
+ if(count($var['sub']) > 0){
+ $width = $this->cellWidth * count($this->multiCrosstabClass->variablesList[$var['sub'][0]['spr']]['options']);
+ foreach($this->multiCrosstabClass->variablesList[$var['spr']]['options'] as $option){
+ $this->table .= '\clvertalc'.$border.'\cellx'.( $this->XPosition + $width );
+ $this->tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($option, 25). '\qc\cell';
+
+ $cnt++;
+ $this->XPosition += $width;
+ }
+ }
+ else{
+ $width = $this->cellWidth * count($this->multiCrosstabClass->variablesList[$var['spr']]['options']);
+
+ $this->table .= '\clvertalc'.$border.'\clvmrg\cellx'.( $this->XPosition + $width );
+ $this->tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+
+ $cnt++;
+ $this->XPosition += $width;
+ }
+ }
+ }
+ $this->tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($this->tableHeader.$this->table.$this->tableEnd);
+
+ // Izris vrstic za 2. nivo - 3. in 4. vrstica
+ $this->table = '\clvertalc\cellx'.( $metaWidth );
+ $this->tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+ if(count($this->multiCrosstabClass->selectedVars['ver'])){
+ $cnt=1;
+ $this->XPosition = $metaWidth;
+ foreach($this->multiCrosstabClass->selectedVars['ver'] as $parentVar){
+
+ // ce imamo childe na 2. nivoju
+ if(count($parentVar['sub']) > 0){
+ foreach($this->multiCrosstabClass->variablesList[$parentVar['spr']]['options'] as $option){
+ $width = $this->cellWidth * count($this->multiCrosstabClass->variablesList[$parentVar['sub'][0]['spr']]['options']);
+ foreach($parentVar['sub'] as $var){
+ $this->table .= '\clvertalc'.$border.'\cellx'.( $this->XPosition + $width );
+ $this->tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->multiCrosstabClass->variablesList[$var['spr']]['naslov'], 25). '\qc\cell';
+
+ $cnt++;
+ $this->XPosition += $width;
+ }
+ }
+ }
+ else{
+ foreach($this->multiCrosstabClass->variablesList[$parentVar['spr']]['options'] as $option){
+ $this->table .= '\clvertalc'.$border.'\clvmgf\cellx'.( $this->XPosition + $this->cellWidth );
+ $this->tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($option, 25). '\qc\cell';
+
+ $cnt++;
+ $this->XPosition += $this->cellWidth;
+ }
+ }
+ }
+ }
+ $this->tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($this->tableHeader.$this->table.$this->tableEnd);
+
+ $this->table = '\clvertalc\cellx'.( $metaWidth );
+ $this->tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+ if(count($this->multiCrosstabClass->selectedVars['ver'])){
+ $cnt=1;
+ $this->XPosition = $metaWidth;
+ foreach($this->multiCrosstabClass->selectedVars['ver'] as $parentVar){
+
+ // ce imamo childe na 2. nivoju
+ if(count($parentVar['sub']) > 0){
+ foreach($this->multiCrosstabClass->variablesList[$parentVar['spr']]['options'] as $option){
+ foreach($parentVar['sub'] as $var){
+ foreach($this->multiCrosstabClass->variablesList[$var['spr']]['options'] as $suboption){
+ $this->table .= '\clvertalc'.$border.'\cellx'.( $this->XPosition + $this->cellWidth );
+ $this->tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($suboption, 25). '\qc\cell';
+
+ $cnt++;
+ $this->XPosition += $this->cellWidth;
+ }
+ }
+ }
+ }
+ else{
+ foreach($this->multiCrosstabClass->variablesList[$parentVar['spr']]['options'] as $option){
+ $this->table .= '\clvertalc'.$border.'\clvmrg\cellx'.( $this->XPosition + $this->cellWidth );
+ $this->tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+
+ $cnt++;
+ $this->XPosition += $this->cellWidth;
+ }
+
+ $cnt++;
+ }
+ }
+ }
+ $this->tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($this->tableHeader.$this->table.$this->tableEnd);
+ }
+ // Imamo samo 1 nivo
+ else{
+ // Izrisemo VERTIKALNO izbrane spremenljivkec - 1. vrstica
+
+ // Izracunamo sirine celic
+ $this->cellWidth = round($dataWidth / $this->multiCrosstabClass->fullColSpan);
+
+ $this->tableHeader = '\trowd\trql\trrh400';
+
+ $this->table = '\clvertalc\cellx'.( $metaWidth );
+ $this->tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+ if(count($this->multiCrosstabClass->selectedVars['ver'])){
+
+ $cnt = 1;
+ $this->XPosition = $metaWidth;
+ foreach($this->multiCrosstabClass->selectedVars['ver'] as $var){
+
+ $sprWidth = count($this->multiCrosstabClass->variablesList[$var['spr']]['options']) * $this->cellWidth;
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['sums'] == 1 && !$this->multiCrosstabClass->rowLevel2)
+ $sprWidth += $this->cellWidth;
+
+ $this->table .= '\clvertalc'.$border.'\cellx'.( $this->XPosition + $sprWidth );
+ $this->tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->multiCrosstabClass->variablesList[$var['spr']]['naslov'], 35). '\qc\cell';
+
+ $cnt++;
+ $this->XPosition += $sprWidth;
+ }
+ }
+ // Nimamo nobene vertikalne spremenljivke in 2 horizontalni
+ elseif($this->multiCrosstabClass->rowLevel2){
+ $this->table .= '\clvertalc\cellx'.( $metaWidth + $dataWidth );
+ $this->tableEnd .= '\pard\intbl '.$this->encodeText('&nbsp; '). '\qc\cell';
+ }
+ $this->tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($this->tableHeader.$this->table.$this->tableEnd);
+
+
+ // Izrisemo VARIABLE za spremenljivko - 2. vrstica
+ if(count($this->multiCrosstabClass->selectedVars['ver'])){
+
+ $this->tableHeader = '\trowd\trql\trrh400';
+
+ $this->table = '\clvertalc\cellx'.( $metaWidth );
+ $this->tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+
+ $cnt=1;
+ foreach($this->multiCrosstabClass->selectedVars['ver'] as $var){
+
+ // Loop cez variable spremenljivke
+ foreach($this->multiCrosstabClass->variablesList[$var['spr']]['options'] as $option){
+ $this->table .= '\clvertalc'.$border.'\cellx'.( $metaWidth + ($cnt*$this->cellWidth) );
+ $this->tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($option, 25). '\qc\cell';
+
+ $cnt++;
+ }
+
+ // Suma (ce jo imamo vklopljeno)
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['sums'] == 1 && !$this->multiCrosstabClass->rowLevel2){
+ $this->table .= '\clvertalc'.$border.'\cellx'.( $metaWidth + ($cnt*$this->cellWidth) );
+ $this->tableEnd .= '\pard\intbl'.$bold.' '.$this->rtf->color(13).$lang['srv_analiza_crosstab_skupaj'].$this->rtf->color(0). '\qc\cell';
+
+ $cnt++;
+ }
+ }
+ $this->tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($this->tableHeader.$this->table.$this->tableEnd);
+ }
+ }
+
+
+
+ // Izrisemo HORIZONTALNO izbrane variable
+ if(count($this->multiCrosstabClass->selectedVars['hor'])){
+
+ // Imamo 2 nivoja vrstic
+ if($this->multiCrosstabClass->rowLevel2){
+ foreach($this->multiCrosstabClass->selectedVars['hor'] as $parentVar){
+
+ $cnt = 0;
+ $order0 = 0;
+
+ foreach($this->multiCrosstabClass->variablesList[$parentVar['spr']]['options'] as $option){
+
+ $cnt2 = 0;
+
+ // ce imamo childe na 2. nivoju
+ if(count($parentVar['sub']) > 0){
+
+ $width = $metaWidth / 4;
+
+ foreach($parentVar['sub'] as $var){
+
+ $cnt3 = 0;
+
+ foreach($this->multiCrosstabClass->variablesList[$var['spr']]['options'] as $suboption){
+
+ $this->tableHeader = '\trowd\trql\trrh400';
+
+ if($cnt == 0){
+ $this->table = '\clvertalc'.$border.'\clvmgf\cellx'.( $width );
+ $this->tableEnd = '\pard\intbl'.$bold.' '.$this->snippet($this->multiCrosstabClass->variablesList[$parentVar['spr']]['naslov'], 25). '\qc\cell';
+ }
+ else{
+ $this->table = '\clvertalc'.$border.'\clvmrg\cellx'.( $width );
+ $this->tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+ }
+
+ // Variabla
+ if($cnt2 == 0){
+ $this->table .= '\clvertalc'.$border.'\clvmgf\cellx'.( 2 * $width );
+ $this->tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($option, 25). '\qc\cell';
+ }
+ else{
+ $this->table .= '\clvertalc'.$border.'\clvmrg\cellx'.( 2 * $width );
+ $this->tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+ }
+
+ if($cnt3 == 0){
+ $this->table .= '\clvertalc'.$border.'\clvmgf\cellx'.( 3 * $width );
+ $this->tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->multiCrosstabClass->variablesList[$var['spr']]['naslov'], 25). '\qc\cell';
+ }
+ else{
+ $this->table .= '\clvertalc'.$border.'\clvmrg\cellx'.( 3 * $width );
+ $this->tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+ }
+
+ // Variabla 2
+ $this->table .= '\clvertalc'.$border.'\cellx'.( 4 * $width );
+ $this->tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($suboption, 25). '\qc\cell';
+
+ // Celice s podatki
+ $this->XPosition = $metaWidth;
+ $this->displayDataCells($parentVar, $order0, $var, $cnt3);
+
+ $this->tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($this->tableHeader.$this->table.$this->tableEnd);
+
+ $cnt++;
+ $cnt2++;
+ $cnt3++;
+ }
+
+ $order0++;
+ }
+ }
+ else{
+ $width = $metaWidth / 2;
+
+ $this->tableHeader = '\trowd\trql\trrh400';
+
+ if($cnt == 0){
+ $this->table = '\clvertalc'.$border.'\clvmgf\cellx'.( $width );
+ $this->tableEnd = '\pard\intbl'.$bold.' '.$this->snippet($this->multiCrosstabClass->variablesList[$parentVar['spr']]['naslov'], 25). '\qc\cell';
+ }
+ else{
+ $this->table = '\clvertalc'.$border.'\clvmrg\cellx'.( $width );
+ $this->tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+ }
+
+ // Variabla
+ $this->table .= '\clvertalc'.$border.'\clvmgf\cellx'.( 2 * $width );
+ $this->tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($option, 25). '\qc\cell';
+
+ // Celice s podatki
+ $this->XPosition = $metaWidth;
+ $this->displayDataCells($parentVar, $cnt);
+
+ $this->tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($this->tableHeader.$this->table.$this->tableEnd);
+
+ $cnt++;
+ }
+ }
+ }
+ }
+ // Imamo samo 1 nivo vrstic
+ else{
+ $width = $metaWidth / 2;
+
+ foreach($this->multiCrosstabClass->selectedVars['hor'] as $var){
+
+ // Ce imamo sumo
+ $suma = ($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['sums'] == 1 && count($this->multiCrosstabClass->selectedVars['ver']) > 0 && !$this->multiCrosstabClass->colLevel2) ? true : false;
+
+ $cnt = 0;
+ foreach($this->multiCrosstabClass->variablesList[$var['spr']]['options'] as $option){
+
+ $this->tableHeader = '\trowd\trql\trrh400';
+
+ if($cnt == 0){
+ $this->table = '\clvertalc'.$borderLR.$borderT.'\clvmgf\cellx'.( $width );
+ $this->tableEnd = '\pard\intbl'.$bold.' '.$this->snippet($this->multiCrosstabClass->variablesList[$var['spr']]['naslov'], 25). '\qc\cell';
+ }
+ else{
+ $this->table = '\clvertalc'.$borderLR.'\clvmrg\cellx'.( $width );
+ $this->tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+ }
+
+ // Variabla
+ $this->table .= '\clvertalc'.$border.'\cellx'.( $width*2 );
+ $this->tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($option, 25). '\qc\cell';
+
+ // Celice s podatki
+ $this->XPosition = $metaWidth;
+ $this->displayDataCells($var, $cnt);
+
+
+ $this->tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($this->tableHeader.$this->table.$this->tableEnd);
+
+ $cnt++;
+ }
+
+ // Vrstica za sumo (ce jo imamo vklopljeno)
+ if($suma){
+ $this->XPosition = $metaWidth;
+
+ $this->tableHeader = '\trowd\trql\trrh400';
+
+ $this->table = '\clvertalc'.$borderLR.'\clvmrg\cellx'.( $width );
+ $this->tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+ $this->table .= '\clvertalc'.$border.'\cellx'.( $width*2 );
+ $this->tableEnd .= '\pard\intbl'.$bold.' '.$this->rtf->color(13).$lang['srv_analiza_crosstab_skupaj'].$this->rtf->color(0). '\qc\cell';
+
+ // Loop cez vse stolpce
+ foreach($this->multiCrosstabClass->selectedVars['ver'] as $spr2){
+
+ // Loop cez variable trenutnega stolpca
+ $cnt = 0;
+ foreach($this->multiCrosstabClass->variablesList[$spr2['spr']]['options'] as $var2){
+
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$var['spr'].'-'.$spr2['spr']];
+
+ $keys1 = array_keys($crosstabs['options1']);
+ $val = $keys1[$cnt];
+
+ $this->displaySumsCell($var, $spr2, $val, $orientation=1);
+
+ $cnt++;
+ }
+
+ // Krizanje navpicne in vodoravne sume
+ $this->displaySumsCell($var, $spr2, 0, $orientation=2);
+ }
+
+ $this->tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($this->tableHeader.$this->table.$this->tableEnd);
+ }
+ }
+
+ $this->tableHeader = '\trowd\trql\trrh400';
+ $this->table = '\clvertalc'.$borderT.'\cellx'.( $fullWidth );
+ $this->tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+ $this->tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($this->tableHeader.$this->table.$this->tableEnd);
+ }
+ }
+
+ //konec tabele
+ $this->rtf->MyRTF .= "}";
+ }
+
+ // Izpis celic v vrstici s podatki
+ function displayDataCells($spr1, $var1, $spr2='', $var2=''){
+
+ // Ce nimamo nobenega krizanja izpisemo prazne
+ if($spr2 == '' && $this->multiCrosstabClass->colSpan == 0){
+
+ /*for($i=0; $i<$this->multiCrosstabClass->colSpan; $i++){
+ $this->pdf->MultiCell($width, $height, '', '1', 'C', 0, 0, 0 ,0, true);
+ }*/
+
+ //$this->pdf->MultiCell($dataWidth, $this->cellHeight, '', 1, 'C', 0, 0, 0 ,0, true);
+ //$this->pdf->MultiCell(1, $this->cellHeight, '', 0, 'C', 0, 1, 0 ,0, true);
+ }
+
+ // Ce nimamo stolpcev - krizanje dveh vrstic
+ elseif($spr2 != '' && $this->multiCrosstabClass->colSpan == 0){
+
+ $spr1_temp = explode('-', $spr1['spr']);
+ $grd = $this->multiCrosstabClass->variablesList[$spr1['spr']]['grd_id'];
+ $variabla1 = array('seq' => $spr1_temp[1], 'spr' => $spr1_temp[0], 'grd' => $grd);
+
+ $spr2_temp = explode('-', $spr2['spr']);
+ $grd = $this->multiCrosstabClass->variablesList[$spr2['spr']]['grd_id'];
+ $variabla2 = array('seq' => $spr2_temp[1], 'spr' => $spr2_temp[0], 'grd' => $grd);
+
+ // Ce se nimamo izracunanih rezultatov jih izracunamo
+ if(isset($this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr']]))
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr']];
+ else{
+ $variables = array();
+ $variables[0] = array('seq' => $variabla1['seq'], 'spr' => $variabla1['spr'], 'grd' => $variabla1['grd']);
+ $variables[1] = array('seq' => $variabla2['seq'], 'spr' => $variabla2['spr'], 'grd' => $variabla2['grd']);
+
+ $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr']] = $this->multiCrosstabClass->createCrostabulation($variables);
+
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr']];
+ }
+
+ $keys1 = array_keys($crosstabs['options1']);
+ $val1 = $keys1[$var1];
+
+ $keys2 = array_keys($crosstabs['options2']);
+ $val2 = $keys2[$var2];
+
+ $crosstab = (isset($crosstabs['crosstab'][$val1][$val2])) ? $crosstabs['crosstab'][$val1][$val2] : 0;
+ $percent = ($crosstab > 0) ? $this->multiCrosstabClass->getCrossTabPercentage($crosstabs['sumaVrstica'][$val1], $crosstab) : 0;
+ $avg = (isset($crosstabs['avg'][$val1][$val2])) ? $crosstabs['avg'][$val1][$val2] : 0;
+ $delez = (isset($crosstabs['delez'][$val1][$val2])) ? $crosstabs['delez'][$val1][$val2] : 0;
+
+ $this->displayDataCell($crosstab, $percent, $avg, $delez);
+ }
+
+ // Krizanje 1 vrstice in 1 stolpca
+ elseif($spr2 == '' && !$this->multiCrosstabClass->colLevel2){
+
+ // Loop cez vse stolpce
+ foreach($this->multiCrosstabClass->selectedVars['ver'] as $spr2){
+
+ $spr1_temp = explode('-', $spr1['spr']);
+ $grd = $this->multiCrosstabClass->variablesList[$spr1['spr']]['grd_id'];
+ $variabla1 = array('seq' => $spr1_temp[1], 'spr' => $spr1_temp[0], 'grd' => $grd);
+
+ $spr2_temp = explode('-', $spr2['spr']);
+ $grd = $this->multiCrosstabClass->variablesList[$spr2['spr']]['grd_id'];
+ $variabla2 = array('seq' => $spr2_temp[1], 'spr' => $spr2_temp[0], 'grd' => $grd);
+
+
+ // Ce se nimamo izracunanih rezultatov jih izracunamo
+ if(isset($this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr']]))
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr']];
+ else{
+ $variables = array();
+ $variables[0] = array('seq' => $variabla1['seq'], 'spr' => $variabla1['spr'], 'grd' => $variabla1['grd']);
+ $variables[1] = array('seq' => $variabla2['seq'], 'spr' => $variabla2['spr'], 'grd' => $variabla2['grd']);
+
+ $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr']] = $this->multiCrosstabClass->createCrostabulation($variables);
+
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr']];
+ }
+
+ $keys1 = array_keys($crosstabs['options1']);
+ $val1 = $keys1[$var1];
+
+ // Loop cez variable trenutnega stolpca
+ $cnt = 0;
+ foreach($this->multiCrosstabClass->variablesList[$spr2['spr']]['options'] as $var2){
+
+ $keys2 = array_keys($crosstabs['options2']);
+ $val2 = $keys2[$cnt];
+
+ $crosstab = (isset($crosstabs['crosstab'][$val1][$val2])) ? $crosstabs['crosstab'][$val1][$val2] : 0;
+ $percent = ($crosstab > 0) ? $this->multiCrosstabClass->getCrossTabPercentage($crosstabs['sumaVrstica'][$val1], $crosstab) : 0;
+ $avg = (isset($crosstabs['avg'][$val1][$val2])) ? $crosstabs['avg'][$val1][$val2] : 0;
+ $delez = (isset($crosstabs['delez'][$val1][$val2])) ? $crosstabs['delez'][$val1][$val2] : 0;
+
+ $this->displayDataCell($crosstab, $percent, $avg, $delez);
+
+ $cnt++;
+ }
+
+ // Suma (ce jo imamo vklopljeno)
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['sums'] == 1 && !$this->multiCrosstabClass->rowLevel2){
+ $this->displaySumsCell($spr1, $spr2, $val1, $orientation=0);
+ }
+ }
+ }
+
+ // Izpisemo vecnivojske podatke (krizanje 3 ali 4 spremenljivk)
+ else{
+
+ // Nastavimo 1. vrsticno variablo
+ $spr1_temp = explode('-', $spr1['spr']);
+ $grd = $this->multiCrosstabClass->variablesList[$spr1['spr']]['grd_id'];
+ $variabla1 = array('seq' => $spr1_temp[1], 'spr' => $spr1_temp[0], 'grd' => $grd);
+
+ // Krizanje 2 vrstic in 1 stolpca
+ if(!$this->multiCrosstabClass->colLevel2){
+
+ // Nastavimo 2. vrsticno variablo
+ $spr2_temp = explode('-', $spr2['spr']);
+ $grd = $this->multiCrosstabClass->variablesList[$spr2['spr']]['grd_id'];
+ $variabla2 = array('seq' => $spr2_temp[1], 'spr' => $spr2_temp[0], 'grd' => $grd);
+
+ // Loop cez vse stolpce
+ foreach($this->multiCrosstabClass->selectedVars['ver'] as $spr3){
+
+ $spr3_temp = explode('-', $spr3['spr']);
+ $grd = $this->multiCrosstabClass->variablesList[$spr3['spr']]['grd_id'];
+ $variabla3 = array('seq' => $spr3_temp[1], 'spr' => $spr3_temp[0], 'grd' => $grd);
+
+ // Ce se nimamo izracunanih rezultatov jih izracunamo
+ if(isset($this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']]))
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']];
+ else{
+ $variables = array();
+ $variables[0] = array('seq' => $variabla1['seq'], 'spr' => $variabla1['spr'], 'grd' => $variabla1['grd']);
+ $variables[1] = array('seq' => $variabla2['seq'], 'spr' => $variabla2['spr'], 'grd' => $variabla2['grd']);
+ $variables[2] = array('seq' => $variabla3['seq'], 'spr' => $variabla3['spr'], 'grd' => $variabla3['grd']);
+
+ $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']] = $this->multiCrosstabClass->createCrostabulation($variables);
+
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']];
+ }
+
+ $keys1 = array_keys($crosstabs['options1']);
+ $val1 = $keys1[$var1];
+
+ $keys2 = array_keys($crosstabs['options2']);
+ $val2 = $keys2[$var2];
+
+ // Loop cez variable trenutnega stolpca
+ $cnt = 0;
+ foreach($this->multiCrosstabClass->variablesList[$spr3['spr']]['options'] as $var3){
+
+ $keys3 = array_keys($crosstabs['options3']);
+ $val3 = $keys3[$cnt];
+
+ $crosstab = (isset($crosstabs['crosstab'][$val1][$val2][$val3])) ? $crosstabs['crosstab'][$val1][$val2][$val3] : 0;
+ $percent = ($crosstab > 0) ? $this->multiCrosstabClass->getCrossTabPercentage($crosstabs['sumaVrstica'][$val1], $crosstab) : 0;
+ $avg = (isset($crosstabs['avg'][$val1][$val2][$val3])) ? $crosstabs['avg'][$val1][$val2][$val3] : 0;
+ $delez = (isset($crosstabs['delez'][$val1][$val2][$val3])) ? $crosstabs['delez'][$val1][$val2][$val3] : 0;
+
+ $this->displayDataCell($crosstab, $percent, $avg, $delez);
+
+ $cnt++;
+ }
+ }
+ }
+
+ // Krizanje 1 vrstice in 2 stolpcev
+ elseif($spr2 == ''){
+
+ // Loop cez vse stolpce 1. navpicne spremenljivke
+ foreach($this->multiCrosstabClass->selectedVars['ver'] as $spr2){
+
+ $spr2_temp = explode('-', $spr2['spr']);
+ $grd = $this->multiCrosstabClass->variablesList[$spr2['spr']]['grd_id'];
+ $variabla2 = array('seq' => $spr2_temp[1], 'spr' => $spr2_temp[0], 'grd' => $grd);
+
+ // Loop cez variable 1. navpicne spremnljivke
+ $cnt2 = 0;
+ foreach($this->multiCrosstabClass->variablesList[$spr2['spr']]['options'] as $var2){
+
+ // Loop cez vse navpicne spremenljivke 2. nivoja - ce obstajajo
+ if(count($spr2['sub']) > 0){
+ foreach($spr2['sub'] as $spr3){
+
+ // Nastavimo navpicno spremenljivko 2. nivoja
+ $spr3_temp = explode('-', $spr3['spr']);
+ $grd = $this->multiCrosstabClass->variablesList[$spr3['spr']]['grd_id'];
+ $variabla3 = array('seq' => $spr3_temp[1], 'spr' => $spr3_temp[0], 'grd' => $grd);
+
+ // Ce se nimamo izracunanih rezultatov jih izracunamo
+ if(isset($this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']]))
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']];
+ else{
+ $variables = array();
+ $variables[0] = array('seq' => $variabla1['seq'], 'spr' => $variabla1['spr'], 'grd' => $variabla1['grd']);
+ $variables[1] = array('seq' => $variabla2['seq'], 'spr' => $variabla2['spr'], 'grd' => $variabla2['grd']);
+ $variables[2] = array('seq' => $variabla3['seq'], 'spr' => $variabla3['spr'], 'grd' => $variabla3['grd']);
+
+ $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']] = $this->multiCrosstabClass->createCrostabulation($variables);
+
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']];
+ }
+
+ $keys1 = array_keys($crosstabs['options1']);
+ $val1 = $keys1[$var1];
+
+ $keys2 = array_keys($crosstabs['options2']);
+ $val2 = $keys2[$cnt2];
+
+ // Loop cez variable spremenljivke 2. nivoja
+ $cnt3 = 0;
+ foreach($this->multiCrosstabClass->variablesList[$spr3['spr']]['options'] as $var3){
+
+ $keys3 = array_keys($crosstabs['options3']);
+ $val3 = $keys3[$cnt3];
+
+ $crosstab = (isset($crosstabs['crosstab'][$val1][$val2][$val3])) ? $crosstabs['crosstab'][$val1][$val2][$val3] : 0;
+ $percent = ($crosstab > 0) ? $this->multiCrosstabClass->getCrossTabPercentage($crosstabs['sumaVrstica'][$val1], $crosstab) : 0;
+ $avg = (isset($crosstabs['avg'][$val1][$val2][$val3])) ? $crosstabs['avg'][$val1][$val2][$val3] : 0;
+ $delez = (isset($crosstabs['delez'][$val1][$val2][$val3])) ? $crosstabs['delez'][$val1][$val2][$val3] : 0;
+
+ $this->displayDataCell($crosstab, $percent, $avg, $delez);
+
+ $cnt3++;
+ }
+ }
+ }
+ // 1 nivojska spremenljivka v stolpcu
+ else{
+ // Ce se nimamo izracunanih rezultatov jih izracunamo
+ if(isset($this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr']]))
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr']];
+ else{
+ $variables = array();
+ $variables[0] = array('seq' => $variabla1['seq'], 'spr' => $variabla1['spr'], 'grd' => $variabla1['grd']);
+ $variables[1] = array('seq' => $variabla2['seq'], 'spr' => $variabla2['spr'], 'grd' => $variabla2['grd']);
+
+ $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr']] = $this->multiCrosstabClass->createCrostabulation($variables);
+
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr']];
+ }
+
+ $keys1 = array_keys($crosstabs['options1']);
+ $val1 = $keys1[$var1];
+
+ $keys2 = array_keys($crosstabs['options2']);
+ $val2 = $keys2[$cnt2];
+
+ $crosstab = (isset($crosstabs['crosstab'][$val1][$val2])) ? $crosstabs['crosstab'][$val1][$val2] : 0;
+ $percent = ($crosstab > 0) ? $this->multiCrosstabClass->getCrossTabPercentage($crosstabs['sumaVrstica'][$val1], $crosstab) : 0;
+ $avg = (isset($crosstabs['avg'][$val1][$val2])) ? $crosstabs['avg'][$val1][$val2] : 0;
+ $delez = (isset($crosstabs['delez'][$val1][$val2])) ? $crosstabs['delez'][$val1][$val2] : 0;
+
+ $this->displayDataCell($crosstab, $percent, $avg, $delez);
+ }
+
+ $cnt2++;
+ }
+ }
+ }
+
+
+
+ // Krizanje 2 vrstic in 2 stolpcev
+ else{
+
+ // Nastavimo 2. vrsticno variablo
+ $spr2_temp = explode('-', $spr2['spr']);
+ $grd = $this->multiCrosstabClass->variablesList[$spr2['spr']]['grd_id'];
+ $variabla2 = array('seq' => $spr2_temp[1], 'spr' => $spr2_temp[0], 'grd' => $grd);
+
+ // Loop cez vse stolpce 1. navpicne spremenljivke
+ foreach($this->multiCrosstabClass->selectedVars['ver'] as $spr3){
+
+ $spr3_temp = explode('-', $spr3['spr']);
+ $grd = $this->multiCrosstabClass->variablesList[$spr3['spr']]['grd_id'];
+ $variabla3 = array('seq' => $spr3_temp[1], 'spr' => $spr3_temp[0], 'grd' => $grd);
+
+ // Loop cez variable 1. navpicne spremnljivke
+ $cnt3 = 0;
+ foreach($this->multiCrosstabClass->variablesList[$spr3['spr']]['options'] as $var3){
+
+ // Loop cez vse navpicne spremenljivke 2. nivoja
+ if(count($spr3['sub']) > 0){
+ foreach($spr3['sub'] as $spr4){
+
+ // Nastavimo navpicno spremenljivko 2. nivoja
+ $spr4_temp = explode('-', $spr4['spr']);
+ $grd = $this->multiCrosstabClass->variablesList[$spr4['spr']]['grd_id'];
+ $variabla4 = array('seq' => $spr4_temp[1], 'spr' => $spr4_temp[0], 'grd' => $grd);
+
+ // Ce se nimamo izracunanih rezultatov jih izracunamo
+ if(isset($this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr'].'-'.$spr4['spr']]))
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr'].'-'.$spr4['spr']];
+ else{
+ $variables = array();
+ $variables[0] = array('seq' => $variabla1['seq'], 'spr' => $variabla1['spr'], 'grd' => $variabla1['grd']);
+ $variables[1] = array('seq' => $variabla2['seq'], 'spr' => $variabla2['spr'], 'grd' => $variabla2['grd']);
+ $variables[2] = array('seq' => $variabla3['seq'], 'spr' => $variabla3['spr'], 'grd' => $variabla3['grd']);
+ $variables[3] = array('seq' => $variabla4['seq'], 'spr' => $variabla4['spr'], 'grd' => $variabla4['grd']);
+
+ $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr'].'-'.$spr4['spr']] = $this->multiCrosstabClass->createCrostabulation($variables);
+
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr'].'-'.$spr4['spr']];
+ }
+
+ $keys1 = array_keys($crosstabs['options1']);
+ $val1 = $keys1[$var1];
+
+ $keys2 = array_keys($crosstabs['options2']);
+ $val2 = $keys2[$var2];
+
+ $keys3 = array_keys($crosstabs['options3']);
+ $val3 = $keys3[$cnt3];
+
+ // Loop cez variable spremenljivke 2. nivoja
+ $cnt4 = 0;
+ foreach($this->multiCrosstabClass->variablesList[$spr4['spr']]['options'] as $var4){
+
+ $keys4 = array_keys($crosstabs['options4']);
+ $val4 = $keys4[$cnt4];
+
+ $crosstab = (isset($crosstabs['crosstab'][$val1][$val2][$val3][$val4])) ? $crosstabs['crosstab'][$val1][$val2][$val3][$val4] : 0;
+ $percent = ($crosstab > 0) ? $this->multiCrosstabClass->getCrossTabPercentage($crosstabs['sumaVrstica'][$val1], $crosstab) : 0;
+ $avg = (isset($crosstabs['avg'][$val1][$val2][$val3][$val4])) ? $crosstabs['avg'][$val1][$val2][$val3][$val4] : 0;
+ $delez = (isset($crosstabs['delez'][$val1][$val2][$val3][$val4])) ? $crosstabs['delez'][$val1][$val2][$val3][$val4] : 0;
+
+ $this->displayDataCell($crosstab, $percent, $avg, $delez);
+
+ $cnt4++;
+ }
+ }
+ }
+ // 1 nivo navpicne spremenljivke
+ else{
+ // Ce se nimamo izracunanih rezultatov jih izracunamo
+ if(isset($this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']]))
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']];
+ else{
+ $variables = array();
+ $variables[0] = array('seq' => $variabla1['seq'], 'spr' => $variabla1['spr'], 'grd' => $variabla1['grd']);
+ $variables[1] = array('seq' => $variabla2['seq'], 'spr' => $variabla2['spr'], 'grd' => $variabla2['grd']);
+ $variables[2] = array('seq' => $variabla3['seq'], 'spr' => $variabla3['spr'], 'grd' => $variabla3['grd']);
+
+ $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']] = $this->multiCrosstabClass->createCrostabulation($variables);
+
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']];
+ }
+
+ $keys1 = array_keys($crosstabs['options1']);
+ $val1 = $keys1[$var1];
+
+ $keys2 = array_keys($crosstabs['options2']);
+ $val2 = $keys2[$var2];
+
+ $keys3 = array_keys($crosstabs['options3']);
+ $val3 = $keys3[$cnt3];
+
+ $crosstab = (isset($crosstabs['crosstab'][$val1][$val2][$val3])) ? $crosstabs['crosstab'][$val1][$val2][$val3] : 0;
+ $percent = ($crosstab > 0) ? $this->multiCrosstabClass->getCrossTabPercentage($crosstabs['sumaVrstica'][$val1], $crosstab) : 0;
+ $avg = (isset($crosstabs['avg'][$val1][$val2][$val3])) ? $crosstabs['avg'][$val1][$val2][$val3] : 0;
+ $delez = (isset($crosstabs['delez'][$val1][$val2][$val3])) ? $crosstabs['delez'][$val1][$val2][$val3] : 0;
+
+ $this->displayDataCell($crosstab, $percent, $avg, $delez);
+ }
+
+ $cnt3++;
+ }
+ }
+ }
+ }
+ }
+
+ // Izpis celic v vrstici s sumami ($orientation 0->vrstica, 1->stolpec, 2->skupaj)
+ function displaySumsCell($spr1, $spr2, $val, $orientation){
+
+ $border = '\clbrdrb\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrt\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ $bold = '\b';
+
+ $text = '';
+
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr']];
+
+ // Celica s skupno sumo
+ if($orientation == 2){
+
+ // Numerus
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['numerus'] == 1){
+ $text .= $crosstabs['sumaSkupna'];
+ $text .= '\\line\n ';
+ }
+
+ // Procenti
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['percent'] == 1){
+ $text .= $this->formatNumber(100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $text .= '\\line\n ';
+ }
+
+ // Povprecje
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['avgVar'] > 0){
+
+ // Loop cez vse in izracunamo povprecje z ustreznimi utezmi
+ $avg = 0;
+ if($crosstabs['crosstab']){
+ $tempAvg = 0;
+ foreach($crosstabs['crosstab'] as $key1 => $row){
+ foreach($row as $key2 => $count){
+ $tempAvg += $count * $crosstabs['avg'][$key1][$key2];
+ }
+ }
+ $avg = $tempAvg / $crosstabs['sumaSkupna'];
+ }
+
+ $text .= $this->rtf->color(2).$this->formatNumber($avg, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE')).$this->rtf->color(0);
+ $text .= '\\line\n ';
+ }
+
+ // Delez
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['delezVar'] > 0){
+
+ // Loop cez vrstico in izracunamo skupen delez
+ $delez = 0;
+ if($crosstabs['delez']){
+ foreach($crosstabs['delez'] as $row){
+ foreach($row as $tempDelez){
+ $delez += $tempDelez;
+ }
+ }
+ }
+
+ $text .= $this->rtf->color(6).$this->formatNumber($delez*100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%').$this->rtf->color(0);
+ $text .= '\\line\n ';
+ }
+ }
+ // Suma na koncu vrstice
+ elseif($orientation == 0){
+ // Izpisemo podatek
+ if($crosstabs['sumaVrstica'][$val]){
+
+ // Numerus
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['numerus'] == 1){
+ $text .= $crosstabs['sumaVrstica'][$val];
+ $text .= '\\line\n ';
+ }
+ // Procenti
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['percent'] == 1){
+ $text .= $this->formatNumber(100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $text .= '\\line\n ';
+ }
+ }
+ else{
+
+ // Numerus
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['numerus'] == 1){
+ $text .= '0';
+ $text .= '\\line\n ';
+ }
+ // Procenti
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['percent'] == 1){
+ $text .= $this->formatNumber(100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $text .= '\\line\n ';
+ }
+ }
+
+ // Povprecje
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['avgVar'] > 0){
+
+ // Loop cez vrstico in izracunamo povprecje z ustreznimi utezmi
+ $avg = 0;
+ if($crosstabs['crosstab'][$val]){
+ $tempAvg = 0;
+ foreach($crosstabs['crosstab'][$val] as $key => $count){
+ $tempAvg += $count * $crosstabs['avg'][$val][$key];
+ }
+ $avg = $tempAvg / $crosstabs['sumaVrstica'][$val];
+ }
+
+ $text .= $this->rtf->color(2).$this->formatNumber($avg, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE')).$this->rtf->color(0);
+ $text .= '\\line\n ';
+ }
+
+ // Delez
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['delezVar'] > 0){
+
+ // Loop cez vrstico in izracunamo skupen delez
+ $delez = 0;
+ if($crosstabs['delez'][$val]){
+ foreach($crosstabs['delez'][$val] as $tempDelez){
+ $delez += $tempDelez;
+ }
+ }
+
+ $text .= $this->rtf->color(6).$this->formatNumber($delez*100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%').$this->rtf->color(0);
+ $text .= '\\line\n ';
+ }
+ }
+ // Suma za stolpce
+ else{
+ // Izpisemo podatek
+ if(isset($crosstabs['sumaStolpec'][$val])){
+
+ // Numerus
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['numerus'] == 1){
+ $text .= $crosstabs['sumaStolpec'][$val];
+ $text .= '\\line\n ';
+ }
+ // Procenti
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['percent'] == 1){
+ $text .= $this->formatNumber($this->multiCrosstabClass->getCrossTabPercentage($crosstabs['sumaSkupna'], $crosstabs['sumaStolpec'][$val]), SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $text .= '\\line\n ';
+ }
+ }
+ else{
+
+ // Numerus
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['numerus'] == 1){
+ $text .= '0';
+ $text .= '\\line\n ';
+ }
+ // Procenti
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['percent'] == 1){
+ $text .= $this->formatNumber(0, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $text .= '\\line\n ';
+ }
+ }
+
+ // Povprecje
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['avgVar'] > 0){
+
+ // Loop cez vrstico in izracunamo povprecje z ustreznimi utezmi
+ $avg = 0;
+ if($crosstabs['crosstab']){
+ $tempAvg = 0;
+ foreach($crosstabs['crosstab'] as $key => $row){
+ if($row[$val] > 0)
+ $tempAvg += $row[$val] * $crosstabs['avg'][$key][$val];
+ }
+ $avg = $tempAvg / $crosstabs['sumaStolpec'][$val];
+ }
+
+ $text .= $this->rtf->color(2).$this->formatNumber($avg, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE')).$this->rtf->color(0);
+ $text .= '\\line\n ';
+ }
+
+ // Delez
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['delezVar'] > 0){
+
+ // Loop cez vrstico in izracunamo skupen delez
+ $delez = 0;
+ if($crosstabs['delez']){
+ foreach($crosstabs['delez'] as $tempDelez){
+ $delez += $tempDelez[$val];
+ }
+ }
+
+ $text .= $this->rtf->color(6).$this->formatNumber($delez*100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%').$this->rtf->color(0);
+ $text .= '\\line\n ';
+ }
+ }
+
+ $text = substr($text, 0, -8);
+
+ $this->table .= '\clvertalc'.$border.'\cellx'.( $this->XPosition + $this->cellWidth );
+ $this->tableEnd .= '\pard\intbl'.$bold.' '.$this->rtf->color(13).$text.$this->rtf->color(0). '\qc\cell';
+
+ $this->XPosition += $this->cellWidth;
+ }
+
+ // Izpis celice z vrednostmi
+ function displayDataCell($crosstab, $percent, $avg, $delez){
+
+ $border = '\clbrdrb\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrt\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ $bold = '\b';
+
+ $text = '';
+
+ if($crosstab > 0){
+
+ // Numerus
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['numerus'] == 1){
+ $text .= $crosstab;
+ $text .= '\\line\n ';
+ }
+ // Procenti
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['percent'] == 1){
+ $text .= $this->formatNumber($percent, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $text .= '\\line\n ';
+ }
+ }
+ else{
+ // Numerus
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['numerus'] == 1){
+ $text .= '0';
+ $text .= '\\line\n ';
+ }
+ // Procenti
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['percent'] == 1){
+ $text .= $this->formatNumber(0, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $text .= '\\line\n ';
+ }
+ }
+
+ // Povprecje
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['avgVar'] > 0){
+ $text .= $this->rtf->color(2).$this->formatNumber($avg, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE')).$this->rtf->color(0);
+ $text .= '\\line\n ';
+ }
+
+ // Delez
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['delezVar'] > 0){
+ $text .= $this->rtf->color(6).$this->formatNumber($delez*100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%').$this->rtf->color(0);
+ $text .= '\\line\n ';
+ }
+
+ $text = substr($text, 0, -8);
+
+ $this->table .= '\clvertalc'.$border.'\cellx'.( $this->XPosition + $this->cellWidth );
+ $this->tableEnd .= '\pard\intbl\b0 '.$text. '\qc\cell';
+
+ $this->XPosition += $this->cellWidth;
+ }
+
+ // Izris legende na dnu
+ function displayLegend(){
+ global $lang;
+
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['avgVar'] > 0 || $this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['delezVar'] > 0){
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '\clbrdrt\brdrs\brdrw10';
+ $borderLR = '\clbrdrl\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ $border = '\clbrdrb\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrt\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+
+ $this->rtf->MyRTF .= $this->rtf->_font_size(16);
+ $this->rtf->MyRTF .= "{\par";
+
+ // Povprecje
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['avgVar'] > 0){
+
+ $this->tableHeader = '\trowd\trql\trrh400';
+
+ $this->table = '\clvertalc\cellx'.( 11500 );
+ $this->tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+
+ $this->table .= '\clvertalc'.$borderT.$borderLR.($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['delezVar'] == 0 ? $borderB : '').'\cellx'.( 14000 );
+ $this->tableEnd .= '\pard\intbl'.$bold.' '.$this->rtf->color(2).$lang['srv_multicrosstabs_avg'].': '.$this->rtf->color(0).$this->multiCrosstabClass->variablesList[$this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['avgVar']]['variable']. '\qc\cell';
+
+ $this->tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($this->tableHeader.$this->table.$this->tableEnd);
+ }
+
+ // Delez
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['delezVar'] > 0){
+
+ $this->tableHeader = '\trowd\trql\trrh400';
+
+ $this->table = '\clvertalc\cellx'.( 11500 );
+ $this->tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+
+ $delez = unserialize($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['delez']);
+ $string = '';
+ $cnt = 1;
+ foreach($delez as $val){
+ if($val == 1)
+ $string .= $cnt.', ';
+
+ $cnt++;
+ }
+ $string = $this->multiCrosstabClass->variablesList[$this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['delezVar']]['variable'].' ('.substr($string, 0, -2).')';
+ $this->table .= '\clvertalc'.$borderLR.$borderB.($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['avgVar'] == 0 ? $borderT : '').'\cellx'.( 14000 );
+ $this->tableEnd .= '\pard\intbl'.$bold.' '.$this->rtf->color(6).$lang['srv_multicrosstabs_delez'].': '.$this->rtf->color(0).$string. '\qc\cell';
+
+ $this->tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($this->tableHeader.$this->table.$this->tableEnd);
+ }
+
+ $this->rtf->MyRTF .= "}";
+ }
+ }
+
+
+ function formatNumber($value, $digit=0, $sufix=""){
+
+ if ($value <> 0 && $value != null)
+ $result = round($value, $digit);
+ else
+ $result = "0";
+
+ # polovimo decimalna mesta in vejice za tisoÄice
+ $decimal_point = SurveyDataSettingProfiles :: getSetting('decimal_point');
+ $thousands = SurveyDataSettingProfiles :: getSetting('thousands');
+
+ $result = number_format($result, $digit, $decimal_point, $thousands) . $sufix;
+
+ return $result;
+ }
+
+ /*Skrajsa tekst in doda '...' na koncu*/
+ function snippet($text,$length=64,$tail="..."){
+
+ $text = trim($text);
+ $txtl = strlen($text);
+ if($txtl > $length){
+ for($i=1;$text[$length-$i]!=" ";$i++){
+ if($i == $length){
+ return substr($text,0,$length) . $tail;
+ }
+ }
+ $text = substr($text,0,$length-$i+1) . $tail;
+ }
+
+ return $text;
+ }
+
+ function encodeText($text){
+
+ // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace(array("&scaron;","&#353;","&#269;"),array("�","�","�"),$text);
+
+ return strip_tags($text);
+ }
+
+}
+
+?>
diff --git a/admin/exportclases/class.rtfIzvozAnalizaOpisne.php b/admin/exportclases/class.rtfIzvozAnalizaOpisne.php
new file mode 100644
index 0000000..bb487ef
--- /dev/null
+++ b/admin/exportclases/class.rtfIzvozAnalizaOpisne.php
@@ -0,0 +1,495 @@
+<?php
+
+require_once("class.enka.rtf.php");
+require_once('../../vendor/autoload.php');
+include_once('../exportclases/class.rtfIzvozAnalizaFunctions.php');
+include_once('../../function.php');
+include_once('../survey/definition.php');
+
+
+define("FNT_TIMES", "Times New Roman", true);
+define("FNT_ARIAL", "Arial", true);
+
+define("FNT_MAIN_TEXT", FNT_TIMES, true);
+define("FNT_QUESTION_TEXT", FNT_TIMES, true);
+define("FNT_HEADER_TEXT", FNT_TIMES, true);
+
+define("FNT_MAIN_SIZE", 12, true);
+define("FNT_QUESTION_SIZE", 10, true);
+define("FNT_HEADER_SIZE", 10, true);
+
+
+class RtfIzvozAnalizaOpisne {
+
+ var $anketa;// = array(); // trenutna anketa
+ var $grupa = null; // trenutna grupa
+ var $usrId = null; // trenutni user
+ var $spremenljivka; // trenutna spremenljivka
+ var $usr_id; // ID trenutnega uporabnika
+ var $printPreview = false; // ali kli?e konstruktor
+ var $pi=array('canCreate'=>false); // za shrambo parametrov in sporocil
+ var $rtf;
+
+ private $headFileName = null; # pot do header fajla
+ private $dataFileName = null; # pot do data fajla
+ private $dataFileStatus = null; # status data datoteke
+
+ var $current_loop = 'undefined';
+
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null, $sprID = null, $loop = null)
+ {
+ global $site_path;
+ global $global_user_id;
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) )
+ {
+ $this->anketa['id'] = $anketa;
+ $this->spremenljivka = $sprID;
+
+ SurveyAnalysis::Init($this->anketa['id']);
+ SurveyAnalysis::$setUpJSAnaliza = false;
+
+ // create new RTF document
+ $this->rtf = new enka_RTF();
+
+ // Poskrbimo za datoteko s podatki
+ $SDF = SurveyDataFile::get_instance();
+ $SDF->init($this->anketa['id']);
+ $SDF->prepareFiles();
+
+ $this->headFileName = $SDF->getHeaderFileName();
+ $this->dataFileName = $SDF->getDataFileName();
+ $this->dataFileStatus = $SDF->getStatus();
+
+ SurveyZankaProfiles :: Init($this->anketa['id'], $global_user_id);
+ $this->current_loop = ($loop != null) ? $loop : $this->current_loop;
+ }
+ else
+ {
+ $this->pi['msg'] = "Anketa ni izbrana!";
+ $this->pi['canCreate'] = false;
+ return false;
+ }
+ if ( SurveyInfo::getInstance()->SurveyInit($this->anketa['id']) && $this->init())
+ {
+ $this->anketa['uid'] = $global_user_id;
+ SurveyUserSetting::getInstance()->Init($this->anketa['id'], $this->anketa['uid']);
+ }
+ else
+ return false;
+ // ce smo prisli do tu je vse ok
+ $this->pi['canCreate'] = true;
+ return true;
+ }
+
+ function getAnketa()
+ { return $this->anketa['id']; }
+
+ function checkCreate()
+ {
+ return $this->pi['canCreate'];
+ }
+
+ function getFile($fileName)
+ {
+ //Close and output rtf document
+// $this->rtf->Output($fileName, 'I');
+ $this->rtf->display($fileName = "analiza.rtf",true);
+ }
+
+
+
+ function init()
+ {
+ global $lang;
+
+ // dodamo avtorja in naslov
+ $this->rtf->WriteTitle();
+ $this->rtf->WriteHeader($this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()), 'left');
+ $this->rtf->WriteHeader($this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()), 'right');
+ $this->rtf->WriteFooter($lang['page']." {PAGE} / {NUMPAGES}", 'right');
+ $this->rtf->set_default_font(FNT_TIMES, FNT_MAIN_SIZE);
+ return true;
+ }
+
+ function createRtf()
+ {
+ global $site_path;
+ global $lang;
+
+ // izpisemo prvo stran
+ //$this->createFrontPage();
+
+ $this->rtf->draw_title($lang['export_analisys_desc']);
+ $this->rtf->new_line(1);
+
+ $this->rtf->MyRTF .= $this->rtf->_font_size(16);
+
+ if ($this->headFileName !== null ) {
+
+ // Preverimo ce imamo zanke (po skupinah)
+ SurveyAnalysis::$_LOOPS = SurveyZankaProfiles::getFiltersForLoops();
+
+ # Äe nimamo zank
+ if(count(SurveyAnalysis::$_LOOPS) == 0){
+
+ $this->displayTables();
+ }
+ else{
+ // izrisemo samo eno tabelo iz enega loopa
+ if($this->current_loop > 0){
+
+ $loop = SurveyAnalysis::$_LOOPS[(int)$this->current_loop-1];
+ $loop['cnt'] = $this->current_loop;
+ SurveyAnalysis::$_CURRENT_LOOP = $loop;
+
+ // Izpisemo naslov zanke za skupino
+ $this->rtf->new_line(1);
+ $this->rtf->set_font("Arial Black", 9);
+ $this->rtf->add_text($this->enkaEncode($lang['srv_zanka_note'].$loop['text']), 'left');
+ $this->rtf->set_font("Arial", 8);
+ $this->rtf->new_line();
+
+ $this->displayTables();
+ }
+ // Izrisemo vse tabele spremenljivka (iz vseh loopov)
+ else{
+ $loop_cnt = 0;
+ # Äe mamo zanke
+ foreach(SurveyAnalysis::$_LOOPS AS $loop) {
+ $loop_cnt++;
+ $loop['cnt'] = $loop_cnt;
+ SurveyAnalysis::$_CURRENT_LOOP = $loop;
+
+ // Izpisemo naslov zanke za skupino
+ $this->rtf->new_line(1);
+ $this->rtf->set_font("Arial Black", 9);
+ $this->rtf->add_text($this->enkaEncode($lang['srv_zanka_note'].$loop['text']), 'left');
+ $this->rtf->set_font("Arial", 8);
+ $this->rtf->new_line();
+
+ $this->displayTables();
+ }
+ }
+ }
+
+ } // end if else ($_headFileName == null)
+ }
+
+ function displayTables(){
+ global $site_path;
+ global $lang;
+ global $global_user_id;
+
+ #preberemo HEADERS iz datoteke
+ SurveyAnalysis::$_HEADERS = unserialize(file_get_contents($this->headFileName));
+
+ # polovimo frekvence
+ SurveyAnalysis::getDescriptives();
+
+ # izpi�emo opisne statistike
+ $vars_count = count(SurveyAnalysis::$_FILTRED_VARIABLES);
+
+ //prva vrstica
+ $this->tableHeader();
+
+ # dodamo �e kontrolo �e kli�emo iz displaySingleVar
+ if (isset($_spid) && $_spid !== null) {
+ SurveyAnalysis::$_HEADERS = array($_spid => SurveyAnalysis::$_HEADERS[$_spid]);
+ }
+
+ #odstranimo sistemske variable
+ SurveyAnalysis::removeSystemVariables();
+
+ foreach (SurveyAnalysis::$_HEADERS AS $spid => $spremenljivka) {
+ # preverjamo ali je meta
+ if ($spremenljivka['tip'] != 'm'
+ && ( count(SurveyAnalysis::$_FILTRED_VARIABLES) == 0 || (count(SurveyAnalysis::$_FILTRED_VARIABLES) > 0 && isset(SurveyAnalysis::$_FILTRED_VARIABLES[$spid]) ))
+ && in_array($spremenljivka['tip'], SurveyAnalysis::$_FILTRED_TYPES)
+ && ($this->spremenljivka == $spid || $this->spremenljivka == null) ) {
+
+ $show_enota = false;
+ # preverimo ali imamo samo eno variablo in �e iammo enoto
+ if ((int)$spremenljivka['enota'] != 0 || $spremenljivka['cnt_all'] > 1 ) {
+ $show_enota = true;
+ }
+
+ # izpi�emo glavno vrstico z podatki
+ $_sequence = null;
+ # za enodimenzijske tipe izpi�emo podatke kar v osnovni vrstici
+ if (!$show_enota) {
+// if ($spremenljivka['tip'] == 1 || $spremenljivka['tip'] == 3
+// || $spremenljivka['tip'] == 4 || $spremenljivka['tip'] == 7 || $spremenljivka['tip'] == 8) {
+ $variable = $spremenljivka['grids'][0]['variables'][0];
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ self::displayDescriptivesSpremenljivkaRow($spid, $spremenljivka,$show_enota,$_sequence);
+ } else {
+ if ($spremenljivka['tip'] == 1 || $spremenljivka['tip'] == 3) {
+ $variable = $spremenljivka['grids'][0]['variables'][0];
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ $show_enota = false;
+ }
+ self::displayDescriptivesSpremenljivkaRow($spid, $spremenljivka,$show_enota,$_sequence);
+ #zloopamo skozi variable
+ $_sequence = null;
+ $grd_cnt=0;
+ if (count($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+
+ if (count($spremenljivka['grids']) > 1 && $grd_cnt !== 0 && $spremenljivka['tip'] != 6) {
+ $grid['new_grid'] = true;
+ }
+ $grd_cnt++;
+ # dodamo dodatne vrstice z albelami grida
+ if (count ($grid['variables']) > 0)
+ foreach ($grid['variables'] AS $vid => $variable ){
+ # dodamo ostale vrstice
+ $do_show = ($variable['other'] !=1 && ($spremenljivka['tip'] == 1 || $spremenljivka['tip'] == 3 || $spremenljivka['tip'] == 5 || $spremenljivka['tip'] == 8 ))
+ ? false
+ : true;
+ if ($do_show) {
+ self::displayDescriptivesVariablaRow($spremenljivka,$grid,$variable,$_css);
+
+ }
+ $grid['new_grid'] = false;
+
+ }
+ }
+ } //else: if (!$show_enota)
+ } // end if $spremenljivka['tip'] != 'm'
+ } // end foreach SurveyAnalysis::$_HEADERS
+
+ $this->tableEnd();
+ }
+
+
+ /** Izri�e vrstico z opisnimi
+ *
+ * @param unknown_type $spremenljivka
+ * @param unknown_type $variable
+ */
+ function displayDescriptivesVariablaRow($spremenljivka,$grid,$variable=null) {
+ global $lang;
+
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if ($_sequence != null) {
+ $_desc = SurveyAnalysis::$_DESCRIPTIVES[$_sequence];
+ }
+
+ $text = array();
+
+ $text[] = $this->encodeText($variable['variable']);
+ $text[] = $this->encodeText($variable['naslov']);
+
+ #veljavno
+ $text[] = $this->encodeText((int)$_desc['validCnt']);
+
+ #ustrezno
+ $text[] = $this->encodeText((int)$_desc['allCnt']);
+
+ if (isset($_desc['avg']) && (int)$spremenljivka['skala'] !== 1)
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($_desc['avg'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),''));
+ else if (isset($_desc['avg']) && $spremenljivka['tip'] == 2 && (int)$spremenljivka['skala'] == 1 )
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($_desc['avg']*100,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'&nbsp;%'));
+ else
+ $text[] = $this->encodeText('&nbsp; ');
+
+ if (isset($_desc['div']) && (int)$spremenljivka['skala'] !== 1)
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($_desc['div'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_DEVIATION'),''));
+ else
+ $text[] = $this->encodeText('&nbsp; ');
+
+ $text[] = $this->encodeText((int)$spremenljivka['skala'] !== 1 ? $_desc['min'] : '');
+ $text[] = $this->encodeText((int)$spremenljivka['skala'] !== 1 ? $_desc['max'] : '');
+
+ $this->tableRow($text);
+
+ }
+
+ /** Izri�e vrstico z opisnimi
+ *
+ * @param unknown_type $spremenljivka
+ * @param unknown_type $variable
+ */
+ function displayDescriptivesSpremenljivkaRow($spid,$spremenljivka,$show_enota,$_sequence = null) {
+ global $lang;
+
+ if ($_sequence != null) {
+ $_desc = SurveyAnalysis::$_DESCRIPTIVES[$_sequence];
+ }
+
+ $text = array();
+
+ $text[] = $this->encodeText($spremenljivka['variable']);
+ $text[] = $this->encodeText($spremenljivka['naslov']);
+
+ #veljavno
+ $text[] = $this->encodeText((!$show_enota ? (int)$_desc['validCnt'] : '&nbsp; '));
+
+ #ustrezno
+ $text[] = $this->encodeText((!$show_enota ? (int)$_desc['allCnt'] : '&nbsp; '));
+
+ if (isset($_desc['avg']) && (int)$spremenljivka['skala'] !== 1)
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($_desc['avg'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),''));
+ else
+ $text[] = $this->encodeText('&nbsp; ');
+
+ if (isset($_desc['div']) && (int)$spremenljivka['skala'] !== 1)
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($_desc['div'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_DEVIATION'),''));
+ else
+ $text[] = $this->encodeText('&nbsp; ');
+
+ $text[] = $this->encodeText((int)$spremenljivka['skala'] !== 1 ? $_desc['min'] : '');
+ $text[] = $this->encodeText((int)$spremenljivka['skala'] !== 1 ? $_desc['max'] : '');
+
+ $params = array('bold' => 'B');
+
+ $this->tableRow($text, $params);
+ }
+
+
+ function createFrontPage()
+ {
+ global $lang;
+
+ $this->rtf->new_line(10);
+ $this->rtf->TextCell($this->encodeText( SurveyInfo::getInstance()->getSurveyTitle()), array('width' => 9500, 'height' => 3,
+ 'align' => 'center', 'valign' => 'middle' , 'border' => array('top','bottom', 'left','right'),
+ 'colorF' => "0", 'colorB' => "0" ) );
+ $this->rtf->new_line(3);
+ // dodamo info:
+ $this->rtf->TextCell("", array('width' => 9500, 'height' => 1,
+ 'align' => 'left', 'valign' => 'bottom' , 'border' => array('bottom'),'colorF' => "0" ) );
+
+ $infoTable = array();
+
+ $imenaTable = array();
+ if ( SurveyInfo::getInstance()->getSurveyTitle() != SurveyInfo::getInstance()->getSurveyAkronim() )
+ $imenaTable[] = array($lang['export_firstpage_shortname'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()), "");
+ if ( SurveyInfo::getInstance()->getSurveyTitle() != SurveyInfo::getInstance()->getSurveyAkronim() )
+ $imenaTable[] = array($lang['export_firstpage_longname'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyTitle()), "");
+
+ $imenaTable[] = array($lang['export_firstpage_qcount'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyQuestionCount()), "" );
+ $imenaTable[] = array($lang['export_firstpage_active_from'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyStartsDate()),"" );
+ $imenaTable[] = array($lang['export_firstpage_active_until'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyExpireDate()),"" );
+ $imenaTable[] = array($lang['export_firstpage_author'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyInsertName()),"" );
+ $imenaTable[] = array($lang['export_firstpage_edit'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyEditName()),"" );
+ $imenaTable[] = array($lang['export_firstpage_date'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyInsertDate()),"" );
+ $imenaTable[] = array($lang['export_firstpage_date'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyEditDate()),"" );
+ $imenaTable[] = array($lang['export_firstpage_desc'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyInfo()),"" );
+ $this->rtf->TableFromArray( array( 4600, 4600 ), $imenaTable);
+
+ $this->rtf->new_page();
+ }
+
+ function enkaEncode($text){ // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ return strip_tags($text);
+ }
+
+ function encodeText($text){ // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace(array("&scaron;","&#353;","&#269;"),array("�","�","�"),$text);
+ return strip_tags($text);
+ }
+
+ /* Skrajsa niz in doda ... nakoncu
+ * snippet(phrase,[max length],[phrase tail])
+ * snippetgreedy(phrase,[max length before next space],[phrase tail])
+ *
+ * iz: http://snipplr.com/view/9520/php-substring-without-breaking-words/
+ */
+ function snippet($text,$length=64,$tail="...")
+ {
+ $text = trim($text);
+ $txtl = strlen($text);
+ if($txtl > $length)
+ {
+ for($i=1;$text[$length-$i]!=" ";$i++)
+ {
+ if($i == $length)
+ {
+ return substr($text,0,$length) . $tail;
+ }
+ }
+ $text = substr($text,0,$length-$i+1) . $tail;
+ }
+ return $text;
+ }
+
+ function setGrupa($grupa) {$this->grupa = $grupa;}
+ function getGrupa() {return $this->grupa;}
+ function setUserId($usrId) {$this->usrId = $usrId;}
+ function getUserId() {return ($this->usrId)?$this->usrId:false;}
+ function setDisplayFrontPage($display) {$this->pi['displayFrontPage'] = $display;}
+ function getDisplayFrontPage() {return ($this->pi['displayFrontPage'] == true || $this->pi['displayFrontPage'] == 1);}
+
+
+ function tableHeader(){
+ global $lang;
+
+ $this->rtf->MyRTF .= "{\par";
+
+ $text = array();
+
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_variable']);
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_variable_text']);
+
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_m']);
+ $text[] = $this->encodeText($lang['srv_analiza_num_units']);
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_povprecje']);
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_odklon']);
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_min']);
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_max']);
+
+ $params = array('borderT' => 1, 'borderB' => 1, 'bold' => 'B', 'align2' => 'C');
+
+ $this->tableRow($text, $params);
+ }
+
+ function tableRow($arrayText, $arrayParams=0){
+
+ $defw_full = 10300;
+ $defw_part = 1100;
+ $defw_part2 = 2600;
+
+ //$borderB = ($arrayParams['borderB']==1 ? '\clbrdrb\brdrs\brdrw10' : '');
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = ($arrayParams['borderT']==1 ? '\clbrdrt\brdrs\brdrw10' : '');
+ $align = ($arrayParams['align2']=='C' ? '\qc' : '\ql');
+ $bold = ($arrayParams['bold']=='B' ? '\b' : '\b0');
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($arrayText[0]),20,'...') . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->enkaEncode($arrayText[1]). $align . '\cell';
+
+ for($i=0; $i<6; $i++){
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( ($i+2) * $defw_part + $defw_part2);
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($arrayText[$i+2]),20,'...').'\qc\cell';
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+ }
+
+ function tableEnd(){
+
+ $this->rtf->MyRTF .= "}";
+ $this->rtf->new_line(1);
+ }
+
+}
+
+
+?>
diff --git a/admin/exportclases/class.rtfIzvozAnalizaSums.php b/admin/exportclases/class.rtfIzvozAnalizaSums.php
new file mode 100644
index 0000000..2dd16df
--- /dev/null
+++ b/admin/exportclases/class.rtfIzvozAnalizaSums.php
@@ -0,0 +1,2532 @@
+<?php
+
+ global $site_path;
+
+ include_once('../../function.php');
+ include_once('../survey/definition.php');
+ include_once('../exportclases/class.rtfIzvozAnalizaFunctions.php');
+ require_once("class.enka.rtf.php");
+
+ define("FNT_TIMES", "Times New Roman", true);
+ define("FNT_ARIAL", "Arial", true);
+
+ define("FNT_MAIN_TEXT", FNT_TIMES, true);
+ define("FNT_QUESTION_TEXT", FNT_TIMES, true);
+ define("FNT_HEADER_TEXT", FNT_TIMES, true);
+
+ define("FNT_MAIN_SIZE", 18, true);
+ define("FNT_QUESTION_SIZE", 10, true);
+ define("FNT_HEADER_SIZE", 10, true);
+
+ define("M_ANALIZA_DESCRIPTOR", "descriptor", true);
+ define("M_ANALIZA_FREQUENCY", "frequency", true);
+ define("ALLOW_HIDE_ZERRO_REGULAR", false); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za navadne odgovore
+ define("ALLOW_HIDE_ZERRO_MISSING", true); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za missinge
+
+
+class RtfIzvozAnalizaSums {
+
+ var $anketa;// = array(); // trenutna anketa
+ var $grupa = null; // trenutna grupa
+ var $usrId = null; // trenutni user
+ var $spremenljivka; // trenutna spremenljivka
+ var $usr_id; // ID trenutnega uporabnika
+ var $printPreview = false; // ali kli?e konstruktor
+ var $pi=array('canCreate'=>false); // za shrambo parametrov in sporocil
+ var $rtf;
+
+ private $headFileName = null; # pot do header fajla
+ private $dataFileName = null; # pot do data fajla
+ private $dataFileStatus = null; # status data datoteke
+
+ var $current_loop = 'undefined';
+
+ static public $_FILTRED_OTHER = array(); # filter za polja drugo
+
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null, $sprID = null, $loop = null)
+ {
+ global $site_path;
+ global $global_user_id;
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) ){
+
+ $this->anketa['id'] = $anketa;
+ $this->spremenljivka = $sprID;
+
+ SurveyAnalysis::Init($this->anketa['id']);
+ SurveyAnalysis::$setUpJSAnaliza = false;
+
+ // create new RTF document
+ $this->rtf = new enka_RTF();
+
+ // Poskrbimo za datoteko s podatki
+ $SDF = SurveyDataFile::get_instance();
+ $SDF->init($this->anketa['id']);
+ $SDF->prepareFiles();
+
+ $this->headFileName = $SDF->getHeaderFileName();
+ $this->dataFileName = $SDF->getDataFileName();
+ $this->dataFileStatus = $SDF->getStatus();
+
+ SurveyZankaProfiles :: Init($this->anketa['id'], $global_user_id);
+ $this->current_loop = ($loop != null) ? $loop : $this->current_loop;
+ }
+ else{
+ $this->pi['msg'] = "Anketa ni izbrana!";
+ $this->pi['canCreate'] = false;
+ return false;
+ }
+
+
+ if ( SurveyInfo::getInstance()->SurveyInit($this->anketa['id']) && $this->init()){
+ $this->anketa['uid'] = $global_user_id;
+ SurveyUserSetting::getInstance()->Init($this->anketa['id'], $this->anketa['uid']);
+ }
+ else
+ return false;
+
+ // ce smo prisli do tu je vse ok
+ $this->pi['canCreate'] = true;
+
+ return true;
+ }
+
+ function getAnketa()
+ { return $this->anketa['id']; }
+
+ function checkCreate()
+ {
+ return $this->pi['canCreate'];
+ }
+
+ function getFile($fileName)
+ {
+ //Close and output rtf document
+// $this->rtf->Output($fileName, 'I');
+ $this->rtf->display($fileName = "analiza.rtf",true);
+ }
+
+ function init()
+ {
+ global $lang;
+
+ // dodamo avtorja in naslov
+ $this->rtf->WriteTitle();
+ $this->rtf->WriteHeader($this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()), 'left');
+ $this->rtf->WriteHeader($this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()), 'right');
+ $this->rtf->WriteFooter($lang['page']." {PAGE} / {NUMPAGES}", 'right');
+ $this->rtf->set_default_font(FNT_TIMES, FNT_MAIN_SIZE);
+ return true;
+ }
+
+ function createRtf()
+ {
+ global $site_path;
+ global $lang;
+
+ // izpisemo prvo stran
+ //$this->createFrontPage();
+
+ $this->rtf->draw_title($lang['export_analisys_sums']);
+ $this->rtf->new_line(1);
+
+ $this->rtf->MyRTF .= $this->rtf->_font_size(16);
+
+ # preberemo header
+ if ($this->dataFileStatus == FILE_STATUS_NO_DATA || $this->dataFileStatus == FILE_STATUS_NO_FILE || $this->dataFileStatus == FILE_STATUS_SRV_DELETED) {
+
+ $this->rtf->draw_title('NAPAKA!!! Manjkajo datoteke s podatki.');
+
+ } else {
+
+ //polovimo podatke o nastavitvah trenutnega profila (missingi..)
+ SurveyAnalysis::$missingProfileData = SurveyMissingProfiles::getProfile(SurveyAnalysis::$currentMissingProfile);
+
+ // Preverimo ce imamo zanke (po skupinah)
+ SurveyAnalysis::$_LOOPS = SurveyZankaProfiles::getFiltersForLoops();
+
+ # Äe nimamo zank
+ if(count(SurveyAnalysis::$_LOOPS) == 0){
+
+ $this->displayTables();
+ }
+ else{
+ // izrisemo samo eno tabelo iz enega loopa
+ if($this->current_loop > 0){
+
+ $loop = SurveyAnalysis::$_LOOPS[(int)$this->current_loop-1];
+ $loop['cnt'] = $this->current_loop;
+ SurveyAnalysis::$_CURRENT_LOOP = $loop;
+
+ // Izpisemo naslov zanke za skupino
+ $this->rtf->new_line(1);
+ $this->rtf->set_font("Arial Black", 9);
+ $this->rtf->add_text($this->enkaEncode($lang['srv_zanka_note'].$loop['text']), 'left');
+ $this->rtf->set_font("Arial", 8);
+ $this->rtf->new_line();
+
+ $this->displayTables();
+ }
+ // Izrisemo vse tabele spremenljivka (iz vseh loopov)
+ else{
+ $loop_cnt = 0;
+ # Äe mamo zanke
+ foreach(SurveyAnalysis::$_LOOPS AS $loop) {
+ $loop_cnt++;
+ $loop['cnt'] = $loop_cnt;
+ SurveyAnalysis::$_CURRENT_LOOP = $loop;
+
+ // Izpisemo naslov zanke za skupino
+ $this->rtf->new_line(1);
+ $this->rtf->set_font("Arial Black", 9);
+ $this->rtf->add_text($this->enkaEncode($lang['srv_zanka_note'].$loop['text']), 'left');
+ $this->rtf->set_font("Arial", 8);
+ $this->rtf->new_line();
+
+ $this->displayTables();
+ }
+ }
+ }
+
+ } // end if else ($_headFileName == null)
+ }
+
+ function displayTables(){
+ global $site_path;
+ global $lang;
+ global $global_user_id;
+
+ #preberemo HEADERS iz datoteke
+ SurveyAnalysis::$_HEADERS = unserialize(file_get_contents($this->headFileName));
+ # polovimo frekvence
+ SurveyAnalysis::getFrequencys();
+
+ #odstranimo sistemske variable
+ SurveyAnalysis::removeSystemVariables();
+
+ $vars_count = count(SurveyAnalysis::$_FILTRED_VARIABLES);
+ $line_break = '';
+ foreach (SurveyAnalysis::$_HEADERS AS $spid => $spremenljivka) {
+ # preverjamo ali je meta
+ if (($spremenljivka['tip'] != 'm'
+ && in_array($spremenljivka['tip'], SurveyAnalysis::$_FILTRED_TYPES ))
+ && (!isset($_spid) || (isset($_spid) && $_spid == $spid))
+ && ($this->spremenljivka == $spid || $this->spremenljivka == null) ) {
+ # ali imamo sfiltrirano spremenljivko
+ if ($vars_count == 0 || ($vars_count > 0 && isset(SurveyAnalysis::$_FILTRED_VARIABLES[$spid]) ) ) {
+
+ # prikazujemo v odvisnosti od kategorije spremenljivke
+ switch ($spremenljivka['tip']) {
+ case 1:
+ # radio - prikaže navpiÄno
+ self::sumVertical($spid,'sums');
+ break;
+
+ case 2:
+ #checkbox Äe je dihotomna:
+ self::sumVerticalCheckbox($spid,'sums');
+ break;
+
+ case 3:
+ # dropdown - prikjaže navpiÄno
+ self::sumVertical($spid,'sums');
+ break;
+
+ case 6:
+ # multigrid
+ self::sumHorizontal($spid,'sums');
+ break;
+
+ case 16:
+ #multicheckbox Äe je dihotomna:
+ self::sumMultiHorizontalCheckbox($spid,'sums');
+ break;
+
+ case 17:
+ #razvrÅ¡Äanje Äe je ordinalna
+ self::sumHorizontal($spid,'sums');
+ break;
+
+ case 4: # text
+ case 8: # datum
+ self::sumTextVertical($spid,'sums');
+ break;
+
+ case 21: # besedilo*
+ # varabla tipa »besedilo« je v sumarniku IDENTIČNA kot v FREKVENCAH.
+ if ($spremenljivka['cnt_all'] == 1) {
+ // Äe je enodimenzionalna prikažemo kot frekvence
+ // predvsem zaradi vprašanj tipa: language, email...
+ self::sumTextVertical($spid,'sums');
+ } else {
+ self::sumMultiText($spid,'sums');
+ }
+ break;
+
+ case 19: # multitext
+ self::sumMultiText($spid,'sums');
+ break;
+
+ case 7:
+ case 18:
+ case 22:
+ # variabla tipa »število« je v sumarniku identiÄna kot v DESCRIPTIVES.
+ self::sumNumberVertical($spid,'sums');
+ break;
+
+ case 20:
+ # variabla tipa »število« je v sumarniku identiÄna kot v DESCRIPTIVES.
+ self::sumMultiNumber($spid,'sums');
+ break;
+
+ case 5:
+ # nagovor
+ self::sumNagovor($spid,'sums');
+ break;
+
+ case 26: # lokacija
+ self::sumLokacija($spid,'sums');
+ break;
+ }
+
+ }
+
+ } // end if $spremenljivka['tip'] != 'm'
+
+ } // end foreach self::$_HEADERS
+ }
+
+
+ /** Izriše sumarnik v vertikalni obliki
+ *
+ * @param unknown_type $spid
+ */
+ function sumVertical($spid,$_from) {
+ global $lang;
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+ # dodamo opcijo kje izrisujemo legendo
+ $inline_legenda = false;
+ $options=array('inline_legenda' => $inline_legenda, 'isTextAnswer' => false, 'isOtherAnswer' => false);
+
+ //prva vrstica
+ $this->tableFirstLine($spremenljivka['variable'], $spremenljivka['naslov']);
+
+ //druga vrstica
+ $this->tableHeader();
+
+ $show_valid_percent = (SurveyAnalysis::$_HEADERS[$spid]['show_valid_percent'] == true) ? 1 : 0;
+ // konec naslovne vrstice
+
+
+ $_answersOther = array();
+ $sum_xi_fi=0;
+ $N = 0;
+
+ $_tmp_for_div = array();
+ # izpišemo vlejavne odgovore
+ if (count($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ # dodamo dodatne vrstice z albelami grida
+ if (count($grid['variables']) > 0 )
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if ($variable['text'] != true && $variable['other'] != true) {
+
+ $maxAnswer = (SurveyDataSettingProfiles :: getSetting('numOpenAnswers') > 0) ? SurveyDataSettingProfiles :: getSetting('numOpenAnswers') : 30;
+ $counter = 0;
+ $_kumulativa = 0;
+
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'] AS $vkey => $vAnswer) {
+
+ // za povpreÄje
+ $xi = $vkey;
+ $fi = $vAnswer['cnt'];
+
+ $sum_xi_fi += $xi * $fi ;
+ $N += $fi;
+
+ if ($vAnswer['cnt'] > 0 /*&& $counter < $maxAnswer*/ || true) { # izpisujemo samo tiste ki nisno 0
+
+ $counter = self::outputValidAnswerVertical($counter,$vkey,$vAnswer,$_sequence,$spid,$_kumulativa,$options);
+ }
+ # za poznejÅ¡e raÄunannje odklona
+ $_tmp_for_div[] = array('xi'=>$xi, 'fi'=>$fi, 'sequence'=>$_sequence);
+ }
+ # izpišemo sumo veljavnih
+ $counter = self::outputSumaValidAnswerVertical($counter,$_sequence,$spid,$options);
+ }
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'] AS $ikey => $iAnswer) {
+ if ($iAnswer['cnt'] > 0 ) { # izpisujemo samo tiste ki nisno 0
+ $counter = self::outputInvalidAnswerVertical($counter,$ikey,$iAnswer,$_sequence,$spid,$options);
+ }
+ }
+ # izpišemo sumo veljavnih
+ $counter = self::outputSumaInvalidAnswerVertical($counter,$_sequence,$spid,$options);
+ }
+ #izpišemo še skupno sumo
+ $counter = self::outputSumaVertical($counter,$_sequence,$spid,$options);
+ } else {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ }
+ }
+
+ # odklon
+ $avg = ($N > 0) ? $sum_xi_fi / $N : 0;
+ #standardna diviacija
+ $div = 0;
+ $sum_pow_xi_fi_avg = 0;
+ foreach ( $_tmp_for_div as $tkey => $_tmp_div_data) {
+ $xi = $_tmp_div_data['xi'];
+ $fi = $_tmp_div_data['fi'];
+
+ $sum_pow_xi_fi_avg += pow(($xi - $avg),2) * $fi;
+ }
+ $div = (($N -1) > 0) ? sqrt($sum_pow_xi_fi_avg / ($N -1)) : 0;
+
+ $this->rtf->MyRTF .= "}";
+
+ # izpiÅ¡emo Å¡e odklon in povpreÄje
+ if ($show_valid_percent == 1 && SurveyAnalysis::$_HEADERS[$spid]['skala'] != 1) {
+
+ $this->rtf->MyRTF .= "{\par";
+
+ $defw_full = 10300;
+ $defw_part0 = 1100;
+ $defw_part = 1300;
+ $defw_part2 = 4000;
+
+ $bold = '\b0';
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '\clbrdrt\brdrs\brdrw10';
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table .= '\clvertalc\cellx'.( $defw_part0 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode('&nbsp; '),20,'...') . '\qc\cell';
+
+ $table .= '\clvertalc\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode('&nbsp; '),20,'...') . '\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part + $defw_part2);
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($lang['srv_analiza_opisne_povprecje']),20,'...').'\qc\cell';
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 2*$defw_part + $defw_part2);
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode(SurveyAnalysis::formatNumber($avg,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'')),20,'...').'\qc\cell';
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 3*$defw_part + $defw_part2);
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($lang['srv_analiza_opisne_odklon']),20,'...').'\qc\cell';
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 4*$defw_part + $defw_part2);
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode(SurveyAnalysis::formatNumber($div,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'')),20,'...').'\qc\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+ $this->tableEnd();
+ }
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ self::outputOtherAnswers($oAnswers);
+ $this->tableEnd();
+ }
+ }
+ }
+
+ function sumVerticalCheckbox($spid,$_from) {
+ global $lang;
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+ $_answersOther = array();
+
+ $inline_legenda = count ($spremenljivka['grids']) > 1;
+ if ($variable['other'] != '1' && $variable['text'] != '1') {
+ $_tip = SurveyAnalysis::getSpremenljivkaLegenda($spremenljivka,'izrazanje');
+ $_oblika = SurveyAnalysis::getSpremenljivkaLegenda($spremenljivka,'skala');
+ } else {
+ $_tip = $lang['srv_analiza_vrsta_bese'];
+ $_oblika = $lang['srv_analiza_oblika_nomi'];
+ }
+ # ugotovimo koliko imamo kolon
+ if (count($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $_clmn_cnt[$gid] = $grid['cnt_vars']-$grid['cnt_other'];
+ if (count ($grid['variables']) > 0)
+ foreach ($grid['variables'] AS $vid => $variable) {
+ $_sequence = $variable['sequence'];
+ $_valid_cnt[$gid] = max($_valid_cnt[$gid], SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt']);
+ $_approp_cnt[$gid] = max($_approp_cnt[$gid], SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt']);
+ if ($variable['other'] == true) {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ $_valid[$gid][$vid] = SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'];
+ $_navedbe[$gid] += SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt'];
+ }
+ }
+
+
+ //prva vrstica
+ $this->tableFirstLine($spremenljivka['variable'], $spremenljivka['naslov']);
+
+ //druga vrstica
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part = 1000;
+ $defw_part2 = 2400;
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $align = '\ql';
+ $bold = '\b';
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode('&nbsp; '),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($lang['srv_analiza_opisne_subquestion']),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 5 * $defw_part + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($lang['srv_analiza_opisne_units']),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 7 * $defw_part + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($lang['srv_analiza_opisne_arguments']),20,'...') . $align . '\qc\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+ //tretja vrstica
+ $text = array();
+
+ $text[] = '';
+ $text[] = '';
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_frequency']);
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_valid']);
+ $text[] = $this->encodeText('% - '.$lang['srv_analiza_opisne_valid']);
+ $text[] = $this->encodeText($lang['srv_analiza_num_units_valid']);
+ $text[] = $this->encodeText('% - '.$lang['srv_analiza_num_units_valid']);
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_frequency']);
+ $text[] = $this->encodeText('%');
+
+ $this->tableRowVerticalCheckbox($text);
+ //konec naslovnih vrstic
+
+ $_max_valid = 0;
+ $_max_appropriate = 0;
+ if (count ($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] as $gid => $grid) {
+ if (count ($grid['variables']) > 0)
+ foreach ($grid['variables'] AS $vid => $variable) {
+ if ($variable['other'] != 1) {
+ $_sequence = $variable['sequence'];
+
+ $text = array();
+
+ $text[] = $this->encodeText($variable['variable']);
+ $text[] = $this->encodeText($variable['naslov']);
+
+ // Frekvence
+ $text[] = $this->encodeText((int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt']);
+
+ // Veljavni
+ $text[] = $this->encodeText((int)(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt']+(int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['0']['cnt']));
+
+ // Veljaveni %
+ $_percent = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] > 0 ) ? 100*SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] : 0;
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($_percent,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%'));
+
+ $_max_appropriate = max($_max_appropriate, (int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt']);
+ $_max_valid = max ($_max_valid, ((int)(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt']+(int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['0']['cnt'])));
+
+ // Ustrezni
+ $text[] = $this->encodeText((int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt']);
+
+ // % Ustrezni
+ $valid = (int)(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt']+(int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['0']['cnt']);
+ $valid = (int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt'];
+ $_percent = ($_max_appropriate > 0 ) ? 100*$valid / $_max_appropriate : 0;
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($_percent,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%'));
+
+ $text[] = $this->encodeText(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt']);
+
+ $_percent = ($_navedbe[$gid] > 0 ) ? 100*SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt'] / $_navedbe[$gid] : 0;
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($_percent,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%'));
+
+ $this->tableRowVerticalCheckbox($text);
+
+ } else {
+ # drugo
+ }
+ }
+
+ $text = array();
+
+ $text[] = '';
+
+ $text[] = $this->encodeText($lang['srv_anl_suma_valid']);
+
+ $text[] = '';
+
+ $text[] = $this->encodeText($_max_valid);
+ $text[] = '';
+
+ $text[] = $this->encodeText($_max_appropriate);
+ $text[] = '';
+
+ $text[] = $this->encodeText($_navedbe[$gid]);
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber('100',SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%'));
+
+ $this->tableRowVerticalCheckbox($text);
+ }
+ $this->tableEnd();
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ self::outputOtherAnswers($oAnswers);
+ $this->tableEnd();
+ }
+ }
+ }
+
+ /** Izriše nagovor
+ *
+ */
+ function sumNagovor($spid,$_from) {
+ global $lang;
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+ $_tip = SurveyAnalysis::getSpremenljivkaLegenda($spremenljivka,'izrazanje');
+ $_oblika = SurveyAnalysis::getSpremenljivkaLegenda($spremenljivka,'skala');
+
+ self::tableFirstLine($spremenljivka['variable'], $spremenljivka['naslov']);
+ self::tableEnd();
+ }
+
+ /** Izriše number odgovore v vertikalni obliki
+ *
+ * @param unknown_type $spid
+ */
+ function sumNumberVertical($spid,$_from) {
+ global $lang;
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ # dodamo opcijo kje izrisujemo legendo
+ # Äe je besedilo * in je samo ena kategorija je inline legenda false
+ $inline_legenda = (SurveyAnalysis::$_HEADERS[$spid]['cnt_all'] == 1 || in_array($spremenljivka['tip'],array(1,8) ) ) ? false: true;
+ $options=array('inline_legenda' => $inline_legenda, 'isTextAnswer' => false, 'isOtherAnswer' => false, 'textAnswerExceed' => false);
+
+ # ali izpisujemo enoto:
+ $show_enota = true;
+ if ((int)$spremenljivka['enota'] == 0 && SurveyAnalysis::$_HEADERS[$spid]['cnt_all'] == 1) {
+ $show_enota = false;
+ }
+
+ # ugotovimo koliko imamo kolon
+ if (count($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $_clmn_cnt[$gid] = $grid['cnt_vars']-$grid['cnt_other'];
+ if (count($grid['variables']) > 0)
+ foreach ($grid['variables'] AS $vid => $variable) {
+ $_sequence = $variable['sequence'];
+ $_approp_cnt[$gid] = max($_approp_cnt[$gid], SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt']);
+
+ # za povpreÄje
+ $sum_xi_fi=0;
+ $N = 0;
+ $div=0;
+ $min = null;
+ $max = null;
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']) > 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'] AS $xi => $_validFreq) {
+
+ $fi = $_validFreq['cnt'];
+ $sum_xi_fi += $xi * $fi ;
+ $N += $fi;
+ $min = $min != null ? min($min,$xi) : $xi;
+ $max = max($max,$xi);
+ }
+ }
+
+ #povpreÄje
+ $avg = ($N > 0) ? $sum_xi_fi / $N : 0;
+ $sum_avg += $avg;
+ SurveyAnalysis::$_FREQUENCYS[$_sequence]['validAvg'] = $avg;
+ SurveyAnalysis::$_FREQUENCYS[$_sequence]['validMin'] = $min;
+ SurveyAnalysis::$_FREQUENCYS[$_sequence]['validMax'] = $max;
+
+ #standardna diviacija
+ $div = 0;
+ $sum_pow_xi_fi_avg = 0;
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']) > 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'] AS $xi => $_validFreq) {
+ $fi = $_validFreq['cnt'];
+ $sum_pow_xi_fi_avg += pow(($xi - $avg),2) * $fi;
+ }
+ }
+ SurveyAnalysis::$_FREQUENCYS[$_sequence]['validDiv'] = (($N -1) > 0) ? sqrt($sum_pow_xi_fi_avg / ($N -1)) : 0;
+
+ #doloÄimo Å¡e polja drugo za kasnejÅ¡i prikaz
+ if ($variable['other'] == true) {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ }
+ }
+
+ //prva vrstica
+ $this->tableFirstLine($spremenljivka['variable'], $spremenljivka['naslov']);
+
+ //druga vrstica
+ $text = array();
+
+ $text[] = '&nbsp; ';
+
+ if ($show_enota) {
+ if ($spremenljivka['tip'] == 20 || $spremenljivka['tip'] == 7) {
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_subquestion']);;
+ } else {
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_variable_text']);
+ }
+ } else {
+ $text[] = '&nbsp; ';
+ }
+
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_m']);
+ $text[] = $this->encodeText($lang['srv_analiza_num_units']);
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_povprecje']);
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_odklon']);
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_min']);
+ $text[] = $this->encodeText($lang['srv_analiza_opisne_max']);
+
+ $params = array('bold' => 'B');
+
+ $this->tableRowNumberVertical($text, $params);
+ //konec naslovnih vrstic
+
+ $_answersOther = array();
+ $_grupa_cnt = 0;
+ if (count($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ if (count($spremenljivka['grids']) > 1 && $_grupa_cnt !== 0 && $spremenljivka['tip'] != 6) {
+ $grid['new_grid'] = true;
+ }
+
+ $_grupa_cnt ++;
+ if (count($grid['variables']) > 0) {
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if ($variable['other'] != true) {
+ $_sequence = $variable['sequence'];
+
+ $text = array();
+
+ if ($spremenljivka['tip'] != 7 ) {
+ $text[] = $this->encodeText($variable['variable']);
+ }
+ else
+ $text[] = '&nbsp; ';
+
+ if ($show_enota) {
+ $text[] = $this->encodeText((count($grid['variables']) > 1 && $spremenljivka['tip'] == 20 ? $grid['naslov'] . ' - ' : '' ).$variable['naslov']);
+ } else {
+ $text[] = '&nbsp; ';;
+ }
+
+ $text[] = $this->encodeText((int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt']);
+ $text[] = $this->encodeText((int)$_approp_cnt[$gid]);
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber(SurveyAnalysis::$_FREQUENCYS[$_sequence]['validAvg'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),''));
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber(SurveyAnalysis::$_FREQUENCYS[$_sequence]['validDiv'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_DEVIATION'),''));
+ $text[] = $this->encodeText((int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['validMin']);
+ $text[] = $this->encodeText((int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['validMax']);
+
+ $this->tableRowNumberVertical($text);
+
+ } else {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ $grid['new_grid'] = false;
+ }
+
+ }
+ }
+ $this->tableEnd();
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ self::outputOtherAnswers($oAnswers);
+ $this->tableEnd();
+ }
+ }
+ }
+
+ /** Izriše sumarnik v horizontalni obliki za multigrid
+ *
+ * @param unknown_type $spid - spremenljivka ID
+ */
+ function sumHorizontal($spid,$_from) {
+ global $lang;
+
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+ $_answersOther = array();
+ $_clmn_cnt = count($spremenljivka['options']);
+
+ # pri razvrÅ¡Äanju dodamo dva polja za povpreÄje in odklon
+ $additional_field = false;
+ $add_fld = 0;
+
+ if ($spremenljivka['tip'] == 17 || $spremenljivka['tip'] == 1 || $spremenljivka['tip'] == 3 || ($spremenljivka['tip'] == 6 && $spremenljivka['skala'] != 1)) {
+ $additional_field = true;
+ $add_fld = 2;
+ }
+
+ # pri radiu in dropdown ne prikazujemo podvprašanj
+ $_sub_question_col = 1;
+ if ($spremenljivka['tip'] == 1 || $spremenljivka['tip'] == 3) {
+ $_sub_question_col = 0;
+ }
+
+ //prva vrstica
+ $this->tableFirstLine($spremenljivka['variable'], $spremenljivka['naslov']);
+
+ //druga vrstica
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part = 750;
+ $defw_part2 = 1800;
+ $defw_part3 = 4600;
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '';
+ $align = '\ql';
+ $bold = '\b';
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode('&nbsp; '),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($lang['srv_analiza_opisne_subquestion']),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + $defw_part3 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($lang['srv_analiza_opisne_answers']),20,'...') . $align . '\qc\cell';
+
+ if ($additional_field){
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($lang['srv_analiza_opisne_valid']),20,'...').'\qc\cell';
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 2 * $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($lang['srv_analiza_num_units']),20,'...').'\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 3 * $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($lang['srv_analiza_opisne_povprecje']),20,'...').'\qc\cell';
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 4 * $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($lang['srv_analiza_opisne_odklon']),20,'...').'\qc\cell';
+ }
+ else{
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 2 * $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($lang['srv_analiza_opisne_valid']),20,'...').'\qc\cell';
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 4 * $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($lang['srv_analiza_num_units']),20,'...').'\qc\cell';
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+ $_variables = $grid['variables'];
+
+ //tretja vrstica
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part = 750;
+ $defw_part2 = 1800;
+ $defw_part3 = 4600;
+
+ //$borderB = ($arrayParams['borderB']==1 ? '\clbrdrb\brdrs\brdrw10' : '');
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '';
+ $align = '';
+ $bold = '\b0';
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode('&nbsp; '),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode('&nbsp; '),20,'...') . $align . '\cell';
+
+ $defw_dynamic = round($defw_part3 / ($_clmn_cnt+1));
+ $count = 1;
+ if (count($spremenljivka['options']) > 0) {
+ foreach ( $spremenljivka['options'] as $key => $kategorija) {
+ // misinge imamo zdruzene
+ $_label = $kategorija;
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + ($count * $defw_dynamic) );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($_label),20,'...').'\qc\cell';
+
+ $count++;
+ }
+ }
+
+ //suma
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($lang['srv_anl_suma1']),20,'...').'\qc\cell';
+
+ if ($additional_field){
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode('&nbsp; '),20,'...').'\qc\cell';
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 2 * $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode('&nbsp; '),20,'...').'\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 3 * $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode('&nbsp; '),20,'...').'\qc\cell';
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 4 * $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode('&nbsp; '),20,'...').'\qc\cell';
+ }
+ else{
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 2 * $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode('&nbsp; '),20,'...').'\qc\cell';
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 4 * $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode('&nbsp; '),20,'...').'\qc\cell';
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ //konec naslovnih vrstic
+
+
+ #zlopamo skozi gride
+ $podtabela = 0;
+ if (count($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $cssBack = "anl_bck_desc_2 ";
+ # zloopamo skozi variable
+ if (count($grid['variables']) > 0)
+ foreach ($grid['variables'] AS $vid => $variable ) {
+ $_sequence = $variable['sequence'];
+ if ($variable['other'] != true) {
+
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part = 750;
+ $defw_part2 = 1800;
+ $defw_part3 = 4600;
+
+ //$borderB = ($arrayParams['borderB']==1 ? '\clbrdrb\brdrs\brdrw10' : '');
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '';
+ $align = '';
+ $bold = '';
+
+ // Ce gre za dvojno tabelo naredimo vrstico s naslovom podtabele
+ if($spremenljivka['tip'] == 6 && $spremenljivka['enota'] == 3){
+
+ // ÄŒe zaÄnemo z drugo podtabelo izpiÅ¡emo vrstico z naslovom
+ if($podtabela != $grid['part']){
+
+ $subtitle = $spremenljivka['double'][$grid['part']]['subtitle'];
+ $subtitle = $subtitle == '' ? $lang['srv_grid_subtitle_def'].' '.$grid['part'] : $subtitle;
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_full );
+ $tableEnd = '\pard\intbl '.$this->enkaEncode($subtitle) . $align . '\qc\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+ $podtabela = $grid['part'];
+ }
+ }
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($variable['variable']),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($variable['naslov']),20,'...') . $align . '\cell';
+
+
+ # za odklon in povpreÄje
+ $sum_xi_fi=0;
+ $N = 0;
+ $div=0;
+
+ $defw_dynamic = round($defw_part3 / ($_clmn_cnt+1));
+ $count = 1;
+ if (count($spremenljivka['options']) > 0) {
+ foreach ( $spremenljivka['options'] as $key => $kategorija) {
+ if ($additional_field) { # za odklon in povpreÄje
+ $xi = $key;
+ $fi = SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'][$key]['cnt'];
+ $sum_xi_fi += $xi * $fi ;
+ $N += $fi;
+ }
+
+ $_percent = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] > 0 ) ? SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'][$key]['cnt'] * 100 / SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] : 0;
+
+ $text = SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'][$key]['cnt'] .' ('. SurveyAnalysis::formatNumber($_percent,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%') .')';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + ($count * $defw_dynamic) );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($text),20,'...').'\qc\cell';
+
+ $count++;
+ }
+ }
+ //suma
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode((int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'].' ('.SurveyAnalysis::formatNumber(100,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%').')'),20,'...').'\qc\cell';
+
+ if ($additional_field){
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode(SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt']),20,'...').'\qc\cell';
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 2 * $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode(SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt']),20,'...').'\qc\cell';
+
+ # odklon
+ $avg = ($N > 0) ? $sum_xi_fi / $N : 0;
+ #standardna diviacija
+ $div = 0;
+ $sum_pow_xi_fi_avg = 0;
+ if (count($spremenljivka['options']) > 0) {
+ foreach ( $spremenljivka['options'] as $xi => $kategorija) {
+ $fi = SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'][$xi]['cnt'];
+ $sum_pow_xi_fi_avg += pow(($xi - $avg),2) * $fi;
+ }
+ }
+ $div = (($N -1) > 0) ? sqrt($sum_pow_xi_fi_avg / ($N -1)) : 0;
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 3 * $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode(SurveyAnalysis::formatNumber($avg,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'')),20,'...').'\qc\cell';
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 4 * $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode(SurveyAnalysis::formatNumber($div,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'')),20,'...').'\qc\cell';
+ }
+ else{
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 2 * $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode(SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt']),20,'...').'\qc\cell';
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 4 * $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode(SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt']),20,'...').'\qc\cell';
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+ } else {
+ # immamo polje drugo
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ }
+ }
+ $this->tableEnd();
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ self::outputOtherAnswers($oAnswers);
+ $this->tableEnd();
+ }
+ }
+ }
+
+ /** Izriše tekstovne odgovore v vertikalni obliki
+ *
+ * @param unknown_type $spid
+ */
+ function sumTextVertical($spid,$_from) {
+ global $lang;
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ # dodamo opcijo kje izrisujemo legendo
+ # Äe je besedilo * in je samo ena kategorija je inline legenda false
+ $inline_legenda = (SurveyAnalysis::$_HEADERS[$spid]['cnt_all'] == 1 || in_array($spremenljivka['tip'],array(1,8) ) ) ? false: true;
+ $options=array('inline_legenda' => $inline_legenda, 'isTextAnswer' => false, 'isOtherAnswer' => false, 'textAnswerExceed' => false);
+
+
+ //prva vrstica
+ $this->tableFirstLine($spremenljivka['variable'], $spremenljivka['naslov']);
+
+ //druga vrstica
+ $this->tableHeader();
+ //konec naslovnih vrstic
+
+
+ $_answersOther = array();
+ $_grids_count = count($spremenljivka['grids']);
+ if ($_grids_count > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $_variables_count = count($grid['variables']);
+ if ($_variables_count > 0)
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if ($variable['other'] != true) {
+ # dodamo dodatne vrstice z labelami grida
+ if ($_variables_count > 1) {
+ self::outputGridLabelVertical($gid,$grid,$vid,$variable,$spid,$options);
+ }
+
+ $maxAnswer = (SurveyDataSettingProfiles :: getSetting('numOpenAnswers') > 0) ? SurveyDataSettingProfiles :: getSetting('numOpenAnswers') : 30;
+ $counter = 0;
+ $_kumulativa = 0;
+ //SurveyAnalysis::$_FREQUENCYS[$_sequence]
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'] AS $vkey => $vAnswer) {
+ if (/*$vAnswer['cnt'] > 0 &&*/ $counter < $maxAnswer) { # izpisujemo samo tiste ki nisno 0
+ # ali prikažemo vse odgovore ali pa samo toliko koliko je nastavljeno v TEXT_ANSWER_LIMIT
+ $textAnswerExceed = ($counter >= TEXT_ANSWER_LIMIT && count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']) > TEXT_ANSWER_LIMIT+2) ? true : false; # ali zaÄnemo skrivati tekstovne odgovore
+ $options['isTextAnswer']=true;
+ $options['textAnswerExceed'] = $textAnswerExceed;
+ $counter = self::outputValidAnswerVertical($counter,$vkey,$vAnswer,$_sequence,$spid,$_kumulativa,$options);
+ }
+ }
+ # izpišemo sumo veljavnih
+ $counter = self::outputSumaValidAnswerVertical($counter,$_sequence,$spid,$options);
+ }
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'] AS $ikey => $iAnswer) {
+ if ($iAnswer['cnt'] > 0 ) { # izpisujemo samo tiste ki nisno 0
+ $counter = self::outputInvalidAnswerVertical($counter,$ikey,$iAnswer,$_sequence,$spid,$options);
+ }
+ }
+ # izpišemo sumo veljavnih
+ $counter = self::outputSumaInvalidAnswerVertical($counter,$_sequence,$spid,$options);
+ }
+ #izpišemo še skupno sumo
+ $counter = self::outputSumaVertical($counter,$_sequence,$spid,$options);
+ } else {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ }
+ }
+ $this->tableEnd();
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ self::outputOtherAnswers($oAnswers);
+ $this->tableEnd();
+ }
+ }
+ }
+
+ /** Izriše tekstovne odgovore kot tabelo z navedbami
+ *
+ * @param unknown_type $spid
+ */
+ function sumMultiText($spid,$_from) {
+ global $lang;
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ # dodamo opcijo kje izrisujemo legendo
+ # Äe je besedilo * in je samo ena kategorija je inline legenda false
+
+ $_cols = $spremenljivka['cnt_all'] / $spremenljivka['cnt_grids'];
+
+ # pogledamo koliko je max št odgovorov pri posameznem podvprašanju
+/* $_max_answers = array();
+ $_max_answers_cnt = 0;
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+
+ $_variables_count = count($grid['variables']);
+ if ($_variables_count > 0) {
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ $_max_answers[$gid][$vid] = count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']);
+ $_max_answers_cnt = max( $_max_answers_cnt, count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']) );
+ }
+ }
+ }
+*/
+ # koliko zapisov prikažemo naenkrat
+ $num_show_records = SurveyAnalysis::getNumRecords();
+ //$num_show_records = $_max_answers_cnt <= (int)$num_show_records ? $_max_answers_cnt : $num_show_records;
+
+ $_answers = SurveyAnalysis::getAnswers($spremenljivka,$num_show_records);
+
+ $_all_valid_answers_cnt = $_answers['validCnt'];
+ $_valid_answers = $_answers['valid'];
+
+ //prva vrstica
+ $this->tableFirstLine($spremenljivka['variable'], $spremenljivka['naslov']);
+
+ //druga vrstica
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part2 = 2600;
+
+ //$borderB = ($arrayParams['borderB']==1 ? '\clbrdrb\brdrs\brdrw10' : '');
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '';
+ $align = '';
+ $bold = '\b';
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode('&nbsp; '),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($lang['srv_analiza_opisne_subquestion']),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_full );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($lang['srv_analiza_opisne_arguments']),20,'...').'\qc\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ //konec naslovnih vrstic
+
+
+ $_answersOther = array();
+ $_grids_count = count($spremenljivka['grids']);
+ if ($_grids_count > 0) {
+ # naslovna vrstica
+ $_row = $spremenljivka['grids'][0];
+
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part2 = 2600;
+ $defw_part3 = 6800;
+
+ //$borderB = ($arrayParams['borderB']==1 ? '\clbrdrb\brdrs\brdrw10' : '');
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '';
+ $align = '';
+ $bold = '\b0';
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode('&nbsp; '),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode('&nbsp; '),20,'...') . $align . '\cell';
+
+ $var_count = count($_row['variables']);
+ $defw_dynamic = round($defw_part3 / $var_count);
+ $count = 1;
+ foreach ($_row['variables'] AS $rid => $_col ){
+ $_sequence = $_col['sequence']; # id kolone z podatki
+ if ($_col['other'] != true) {
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + ($defw_dynamic * $count) );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($_col['naslov']),20,'...').'\qc\cell';
+ }
+ else {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+
+ $count++;
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ //podatkovne vrstice
+ $last = 0;
+ $count = 1;
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $_variables_count = count($grid['variables']);
+
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part2 = 2600;
+ $defw_part3 = 6800;
+
+ //$borderB = ($arrayParams['borderB']==1 ? '\clbrdrb\brdrs\brdrw10' : '');
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '';
+ $align = '';
+ $bold = '';
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($grid['variable']),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($grid['naslov']),20,'...') . $align . '\cell';
+
+ if ($_variables_count > 0) {
+ # preštejemo max vrstic na grupo
+ $_max_i = 0;
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ $_max_i = max($_max_i,min($num_show_records,SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt']));
+ }
+
+ # za barvanje
+ $last = ($last & 1) ? 0 : 1 ;
+
+ $defw_dynamic = round($defw_part3 / $_variables_count);
+ $count = 1;
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if ($variable['other'] != true) {
+ # tabela z navedbami
+ $index=0;
+ # odvisno ali imamo odgovor
+ if (count($_valid_answers) > 0) {
+ $text = '';
+ foreach ($_valid_answers AS $answer) {
+ $index++;
+
+ $_ans = $answer[$_sequence];
+
+ if ($_ans != null && $_ans != '') {
+ $text .= $_ans.', ';
+ }
+ }
+
+ $text = substr($text, 0, -2);
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + ($defw_dynamic * $count) );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->enkaEncode($text).'\qc\cell';
+ }
+ else {
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + ($defw_dynamic * $count) );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode('&nbsp;'),20,'...').'\qc\cell';
+ }
+
+ $count++;
+ }
+ }
+ $last = $_max_i;
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+
+
+
+
+ }
+ $this->tableEnd();
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ self::outputOtherAnswers($oAnswers);
+ $this->tableEnd();
+ }
+ }
+ }
+
+ /** Izriše lokacijske odgovore kot tabelo z navedbami
+ *
+ * @param unknown_type $spid
+ */
+ function sumLokacija($spid,$_from) {
+ global $lang;
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+ $enota = $spremenljivka['enota'];
+
+ # dodamo opcijo kje izrisujemo legendo
+ # Äe je besedilo * in je samo ena kategorija je inline legenda false
+
+ $_cols = $spremenljivka['cnt_all'] / $spremenljivka['cnt_grids'];
+
+ # koliko zapisov prikažemo naenkrat
+ $num_show_records = SurveyAnalysis::getNumRecords();
+ //$num_show_records = $_max_answers_cnt <= (int)$num_show_records ? $_max_answers_cnt : $num_show_records;
+
+ $_answers = SurveyAnalysis::getAnswers($spremenljivka,$num_show_records);
+
+ $_all_valid_answers_cnt = $_answers['validCnt'];
+ $_valid_answers = $_answers['valid'];
+
+ //prva vrstica
+ $this->tableFirstLine($spremenljivka['variable'], $spremenljivka['naslov']);
+
+ //druga vrstica
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part2 = 2600;
+
+ //$borderB = ($arrayParams['borderB']==1 ? '\clbrdrb\brdrs\brdrw10' : '');
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '';
+ $align = '';
+ $bold = '\b';
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ //konec naslovnih vrstic
+
+ $_answersOther = array();
+ $_grids_count = count($spremenljivka['grids']);
+ if ($_grids_count > 0) {
+ # naslovna vrstica
+ $_row = $spremenljivka['grids'][0];
+
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part2 = 2600;
+ $defw_part3 = 6800;
+
+ //$borderB = ($arrayParams['borderB']==1 ? '\clbrdrb\brdrs\brdrw10' : '');
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '';
+ $align = '';
+ $bold = '\b0';
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode('&nbsp; '),20,'...') . $align . '\qc\cell';
+
+ $var_count = count($_row['variables']);
+ $defw_dynamic = round($defw_part3 / $var_count);
+ $count = 1;
+ foreach ($_row['variables'] AS $rid => $_col ){
+ $_sequence = $_col['sequence']; # id kolone z podatki
+ if ($_col['other'] != true) {
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + ($defw_dynamic * $count) );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($_col['naslov']),20,'...').'\qc\cell';
+ }
+ else {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+
+ $count++;
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ //podatkovne vrstice
+ $last = 0;
+ $count = 1;
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $_variables_count = count($grid['variables']);
+
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part2 = 2600;
+ $defw_part3 = 6800;
+
+ //$borderB = ($arrayParams['borderB']==1 ? '\clbrdrb\brdrs\brdrw10' : '');
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '';
+ $align = '';
+ $bold = '';
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($grid['variable']),20,'...') . $align . '\qc\cell';
+
+ if ($_variables_count > 0) {
+ # preštejemo max vrstic na grupo
+ $_max_i = 0;
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ $_max_i = max($_max_i,min($num_show_records,SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt']));
+ }
+
+ # za barvanje
+ $last = ($last & 1) ? 0 : 1 ;
+
+ $defw_dynamic = round($defw_part3 / $_variables_count);
+ $count = 1;
+ $answers = array();
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if ($variable['other'] != true) {
+ # tabela z navedbami
+ $index=0;
+ # odvisno ali imamo odgovor
+ if (count($_valid_answers) > 0) {
+ $text = '(';
+ foreach ($_valid_answers AS $answer) {
+ $_ans = $answer[$_sequence];
+ if($enota != 3)
+ $_ans = str_replace("<br>","), (",$_ans);
+
+ if ($_ans != null && $_ans != '') {
+ if($enota == 3)
+ $text .= $_ans."), (";
+ else{
+ $answers[$count-1][$index]='('.$this->encodeText($_ans).')';
+ }
+ }
+ $index++;
+ }
+
+ if($enota == 3){
+ $text = substr($text, 0, -3);
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + ($defw_dynamic * $count) );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->enkaEncode($text).'\qc\cell';
+ }
+ }
+ else {
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + ($defw_dynamic * $count) );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode('&nbsp;'),20,'...').'\qc\cell';
+ }
+
+ $count++;
+ }
+ }
+ $last = $_max_i;
+ }
+ //ce je choose, izrisi, tako kot pri multitext, vse v eno
+ if($enota == 3){
+ $tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+ else{
+ //za vsako vrstico
+ for($i=0; $i<sizeof($answers[0]); $i++){
+ $table1 = $table; //prva prazna
+ $tableEnd1 = '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode('&nbsp; '),20,'...') . $align . '\qc\cell';//prva prazna
+ //za vsak stolpec
+ for($j=0; $j<$count-1; $j++){
+ $table1 .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + ($defw_dynamic * ($j+1)) );
+ $tableEnd1 .= '\pard\intbl'.$bold.' '.$this->enkaEncode($answers[$j][$i]).'\qc\cell';
+ }
+ $tableEnd1 .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table1.$tableEnd1);
+ }
+ }
+ }
+ }
+ $this->tableEnd();
+ }
+
+ /** Izriše sumarnik v horizontalni obliki za multi checbox
+ *
+ * @param unknown_type $spid - spremenljivka ID
+ */
+ function sumMultiHorizontalCheckbox($spid,$_from) {
+ global $lang;
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+ $_answersOther = array();
+
+ # ugotovimo koliko imamo kolon
+ $gid=0;
+ $_clmn_cnt = SurveyAnalysis::$_HEADERS[$spid]['grids'][$gid]['cnt_vars']-SurveyAnalysis::$_HEADERS[$spid]['grids'][$gid]['cnt_other'];
+ # tekst vprašanja
+
+
+ /////////////////PRVA TABELA////////////////
+ //prva vrstica
+ $this->tableFirstLine($spremenljivka['variable'], $spremenljivka['naslov']);
+
+ //druga vrstica
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part = 1100;
+ $defw_part2 = 2200;
+ $defw_part3 = 5000;
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '';
+ $align = '\ql';
+ $bold = '\b';
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode('&nbsp; '),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($lang['srv_analiza_opisne_subquestion']),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + $defw_part3 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($lang['srv_analiza_opisne_answers']),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($lang['srv_analiza_opisne_valid']),20,'...').'\qc\cell';
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 2 * $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($lang['srv_analiza_num_units']),20,'...').'\qc\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+ //tretja vrstica
+ $_variables = SurveyAnalysis::$_HEADERS[$spid]['grids'][$gid]['variables'];
+
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part = 1100;
+ $defw_part2 = 2200;
+ $defw_part3 = 5000;
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '';
+ $align = '\ql';
+ $bold = '\b0';
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode('&nbsp; '),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode('&nbsp; '),20,'...') . $align . '\cell';
+
+ $defw_dynamic = round($defw_part3 / count($_variables) );
+ $count = 1;
+ foreach ($_variables AS $vkey => $variable) {
+ if ($variable['other'] != true) {
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + ($count * $defw_dynamic) );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($variable['naslov'].' ('.$variable['gr_id']. ')'),20,'...').'\qc\cell';
+ }
+ $count++;
+ }
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode('&nbsp; '),20,'...').'\qc\cell';
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 2 * $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode('&nbsp; '),20,'...').'\qc\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ //podatkovne vrstice
+ foreach (SurveyAnalysis::$_HEADERS[$spid]['grids'] AS $gid => $grids) {
+ $_cnt = 0;
+
+ # vodoravna vrstice s podatki
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part = 1100;
+ $defw_part2 = 2200;
+ $defw_part3 = 5000;
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '';
+ $align = '\ql';
+ $bold = '\b0';
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($grids['variable']),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($grids['naslov']),20,'...') . $align . '\cell';
+
+ $_arguments = 0;
+ $_max_appropriate = 0;
+ $_max_cnt = 0;
+
+ // prikaz frekvenc
+ $defw_dynamic = round($defw_part3 / count($grids['variables']) );
+ $count = 1;
+ foreach ($grids['variables'] AS $vkey => $variable) {
+ $_sequence = $variable['sequence'];
+ $_valid = SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'];
+ $_cnt = SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt'];
+ $_arguments += $_cnt;
+
+ $_max_appropriate = max($_max_appropriate, (int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt']);
+ $_max_cnt = max ($_max_cnt, ((int)(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt']+(int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['0']['cnt'])));
+
+ if ($variable['other'] == true) {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vkey,'sequence'=>$_sequence);
+ }
+
+ if ($variable['other'] != true) {
+
+ $_percent = ($_valid > 0 ) ? $_cnt * 100 / $_valid : 0;
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + ($count * $defw_dynamic) );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($_cnt.' ('.SurveyAnalysis::formatNumber($_percent,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%'). ')'),20,'...').'\qc\cell';
+ }
+
+ $count++;
+ }
+
+ # veljavno
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($_max_cnt),20,'...').'\qc\cell';
+ #ustrezno
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + 2 * $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($_max_appropriate),20,'...').'\qc\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+
+ $this->tableEnd();
+ /////////////////KONEC PRVE TABELE////////////////
+
+
+
+ ////////////DRUGA TABELA///////////////////
+ //prva vrstica
+ $this->tableFirstLine($spremenljivka['variable'], $spremenljivka['naslov']);
+
+ //druga vrstica
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part2 = 2200;
+ $defw_part3 = 7200;
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '';
+ $align = '\ql';
+ $bold = '\b';
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode('&nbsp; '),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($lang['srv_analiza_opisne_subquestion']),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + $defw_part3 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($lang['srv_analiza_opisne_arguments']),20,'...') . $align . '\qc\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+ //tretja vrstica
+ $_variables = SurveyAnalysis::$_HEADERS[$spid]['grids'][$gid]['variables'];
+
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part2 = 2200;
+ $defw_part3 = 7200;
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '';
+ $align = '\ql';
+ $bold = '\b0';
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode('&nbsp; '),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode('&nbsp; '),20,'...') . $align . '\cell';
+
+ $defw_dynamic = round($defw_part3 / (count($_variables)+1) );
+ $count = 1;
+ foreach ($_variables AS $vkey => $variable) {
+ if ($variable['other'] != true) {
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + ($count * $defw_dynamic) );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($variable['naslov'].' ('.$variable['gr_id']. ')'),20,'...').'\qc\cell';
+ }
+ $count++;
+ }
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_full );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($lang['srv_anl_suma1']),20,'...').'\qc\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ //vrstice s podatki
+ foreach (SurveyAnalysis::$_HEADERS[$spid]['grids'] AS $gid => $grids) {
+ $_cnt = 0;
+
+ # vodoravna vrstice s podatki
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part2 = 2200;
+ $defw_part3 = 7200;
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '';
+ $align = '\ql';
+ $bold = '\b0';
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($grids['variable']),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($grids['naslov']),20,'...') . $align . '\cell';
+
+ $_arguments = 0;
+ $_max_appropriate = 0;
+ $_max_cnt = 0;
+
+ // prikaz frekvenc
+ foreach ($grids['variables'] AS $vkey => $variable) {
+ $_sequence = $variable['sequence'];
+ $_valid = SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'];
+ $_cnt = SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt'];
+ $_arguments += $_cnt;
+
+ $_max_appropriate = max($_max_appropriate, (int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt']);
+ $_max_cnt = max ($_max_cnt, ((int)(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt']+(int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['0']['cnt'])));
+
+ if ($variable['other'] == true) {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vkey,'sequence'=>$_sequence);
+ }
+
+ if ($variable['other'] != true) {
+ $_percent = ($_valid > 0 ) ? $_cnt * 100 / $_valid : 0;
+ }
+ }
+
+ $defw_dynamic = round($defw_part3 / (count($_variables)+1) );
+ $count = 1;
+ foreach ($grids['variables'] AS $vkey => $variable) {
+ if ($variable['other'] != true) {
+ $_sequence = $variable['sequence'];
+ $_cnt = SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt'];
+
+ $_percent = ($_arguments > 0 ) ? $_cnt * 100 / $_arguments : 0;
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + ($count * $defw_dynamic) );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($_cnt.' ('.SurveyAnalysis::formatNumber($_percent,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%'). ')'),20,'...').'\qc\cell';
+
+ $count++;
+ }
+ }
+
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_full );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($_arguments),20,'...').'\qc\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+
+ $this->tableEnd();
+ ///////////KONEC DRUGE TABELE//////////////
+
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ self::outputOtherAnswers($oAnswers);
+ $this->tableEnd();
+ }
+ }
+ }
+
+ /** IzriÅ¡e multi number odgovore. izpiÅ¡e samo povpreÄja
+ *
+ * @param unknown_type $spid
+ */
+ function sumMultiNumber($spid,$_from) {
+ global $lang;
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ $_cols = $spremenljivka['cnt_all'] / $spremenljivka['cnt_grids'];
+
+
+ //prva vrstica
+ $this->tableFirstLine($spremenljivka['variable'], $spremenljivka['naslov']);
+
+ //druga vrstica
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part2 = 2200;
+ $defw_part3 = 7200;
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '';
+ $align = '\ql';
+ $bold = '\b';
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode('&nbsp; '),20,'...') . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($lang['srv_analiza_opisne_subquestion']),20,'...') . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + $defw_part3 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($lang['srv_analiza_sums_average']),20,'...') . '\qc\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ $_answersOther = array();
+ $_grids_count = count($spremenljivka['grids']);
+ if ($_grids_count > 0) {
+ # naslovna vrstica
+ $_row = $spremenljivka['grids'][0];
+
+
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part2 = 2200;
+ $defw_part3 = 7200;
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '';
+ $align = '\ql';
+ $bold = '\b0';
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode('&nbsp; '),20,'...') . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode('&nbsp; '),20,'...') . '\cell';
+
+ $defw_dynamic = round($defw_part3 / count($_row['variables']) );
+ $count = 1;
+ foreach ( $_row['variables'] AS $rid => $_col ) {
+ $_sequence = $_col['sequence']; # id kolone z podatki
+
+ if ($_col['other'] != true) {
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + ($count * $defw_dynamic) );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($_col['naslov']),20,'...').'\qc\cell';
+ }
+ else {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+
+ $count++;
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ $last = 0;
+
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $_variables_count = count($grid['variables']);
+
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part2 = 2200;
+ $defw_part3 = 7200;
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '';
+ $align = '\ql';
+ $bold = '\b0';
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($grid['variable']),20,'...') . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($grid['naslov']),20,'...') . '\cell';
+
+ if ($_variables_count > 0) {
+
+ $defw_dynamic = round($defw_part3 / $_variables_count );
+ $count = 1;
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if ($variable['other'] != true) {
+ # tabela z navedbami
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + ($count * $defw_dynamic) );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode(SurveyAnalysis::formatNumber(SurveyAnalysis::$_FREQUENCYS[$_sequence]['average'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'')),20,'...').'\qc\cell';
+ }
+ $count++;
+ }
+ $tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+ }
+ }
+ $this->tableEnd();
+ }
+
+
+
+ function outputValidAnswerVertical($counter,$vkey,$vAnswer,$_sequence,$spid,&$_kumulativa,$_options=array()) {
+ global $lang;
+
+ $text = array();
+
+ # opcije
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ 'textAnswerExceed'=>false # ali presegamo Å¡tevilo tekstovnih odgovorov za prikaz
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+ $cssBck = ' '.SurveyAnalysis::$cssColors['0_' . ($counter & 1)];
+
+ $_valid = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] > 0 ) ? 100*$vAnswer['cnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] : 0;
+ $_percent = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] > 0 ) ? 100*$vAnswer['cnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] : 0;
+ $_kumulativa += $_valid;
+
+ # ali presegamo Å¡tevilo prikazanih vrstic, takrat v zadnji prikazani dodamo link veÄ.. ostale vrstice pa skrijemo
+ if ($options['textAnswerExceed'] == true) {
+ if ($counter == TEXT_ANSWER_LIMIT ) {
+ # link za veÄ
+ $show_more = '<div id="valid_row_togle_'.$_sequence.'" class="floatRight blue pointer" onclick="showHidenTextRow(\''.$_sequence.'\');return false;">(veÄ...)</div>'.NEW_LINE;
+ } elseif ($counter > TEXT_ANSWER_LIMIT ) {
+ $hide_row = ' hidden';
+ $_exceed = true;
+ }
+ }
+
+
+ //if ($counter < TEXT_MAX_ANSWER_LIMIT) {
+ $text[] = '&nbsp; ';
+
+ $addText = (($options['isTextAnswer'] == false && (string)$vkey != $vAnswer['text']) ? ' ('.$vAnswer['text'] .')' : '');
+ $text[] = $this->encodeText($vkey.$addText);
+
+ $text[] = $this->encodeText((int)$vAnswer['cnt']);
+
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($_percent, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'));
+
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($_valid, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'));
+
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($_kumulativa, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'));
+
+ /*} elseif ($counter == TEXT_MAX_ANSWER_LIMIT ) {
+ echo '<tr id="'.$spid.'_'.$_sequence.'_'.$counter.'" name="valid_row_'.$_sequence.'">';
+ echo '<td class="anl_bl anl_ac anl_br gray anl_dash_bt anl_dash_bb" colspan="'.(6+(int)SurveyAnalysis::$_HEADERS[$spid]['show_valid_percent']+((int)SurveyAnalysis::$_SHOW_LEGENDA*2)).'"> . . . Prikazujemo samo prvih '.TEXT_MAX_ANSWER_LIMIT.' veljavnih odgovorov!</td>';
+ echo '</tr>';
+ }*/
+
+ self::tableRow($text);
+
+ $counter++;
+ return $counter;
+ }
+
+ function outputSumaValidAnswerVertical($counter,$_sequence,$spid,$_options=array()) {
+ global $lang;
+
+ $text = array();
+
+ # opcije
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ 'textAnswerExceed'=>false # ali presegamo Å¡tevilo tekstovnih odgovorov za prikaz
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+
+ $_percent = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] > 0 ) ? 100*SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] : 0;
+
+ $_brez_MV = ((int)SurveyAnalysis::$currentMissingProfile === 2) ? TRUE : FALSE;
+
+ $_sufix = '';
+
+ $text[] = $this->encodeText($lang['srv_anl_valid']);
+ $text[] = $this->encodeText($lang['srv_anl_suma1']);
+
+ $text[] = $this->encodeText(SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] > 0 ? SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] : 0);
+
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($_percent, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'));
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber(100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'));
+
+ $text[] = '&nbsp; ';
+
+
+ self::tableRow($text);
+
+ $counter++;
+ return $counter;
+ }
+
+ function outputInvalidAnswerVertical($counter,$vkey,$vAnswer,$_sequence,$spid,$_options=array()) {
+ global $lang;
+
+ $text = array();
+
+ # opcije
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ 'textAnswerExceed'=>false # ali presegamo Å¡tevilo tekstovnih odgovorov za prikaz
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+
+ $_percent = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] > 0 ) ? 100*$vAnswer['cnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] : 0;
+ $_invalid = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'] > 0 ) ? 100*$vAnswer['cnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'] : 0;
+
+ $_Z_MV = ((int)SurveyAnalysis::$missingProfileData['display_mv_type'] === 2) ? TRUE : FALSE;
+ if($_Z_MV){
+ $text[] = '&nbsp; ';
+
+ $text[] = $this->encodeText($vkey.' (' . $vAnswer['text'].')');
+ //echo '<div class="floatRight anl_detail_percent anl_w50 anl_ac anl_dash_bl">'.SurveyAnalysis::formatNumber($_invalid, NUM_DIGIT_PERCENT, '%').'</div>'.NEW_LINE;
+ //echo '<div class="floatRight anl_detail_percent anl_w30 anl_ac">'.$vAnswer['cnt'].'</div>'.NEW_LINE;
+
+ $text[] = $this->encodeText((int)$vAnswer['cnt']);
+
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($_percent, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'));
+
+ $text[] = '&nbsp; ';
+ $text[] = '&nbsp; ';
+
+ $this->tableRow($text);
+ }
+
+ $counter++;
+ return $counter;
+ }
+
+ function outputSumaInvalidAnswerVertical($counter,$_sequence,$spid,$_options = array()) {
+ global $lang;
+
+ # opcije
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ 'textAnswerExceed'=>false # ali presegamo Å¡tevilo tekstovnih odgovorov za prikaz
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+ $cssBck = ' '.SurveyAnalysis::$cssColors['text_' . ($counter & 1)];
+ $_percent = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] > 0 ) ? 100*SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] : 0;
+
+ $_brez_MV = ((int)SurveyAnalysis::$missingProfileData['display_mv_type'] === 0) ? TRUE : FALSE;
+ if(!$_brez_MV){
+ $text = array();
+
+ $text[] = $this->encodeText($lang['srv_anl_missing']);
+
+ $text[] = $this->encodeText(SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt']);
+
+ $answer['cnt'] = SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'] > 0 ? SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'] : 0;
+ $text[] = $this->encodeText((int)$answer['cnt']);
+
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber($_percent, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'));
+ $text[] = '&nbsp; ';
+ $text[] = '&nbsp; ';
+
+ $this->tableRow($text);
+ }
+
+ $counter++;
+ return $counter;
+ }
+
+ function outputSumaVertical($counter,$_sequence,$spid, $_options = array()) {
+ global $lang;
+
+ # opcije
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ 'textAnswerExceed'=>false # ali presegamo Å¡tevilo tekstovnih odgovorov za prikaz
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+
+ $cssBck = ' '.SurveyAnalysis::$cssColors['0_' .($counter & 1)];
+
+ $_brez_MV = ((int)SurveyAnalysis::$missingProfileData['display_mv_type'] === 0) ? TRUE : FALSE;
+ if(!$_brez_MV){
+ $params = array('borderB' => 1);
+ $text = array();
+
+ $text[] = '&nbsp; ';
+ $text[] = $this->encodeText($lang['srv_anl_suma2']);
+ $text[] = $this->encodeText((SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] ? SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] : 0));
+ $text[] = $this->encodeText(SurveyAnalysis::formatNumber('100', SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%'));
+ $text[] = '&nbsp; ';
+ $text[] = '&nbsp; ';
+
+ $this->tableRow($text, $params);
+ }
+ }
+
+ function outputOtherAnswers($oAnswers) {
+ global $lang;
+ $spid = $oAnswers['spid'];
+ $_variable = SurveyAnalysis::$_HEADERS[$spid]['grids'][$oAnswers['gid']]['variables'][$oAnswers['vid']];
+ $_sequence = $_variable['sequence'];
+ $_frekvence = SurveyAnalysis::$_FREQUENCYS[$_variable['sequence']];
+
+ //prva vrstica
+ $this->tableFirstLine($_variable['variable'], SurveyAnalysis::$_HEADERS[$oAnswers['spid']]['variable'].' ('.$_variable['naslov'].' )');
+
+ //druga vrstica
+ $this->tableHeader();
+ // konec naslovne vrstice
+
+ $counter = 1;
+ $_kumulativa = 0;
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'] AS $vkey => $vAnswer) {
+ if ($vAnswer['cnt'] > 0 ) { # izpisujemo samo tiste ki nisno 0
+ $counter = self::outputValidAnswerVertical($counter,$vkey,$vAnswer,$_sequence,$spid,$_kumulativa,array('isOtherAnswer'=>true));
+ }
+ }
+ # izpišemo sumo veljavnih
+ $counter = self::outputSumaValidAnswerVertical($counter,$_sequence,$spid,array('isOtherAnswer'=>true));
+ }
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'] AS $ikey => $iAnswer) {
+ if ($iAnswer['cnt'] > 0 ) { # izpisujemo samo tiste ki nisno 0
+ $counter = self::outputInvalidAnswerVertical($counter,$ikey,$iAnswer,$_sequence,$spid,array('isOtherAnswer'=>true));
+ }
+ }
+ # izpišemo sumo veljavnih
+ $counter = self::outputSumaInvalidAnswerVertical($counter,$_sequence,$spid,array('isOtherAnswer'=>true));
+ }
+ #izpišemo še skupno sumo
+ $counter = self::outputSumaVertical($counter,$_sequence,$spid,array('isOtherAnswer'=>true));
+ }
+
+ /** za multi grid tekstovne vrstice doda vrstico z labeliami grida
+ *
+ * @param $gkey
+ * @param $gAnswer
+ * @param $spid
+ * @param $_options
+ */
+ function outputGridLabelVertical($gid,$grid,$vid,$variable,$spid,$_options=array()) {
+
+ $text = array();
+
+ $text[] = $this->encodeText($variable['variable']);
+ $text[] = $this->encodeText(($grid['naslov'] != '' ? $grid['naslov']. '&nbsp;-&nbsp;' : '').$variable['naslov']);
+
+ $text[] = '&nbsp; ';
+ $text[] = '&nbsp; ';
+ $text[] = '&nbsp; ';
+ $text[] = '&nbsp; ';
+
+ $this->tableRow($text);
+
+ $counter++;
+ return $counter;
+ }
+
+
+
+
+ function createFrontPage(){
+ global $lang;
+
+ $this->rtf->new_line(10);
+ $this->rtf->TextCell($this->encodeText( SurveyInfo::getInstance()->getSurveyTitle()), array('width' => 9500, 'height' => 3,
+ 'align' => 'center', 'valign' => 'middle' , 'border' => array('top','bottom', 'left','right'),
+ 'colorF' => "0", 'colorB' => "0" ) );
+ $this->rtf->new_line(3);
+ // dodamo info:
+ $this->rtf->TextCell("", array('width' => 9500, 'height' => 1,
+ 'align' => 'left', 'valign' => 'bottom' , 'border' => array('bottom'),'colorF' => "0" ) );
+
+ $infoTable = array();
+
+ $imenaTable = array();
+ if ( SurveyInfo::getInstance()->getSurveyTitle() != SurveyInfo::getInstance()->getSurveyAkronim() )
+ $imenaTable[] = array($lang['export_firstpage_shortname'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()), "");
+ if ( SurveyInfo::getInstance()->getSurveyTitle() != SurveyInfo::getInstance()->getSurveyAkronim() )
+ $imenaTable[] = array($lang['export_firstpage_longname'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyTitle()), "");
+
+ $imenaTable[] = array($lang['export_firstpage_qcount'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyQuestionCount()), "" );
+ $imenaTable[] = array($lang['export_firstpage_active_from'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyStartsDate()),"" );
+ $imenaTable[] = array($lang['export_firstpage_active_until'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyExpireDate()),"" );
+ $imenaTable[] = array($lang['export_firstpage_author'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyInsertName()),"" );
+ $imenaTable[] = array($lang['export_firstpage_edit'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyEditName()),"" );
+ $imenaTable[] = array($lang['export_firstpage_date'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyInsertDate()),"" );
+ $imenaTable[] = array($lang['export_firstpage_date'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyEditDate()),"" );
+ $imenaTable[] = array($lang['export_firstpage_desc'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyInfo()),"" );
+ $this->rtf->TableFromArray( array( 4600, 4600 ), $imenaTable);
+
+ $this->rtf->new_page();
+ }
+
+ function enkaEncode($text){ // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ return strip_tags($text);
+ }
+
+ function encodeText($text){ // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace(array("&scaron;","&#353;","&#269;"),array("Å¡","Å¡","Ä"),$text);
+ return strip_tags($text);
+ }
+
+ function snippet($text,$length=64,$tail="...") {
+ /*$text = trim($text);
+ $txtl = strlen($text);
+ if($txtl > $length)
+ {
+ for($i=1;$text[$length-$i]!=" ";$i++)
+ {
+ if($i == $length)
+ {
+ return substr($text,0,$length) . $tail;
+ }
+ }
+ $text = substr($text,0,$length-$i+1) . $tail;
+ }*/
+ return $text;
+ }
+
+ function setGrupa($grupa) {$this->grupa = $grupa;}
+ function getGrupa() {return $this->grupa;}
+ function setUserId($usrId) {$this->usrId = $usrId;}
+ function getUserId() {return ($this->usrId)?$this->usrId:false;}
+ function setDisplayFrontPage($display) {$this->pi['displayFrontPage'] = $display;}
+ function getDisplayFrontPage() {return ($this->pi['displayFrontPage'] == true || $this->pi['displayFrontPage'] == 1);}
+
+
+ function tableFirstLine($field1, $field2){
+ global $lang;
+
+ $defw_full = 10300;
+ $defw_part = 900;
+ $defw_part2 = 9400;
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '\clbrdrt\brdrs\brdrw10';
+ //$align = ($arrayParams['align']=='center' ? '\qc' : '\ql');
+ $bold = '\b';
+
+ $this->rtf->MyRTF .= "{\par";
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($field1),20,'...') . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($field2),20,'...') . '\ql\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+
+ function tableHeader(){
+ global $lang;
+
+ $naslov = array();
+ $naslov[] = '&nbsp; ';
+ $naslov[] = $this->encodeText($lang['srv_analiza_frekvence_titleAnswers']);
+ $naslov[] = $this->encodeText($lang['srv_analiza_frekvence_titleFrekvenca']);
+ $naslov[] = $this->encodeText($lang['srv_analiza_frekvence_titleOdstotek']);
+ $naslov[] = $this->encodeText($lang['srv_analiza_frekvence_titleVeljavni']);
+ $naslov[] = $this->encodeText($lang['srv_analiza_frekvence_titleKumulativa']);
+
+ $params = array('borderB' => 1, 'bold' => 'B', 'align2' => 'C');
+
+ $this->tableRow($naslov, $params);
+ }
+
+ function tableRow($arrayText, $arrayParams=0){
+
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part = 1300;
+ $defw_part2 = 4200;
+
+ //$borderB = ($arrayParams['borderB']==1 ? '\clbrdrb\brdrs\brdrw10' : '');
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = ($arrayParams['borderT']==1 ? '\clbrdrt\brdrs\brdrw10' : '');
+ $align2 = ($arrayParams['align2']=='C' ? '\qc' : '\ql');
+ $bold = ($arrayParams['bold']=='B' ? '\b' : '\b0');
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($arrayText[0]),20,'...') . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($arrayText[1]),20,'...') . $align2 . '\cell';
+
+ for($i=0; $i<4; $i++){
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + ($i+1) * $defw_part + $defw_part2);
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($arrayText[$i+2]),20,'...').'\qc\cell';
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+
+ function tableRowVerticalCheckbox($arrayText, $arrayParams=0){
+
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part = 1000;
+ $defw_part2 = 2400;
+
+ //$borderB = ($arrayParams['borderB']==1 ? '\clbrdrb\brdrs\brdrw10' : '');
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = ($arrayParams['borderT']==1 ? '\clbrdrt\brdrs\brdrw10' : '');
+ $align = ($arrayParams['align']=='C' ? '\qc' : '\ql');
+ $bold = ($arrayParams['bold']=='B' ? '\b' : '\b0');
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($arrayText[0]),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($arrayText[1]),20,'...') . $align . '\cell';
+
+ for($i=0; $i<7; $i++){
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + ($i+1) * $defw_part + $defw_part2);
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($arrayText[$i+2]),20,'...').'\qc\cell';
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+
+ function tableRowNumberVertical($arrayText, $arrayParams=0){
+
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part = 1100;
+ $defw_part2 = 2800;
+
+ //$borderB = ($arrayParams['borderB'] == 1 ? '\clbrdrb\brdrs\brdrw10' : '');
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = ($arrayParams['borderT'] == 1 ? '\clbrdrt\brdrs\brdrw10' : '');
+ $borderS = '\clbrdrl\brdrs\brdrw10';
+ $align = ($arrayParams['align']=='C' ? '\qc' : '\ql');
+ $bold = ($arrayParams['bold']=='B' ? '\b' : '\b0');
+
+ if($arrayText[1] == '&nbsp; '){
+ $borderB = '';
+ $borderT = '';
+ $borderS = '';
+ }
+
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($arrayText[0]),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT. $borderS . $borderB . $borderS. '\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($arrayText[1]),20,'...') . $align . '\cell';
+
+ for($i=0; $i<6; $i++){
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + ($i+1) * $defw_part + $defw_part2);
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($arrayText[$i+2]),20,'...').'\qc\cell';
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+
+ function tableRowHorizontal($arrayText, $arrayParams=0){
+
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part = 1100;
+ $defw_part2 = 2200;
+ $defw_part3 = 3900;
+
+ //$borderB = ($arrayParams['borderB']==1 ? '\clbrdrb\brdrs\brdrw10' : '');
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = ($arrayParams['borderT']==1 ? '\clbrdrt\brdrs\brdrw10' : '');
+ $align = ($arrayParams['align']=='C' ? '\qc' : '\ql');
+ $bold = ($arrayParams['bold']=='B' ? '\b' : '\b0');
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($arrayText[0]),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($arrayText[1]),20,'...') . $align . '\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + $defw_part3 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($arrayText[2]),20,'...') . $align . '\qc\cell';
+
+ for($i=0; $i<3; $i++){
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + ($i+1) * $defw_part + $defw_part2 + $defw_part3);
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($arrayText[$i+3]),20,'...').'\qc\cell';
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+
+ function tableRowMultiText($arrayText, $arrayParams=0){
+
+ $defw_full = 10300;
+ $defw_part0 = 900;
+ $defw_part2 = 2200;
+ $defw_part3 = 7200;
+
+ //$borderB = ($arrayParams['borderB']==1 ? '\clbrdrb\brdrs\brdrw10' : '');
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = ($arrayParams['borderT']==1 ? '\clbrdrt\brdrs\brdrw10' : '');
+ $align = ($arrayParams['align']=='C' ? '\qc' : '\ql');
+ $bold = ($arrayParams['bold']=='B' ? '\b' : '\b0');
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($arrayText[0]),20,'...') . $align . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($arrayText[1]),20,'...') . $align . '\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part0 + $defw_part2 + $defw_part3 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($arrayText[2]),20,'...') . $align . '\qc\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+
+
+ function tableEnd(){
+
+ $this->rtf->MyRTF .= "}";
+ $this->rtf->new_line(1);
+ }
+
+ function formatNumber ($value, $digit = 0, $sufix = "") {
+ if ($value <> 0 && $value != null)
+ $result = round($value, $digit);
+ else
+ $result = "0";
+ $result = number_format($result, $digit, '.', ',') . $sufix;
+
+ return $result;
+ }
+
+}
+
+
+?>
diff --git a/admin/exportclases/class.rtfIzvozAnalizaTTest.php b/admin/exportclases/class.rtfIzvozAnalizaTTest.php
new file mode 100644
index 0000000..ddaa366
--- /dev/null
+++ b/admin/exportclases/class.rtfIzvozAnalizaTTest.php
@@ -0,0 +1,395 @@
+<?php
+
+ global $site_path;
+
+ include_once('../../function.php');
+ include_once('../survey/definition.php');
+ include_once('../exportclases/class.rtfIzvozAnalizaFunctions.php');
+ require_once("class.enka.rtf.php");
+
+ define("FNT_TIMES", "Times New Roman", true);
+ define("FNT_ARIAL", "Arial", true);
+
+ define("FNT_MAIN_TEXT", FNT_TIMES, true);
+ define("FNT_QUESTION_TEXT", FNT_TIMES, true);
+ define("FNT_HEADER_TEXT", FNT_TIMES, true);
+
+ define("FNT_MAIN_SIZE", 12, true);
+ define("FNT_QUESTION_SIZE", 10, true);
+ define("FNT_HEADER_SIZE", 10, true);
+
+ define("M_ANALIZA_DESCRIPTOR", "descriptor", true);
+ define("M_ANALIZA_FREQUENCY", "frequency", true);
+ define("ALLOW_HIDE_ZERRO_REGULAR", false); // omogo�imo delovanje prikazovanja/skrivanja ni�elnih vnosti za navadne odgovore
+ define("ALLOW_HIDE_ZERRO_MISSING", true); // omogo�imo delovanje prikazovanja/skrivanja ni�elnih vnosti za missinge
+
+
+/** Class za generacijo rtf-a
+ */
+class RtfIzvozAnalizaTTest {
+
+ var $anketa;// = array(); // trenutna anketa
+ var $grupa = null; // trenutna grupa
+ var $usrId = null; // trenutni user
+ var $spremenljivka; // trenutna spremenljivka
+ var $usr_id; // ID trenutnega uporabnika
+ var $printPreview = false; // ali kli?e konstruktor
+ var $pi=array('canCreate'=>false); // za shrambo parametrov in sporocil
+ var $rtf;
+
+ public static $ttestClass = null; //ttest class
+
+ var $ttestData1;
+ var $ttestData2;
+
+ var $ttestVars;
+
+ var $sessionData; // podatki ki so bili prej v sessionu - za nastavitve, ki se prenasajo v izvoze...
+
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null)
+ {
+ global $site_path;
+ global $global_user_id;
+
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) )
+ {
+ $this->anketa['id'] = $anketa;
+
+ // create new RTF document
+ $this->rtf = new enka_RTF(true);
+ }
+ else
+ {
+ $this->pi['msg'] = "Anketa ni izbrana!";
+ $this->pi['canCreate'] = false;
+ return false;
+ }
+
+
+ $_GET['a'] = A_ANALYSIS;
+
+ // preberemo nastavitve iz baze (prej v sessionu)
+ SurveyUserSession::Init($this->anketa['id']);
+ $this->sessionData = SurveyUserSession::getData();
+
+ // ustvarimo ttest objekt
+ $this->ttestClass = new SurveyTTest($anketa);
+
+ if ( SurveyInfo::getInstance()->SurveyInit($this->anketa['id']) && $this->init())
+ {
+ $this->anketa['uid'] = $global_user_id;
+ SurveyUserSetting::getInstance()->Init($this->anketa['id'], $this->anketa['uid']);
+ }
+ else
+ return false;
+ // ce smo prisli do tu je vse ok
+ $this->pi['canCreate'] = true;
+ return true;
+ }
+
+ function getAnketa()
+ { return $this->anketa['id']; }
+
+ function checkCreate()
+ {
+ return $this->pi['canCreate'];
+ }
+
+ function getFile($fileName)
+ {
+ $this->rtf->display($fileName = "analiza.rtf",true);
+ }
+
+ function init()
+ {
+ global $lang;
+
+ // dodamo avtorja in naslov
+ $this->rtf->WriteTitle();
+ $this->rtf->WriteHeader($this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()), 'left');
+ $this->rtf->WriteHeader($this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()), 'right');
+ $this->rtf->WriteFooter($lang['page']." {PAGE} / {NUMPAGES}", 'right');
+ $this->rtf->set_default_font(FNT_TIMES, FNT_MAIN_SIZE);
+ return true;
+ }
+
+ function createRtf()
+ {
+ global $site_path;
+ global $lang;
+
+ // izpisemo prvo stran
+ //$this->createFrontPage();
+
+ $this->rtf->draw_title($lang['export_analisys_ttest']);
+
+
+ if (count($this->sessionData['ttest']['sub_conditions']) > 1 ) {
+ $variables1 = $this->ttestClass->getSelectedVariables();
+ if (count($variables1) > 0) {
+ foreach ($variables1 AS $v_first) {
+ $ttest = null;
+ $ttest = $this->ttestClass->createTTest($v_first, $this->sessionData['ttest']['sub_conditions']);
+
+ $this->rtf->new_line(2);
+
+ $this->displayTTestTable($ttest);
+
+ if($this->sessionData['ttest_charts']['showChart'] == '1'){
+ $this->displayChart();
+ }
+ }
+ }
+ }
+ }
+
+ public function displayTTestTable($ttest) {
+ global $lang;
+
+ # preverimo ali imamo izbrano odvisno spremenljivko
+ $spid1 = $this->sessionData['ttest']['variabla'][0]['spr'];
+ $seq1 = $this->sessionData['ttest']['variabla'][0]['seq'];
+ $grid1 = $this->sessionData['ttest']['variabla'][0]['grd'];
+
+
+ if (is_array($ttest) && count($ttest) > 0 && (int)$seq1 > 0) {
+
+ $spr_data_1 = $this->ttestClass->_HEADERS[$spid1];
+ if ($grid1 == 'undefined') {
+
+ # imamp lahko veÄ variabel
+ $seq = $seq1;
+ foreach ($spr_data_1['grids'] as $gkey => $grid ) {
+
+ foreach ($grid['variables'] as $vkey => $variable) {
+ $sequence = $variable['sequence'];
+ if ($sequence == $seq) {
+ $sprLabel1 = '('.$variable['variable'].') '. $variable['naslov'];
+ }
+ }
+ }
+ } else {
+ # imamo subgrid
+ $sprLabel1 = '('.$spr_data_1['grids'][$grid1]['variable'].') '. $spr_data_1['grids'][$grid1]['naslov'];
+ }
+
+ # polovio labele
+ $spid2 = $this->sessionData['ttest']['spr2'];
+ $sprLabel2 = trim(str_replace('&nbsp;','',$this->sessionData['ttest']['label2']));
+ $label1 = $this->ttestClass->getVariableLabels($this->sessionData['ttest']['sub_conditions'][0]);
+ $label2 = $this->ttestClass->getVariableLabels($this->sessionData['ttest']['sub_conditions'][1]);
+
+ $this->ttestVars = array($sprLabel1, $sprLabel2);
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '\clbrdrt\brdrs\brdrw10';
+ $borderLR = '\clbrdrl\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ $border = '\clbrdrb\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrt\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ //$align = ($arrayParams['align']=='center' ? '\qc' : '\ql');
+ $bold = '\b';
+
+ //nastavitve tabele - (sirine celic, border...)
+ $defw_full = 13500;
+ $defw_part = 5000;
+ $defw_part2 = 9000;
+ $defw_part3 = 1000;
+
+
+ // zacetek tabele
+ $this->rtf->MyRTF .= $this->rtf->_font_size(16);
+ $this->rtf->MyRTF .= "{\par";
+
+
+ // prva vrstica
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderLR.$borderT.'\clvmgf\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText($sprLabel2). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->encodeText($sprLabel1). '\qc\cell';
+ $tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+
+ // druga vrstica
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderLR.$borderB.'\clvmrg\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText('&nbsp; '). '\qc\cell';
+
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $defw_part3 );
+ $tableEnd .= '\pard\intbl\b0 '.$this->encodeText('n'). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + 2*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.$this->encodeText('x'). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + 3*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.$this->encodeText('s^2'). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + 4*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.$this->encodeText('se(x)'). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + 5*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.$this->encodeText('±1,96×se(x)'). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + 6*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.$this->encodeText('d'). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + 7*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.$this->encodeText('se(d)'). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + 8*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.$this->encodeText('Sig.'). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + 9*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.$this->encodeText('t'). '\qc\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ // vrstici s podatki
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderLR.$borderB.'\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText($label1). '\qc\cell';
+
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $defw_part3 );
+ $tableEnd .= '\pard\intbl\b0 '.$this->formatNumber($ttest[1]['n'], 0). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + 2*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.$this->formatNumber($ttest[1]['x'], 3). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + 3*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.$this->formatNumber($ttest[1]['s2'], 3). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + 4*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.$this->formatNumber($ttest[1]['se'], 3). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + 5*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.$this->formatNumber($ttest[1]['margin'], 3). '\qc\cell';
+ $table .= '\clvertalc'.$borderLR.'\clvmgf\cellx'.( $defw_part + 6*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.$this->formatNumber($ttest['d'], 3). '\qc\cell';
+ $table .= '\clvertalc'.$borderLR.'\clvmgf\cellx'.( $defw_part + 7*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.$this->formatNumber($ttest['sed'], 3). '\qc\cell';
+ $table .= '\clvertalc'.$borderLR.'\clvmgf\cellx'.( $defw_part + 8*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.$this->formatNumber($ttest['sig'], 3). '\qc\cell';
+ $table .= '\clvertalc'.$borderLR.'\clvmgf\cellx'.( $defw_part + 9*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.$this->formatNumber($ttest['t'], 3). '\qc\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table = '\clvertalc'.$borderLR.$borderB.'\cellx'.( $defw_part );
+ $tableEnd = '\pard\intbl'.$bold.' '.$this->encodeText($label2). '\qc\cell';
+
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + $defw_part3 );
+ $tableEnd .= '\pard\intbl\b0 '.$this->formatNumber($ttest[2]['n'], 0). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + 2*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.$this->formatNumber($ttest[2]['x'], 3). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + 3*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.$this->formatNumber($ttest[2]['s2'], 3). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + 4*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.$this->formatNumber($ttest[2]['se'], 3). '\qc\cell';
+ $table .= '\clvertalc'.$border.'\cellx'.( $defw_part + 5*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.$this->formatNumber($ttest[2]['margin'], 3). '\qc\cell';
+ $table .= '\clvertalc'.$borderLR.$borderB.'\clvmrg\cellx'.( $defw_part + 6*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.$this->encodeText('&nbsp; '). '\qc\cell';
+ $table .= '\clvertalc'.$borderLR.$borderB.'\clvmrg\cellx'.( $defw_part + 7*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.$this->encodeText('&nbsp; '). '\qc\cell';
+ $table .= '\clvertalc'.$borderLR.$borderB.'\clvmrg\cellx'.( $defw_part + 8*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.$this->encodeText('&nbsp; '). '\qc\cell';
+ $table .= '\clvertalc'.$borderLR.$borderB.'\clvmrg\cellx'.( $defw_part + 9*$defw_part3 );
+ $tableEnd .= '\pard\intbl '.$this->encodeText('&nbsp; '). '\qc\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ // konec tabele
+ $this->rtf->MyRTF .= "}";
+ $this->rtf->new_line(1);
+ }
+ }
+
+ function displayChart($counter){
+ global $lang;
+
+ $tableChart = new SurveyTableChart($this->anketa['id'], $this->ttestClass, 'ttest');
+ $tableChart->setTTestChartSession();
+
+ // updatamo session iz baze
+ $this->sessionData = SurveyUserSession::getData();
+
+ $spid1 = $this->sessionData['ttest']['variabla'][0]['spr'];
+ $seq1 = $this->sessionData['ttest']['variabla'][0]['seq'];
+ $grid1 = $this->sessionData['ttest']['variabla'][0]['grd'];
+ $sub1 = $this->sessionData['ttest']['sub_conditions'][0];
+ $sub2 = $this->sessionData['ttest']['sub_conditions'][1];
+ $chartID = $sub1.'_'.$sub2.'_'.$spid1.'_'.$seq1.'_'.$grid1;
+
+ $settings = $this->sessionData['ttest_charts'][$chartID];
+ $imgName = $settings['name'];
+
+ // IZRIS GRAFA
+ $this->rtf->new_line(3);
+
+ // Naslov posameznega grafa
+ $this->rtf->set_font("Arial Black", 8);
+ $this->rtf->add_text($this->encodeText($lang['srv_chart_ttest_title'].':'), 'center');
+ $this->rtf->new_line();
+
+ $this->rtf->set_font("Arial Black", 8);
+ $title = $this->rtf->bold(1) .$this->ttestVars[0].' / '.$this->ttestVars[1] . $this->rtf->bold(0);
+ $this->rtf->add_text($this->encodeText($title), 'center');
+ $this->rtf->new_line();
+
+ $this->rtf->set_font("Times New Roman", 10);
+
+
+ $scale = 100;
+
+ $this->rtf->add_image('pChart/Cache/'.$imgName, $scale, 'center');
+ }
+
+
+ /*Skrajsa tekst in doda '...' na koncu*/
+ function snippet($text,$length=64,$tail="...")
+ {
+ $text = trim($text);
+ $txtl = strlen($text);
+ if($txtl > $length)
+ {
+ for($i=1;$text[$length-$i]!=" ";$i++)
+ {
+ if($i == $length)
+ {
+ return substr($text,0,$length) . $tail;
+ }
+ }
+ $text = substr($text,0,$length-$i+1) . $tail;
+ }
+ return $text;
+ }
+
+ function setUserId($usrId) {$this->anketa['uid'] = $usrId;}
+ function getUserId() {return ($this->anketa['uid'])?$this->anketa['uid']:false;}
+
+ function formatNumber($value,$digit=0,$sufix="")
+ {
+ if ( $value <> 0 && $value != null )
+ $result = round($value,$digit);
+ else
+ $result = "0";
+ $result = number_format($result, $digit, ',', '.').$sufix;
+
+ return $result;
+ }
+
+ function encodeText($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace(array("&scaron;","&#353;","&#269;"),array("�","�","�"),$text);
+ return strip_tags($text);
+ }
+}
+
+?>
diff --git a/admin/exportclases/class.rtfIzvozHeatmapImage.php b/admin/exportclases/class.rtfIzvozHeatmapImage.php
new file mode 100644
index 0000000..a81252b
--- /dev/null
+++ b/admin/exportclases/class.rtfIzvozHeatmapImage.php
@@ -0,0 +1,371 @@
+<?php
+
+ global $site_path;
+
+ include_once('../../function.php');
+ include_once('../survey/definition.php');
+ require_once('../exportclases/class.enka.rtf.php');
+
+ define("FNT_TIMES", "Times New Roman", true);
+ define("FNT_ARIAL", "Arial", true);
+
+ define("FNT_MAIN_TEXT", FNT_TIMES, true);
+ define("FNT_QUESTION_TEXT", FNT_TIMES, true);
+ define("FNT_HEADER_TEXT", FNT_TIMES, true);
+
+ define("FNT_MAIN_SIZE", 12, true);
+ define("FNT_QUESTION_SIZE", 10, true);
+ define("FNT_HEADER_SIZE", 10, true);
+
+ define("M_ANALIZA_DESCRIPTOR", "descriptor", true);
+ define("M_ANALIZA_FREQUENCY", "frequency", true);
+ define("ALLOW_HIDE_ZERRO_REGULAR", false); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za navadne odgovore
+ define("ALLOW_HIDE_ZERRO_MISSING", true); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za missinge
+
+
+class rtfIzvozHeatmapImage {
+
+ var $anketa; // trenutna anketa
+ var $grupa = null; // trenutna grupa
+ var $usrId = null; // trenutni user
+ var $spremenljivka; // trenutna spremenljivka
+ var $usr_id; // ID trenutnega uporabnika
+ var $printPreview = false; // ali kli?e konstruktor
+ var $pi=array('canCreate'=>false); // za shrambo parametrov in sporocil
+ var $rtf;
+
+ var $headFileName = null; // pot do header fajla
+ var $dataFileName = null; // pot do data fajla
+ var $dataFileStatus = null; // status data datoteke
+
+ var $skin;
+ var $numbering;
+ var $frontpage;
+
+ var $sessionData; // podatki ki so bili prej v sessionu - za nastavitve, ki se prenasajo v izvoze...
+
+ var $current_loop = 'undefined';
+
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null, $sprID = null, $loop = null)
+ {
+ global $site_path;
+ global $global_user_id;
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) )
+ {
+ $this->anketa = $anketa;
+ $this->spremenljivka = $sprID;
+
+ // Poskrbimo za datoteko s podatki
+ $SDF = SurveyDataFile::get_instance();
+ $SDF->init($this->anketa);
+ $SDF->prepareFiles();
+
+ $this->headFileName = $SDF->getHeaderFileName();
+ $this->dataFileName = $SDF->getDataFileName();
+ $this->dataFileStatus = $SDF->getStatus();
+
+ SurveyZankaProfiles :: Init($this->anketa, $global_user_id);
+ $this->current_loop = ($loop != null) ? $loop : $this->current_loop;
+
+ SurveyAnalysis::Init($this->anketa);
+ SurveyAnalysis::$setUpJSAnaliza = false;
+
+ # inicializiramo grafe
+ SurveyChart::Init($this->anketa);
+
+ // create new RTF document
+ $this->rtf = new enka_RTF();
+
+ // preberemo nastavitve iz baze (prej v sessionu)
+ SurveyUserSession::Init($this->anketa);
+ $this->sessionData = SurveyUserSession::getData('charts');
+ }
+ else
+ {
+ $this->pi['msg'] = "Anketa ni izbrana!";
+ $this->pi['canCreate'] = false;
+ return false;
+ }
+ if ( SurveyInfo::getInstance()->SurveyInit($this->anketa) && $this->init())
+ {
+ SurveyUserSetting::getInstance()->Init($this->anketa, $global_user_id);
+
+ $this->skin = SurveyUserSetting :: getInstance()->getSettings('default_chart_profile_skin');
+ $this->numbering = SurveyDataSettingProfiles :: getSetting('chartNumbering');
+ $this->frontpage = SurveyDataSettingProfiles :: getSetting('chartFP');
+ }
+ else
+ return false;
+
+ // ce smo prisli do tu je vse ok
+ $this->pi['canCreate'] = true;
+ return true;
+ }
+
+ function getAnketa()
+ { return $this->anketa; }
+
+ function checkCreate()
+ {
+ return $this->pi['canCreate'];
+ }
+
+ function getFile($fileName)
+ {
+ //Close and output rtf document
+// $this->rtf->Output($fileName, 'I');
+ //$this->rtf->display($fileName = "analiza.rtf",true);
+ $this->rtf->display($fileName = 'rtf_analiza_heatmap_image_'.$this->spremenljivka.'.rtf',true);
+ }
+
+ function init()
+ {
+ global $lang;
+
+ // dodamo avtorja in naslov
+ $this->rtf->WriteTitle();
+ $this->rtf->WriteHeader($this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()), 'left');
+ $this->rtf->WriteHeader($this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()), 'right');
+ $this->rtf->WriteFooter($lang['page']." {PAGE} / {NUMPAGES}", 'right');
+ $this->rtf->set_default_font(FNT_TIMES, FNT_MAIN_SIZE);
+ return true;
+ }
+
+ function createRtf()
+ {
+ global $site_path;
+ global $lang;
+
+ // izpisemo prvo stran
+ if($this->frontpage == 1)
+ $this->createFrontPage();
+ else{
+ //$this->rtf->draw_title('ANALIZA - Grafi');
+ $this->rtf->set_font("Arial Black", 15);
+ $TITLE = $this->rtf->bold(1) . $this->rtf->underline(1) . $lang['export_analysis_heatmap_image'] . $this->rtf->underline(0) . $this->rtf->bold(0);
+ $this->rtf->new_line();
+ $this->rtf->add_text($TITLE, 'left');
+ $this->rtf->new_line();
+
+ // Datum zbiranja podatkov
+ $this->rtf->TextCell($this->getEntryDates(), array('width' => 9500, 'height' => 1,
+ 'align' => 'left', 'valign' => 'top' , 'border' => '','colorF' => "0" ));
+ }
+
+ $this->rtf->MyRTF .= $this->rtf->_font_size(16);
+
+ # preberemo header
+ if ($this->headFileName !== null) {
+ //polovimo podatke o nastavitvah trenutnega profila (missingi..)
+ SurveyAnalysis::$missingProfileData = SurveyMissingProfiles::getProfile(SurveyAnalysis::$currentMissingProfile);
+
+ // Preverimo ce imamo zanke (po skupinah)
+ SurveyAnalysis::$_LOOPS = SurveyZankaProfiles::getFiltersForLoops();
+
+ # Äe nimamo zank
+ if(count(SurveyAnalysis::$_LOOPS) == 0){
+ $this->displayImage($this->spremenljivka);
+ //$this->displayCharts();
+ }
+ } // end if else ($_headFileName == null)
+
+ }
+
+ function displayImage($spremenljivka){
+ global $site_url;
+ $image = $site_url.'main/survey/uploads/heatmap'.$spremenljivka.'.png';
+ $size = getimagesize($image);
+ if($size[0] == 800)
+ $scale = 75;
+ elseif($size[0] == 2400)
+ $scale = 50;
+ else
+ $scale = 100;
+ $this->rtf->add_image($image, $scale, 'center');
+
+ }
+
+ function createFrontPage()
+ {
+ global $lang;
+
+ $this->rtf->new_line(10);
+ $this->rtf->TextCell($this->rtf->bold(1).$this->enkaEncode( SurveyInfo::getInstance()->getSurveyTitle()).$this->rtf->bold(0).'\\line\n '.$lang['srv_analiza_charts'], array('width' => 9500, 'height' => 3,
+ 'align' => 'center', 'valign' => 'middle' , 'border' => array('top','bottom', 'left','right'),
+ 'colorF' => "0", 'colorB' => "0" ) );
+
+ // Datum zbiranja podatkov
+ $text =
+ $this->rtf->TextCell($this->getEntryDates(), array('width' => 9500, 'height' => 1,
+ 'align' => 'center', 'valign' => 'bottom' , 'border' => '','colorF' => "0" ));
+
+ $this->rtf->new_line(3);
+ // dodamo info:
+ $this->rtf->TextCell("", array('width' => 9500, 'height' => 1,
+ 'align' => 'left', 'valign' => 'bottom' , 'border' => array('bottom'),'colorF' => "0" ) );
+
+ $infoTable = array();
+
+ $imenaTable = array();
+ if ( SurveyInfo::getInstance()->getSurveyTitle() != SurveyInfo::getInstance()->getSurveyAkronim() )
+ $imenaTable[] = array($lang['export_firstpage_shortname'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()), "");
+ if ( SurveyInfo::getInstance()->getSurveyTitle() != SurveyInfo::getInstance()->getSurveyAkronim() )
+ $imenaTable[] = array($lang['export_firstpage_longname'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyTitle()), "");
+
+ $imenaTable[] = array($lang['export_firstpage_qcount'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyQuestionCount()), "" );
+
+ // Aktiviranost
+ $activity = SurveyInfo:: getSurveyActivity();
+ $_last_active = end($activity);
+ if (SurveyInfo::getSurveyColumn('active') == 1) {
+ $imenaTable[] = array($this->rtf->color(11).$this->enkaEncode($lang['srv_anketa_active2']).$this->rtf->color(0), "");
+ } else {
+ # preverimo ali je bila anketa že aktivirana
+ if (!isset($_last_active['starts'])) {
+ # anketa Å¡e sploh ni bila aktivirana
+ $imenaTable[] = array($this->rtf->color(17).$this->enkaEncode($lang['srv_survey_non_active_notActivated']).$this->rtf->color(0), "");
+ } else {
+ # anketa je že bila aktivirna ampak je sedaj neaktivna
+ $imenaTable[] = array($this->rtf->color(17).$this->enkaEncode($lang['srv_survey_non_active']).$this->rtf->color(0), "");
+ }
+ }
+
+ // Aktivnost
+ if( count($activity) > 0 ){
+ $imenaTable[] = array($lang['export_firstpage_active_from'].': '.SurveyInfo::getInstance()->getSurveyStartsDate(), $lang['export_firstpage_active_until'].': '.SurveyInfo::getInstance()->getSurveyExpireDate());
+ }
+
+ $imenaTable[] = array($lang['export_firstpage_author'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyInsertName()),"" );
+ $imenaTable[] = array($lang['export_firstpage_edit'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyEditName()),"" );
+ $imenaTable[] = array($lang['export_firstpage_date'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyInsertDate()),"" );
+ $imenaTable[] = array($lang['export_firstpage_date'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyEditDate()),"" );
+ $imenaTable[] = array($lang['export_firstpage_desc'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyInfo()),"" );
+ $this->rtf->TableFromArray( array( 4600, 4600 ), $imenaTable);
+
+ $this->rtf->new_page();
+ }
+
+ function enkaEncode($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ return strip_tags($text);
+ }
+
+ function encodeText($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace(array("&scaron;","&#353;","&#269;"),array("Å¡","Å¡","Ä"),$text);
+ return strip_tags($text);
+ }
+
+ function snippet($text,$length=64,$tail="...")
+ {
+ /*$text = trim($text);
+ $txtl = strlen($text);
+ if($txtl > $length)
+ {
+ for($i=1;$text[$length-$i]!=" ";$i++)
+ {
+ if($i == $length)
+ {
+ return substr($text,0,$length) . $tail;
+ }
+ }
+ $text = substr($text,0,$length-$i+1) . $tail;
+ }*/
+ return $text;
+ }
+
+ function setGrupa($grupa) {$this->grupa = $grupa;}
+ function getGrupa() {return $this->grupa;}
+ function setUserId($usrId) {$this->usrId = $usrId;}
+ function getUserId() {return ($this->usrId)?$this->usrId:false;}
+ function setDisplayFrontPage($display) {$this->pi['displayFrontPage'] = $display;}
+ function getDisplayFrontPage() {return ($this->pi['displayFrontPage'] == true || $this->pi['displayFrontPage'] == 1);}
+
+ // vrnemo string za prvi in zadnji vnos
+ function getEntryDates(){
+ global $lang;
+
+ $prvi_vnos_date = SurveyInfo::getSurveyFirstEntryDate();
+ $prvi_vnos_time = SurveyInfo::getSurveyFirstEntryTime();
+ $zadnji_vnos_date = SurveyInfo::getSurveyLastEntryDate();
+ $zadnji_vnos_time = SurveyInfo::getSurveyLastEntryTime();
+
+ if ($prvi_vnos_date != null) {
+ $first = $this->dateFormat($prvi_vnos_date,'j.n.y');
+ $first .= $prvi_vnos_time != null ? (SurveyInfo::$dateTimeSeperator .$this->dateFormat($prvi_vnos_time,'G:i')) : '';
+ }
+ if ($zadnji_vnos_date != null) {
+ $last = $this->dateFormat($zadnji_vnos_date,'j.n.y');
+ $last .= $zadnji_vnos_time != null ? (SurveyInfo::$dateTimeSeperator .$this->dateFormat($zadnji_vnos_time,'G:i')) : '';
+ }
+
+ $text = $lang['srv_setting_collectdata_datetime'].$first.' '.$lang['s_to'].' '.$last;
+
+ return $text;
+ }
+
+ function dateFormat($input, $format) {
+ if ($input != '..') {
+ return date($format,strtotime($input));
+ } else {
+ return '';
+ }
+ }
+
+ function formatNumber ($value, $digit = 0, $sufix = "") {
+ if ($value <> 0 && $value != null)
+ $result = round($value, $digit);
+ else
+ $result = "0";
+ $result = number_format($result, $digit, '.', ',') . $sufix;
+
+ return $result;
+ }
+
+
+ // Izpis opozorila ce ni vnesenih podatkov in ne prikazujemo grafa
+ function displayEmptyWarning($spid){
+
+ /*$spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ // Naslov posameznega grafa
+ $this->rtf->set_font("Arial Black", 8);
+
+ $this->rtf->new_line();
+ $this->rtf->add_text('Graf '.$spremenljivka['variable'].' nima veljavnih podatkov!', 'center');
+ $this->rtf->new_line();*/
+ }
+
+ function displayTitle($spid){
+ global $lang;
+
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ $this->rtf->new_line(3);
+
+ $stevilcenje = ($this->numbering == 1 ? $spremenljivka['variable'].' - ' : '');
+ $title = $stevilcenje . $spremenljivka['naslov'];
+ $TITLE = $this->rtf->bold(1) . $title . $this->rtf->bold(0);
+
+ // IZRIS GRAFA
+ $this->rtf->set_font("Arial Black", 8);
+ $this->rtf->add_text($TITLE, 'center');
+ $this->rtf->new_line();
+ if($spremenljivka['tip'] == 2){
+ $this->rtf->set_font("Arial", 7);
+ $this->rtf->add_text($lang['srv_info_checkbox'], 'center');
+ $this->rtf->new_line();
+ }
+ }
+}
+
+
+?>
diff --git a/admin/exportclases/class.rtfIzvozList.php b/admin/exportclases/class.rtfIzvozList.php
new file mode 100644
index 0000000..b156dd5
--- /dev/null
+++ b/admin/exportclases/class.rtfIzvozList.php
@@ -0,0 +1,568 @@
+<?php
+
+ global $site_path;
+
+ include_once('../../function.php');
+ include_once('../survey/definition.php');
+ require_once('../exportclases/class.enka.rtf.php');
+
+ define("FNT_TIMES", "Times New Roman", true);
+ define("FNT_ARIAL", "Arial", true);
+
+ define("FNT_MAIN_TEXT", FNT_TIMES, true);
+ define("FNT_QUESTION_TEXT", FNT_TIMES, true);
+ define("FNT_HEADER_TEXT", FNT_TIMES, true);
+
+ define("FNT_MAIN_SIZE", 12, true);
+ define("FNT_QUESTION_SIZE", 10, true);
+ define("FNT_HEADER_SIZE", 10, true);
+
+ define("M_ANALIZA_DESCRIPTOR", "descriptor", true);
+ define("M_ANALIZA_FREQUENCY", "frequency", true);
+ define("ALLOW_HIDE_ZERRO_REGULAR", false); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za navadne odgovore
+ define("ALLOW_HIDE_ZERRO_MISSING", true); // omogoÄimo delovanje prikazovanja/skrivanja niÄelnih vnosti za missinge
+
+
+class RtfIzvozList {
+
+ var $anketa;// = array(); // trenutna anketa
+ var $grupa = null; // trenutna grupa
+ var $usrId = null; // trenutni user
+ var $spremenljivka; // trenutna spremenljivka
+ var $usr_id; // ID trenutnega uporabnika
+ var $printPreview = false; // ali kli?e konstruktor
+ var $pi=array('canCreate'=>false); // za shrambo parametrov in sporocil
+ var $rtf;
+
+ private $headFileName = null; # pot do header fajla
+ private $dataFileName = null; # pot do data fajla
+ private $dataFileStatus = null; # status data datoteke
+
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null, $sprID = null)
+ {
+ global $site_path;
+ global $global_user_id;
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) )
+ {
+ $this->anketa['id'] = $anketa;
+ $this->spremenljivka = $sprID;
+
+ SurveyAnalysis::Init($this->anketa['id']);
+ SurveyAnalysis::$setUpJSAnaliza = false;
+
+ // create new RTF document
+ $this->rtf = new enka_RTF();
+
+ // Poskrbimo za datoteko s podatki
+ $SDF = SurveyDataFile::get_instance();
+ $SDF->init($this->anketa['id']);
+ $SDF->prepareFiles();
+
+ $this->headFileName = $SDF->getHeaderFileName();
+ $this->dataFileName = $SDF->getDataFileName();
+ $this->dataFileStatus = $SDF->getStatus();
+
+ // Nastavimo da izpisujemo samo prvih 5 spremenljivk
+ $_GET['spr_limit'] = 5;
+
+ // Nastavimo da nikoli ne izpisemo vabila
+ $_GET['email'] = 0;
+
+ SurveyDataDisplay::Init($this->anketa['id']);
+ }
+ else{
+ $this->pi['msg'] = "Anketa ni izbrana!";
+ $this->pi['canCreate'] = false;
+ return false;
+ }
+
+ if ( SurveyInfo::getInstance()->SurveyInit($this->anketa['id']) && $this->init()){
+ $this->anketa['uid'] = $global_user_id;
+ SurveyUserSetting::getInstance()->Init($this->anketa['id'], $this->anketa['uid']);
+ }
+ else
+ return false;
+
+ // ce smo prisli do tu je vse ok
+ $this->pi['canCreate'] = true;
+
+ return true;
+ }
+
+ function getAnketa()
+ { return $this->anketa['id']; }
+
+ function checkCreate()
+ {
+ return $this->pi['canCreate'];
+ }
+
+ function getFile($fileName)
+ {
+ //Close and output rtf document
+// $this->rtf->Output($fileName, 'I');
+ $this->rtf->display($fileName = "analiza.rtf",true);
+ }
+
+ function init()
+ {
+ global $lang;
+
+ // dodamo avtorja in naslov
+ $this->rtf->WriteTitle();
+ $this->rtf->WriteHeader($this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()), 'left');
+ $this->rtf->WriteHeader($this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()), 'right');
+ $this->rtf->WriteFooter($lang['page']." {PAGE} / {NUMPAGES}", 'right');
+ $this->rtf->set_default_font(FNT_TIMES, FNT_MAIN_SIZE);
+ return true;
+ }
+
+ function createRtf()
+ {
+ global $site_path;
+ global $lang;
+
+ // izpisemo prvo stran
+ //$this->createFrontPage();
+
+ $this->rtf->draw_title($lang['export_list']);
+ $this->rtf->MyRTF .= $this->rtf->_font_size(16);
+
+ $this->displayTable();
+ }
+
+
+ function displayTable(){
+ global $site_path;
+ global $lang;
+
+
+ $folder = $site_path . EXPORT_FOLDER.'/';
+
+ //polovimo podatke o nastavitvah trenutnega profila (missingi..)
+ SurveyAnalysis::$missingProfileData = SurveyMissingProfiles::getProfile(SurveyAnalysis::$currentMissingProfile);
+
+ #preberemo HEADERS iz datoteke
+ SurveyAnalysis::$_HEADERS = unserialize(file_get_contents($this->headFileName));
+
+ #odstranimo sistemske variable
+ SurveyAnalysis::removeSystemVariables();
+
+ SurveyDataDisplay::$_VARS[VAR_DATA] = 1;
+ SurveyDataDisplay::$_VARS[VAR_SPR_LIMIT] = 5;
+ SurveyDataDisplay::$_VARS[VAR_META] = 0;
+ SurveyDataDisplay::$_VARS[VAR_EMAIL] = 0;
+ SurveyDataDisplay::$_VARS[VAR_RELEVANCE] = 0;
+ SurveyDataDisplay::$_VARS[VAR_EDIT] = 0;
+ SurveyDataDisplay::$_VARS[VAR_PRINT] = 0;
+ SurveyDataDisplay::$_VARS[VAR_MONITORING] = 0;
+
+ if(SurveyDataDisplay::$_VARS['view_date'])
+ SurveyDataDisplay::$_VARS[VAR_SPR_LIMIT]++;
+
+ # ponastavimo nastavitve- filter
+ SurveyDataDisplay::setUpFilter();
+
+
+ // Prestejemo stevilo stolpcev za vsako spremenljivko
+ $spr_cont = 0;
+ $rowArray = array();
+ $row_count = 0;
+ // visine naslovnih vrstic
+ $first_height = 0;
+ $second_height = 0;
+ $third_height = 0;
+ if(SurveyDataDisplay::$_VARS['view_date']){
+ $row_count ++;
+ }
+ foreach (SurveyAnalysis::$_HEADERS AS $spid => $spremenljivka) {
+ # preverjamo ali je meta
+ if ($spremenljivka['tip'] != 'm' && in_array($spremenljivka['tip'], SurveyAnalysis::$_FILTRED_TYPES)){
+ # ali imamo sfiltrirano spremenljivko
+ if ($vars_count == 0 || ($vars_count > 0 && isset(SurveyAnalysis::$_FILTRED_VARIABLES[$spid])) && count($spremenljivka['grids']) > 0) {
+
+ // prikazemo samo prvih 5 spremenljivk
+ if($spr_cont < 5) {
+
+ $rowArray[$spr_cont]['cnt_grd'] = count($spremenljivka['grids']);
+ $rowArray[$spr_cont]['cnt_var'] = count($spremenljivka['grids'][0]['variables']);
+
+ $row_count += count($spremenljivka['grids'][0]['variables']) * count($spremenljivka['grids']);
+ }
+ $spr_cont++;
+ }
+ }
+ }
+
+ $this->rtf->MyRTF .= "{\par";
+
+ $max_width = 10300;
+ $single_width = floor($max_width / $row_count);
+ $single_width = ($single_width < 200) ? 200 : $single_width;
+
+
+ // PRVA VRSTICA (naslovi spremenljivk)
+ $tableHeader = '\trowd\trql\trrh400';
+ $table = '';
+ $tableEnd = '';
+ $spr_cont = 0;
+ $width = 0;
+ if(SurveyDataDisplay::$_VARS['view_date']){
+ $width += $single_width;
+
+ $table .= '\clvertalc\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx'.( $width );
+ $tableEnd .= '\pard\intbl\b '.$this->snippet($this->enkaEncode($lang['srv_data_date']),20,'...') . '\ql\cell';
+ }
+ foreach (SurveyAnalysis::$_HEADERS AS $spid => $spremenljivka) {
+ # preverjamo ali je meta
+ if ($spremenljivka['tip'] != 'm' && in_array($spremenljivka['tip'], SurveyAnalysis::$_FILTRED_TYPES)){
+ # ali imamo sfiltrirano spremenljivko
+ if ($vars_count == 0 || ($vars_count > 0 && isset(SurveyAnalysis::$_FILTRED_VARIABLES[$spid]))) {
+
+ // prikazemo samo prvih 5 spremenljivk
+ if ($spr_cont < 5) {
+ $width += $single_width * $rowArray[$spr_cont]['cnt_var'] * $rowArray[$spr_cont]['cnt_grd'];
+
+ $table .= '\clvertalc\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx'.( $width );
+ $tableEnd .= '\pard\intbl\b '.$this->snippet($this->enkaEncode($spremenljivka['naslov']),20,'...') . '\ql\cell';
+ }
+ $spr_cont++;
+ }
+ }
+ }
+ $tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ // DRUGA VRSTICA (imena gridov)
+ $tableHeader = '\trowd\trql\trrh400';
+ $table = '';
+ $tableEnd = '';
+ $spr_cont = 0;
+ $width = 0;
+ if(SurveyDataDisplay::$_VARS['view_date']){
+ $width += $single_width;
+
+ $table .= '\clvertalc\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx'.( $width );
+ $tableEnd .= '\pard\intbl\b '.$this->snippet($this->enkaEncode($lang['srv_data_date']),20,'...') . '\ql\cell';
+ }
+ foreach (SurveyAnalysis::$_HEADERS AS $spid => $spremenljivka) {
+ # preverjamo ali je meta
+ if ($spremenljivka['tip'] != 'm' && in_array($spremenljivka['tip'], SurveyAnalysis::$_FILTRED_TYPES)){
+ # ali imamo sfiltrirano spremenljivko
+ if ($vars_count == 0 || ($vars_count > 0 && isset(SurveyAnalysis::$_FILTRED_VARIABLES[$spid])) && count($spremenljivka['grids']) > 0) {
+
+ // prikazemo samo prvih 5 spremenljivk
+ if ($spr_cont < 5) {
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $width += $single_width * $rowArray[$spr_cont]['cnt_var'];
+
+ $table .= '\clvertalc\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx'.( $width );
+ $tableEnd .= '\pard\intbl\b '.$this->snippet($this->enkaEncode($grid['naslov']),20,'...') . '\qc\cell';
+ }
+ }
+ $spr_cont++;
+ }
+ }
+ }
+ $tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ // TRETJA VRSTICA (imena variabel)
+ $tableHeader = '\trowd\trql\trrh400';
+ $table = '';
+ $tableEnd = '';
+ $spr_cont = 0;
+ $width = 0;
+ if(SurveyDataDisplay::$_VARS['view_date']){
+ $width += $single_width;
+
+ $table .= '\clvertalc\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx'.( $width );
+ $tableEnd .= '\pard\intbl\b '.$this->snippet($this->enkaEncode($lang['srv_data_date']),20,'...') . '\ql\cell';
+ }
+ foreach (SurveyAnalysis::$_HEADERS AS $spid => $spremenljivka) {
+ # preverjamo ali je meta
+ if ($spremenljivka['tip'] != 'm' && in_array($spremenljivka['tip'], SurveyAnalysis::$_FILTRED_TYPES)){
+ # ali imamo sfiltrirano spremenljivko
+ if ($vars_count == 0 || ($vars_count > 0 && isset(SurveyAnalysis::$_FILTRED_VARIABLES[$spid])) && count($spremenljivka['grids']) > 0) {
+
+ // prikazemo samo prvih 5 spremenljivk
+ if($spr_cont < 5) {
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ if (count ($grid['variables']) > 0) {
+ foreach ($grid['variables'] AS $vid => $variable ){
+
+ $text = $variable['naslov'];
+ if ($variable['other'] == 1)
+ $text .= '&nbsp;(text)';
+
+ $width += $single_width;
+
+ $table .= '\clvertalc\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx'.( $width );
+ $tableEnd .= '\pard\intbl\b '.$this->snippet($this->enkaEncode($text),20,'...') . '\qc\cell';
+ }
+ }
+ }
+ }
+ $spr_cont++;
+ }
+ }
+ }
+ $tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+
+ // Nastavimo stevilo izpisov - prikazemo vse
+ $_REC_LIMIT = '';
+ //$_REC_LIMIT = ' NR==1,NR==50';
+
+ $_command = '';
+ #preberemo podatke
+ // polovimo vrstice z statusom 5,6 in jih damo v zaÄasno datoteko
+ if (IS_WINDOWS) {
+ $_command = 'gawk -F"'.STR_DLMT.'" "BEGIN {OFS=\"\x7C\"} '.SurveyDataDisplay::$_CURRENT_STATUS_FILTER.' { print $0 }" '.$this->dataFileName;
+ }
+ else {
+ $_command = 'awk -F"'.STR_DLMT.'" \'BEGIN {OFS="\x7C"} '.SurveyDataDisplay::$_CURRENT_STATUS_FILTER.' { print $0 }\' '.$this->dataFileName;
+ }
+
+ // paginacija po stolpcih (spremenljivkah)
+ if (IS_WINDOWS) {
+ $_command .= ' | cut -d "|" -f 1,'.SurveyDataDisplay::$_VARIABLE_FILTER;
+ } else {
+ $_command .= ' | cut -d \'|\' -f 1,'.SurveyDataDisplay::$_VARIABLE_FILTER;
+ }
+
+ if ($_REC_LIMIT != '') {
+ #paginating
+ if (IS_WINDOWS) {
+ $_command .= ' | awk '.$_REC_LIMIT;
+ } else {
+ $_command .= ' | awk '.$_REC_LIMIT;
+ }
+ } else {
+ #$file_sufix = 'filtred_spr_pagination';
+ }
+
+ // zamenjamo | z </td><td> - NI POTREBNO
+ if (IS_WINDOWS) {
+ //$_command .= ' | sed "s*'.STR_DLMT.'*'.STR_LESS_THEN.'/td'.STR_GREATER_THEN.STR_LESS_THEN.'td'.STR_GREATER_THEN.'*g" >> '.$folder.'tmp_export_'.$this->anketa['id'].'_data'.TMP_EXT;
+ $_command .= ' >> '.$folder.'tmp_export_'.$this->anketa['id'].'_data'.TMP_EXT;
+ }
+ else {
+ //$_command .= ' | sed \'s*'.STR_DLMT.'*</td><td>*g\' >> '
+ //.$folder.'tmp_export_'.$this->anketa['id'].'_data'.TMP_EXT;
+ $_command .= ' >> '.$folder.'tmp_export_'.$this->anketa['id'].'_data'.TMP_EXT;
+ }
+
+ if (IS_WINDOWS) {
+ # ker so na WINsih težave z sortom, ga damo v bat fajl in izvedemo :D
+ $file_handler = fopen($folder.'cmd_'.$this->anketa['id'].'_to_run.bat',"w");
+ fwrite($file_handler,$_command);
+ fclose($file_handler);
+ $out_command = shell_exec($folder.'cmd_'.$this->anketa['id'].'_to_run.bat');
+ unlink($folder.'cmd_'.$this->anketa['id'].'_to_run.bat');
+ } else {
+ $out_command = shell_exec($_command);
+ }
+
+ if (file_exists($folder.'tmp_export_'.$this->anketa['id'].'_data'.TMP_EXT)) {
+ $f = fopen ($folder.'tmp_export_'.$this->anketa['id'].'_data'.TMP_EXT, 'r');
+
+ while ($line = fgets ($f)) {
+
+
+
+ $dataArray = array();
+ $dataArray = explode('|', $line);
+
+ // Ne upostevamo prve vrednosti (ID)
+ array_shift($dataArray);
+
+ $tableHeader = '\trowd\trql\trrh400';
+ $table = '';
+ $tableEnd = '';
+ $width = 0;
+ foreach($dataArray as $key => $val){
+
+ $break = ($spr_cont == 4 && $gid == $rowArray[$spr_cont]['cnt_grd']-1 && $vid == $rowArray[$spr_cont]['cnt_var']-1) ? 1 : 0;
+ $width += $single_width;
+
+ $table .= '\clvertalc\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx'.( $width );
+ $tableEnd .= '\pard\intbl\b0 '.$this->snippet($this->enkaEncode($val),20,'...') . '\qc\cell';
+ }
+ $tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+ }
+
+ $this->rtf->MyRTF .= "}";
+ $this->rtf->new_line(1);
+
+ if ($f) {
+ fclose($f);
+ }
+ if (file_exists($folder.'tmp_export_'.$this->anketa['id'].'_data'.TMP_EXT)) {
+ unlink($folder.'tmp_export_'.$this->anketa['id'].'_data'.TMP_EXT);
+ }
+ }
+
+
+ function createFrontPage()
+ {
+ global $lang;
+
+ $this->rtf->new_line(10);
+ $this->rtf->TextCell($this->encodeText( SurveyInfo::getInstance()->getSurveyTitle()), array('width' => 9500, 'height' => 3,
+ 'align' => 'center', 'valign' => 'middle' , 'border' => array('top','bottom', 'left','right'),
+ 'colorF' => "0", 'colorB' => "0" ) );
+ $this->rtf->new_line(3);
+ // dodamo info:
+ $this->rtf->TextCell("", array('width' => 9500, 'height' => 1,
+ 'align' => 'left', 'valign' => 'bottom' , 'border' => array('bottom'),'colorF' => "0" ) );
+
+ $infoTable = array();
+
+ $imenaTable = array();
+ if ( SurveyInfo::getInstance()->getSurveyTitle() != SurveyInfo::getInstance()->getSurveyAkronim() )
+ $imenaTable[] = array($lang['export_firstpage_shortname'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyAkronim()), "");
+ if ( SurveyInfo::getInstance()->getSurveyTitle() != SurveyInfo::getInstance()->getSurveyAkronim() )
+ $imenaTable[] = array($lang['export_firstpage_longname'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyTitle()), "");
+
+ $imenaTable[] = array($lang['export_firstpage_qcount'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyQuestionCount()), "" );
+ $imenaTable[] = array($lang['export_firstpage_active_from'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyStartsDate()),"" );
+ $imenaTable[] = array($lang['export_firstpage_active_until'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyExpireDate()),"" );
+ $imenaTable[] = array($lang['export_firstpage_author'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyInsertName()),"" );
+ $imenaTable[] = array($lang['export_firstpage_edit'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyEditName()),"" );
+ $imenaTable[] = array($lang['export_firstpage_date'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyInsertDate()),"" );
+ $imenaTable[] = array($lang['export_firstpage_date'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyEditDate()),"" );
+ $imenaTable[] = array($lang['export_firstpage_desc'].': '.$this->encodeText(SurveyInfo::getInstance()->getSurveyInfo()),"" );
+ $this->rtf->TableFromArray( array( 4600, 4600 ), $imenaTable);
+
+ $this->rtf->new_page();
+ }
+
+ function enkaEncode($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ return strip_tags($text);
+ }
+
+ function encodeText($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace(array("&scaron;","&#353;","&#269;"),array("Å¡","Å¡","Ä"),$text);
+ return strip_tags($text);
+ }
+
+ function snippet($text,$length=64,$tail="...")
+ {
+ /*$text = trim($text);
+ $txtl = strlen($text);
+ if($txtl > $length)
+ {
+ for($i=1;$text[$length-$i]!=" ";$i++)
+ {
+ if($i == $length)
+ {
+ return substr($text,0,$length) . $tail;
+ }
+ }
+ $text = substr($text,0,$length-$i+1) . $tail;
+ }*/
+ return $text;
+ }
+
+ function setGrupa($grupa) {$this->grupa = $grupa;}
+ function getGrupa() {return $this->grupa;}
+ function setUserId($usrId) {$this->usrId = $usrId;}
+ function getUserId() {return ($this->usrId)?$this->usrId:false;}
+ function setDisplayFrontPage($display) {$this->pi['displayFrontPage'] = $display;}
+ function getDisplayFrontPage() {return ($this->pi['displayFrontPage'] == true || $this->pi['displayFrontPage'] == 1);}
+
+
+ function tableFirstLine($field1, $field2){
+ global $lang;
+
+ $defw_full = 10300;
+ $defw_part = 1300;
+ $defw_part2 = 9000;
+
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = '\clbrdrt\brdrs\brdrw10';
+ //$align = ($arrayParams['align']=='center' ? '\qc' : '\ql');
+ $bold = '\b';
+
+ $this->rtf->MyRTF .= "{\par";
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($field1),20,'...') . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($field2),20,'...') . '\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+
+ function tableRow($arrayText, $arrayParams=array()){
+
+ $defw_full = 10300;
+ $defw_part = 1300;
+ $defw_part2 = 3800;
+
+ //$borderB = ($arrayParams['borderB']==1 ? '\clbrdrb\brdrs\brdrw10' : '');
+ $borderB = '\clbrdrb\brdrs\brdrw10';
+ $borderT = ($arrayParams['borderT']==1 ? '\clbrdrt\brdrs\brdrw10' : '');
+ $align = ($arrayParams['align2']=='C' ? '\qc' : '\ql');
+ $bold = ($arrayParams['bold']=='B' ? '\b' : '\b0');
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($arrayText[0]),20,'...') . '\qc\cell';
+
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( $defw_part + $defw_part2 );
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($arrayText[1]),20,'...') .$align.'\cell';
+
+ for($i=0; $i<4; $i++){
+ $table .= '\clvertalc'.$borderT.'\clbrdrl\brdrs\brdrw10' . $borderB . '\clbrdrr\brdrs\brdrw10\cellx'.( ($i+2) * $defw_part + $defw_part2);
+ $tableEnd .= '\pard\intbl'.$bold.' '.$this->snippet($this->enkaEncode($arrayText[$i+2]),20,'...').'\qc\cell';
+ }
+
+ $tableEnd .= '\pard\intbl\row';
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+
+ function tableEnd(){
+
+ $this->rtf->MyRTF .= "}";
+ $this->rtf->new_line(1);
+ }
+
+
+ function formatNumber ($value, $digit = 0, $sufix = "") {
+ if ($value <> 0 && $value != null)
+ $result = round($value, $digit);
+ else
+ $result = "0";
+ $result = number_format($result, $digit, '.', ',') . $sufix;
+
+ return $result;
+ }
+
+}
+
+
+?>
diff --git a/admin/exportclases/class.rtfIzvozResults.php b/admin/exportclases/class.rtfIzvozResults.php
new file mode 100644
index 0000000..31975bb
--- /dev/null
+++ b/admin/exportclases/class.rtfIzvozResults.php
@@ -0,0 +1,2824 @@
+<?php
+/*
+ * Created on 28.2.2009
+ *
+ */
+require("class.enka.rtf.php");
+
+require_once ('../../vendor/autoload.php');
+require_once ('../survey/definition.php');
+
+
+define("FNT_TIMES", "Times New Roman", true);
+define("FNT_ARIAL", "Arial", true);
+
+define("FNT_MAIN_TEXT", FNT_TIMES, true);
+define("FNT_QUESTION_TEXT", FNT_TIMES, true);
+define("FNT_HEADER_TEXT", FNT_TIMES, true);
+
+define("FNT_MAIN_SIZE", 12, true);
+define("FNT_QUESTION_SIZE", 10, true);
+define("FNT_HEADER_SIZE", 10, true);
+
+
+class RtfIzvozResults {
+
+ var $anketa;// = array(); // trenutna anketa
+ var $grupa = null; // trenutna grupa
+
+ var $spremenljivka; // trenutna spremenljivka
+ var $printPreview = false; // ali kliÄe konstruktor
+ var $pi=array('canCreate'=>false); // za shrambo parametrov in sporocil
+ var $rtf;
+
+ var $db_table = '';
+
+ var $type = 0; // nacin izpisa vprasanj - kratek -> 0, dolg -> 1, 2 -> zelo kratek
+ var $pageBreak = 0; // vsak respondent na svoji strani
+ var $showIf = 0; // izpis if-ov
+ var $font = 10; // velikost pisave
+ var $numbering = 0; // ostevillcevanje vprasanj
+ var $showRecnum = 1; // prikaz recnuma
+ var $skipEmpty = 0; // izpusti vprasanja brez odgovora
+ var $skipEmptySub = 0; // izpusti podvprasanja brez odgovora
+ var $landscape = 0; // landscape izpis
+
+ var $loop_id = null; // id trenutnega loopa ce jih imamo
+
+ var $usr_type = null; // tip userja (null->iz vmesnika, author->avtor iz maila, respondent->respondent iz maila, other->other iz maila)
+ var $usr_id = null; // id userja ki je odgovarjal (na katerega so vezani podatki)
+ var $resp_id = null; // id userja na katerega so vezane nastavitve ankete (filtriranje spremenljivk...)
+
+ var $admin_type = -1; // tip userja ki odpira pdf (posebej nastavimo ker global admin_type ne dela iz mailov)
+
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null, $usr_type = null, $usr_id = null)
+ {
+ global $site_path;
+ global $global_user_id;
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) )
+ {
+ $this->anketa['id'] = $anketa;
+
+ $this->usr_id = $_GET['usr_id'];
+
+ // Ce prihajamo iz maila imamo nastavljen usr_type in usr_id
+ if($usr_type != null && $usr_id != null){
+ $this->usr_type = $usr_type;
+
+ //$this->resp_id = $usr_id;
+ // Ajda hoce da ce dobi po mailu pdf mora bit isti kot ga dobi respondent
+ $this->resp_id = $_GET['usr_id'];
+ }
+ // Drugace prihajamo normalno iz podatkov (usr_id je avtorjev -> $global_user_id)
+ else{
+ $this->resp_id = $global_user_id;
+ }
+
+ // Nastavimo admin type
+ $sqlU = sisplet_query("SELECT type FROM users WHERE id='".$this->resp_id."'");
+ if($rowU = mysqli_fetch_array($sqlU))
+ $this->admin_type = $rowU['type'];
+
+
+ // Po novem imamo globalne nastavitve
+ SurveySetting::getInstance()->Init($anketa);
+ $this->type = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_data_type');
+ $this->font = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_data_font_size');
+ $this->showIf = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_data_show_if');
+ $this->numbering = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_data_numbering');
+ $this->pageBreak = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_data_PB');
+ $this->showRecnum = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_data_show_recnum');
+ $this->skipEmpty = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_data_skip_empty');
+ $this->skipEmptySub = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_data_skip_empty_sub');
+ $this->landscape = (int)SurveySetting::getInstance()->getSurveyMiscSetting('export_data_landscape');
+
+
+ SurveyStatusProfiles::Init($anketa);
+
+ // create new RTF document
+ $orientation = ($this->landscape == 1) ? true : false;
+ $this->rtf = new enka_RTF($orientation);
+ }
+ else
+ {
+ $this->pi['msg'] = "Anketa ni izbrana!";
+ $this->pi['canCreate'] = false;
+ return false;
+ }
+ if ( SurveyInfo::getInstance()->SurveyInit($this->anketa['id']) && $this->init())
+ {
+ SurveyUserSetting::getInstance()->Init($this->anketa['id'], $global_user_id);
+
+ if (SurveyInfo::getInstance()->getSurveyColumn('db_table') == 1)
+ $this->db_table = '_active';
+ }
+ else
+ return false;
+ // ce smo prisli do tu je vse ok
+ $this->pi['canCreate'] = true;
+ return true;
+ }
+
+ function getAnketa()
+ { return $this->anketa['id']; }
+
+ function checkCreate()
+ {
+ return $this->pi['canCreate'];
+ }
+
+ function getFile($fileName)
+ {
+ //Close and output rtf document
+// $this->rtf->Output($fileName, 'I');
+ $this->rtf->display($fileName = 'anketa'.time().'.rtf',true);
+ }
+
+
+
+ function init()
+ {
+ global $lang;
+
+ $orientation = ($this->landscape == 1) ? true : false;
+
+ // dodamo avtorja in naslov
+ $this->rtf->WriteTitle();
+
+ if($this->getUserId() && $this->showRecnum == 1){
+ $sqlu = sisplet_query("SELECT * FROM srv_user WHERE id = '".$this->getUserId()."'");
+ $rowu = mysqli_fetch_array($sqlu);
+
+ $rightTitle = SurveyInfo::getInstance()->getSurveyAkronim().' (recnum '.$rowu['recnum'].') ';
+ $this->rtf->WriteHeader($this->enkaEncode($rightTitle), 'right', $orientation);
+ }
+ else
+ $this->rtf->WriteHeader($this->enkaEncode(SurveyInfo::getInstance()->getSurveyAkronim()), 'right', $orientation);
+
+ $this->rtf->WriteFooter($lang['page']." {PAGE} / {NUMPAGES}", 'right', $orientation);
+ $this->rtf->set_default_font(FNT_TIMES, $this->font);
+ return true;
+ }
+
+ function createRtf()
+ {
+ // Izpis vseh odgovorov (vsi respondenti -> max 300)
+ if(!$this->getUserId())
+ $this->outputAllResults();
+
+ // Izpis vprasalnika oz odgovorov enega respondenta
+ else
+ $this->outputSurvey();
+ }
+
+ // Izpis vprasalnika z odgovori
+ function outputSurvey(){
+ global $lang;
+
+ $rowA = SurveyInfo::getInstance()->getSurveyRow();
+
+ // izpišemo prvo stran
+ if (false)
+ $this->createFrontPage();
+
+
+ // Izpisemo vprasalnik
+
+ // ce obstaja intro izpisemo intro - pri izpisu vprasalnika brez odgovorov (ce smo na prvi strani moramo biti v razsirjenem nacinu)
+ /*if(($rowA['expanded'] == 1 && $this->allResults == 3) || (!$this->getUserId() && $this->allResults == 0)){
+ if ( SurveyInfo::getInstance()->getSurveyShowIntro() )
+ {
+ $intro = (SurveyInfo::getInstance()->getSurveyIntro() == '') ? $lang['srv_intro'] : SurveyInfo::getInstance()->getSurveyIntro();
+
+ // ce obstaja intro izpisemo intro
+ $this->rtf->add_text($intro);
+ $this->rtf->new_line(3);
+ }
+ }*/
+
+ // filtriramo spremenljivke glede na profil - SAMO CE NE PRIHAJAMO IZ MAILA!
+ $tmp_svp_pv = array();
+ if($this->usr_type == null){
+ SurveyVariablesProfiles :: Init($this->anketa['id'], $this->resp_id, true, false);
+
+ $dvp = SurveyUserSetting :: getInstance()->getSettings('default_variable_profile');
+ $_currentVariableProfile = SurveyVariablesProfiles :: checkDefaultProfile($dvp);
+
+ $tmp_svp_pv = SurveyVariablesProfiles :: getProfileVariables($_currentVariableProfile);
+
+ foreach ( $tmp_svp_pv as $vid => $variable) {
+ $tmp_svp_pv[$vid] = substr($vid, 0, strpos($vid, '_'));
+ }
+ }
+
+
+ if ( $this->getGrupa() )
+ {
+ $sqlGrupeString = "SELECT id FROM srv_grupa WHERE ank_id='".$this->anketa['id']."' AND id = '".$this->getGrupa()."' ORDER BY vrstni_red";
+ }
+ else
+ {
+ $sqlGrupeString = "SELECT id FROM srv_grupa WHERE ank_id='".$this->anketa['id']."' ORDER BY vrstni_red";
+ }
+ $sqlGrupe = sisplet_query($sqlGrupeString);
+
+ while ( $rowGrupe = mysqli_fetch_assoc( $sqlGrupe ) )
+ { // sprehodmo se skozi grupe ankete
+
+ $this->grupa = $rowGrupe['id'];
+
+ // Pogledamo prvo spremenljivko v grupi ce je v loopu
+ $sql = sisplet_query("SELECT * FROM srv_spremenljivka WHERE gru_id='".$this->grupa."' AND visible='1' ORDER BY vrstni_red ASC");
+ $row = mysqli_fetch_array($sql);
+
+ // ce je ima loop za parenta
+ $if_id = $this->find_parent_loop($row['id']);
+ if ($if_id > 0){
+ $sql1 = sisplet_query("SELECT * FROM srv_loop WHERE if_id = '$if_id'");
+ $row1 = mysqli_fetch_array($sql1);
+ $this->loop_id = $this->findNextLoopId($row1['if_id']);
+
+ $if = Cache::srv_if($if_id);
+ $loop_title = $if['label'];
+
+ // gremo cez vse spremenljivke v trenutnem loopu
+ while($this->loop_id != null){
+
+ // Izrisemo naslov loopa
+ $this->rtf->add_text($this->rtf->color(9).$this->rtf->bold(1).$this->enkaEncode($this->dataPiping($loop_title)).$this->rtf->bold(0).$this->rtf->color(0));
+ $this->rtf->new_line(1);
+
+ $sqlSpremenljivke = sisplet_query("SELECT * FROM srv_spremenljivka WHERE gru_id='".$this->grupa."' AND visible='1' ORDER BY vrstni_red ASC");
+ while ($rowSpremenljivke = mysqli_fetch_assoc($sqlSpremenljivke))
+ { // sprehodimo se skozi spremenljivke grupe
+ $spremenljivka = $rowSpremenljivke['id'];
+ if ( $this->checkSpremenljivka ($spremenljivka) /*|| $this->showIf == 1*/ )
+ { // lahko izrišemo spremenljivke
+
+ //nastavimo velikost pisave
+ $this->rtf->MyRTF .= $this->rtf->_font_size($this->font * 2);
+
+ // izpis vprasalnika z rezultati
+
+ // Ce imamo kombinirano tabelo pogledamo ce prikazujemo katero od podtabel
+ if($rowSpremenljivke['tip'] == 24){
+
+ $subGrids = array();
+ $showGridMultiple = false;
+
+ // Loop po podskupinah gridov
+ $sqlSubGrid = sisplet_query("SELECT m.spr_id, s.tip, s.enota FROM srv_grid_multiple m, srv_spremenljivka s WHERE m.parent='".$spremenljivka."' AND m.spr_id=s.id");
+ while($rowSubGrid = mysqli_fetch_array($sqlSubGrid)){
+ if(in_array($rowSubGrid['spr_id'],$tmp_svp_pv) || count($tmp_svp_pv) == 0){
+ $showGridMultiple = true;
+ break;
+ }
+ }
+ }
+ // ce je nastavljen profil s filtriranimi spremenljivkami
+ if(in_array($spremenljivka,$tmp_svp_pv) || count($tmp_svp_pv) == 0 || ($rowSpremenljivke['tip'] == 24 && $showGridMultiple) || $rowSpremenljivke['tip'] == 5){
+
+ // NAVADEN IZPIS rezultatov spremenljivke - kratek samo pri radio, checkbox, multiradio, multicheckbox, besedilo
+ if( $this->type == 0 && in_array($rowSpremenljivke['tip'], array(1,2,3,6,16)) ){
+ if($rowSpremenljivke['tip'] > 3)
+ $this->outputVprasanje($rowSpremenljivke);
+
+ $this->outputSpremenljivkeValues($rowSpremenljivke);
+ }
+
+ // KRATEK IZPIS rezultatov spremenljivke
+ elseif($this->type == 2 && $rowSpremenljivke['tip'] != 24){
+ $this->outputSpremenljivkeValues($rowSpremenljivke);
+ }
+
+ // DOLG IZPIS rezultatov
+ else{
+ $this->outputVprasanje($rowSpremenljivke);
+ $this->outputSpremenljivke($rowSpremenljivke);
+ }
+
+ $this->rtf->new_line(1);
+ }
+ }
+ }
+
+ $this->loop_id = $this->findNextLoopId();
+ }
+ }
+ // Navadne spremenljivke ki niso v loopu
+ else{
+ $sqlSpremenljivke = sisplet_query("SELECT * FROM srv_spremenljivka WHERE gru_id='".$this->grupa."' AND visible='1' ORDER BY vrstni_red ASC");
+ while ($rowSpremenljivke = mysqli_fetch_assoc($sqlSpremenljivke))
+ { // sprehodimo se skozi spremenljivke grupe
+ $spremenljivka = $rowSpremenljivke['id'];
+ if ( $this->checkSpremenljivka ($spremenljivka) /*|| $this->showIf == 1*/ )
+ { // lahko izrišemo spremenljivke
+
+ //nastavimo velikost pisave
+ $this->rtf->MyRTF .= $this->rtf->_font_size($this->font * 2);
+
+ // izpis vprasalnika z rezultati
+
+ // Ce imamo kombinirano tabelo pogledamo ce prikazujemo katero od podtabel
+ if($rowSpremenljivke['tip'] == 24){
+
+ $subGrids = array();
+ $showGridMultiple = false;
+
+ // Loop po podskupinah gridov
+ $sqlSubGrid = sisplet_query("SELECT m.spr_id, s.tip, s.enota FROM srv_grid_multiple m, srv_spremenljivka s WHERE m.parent='".$spremenljivka."' AND m.spr_id=s.id");
+ while($rowSubGrid = mysqli_fetch_array($sqlSubGrid)){
+ if(in_array($rowSubGrid['spr_id'],$tmp_svp_pv) || count($tmp_svp_pv) == 0){
+ $showGridMultiple = true;
+ break;
+ }
+ }
+ }
+ // ce je nastavljen profil s filtriranimi spremenljivkami
+ if(in_array($spremenljivka,$tmp_svp_pv) || count($tmp_svp_pv) == 0 || $rowSpremenljivke['tip'] == 5 || ($rowSpremenljivke['tip'] == 24 && $showGridMultiple)){
+
+ // NAVADEN IZPIS rezultatov spremenljivke - kratek samo pri radio, checkbox, multiradio, multicheckbox, besedilo
+ if( $this->type == 0 && in_array($rowSpremenljivke['tip'], array(1,2,3,6,16)) ){
+ if($rowSpremenljivke['tip'] > 3)
+ $this->outputVprasanje($rowSpremenljivke);
+
+ $this->outputSpremenljivkeValues($rowSpremenljivke);
+ }
+
+ // KRATEK IZPIS rezultatov spremenljivke
+ elseif($this->type == 2 && $rowSpremenljivke['tip'] != 24){
+ $this->outputSpremenljivkeValues($rowSpremenljivke);
+ }
+
+ // DOLG IZPIS rezultatov
+ else{
+ $this->outputVprasanje($rowSpremenljivke);
+ $this->outputSpremenljivke($rowSpremenljivke);
+ }
+
+ $this->rtf->new_line(1);
+ }
+ }
+ }
+ }
+ }
+
+ // Äe izpisujemo grupo, ne izpisujemo zakljucka
+ if ( !$this->getGrupa() ){
+ if ( SurveyInfo::getInstance()->getSurveyShowConcl() && SurveyInfo::getInstance()->getSurveyConcl() )
+ { // ce obstaja footer izpisemo footer
+ $this->rtf->add_text(SurveyInfo::getInstance()->getSurveyConcl());
+ }
+ }
+ }
+
+ // Izpis vseh userjev, ki so odgovorili
+ function outputAllResults(){
+ global $lang;
+
+ //loop cez vse userje, ki so odgovorili
+ //$izbranStatusProfile = SurveyUserSetting :: getInstance()->getSettings('default_status_profile_export');
+ $izbranStatusProfile = SurveyStatusProfiles :: getStatusAsQueryString();
+
+ $sqlu = sisplet_query("SELECT * FROM srv_user WHERE ank_id = '".$this->anketa['id']."' ".$izbranStatusProfile." AND deleted='0' AND preview='0' ORDER BY recnum");
+
+ //ce imamo vec kot 300 anketirancev ne izpisemo
+ $count = mysqli_num_rows($sqlu);
+ if( $count > 300 ){
+
+ $this->rtf->set_font_size(14);
+ $this->rtf->add_text($this->rtf->bold(1).'NAPAKA!'.$this->rtf->bold(0));
+ $this->rtf->new_line(2);
+ $this->rtf->add_text($this->rtf->bold(1).'Izpis ni možen zaradi prevelikega števila odgovorov ('.$count.')'.$this->rtf->bold(0));
+ }
+ else{
+ // izpišemo prvo stran
+ $this->createFrontPage();
+ if($this->pageBreak == 0)
+ $this->rtf->new_page();
+
+ while( $rowu = mysqli_fetch_array($sqlu) ){
+
+ //izpis statusa
+ switch($rowu['last_status']){
+ case '0':
+ $status = $lang['srv_userstatus_0'];
+ break;
+ case '1':
+ $status = $lang['srv_userstatus_1'];
+ break;
+ case '2':
+ $status = $lang['srv_userstatus_2'];
+ break;
+ case '3':
+ $status = $lang['srv_userstatus_3'];
+ break;
+ case '4':
+ $status = $lang['srv_userstatus_4'];
+ break;
+ case '5':
+ $status = $lang['srv_userstatus_5'];
+ break;
+ case '6':
+ $status = $lang['srv_userstatus_6'];
+ $status .= ($rowu['lurker'] == '1') ? ' - lurker' : '';
+ break;
+ }
+
+ if($this->pageBreak == 1)
+ $this->rtf->new_page();
+
+ $this->rtf->set_font_size(14);
+
+ if($this->showRecnum == 1)
+ $this->rtf->add_text($this->rtf->bold(1).$this->enkaEncode('Recnum '.$rowu['recnum'].' (status '.$rowu['last_status'].' - '.$status.')').$this->rtf->bold(0));
+ else
+ $this->rtf->add_text($this->rtf->bold(1).$this->enkaEncode('Status '.$rowu['last_status'].' - '.$status).$this->rtf->bold(0));
+
+ $this->rtf->new_line(2);
+
+ //izpis posameznega userja
+ $this->usr_id = $rowu['id'];
+ $this->outputUser();
+ }
+ }
+ }
+
+
+ function outputVprasanje($spremenljivke)
+ {
+ //nastavimo velikost pisave
+ $this->rtf->MyRTF .= $this->rtf->_font_size($this->font * 2);
+
+ //izpis if-ov pri vprasanju
+ if($this->showIf == 1){
+
+ /*$sqlIf = sisplet_query("SELECT * FROM srv_branching WHERE element_spr='$spremenljivke[id]'");
+ $rowIf = mysqli_fetch_array($sqlIf);
+
+ if ($rowIf['parent'] > 0){
+ $rowb = Cache::srv_if($rowIf['parent']);
+
+ if ($rowb['tip'] == 0){
+ $this->displayIf($rowIf['parent']);
+ $this->rtf->new_line(1);
+ }
+ }*/
+
+ // Po novem izpisemo pred vsakim vprasanjem vse ife znotraj katerih se nahaja
+ $b = new Branching($this->anketa['id']);
+ $parents = $b->get_parents($spremenljivke['id']);
+
+ $parents = explode('p_', $parents);
+ foreach ($parents AS $key => $val) {
+ if ( is_numeric(trim($val)) ) {
+ $parents[$key] = (int)$val;
+ } else {
+ unset($parents[$key]);
+ }
+ }
+
+ foreach ($parents AS $if) {
+ $this->displayIf($if);
+ $this->rtf->new_line(1);
+ }
+ }
+
+ // stevilcenje vprasanj
+ $numberingText = ($this->numbering == 1) ? $spremenljivke['variable'].' - ' : '';
+
+ $this->rtf->add_text($numberingText . $this->enkaEncode($this->dataPiping($spremenljivke['naslov'])));
+
+ if($spremenljivke['tip'] != 5)
+ $this->rtf->new_line(1);
+ }
+
+ function outputSpremenljivke($spremenljivke){
+ global $site_url;
+
+ // razsiritev ce imamo landscape postavitev
+ $expand_width = $this->landscape == 1 ? 1.5 : 1;
+
+ // Ce je spremenljivka v loopu
+ $loop_id = $this->loop_id == null ? " IS NULL" : " = '".$this->loop_id."'";
+
+ switch ( $spremenljivke['tip'] )
+ {
+ case 1: //radio
+ case 2: //check
+ case 3: //select -> radio
+
+ // Äe imamo vnose, pogledamo kaj je odgovoril uporabnik
+ if ($this->getUserId()) {
+ $sqlUserAnswer = sisplet_query("SELECT vre_id FROM srv_data_vrednost".$this->db_table." WHERE spr_id='$spremenljivke[id]' AND usr_id='".$this->getUserId()."' AND loop_id $loop_id");
+ while ($rowAnswers = mysqli_fetch_assoc($sqlUserAnswer))
+ $userAnswer[$rowAnswers['vre_id']] = $rowAnswers['vre_id'];
+ }
+
+ $this->rtf->new_line(1);
+ $list = array();
+ // iz baze preberemo vse moznosti
+ $sqlVrednosti = sisplet_query("SELECT id, naslov, naslov2, variable FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+
+ //ce imamo prikaz v vec stoplcih
+ $spremenljivkaParams = new enkaParameters($spremenljivke['params']);
+ $stolpci = ($spremenljivkaParams->get('stolpci') ? $spremenljivkaParams->get('stolpci') : 1);
+ $checkbox_limit = ($spremenljivkaParams->get('checkbox_limit') ? $spremenljivkaParams->get('checkbox_limit') : 0);
+
+ if ($stolpci > 1 && $spremenljivke['orientation']==1) {
+ //echo '<div style="float:left; width:'.(100/$stolpci).'%">';
+ $kategorij = mysqli_num_rows($sqlVrednosti);
+ $v_stolpcu = ceil($kategorij / $stolpci);
+
+ $width = round(10000*$expand_width / $stolpci);
+
+ $this->rtf->MyRTF .= "{\par";
+ $tableHeader = '\trowd\trql\trrh400';
+ }
+
+ $count = 0;
+ while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti))
+ {
+ //popravimo lokacijo ce imamo postavitev v vec stolpcih
+ if ( ($stolpci > 1) && ($spremenljivke['orientation']==1) && ($count % $v_stolpcu == 0) ) {
+
+ $yPos = floor($count / $v_stolpcu) + 1;
+
+ $table .= '\clvertalc\cellx'.( $yPos * $width );
+ $tableEnd .= '\pard\intbl ';
+ }
+
+ $stringTitle = $this->enkaEncode( ( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) );
+ $list[] = $stringTitle;
+
+ if( isset($userAnswer[$rowVrednost['id']]) ){
+ if(($stolpci > 1) && ($spremenljivke['orientation']==1))
+ $tableEnd .= $this->rtf->ImageToString( ( ( $spremenljivke['tip'] == 2 ) ? "checkbox2.png" : "radio2.png"), "15");
+ else
+ $this->rtf->MyRTF .= $this->rtf->ImageToString( ( ( $spremenljivke['tip'] == 2 ) ? "checkbox2.png" : "radio2.png"), "15");
+ }
+ else{
+ if(($stolpci > 1) && ($spremenljivke['orientation']==1))
+ $tableEnd .= $this->rtf->ImageToString( ( ( $spremenljivke['tip'] == 2 ) ? "checkbox.png" : "radio.png"), "15");
+ else
+ $this->rtf->MyRTF .= $this->rtf->ImageToString( ( ( $spremenljivke['tip'] == 2 ) ? "checkbox.png" : "radio.png"), "15");
+ }
+
+ if(($stolpci > 1) && ($spremenljivke['orientation']==1))
+ $tableEnd .= ' '.$stringTitle.'\\line\n';
+ else{
+ $this->rtf->add_text(" ".$stringTitle);
+ $this->rtf->new_line(1);
+ }
+
+ $count++;
+
+ if ( ($stolpci > 1) && ($spremenljivke['orientation']==1) && ($count % $v_stolpcu == 0 || $count == $kategorij) ) {
+ $tableEnd .= '\qc\cell';
+ }
+ }
+
+ if ($stolpci > 1 && $spremenljivke['orientation']==1) {
+ $tableEnd .= '\pard\intbl\row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+ $this->rtf->MyRTF .= "}";
+ }
+
+ $this->rtf->new_line(1);
+ break;
+
+ case 6: // multigrid
+ case 16: // multicheckbox
+ case 19: // multitext
+ case 20: // multinumber
+
+ //izris dvojnega multigrida
+ if($spremenljivke['enota'] == 3){
+ $this->displayDoubleGrid($spremenljivke);
+
+ break;
+ }
+
+ $this->rtf->MyRTF .= "{\\par\\fs22";
+
+ $sqlStVrednosti = sisplet_query("SELECT count(*) AS count FROM srv_grid WHERE spr_id='".$spremenljivke['id']."' ORDER BY id");
+ $rowStVrednost = mysqli_fetch_row($sqlStVrednosti);
+
+ $defw_full = 10500*$expand_width;
+ if($rowStVrednost[0] < 6 && ($spremenljivke['tip'] != 6 || $spremenljivke['enota'] != 1)){
+ $defw_fc = 4300*$expand_width; // first cell width
+ }
+ else{
+ $defw_fc = 2000*$expand_width; // first cell width
+ }
+
+ $kolon = $rowStVrednost[0]+1;
+ // Ce imamo diferencial
+ if($spremenljivke['tip'] == 6 && $spremenljivke['enota'] == 1)
+ $w_oc = ( $defw_full - (2*$defw_fc) ) / $kolon;
+ else
+ $w_oc = ( $defw_full - $defw_fc ) / $kolon;
+ $defw_max = floor($w_oc);
+
+ $tableHeader_base = "\\trowd\\trhdr\\trgaph20\\trleft0\\trrh162";
+ $tableHeader_width = "\\cellx".$defw_fc;
+ $tableHeader_title = "\\pard\\intbl\\qc{}\\cell";
+ $tableHeader_finish = "\\pard\\intbl\\row";
+
+ $sqlVsehVrednsti = sisplet_query("SELECT naslov, id, variable FROM srv_grid WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ $rowCnt = 0;
+ while ($rowVsehVrednosti = mysqli_fetch_assoc($sqlVsehVrednsti))
+ {
+ $rowCnt++;
+ $tableHeader_width .= "\\cellx". ( $rowCnt * $defw_max + $defw_fc );
+ // Äe ni naslova vzamemo variable
+ $stringHeader_title = $this->enkaEncode( ( $rowVsehVrednosti['naslov'] ) ? $rowVsehVrednosti['naslov'] : $rowVsehVrednosti['variable'] );
+ $tableHeader_title .= "\\pard\\intbl\\qc{".$this->enkaEncode($stringHeader_title)."}\\cell";
+ }
+ // izpišemo header celice
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader_base.$tableHeader_width.$tableHeader_title.$tableHeader_finish);
+
+ // loopamo skozi vrstice in pripravimo podatke za tabelo z radii
+ $row_count = 1;
+ $sqlVrednosti = sisplet_query("SELECT * FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti))
+ {
+ $skipRow = false;
+
+ // barva vrstice
+ $row_color = ($row_count%2 == 1) ? '\\clcbpat18' : '';
+
+ // Ce imamo nastavljeno preskakovanje podvprasanj preverimo ce je kaksen odgovor v vrstici
+ if($this->skipEmptySub == 1){
+
+ $skipRow = true;
+ if($spremenljivke['tip'] == 6)
+ $sqlUserAnswer = sisplet_query("SELECT grd_id FROM srv_data_grid".$this->db_table." WHERE spr_id = '".$rowVrednost['spr_id']."' AND usr_id = '".$this->getUserId()."' AND vre_id = '".$rowVrednost['id']."' AND loop_id $loop_id");
+ elseif($spremenljivke['tip'] == 16)
+ $sqlUserAnswer = sisplet_query("SELECT grd_id FROM srv_data_checkgrid".$this->db_table." WHERE spr_id = '".$rowVrednost['spr_id']."' AND usr_id = '".$this->getUserId()."' AND vre_id = '".$rowVrednost['id']."' AND loop_id $loop_id");
+ else
+ $sqlUserAnswer = sisplet_query("SELECT grd_id, text FROM srv_data_textgrid".$this->db_table." WHERE spr_id = '".$rowVrednost['spr_id']."' AND usr_id = '".$this->getUserId()."' AND vre_id = '".$rowVrednost['id']."' AND loop_id $loop_id");
+
+ if(mysqli_num_rows($sqlUserAnswer) > 0)
+ $skipRow = false;
+ }
+
+ if($skipRow == false){
+ $i=1;
+ // Äe ni naslova vzamemo naslov2, Äe ne pa variable
+ $stringCell_title = $this->enkaEncode( ( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) );
+ $tableHeader_base = "\\trowd\\trgaph12\\trleft0\\trrh262";
+ $tableHeader_width = $row_color."\\cellx".$defw_fc;
+ $tableHeader_title = "\\pard\\intbl\\ql\cf0 ".$this->enkaEncode($stringCell_title)."\\cf0\\cell";
+ $tableHeader_finish = "\\pard\\intbl\\row";
+
+ $sqlVsehVrednsti = sisplet_query("SELECT id FROM srv_grid WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ while ($rowVsehVrednosti = mysqli_fetch_assoc($sqlVsehVrednsti)){
+
+ // poiÅ¡Äemo kaj je odgovoril uporabnik:
+ if($spremenljivke['tip'] == 6)
+ $sqlUserAnswer = sisplet_query("SELECT grd_id FROM srv_data_grid".$this->db_table." WHERE spr_id = '".$rowVrednost['spr_id']."' AND usr_id = '".$this->getUserId()."' AND vre_id = '".$rowVrednost['id']."' AND loop_id $loop_id");
+ elseif($spremenljivke['tip'] == 16)
+ $sqlUserAnswer = sisplet_query("SELECT grd_id FROM srv_data_checkgrid".$this->db_table." WHERE spr_id = '".$rowVrednost['spr_id']."' AND usr_id = '".$this->getUserId()."' AND vre_id = '".$rowVrednost['id']."' AND grd_id = '".$rowVsehVrednosti['id']."' AND loop_id $loop_id");
+ else
+ $sqlUserAnswer = sisplet_query("SELECT grd_id, text FROM srv_data_textgrid".$this->db_table." WHERE spr_id = '".$rowVrednost['spr_id']."' AND usr_id = '".$this->getUserId()."' AND vre_id = '".$rowVrednost['id']."' AND grd_id = '".$rowVsehVrednosti['id']."' AND loop_id $loop_id");
+
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+
+ $full = ($rowVsehVrednosti['id'] == $userAnswer['grd_id']) ? true : false;
+
+ if($spremenljivke['tip'] == 6){
+ $tableHeader_width .= "\clvertalc".$row_color."\\cellx". ( $i * $defw_max + $defw_fc );
+ if($full)
+ $tableHeader_title .= "\\pard\\intbl\\qc{". $this->rtf->ImageToString("radio2.png", "15")."}\\cell";
+ else
+ $tableHeader_title .= "\\pard\\intbl\\qc{". $this->rtf->ImageToString("radio.png", "15")."}\\cell";
+ }
+ elseif($spremenljivke['tip'] == 16){
+ $tableHeader_width .= "\clvertalc".$row_color."\\cellx". ( $i * $defw_max + $defw_fc );
+ if($full)
+ $tableHeader_title .= "\\pard\\intbl\\qc{". $this->rtf->ImageToString("checkbox2.png", "15")."}\\cell";
+ else
+ $tableHeader_title .= "\\pard\\intbl\\qc{". $this->rtf->ImageToString("checkbox.png", "15")."}\\cell";
+ }
+ else{
+ $tableHeader_width .= "\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10".$row_color."\\cellx". ( $i * $defw_max + $defw_fc );
+ $tableHeader_width .= '\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10';
+ $tableHeader_title .= '\\pard\\intbl'.$this->rtf->color(12).' '.$this->rtf->enkaEncode($userAnswer['text']).$this->rtf->color(0).'\qc{}\\cell';
+ }
+ $i++;
+ }
+ // Ce imamo diferencial
+ if($spremenljivke['tip'] == 6 && $spremenljivke['enota'] == 1){
+ $stringCell_title2 = $this->enkaEncode($rowVrednost['naslov2']);
+ $tableHeader_width .= $row_color."\\cellx".( ($i-1) * $defw_max + 2*$defw_fc );
+ $tableHeader_title .= "\\pard\\intbl\\ql\cf0 ".$this->enkaEncode($stringCell_title2)."\\cf0\\cell";
+ }
+
+ $row_count++;
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader_base.$tableHeader_width.$tableHeader_title.$tableHeader_finish);
+ }
+ }
+ $this->rtf->MyRTF .= "}";
+ $this->rtf->new_line(1);
+ break;
+
+ case 24: // mesan multigrid
+ $this->displayGridMultiple($spremenljivke);
+ break;
+
+ case 4: //text
+ $this->rtf->TextCell("", array('width' => 9500*$expand_width, 'height' => 3, 'border' => array('top','bottom', 'left','right') ) );
+ $this->rtf->new_line(1);
+ break;
+
+ case 21: //besedilo*
+ $this->rtf->new_line(1);
+ $list = array();
+
+ $this->rtf->MyRTF .= "{\par";
+
+ $defw_full = 9500*$expand_width;
+ $defw_part = round($defw_full / $spremenljivke['text_kosov']);
+
+ $tableHeader = '\trowd\trql\trrh800';
+ $podnapisi = '\trowd\trql';
+
+ // iz baze preberemo vse moznosti
+ $sqlVrednosti = sisplet_query("SELECT id, naslov, naslov2, variable FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ for($i=0; $i<$spremenljivke['text_kosov']; $i++){
+
+ $rowVrednost = mysqli_fetch_array($sqlVrednosti);
+ $stringTitle = $this->enkaEncode( ( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) );
+ $list[] = $stringTitle;
+
+ if ( $this->getUserId() )
+ {
+ $sqlUserAnswer = sisplet_query("SELECT text FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND usr_id='".$this->getUserId()."' AND vre_id='".$rowVrednost['id']."' AND loop_id $loop_id");
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+
+ // imamo upload vprašanje
+ if ($spremenljivke['upload'] == 1){
+ # imena datotek
+ if($userAnswer['text'] != '')
+ $answer = ''.$site_url.'main/survey/download.php?anketa='.$this->anketa['id'].'&code='.$userAnswer['text'].'';
+ else
+ $answer = '';
+ }
+ // imamo signature vprašanje
+ elseif($spremenljivke['signature'] == 1){
+ $answer = $userAnswer['text'];
+
+ // relativna pot
+ $image = $site_url.'main/survey/uploads/'.$this->getUserId().'_'.$spremenljivke['id'].'_'.$this->anketa['id'].'.png';
+
+ $file = @file_get_contents($image);
+
+ $answer .= "{";
+ $answer .= "\\pict\\jpegblip\\picscalex100\\picscaley100\\bliptag132000428 ";
+ $answer .= trim(bin2hex($file));
+ $answer .= "\n}\n";
+ }
+ else{
+ $answer = $userAnswer['text'];
+ }
+ }
+
+ if($spremenljivke['text_orientation'] == 1){
+ $table .= '\cellx'.( $i * $defw_part + 1000*$expand_width).'\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx'.( ($i+1) * $defw_part);
+ $tableEnd .= '\pard\intbl '.$this->enkaEncode($stringTitle).'\qc\cell\pard\intbl'.$this->rtf->color(12).' '.$answer.$this->rtf->color(0).'\cell';
+ }
+ else{
+ $table .= '\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx'.( ($i+1) * $defw_part );
+ $tableEnd .= '\pard\intbl'.$this->rtf->color(12).' '.$answer.$this->rtf->color(0).'\cell';
+ }
+
+ if($spremenljivke['text_orientation'] == 2){
+ $podnapisi .= '\cellx'.( ($i+1) * $defw_part ).'';
+ $podnapisiEnd .= '\pard\intbl '.$this->enkaEncode($stringTitle).'\qc\cell';
+ }
+ }
+ $tableEnd .= '\pard\intbl\row';
+ $podnapisiEnd .= '\pard\intbl\row';
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd.($spremenljivke['text_orientation'] == 2 ? $podnapisi.$podnapisiEnd : ''));
+ $this->rtf->MyRTF .= "}";
+ $this->rtf->new_line(1);
+
+ break;
+
+ case 5: //label
+ $this->rtf->new_line(2);
+ break;
+
+ case 7: //number
+ $this->rtf->new_line(1);
+ $list = array();
+
+ $this->rtf->MyRTF .= "{\par";
+
+ // iz baze preberemo vse moznosti
+ $sqlVrednosti = sisplet_query("SELECT naslov, naslov2, variable FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ $rowVrednost = mysqli_fetch_array($sqlVrednosti);
+ $stringTitle = $this->enkaEncode( ( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) );
+ $list[] = $stringTitle;
+
+ $userAnswerString = "SELECT text, text2 FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND usr_id='".$this->getUserId()."' AND loop_id $loop_id;";
+ $sqlUserAnswer = sisplet_query($userAnswerString);
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+
+ if($spremenljivke['size'] == 1) {
+ if ($spremenljivke['enota'] == 1) {
+ #enota na levi
+ $table = '\trowd\trql\cellx1500\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx3000'
+ .'\qc\pard\intbl '.($this->snippet($this->enkaEncode($stringTitle),20,'...') )
+ .'\qc\cell\pard\intbl '.$this->rtf->color(12).' '.$this->enkaEncode($userAnswer['text']).$this->rtf->color(0)
+ .'\qc\cell\pard\intbl\row';
+ } elseif ($spremenljivke['enota'] == 2) {
+ #enota na desni
+ $table = '\trowd\trql\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx1500\cellx3000';
+ $table .= '\qc\pard \intbl '.$this->rtf->color(12).' '.$this->enkaEncode($userAnswer['text']).$this->rtf->color(0)
+ .'\qc\cell \pard \intbl '.($this->snippet($this->enkaEncode($stringTitle),20,'...') )
+ .'\qc\cell\pard\intbl\row';
+ } else {
+ #brez enote
+ $table = '\trowd\trql\cellx1500\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx3000'
+ .'\qc\pard\intbl '.
+ '\qc\cell\pard\intbl '.$this->rtf->color(12).' '.$this->enkaEncode($userAnswer['text']).$this->rtf->color(0)
+ .'\qc\cell\pard\intbl\row';
+ }
+ } else{
+ $rowVrednost = mysqli_fetch_array($sqlVrednosti);
+ $stringTitle2 = $this->enkaEncode( ( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) );
+
+
+ if ($spremenljivke['enota'] == 1) {
+ #enota na levi
+ $table = '\trowd\trql\cellx1500\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx3000\cellx4500\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx6000';
+ $table .= '\qc\pard \intbl '.($this->snippet($this->enkaEncode($stringTitle),20,'...') )
+ .'\qc\cell \pard \intbl '.$this->rtf->color(12).' '.$this->enkaEncode($userAnswer['text']).$this->rtf->color(0)
+ .'\qc\cell \pard \intbl '.($this->snippet($this->enkaEncode($stringTitle2),20,'...') )
+ .'\qc\cell \pard \intbl '.$this->rtf->color(12).' '.$this->enkaEncode($userAnswer['text2']).$this->rtf->color(0)
+ .'\qc\cell \pard \intbl \row';
+ } else if ($spremenljivke['enota'] == 2) {
+ #enota na desni
+ $table = '\trowd\trql\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx1500\cellx3000\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx4500\cellx6000';
+ $table .= '\qc\pard \intbl '.$this->rtf->color(12).' '.$this->enkaEncode($userAnswer['text']).$this->rtf->color(0)
+ .'\qc\cell \pard \intbl '.($this->snippet($this->enkaEncode($stringTitle),20,'...') )
+ .'\qc\cell \pard \intbl '.$this->rtf->color(12).' '.$this->enkaEncode($userAnswer['text2']).$this->rtf->color(0)
+ .'\qc\cell \pard \intbl '.($this->snippet($this->enkaEncode($stringTitle2),20,'...') )
+ .'\qc\cell \pard \intbl \row';
+
+ } else {
+ #brez eneote
+ $table = '\trowd\trql\cellx1500\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx3000\cellx4500\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx6000';
+ $table .= '\qc\pard \intbl '
+ .'\qc\cell \pard \intbl '.$this->rtf->color(12).' '.$this->enkaEncode($userAnswer['text']).$this->rtf->color(0)
+ .'\qc\cell \pard \intbl '
+ .'\qc\cell \pard \intbl '.$this->rtf->color(12).' '.$this->enkaEncode($userAnswer['text2']).$this->rtf->color(0)
+ .'\qc\cell \pard \intbl \row';
+
+ }
+ }
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($table);
+ $this->rtf->MyRTF .= "}";
+ $this->rtf->new_line(1);
+
+ break;
+
+ case 8: //datum
+ if ( $this->getUserId() )
+ {
+ $userAnswerString = "SELECT text FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND usr_id='".$this->getUserId()."' AND loop_id $loop_id;";
+ $sqlUserAnswer = sisplet_query($userAnswerString);
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+ }
+ $this->rtf->MyRTF .= $this->rtf->color(12);
+ $this->rtf->TextCell($this->enkaEncode($userAnswer['text']), array('width' => 2000*$expand_width, 'height' => 1, 'border' => array('top','bottom', 'left','right') ) );
+ $this->rtf->MyRTF .= $this->rtf->color(0);
+ $this->rtf->new_line(1);
+ break;
+
+ case 18: //vsota
+ $this->rtf->new_line(1);
+ $list = array();
+
+ $this->rtf->MyRTF .= "{\par";
+
+ // iz baze preberemo vse moznosti
+ $sum = 0;
+ $sqlVrednosti = sisplet_query("SELECT id, naslov, naslov2, variable FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti))
+ {
+ // Äe imamo vnose, pogledamo kaj je odgovoril uporabnik
+ if ($this->getUserId())
+ {
+ $sqlUserAnswer = sisplet_query("SELECT text FROM srv_data_text".$this->db_table." WHERE spr_id=".$spremenljivke['id']." AND usr_id='".$this->getUserId()."' AND vre_id='".$rowVrednost['id']."' AND loop_id $loop_id");
+ $rowAnswers = mysqli_fetch_assoc($sqlUserAnswer);
+ }
+
+ $stringTitle = $this->enkaEncode( ( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) );
+ $list[] = $stringTitle;
+
+ $table .= '\trowd\trql\cellx'. 5000*$expand_width .'\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx'. 5800*$expand_width .'\pard\intbl '.$this->snippet($this->enkaEncode($stringTitle),50,'...').'\~\~\qr\cell\pard\intbl'.$this->rtf->color(12).' '.$this->enkaEncode($rowAnswers['text']).$this->rtf->color(0).'\qc\cell\pard\intbl\row';
+
+ $sum += (int)$rowAnswers['text'];
+ }
+
+ $table .= '\trowd \trql\clbrdrb\brdrs\brdrw10\cellx'. 6000*$expand_width .'\pard \intbl \cell \pard \intbl \row';
+ $table .= '\trowd \trql\cellx'. 6000*$expand_width .'\pard \intbl \cell \pard \intbl \row';
+
+ $stringTitle = $spremenljivke['vsota'];
+ $table .= '\trowd \trql\cellx'. 5000*$expand_width .'\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx'. 5800*$expand_width .'\pard \intbl '.$this->snippet($this->enkaEncode($stringTitle),50,'...').'\~\~\qr\cell \pard \intbl '.$sum.'\qc\cell \pard \intbl \row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($table);
+
+ $this->rtf->MyRTF .= "}";
+ $this->rtf->new_line(1);
+ break;
+
+ case 17: //ranking
+ $this->rtf->new_line(1);
+ $list = array();
+
+ $this->rtf->MyRTF .= "{\par";
+
+ // iz baze preberemo vse moznosti
+ $sqlVrednosti = sisplet_query("SELECT id, naslov, naslov2, variable FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti))
+ {
+ // Äe imamo vnose, pogledamo kaj je odgovoril uporabnik
+ if ($this->getUserId())
+ {
+ $sqlUserAnswer = sisplet_query("SELECT vrstni_red FROM srv_data_rating WHERE spr_id=".$spremenljivke['id']." AND usr_id='".$this->getUserId()."' AND vre_id='".$rowVrednost['id']."' AND loop_id $loop_id");
+ $rowAnswers = mysqli_fetch_assoc($sqlUserAnswer);
+ }
+
+ $stringTitle = $this->enkaEncode( ( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) );
+ $list[] = $stringTitle;
+
+ $table .= '\trowd \trql\cellx'. 1500*$expand_width .'\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx'. 2300*$expand_width .'\pard \intbl '.$this->enkaEncode($stringTitle).' \qc\cell \pard \intbl'.$this->rtf->color(12).' '.$this->enkaEncode($rowAnswers['vrstni_red']).$this->rtf->color(0).'\qc\cell \pard \intbl \row';
+ }
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($table);
+ $this->rtf->MyRTF .= "}";
+ $this->rtf->new_line(1);
+ break;
+
+ case 9: //generator imen
+ if ( $this->getUserId() ){
+ $sqlUserAnswer = sisplet_query("SELECT text FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND usr_id='".$this->getUserId()."' AND loop_id $loop_id");
+ while($userAnswer = mysqli_fetch_array($sqlUserAnswer)){
+ $this->rtf->MyRTF .= $this->rtf->color(12);
+ $this->rtf->TextCell($this->enkaEncode($userAnswer['text']), array('width' => 4000, 'height' => 1, 'border' => array('top','bottom', 'left','right') ) );
+ $this->rtf->MyRTF .= $this->rtf->color(0);
+ }
+ }
+ $this->rtf->new_line(1);
+ break;
+
+ case 27:
+ //error_log("Heatmap @outputSpremenljivke");
+ #spremenljivke##############################
+ global $site_url;
+ global $site_path;
+ global $lang;
+ $usr_id = $this->getUserId();
+ $spr_id = $spremenljivke['id'];
+
+ $landscapeBgImgWidthMm = 140; //predefinirana sirina slike v mm za pdf dokument, ce je ta lezeca
+ $portraitBgImgWidthMm = 100; //predefinirana sirina slike v mm za pdf dokument, ce je ta pokoncna
+ #spremenljivke##############################konec
+
+ #pridobitev informacij o sliki in klikih iz baze ###################################################
+ $data4BgImage = sisplet_query("SELECT params from srv_spremenljivka WHERE id = $spr_id");
+ $rowBgImageHtml = mysqli_fetch_assoc($data4BgImage);
+ $spremenljivkaParams = new enkaParameters($rowBgImageHtml['params']);
+ $backgroundImgHtml = $spremenljivkaParams->get('hotspot_image');
+
+
+ $heatmap_show_counter_clicks = ($spremenljivkaParams->get('heatmap_show_counter_clicks') ? $spremenljivkaParams->get('heatmap_show_counter_clicks') : 0); //za prikazovanje/skrivanje stevca klikov
+ $heatmap_show_clicks = ($spremenljivkaParams->get('heatmap_show_clicks') ? $spremenljivkaParams->get('heatmap_show_clicks') : 0); //za prikazovanje/skrivanje klikov
+ $heatmap_num_clicks = ($spremenljivkaParams->get('heatmap_num_clicks') ? $spremenljivkaParams->get('heatmap_num_clicks') : 1); //stevilo moznih klikov
+ $heatmap_click_color = ($spremenljivkaParams->get('heatmap_click_color') ? $spremenljivkaParams->get('heatmap_click_color') : "");
+ $heatmap_click_size = ($spremenljivkaParams->get('heatmap_click_size') ? $spremenljivkaParams->get('heatmap_click_size') : 5);
+ $heatmap_click_shape = ($spremenljivkaParams->get('heatmap_click_shape') ? $spremenljivkaParams->get('heatmap_click_shape') : 1);
+ #pridobitev informacij o sliki in klikih iz baze ###################################################konec
+
+ #pridobitev slike za ozadje##############################################################
+ $position = strpos($backgroundImgHtml, 'src="');
+ $backgroundImg = substr($backgroundImgHtml, $position+5);
+ $position = strpos($backgroundImg, '"');
+ $backgroundImg = str_replace(substr($backgroundImg, $position),"",$backgroundImg);
+
+ $bgImageType = substr($backgroundImg, -3); //koncnica slike, tip slike
+ //$bgImageType = 'png';
+ //error_log($bgImageType);
+ #pridobitev slike za ozadje##############################################################konec
+
+ #pridobitev dimenzij slike za ozadje#####################################################
+
+ //realna velikost slike pobrana iz datoteke - ni v redu, ker je potrebno dobiti dimenzije, ki jih je nastavil uporabnik
+ $bgImgSize = getimagesize($backgroundImg);
+ //error_log("Width: $bgImgSize[0]");
+ //error_log("Height: $bgImgSize[1]");
+ $bgImgWidthPx = $bgImgSize[0];
+ $bgImgHeightPx = $bgImgSize[1];
+ //realna velikost slike pobrana iz datoteke - konec
+
+ //visina slike, ki jo je nastavil uporabnik
+ $positionImgHeight = strpos($backgroundImgHtml, 'height:');
+ $ImgHeight = substr($backgroundImgHtml, $positionImgHeight+7);
+ $positionImgheightPx = strpos($ImgHeight, 'px');
+ $ImgHeight = str_replace(substr($ImgHeight, $positionImgheightPx),"",$ImgHeight);
+ //error_log($ImgHeight);
+ //visina slike, ki jo je nastavil uporabnik - konec
+
+ //sirina slike, ki jo je nastavil uporabnik
+ $positionImgWidth = strpos($backgroundImgHtml, 'width:');
+ $ImgWidth = substr($backgroundImgHtml, $positionImgWidth+6);
+ $positionImgWidthPx = strpos($ImgWidth, 'px');
+ $ImgWidth = str_replace(substr($ImgWidth, $positionImgWidthPx),"",$ImgWidth);
+ //error_log($ImgWidth);
+ //sirina slike, ki jo je nastavil uporabnik - konec
+
+ #pridobitev dimenzij slike za ozadje#####################################################konec
+
+ #ureditev ustrezne velikosti slike za ozadje##############################################################
+ $bgImgWidthInMm = ($ImgWidth > $ImgHeight ? $landscapeBgImgWidthMm : $portraitBgImgWidthMm);
+ $bgImgHeightInMm = ($bgImgWidthInMm / $ImgWidth) * $ImgHeight;
+ //error_log("bgImgHeightInMm: $bgImgHeightInMm");
+ #ureditev ustrezne velikosti slike za ozadje##############################################################konec
+
+ #pridobitev koordinat klikanih tock za uporabnika $usr_id#################################################
+ $data4Coords = sisplet_query("SELECT lat, lng from srv_data_map WHERE usr_id = $usr_id AND spr_id = $spr_id");
+ $i = 0;
+ //error_log($spr_id);
+ #pridobitev koordinat klikanih tock za uporabnika $usr_id#################################################konec
+
+ #izris tock na sliko######################################################################################
+ //if($heatmap_show_clicks == 1){
+ define('UPLOAD_DIR', $site_path.'admin/exportclases/temp/');
+ $imageFinal = $this->rtf->prepareHeatmapImage($data4Coords, $backgroundImg, $lat, $lng, $ImgWidth, $ImgHeight, $heatmap_click_size, $heatmap_click_color, $heatmap_click_shape, $spr_id, $bgImageType, UPLOAD_DIR);
+ //}
+ #izris tock na sliko######################################################################################konec
+
+ #izris slike v rtf######################################################################################
+ $file = @file_get_contents($imageFinal);
+ $image = "{";
+ $image .= "\\pict\\jpegblip\\picscalex100\\picscaley100\\bliptag132000428 ";
+ $image .= trim(bin2hex($file));
+ $image .= "\n}\n";
+ $this->rtf->MyRTF .= $image;
+ //izris slike v rtf######################################################################################konec
+
+ //izbris slike iz mape streznika
+ //if($heatmap_show_clicks == 1){
+ unlink($imageFinal);
+ //}
+
+ #izris stevca klikov######################################################################################
+ if($heatmap_show_counter_clicks){
+ $this->rtf->new_line(1);
+ $clickCounter = $this->rtf->enkaEncode($lang['srv_vprasanje_heatmap_num_clicks']).': \line';
+ $clickCounter .= ' '.mysqli_num_rows($data4Coords).'/'.$heatmap_num_clicks;
+ $this->rtf->MyRTF .= $clickCounter;
+ $this->rtf->new_line(1);
+ }
+ #izris stevca klikov######################################################################################konec
+ break;
+ }
+ }
+
+ function outputSpremenljivkeValues($spremenljivke){
+ global $site_url;
+
+ // razsiritev ce imamo landscape postavitev
+ $expand_width = $this->landscape == 1 ? 1.5 : 1;
+
+ // stevilcenje vprasanj
+ $numberingText = ($this->numbering == 1) ? $spremenljivke['variable'].' - ' : '';
+
+ // Ce je spremenljivka v loopu
+ $loop_id = $this->loop_id == null ? " IS NULL" : " = '".$this->loop_id."'";
+
+ switch ( $spremenljivke['tip'] )
+ {
+ case 1: //radio
+ case 2: //check
+ case 3: //select -> radio
+
+ $this->rtf->MyRTF .= "{\par";
+ $tableHeader = '\trowd\trql\trrh400';
+
+ //IZPIS NASLOVA VPRASANJA
+ $table = '\cellx'.( 5000*$expand_width );
+ $tableEnd = '\pard\intbl '.$numberingText.$this->enkaEncode($this->dataPiping($spremenljivke['naslov'])). ' \ql\cell';
+
+
+ // Äe imamo vnose, pogledamo kaj je odgovoril uporabnik
+ if ($this->getUserId())
+ {
+ $sqlUserAnswerString = "SELECT vre_id FROM srv_data_vrednost".$this->db_table." WHERE spr_id='$spremenljivke[id]' AND usr_id='".$this->getUserId()."' AND loop_id $loop_id";
+ $sqlUserAnswer = sisplet_query($sqlUserAnswerString);
+ while ($rowAnswers = mysqli_fetch_assoc($sqlUserAnswer))
+ $userAnswer[$rowAnswers['vre_id']] = $rowAnswers['vre_id'];
+ }
+
+ // iz baze preberemo vse moznosti - ko nimamo izpisa z odgovori respondenta
+ $sqlVrednosti = sisplet_query("SELECT id, naslov, naslov2, variable, other FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+
+ $resultString = '';
+
+ while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti))
+ {
+ //izpisemo samo izbrane vrednosti
+ if( isset($userAnswer[$rowVrednost['id']]) ){
+
+ $stringTitle = ($this->enkaEncode(( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) ));
+
+ // Å¡e dodamo textbox Äe je polj other
+ $_txt = '';
+ if ( $rowVrednost['other'] == 1 && $this->getUserId() )
+ {
+ $sqlOtherText = sisplet_query("SELECT * FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND vre_id='".$rowVrednost['id']."' AND usr_id='".$this->getUserId()."' AND loop_id $loop_id");
+ $row4 = mysqli_fetch_assoc($sqlOtherText);
+ $_txt = ' '.$row4['text'];
+ }
+
+ $resultString .= ' '.$stringTitle.$_txt.',';
+ }
+ }
+
+ $resultString = substr($resultString, 0, -1);
+
+ $table .= '\cellx'.( 10000*$expand_width );
+ $tableEnd .= '\pard\intbl'.$this->rtf->color(12).' '.$this->enkaEncode($resultString).' '.$this->rtf->color(0).'\ql\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+ $this->rtf->MyRTF .= "}";
+
+ break;
+
+ case 6: //multigrid
+ case 16:// multicheckbox
+
+ //izris dvojnega multigrida
+ if($spremenljivke['enota'] == 3){
+ $this->displayDoubleGridValues($spremenljivke);
+ break;
+ }
+
+ $sqlVrstic = sisplet_query("SELECT count(*) FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."'");
+ $rowVrstic = mysqli_fetch_row($sqlVrstic);
+
+ $sqlVrednosti = sisplet_query("SELECT *,id, naslov, naslov2, variable FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ $this->rtf->MyRTF .= "{\par";
+ while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti))
+ {
+ $skipRow = false;
+
+ // Ce imamo nastavljeno preskakovanje podvprasanj preverimo ce je kaksen odgovor v vrstici
+ if($this->skipEmptySub == 1){
+
+ $skipRow = true;
+ if($spremenljivke['tip'] == 6)
+ $sqlUserAnswer = sisplet_query("SELECT grd_id FROM srv_data_grid".$this->db_table." WHERE spr_id = '".$rowVrednost['spr_id']."' AND usr_id = '".$this->getUserId()."' AND vre_id = '".$rowVrednost['id']."' AND loop_id $loop_id");
+ else
+ $sqlUserAnswer = sisplet_query("SELECT grd_id FROM srv_data_checkgrid".$this->db_table." WHERE spr_id = '".$rowVrednost['spr_id']."' AND usr_id = '".$this->getUserId()."' AND vre_id = '".$rowVrednost['id']."' AND loop_id $loop_id");
+
+ if(mysqli_num_rows($sqlUserAnswer) > 0)
+ $skipRow = false;
+ }
+
+ if($skipRow == false){
+ $stringCell_title = $this->enkaEncode(( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) );
+
+ // Å¡e dodamo textbox Äe je polj other
+ $_txt = '';
+ if ( $rowVrednost['other'] == 1 && $this->getUserId() )
+ {
+ $sqlOtherText = sisplet_query("SELECT * FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND vre_id='".$rowVrednost['id']."' AND usr_id='".$this->getUserId()."' AND loop_id $loop_id");
+ $row4 = mysqli_fetch_assoc($sqlOtherText);
+ $_txt = ' '.$row4['text'];
+ }
+ $stringCell_title .= $_txt.':';
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ /*Izpis boÄnega stolpca*/
+ $table = '\cellx'.( 5000*$expand_width );
+ $tableEnd = '\pard\intbl '.$this->enkaEncode($stringCell_title). '\qr\cell';
+
+ $sqlVsehVrednsti = sisplet_query("SELECT id, naslov FROM srv_grid WHERE spr_id='".$spremenljivke['id']."' ORDER BY 'vrstni_red'");
+
+ //izpis rezultatov
+ $resultString = '';
+ while ($rowVsehVrednosti = mysqli_fetch_assoc($sqlVsehVrednsti))
+ {
+ // poiÅ¡Äemo kaj je odgovoril uporabnik:
+ if($spremenljivke['tip']==16)
+ $sqlUserAnswer = sisplet_query("SELECT grd_id FROM srv_data_checkgrid".$this->db_table." WHERE spr_id = '".$rowVrednost['spr_id']."' AND usr_id = '".$this->getUserId()."' AND vre_id = '".$rowVrednost['id']."' AND grd_id = '".$rowVsehVrednosti['id']."' AND loop_id $loop_id");
+ else
+ $sqlUserAnswer = sisplet_query("SELECT grd_id FROM srv_data_grid".$this->db_table." where spr_id = '".$rowVrednost['spr_id']."' and usr_id = '".$this->getUserId()."' AND vre_id = '".$rowVrednost['id']."' AND loop_id $loop_id");
+
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+
+ if($rowVsehVrednosti['id'] == $userAnswer['grd_id'])
+ $resultString .= ' '.$this->enkaEncode($rowVsehVrednosti['naslov']).',';
+ }
+ $resultString = substr($resultString, 0, -1);
+
+ $table .= '\cellx'.( 10000*$expand_width );
+ $tableEnd .= '\pard\intbl'.$this->rtf->color(12).' '.$this->enkaEncode($resultString).' '.$this->rtf->color(0).'\ql\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+ }
+ $this->rtf->MyRTF .= "}";
+
+ break;
+
+ case 21: //besedilo*
+ $list = array();
+
+ $this->rtf->MyRTF .= "{\par";
+
+ $defw_full = 7500*$expand_width;
+ $defw_part = round($defw_full / $spremenljivke['text_kosov']);
+
+ $tableHeader = '\trowd\trql\trrh800';
+ $podnapisi = '\trowd\trql';
+
+ $table .= '\cellx'.(2000*$expand_width);
+ $tableEnd .= '\pard\intbl '.$numberingText.$this->enkaEncode($this->dataPiping($spremenljivke['naslov'])). ' \ql\cell';
+
+ // iz baze preberemo vse moznosti
+ $sqlVrednosti = sisplet_query("SELECT id, naslov, naslov2, variable FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ for($i=0; $i<$spremenljivke['text_kosov']; $i++){
+
+ $rowVrednost = mysqli_fetch_array($sqlVrednosti);
+ $stringTitle = $this->enkaEncode( ( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) );
+ $list[] = $stringTitle;
+
+ if ( $this->getUserId() )
+ {
+ $sqlUserAnswer = sisplet_query("SELECT text FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND usr_id='".$this->getUserId()."' AND vre_id='".$rowVrednost['id']."' AND loop_id $loop_id");
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+
+ // imamo upload vprašanje
+ if ($spremenljivke['upload'] == 1){
+ # imena datotek
+ if($userAnswer['text'] != '')
+ $answer = ''.$site_url.'main/survey/download.php?anketa='.$this->anketa['id'].'&code='.$userAnswer['text'].'';
+ else
+ $answer = '';
+ }
+ // imamo signature vprašanje
+ elseif($spremenljivke['signature'] == 1){
+ $answer = $userAnswer['text'];
+
+ // relativna pot
+ $image = $site_url.'main/survey/uploads/'.$this->getUserId().'_'.$spremenljivke['id'].'_'.$this->anketa['id'].'.png';
+
+ $file = @file_get_contents($image);
+
+ $answer .= "{";
+ $answer .= "\\pict\\jpegblip\\picscalex100\\picscaley100\\bliptag132000428 ";
+ $answer .= trim(bin2hex($file));
+ $answer .= "\n}\n";
+ }
+ else{
+ $answer = $userAnswer['text'];
+ }
+ }
+
+ if($spremenljivke['text_orientation'] == 1){
+ $table .= '\cellx'.( $i * $defw_part + ((1000 + 2000)*$expand_width)).'\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx'.( ($i+1) * $defw_part + 2000*$expand_width);
+ $tableEnd .= '\pard\intbl '.$this->enkaEncode($stringTitle).'\qc\cell\pard\intbl'.$this->rtf->color(12).' '.$answer.$this->rtf->color(0).'\cell';
+ }
+ else{
+ $table .= '\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx'.( ($i+1) * $defw_part + 2000*$expand_width);
+ $tableEnd .= '\pard\intbl'.$this->rtf->color(12).' '.$answer.$this->rtf->color(0).'\cell';
+ }
+
+ if($spremenljivke['text_orientation'] == 2){
+ $podnapisi .= '\cellx'.( ($i+1) * $defw_part + 2000*$expand_width).'';
+ $podnapisiEnd .= '\pard\intbl '.$this->enkaEncode($stringTitle).'\qc\cell';
+ }
+ }
+ $tableEnd .= '\pard\intbl\row';
+ $podnapisiEnd .= '\pard\intbl\row';
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd.($spremenljivke['text_orientation'] == 2 ? $podnapisi.$podnapisiEnd : ''));
+ $this->rtf->MyRTF .= "}";
+
+ break;
+
+ case 7: //number
+ $list = array();
+
+ $this->rtf->MyRTF .= "{\par";
+
+ // iz baze preberemo vse moznosti
+ $sqlVrednosti = sisplet_query("SELECT naslov, naslov2, variable FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ $rowVrednost = mysqli_fetch_array($sqlVrednosti);
+ $stringTitle = $this->enkaEncode( ( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) );
+ $list[] = $stringTitle;
+
+ $userAnswerString = "SELECT text, text2 FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND usr_id='".$this->getUserId()."' AND loop_id $loop_id;";
+ $sqlUserAnswer = sisplet_query($userAnswerString);
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+
+ if($spremenljivke['size'] == 1) {
+ if ($spremenljivke['enota'] == 1) {
+ #enota na levi
+ $table = '\trowd\trql\cellx3000\cellx4500\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx6000'
+ .'\pard\intbl '.$numberingText.$this->enkaEncode($this->dataPiping($spremenljivke['naslov'])).'\ql\cell'
+ .'\pard\intbl '.($this->snippet($this->enkaEncode($stringTitle),20,'...') ).'\qc\cell'
+ .'\pard\intbl '.$this->rtf->color(12).' '.$this->enkaEncode($userAnswer['text']).$this->rtf->color(0).'\qc\cell'
+ .'\pard\intbl\row';
+ } elseif ($spremenljivke['enota'] == 2) {
+ #enota na desni
+ $table = '\trowd\trql\cellx3000\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx4500\cellx6000';
+ $table .= '\pard\intbl '.$numberingText.$this->enkaEncode($this->dataPiping($spremenljivke['naslov'])).'\ql\cell'
+ .'\pard\intbl '.$this->rtf->color(12).' '.$this->enkaEncode($userAnswer['text']).$this->rtf->color(0).'\qc\cell'
+ .'\pard\intbl '.($this->snippet($this->enkaEncode($stringTitle),20,'...') ).'\qc\cell'
+ .'\pard\intbl\row';
+ } else {
+ #brez enote
+ $table = '\trowd\trql\cellx3000\cellx4500\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx6000'
+ .'\pard\intbl '.$numberingText.$this->enkaEncode($this->dataPiping($spremenljivke['naslov'])).'\ql\cell'
+ .'\pard\intbl '
+ .'\pard\intbl '.$this->rtf->color(12).' '.$this->enkaEncode($userAnswer['text']).$this->rtf->color(0).'\qc\cell'
+ .'\pard\intbl\row';
+ }
+ } else{
+ $rowVrednost = mysqli_fetch_array($sqlVrednosti);
+ $stringTitle2 = $this->enkaEncode( ( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) );
+
+
+ if ($spremenljivke['enota'] == 1) {
+ #enota na levi
+ $table = '\trowd\trql\cellx3000\cellx4500\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx6000\cellx7500\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx9000';
+ $table .= '\pard\intbl '.$numberingText.$this->enkaEncode($this->dataPiping($spremenljivke['naslov'])).'\ql\cell'
+ .'\pard\intbl '.($this->snippet($this->enkaEncode($stringTitle),20,'...') ).'\qc\cell'
+ .'\pard\intbl '.$this->rtf->color(12).' '.$this->enkaEncode($userAnswer['text']).$this->rtf->color(0).'\qc\cell'
+ .'\pard\intbl '.($this->snippet($this->enkaEncode($stringTitle2),20,'...') ).'\qc\cell'
+ .'\pard\intbl '.$this->rtf->color(12).' '.$this->enkaEncode($userAnswer['text2']).$this->rtf->color(0).'\qc\cell'
+ .'\pard\intbl \row';
+ } else if ($spremenljivke['enota'] == 2) {
+ #enota na desni
+ $table = '\trowd\trql\cellx3000\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx4500\cellx7000\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx6500\cellx9000';
+ $table .= '\pard\intbl '.$numberingText.$this->enkaEncode($this->dataPiping($spremenljivke['naslov'])).'\ql\cell'
+ .'\pard\intbl '.$this->rtf->color(12).' '.$this->enkaEncode($userAnswer['text']).$this->rtf->color(0).'\qc\cell'
+ .'\pard\intbl '.($this->snippet($this->enkaEncode($stringTitle),20,'...') ).'\qc\cell'
+ .'\pard\intbl '.$this->rtf->color(12).' '.$this->enkaEncode($userAnswer['text2']).$this->rtf->color(0).'\qc\cell'
+ .'\pard\intbl '.($this->snippet($this->enkaEncode($stringTitle2),20,'...') ).'\qc\cell'
+ .'\pard\intbl\row';
+
+ } else {
+ #brez eneote
+ $table = '\trowd\trql\cellx3000\cellx4500\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx6000\cellx7500\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx9000';
+ $table .= '\pard\intbl '.$numberingText.$this->enkaEncode($this->dataPiping($spremenljivke['naslov'])).'\ql\cell'
+ .'\pard\intbl '
+ .'\pard\intbl '.$this->rtf->color(12).' '.$this->enkaEncode($userAnswer['text']).$this->rtf->color(0).'\qc\cell'
+ .'\pard\intbl '
+ .'\pard\intbl '.$this->rtf->color(12).' '.$this->enkaEncode($userAnswer['text2']).$this->rtf->color(0).'\qc\cell'
+ .'\pard\intbl\row';
+
+ }
+ }
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($table);
+ $this->rtf->MyRTF .= "}";
+
+ break;
+
+ case 8: //datum
+ if ( $this->getUserId() )
+ {
+ $userAnswerString = "SELECT text FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND usr_id='".$this->getUserId()."' AND loop_id $loop_id;";
+ $sqlUserAnswer = sisplet_query($userAnswerString);
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+ }
+
+ $this->rtf->MyRTF .= "{\par";
+ $tableHeader = '\trowd\trql\trrh400';
+
+ //IZPIS NASLOVA VPRASANJA
+ $table = '\cellx'.( 5000*$expand_width );
+ $tableEnd = '\pard\intbl '.$numberingText.$this->enkaEncode($this->dataPiping($spremenljivke['naslov'])). ' \ql\cell';
+
+ $table .= '\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx'.( 7000*$expand_width );
+ $tableEnd .= '\pard\intbl'.$this->rtf->color(12).' '.$this->enkaEncode($userAnswer['text']).' '.$this->rtf->color(0).'\ql\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+ $this->rtf->MyRTF .= "}";
+
+ break;
+
+ case 18: //vsota
+ $this->rtf->new_line(1);
+ $list = array();
+
+ // Izpisemo tekst vprasanja
+ $this->rtf->add_text($numberingText.$this->enkaEncode($this->dataPiping($spremenljivke['naslov'])));
+ $this->rtf->new_line(1);
+
+ $this->rtf->MyRTF .= "{\par";
+
+ // iz baze preberemo vse moznosti
+ $sum = 0;
+ $sqlVrednosti = sisplet_query("SELECT id, naslov, naslov2, variable FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti))
+ {
+ // Äe imamo vnose, pogledamo kaj je odgovoril uporabnik
+ if ($this->getUserId())
+ {
+ $sqlUserAnswer = sisplet_query("SELECT text FROM srv_data_text".$this->db_table." WHERE spr_id=".$spremenljivke['id']." AND usr_id='".$this->getUserId()."' AND vre_id='".$rowVrednost['id']."' AND loop_id $loop_id");
+ $rowAnswers = mysqli_fetch_assoc($sqlUserAnswer);
+ }
+
+ $stringTitle = $this->enkaEncode( ( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) );
+ $list[] = $stringTitle;
+
+ $table .= '\trowd\trql\cellx5000\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx5800\pard\intbl '.$this->snippet($this->enkaEncode($stringTitle),50,'...').'\~\~\qr\cell\pard\intbl'.$this->rtf->color(12).' '.$this->enkaEncode($rowAnswers['text']).$this->rtf->color(0).'\qc\cell\pard\intbl\row';
+
+ $sum += (int)$rowAnswers['text'];
+ }
+
+ $table .= '\trowd \trql\clbrdrb\brdrs\brdrw10\cellx6000\pard \intbl \cell \pard \intbl \row';
+ $table .= '\trowd \trql\cellx6000\pard \intbl \cell \pard \intbl \row';
+
+ $stringTitle = $spremenljivke['vsota'];
+ $table .= '\trowd \trql\cellx5000\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx5800\pard \intbl '.$this->snippet($this->enkaEncode($stringTitle),50,'...').'\~\~\qr\cell \pard \intbl '.$sum.'\qc\cell \pard \intbl \row';
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($table);
+
+ $this->rtf->MyRTF .= "}";
+ break;
+
+ case 17: //ranking
+ $this->rtf->new_line(1);
+ $list = array();
+
+ // Izpisemo tekst vprasanja
+ $this->rtf->add_text($numberingText.$this->enkaEncode($this->dataPiping($spremenljivke['naslov'])));
+ $this->rtf->new_line(1);
+
+ $this->rtf->MyRTF .= "{\par";
+
+ // iz baze preberemo vse moznosti
+ $sqlVrednosti = sisplet_query("SELECT id, naslov, naslov2, variable FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti))
+ {
+ // Äe imamo vnose, pogledamo kaj je odgovoril uporabnik
+ if ($this->getUserId())
+ {
+ $sqlUserAnswer = sisplet_query("SELECT vrstni_red FROM srv_data_rating WHERE spr_id=".$spremenljivke['id']." AND usr_id='".$this->getUserId()."' AND vre_id='".$rowVrednost['id']."' AND loop_id $loop_id");
+ $rowAnswers = mysqli_fetch_assoc($sqlUserAnswer);
+ }
+
+ $stringTitle = $this->enkaEncode( ( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) );
+ $list[] = $stringTitle;
+
+ $table .= '\trowd \trql\cellx1500\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\cellx2300\pard \intbl '.$this->enkaEncode($stringTitle).' \qc\cell \pard \intbl'.$this->rtf->color(12).' '.$this->enkaEncode($rowAnswers['vrstni_red']).$this->rtf->color(0).'\qc\cell \pard \intbl \row';
+ }
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($table);
+ $this->rtf->MyRTF .= "}";
+ break;
+
+ case 9: //generator imen
+
+ $this->rtf->MyRTF .= "{\par";
+ $tableHeader = '\trowd\trql\trrh400';
+
+ //IZPIS NASLOVA VPRASANJA
+ $table = '\cellx'.( 5000*$expand_width );
+ $tableEnd = '\pard\intbl '.$numberingText.$this->enkaEncode($this->dataPiping($spremenljivke['naslov'])). ' \ql\cell';
+
+ $answer = '';
+ if ( $this->getUserId() ){
+ $sqlUserAnswer = sisplet_query("SELECT text FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND usr_id='".$this->getUserId()."' AND loop_id $loop_id");
+ while($userAnswer = mysqli_fetch_array($sqlUserAnswer)){
+ $answer .= $this->enkaEncode($userAnswer['text']).', ';
+ }
+ $answer = substr($answer, 0, -2);
+ }
+
+ $table .= '\cellx'.( 10000*$expand_width );
+ $tableEnd .= '\pard\intbl'.$this->rtf->color(12).' '.$this->enkaEncode($answer).' '.$this->rtf->color(0).'\ql\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+
+ $this->rtf->MyRTF .= "}";
+ break;
+ }
+ }
+
+ function displayDoubleGridValues($spremenljivke) {
+
+ // razsiritev ce imamo landscape postavitev
+ $expand_width = $this->landscape == 1 ? 1.5 : 1;
+
+ //prvi del grida
+ //naslov 1. grida
+ $this->rtf->TextCell($this->enkaEncode($spremenljivke['grid_subtitle1']), array('width' => 9500*$expand_width, 'height' => 1, 'align' => 'center') );
+
+ $sqlVrednosti = sisplet_query("SELECT *,id, naslov, naslov2, variable FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ $this->rtf->MyRTF .= "{\par";
+ while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti))
+ {
+ $stringCell_title = $this->enkaEncode(( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) );
+
+ // Å¡e dodamo textbox Äe je polj other
+ $_txt = '';
+ if ( $rowVrednost['other'] == 1 && $this->getUserId() )
+ {
+ $sqlOtherText = sisplet_query("SELECT * FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND vre_id='".$rowVrednost['id']."' AND usr_id='".$this->getUserId()."'");
+ $row4 = mysqli_fetch_assoc($sqlOtherText);
+ $_txt = ' '.$row4['text'];
+ }
+ $stringCell_title .= $_txt.':';
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ /*Izpis boÄnega stolpca*/
+ $table = '\cellx'.( 5000*$expand_width );
+ $tableEnd = '\pard\intbl '.$this->enkaEncode($stringCell_title). '\qr\cell';
+
+ $sqlVsehVrednsti = sisplet_query("SELECT id, naslov FROM srv_grid WHERE spr_id='".$spremenljivke['id']."' AND part='1' ORDER BY 'vrstni_red'");
+
+ //izpis rezultatov
+ $resultString = '';
+ while ($rowVsehVrednosti = mysqli_fetch_assoc($sqlVsehVrednsti))
+ {
+ // poiÅ¡Äemo kaj je odgovoril uporabnik:
+ $sqlUserAnswer = sisplet_query("SELECT grd_id FROM srv_data_checkgrid".$this->db_table." WHERE spr_id = '".$rowVrednost['spr_id']."' AND usr_id = '".$this->getUserId()."' AND vre_id = '".$rowVrednost['id']."' AND grd_id = '".$rowVsehVrednosti['id']."'");
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+
+ if($rowVsehVrednosti['id'] == $userAnswer['grd_id'])
+ $resultString .= ' '.$this->enkaEncode($rowVsehVrednosti['naslov']).',';
+ }
+ $resultString = substr($resultString, 0, -1);
+
+ $table .= '\cellx'.( 10000*$expand_width );
+ $tableEnd .= '\pard\intbl'.$this->rtf->color(12).' '.$this->enkaEncode($resultString).' '.$this->rtf->color(0).'\ql\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+ $this->rtf->MyRTF .= "}";
+
+
+ //drugi del grida
+ //naslov 2. grida
+ $this->rtf->TextCell($this->enkaEncode($spremenljivke['grid_subtitle2']), array('width' => 9500*$expand_width, 'height' => 1, 'align' => 'center') );
+
+ $sqlVrednosti = sisplet_query("SELECT *,id, naslov, naslov2, variable FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ $this->rtf->MyRTF .= "{\par";
+ while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti))
+ {
+ $stringCell_title = $this->enkaEncode(( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) );
+
+ // Å¡e dodamo textbox Äe je polj other
+ $_txt = '';
+ if ( $rowVrednost['other'] == 1 && $this->getUserId() )
+ {
+ $sqlOtherText = sisplet_query("SELECT * FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND vre_id='".$rowVrednost['id']."' AND usr_id='".$this->getUserId()."'");
+ $row4 = mysqli_fetch_assoc($sqlOtherText);
+ $_txt = ' '.$row4['text'];
+ }
+ $stringCell_title .= $_txt.':';
+
+ $tableHeader = '\trowd\trql\trrh400';
+
+ /*Izpis boÄnega stolpca*/
+ $table = '\cellx'.( 5000*$expand_width );
+ $tableEnd = '\pard\intbl '.$this->enkaEncode($stringCell_title). '\qr\cell';
+
+ $sqlVsehVrednsti = sisplet_query("SELECT id, naslov FROM srv_grid WHERE spr_id='".$spremenljivke['id']."' AND part='2' ORDER BY 'vrstni_red'");
+
+ //izpis rezultatov
+ $resultString = '';
+ while ($rowVsehVrednosti = mysqli_fetch_assoc($sqlVsehVrednsti))
+ {
+ // poiÅ¡Äemo kaj je odgovoril uporabnik:
+ $sqlUserAnswer = sisplet_query("SELECT grd_id FROM srv_data_checkgrid".$this->db_table." WHERE spr_id = '".$rowVrednost['spr_id']."' AND usr_id = '".$this->getUserId()."' AND vre_id = '".$rowVrednost['id']."' AND grd_id = '".$rowVsehVrednosti['id']."'");
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+
+ if($rowVsehVrednosti['id'] == $userAnswer['grd_id'])
+ $resultString .= ' '.$this->enkaEncode($rowVsehVrednosti['naslov']).',';
+ }
+ $resultString = substr($resultString, 0, -1);
+
+ $table .= '\cellx'.( 10000*$expand_width );
+ $tableEnd .= '\pard\intbl'.$this->rtf->color(12).' '.$this->enkaEncode($resultString).' '.$this->rtf->color(0).'\ql\cell';
+
+ $tableEnd .= '\pard\intbl\row';
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader.$table.$tableEnd);
+ }
+ $this->rtf->MyRTF .= "}";
+
+ }
+
+ function displayDoubleGrid($spremenljivke) {
+
+ // razsiritev ce imamo landscape postavitev
+ $expand_width = $this->landscape == 1 ? 1.5 : 1;
+
+ $this->rtf->MyRTF .= "{\\par\\fs22";
+ $defw_full = 9500*$expand_width;
+ $defw_fc = 1200*$expand_width; // first cell width
+ $defw_max = 800*$expand_width; // max other cell width
+
+ $maxcellx = 9500*$expand_width;
+
+ $sqlStVrednosti = sisplet_query("SELECT count(*) AS count FROM srv_grid WHERE spr_id='".$spremenljivke['id']."' ORDER BY id");
+ $rowStVrednost = mysqli_fetch_row($sqlStVrednosti);
+ $kolon = $rowStVrednost[0]+1;
+ $w_oc = ( $defw_full - $defw_fc ) / $kolon;
+ if ( $w_oc > $defw_max )
+ $w_oc = $defw_max;
+
+ //izpis dveh podnaslovov gridov
+ $tableHeader_base = "\\trowd\\trhdr\\trgaph20\\trleft0\\trrh162";
+
+ $tableHeader_width = "\\cellx".$defw_fc;
+ $tableHeader_title = "\\pard\\intbl\\qc{}\\cell";
+
+ $tableHeader_width .= "\\clbrdrb\\brdrs\\brdrw10\\cellx". ( ($kolon-1)*400 + $defw_fc );
+ $tableHeader_title .= "\\pard\\intbl\\qc{".$this->enkaEncode($spremenljivke['grid_subtitle1'])."}\\cell";
+ $tableHeader_width .= "\\clbrdrl\\brdrs\\brdrw10\\clbrdrb\\brdrs\\brdrw10\\cellx". ( ($kolon-1)*800 + $defw_fc );
+ $tableHeader_title .= "\\pard\\intbl\\qc{".$this->enkaEncode($spremenljivke['grid_subtitle2'])."}\\cell";
+
+ $tableHeader_finish = "\\pard\\intbl\\row";
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader_base.$tableHeader_width.$tableHeader_title.$tableHeader_finish);
+
+
+ $tableHeader_base = "\\trowd\\trhdr\\trgaph20\\trleft0\\trrh162";
+ $tableHeader_width = "\\cellx".$defw_fc;
+ $tableHeader_title = "\\pard\\intbl\\qc{}\\cell";
+ $tableHeader_finish = "\\pard\\intbl\\row";
+
+ $sqlVsehVrednsti = sisplet_query("SELECT naslov, id, variable, part FROM srv_grid WHERE spr_id='".$spremenljivke['id']."' ORDER BY part, vrstni_red");
+ $rowCnt = 0;
+ $border = false;
+ while ($rowVsehVrednosti = mysqli_fetch_assoc($sqlVsehVrednsti))
+ {
+ //izris srednjega borderja
+ if($border == false && $rowVsehVrednosti['part'] == 2){
+ $border = true;
+ $leftBorder = '\clbrdrl\brdrs\brdrw10';
+ }
+ else
+ $leftBorder = '';
+
+ $rowCnt++;
+ $tableHeader_width .= $leftBorder."\\cellx". ( $rowCnt * 800 +$defw_fc );
+ // Äe ni naslova vzamemo variable
+ $stringHeader_title = $this->enkaEncode( ( $rowVsehVrednosti['naslov'] ) ? $rowVsehVrednosti['naslov'] : $rowVsehVrednosti['variable'] );
+ $tableHeader_title .= "\\pard\\intbl\\qc{".$this->enkaEncode($stringHeader_title)."}\\cell";
+ }
+ // izpišemo header celice
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader_base.$tableHeader_width.$tableHeader_title.$tableHeader_finish);
+
+ // loopamo skozi vrstice in pripravimo podatke za tabelo z radii
+ $sqlVrednosti = sisplet_query("SELECT * FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti))
+ {
+ $i=1;
+ // Äe ni naslova vzamemo naslov2, Äe ne pa variable
+ $stringCell_title = $this->enkaEncode( ( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) );
+
+ // Å¡e dodamo textbox Äe je polj other
+ $_txt = '';
+ if ( $rowVrednost['other'] == 1 && $this->getUserId() )
+ {
+ $sqlOtherText = sisplet_query("SELECT * FROM srv_data_text".$this->db_table." WHERE spr_id='".$spremenljivke['id']."' AND vre_id='".$rowVrednost['id']."' AND usr_id='".$this->getUserId()."'");
+ $row4 = mysqli_fetch_assoc($sqlOtherText);
+ $_txt = ' '.$row4['text'];
+ }
+ $stringCell_title .= $_txt;
+
+ $tableHeader_base = "\\trowd\\trgaph12\\trleft0\\trrh262";
+ $tableHeader_width = "\\cellx".$defw_fc;
+ $tableHeader_title = "\\pard\\intbl\\ql\cf0 ".$this->enkaEncode($stringCell_title)."\\cf0\\cell";
+ $tableHeader_finish = "\\pard\\intbl\\row";
+
+ $border = false;
+ $sqlVsehVrednsti = sisplet_query("SELECT id, part FROM srv_grid WHERE spr_id='".$spremenljivke['id']."' ORDER BY part, vrstni_red");
+ while ($rowVsehVrednosti = mysqli_fetch_assoc($sqlVsehVrednsti)){
+
+ // poiÅ¡Äemo kaj je odgovoril uporabnik:
+ $sqlUserAnswer = sisplet_query("SELECT grd_id FROM srv_data_checkgrid".$this->db_table." WHERE spr_id = '".$rowVrednost['spr_id']."' AND usr_id = '".$this->getUserId()."' AND vre_id = '".$rowVrednost['id']."' AND grd_id = '".$rowVsehVrednosti['id']."' ");
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+
+ //izris srednjega borderja
+ if($border == false && $rowVsehVrednosti['part'] == 2){
+ $border = true;
+ $leftBorder = '\clbrdrl\brdrs\brdrw10';
+ }
+ else
+ $leftBorder = '';
+
+ $full = ($rowVsehVrednosti['id'] == $userAnswer['grd_id']) ? true : false;
+
+ if($spremenljivke['tip'] == 6){
+ $tableHeader_width .= "\clvertalc".$leftBorder."\\cellx". ( $i * 800 +$defw_fc );
+ if($full)
+ $tableHeader_title .= "\\pard\\intbl\\qc{". $this->rtf->ImageToString("radio2.png", "15")."}\\cell";
+ else
+ $tableHeader_title .= "\\pard\\intbl\\qc{". $this->rtf->ImageToString("radio.png", "15")."}\\cell";
+ }
+ elseif($spremenljivke['tip'] == 16){
+ $tableHeader_width .= "\clvertalc".$leftBorder."\\cellx". ( $i * 800 +$defw_fc );
+ if($full)
+ $tableHeader_title .= "\\pard\\intbl\\qc{". $this->rtf->ImageToString("checkbox2.png", "15")."}\\cell";
+ else
+ $tableHeader_title .= "\\pard\\intbl\\qc{". $this->rtf->ImageToString("checkbox.png", "15")."}\\cell";
+ }
+ $i++;
+ }
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader_base.$tableHeader_width.$tableHeader_title.$tableHeader_finish);
+ }
+ $this->rtf->MyRTF .= "}";
+ $this->rtf->new_line(1);
+ }
+
+ // Izpis mesanega multigrida
+ function displayGridMultiple($spremenljivke){
+
+ // razsiritev ce imamo landscape postavitev
+ $expand_width = $this->landscape == 1 ? 1.5 : 1;
+
+ $this->rtf->MyRTF .= "{\\par\\fs22";
+
+ $kolon = 0;
+
+ // Preverjamo ce imamo filter na podskupini grida - SAMO CE NE PRIHAJAMO IZ MAILA!
+ $tmp_svp_pv = array();
+ if($this->usr_type == null){
+ $dvp = SurveyUserSetting :: getInstance()->getSettings('default_variable_profile');
+ $_currentVariableProfile = SurveyVariablesProfiles :: checkDefaultProfile($dvp);
+
+ $tmp_svp_pv = SurveyVariablesProfiles :: getProfileVariables($_currentVariableProfile);
+ foreach ( $tmp_svp_pv as $vid => $variable) {
+ $tmp_svp_pv[$vid] = substr($vid, 0, strpos($vid, '_'));
+ }
+ }
+
+ // Loop po podskupinah gridov
+ $sqlSubGrid = sisplet_query("SELECT m.spr_id, s.tip, s.enota FROM srv_grid_multiple m, srv_spremenljivka s WHERE m.parent='".$spremenljivke['id']."' AND m.spr_id=s.id");
+ while($rowSubGrid = mysqli_fetch_array($sqlSubGrid)){
+
+ if((in_array($rowSubGrid['spr_id'],$tmp_svp_pv) || count($tmp_svp_pv) == 0) && $this->checkSpremenljivka($rowSubGrid['spr_id'], $gridMultiple=true)){
+ // Ce gre za podskupino multigrid z dropdowni - potem izrisemo samo en stolpec
+ if($rowSubGrid['tip'] == 6 && $rowSubGrid['enota'] == 2){
+ $kolon ++;
+ }
+ else{
+ $sqlStVrednosti = sisplet_query("SELECT count(*) FROM srv_grid WHERE spr_id='".$rowSubGrid['spr_id']."' ");
+ $rowStVrednost = mysqli_fetch_array($sqlStVrednosti);
+
+ $kolon += $rowStVrednost['count(*)'];
+ }
+ }
+ }
+
+ $defw_full = 10500*$expand_width;
+ if($kolon < 6){
+ $defw_fc = 4300*$expand_width; // first cell width
+ }
+ else{
+ $defw_fc = 2000*$expand_width; // first cell width
+ }
+
+ $kolon ++;
+ $w_oc = ( $defw_full - $defw_fc ) / $kolon;
+ $defw_max = floor($w_oc);
+
+ $tableHeader_base = "\\trowd\\trhdr\\trgaph20\\trleft0\\trrh162";
+ $tableHeader_width = "\\cellx".$defw_fc;
+ $tableHeader_title = "\\pard\\intbl\\qc{}\\cell";
+ $tableHeader_finish = "\\pard\\intbl\\row";
+
+ /*$sqlVsehVrednsti = sisplet_query("SELECT g.naslov,g.variable,m.vrstni_red FROM srv_grid g, srv_grid_multiple m WHERE m.parent='".$spremenljivke['id']."' AND g.spr_id=m.spr_id ORDER BY m.vrstni_red");
+ $rowCnt = 0;
+ while ($rowVsehVrednosti = mysqli_fetch_assoc($sqlVsehVrednsti))
+ {
+ $rowCnt++;
+ $tableHeader_width .= "\\cellx". ( $rowCnt * $defw_max + $defw_fc );
+ // Äe ni naslova vzamemo variable
+ $stringHeader_title = $this->enkaEncode( ( $rowVsehVrednosti['naslov'] ) ? $rowVsehVrednosti['naslov'] : $rowVsehVrednosti['variable'] );
+ $tableHeader_title .= "\\pard\\intbl\\qc{".$this->enkaEncode($stringHeader_title)."}\\cell";
+ }
+ // izpišemo header celice
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader_base.$tableHeader_width.$tableHeader_title.$tableHeader_finish);*/
+
+
+ // izišemo header celice
+ $rowCnt = 0;
+ $sqlSubGrid = sisplet_query("SELECT m.spr_id, m.vrstni_red, s.tip, s.enota FROM srv_grid_multiple m, srv_spremenljivka s WHERE m.parent='".$spremenljivke['id']."' AND m.spr_id=s.id ORDER BY m.vrstni_red");
+ while($rowSubGrid = mysqli_fetch_array($sqlSubGrid)){
+
+ if((in_array($rowSubGrid['spr_id'],$tmp_svp_pv) || count($tmp_svp_pv) == 0) && $this->checkSpremenljivka($rowSubGrid['spr_id'], $gridMultiple=true)){
+ $sqlVsehVrednsti = sisplet_query("SELECT naslov, variable FROM srv_grid WHERE spr_id='".$rowSubGrid['spr_id']."' ");
+ while ($rowVsehVrednosti = mysqli_fetch_assoc($sqlVsehVrednsti))
+ {
+ // Pri multigrid dropdownih ne izpisujemo naslova
+ if($rowSubGrid['tip'] != 6 || $rowSubGrid['enota'] != 2){
+
+ $rowCnt++;
+ $tableHeader_width .= "\\cellx". ( $rowCnt * $defw_max + $defw_fc );
+
+ // Äe je naslov null izpiÅ¡emo variable
+ $stringHeader_title = $this->enkaEncode( $rowVsehVrednosti['naslov'] ? $rowVsehVrednosti['naslov'] : $rowVsehVrednosti['variable'] );
+ $tableHeader_title .= "\\pard\\intbl\\qc{".$this->enkaEncode($stringHeader_title)."}\\cell";
+ }
+ else{
+ $rowCnt++;
+ $tableHeader_width .= "\\cellx". ( $rowCnt * $defw_max + $defw_fc );
+
+ $tableHeader_title .= "\\pard\\intbl\\qc{}\\cell";
+
+ break;
+ }
+ }
+ }
+ }
+ // izpišemo header celice
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader_base.$tableHeader_width.$tableHeader_title.$tableHeader_finish);
+
+
+ // loopamo skozi vrstice in pripravimo podatke za tabelo z radii
+ $row_count = 1;
+ $sqlVrednosti = sisplet_query("SELECT * FROM srv_vrednost WHERE spr_id='".$spremenljivke['id']."' ORDER BY vrstni_red");
+ while ($rowVrednost = mysqli_fetch_assoc($sqlVrednosti))
+ {
+ $skipRow = false;
+
+ // barva vrstice
+ $row_color = ($row_count%2 == 1) ? '\\clcbpat18' : '';
+
+ // Ce imamo nastavljeno preskakovanje podvprasanj preverimo ce je kaksen odgovor v vrstici
+ if($this->skipEmptySub == 1){
+
+ $skipRow = true;
+
+ // Loop po podskupinah gridov
+ $sqlSubGrid = sisplet_query("SELECT m.spr_id, s.tip FROM srv_grid_multiple m, srv_spremenljivka s WHERE m.parent='".$spremenljivke['id']."' AND m.spr_id=s.id ORDER BY m.vrstni_red");
+ while($rowSubGrid = mysqli_fetch_array($sqlSubGrid)){
+
+ if((in_array($rowSubGrid['spr_id'],$tmp_svp_pv) || count($tmp_svp_pv) == 0) && $this->checkSpremenljivka($rowSubGrid['spr_id'], $gridMultiple=true)){
+ $sqlSubVar = sisplet_query("SELECT * FROM srv_vrednost WHERE spr_id='".$rowSubGrid['spr_id']."' AND vrstni_red='".$rowVrednost['vrstni_red']."' ");
+ $rowSubVar = mysqli_fetch_array($sqlSubVar);
+
+ if($rowSubGrid['tip'] == 6)
+ $sqlUserAnswer = sisplet_query("SELECT grd_id FROM srv_data_grid".$this->db_table." WHERE spr_id = '".$rowSubGrid['spr_id']."' AND usr_id = '".$this->getUserId()."' AND vre_id = '".$rowSubVar['id']."'");
+ elseif($rowSubGrid['tip'] == 16)
+ $sqlUserAnswer = sisplet_query("SELECT grd_id FROM srv_data_checkgrid".$this->db_table." WHERE spr_id = '".$rowSubGrid['spr_id']."' AND usr_id = '".$this->getUserId()."' AND vre_id = '".$rowSubVar['id']."'");
+ else
+ $sqlUserAnswer = sisplet_query("SELECT grd_id, text FROM srv_data_textgrid".$this->db_table." WHERE spr_id = '".$rowSubGrid['spr_id']."' AND usr_id = '".$this->getUserId()."' AND vre_id = '".$rowSubVar['id']."'");
+
+ if(mysqli_num_rows($sqlUserAnswer) > 0){
+ $skipRow = false;
+ break;
+ }
+ }
+ }
+ }
+
+ if($skipRow == false){
+ $i=1;
+ // Äe ni naslova vzamemo naslov2, Äe ne pa variable
+ $stringCell_title = $this->enkaEncode( ( $rowVrednost['naslov'] ) ? $rowVrednost['naslov'] : ( ( $rowVrednost['naslov2'] ) ? $rowVrednost['naslov2'] : $rowVrednost['variable'] ) );
+ $tableHeader_base = "\\trowd\\trgaph12\\trleft0\\trrh262";
+ $tableHeader_width = $row_color."\\cellx".$defw_fc;
+ $tableHeader_title = "\\pard\\intbl\\ql\cf0 ".$this->enkaEncode($stringCell_title)."\\cf0\\cell";
+ $tableHeader_finish = "\\pard\\intbl\\row";
+
+
+ // Loop po podskupinah gridov
+ $sqlSubGrid = sisplet_query("SELECT m.spr_id, s.tip, s.enota FROM srv_grid_multiple m, srv_spremenljivka s WHERE m.parent='".$spremenljivke['id']."' AND s.id=m.spr_id ORDER BY m.vrstni_red");
+ while($rowSubGrid = mysqli_fetch_array($sqlSubGrid)){
+
+ if((in_array($rowSubGrid['spr_id'],$tmp_svp_pv) || count($tmp_svp_pv) == 0) && $this->checkSpremenljivka($rowSubGrid['spr_id'], $gridMultiple=true)){
+ // Dobimo se var_id od trenutne podskupine
+ $sqlSubVar = sisplet_query("SELECT * FROM srv_vrednost WHERE spr_id='".$rowSubGrid['spr_id']."' AND vrstni_red='".$rowVrednost['vrstni_red']."' ");
+ $rowSubVar = mysqli_fetch_array($sqlSubVar);
+
+ // Ce imamo dropdown mg izpisemo samo izbrani odg.
+ if($rowSubGrid['tip'] == 6 && $rowSubGrid['enota'] == 2){
+
+ $sqlUserAnswer = sisplet_query("SELECT d.grd_id, g.naslov, g.variable FROM srv_grid g INNER JOIN srv_data_grid".$this->db_table." d ON g.id=d.grd_id AND g.spr_id=d.spr_id WHERE d.spr_id='".$rowSubGrid['spr_id']."' AND d.usr_id='".$this->getUserId()."' AND d.vre_id='".$rowSubVar['id']."'");
+ if(mysqli_num_rows($sqlUserAnswer) > 0){
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+ $title = $this->enkaEncode( $userAnswer['naslov'] ? $userAnswer['naslov'] : $userAnswer['variable'] );
+ }
+ else
+ $title = '';
+
+ $tableHeader_width .= "\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10".$row_color."\\cellx". ( $i * $defw_max + $defw_fc );
+ $tableHeader_title .= '\\pard\\intbl'.$this->rtf->color(12).' '.$this->rtf->enkaEncode($title).$this->rtf->color(0).'\qc{}\\cell';
+
+ $i++;
+ }
+ else{
+ $sqlVsehVrednsti = sisplet_query("SELECT id FROM srv_grid WHERE spr_id='".$rowSubGrid['spr_id']."' ORDER BY vrstni_red");
+ while ($rowVsehVrednosti = mysqli_fetch_assoc($sqlVsehVrednsti)){
+
+ // poiÅ¡Äemo kaj je odgovoril uporabnik:
+ if($rowSubGrid['tip'] == 6)
+ $sqlUserAnswer = sisplet_query("SELECT grd_id FROM srv_data_grid".$this->db_table." WHERE spr_id = '".$rowSubVar['spr_id']."' AND usr_id = '".$this->getUserId()."' AND vre_id = '".$rowSubVar['id']."'");
+ elseif($rowSubGrid['tip'] == 16)
+ $sqlUserAnswer = sisplet_query("SELECT grd_id FROM srv_data_checkgrid".$this->db_table." WHERE spr_id = '".$rowSubVar['spr_id']."' AND usr_id = '".$this->getUserId()."' AND vre_id = '".$rowSubVar['id']."' AND grd_id = '".$rowVsehVrednosti['id']."' ");
+ else
+ $sqlUserAnswer = sisplet_query("SELECT grd_id, text FROM srv_data_textgrid".$this->db_table." WHERE spr_id = '".$rowSubVar['spr_id']."' AND usr_id = '".$this->getUserId()."' AND vre_id = '".$rowSubVar['id']."' AND grd_id = '".$rowVsehVrednosti['id']."' ");
+
+ $userAnswer = mysqli_fetch_assoc($sqlUserAnswer);
+
+ $full = ($rowVsehVrednosti['id'] == $userAnswer['grd_id']) ? true : false;
+
+ if($rowSubGrid['tip'] == 6){
+ $tableHeader_width .= "\clvertalc".$row_color."\\cellx". ( $i * $defw_max + $defw_fc );
+ if($full)
+ $tableHeader_title .= "\\pard\\intbl\\qc{". $this->rtf->ImageToString("radio2.png", "15")."}\\cell";
+ else
+ $tableHeader_title .= "\\pard\\intbl\\qc{". $this->rtf->ImageToString("radio.png", "15")."}\\cell";
+ }
+ elseif($rowSubGrid['tip'] == 16){
+ $tableHeader_width .= "\clvertalc".$row_color."\\cellx". ( $i * $defw_max + $defw_fc );
+ if($full)
+ $tableHeader_title .= "\\pard\\intbl\\qc{". $this->rtf->ImageToString("checkbox2.png", "15")."}\\cell";
+ else
+ $tableHeader_title .= "\\pard\\intbl\\qc{". $this->rtf->ImageToString("checkbox.png", "15")."}\\cell";
+ }
+ else{
+ $tableHeader_width .= "\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10".$row_color."\\cellx". ( $i * $defw_max + $defw_fc );
+ $tableHeader_title .= '\\pard\\intbl'.$this->rtf->color(12).' '.$this->rtf->enkaEncode($userAnswer['text']).$this->rtf->color(0).'\qc{}\\cell';
+ }
+ $i++;
+ }
+ }
+ }
+ }
+
+ $row_count++;
+
+ $this->rtf->MyRTF .= $this->rtf->enkaEncode($tableHeader_base.$tableHeader_width.$tableHeader_title.$tableHeader_finish);
+ }
+ }
+ $this->rtf->MyRTF .= "}";
+ $this->rtf->new_line(1);
+ }
+
+
+ function createFrontPage()
+ {
+ global $lang;
+
+ // razsiritev ce imamo landscape postavitev
+ $expand_width = $this->landscape == 1 ? 1.5 : 1;
+
+ $this->rtf->new_line(10);
+
+ if(!$this->getUserId()){
+ $this->rtf->TextCell($this->rtf->bold(1).$this->enkaEncode( SurveyInfo::getInstance()->getSurveyTitle()).$this->rtf->bold(0).'\\line\n '.$lang['export_firstpage_results'], array('width' => 9500*$expand_width, 'height' => 3,
+ 'align' => 'center', 'valign' => 'middle' , 'border' => array('top','bottom', 'left','right'),
+ 'colorF' => "0", 'colorB' => "0" ) );
+ }
+ else{
+ $this->rtf->TextCell($this->enkaEncode( SurveyInfo::getInstance()->getSurveyTitle()), array('width' => 9500*$expand_width, 'height' => 3,
+ 'align' => 'center', 'valign' => 'middle' , 'border' => array('top','bottom', 'left','right'),
+ 'colorF' => "0", 'colorB' => "0" ) );
+ }
+
+ $this->rtf->new_line(3);
+ // dodamo info:
+ $this->rtf->TextCell("", array('width' => 9500*$expand_width, 'height' => 1,
+ 'align' => 'left', 'valign' => 'bottom' , 'border' => array('bottom'),'colorF' => "0" ) );
+
+ $infoTable = array();
+ array_push( $infoTable, array( $lang['export_firstpage_shortname'].': '.$this->enkaEncode(SurveyInfo::getInstance()->getSurveyTitle()), "" ) );
+ if ( SurveyInfo::getInstance()->getSurveyTitle() != SurveyInfo::getInstance()->getSurveyAkronim() )
+ array_push( $infoTable, array( $lang['export_firstpage_longname'].': '.$this->enkaEncode(SurveyInfo::getInstance()->getSurveyAkronim()), "" ) );
+ array_push( $infoTable, array( $lang['export_firstpage_qcount'].': '.SurveyInfo::getInstance()->getSurveyQuestionCount(), "" ) );
+
+ // Aktiviranost
+ $activity = SurveyInfo:: getSurveyActivity();
+ $_last_active = end($activity);
+ if (SurveyInfo::getSurveyColumn('active') == 1) {
+ array_push( $infoTable, array( $this->rtf->color(11).$this->enkaEncode($lang['srv_anketa_active2']).$this->rtf->color(0), "") );
+ } else {
+ # preverimo ali je bila anketa že aktivirana
+ if (!isset($_last_active['starts'])) {
+ # anketa Å¡e sploh ni bila aktivirana
+ array_push( $infoTable, array( $this->rtf->color(17).$this->enkaEncode($lang['srv_survey_non_active_notActivated']).$this->rtf->color(0), "") );
+ } else {
+ # anketa je že bila aktivirna ampak je sedaj neaktivna
+ array_push( $infoTable, array( $this->rtf->color(17).$this->enkaEncode($lang['srv_survey_non_active']).$this->rtf->color(0), "") );
+ }
+ }
+
+ // Aktivnost
+ if( count($activity) > 0 ){
+ array_push( $infoTable, array( $lang['export_firstpage_active_from'].': '.SurveyInfo::getInstance()->getSurveyStartsDate(), $lang['export_firstpage_active_until'].': '.SurveyInfo::getInstance()->getSurveyExpireDate() ) );
+ }
+
+ array_push( $infoTable, array( $lang['export_firstpage_author'].': '.SurveyInfo::getInstance()->getSurveyInsertName(), $lang['export_firstpage_edit'].': '.SurveyInfo::getInstance()->getSurveyEditName() ) );
+ array_push( $infoTable, array( $lang['export_firstpage_date'].': '.SurveyInfo::getInstance()->getSurveyInsertDate(), $lang['export_firstpage_date'].': '.SurveyInfo::getInstance()->getSurveyEditDate() ) );
+ array_push( $infoTable, array( $lang['export_firstpage_desc'].': '.SurveyInfo::getInstance()->getSurveyInfo(), "" ) );
+ $this->rtf->TableFromArray( array( 4750*$expand_width, 4750*$expand_width ), $infoTable, array('spacer' => 0));
+
+ if($this->getUserId())
+ $this->rtf->new_page();
+ }
+
+ function enkaEncode($text)
+ {
+ global $site_url;
+
+ // preverimo text za img tage in jih zamenjamo z ustrezno sliko
+ $pattern = '/<img[^>]+src[\\s=\'"]';
+ $pattern .= '+([^"\'>\\s]+)/is';
+ if(preg_match($pattern, $text, $match, PREG_OFFSET_CAPTURE)){
+
+ // relativna pot
+ if(substr($match[1][0], 0, 1) == '/')
+ $image = $site_url.$match[1][0];
+ else
+ $image = $match[1][0];
+
+ $file = @file_get_contents($image);
+
+ $result .= "{";
+ $result .= "\\pict\\jpegblip\\picscalex100\\picscaley100\\bliptag132000428 ";
+ $result .= trim(bin2hex($file));
+ $result .= "\n}\n";
+
+ $text = preg_replace("/<img[^>]+\>/i", $result, $text);
+ }
+
+ // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ return strip_tags($text);
+ }
+
+/* Skrajsa niz in doda ... nakoncu
+ * snippet(phrase,[max length],[phrase tail])
+ * snippetgreedy(phrase,[max length before next space],[phrase tail])
+ *
+ * iz: http://snipplr.com/view/9520/php-substring-without-breaking-words/
+ */
+ function snippet($text,$length=64,$tail="...")
+ {
+ $text = trim($text);
+ $txtl = strlen($text);
+ if($txtl > $length)
+ {
+ for($i=1;$text[$length-$i]!=" ";$i++)
+ {
+ if($i == $length)
+ {
+ return substr($text,0,$length) . $tail;
+ }
+ }
+ $text = substr($text,0,$length-$i+1) . $tail;
+ }
+ return $text;
+ }
+
+ function setGrupa($grupa) {$this->grupa = $grupa;}
+ function getGrupa() {return $this->grupa;}
+ function setUserId($usrId) {$this->usr_id = $usrId;}
+ function getUserId() {return ($this->usr_id)?$this->usr_id:false;}
+ function setDisplayFrontPage($display) {$this->pi['displayFrontPage'] = $display;}
+ function getDisplayFrontPage() {return ($this->pi['displayFrontPage'] == true || $this->pi['displayFrontPage'] == 1);}
+
+ /**
+ * @desc preveri ali so na trenutni grupi prikazana vprasanja (zaradi branchinga)
+ */
+ function checkGrupa () {
+
+ $sql = sisplet_query("SELECT id FROM srv_spremenljivka WHERE gru_id = '".$this->grupa."'");
+ if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
+ while ($row = mysqli_fetch_array($sql)) {
+
+ if ($this->checkSpremenljivka($row['id']))
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * @desc preveri ali je spremenljivka vidna (zaradi branchinga)
+ */
+ function checkSpremenljivka ($spremenljivka, $gridMultiple=false) {
+
+ $sql = sisplet_query("SELECT * FROM srv_spremenljivka WHERE id = '".$spremenljivka."'");
+ if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
+ $row = mysqli_fetch_array($sql);
+
+ // Ce vprasanje ni vidno ali ce uporabnik nima dostopa do vprasanja
+ if ($row['visible'] == 0 || !( ($this->admin_type <= $row['dostop'] && $this->admin_type>=0) || ($this->admin_type==-1 && $row['dostop']==4) ) )
+ return false;
+
+ // Kalklulacije in kvote ne prikazujemo
+ if($row['tip'] == 22 || $row['tip'] == 25)
+ return false;
+
+ // Preverjamo ce je vprasanje prazno in ce preskakujemo prazne
+ if($this->skipEmpty == 1 && !$gridMultiple){
+
+ $isEmpty = true;
+ switch ( $row['tip'] ){
+ case 1: //radio
+ case 2: //check
+ case 3: //select -> radio
+ $sqlUserAnswer = sisplet_query("SELECT * FROM srv_data_vrednost".$this->db_table." WHERE spr_id='$row[id]' AND usr_id='".$this->getUserId()."' AND vre_id!='-2'");
+ if(mysqli_num_rows($sqlUserAnswer) > 0)
+ $isEmpty = false;
+ break;
+
+ case 6: //multigrid
+ case 16:// multicheckbox
+ case 19:// multitext
+ case 20:// multinumber
+ if($row['tip'] == 6 && $row['enota'] != 3)
+ $sqlUserAnswer = sisplet_query("SELECT * FROM srv_data_grid".$this->db_table." WHERE spr_id = '".$row['id']."' AND usr_id = '".$this->getUserId()."'");
+ elseif($row['tip'] == 16 || ($row['tip'] == 6 && $row['enota'] == 3))
+ $sqlUserAnswer = sisplet_query("SELECT * FROM srv_data_checkgrid".$this->db_table." WHERE spr_id = '".$row['id']."' AND usr_id = '".$this->getUserId()."'");
+ else
+ $sqlUserAnswer = sisplet_query("SELECT * FROM srv_data_textgrid".$this->db_table." WHERE spr_id = '".$row['id']."' AND usr_id = '".$this->getUserId()."'");
+
+ if(mysqli_num_rows($sqlUserAnswer) > 0)
+ $isEmpty = false;
+ break;
+
+ case 7: //number
+ case 8: //datum
+ case 18: //vsota
+ case 21: //besedilo*
+ $sqlUserAnswer = sisplet_query("SELECT * FROM srv_data_text".$this->db_table." WHERE spr_id='".$row['id']."' AND usr_id='".$this->getUserId()."'");
+ if(mysqli_num_rows($sqlUserAnswer) > 0)
+ $isEmpty = false;
+ break;
+
+ case 17: //ranking
+ $sqlUserAnswer = sisplet_query("SELECT * FROM srv_data_rating WHERE spr_id=".$row['id']." AND usr_id='".$this->getUserId()."'");
+ if(mysqli_num_rows($sqlUserAnswer) > 0)
+ $isEmpty = false;
+ break;
+
+ case 24: //mesan multigrid
+ // loop po podskupinah gridov
+ $sqlSubGrid = sisplet_query("SELECT m.spr_id, s.tip, s.enota FROM srv_grid_multiple m, srv_spremenljivka s WHERE m.parent='".$spremenljivka."' AND m.spr_id=s.id");
+ while($rowSubGrid = mysqli_fetch_array($sqlSubGrid)){
+
+ if($rowSubGrid['tip'] == 6)
+ $sqlUserAnswer = sisplet_query("SELECT grd_id FROM srv_data_grid".$this->db_table." WHERE spr_id = '".$rowSubGrid['spr_id']."' AND usr_id = '".$this->getUserId()."'");
+ elseif($rowSubGrid['tip'] == 16)
+ $sqlUserAnswer = sisplet_query("SELECT grd_id FROM srv_data_checkgrid".$this->db_table." WHERE spr_id = '".$rowSubGrid['spr_id']."' AND usr_id = '".$this->getUserId()."'");
+ else
+ $sqlUserAnswer = sisplet_query("SELECT grd_id, text FROM srv_data_textgrid".$this->db_table." WHERE spr_id = '".$rowSubGrid['spr_id']."' AND usr_id = '".$this->getUserId()."'");
+
+ if(mysqli_num_rows($sqlUserAnswer) > 0){
+ $isEmpty = false;
+ break;
+ }
+ }
+ break;
+
+ case 5: //nagovor
+ // Ce je nagovor v loopu, ga prikazemo
+ if($this->loop_id != null)
+ $isEmpty = false;
+ break;
+
+ default:
+ $isEmpty = false;
+ break;
+ }
+
+ if($isEmpty == true){
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * @desc preveri ali se elementi v podanem IFu prikazejo ali ne
+ */
+ function checkIf ($if) {
+ if ($if == 0) return true;
+
+ // preverimo po strukturi navzgor
+ $sql = sisplet_query("SELECT * FROM srv_branching WHERE element_if = '".$if."'");
+ if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
+ $row = mysqli_fetch_array($sql);
+ if (!$this->checkIf($row['parent'])) return false;
+
+ // ce je IF oznacen kot blok, potem se vedno prikaze
+ $sql = sisplet_query("SELECT * FROM srv_if WHERE id = '$if'");
+ if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
+ $row = mysqli_fetch_array($sql);
+ if ($row['tip'] == 1) return true;
+
+
+ $eval = "if (";
+
+ $sql = sisplet_query("SELECT * FROM srv_condition WHERE if_id = '$if' ORDER BY vrstni_red ASC");
+ if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
+
+ $i = 0;
+ // zgeneriramo pogoje z oklepaji, ki jih potem spustimo skozi eval
+ while ($row = mysqli_fetch_array($sql)) {
+
+ if ($i++ != 0)
+ if ($row['conjunction'] == 0)
+ $eval .= ' && ';
+ else
+ $eval .= ' || ';
+
+ if ($row['negation'] == 1)
+ $eval .= ' ! ';
+
+ for ($i=1; $i<=$row['left_bracket']; $i++)
+ $eval .= ' ( ';
+
+ if ($this->checkCondition($row[id]))
+ $eval .= ' true ';
+ else
+ $eval .= ' false ';
+
+ for ($i=1; $i<=$row['right_bracket']; $i++)
+ $eval .= ' ) ';
+
+ }
+ $eval .= ") return true; else return false; ";
+
+ // ne glih best practice, ampak takle mamo...
+ return eval($eval);
+
+ }
+
+ /**
+ * @desc preveri podani condition
+ */
+ function checkCondition ($condition) {
+
+ $sql = sisplet_query("SELECT * FROM srv_condition WHERE id = '$condition'");
+ if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
+ $row = mysqli_fetch_array($sql);
+
+ // obicne spremenljivke
+ if ($row['spr_id'] > 0) {
+ $sql2 = sisplet_query("SELECT * FROM srv_spremenljivka WHERE id = '$row[spr_id]'");
+ $row2 = mysqli_fetch_array($sql2);
+
+
+ // radio, checkbox, dropdown in multigrid
+ if ($row2['tip'] <= 3 || $row2['tip'] == 6) {
+
+ // obicne spremenljivke
+ if ($row['vre_id'] == 0) {
+ $sql3 = sisplet_query("SELECT * FROM srv_condition_vre c, srv_data_vrednost v
+ WHERE c.cond_id='$condition' AND c.vre_id=v.vre_id
+ AND v.spr_id='$row[spr_id]' AND usr_id='".$this->getUserId()."'");
+ if ($row['operator'] == 0 && mysqli_num_rows($sql3) == 0)
+ return false;
+ elseif ($row['operator'] == 1 && mysqli_num_rows($sql3) > 0)
+ return false;
+ // multigrid
+ } elseif ($row['vre_id'] > 0) {
+ $sql3 = sisplet_query("SELECT * FROM srv_condition_grid c, srv_data_grid d
+ WHERE c.cond_id='$condition' AND d.spr_id='$row[spr_id]'
+ AND c.grd_id=d.grd_id AND d.usr_id='".$this->getUserId()."'");
+ if (!$sql3) echo mysqli_error($GLOBALS['connect_db']);
+ if ($row['operator'] == 0 && !mysqli_num_rows($sql3) > 0)
+ return false;
+ elseif ($row['operator'] == 1 && !mysqli_num_rows($sql3) == 0)
+ return false;
+ }
+
+ // number in text
+ } else {
+
+ $sql3 = sisplet_query("SELECT * FROM srv_data_text".$this->db_table." WHERE spr_id='$row[spr_id]' AND usr_id='".$this->getUserId()."'");
+ if (!$sql3) echo mysqli_error($GLOBALS['connect_db']);
+ $row3 = mysqli_fetch_array($sql3);
+
+ if ($row['operator'] == 0 && !($row3['text'] == $row['text']))
+ return false;
+ elseif ($row['operator'] == 1 && !($row3['text'] != $row['text']))
+ return false;
+ elseif ($row['operator'] == 2 && !($row3['text'] < $row['text']))
+ return false;
+ elseif ($row['operator'] == 3 && !($row3['text'] <= $row['text']))
+ return false;
+ elseif ($row['operator'] == 4 && !($row3['text'] > $row['text']))
+ return false;
+ elseif ($row['operator'] == 5 && !($row3['text'] >= $row['text']))
+ return false;
+
+ }
+
+ // recnum
+ } elseif ($row['spr_id'] == -1) {
+
+ $sqlu = sisplet_query("SELECT * FROM srv_user WHERE id = '".$this->getUserId()."'");
+ $rowu = mysqli_fetch_array($sqlu);
+
+ if (!($rowu['recnum'] % $row['modul'] == $row['ostanek']))
+ return false;
+
+ }
+
+ return true;
+ }
+
+ /**
+ * @desc poisce naslednjo stran - grupo, 0 pomeni konec
+ */
+ function findNextGrupa() {
+
+ //vrstni red trenutne grupe
+ if ($this->grupa > 0) {
+ $sql = sisplet_query("SELECT * FROM srv_grupa WHERE id = '".$this->grupa."'");
+ $row = mysqli_fetch_array($sql);
+ $vrstni_red = $row['vrstni_red'];
+ } else {
+ $vrstni_red = 0;
+ }
+
+ $sql = sisplet_query("SELECT * FROM srv_grupa WHERE ank_id='".$this->anketa['id']."' AND vrstni_red>'".$vrstni_red."' ORDER BY vrstni_red ASC LIMIT 1");
+
+ // naslednja stran
+ if (mysqli_num_rows($sql) > 0) {
+ $row = mysqli_fetch_array($sql);
+ return $row['id'];
+ }
+
+ // konec
+ else {
+ return 0;
+ }
+ }
+
+ // preverja ce je v stringu img in vrne razbit niz ce je
+ function checkImage($text)
+ {
+ $textArray = array();
+
+ $pattern = '/<img[^>]+src[\\s=\'"]';
+ $pattern .= '+([^"\'>\\s]+)/is';
+
+ if(preg_match($pattern, $text, $match, PREG_OFFSET_CAPTURE)){
+ $textArray['image'] = $match[1][0];
+
+ $text = preg_replace("/<img[^>]+\>/i", "", $text);
+ $textArray['text1'] = substr($text, 0, $match[0][1]);
+ $textArray['text2'] = substr($text, $match[0][1]);
+ }
+
+ return $textArray;
+ }
+
+ function displayIf($if){
+ global $lang;
+
+ $sql_if = sisplet_query("SELECT * FROM srv_if WHERE id = '$if'");
+ $row_if = mysqli_fetch_array($sql_if);
+
+ // Blok
+ if($row_if['tip'] == 1)
+ $output = strtoupper($lang['srv_block']).' ';
+ // Loop
+ elseif($row_if['tip'] == 2)
+ $output = strtoupper($lang['srv_loop']).' ';
+ // IF
+ else
+ $output = 'IF ';
+
+ $sql_if = sisplet_query("SELECT * FROM srv_if WHERE id = '$if'");
+ $row_if = mysqli_fetch_array($sql_if);
+ $output .= '('.$row_if['number'].') ';
+
+ $sql = Cache::srv_condition($if);
+
+ $bracket = 0;
+ $i = 0;
+ while ($row = mysqli_fetch_array($sql)) {
+
+ if ($i++ != 0)
+ if ($row['conjunction'] == 0)
+ $output .= ' and ';
+ else
+ $output .= ' or ';
+
+ if ($row['negation'] == 1)
+ $output .= ' NOT ';
+
+ for ($i=1; $i<=$row['left_bracket']; $i++)
+ $output .= ' ( ';
+
+ // obicajne spremenljivke
+ if ($row['spr_id'] > 0) {
+
+ $row2 = Cache::srv_spremenljivka($row['spr_id']);
+
+ // obicne spremenljivke
+ if ($row['vre_id'] == 0) {
+ $row1 = Cache::srv_spremenljivka($row['spr_id']);
+ // multigrid
+ } elseif ($row['vre_id'] > 0) {
+ $sql1 = sisplet_query("SELECT * FROM srv_vrednost WHERE id = '$row[vre_id]'");
+ $row1 = mysqli_fetch_array($sql1);
+ } else
+ $row1 = null;
+
+ $output .= $row1['variable'];
+
+ // radio, checkbox, dropdown in multigrid
+ if (($row2['tip'] <= 3 || $row2['tip'] == 6) && ($row['spr_id'] || $row['vre_id'])) {
+
+ if ($row['operator'] == 0)
+ $output .= ' = ';
+ else
+ $output .= ' != ';
+
+ $output .= '[';
+
+ // obicne spremenljivke
+ if ($row['vre_id'] == 0) {
+ $sql2 = sisplet_query("SELECT * FROM srv_condition_vre c, srv_vrednost v WHERE cond_id='$row[id]' AND c.vre_id=v.id");
+
+ $j = 0;
+ while ($row2 = mysqli_fetch_array($sql2)) {
+ if ($j++ != 0) $output .= ', ';
+ $output .= $row2['variable'];
+ }
+ // multigrid
+ } elseif ($row['vre_id'] > 0) {
+ $sql2 = sisplet_query("SELECT g.* FROM srv_condition_grid c, srv_grid g WHERE c.cond_id='$row[id]' AND c.grd_id=g.id AND g.spr_id='$row[spr_id]'");
+
+ $j = 0;
+ while ($row2 = mysqli_fetch_array($sql2)) {
+ if ($j++ != 0) $output .= ', ';
+ $output .= $row2['variable'];
+ }
+ }
+
+ $output .= ']';
+
+ // textbox in nubmer mata drugacne pogoje in opcije
+ } elseif ($row2['tip'] == 4 || $row2['tip'] == 21 || $row2['tip'] == 7 || $row2['tip'] == 22) {
+
+ if ($row['operator'] == 0)
+ $output .= ' = ';
+ elseif ($row['operator'] == 1)
+ $output .= ' <> ';
+ elseif ($row['operator'] == 2)
+ $output .= ' < ';
+ elseif ($row['operator'] == 3)
+ $output .= ' <= ';
+ elseif ($row['operator'] == 4)
+ $output .= ' > ';
+ elseif ($row['operator'] == 5)
+ $output .= ' >= ';
+
+ $output .= '\''.$row['text'].'\'';
+
+ }
+
+ // recnum
+ } elseif ($row['spr_id'] == -1) {
+
+ $output .= 'mod(recnum, '.$row['modul'].') = '.$row['ostanek'];
+
+ }
+
+ for ($i=1; $i<=$row['right_bracket']; $i++)
+ $output .= ' ) ';
+ }
+
+ if ($row_if['label'] != '') {
+ $output .= ' (';
+ $output .= ' '.$row_if['label'].' ';
+ $output .= ') ';
+ }
+
+ $this->rtf->add_text($this->rtf->bold(1).$this->enkaEncode($output).$this->rtf->bold(0));
+ }
+
+ /**
+ * poisce, ce ima podani element parenta, ki je loop
+ *
+ */
+ function find_parent_loop ($element_spr, $element_if=0) {
+
+ $sql = sisplet_query("SELECT parent FROM srv_branching WHERE element_spr = '$element_spr' AND element_if = '$element_if' AND ank_id='".$this->anketa['id']."'");
+ if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
+ $row = mysqli_fetch_array($sql);
+
+ if ($row['parent'] == 0) return 0;
+
+ $sql = sisplet_query("SELECT id FROM srv_if WHERE id = '$row[parent]' AND tip = '2'");
+ if (!$sql) echo mysqli_error($GLOBALS['connect_db']);
+ if (mysqli_num_rows($sql) > 0)
+ return $row['parent'];
+ else
+ return $this->find_parent_loop(0, $row['parent']);
+
+ }
+
+ /**
+ * poisce naslednjo vre_id v loopu
+ *
+ */
+ function findNextLoopId ($if_id=0) {
+
+ if ($if_id == 0) {
+ $sql = sisplet_query("SELECT * FROM srv_loop_data WHERE id='$this->loop_id'");
+ $row = mysqli_fetch_array($sql);
+ $if_id = $row['if_id'];
+ $loop_id = $this->loop_id;
+ } else
+ $loop_id = 0;
+
+ $sql = sisplet_query("SELECT * FROM srv_loop WHERE if_id = '$if_id'");
+ $row = mysqli_fetch_array($sql);
+ $spr_id = $row['spr_id'];
+ $max = $row['max'];
+
+ $spr = Cache::srv_spremenljivka($spr_id);
+
+ if ($spr['tip'] == 2 || $spr['tip'] == 3 || $spr['tip'] == 9) {
+
+ $data_vrednost = array();
+ if($spr['tip'] == 9)
+ $sql1 = sisplet_query("SELECT vre_id FROM srv_data_text".$this->db_table." WHERE spr_id='$spr_id' AND usr_id='".$this->getUserId()."'");
+ else
+ $sql1 = sisplet_query("SELECT vre_id FROM srv_data_vrednost".$this->db_table." WHERE spr_id='$spr_id' AND usr_id='".$this->getUserId()."'");
+
+ while ($row1 = mysqli_fetch_array($sql1)) {
+ $data_vrednost[$row1['vre_id']] = 1;
+ }
+
+ $vre_id = '';
+ $i = 1;
+ //$sql = sisplet_query("SELECT * FROM srv_loop_vre WHERE if_id='$if_id'");
+ $sql = sisplet_query("SELECT * FROM srv_loop_vre lv, srv_vrednost v WHERE lv.if_id='$if_id' AND lv.vre_id=v.id ORDER BY v.vrstni_red ASC");
+ while ($row = mysqli_fetch_array($sql)) {
+
+ if ($row['tip'] == 0) { // izbran
+ if ( isset($data_vrednost[$row['vre_id']]) ) {
+ $vre_id .= ', '.$row['vre_id'];
+ $i++;
+ }
+ } elseif ($row['tip'] == 1) { // ni izbran
+ if ( !isset($data_vrednost[$row['vre_id']]) ) {
+ $vre_id .= ', '.$row['vre_id'];
+ $i++;
+ }
+ } elseif ($row['tip'] == 2) { // vedno
+ $vre_id .= ', '.$row['vre_id'];
+ $i++;
+ } // nikoli nimamo sploh v bazi, zato ni potrebno nic, ker se nikoli ne prikaze
+
+ if ($i > $max && $max>0) break;
+ }
+
+ $vre_id = substr($vre_id, 2);
+
+ if ($vre_id == '') return null;
+
+ $sql = sisplet_query("SELECT l.* FROM srv_loop_data l, srv_vrednost v WHERE l.if_id='$if_id' AND l.id > '$loop_id' AND l.vre_id IN ($vre_id) AND l.vre_id=v.id ORDER BY l.id ASC");
+ if (!$sql) { echo 'err56545'.mysqli_error($GLOBALS['connect_db']); die();}
+ $row = mysqli_fetch_array($sql);
+
+ if (mysqli_num_rows($sql) > 0)
+ return $row['id'];
+ else
+ return null;
+
+ // number
+ } elseif ($spr['tip'] == 7) {
+
+ $sql1 = sisplet_query("SELECT text FROM srv_data_text".$this->db_table." WHERE spr_id='$spr_id' AND usr_id='".$this->getUserId()."'");
+ $row1 = mysqli_fetch_array($sql1);
+
+ $num = (int)$row1['text'];
+ $sql2 = sisplet_query("SELECT * FROM srv_loop_data WHERE if_id='$if_id' AND id <= '$loop_id'");
+ if (mysqli_num_rows($sql2) >= $num || (mysqli_num_rows($sql2) >= $max && $max>0))
+ return null;
+
+ $sql = sisplet_query("SELECT * FROM srv_loop_data WHERE if_id='$if_id' AND id > '$loop_id'");
+ $row = mysqli_fetch_array($sql);
+
+ if (mysqli_num_rows($sql) > 0)
+ return $row['id'];
+ else
+ return null;
+
+ }
+ }
+
+ /**
+ * @desc V podanem stringu poisce spremenljivke in jih spajpa z vrednostmi
+ */
+ function dataPiping ($text) {
+
+ Common::getInstance()->Init($this->anketa['id']);
+ return Common::getInstance()->dataPiping($text, $this->usr_id, $this->loop_id);
+ }
+
+
+ function outputUser()
+ {
+ $sqlGrupeString = "SELECT id FROM srv_grupa WHERE ank_id='".$this->anketa['id']."' ORDER BY vrstni_red";
+ $sqlGrupe = sisplet_query($sqlGrupeString);
+
+ // filtriramo spremenljivke glede na profil - SAMO CE NE PRIHAJAMO IZ MAILA!
+ $tmp_svp_pv = array();
+ if($this->usr_type == null){
+ SurveyVariablesProfiles :: Init($this->anketa['id'], $this->resp_id, true, false);
+
+ $dvp = SurveyUserSetting :: getInstance()->getSettings('default_variable_profile');
+ $_currentVariableProfile = SurveyVariablesProfiles :: checkDefaultProfile($dvp);
+
+ $tmp_svp_pv = SurveyVariablesProfiles :: getProfileVariables($_currentVariableProfile);
+
+ foreach ( $tmp_svp_pv as $vid => $variable) {
+ $tmp_svp_pv[$vid] = substr($vid, 0, strpos($vid, '_'));
+ }
+ }
+
+ while ( $rowGrupe = mysqli_fetch_assoc( $sqlGrupe ) )
+ { // sprehodmo se skozi grupe ankete
+
+ $this->grupa = $rowGrupe['id'];
+
+ // Pogledamo prvo spremenljivko v grupi ce je v loopu
+ $sql = sisplet_query("SELECT * FROM srv_spremenljivka WHERE gru_id='".$this->grupa."' AND visible='1' ORDER BY vrstni_red ASC");
+ $row = mysqli_fetch_array($sql);
+
+ // ce je ima loop za parenta
+ $if_id = $this->find_parent_loop($row['id']);
+ if ($if_id > 0){
+ $sql1 = sisplet_query("SELECT * FROM srv_loop WHERE if_id = '$if_id'");
+ $row1 = mysqli_fetch_array($sql1);
+ $this->loop_id = $this->findNextLoopId($row1['if_id']);
+
+ $if = Cache::srv_if($if_id);
+ $loop_title = $if['label'];
+
+ // gremo cez vse spremenljivke v trenutnem loopu
+ while($this->loop_id != null){
+
+ // Izrisemo naslov loopa
+ $this->rtf->add_text($this->rtf->color(9).$this->rtf->bold(1).$this->enkaEncode($this->dataPiping($loop_title)).$this->rtf->bold(0).$this->rtf->color(0));
+ $this->rtf->new_line(1);
+
+ $sqlSpremenljivke = sisplet_query("SELECT * FROM srv_spremenljivka WHERE gru_id='".$this->grupa."' AND visible='1' ORDER BY vrstni_red ASC");
+ while ($rowSpremenljivke = mysqli_fetch_assoc($sqlSpremenljivke))
+ { // sprehodimo se skozi spremenljivke grupe
+ $spremenljivka = $rowSpremenljivke['id'];
+ if ( $this->checkSpremenljivka ($spremenljivka) /*|| $this->showIf == 1*/ )
+ { // lahko izrišemo spremenljivke
+
+ //nastavimo velikost pisave
+ $this->rtf->MyRTF .= $this->rtf->_font_size($this->font * 2);
+
+ // Ce imamo kombinirano tabelo pogledamo ce prikazujemo katero od podtabel
+ if($rowSpremenljivke['tip'] == 24){
+
+ $subGrids = array();
+ $showGridMultiple = false;
+
+ // Loop po podskupinah gridov
+ $sqlSubGrid = sisplet_query("SELECT m.spr_id, s.tip, s.enota FROM srv_grid_multiple m, srv_spremenljivka s WHERE m.parent='".$spremenljivka."' AND m.spr_id=s.id");
+ while($rowSubGrid = mysqli_fetch_array($sqlSubGrid)){
+ if(in_array($rowSubGrid['spr_id'],$tmp_svp_pv) || count($tmp_svp_pv) == 0){
+ $showGridMultiple = true;
+ break;
+ }
+ }
+ }
+ // ce je nastavljen profil s filtriranimi spremenljivkami
+ if(in_array($spremenljivka,$tmp_svp_pv) || count($tmp_svp_pv) == 0 || ($rowSpremenljivke['tip'] == 24 && $showGridMultiple)){
+
+ //kratek izpis rezultatov spremenljivke - samo pri radio, checkbox, multiradio, multicheckbox, besedilo
+ if( $this->type == 0 && $this->getUserId() && ($rowSpremenljivke['tip'] < 4 || $rowSpremenljivke['tip'] == 6 || $rowSpremenljivke['tip'] == 16 /*|| $rowSpremenljivke['tip'] == 21*/) ){
+ if($rowSpremenljivke['tip'] > 3 )
+ $this->outputVprasanje($rowSpremenljivke);
+
+ $this->outputSpremenljivkeValues($rowSpremenljivke);
+ }
+ elseif($this->type == 2 && $rowSpremenljivke['tip'] != 24){
+ $this->outputSpremenljivkeValues($rowSpremenljivke);
+ }
+ else{
+ $this->outputVprasanje($rowSpremenljivke);
+ $this->outputSpremenljivke($rowSpremenljivke);
+ }
+
+ // dodamo presledek (prazno vrstico)
+ $this->rtf->new_line(1);
+ }
+ }
+ }
+
+ $this->loop_id = $this->findNextLoopId();
+ }
+ }
+ // Navadne spremenljivke ki niso v loopu
+ else{
+ $sqlSpremenljivke = sisplet_query("SELECT * FROM srv_spremenljivka WHERE gru_id='".$this->grupa."' AND visible='1' ORDER BY vrstni_red ASC");
+ while ($rowSpremenljivke = mysqli_fetch_assoc($sqlSpremenljivke))
+ { // sprehodimo se skozi spremenljivke grupe
+ $spremenljivka = $rowSpremenljivke['id'];
+ if ( $this->checkSpremenljivka ($spremenljivka) /*|| $this->showIf == 1*/ )
+ { // lahko izrišemo spremenljivke
+
+ //nastavimo velikost pisave
+ $this->rtf->MyRTF .= $this->rtf->_font_size($this->font * 2);
+
+ // Ce imamo kombinirano tabelo pogledamo ce prikazujemo katero od podtabel
+ if($rowSpremenljivke['tip'] == 24){
+
+ $subGrids = array();
+ $showGridMultiple = false;
+
+ // Loop po podskupinah gridov
+ $sqlSubGrid = sisplet_query("SELECT m.spr_id, s.tip, s.enota FROM srv_grid_multiple m, srv_spremenljivka s WHERE m.parent='".$spremenljivka."' AND m.spr_id=s.id");
+ while($rowSubGrid = mysqli_fetch_array($sqlSubGrid)){
+ if(in_array($rowSubGrid['spr_id'],$tmp_svp_pv) || count($tmp_svp_pv) == 0){
+ $showGridMultiple = true;
+ break;
+ }
+ }
+ }
+ // ce je nastavljen profil s filtriranimi spremenljivkami
+ if(in_array($spremenljivka,$tmp_svp_pv) || count($tmp_svp_pv) == 0 || ($rowSpremenljivke['tip'] == 24 && $showGridMultiple)){
+
+ //kratek izpis rezultatov spremenljivke - samo pri radio, checkbox, multiradio, multicheckbox, besedilo
+ if( $this->type == 0 && $this->getUserId() && ($rowSpremenljivke['tip'] < 4 || $rowSpremenljivke['tip'] == 6 || $rowSpremenljivke['tip'] == 16 /*|| $rowSpremenljivke['tip'] == 21*/) ){
+ if($rowSpremenljivke['tip'] > 3 )
+ $this->outputVprasanje($rowSpremenljivke);
+
+ $this->outputSpremenljivkeValues($rowSpremenljivke);
+ }
+ elseif($this->type == 2 && $rowSpremenljivke['tip'] != 24){
+ $this->outputSpremenljivkeValues($rowSpremenljivke);
+ }
+ else{
+ $this->outputVprasanje($rowSpremenljivke);
+ $this->outputSpremenljivke($rowSpremenljivke);
+ }
+
+ // dodamo presledek (prazno vrstico)
+ $this->rtf->new_line(1);
+ }
+ }
+ }
+ }
+ }
+
+ if($this->pageBreak == 0){
+ $this->rtf->TextCell('', array('width' => 9500, 'height' => 0,
+ 'align' => 'center', 'valign' => 'middle' , 'border' => 'top',
+ 'colorF' => "0", 'colorB' => "0" ) );
+ $this->rtf->new_line(1);
+ }
+ }
+
+}
+
+
+?>
diff --git a/admin/exportclases/class.tcpdf.php b/admin/exportclases/class.tcpdf.php
new file mode 100644
index 0000000..3276560
--- /dev/null
+++ b/admin/exportclases/class.tcpdf.php
@@ -0,0 +1,13321 @@
+<?php
+//============================================================+
+// File name : tcpdf.php
+// Begin : 2002-08-03
+// Last Update : 2009-03-28
+// Author : Nicola Asuni - info@tecnick.com - http://www.tcpdf.org
+// Version : 4.5.035
+// License : GNU LGPL (http://www.gnu.org/copyleft/lesser.html)
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2009 Nicola Asuni - Tecnick.com S.r.l.
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Lesser General Public License as published by
+// the Free Software Foundation, either version 2.1 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+//
+// See LICENSE.TXT file for more information.
+// ----------------------------------------------------------------------------
+//
+// Description : This is a PHP class for generating PDF documents without
+// requiring external extensions.
+//
+// NOTE:
+// This class was originally derived in 2002 from the Public
+// Domain FPDF class by Olivier Plathey (http://www.fpdf.org),
+// but now is almost entirely rewritten.
+//
+// Main features:
+// * no external libraries are required for the basic functions;
+// * supports all ISO page formats;
+// * supports UTF-8 Unicode and Right-To-Left languages;
+// * supports document encryption;
+// * includes methods to publish some XHTML code;
+// * includes graphic (geometric) and transformation methods;
+// * includes bookmarks;
+// * includes Javascript and forms support;
+// * includes a method to print various barcode formats;
+// * supports TrueTypeUnicode, TrueType, Type1 and CID-0 fonts;
+// * supports custom page formats, margins and units of measure;
+// * includes methods for page header and footer management;
+// * supports automatic page break;
+// * supports automatic page numbering and page groups;
+// * supports automatic line break and text justification;
+// * supports JPEG and PNG images whitout GD library and all images supported by GD: GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM;
+// * supports stroke and clipping mode for text;
+// * supports clipping masks;
+// * supports Grayscale, RGB, CMYK, Spot colors and transparency;
+// * supports links and annotations;
+// * supports page compression (requires zlib extension);
+// * supports PDF user's rights.
+//
+// -----------------------------------------------------------
+// THANKS TO:
+//
+// Olivier Plathey (http://www.fpdf.org) for original FPDF.
+// Efthimios Mavrogeorgiadis (emavro@yahoo.com) for suggestions on RTL language support.
+// Klemen Vodopivec (http://www.fpdf.de/downloads/addons/37/) for Encryption algorithm.
+// Warren Sherliker (wsherliker@gmail.com) for better image handling.
+// dullus for text Justification.
+// Bob Vincent (pillarsdotnet@users.sourceforge.net) for <li> value attribute.
+// Patrick Benny for text stretch suggestion on Cell().
+// Johannes Güntert for JavaScript support.
+// Denis Van Nuffelen for Dynamic Form.
+// Jacek Czekaj for multibyte justification
+// Anthony Ferrara for the reintroduction of legacy image methods.
+// Sourceforge user 1707880 (hucste) for line-trough mode.
+// Larry Stanbery for page groups.
+// Martin Hall-May for transparency.
+// Aaron C. Spike for Polycurve method.
+// Mohamad Ali Golkar, Saleh AlMatrafe, Charles Abbott for Arabic and Persian support.
+// Moritz Wagner and Andreas Wurmser for graphic functions.
+// Andrew Whitehead for core fonts support.
+// Esteban Joël Marín for OpenType font conversion.
+// Teus Hagen for several suggestions and fixes.
+// Yukihiro Nakadaira for CID-0 CJK fonts fixes.
+// Kosmas Papachristos for some CSS improvements.
+// Marcel Partap for some fixes.
+// Won Kyu Park for several suggestions, fixes and patches.
+// Anyone that has reported a bug or sent a suggestion.
+//============================================================+
+
+/**
+ * This is a PHP class for generating PDF documents without requiring external extensions.<br>
+ * TCPDF project (http://www.tcpdf.org) was originally derived in 2002 from the Public Domain FPDF class by Olivier Plathey (http://www.fpdf.org), but now is almost entirely rewritten.<br>
+ * <h3>TCPDF main features are:</h3>
+ * <ul>
+ * <li>no external libraries are required for the basic functions;</li>
+ * <li>supports all ISO page formats;</li>
+ * <li>supports UTF-8 Unicode and Right-To-Left languages;</li>
+ * <li>supports document encryption;</li>
+ * <li>includes methods to publish some XHTML code;</li>
+ * <li>includes graphic (geometric) and transformation methods;</li>
+ * <li>includes bookmarks;</li>
+ * <li>includes Javascript and forms support;</li>
+ * <li>includes a method to print various barcode formats;</li>
+ * <li>supports TrueTypeUnicode, TrueType, Type1 and CID-0 fonts;</li>
+ * <li>supports custom page formats, margins and units of measure;</li>
+ * <li>includes methods for page header and footer management;</li>
+ * <li>supports automatic page break;</li>
+ * <li>supports automatic page numbering and page groups;</li>
+ * <li>supports automatic line break and text justification;
+ * <li>supports JPEG and PNG images whitout GD library and all images supported by GD: GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM;</li>
+ * <li>supports stroke and clipping mode for text;</li>
+ * <li>supports clipping masks;</li>
+ * <li>supports Grayscale, RGB and CMYK colors and transparency;</li>
+ * <li>supports links and annotations;</li>
+ * <li>supports page compression (requires zlib extension);</li>
+ * <li>supports PDF user's rights.</li>
+ * </ul>
+ * Tools to encode your unicode fonts are on fonts/utils directory.</p>
+ * @package com.tecnick.tcpdf
+ * @abstract Class for generating PDF files on-the-fly without requiring external extensions.
+ * @author Nicola Asuni
+ * @copyright 2002-2009 Nicola Asuni - Tecnick.com S.r.l (www.tecnick.com) Via Della Pace, 11 - 09044 - Quartucciu (CA) - ITALY - www.tecnick.com - info@tecnick.com
+ * @link http://www.tcpdf.org
+ * @license http://www.gnu.org/copyleft/lesser.html LGPL
+ * @version 4.5.035
+ */
+
+/**
+ * main configuration file
+ */
+require_once(dirname(__FILE__).'/config/tcpdf_config.php');
+
+// includes some support files
+
+/**
+ * unicode data
+ */
+require_once(dirname(__FILE__).'/unicode_data.php');
+
+/**
+ * html colors table
+ */
+require_once(dirname(__FILE__).'/htmlcolors.php');
+
+if (!class_exists('TCPDF', false)) {
+ /**
+ * define default PDF document producer
+ */
+ define('PDF_PRODUCER', 'TCPDF 4.5.035 (http://www.tcpdf.org)');
+
+ /**
+ * This is a PHP class for generating PDF documents without requiring external extensions.<br>
+ * TCPDF project (http://www.tcpdf.org) has been originally derived in 2002 from the Public Domain FPDF class by Olivier Plathey (http://www.fpdf.org), but now is almost entirely rewritten.<br>
+ * @name TCPDF
+ * @package com.tecnick.tcpdf
+ * @version 4.5.035
+ * @author Nicola Asuni - info@tecnick.com
+ * @link http://www.tcpdf.org
+ * @license http://www.gnu.org/copyleft/lesser.html LGPL
+ */
+ class TCPDF {
+
+ // protected or Protected properties
+
+ /**
+ * @var current page number
+ * @access protected
+ */
+ protected $page;
+
+ /**
+ * @var current object number
+ * @access protected
+ */
+ protected $n;
+
+ /**
+ * @var array of object offsets
+ * @access protected
+ */
+ protected $offsets;
+
+ /**
+ * @var buffer holding in-memory PDF
+ * @access protected
+ */
+ protected $buffer;
+
+ /**
+ * @var array containing pages
+ * @access protected
+ */
+ protected $pages = array();
+
+ /**
+ * @var current document state
+ * @access protected
+ */
+ protected $state;
+
+ /**
+ * @var compression flag
+ * @access protected
+ */
+ protected $compress;
+
+ /**
+ * @var current page orientation (P = Portrait, L = Landscape)
+ * @access protected
+ */
+ protected $CurOrientation;
+
+ /**
+ * @var array that stores page dimensions and graphic status.<ul><li>$this->pagedim[$this->page]['w'] => page_width_in_points</li><li>$this->pagedim[$this->page]['h'] => height in points</li><li>$this->pagedim[$this->page]['wk'] => page_width_in_points</li><li>$this->pagedim[$this->page]['hk'] => height</li><li>$this->pagedim[$this->page]['tm'] => top_margin</li><li>$this->pagedim[$this->page]['bm'] => bottom_margin</li><li>$this->pagedim[$this->page]['lm'] => left_margin</li><li>$this->pagedim[$this->page]['rm'] => right_margin</li><li>$this->pagedim[$this->page]['pb'] => auto_page_break</li><li>$this->pagedim[$this->page]['or'] => page_orientation</li><li>$this->pagedim[$this->page]['olm'] => original_left_margin</li><li>$this->pagedim[$this->page]['orm'] => original_right_margin</li></ul>
+ * @access protected
+ */
+ protected $pagedim = array();
+
+ /**
+ * @var scale factor (number of points in user unit)
+ * @access protected
+ */
+ protected $k;
+
+ /**
+ * @var width of page format in points
+ * @access protected
+ */
+ protected $fwPt;
+
+ /**
+ * @var height of page format in points
+ * @access protected
+ */
+ protected $fhPt;
+
+ /**
+ * @var current width of page in points
+ * @access protected
+ */
+ protected $wPt;
+
+ /**
+ * @var current height of page in points
+ * @access protected
+ */
+ protected $hPt;
+
+ /**
+ * @var current width of page in user unit
+ * @access protected
+ */
+ protected $w;
+
+ /**
+ * @var current height of page in user unit
+ * @access protected
+ */
+ protected $h;
+
+ /**
+ * @var left margin
+ * @access protected
+ */
+ protected $lMargin;
+
+ /**
+ * @var top margin
+ * @access protected
+ */
+ protected $tMargin;
+
+ /**
+ * @var right margin
+ * @access protected
+ */
+ protected $rMargin;
+
+ /**
+ * @var page break margin
+ * @access protected
+ */
+ protected $bMargin;
+
+ /**
+ * @var cell internal padding
+ * @access protected
+ */
+ //protected
+ public $cMargin;
+
+ /**
+ * @var cell internal padding (previous value)
+ * @access protected
+ */
+ protected $oldcMargin;
+
+ /**
+ * @var current horizontal position in user unit for cell positioning
+ * @access protected
+ */
+ protected $x;
+
+ /**
+ * @var current vertical position in user unit for cell positioning
+ * @access protected
+ */
+ protected $y;
+
+ /**
+ * @var height of last cell printed
+ * @access protected
+ */
+ protected $lasth;
+
+ /**
+ * @var line width in user unit
+ * @access protected
+ */
+ protected $LineWidth;
+
+ /**
+ * @var array of standard font names
+ * @access protected
+ */
+ protected $CoreFonts;
+
+ /**
+ * @var array of used fonts
+ * @access protected
+ */
+ protected $fonts = array();
+
+ /**
+ * @var array of font files
+ * @access protected
+ */
+ protected $FontFiles = array();
+
+ /**
+ * @var array of encoding differences
+ * @access protected
+ */
+ protected $diffs = array();
+
+ /**
+ * @var array of used images
+ * @access protected
+ */
+ protected $images = array();
+
+ /**
+ * @var array of Annotations in pages
+ * @access protected
+ */
+ protected $PageAnnots = array();
+
+ /**
+ * @var array of internal links
+ * @access protected
+ */
+ protected $links = array();
+
+ /**
+ * @var current font family
+ * @access protected
+ */
+ protected $FontFamily;
+
+ /**
+ * @var current font style
+ * @access protected
+ */
+ protected $FontStyle;
+
+ /**
+ * @var current font ascent (distance between font top and baseline)
+ * @access protected
+ * @since 2.8.000 (2007-03-29)
+ */
+ protected $FontAscent;
+
+ /**
+ * @var current font descent (distance between font bottom and baseline)
+ * @access protected
+ * @since 2.8.000 (2007-03-29)
+ */
+ protected $FontDescent;
+
+ /**
+ * @var underlining flag
+ * @access protected
+ */
+ protected $underline;
+
+ /**
+ * @var current font info
+ * @access protected
+ */
+ protected $CurrentFont;
+
+ /**
+ * @var current font size in points
+ * @access protected
+ */
+ protected $FontSizePt;
+
+ /**
+ * @var current font size in user unit
+ * @access protected
+ */
+ protected $FontSize;
+
+ /**
+ * @var commands for drawing color
+ * @access protected
+ */
+ protected $DrawColor;
+
+ /**
+ * @var commands for filling color
+ * @access protected
+ */
+ protected $FillColor;
+
+ /**
+ * @var commands for text color
+ * @access protected
+ */
+ protected $TextColor;
+
+ /**
+ * @var indicates whether fill and text colors are different
+ * @access protected
+ */
+ protected $ColorFlag;
+
+ /**
+ * @var automatic page breaking
+ * @access protected
+ */
+ protected $AutoPageBreak;
+
+ /**
+ * @var threshold used to trigger page breaks
+ * @access protected
+ */
+ protected $PageBreakTrigger;
+
+ /**
+ * @var flag set when processing footer
+ * @access protected
+ */
+ protected $InFooter = false;
+
+ /**
+ * @var zoom display mode
+ * @access protected
+ */
+ protected $ZoomMode;
+
+ /**
+ * @var layout display mode
+ * @access protected
+ */
+ protected $LayoutMode;
+
+ /**
+ * @var title
+ * @access protected
+ */
+ protected $title;
+
+ /**
+ * @var subject
+ * @access protected
+ */
+ protected $subject;
+
+ /**
+ * @var author
+ * @access protected
+ */
+ protected $author;
+
+ /**
+ * @var keywords
+ * @access protected
+ */
+ protected $keywords;
+
+ /**
+ * @var creator
+ * @access protected
+ */
+ protected $creator;
+
+ /**
+ * @var alias for total number of pages
+ * @access protected
+ */
+ protected $AliasNbPages = '{nb}';
+
+ /**
+ * @var alias for page number
+ * @access protected
+ */
+ protected $AliasNumPage = '{pnb}';
+
+ /**
+ * @var right-bottom corner X coordinate of inserted image
+ * @since 2002-07-31
+ * @author Nicola Asuni
+ * @access protected
+ */
+ protected $img_rb_x;
+
+ /**
+ * @var right-bottom corner Y coordinate of inserted image
+ * @since 2002-07-31
+ * @author Nicola Asuni
+ * @access protected
+ */
+ protected $img_rb_y;
+
+ /**
+ * @var image scale factor
+ * @since 2004-06-14
+ * @author Nicola Asuni
+ * @access protected
+ */
+ protected $imgscale = 1;
+
+ /**
+ * @var boolean set to true when the input text is unicode (require unicode fonts)
+ * @since 2005-01-02
+ * @author Nicola Asuni
+ * @access protected
+ */
+ protected $isunicode = false;
+
+ /**
+ * @var PDF version
+ * @since 1.5.3
+ * @access protected
+ */
+ protected $PDFVersion = '1.7';
+
+
+ // ----------------------
+
+ /**
+ * @var Minimum distance between header and top page margin.
+ * @access protected
+ */
+ protected $header_margin;
+
+ /**
+ * @var Minimum distance between footer and bottom page margin.
+ * @access protected
+ */
+ protected $footer_margin;
+
+ /**
+ * @var original left margin value
+ * @access protected
+ * @since 1.53.0.TC013
+ */
+ protected $original_lMargin;
+
+ /**
+ * @var original right margin value
+ * @access protected
+ * @since 1.53.0.TC013
+ */
+ protected $original_rMargin;
+
+ /**
+ * @var Header font.
+ * @access protected
+ */
+ protected $header_font;
+
+ /**
+ * @var Footer font.
+ * @access protected
+ */
+ protected $footer_font;
+
+ /**
+ * @var Language templates.
+ * @access protected
+ */
+ protected $l;
+
+ /**
+ * @var Barcode to print on page footer (only if set).
+ * @access protected
+ */
+ protected $barcode = false;
+
+ /**
+ * @var If true prints header
+ * @access protected
+ */
+ protected $print_header = true;
+
+ /**
+ * @var If true prints footer.
+ * @access protected
+ */
+ protected $print_footer = true;
+
+ /**
+ * @var Header image logo.
+ * @access protected
+ */
+ protected $header_logo = '';
+
+ /**
+ * @var Header image logo width in mm.
+ * @access protected
+ */
+ protected $header_logo_width = 30;
+
+ /**
+ * @var String to print as title on document header.
+ * @access protected
+ */
+ protected $header_title = '';
+
+ /**
+ * @var String to print on document header.
+ * @access protected
+ */
+ protected $header_string = '';
+
+ /**
+ * @var Default number of columns for html table.
+ * @access protected
+ */
+ protected $default_table_columns = 4;
+
+
+ // variables for html parser
+
+ /**
+ * @var HTML PARSER: array to store current link and rendering styles.
+ * @access protected
+ */
+ protected $HREF = array();
+
+ /**
+ * @var store a list of available fonts on filesystem.
+ * @access protected
+ */
+ protected $fontlist = array();
+
+ /**
+ * @var current foreground color
+ * @access protected
+ */
+ protected $fgcolor;
+
+ /**
+ * @var HTML PARSER: array of boolean values, true in case of ordered list (OL), false otherwise.
+ * @access protected
+ */
+ protected $listordered = array();
+
+ /**
+ * @var HTML PARSER: array count list items on nested lists.
+ * @access protected
+ */
+ protected $listcount = array();
+
+ /**
+ * @var HTML PARSER: current list nesting level.
+ * @access protected
+ */
+ protected $listnum = 0;
+
+ /**
+ * @var HTML PARSER: indent amount for lists.
+ * @access protected
+ */
+ protected $listindent;
+
+ /**
+ * @var current background color
+ * @access protected
+ */
+ protected $bgcolor;
+
+ /**
+ * @var Store temporary font size in points.
+ * @access protected
+ */
+ protected $tempfontsize = 10;
+
+ /**
+ * @var spacer for LI tags.
+ * @access protected
+ */
+ protected $lispacer = '';
+
+ /**
+ * @var default encoding
+ * @access protected
+ * @since 1.53.0.TC010
+ */
+ protected $encoding = 'UTF-8';
+
+ /**
+ * @var PHP internal encoding
+ * @access protected
+ * @since 1.53.0.TC016
+ */
+ protected $internal_encoding;
+
+ /**
+ * @var indicates if the document language is Right-To-Left
+ * @access protected
+ * @since 2.0.000
+ */
+ protected $rtl = false;
+
+ /**
+ * @var used to force RTL or LTR string inversion
+ * @access protected
+ * @since 2.0.000
+ */
+ protected $tmprtl = false;
+
+ // --- Variables used for document encryption:
+
+ /**
+ * Indicates whether document is protected
+ * @access protected
+ * @since 2.0.000 (2008-01-02)
+ */
+ protected $encrypted;
+
+ /**
+ * U entry in pdf document
+ * @access protected
+ * @since 2.0.000 (2008-01-02)
+ */
+ protected $Uvalue;
+
+ /**
+ * O entry in pdf document
+ * @access protected
+ * @since 2.0.000 (2008-01-02)
+ */
+ protected $Ovalue;
+
+ /**
+ * P entry in pdf document
+ * @access protected
+ * @since 2.0.000 (2008-01-02)
+ */
+ protected $Pvalue;
+
+ /**
+ * encryption object id
+ * @access protected
+ * @since 2.0.000 (2008-01-02)
+ */
+ protected $enc_obj_id;
+
+ /**
+ * last RC4 key encrypted (cached for optimisation)
+ * @access protected
+ * @since 2.0.000 (2008-01-02)
+ */
+ protected $last_rc4_key;
+
+ /**
+ * last RC4 computed key
+ * @access protected
+ * @since 2.0.000 (2008-01-02)
+ */
+ protected $last_rc4_key_c;
+
+ /**
+ * RC4 padding
+ * @access protected
+ */
+ protected $padding = "\x28\xBF\x4E\x5E\x4E\x75\x8A\x41\x64\x00\x4E\x56\xFF\xFA\x01\x08\x2E\x2E\x00\xB6\xD0\x68\x3E\x80\x2F\x0C\xA9\xFE\x64\x53\x69\x7A";
+
+ /**
+ * RC4 encryption key
+ * @access protected
+ */
+ protected $encryption_key;
+
+ // --- bookmark ---
+
+ /**
+ * Outlines for bookmark
+ * @access protected
+ * @since 2.1.002 (2008-02-12)
+ */
+ protected $outlines = array();
+
+ /**
+ * Outline root for bookmark
+ * @access protected
+ * @since 2.1.002 (2008-02-12)
+ */
+ protected $OutlineRoot;
+
+
+ // --- javascript and form ---
+
+ /**
+ * javascript code
+ * @access protected
+ * @since 2.1.002 (2008-02-12)
+ */
+ protected $javascript = '';
+
+ /**
+ * javascript counter
+ * @access protected
+ * @since 2.1.002 (2008-02-12)
+ */
+ protected $n_js;
+
+ /**
+ * line trough state
+ * @access protected
+ * @since 2.8.000 (2008-03-19)
+ */
+ protected $linethrough;
+
+ // --- Variables used for User's Rights ---
+ // See PDF reference chapter 8.7 Digital Signatures
+
+ /**
+ * If true enables user's rights on PDF reader
+ * @access protected
+ * @since 2.9.000 (2008-03-26)
+ */
+ protected $ur;
+
+ /**
+ * Names specifying additional document-wide usage rights for the document.
+ * @access protected
+ * @since 2.9.000 (2008-03-26)
+ */
+ protected $ur_document;
+
+ /**
+ * Names specifying additional annotation-related usage rights for the document.
+ * @access protected
+ * @since 2.9.000 (2008-03-26)
+ */
+ protected $ur_annots;
+
+ /**
+ * Names specifying additional form-field-related usage rights for the document.
+ * @access protected
+ * @since 2.9.000 (2008-03-26)
+ */
+ protected $ur_form;
+
+ /**
+ * Names specifying additional signature-related usage rights for the document.
+ * @access protected
+ * @since 2.9.000 (2008-03-26)
+ */
+ protected $ur_signature;
+
+ /**
+ * Dot Per Inch Document Resolution (do not change)
+ * @access protected
+ * @since 3.0.000 (2008-03-27)
+ */
+ protected $dpi = 72;
+
+ /**
+ * Array of page numbers were a new page group was started
+ * @access protected
+ * @since 3.0.000 (2008-03-27)
+ */
+ protected $newpagegroup = array();
+
+ /**
+ * Contains the number of pages of the groups
+ * @access protected
+ * @since 3.0.000 (2008-03-27)
+ */
+ protected $pagegroups;
+
+ /**
+ * Contains the alias of the current page group
+ * @access protected
+ * @since 3.0.000 (2008-03-27)
+ */
+ protected $currpagegroup;
+
+ /**
+ * Restrict the rendering of some elements to screen or printout.
+ * @access protected
+ * @since 3.0.000 (2008-03-27)
+ */
+ protected $visibility = 'all';
+
+ /**
+ * Print visibility.
+ * @access protected
+ * @since 3.0.000 (2008-03-27)
+ */
+ protected $n_ocg_print;
+
+ /**
+ * View visibility.
+ * @access protected
+ * @since 3.0.000 (2008-03-27)
+ */
+ protected $n_ocg_view;
+
+ /**
+ * Array of transparency objects and parameters.
+ * @access protected
+ * @since 3.0.000 (2008-03-27)
+ */
+ protected $extgstates;
+
+ /**
+ * Set the default JPEG compression quality (1-100)
+ * @access protected
+ * @since 3.0.000 (2008-03-27)
+ */
+ protected $jpeg_quality;
+
+ /**
+ * Default cell height ratio.
+ * @access protected
+ * @since 3.0.014 (2008-05-23)
+ */
+ protected $cell_height_ratio = K_CELL_HEIGHT_RATIO;
+
+ /**
+ * PDF viewer preferences.
+ * @access protected
+ * @since 3.1.000 (2008-06-09)
+ */
+ protected $viewer_preferences;
+
+ /**
+ * A name object specifying how the document should be displayed when opened.
+ * @access protected
+ * @since 3.1.000 (2008-06-09)
+ */
+ protected $PageMode;
+
+ /**
+ * Array for storing gradient information.
+ * @access protected
+ * @since 3.1.000 (2008-06-09)
+ */
+ protected $gradients = array();
+
+ /**
+ * Array used to store positions inside the pages buffer.
+ * keys are the page numbers
+ * @access protected
+ * @since 3.2.000 (2008-06-26)
+ */
+ protected $intmrk = array();
+
+ /**
+ * Array used to store footer positions of each page.
+ * @access protected
+ * @since 3.2.000 (2008-07-01)
+ */
+ protected $footerpos = array();
+
+
+ /**
+ * Array used to store footer lenght of each page.
+ * @access protected
+ * @since 4.0.014 (2008-07-29)
+ */
+ protected $footerlen = array();
+
+ /**
+ * True if a newline is created.
+ * @access protected
+ * @since 3.2.000 (2008-07-01)
+ */
+ protected $newline = true;
+
+ /**
+ * End position of the latest inserted line
+ * @access protected
+ * @since 3.2.000 (2008-07-01)
+ */
+ protected $endlinex = 0;
+
+ /**
+ * PDF string for last line width
+ * @access protected
+ * @since 4.0.006 (2008-07-16)
+ */
+ protected $linestyleWidth = '';
+
+ /**
+ * PDF string for last line width
+ * @access protected
+ * @since 4.0.006 (2008-07-16)
+ */
+ protected $linestyleCap = '0 J';
+
+ /**
+ * PDF string for last line width
+ * @access protected
+ * @since 4.0.006 (2008-07-16)
+ */
+ protected $linestyleJoin = '0 j';
+
+ /**
+ * PDF string for last line width
+ * @access protected
+ * @since 4.0.006 (2008-07-16)
+ */
+ protected $linestyleDash = '[] 0 d';
+
+ /**
+ * True if marked-content sequence is open
+ * @access protected
+ * @since 4.0.013 (2008-07-28)
+ */
+ protected $openMarkedContent = false;
+
+ /**
+ * Count the latest inserted vertical spaces on HTML
+ * @access protected
+ * @since 4.0.021 (2008-08-24)
+ */
+ protected $htmlvspace = 0;
+
+ /**
+ * Array of Spot colors
+ * @access protected
+ * @since 4.0.024 (2008-09-12)
+ */
+ protected $spot_colors = array();
+
+ /**
+ * Symbol used for HTML unordered list items
+ * @access protected
+ * @since 4.0.028 (2008-09-26)
+ */
+ protected $lisymbol = '';
+
+ /**
+ * String used to mark the beginning and end of EPS image blocks
+ * @access protected
+ * @since 4.1.000 (2008-10-18)
+ */
+ protected $epsmarker = 'x#!#EPS#!#x';
+
+ /**
+ * Array of transformation matrix
+ * @access protected
+ * @since 4.2.000 (2008-10-29)
+ */
+ protected $transfmatrix = array();
+
+ /**
+ * Booklet mode for double-sided pages
+ * @access protected
+ * @since 4.2.000 (2008-10-29)
+ */
+ protected $booklet = false;
+
+ /**
+ * Epsilon value used for float calculations
+ * @access protected
+ * @since 4.2.000 (2008-10-29)
+ */
+ protected $feps = 0.001;
+
+ /**
+ * Array used for custom vertical spaces for HTML tags
+ * @access protected
+ * @since 4.2.001 (2008-10-30)
+ */
+ protected $tagvspaces = array();
+
+ /**
+ * @var HTML PARSER: custom indent amount for lists.
+ * Negative value means disabled.
+ * @access protected
+ * @since 4.2.007 (2008-11-12)
+ */
+ protected $customlistindent = -1;
+
+ /**
+ * @var if true keeps the border open for the cell sides that cross the page.
+ * @access protected
+ * @since 4.2.010 (2008-11-14)
+ */
+ protected $opencell = true;
+
+ /**
+ * @var array of files to embedd
+ * @access protected
+ * @since 4.4.000 (2008-12-07)
+ */
+ protected $embeddedfiles = array();
+
+ /**
+ * @var boolean true when inside html pre tag
+ * @access protected
+ * @since 4.4.001 (2008-12-08)
+ */
+ protected $premode = false;
+
+ /**
+ * Array used to store positions of graphics transformation blocks inside the page buffer.
+ * keys are the page numbers
+ * @access protected
+ * @since 4.4.002 (2008-12-09)
+ */
+ protected $transfmrk = array();
+
+ /**
+ * Default color for html links
+ * @access protected
+ * @since 4.4.003 (2008-12-09)
+ */
+ protected $htmlLinkColorArray = array(0, 0, 255);
+
+ /**
+ * Default font style to add to html links
+ * @access protected
+ * @since 4.4.003 (2008-12-09)
+ */
+ protected $htmlLinkFontStyle = 'U';
+
+ /**
+ * Counts the number of pages.
+ * @access protected
+ * @since 4.5.000 (2008-12-31)
+ */
+ protected $numpages = 0;
+
+ /**
+ * Array containing page lenghts in bytes.
+ * @access protected
+ * @since 4.5.000 (2008-12-31)
+ */
+ protected $pagelen = array();
+
+ /**
+ * Counts the number of pages.
+ * @access protected
+ * @since 4.5.000 (2008-12-31)
+ */
+ protected $numimages = 0;
+
+ /**
+ * Store the image keys.
+ * @access protected
+ * @since 4.5.000 (2008-12-31)
+ */
+ protected $imagekeys = array();
+
+ /**
+ * Lenght of the buffer in bytes.
+ * @access protected
+ * @since 4.5.000 (2008-12-31)
+ */
+ protected $bufferlen = 0;
+
+ /**
+ * If true enables disk caching.
+ * @access protected
+ * @since 4.5.000 (2008-12-31)
+ */
+ protected $diskcache = false;
+
+ /**
+ * Counts the number of fonts.
+ * @access protected
+ * @since 4.5.000 (2009-01-02)
+ */
+ protected $numfonts = 0;
+
+ /**
+ * Store the font keys.
+ * @access protected
+ * @since 4.5.000 (2009-01-02)
+ */
+ protected $fontkeys = array();
+
+ /**
+ * Store the fage status (true when opened, false when closed).
+ * @access protected
+ * @since 4.5.000 (2009-01-02)
+ */
+ protected $pageopen = array();
+
+ /**
+ * Default monospaced font
+ * @access protected
+ * @since 4.5.025 (2009-03-10)
+ */
+ protected $default_monospaced_font = 'courier';
+
+ /**
+ * Used to store a cloned copy of the current class object
+ * @access protected
+ * @since 4.5.029 (2009-03-19)
+ */
+ protected $objcopy;
+
+ /**
+ * Array used to store the lenghts of cache files
+ * @access protected
+ * @since 4.5.029 (2009-03-19)
+ */
+ protected $cache_file_lenght = array();
+
+ /**
+ * Table header content to be repeated on each new page
+ * @access protected
+ * @since 4.5.030 (2009-03-20)
+ */
+ protected $thead = '';
+
+ /**
+ * Distance between the top of page and end of table headers on a new page.
+ * @access protected
+ * @since 4.5.030 (2009-03-20)
+ */
+ protected $theadMargin = '';
+ //------------------------------------------------------------
+ // METHODS
+ //------------------------------------------------------------
+
+ /**
+ * This is the class constructor.
+ * It allows to set up the page format, the orientation and
+ * the measure unit used in all the methods (except for the font sizes).
+ * @since 1.0
+ * @param string $orientation page orientation. Possible values are (case insensitive):<ul><li>P or Portrait (default)</li><li>L or Landscape</li></ul>
+ * @param string $unit User measure unit. Possible values are:<ul><li>pt: point</li><li>mm: millimeter (default)</li><li>cm: centimeter</li><li>in: inch</li></ul><br />A point equals 1/72 of inch, that is to say about 0.35 mm (an inch being 2.54 cm). This is a very common unit in typography; font sizes are expressed in that unit.
+ * @param mixed $format The format used for pages. It can be either one of the following values (case insensitive) or a custom format in the form of a two-element array containing the width and the height (expressed in the unit given by unit).<ul><li>4A0</li><li>2A0</li><li>A0</li><li>A1</li><li>A2</li><li>A3</li><li>A4 (default)</li><li>A5</li><li>A6</li><li>A7</li><li>A8</li><li>A9</li><li>A10</li><li>B0</li><li>B1</li><li>B2</li><li>B3</li><li>B4</li><li>B5</li><li>B6</li><li>B7</li><li>B8</li><li>B9</li><li>B10</li><li>C0</li><li>C1</li><li>C2</li><li>C3</li><li>C4</li><li>C5</li><li>C6</li><li>C7</li><li>C8</li><li>C9</li><li>C10</li><li>RA0</li><li>RA1</li><li>RA2</li><li>RA3</li><li>RA4</li><li>SRA0</li><li>SRA1</li><li>SRA2</li><li>SRA3</li><li>SRA4</li><li>LETTER</li><li>LEGAL</li><li>EXECUTIVE</li><li>FOLIO</li></ul>
+ * @param boolean $unicode TRUE means that the input text is unicode (default = true)
+ * @param boolean $diskcache if TRUE reduce the RAM memory usage by caching temporary data on filesystem (slower).
+ * @param String $encoding charset encoding; default is UTF-8
+ * @access public
+ */
+ public function __construct($orientation='P', $unit='mm', $format='A4', $unicode=true, $encoding='UTF-8', $diskcache=false) {
+ /* Set internal character encoding to ASCII */
+ if (function_exists('mb_internal_encoding') AND mb_internal_encoding()) {
+ $this->internal_encoding = mb_internal_encoding();
+ mb_internal_encoding('ASCII');
+ }
+ // set disk caching
+ $this->diskcache = $diskcache ? true : false;
+ // set language direction
+ $this->rtl = $this->l['a_meta_dir']=='rtl' ? true : false;
+ $this->tmprtl = false;
+ //Some checks
+ $this->_dochecks();
+ //Initialization of properties
+ $this->isunicode = $unicode;
+ $this->page = 0;
+ $this->transfmrk[0] = array();
+ $this->pagedim = array();
+ $this->n = 2;
+ $this->buffer = '';
+ $this->pages = array();
+ $this->state = 0;
+ $this->fonts = array();
+ $this->FontFiles = array();
+ $this->diffs = array();
+ $this->images = array();
+ $this->links = array();
+ $this->gradients = array();
+ $this->InFooter = false;
+ $this->lasth = 0;
+ $this->FontFamily = 'helvetica';
+ $this->FontStyle = '';
+ $this->FontSizePt = 12;
+ $this->underline = false;
+ $this->linethrough = false;
+ $this->DrawColor = '0 G';
+ $this->FillColor = '0 g';
+ $this->TextColor = '0 g';
+ $this->ColorFlag = false;
+ // encryption values
+ $this->encrypted = false;
+ $this->last_rc4_key = '';
+ $this->padding = "\x28\xBF\x4E\x5E\x4E\x75\x8A\x41\x64\x00\x4E\x56\xFF\xFA\x01\x08\x2E\x2E\x00\xB6\xD0\x68\x3E\x80\x2F\x0C\xA9\xFE\x64\x53\x69\x7A";
+ //Standard Unicode fonts
+ $this->CoreFonts = array(
+ 'courier'=>'Courier',
+ 'courierB'=>'Courier-Bold',
+ 'courierI'=>'Courier-Oblique',
+ 'courierBI'=>'Courier-BoldOblique',
+ 'helvetica'=>'Helvetica',
+ 'helveticaB'=>'Helvetica-Bold',
+ 'helveticaI'=>'Helvetica-Oblique',
+ 'helveticaBI'=>'Helvetica-BoldOblique',
+ 'times'=>'Times-Roman',
+ 'timesB'=>'Times-Bold',
+ 'timesI'=>'Times-Italic',
+ 'timesBI'=>'Times-BoldItalic',
+ 'symbol'=>'Symbol',
+ 'zapfdingbats'=>'ZapfDingbats'
+ );
+ //Set scale factor
+ $this->setPageUnit($unit);
+ // set page format and orientation
+ $this->setPageFormat($format, $orientation);
+ //Page margins (1 cm)
+ $margin = 28.35 / $this->k;
+ $this->SetMargins($margin, $margin);
+ //Interior cell margin
+ $this->cMargin = $margin / 10;
+ //Line width (0.2 mm)
+ $this->LineWidth = 0.57 / $this->k;
+ $this->linestyleWidth = sprintf('%.2F w', ($this->LineWidth * $this->k));
+ $this->linestyleCap = '0 J';
+ $this->linestyleJoin = '0 j';
+ $this->linestyleDash = '[] 0 d';
+ //Automatic page break
+ $this->SetAutoPageBreak(true, (2 * $margin));
+ //Full width display mode
+ $this->SetDisplayMode('fullwidth');
+ //Compression
+ $this->SetCompression(true);
+ //Set default PDF version number
+ $this->PDFVersion = '1.7';
+ $this->encoding = $encoding;
+ $this->HREF = array();
+ $this->getFontsList();
+ $this->fgcolor = array('R' => 0, 'G' => 0, 'B' => 0);
+ $this->bgcolor = array('R' => 255, 'G' => 255, 'B' => 255);
+ $this->extgstates = array();
+ // user's rights
+ $this->ur = false;
+ $this->ur_document = '/FullSave';
+ $this->ur_annots = '/Create/Delete/Modify/Copy/Import/Export';
+ $this->ur_form = '/Add/Delete/FillIn/Import/Export/SubmitStandalone/SpawnTemplate';
+ $this->ur_signature = '/Modify';
+ // set default JPEG quality
+ $this->jpeg_quality = 75;
+ // initialize some settings
+ $this->utf8Bidi(array(''));
+ // set default font
+ $this->SetFont($this->FontFamily, $this->FontStyle, $this->FontSizePt);
+ }
+
+ /**
+ * Default destructor.
+ * @access public
+ * @since 1.53.0.TC016
+ */
+ public function __destruct() {
+ // restore internal encoding
+ if (isset($this->internal_encoding) AND !empty($this->internal_encoding)) {
+ mb_internal_encoding($this->internal_encoding);
+ }
+ // unset all class variables
+ $this->_destroy(true);
+ }
+
+ /**
+ * Set the units of measure for the document.
+ * @param string $unit User measure unit. Possible values are:<ul><li>pt: point</li><li>mm: millimeter (default)</li><li>cm: centimeter</li><li>in: inch</li></ul><br />A point equals 1/72 of inch, that is to say about 0.35 mm (an inch being 2.54 cm). This is a very common unit in typography; font sizes are expressed in that unit.
+ * @access public
+ * @since 3.0.015 (2008-06-06)
+ */
+ public function setPageUnit($unit) {
+ //Set scale factor
+ switch (strtolower($unit)) {
+ // points
+ case 'px':
+ case 'pt': {
+ $this->k = 1;
+ break;
+ }
+ // millimeters
+ case 'mm': {
+ $this->k = $this->dpi / 25.4;
+ break;
+ }
+ // centimeters
+ case 'cm': {
+ $this->k = $this->dpi / 2.54;
+ break;
+ }
+ // inches
+ case 'in': {
+ $this->k = $this->dpi;
+ break;
+ }
+ // unsupported unit
+ default : {
+ $this->Error('Incorrect unit: '.$unit);
+ break;
+ }
+ }
+ if (isset($this->CurOrientation)) {
+ $this->setPageOrientation($this->CurOrientation);
+ }
+ }
+
+ /**
+ * Set the page format
+ * @param mixed $format The format used for pages. It can be either one of the following values (case insensitive) or a custom format in the form of a two-element array containing the width and the height (expressed in the unit given by unit).<ul><li>4A0</li><li>2A0</li><li>A0</li><li>A1</li><li>A2</li><li>A3</li><li>A4 (default)</li><li>A5</li><li>A6</li><li>A7</li><li>A8</li><li>A9</li><li>A10</li><li>B0</li><li>B1</li><li>B2</li><li>B3</li><li>B4</li><li>B5</li><li>B6</li><li>B7</li><li>B8</li><li>B9</li><li>B10</li><li>C0</li><li>C1</li><li>C2</li><li>C3</li><li>C4</li><li>C5</li><li>C6</li><li>C7</li><li>C8</li><li>C9</li><li>C10</li><li>RA0</li><li>RA1</li><li>RA2</li><li>RA3</li><li>RA4</li><li>SRA0</li><li>SRA1</li><li>SRA2</li><li>SRA3</li><li>SRA4</li><li>LETTER</li><li>LEGAL</li><li>EXECUTIVE</li><li>FOLIO</li></ul>
+ * @param string $orientation page orientation. Possible values are (case insensitive):<ul><li>P or PORTRAIT (default)</li><li>L or LANDSCAPE</li></ul>
+ * @access public
+ * @since 3.0.015 (2008-06-06)
+ */
+ public function setPageFormat($format, $orientation='P') {
+ //Page format
+ if (is_string($format)) {
+ // Page formats (45 standard ISO paper formats and 4 american common formats).
+ // Paper cordinates are calculated in this way: (inches * 72) where (1 inch = 2.54 cm)
+ switch (strtoupper($format)) {
+ case '4A0': {$format = array(4767.87,6740.79); break;}
+ case '2A0': {$format = array(3370.39,4767.87); break;}
+ case 'A0': {$format = array(2383.94,3370.39); break;}
+ case 'A1': {$format = array(1683.78,2383.94); break;}
+ case 'A2': {$format = array(1190.55,1683.78); break;}
+ case 'A3': {$format = array(841.89,1190.55); break;}
+ case 'A4': default: {$format = array(595.28,841.89); break;}
+ case 'A5': {$format = array(419.53,595.28); break;}
+ case 'A6': {$format = array(297.64,419.53); break;}
+ case 'A7': {$format = array(209.76,297.64); break;}
+ case 'A8': {$format = array(147.40,209.76); break;}
+ case 'A9': {$format = array(104.88,147.40); break;}
+ case 'A10': {$format = array(73.70,104.88); break;}
+ case 'B0': {$format = array(2834.65,4008.19); break;}
+ case 'B1': {$format = array(2004.09,2834.65); break;}
+ case 'B2': {$format = array(1417.32,2004.09); break;}
+ case 'B3': {$format = array(1000.63,1417.32); break;}
+ case 'B4': {$format = array(708.66,1000.63); break;}
+ case 'B5': {$format = array(498.90,708.66); break;}
+ case 'B6': {$format = array(354.33,498.90); break;}
+ case 'B7': {$format = array(249.45,354.33); break;}
+ case 'B8': {$format = array(175.75,249.45); break;}
+ case 'B9': {$format = array(124.72,175.75); break;}
+ case 'B10': {$format = array(87.87,124.72); break;}
+ case 'C0': {$format = array(2599.37,3676.54); break;}
+ case 'C1': {$format = array(1836.85,2599.37); break;}
+ case 'C2': {$format = array(1298.27,1836.85); break;}
+ case 'C3': {$format = array(918.43,1298.27); break;}
+ case 'C4': {$format = array(649.13,918.43); break;}
+ case 'C5': {$format = array(459.21,649.13); break;}
+ case 'C6': {$format = array(323.15,459.21); break;}
+ case 'C7': {$format = array(229.61,323.15); break;}
+ case 'C8': {$format = array(161.57,229.61); break;}
+ case 'C9': {$format = array(113.39,161.57); break;}
+ case 'C10': {$format = array(79.37,113.39); break;}
+ case 'RA0': {$format = array(2437.80,3458.27); break;}
+ case 'RA1': {$format = array(1729.13,2437.80); break;}
+ case 'RA2': {$format = array(1218.90,1729.13); break;}
+ case 'RA3': {$format = array(864.57,1218.90); break;}
+ case 'RA4': {$format = array(609.45,864.57); break;}
+ case 'SRA0': {$format = array(2551.18,3628.35); break;}
+ case 'SRA1': {$format = array(1814.17,2551.18); break;}
+ case 'SRA2': {$format = array(1275.59,1814.17); break;}
+ case 'SRA3': {$format = array(907.09,1275.59); break;}
+ case 'SRA4': {$format = array(637.80,907.09); break;}
+ case 'LETTER': {$format = array(612.00,792.00); break;}
+ case 'LEGAL': {$format = array(612.00,1008.00); break;}
+ case 'EXECUTIVE': {$format = array(521.86,756.00); break;}
+ case 'FOLIO': {$format = array(612.00,936.00); break;}
+ }
+ $this->fwPt = $format[0];
+ $this->fhPt = $format[1];
+ } else {
+ $this->fwPt = $format[0] * $this->k;
+ $this->fhPt = $format[1] * $this->k;
+ }
+ $this->setPageOrientation($orientation);
+ }
+
+ /**
+ * Set page orientation.
+ * @param string $orientation page orientation. Possible values are (case insensitive):<ul><li>P or PORTRAIT (default)</li><li>L or LANDSCAPE</li></ul>
+ * @param boolean $autopagebreak Boolean indicating if auto-page-break mode should be on or off.
+ * @param float $bottommargin bottom margin of the page.
+ * @access public
+ * @since 3.0.015 (2008-06-06)
+ */
+ public function setPageOrientation($orientation, $autopagebreak='', $bottommargin='') {
+ $orientation = strtoupper($orientation);
+ if (($orientation == 'P') OR ($orientation == 'PORTRAIT')) {
+ $this->CurOrientation = 'P';
+ $this->wPt = $this->fwPt;
+ $this->hPt = $this->fhPt;
+ } elseif (($orientation == 'L') OR ($orientation == 'LANDSCAPE')) {
+ $this->CurOrientation = 'L';
+ $this->wPt = $this->fhPt;
+ $this->hPt = $this->fwPt;
+ } else {
+ $this->Error('Incorrect orientation: '.$orientation);
+ }
+ $this->w = $this->wPt / $this->k;
+ $this->h = $this->hPt / $this->k;
+ if (empty($autopagebreak)) {
+ if (isset($this->AutoPageBreak)) {
+ $autopagebreak = $this->AutoPageBreak;
+ } else {
+ $autopagebreak = true;
+ }
+ }
+ if (empty($bottommargin)) {
+ if (isset($this->bMargin)) {
+ $bottommargin = $this->bMargin;
+ } else {
+ // default value = 2 cm
+ $bottommargin = 2 * 28.35 / $this->k;
+ }
+ }
+ $this->SetAutoPageBreak($autopagebreak, $bottommargin);
+ // store page dimensions
+ $this->pagedim[$this->page] = array('w' => $this->wPt, 'h' => $this->hPt, 'wk' => $this->w, 'hk' => $this->h, 'tm' => $this->tMargin, 'bm' => $bottommargin, 'lm' => $this->lMargin, 'rm' => $this->rMargin, 'pb' => $autopagebreak, 'or' => $this->CurOrientation, 'olm' => $this->original_lMargin, 'orm' => $this->original_rMargin);
+ }
+
+ /**
+ * Enable or disable Right-To-Left language mode
+ * @param Boolean $enable if true enable Right-To-Left language mode.
+ * @access public
+ * @since 2.0.000 (2008-01-03)
+ */
+ public function setRTL($enable) {
+ $this->rtl = $enable ? true : false;
+ $this->tmprtl = false;
+ }
+
+ /**
+ * Return the RTL status
+ * @return boolean
+ * @access public
+ * @since 4.0.012 (2008-07-24)
+ */
+ public function getRTL() {
+ return $this->rtl;
+ }
+
+ /**
+ * Force temporary RTL language direction
+ * @param mixed $mode can be false, 'L' for LTR or 'R' for RTL
+ * @access public
+ * @since 2.1.000 (2008-01-09)
+ */
+ public function setTempRTL($mode) {
+ switch ($mode) {
+ case false:
+ case 'L':
+ case 'R': {
+ $this->tmprtl = $mode;
+ }
+ }
+ }
+
+ /**
+ * Set the last cell height.
+ * @param float $h cell height.
+ * @author Nicola Asuni
+ * @access public
+ * @since 1.53.0.TC034
+ */
+ public function setLastH($h) {
+ $this->lasth = $h;
+ }
+
+ /**
+ * Get the last cell height.
+ * @return last cell height
+ * @access public
+ * @since 4.0.017 (2008-08-05)
+ */
+ public function getLastH() {
+ return $this->lasth;
+ }
+
+ /**
+ * Set the image scale.
+ * @param float $scale image scale.
+ * @author Nicola Asuni
+ * @access public
+ * @since 1.5.2
+ */
+ public function setImageScale($scale) {
+ $this->imgscale = $scale;
+ }
+
+ /**
+ * Returns the image scale.
+ * @return float image scale.
+ * @author Nicola Asuni
+ * @access public
+ * @since 1.5.2
+ */
+ public function getImageScale() {
+ return $this->imgscale;
+ }
+
+ /**
+ * Returns an array of page dimensions:
+ * <ul><li>$this->pagedim[$this->page]['w'] => page_width_in_points</li><li>$this->pagedim[$this->page]['h'] => height in points</li><li>$this->pagedim[$this->page]['wk'] => page_width_in_points</li><li>$this->pagedim[$this->page]['hk'] => height</li><li>$this->pagedim[$this->page]['tm'] => top_margin</li><li>$this->pagedim[$this->page]['bm'] => bottom_margin</li><li>$this->pagedim[$this->page]['lm'] => left_margin</li><li>$this->pagedim[$this->page]['rm'] => right_margin</li><li>$this->pagedim[$this->page]['pb'] => auto_page_break</li><li>$this->pagedim[$this->page]['or'] => page_orientation</li><li>$this->pagedim[$this->page]['olm'] => original_left_margin</li><li>$this->pagedim[$this->page]['orm'] => original_right_margin</li></ul>
+ * @param int $pagenum page number (empty = current page)
+ * @return array of page dimensions.
+ * @author Nicola Asuni
+ * @access public
+ * @since 4.5.027 (2009-03-16)
+ */
+ public function getPageDimensions($pagenum='') {
+ if (empty($pagenum)) {
+ $pagenum = $this->page;
+ }
+ return $this->pagedim[$pagenum];
+ }
+
+ /**
+ * Returns the page width in units.
+ * @param int $pagenum page number (empty = current page)
+ * @return int page width.
+ * @author Nicola Asuni
+ * @access public
+ * @since 1.5.2
+ * @see getPageDimensions()
+ */
+ public function getPageWidth($pagenum='') {
+ if (empty($pagenum)) {
+ return $this->w;
+ }
+ return $this->pagedim[$pagenum]['w'];
+ }
+
+ /**
+ * Returns the page height in units.
+ * @param int $pagenum page number (empty = current page)
+ * @return int page height.
+ * @author Nicola Asuni
+ * @access public
+ * @since 1.5.2
+ * @see getPageDimensions()
+ */
+ public function getPageHeight($pagenum='') {
+ if (empty($pagenum)) {
+ return $this->h;
+ }
+ return $this->pagedim[$pagenum]['h'];
+ }
+
+ /**
+ * Returns the page break margin.
+ * @param int $pagenum page number (empty = current page)
+ * @return int page break margin.
+ * @author Nicola Asuni
+ * @access public
+ * @since 1.5.2
+ * @see getPageDimensions()
+ */
+ public function getBreakMargin($pagenum='') {
+ if (empty($pagenum)) {
+ return $this->bMargin;
+ }
+ return $this->pagedim[$pagenum]['bm'];
+ }
+
+ /**
+ * Returns the scale factor (number of points in user unit).
+ * @return int scale factor.
+ * @author Nicola Asuni
+ * @access public
+ * @since 1.5.2
+ */
+ public function getScaleFactor() {
+ return $this->k;
+ }
+
+ /**
+ * Defines the left, top and right margins. By default, they equal 1 cm. Call this method to change them.
+ * @param float $left Left margin.
+ * @param float $top Top margin.
+ * @param float $right Right margin. Default value is the left one.
+ * @access public
+ * @since 1.0
+ * @see SetLeftMargin(), SetTopMargin(), SetRightMargin(), SetAutoPageBreak()
+ */
+ public function SetMargins($left, $top, $right=-1) {
+ //Set left, top and right margins
+ $this->lMargin = $left;
+ $this->tMargin = $top;
+ if ($right == -1) {
+ $right = $left;
+ }
+ $this->rMargin = $right;
+ }
+
+ /**
+ * Defines the left margin. The method can be called before creating the first page. If the current abscissa gets out of page, it is brought back to the margin.
+ * @param float $margin The margin.
+ * @access public
+ * @since 1.4
+ * @see SetTopMargin(), SetRightMargin(), SetAutoPageBreak(), SetMargins()
+ */
+ public function SetLeftMargin($margin) {
+ //Set left margin
+ $this->lMargin=$margin;
+ if (($this->page > 0) AND ($this->x < $margin)) {
+ $this->x = $margin;
+ }
+ }
+
+ /**
+ * Defines the top margin. The method can be called before creating the first page.
+ * @param float $margin The margin.
+ * @access public
+ * @since 1.5
+ * @see SetLeftMargin(), SetRightMargin(), SetAutoPageBreak(), SetMargins()
+ */
+ public function SetTopMargin($margin) {
+ //Set top margin
+ $this->tMargin=$margin;
+ if (($this->page > 0) AND ($this->y < $margin)) {
+ $this->y = $margin;
+ }
+ }
+
+ /**
+ * Defines the right margin. The method can be called before creating the first page.
+ * @param float $margin The margin.
+ * @access public
+ * @since 1.5
+ * @see SetLeftMargin(), SetTopMargin(), SetAutoPageBreak(), SetMargins()
+ */
+ public function SetRightMargin($margin) {
+ $this->rMargin=$margin;
+ if (($this->page > 0) AND ($this->x > ($this->w - $margin))) {
+ $this->x = $this->w - $margin;
+ }
+ }
+
+ /**
+ * Set the internal Cell padding.
+ * @param float $pad internal padding.
+ * @access public
+ * @since 2.1.000 (2008-01-09)
+ * @see Cell(), SetLeftMargin(), SetTopMargin(), SetAutoPageBreak(), SetMargins()
+ */
+ public function SetCellPadding($pad) {
+ $this->cMargin = $pad;
+ }
+
+ /**
+ * Enables or disables the automatic page breaking mode. When enabling, the second parameter is the distance from the bottom of the page that defines the triggering limit. By default, the mode is on and the margin is 2 cm.
+ * @param boolean $auto Boolean indicating if mode should be on or off.
+ * @param float $margin Distance from the bottom of the page.
+ * @access public
+ * @since 1.0
+ * @see Cell(), MultiCell(), AcceptPageBreak()
+ */
+ public function SetAutoPageBreak($auto, $margin=0) {
+ //Set auto page break mode and triggering margin
+ $this->AutoPageBreak = $auto;
+ $this->bMargin = $margin;
+ $this->PageBreakTrigger = $this->h - $margin;
+ }
+
+ /**
+ * Defines the way the document is to be displayed by the viewer.
+ * @param mixed $zoom The zoom to use. It can be one of the following string values or a number indicating the zooming factor to use. <ul><li>fullpage: displays the entire page on screen </li><li>fullwidth: uses maximum width of window</li><li>real: uses real size (equivalent to 100% zoom)</li><li>default: uses viewer default mode</li></ul>
+ * @param string $layout The page layout. Possible values are:<ul><li>SinglePage Display one page at a time</li><li>OneColumn Display the pages in one column</li><li>TwoColumnLeft Display the pages in two columns, with odd-numbered pages on the left</li><li>TwoColumnRight Display the pages in two columns, with odd-numbered pages on the right</li><li>TwoPageLeft (PDF 1.5) Display the pages two at a time, with odd-numbered pages on the left</li><li>TwoPageRight (PDF 1.5) Display the pages two at a time, with odd-numbered pages on the right</li></ul>
+ * @param string $mode A name object specifying how the document should be displayed when opened:<ul><li>UseNone Neither document outline nor thumbnail images visible</li><li>UseOutlines Document outline visible</li><li>UseThumbs Thumbnail images visible</li><li>FullScreen Full-screen mode, with no menu bar, window controls, or any other window visible</li><li>UseOC (PDF 1.5) Optional content group panel visible</li><li>UseAttachments (PDF 1.6) Attachments panel visible</li></ul>
+ * @access public
+ * @since 1.2
+ */
+ public function SetDisplayMode($zoom, $layout='SinglePage', $mode='UseNone') {
+ //Set display mode in viewer
+ if (($zoom == 'fullpage') OR ($zoom == 'fullwidth') OR ($zoom == 'real') OR ($zoom == 'default') OR (!is_string($zoom))) {
+ $this->ZoomMode = $zoom;
+ } else {
+ $this->Error('Incorrect zoom display mode: '.$zoom);
+ }
+ switch ($layout) {
+ case 'default':
+ case 'single':
+ case 'SinglePage': {
+ $this->LayoutMode = 'SinglePage';
+ break;
+ }
+ case 'continuous':
+ case 'OneColumn': {
+ $this->LayoutMode = 'OneColumn';
+ break;
+ }
+ case 'two':
+ case 'TwoColumnLeft': {
+ $this->LayoutMode = 'TwoColumnLeft';
+ break;
+ }
+ case 'TwoColumnRight': {
+ $this->LayoutMode = 'TwoColumnRight';
+ break;
+ }
+ case 'TwoPageLeft': {
+ $this->LayoutMode = 'TwoPageLeft';
+ break;
+ }
+ case 'TwoPageRight': {
+ $this->LayoutMode = 'TwoPageRight';
+ break;
+ }
+ default: {
+ $this->LayoutMode = 'SinglePage';
+ }
+ }
+ switch ($mode) {
+ case 'UseNone': {
+ $this->PageMode = 'UseNone';
+ break;
+ }
+ case 'UseOutlines': {
+ $this->PageMode = 'UseOutlines';
+ break;
+ }
+ case 'UseThumbs': {
+ $this->PageMode = 'UseThumbs';
+ break;
+ }
+ case 'FullScreen': {
+ $this->PageMode = 'FullScreen';
+ break;
+ }
+ case 'UseOC': {
+ $this->PageMode = 'UseOC';
+ break;
+ }
+ case '': {
+ $this->PageMode = 'UseAttachments';
+ break;
+ }
+ default: {
+ $this->PageMode = 'UseNone';
+ }
+ }
+ }
+
+ /**
+ * Activates or deactivates page compression. When activated, the internal representation of each page is compressed, which leads to a compression ratio of about 2 for the resulting document. Compression is on by default.
+ * Note: the Zlib extension is required for this feature. If not present, compression will be turned off.
+ * @param boolean $compress Boolean indicating if compression must be enabled.
+ * @access public
+ * @since 1.4
+ */
+ public function SetCompression($compress) {
+ //Set page compression
+ if (function_exists('gzcompress')) {
+ $this->compress = $compress;
+ } else {
+ $this->compress = false;
+ }
+ }
+
+ /**
+ * Defines the title of the document.
+ * @param string $title The title.
+ * @access public
+ * @since 1.2
+ * @see SetAuthor(), SetCreator(), SetKeywords(), SetSubject()
+ */
+ public function SetTitle($title) {
+ //Title of document
+ $this->title = $title;
+ }
+
+ /**
+ * Defines the subject of the document.
+ * @param string $subject The subject.
+ * @access public
+ * @since 1.2
+ * @see SetAuthor(), SetCreator(), SetKeywords(), SetTitle()
+ */
+ public function SetSubject($subject) {
+ //Subject of document
+ $this->subject = $subject;
+ }
+
+ /**
+ * Defines the author of the document.
+ * @param string $author The name of the author.
+ * @access public
+ * @since 1.2
+ * @see SetCreator(), SetKeywords(), SetSubject(), SetTitle()
+ */
+ public function SetAuthor($author) {
+ //Author of document
+ $this->author = $author;
+ }
+
+ /**
+ * Associates keywords with the document, generally in the form 'keyword1 keyword2 ...'.
+ * @param string $keywords The list of keywords.
+ * @access public
+ * @since 1.2
+ * @see SetAuthor(), SetCreator(), SetSubject(), SetTitle()
+ */
+ public function SetKeywords($keywords) {
+ //Keywords of document
+ $this->keywords = $keywords;
+ }
+
+ /**
+ * Defines the creator of the document. This is typically the name of the application that generates the PDF.
+ * @param string $creator The name of the creator.
+ * @access public
+ * @since 1.2
+ * @see SetAuthor(), SetKeywords(), SetSubject(), SetTitle()
+ */
+ public function SetCreator($creator) {
+ //Creator of document
+ $this->creator = $creator;
+ }
+
+ /**
+ * This method is automatically called in case of fatal error; it simply outputs the message and halts the execution. An inherited class may override it to customize the error handling but should always halt the script, or the resulting document would probably be invalid.
+ * 2004-06-11 :: Nicola Asuni : changed bold tag with strong
+ * @param string $msg The error message
+ * @access public
+ * @since 1.0
+ */
+ public function Error($msg) {
+ // unset all class variables
+ $this->_destroy(true);
+ // exit program and print error
+ die('<strong>TCPDF ERROR: </strong>'.$msg);
+ }
+
+ /**
+ * This method begins the generation of the PDF document.
+ * It is not necessary to call it explicitly because AddPage() does it automatically.
+ * Note: no page is created by this method
+ * @access public
+ * @since 1.0
+ * @see AddPage(), Close()
+ */
+ public function Open() {
+ //Begin document
+ $this->state = 1;
+ }
+
+ /**
+ * Terminates the PDF document.
+ * It is not necessary to call this method explicitly because Output() does it automatically.
+ * If the document contains no page, AddPage() is called to prevent from getting an invalid document.
+ * @access public
+ * @since 1.0
+ * @see Open(), Output()
+ */
+ public function Close() {
+ if ($this->state == 3) {
+ return;
+ }
+ if ($this->page == 0) {
+ $this->AddPage();
+ }
+ // close page
+ $this->endPage();
+ // close document
+ $this->_enddoc();
+ // unset all class variables (except critical ones)
+ $this->_destroy(false);
+ }
+
+ /**
+ * Move pointer at the specified document page and update page dimensions.
+ * @param int $pnum page number
+ * @param boolean $resetmargins if true reset left, right, top margins and Y position.
+ * @access public
+ * @since 2.1.000 (2008-01-07)
+ * @see getPage(), lastpage(), getNumPages()
+ */
+ public function setPage($pnum, $resetmargins=false) {
+ if (($pnum > 0) AND ($pnum <= $this->numpages)) {
+ $this->state = 2;
+ // save current graphic settings
+ $gvars = $this->getGraphicVars();
+ $oldpage = $this->page;
+ $this->page = $pnum;
+ $this->wPt = $this->pagedim[$this->page]['w'];
+ $this->hPt = $this->pagedim[$this->page]['h'];
+ $this->w = $this->wPt / $this->k;
+ $this->h = $this->hPt / $this->k;
+ $this->tMargin = $this->pagedim[$this->page]['tm'];
+ $this->bMargin = $this->pagedim[$this->page]['bm'];
+ $this->original_lMargin = $this->pagedim[$this->page]['olm'];
+ $this->original_rMargin = $this->pagedim[$this->page]['orm'];
+ $this->AutoPageBreak = $this->pagedim[$this->page]['pb'];
+ $this->CurOrientation = $this->pagedim[$this->page]['or'];
+ $this->SetAutoPageBreak($this->AutoPageBreak, $this->bMargin);
+ // restore graphic settings
+ $this->setGraphicVars($gvars);
+ if ($resetmargins) {
+ $this->lMargin = $this->pagedim[$this->page]['olm'];
+ $this->rMargin = $this->pagedim[$this->page]['orm'];
+ $this->SetY($this->tMargin);
+ } else {
+ // account for booklet mode
+ if ($this->pagedim[$this->page]['olm'] != $this->pagedim[$oldpage]['olm']) {
+ $deltam = $this->pagedim[$this->page]['olm'] - $this->pagedim[$this->page]['orm'];
+ $this->lMargin += $deltam;
+ $this->rMargin -= $deltam;
+ }
+ }
+ } else {
+ $this->Error('Wrong page number on setPage() function.');
+ }
+ }
+
+ /**
+ * Reset pointer to the last document page.
+ * @param boolean $resetmargins if true reset left, right, top margins and Y position.
+ * @access public
+ * @since 2.0.000 (2008-01-04)
+ * @see setPage(), getPage(), getNumPages()
+ */
+ public function lastPage($resetmargins=false) {
+ $this->setPage($this->getNumPages(), $resetmargins);
+ }
+
+ /**
+ * Get current document page number.
+ * @return int page number
+ * @access public
+ * @since 2.1.000 (2008-01-07)
+ * @see setPage(), lastpage(), getNumPages()
+ */
+ public function getPage() {
+ return $this->page;
+ }
+
+
+ /**
+ * Get the total number of insered pages.
+ * @return int number of pages
+ * @access public
+ * @since 2.1.000 (2008-01-07)
+ * @see setPage(), getPage(), lastpage()
+ */
+ public function getNumPages() {
+ return $this->numpages;
+ }
+
+ /**
+ * Adds a new page to the document. If a page is already present, the Footer() method is called first to output the footer (if enabled). Then the page is added, the current position set to the top-left corner according to the left and top margins (or top-right if in RTL mode), and Header() is called to display the header (if enabled).
+ * The origin of the coordinate system is at the top-left corner (or top-right for RTL) and increasing ordinates go downwards.
+ * @param string $orientation page orientation. Possible values are (case insensitive):<ul><li>P or PORTRAIT (default)</li><li>L or LANDSCAPE</li></ul>
+ * @param mixed $format The format used for pages. It can be either one of the following values (case insensitive) or a custom format in the form of a two-element array containing the width and the height (expressed in the unit given by unit).<ul><li>4A0</li><li>2A0</li><li>A0</li><li>A1</li><li>A2</li><li>A3</li><li>A4 (default)</li><li>A5</li><li>A6</li><li>A7</li><li>A8</li><li>A9</li><li>A10</li><li>B0</li><li>B1</li><li>B2</li><li>B3</li><li>B4</li><li>B5</li><li>B6</li><li>B7</li><li>B8</li><li>B9</li><li>B10</li><li>C0</li><li>C1</li><li>C2</li><li>C3</li><li>C4</li><li>C5</li><li>C6</li><li>C7</li><li>C8</li><li>C9</li><li>C10</li><li>RA0</li><li>RA1</li><li>RA2</li><li>RA3</li><li>RA4</li><li>SRA0</li><li>SRA1</li><li>SRA2</li><li>SRA3</li><li>SRA4</li><li>LETTER</li><li>LEGAL</li><li>EXECUTIVE</li><li>FOLIO</li></ul>
+ * @access public
+ * @since 1.0
+ * @see startPage(), endPage()
+ */
+ public function AddPage($orientation='', $format='') {
+ if (!isset($this->original_lMargin)) {
+ $this->original_lMargin = $this->lMargin;
+ }
+ if (!isset($this->original_rMargin)) {
+ $this->original_rMargin = $this->rMargin;
+ }
+ // terminate previous page
+ $this->endPage();
+ // start new page
+ $this->startPage($orientation, $format);
+ }
+
+ /**
+ * Terminate the current page
+ * @access protected
+ * @since 4.2.010 (2008-11-14)
+ * @see startPage(), AddPage()
+ */
+ protected function endPage() {
+ // check if page is already closed
+ if (($this->page == 0) OR ($this->numpages > $this->page) OR (!$this->pageopen[$this->page])) {
+ return;
+ }
+ $this->InFooter = true;
+ // print page footer
+ $this->setFooter();
+ // close page
+ $this->_endpage();
+ // mark page as closed
+ $this->pageopen[$this->page] = false;
+ $this->InFooter = false;
+ }
+
+ /**
+ * Starts a new page to the document. The page must be closed using the endPage() function.
+ * The origin of the coordinate system is at the top-left corner and increasing ordinates go downwards.
+ * @param string $orientation page orientation. Possible values are (case insensitive):<ul><li>P or PORTRAIT (default)</li><li>L or LANDSCAPE</li></ul>
+ * @param mixed $format The format used for pages. It can be either one of the following values (case insensitive) or a custom format in the form of a two-element array containing the width and the height (expressed in the unit given by unit).<ul><li>4A0</li><li>2A0</li><li>A0</li><li>A1</li><li>A2</li><li>A3</li><li>A4 (default)</li><li>A5</li><li>A6</li><li>A7</li><li>A8</li><li>A9</li><li>A10</li><li>B0</li><li>B1</li><li>B2</li><li>B3</li><li>B4</li><li>B5</li><li>B6</li><li>B7</li><li>B8</li><li>B9</li><li>B10</li><li>C0</li><li>C1</li><li>C2</li><li>C3</li><li>C4</li><li>C5</li><li>C6</li><li>C7</li><li>C8</li><li>C9</li><li>C10</li><li>RA0</li><li>RA1</li><li>RA2</li><li>RA3</li><li>RA4</li><li>SRA0</li><li>SRA1</li><li>SRA2</li><li>SRA3</li><li>SRA4</li><li>LETTER</li><li>LEGAL</li><li>EXECUTIVE</li><li>FOLIO</li></ul>
+ * @access protected
+ * @since 4.2.010 (2008-11-14)
+ * @see endPage(), AddPage()
+ */
+ protected function startPage($orientation='', $format='') {
+ if ($this->numpages > $this->page) {
+ // this page has been already added
+ $this->setPage($this->page + 1);
+ $this->SetY($this->tMargin);
+ return;
+ }
+ // start a new page
+ if ($this->state == 0) {
+ $this->Open();
+ }
+ ++$this->numpages;
+ $this->swapMargins($this->booklet);
+ // save current graphic settings
+ $gvars = $this->getGraphicVars();
+ // start new page
+ $this->_beginpage($orientation, $format);
+ // mark page as open
+ $this->pageopen[$this->page] = true;
+ // restore graphic settings
+ $this->setGraphicVars($gvars);
+ // mark this point
+ $this->setPageMark();
+ // print page header
+ $this->setHeader();
+ // restore graphic settings
+ $this->setGraphicVars($gvars);
+ // mark this point
+ $this->setPageMark();
+ // print table header (if any)
+ $this->setTableHeader();
+ }
+
+ /**
+ * Set start-writing mark on current page for multicell borders and fills.
+ * This function must be called after calling Image() function for a background image.
+ * Background images must be always inserted before calling Multicell() or WriteHTMLCell() or WriteHTML() functions.
+ * @access public
+ * @since 4.0.016 (2008-07-30)
+ */
+ public function setPageMark() {
+ $this->intmrk[$this->page] = $this->pagelen[$this->page];
+ }
+
+ /**
+ * Set header data.
+ * @param string $ln header image logo
+ * @param string $lw header image logo width in mm
+ * @param string $ht string to print as title on document header
+ * @param string $hs string to print on document header
+ * @access public
+ */
+ public function setHeaderData($ln='', $lw=0, $ht='', $hs='') {
+ $this->header_logo = $ln;
+ $this->header_logo_width = $lw;
+ $this->header_title = $ht;
+ $this->header_string = $hs;
+ }
+
+ /**
+ * Returns header data:
+ * <ul><li>$ret['logo'] = logo image</li><li>$ret['logo_width'] = width of the image logo in user units</li><li>$ret['title'] = header title</li><li>$ret['string'] = header description string</li></ul>
+ * @return array()
+ * @access public
+ * @since 4.0.012 (2008-07-24)
+ */
+ public function getHeaderData() {
+ $ret = array();
+ $ret['logo'] = $this->header_logo;
+ $ret['logo_width'] = $this->header_logo_width;
+ $ret['title'] = $this->header_title;
+ $ret['string'] = $this->header_string;
+ return $ret;
+ }
+
+ /**
+ * Set header margin.
+ * (minimum distance between header and top page margin)
+ * @param int $hm distance in user units
+ * @access public
+ */
+ public function setHeaderMargin($hm=10) {
+ $this->header_margin = $hm;
+ }
+
+ /**
+ * Returns header margin in user units.
+ * @return float
+ * @since 4.0.012 (2008-07-24)
+ * @access public
+ */
+ public function getHeaderMargin() {
+ return $this->header_margin;
+ }
+
+ /**
+ * Set footer margin.
+ * (minimum distance between footer and bottom page margin)
+ * @param int $fm distance in user units
+ * @access public
+ */
+ public function setFooterMargin($fm=10) {
+ $this->footer_margin = $fm;
+ }
+
+ /**
+ * Returns footer margin in user units.
+ * @return float
+ * @since 4.0.012 (2008-07-24)
+ * @access public
+ */
+ public function getFooterMargin() {
+ return $this->footer_margin;
+ }
+ /**
+ * Set a flag to print page header.
+ * @param boolean $val set to true to print the page header (default), false otherwise.
+ * @access public
+ */
+ public function setPrintHeader($val=true) {
+ $this->print_header = $val;
+ }
+
+ /**
+ * Set a flag to print page footer.
+ * @param boolean $value set to true to print the page footer (default), false otherwise.
+ * @access public
+ */
+ public function setPrintFooter($val=true) {
+ $this->print_footer = $val;
+ }
+
+ /**
+ * Return the right-bottom (or left-bottom for RTL) corner X coordinate of last inserted image
+ * @return float
+ * @access public
+ */
+ public function getImageRBX() {
+ return $this->img_rb_x;
+ }
+
+ /**
+ * Return the right-bottom (or left-bottom for RTL) corner Y coordinate of last inserted image
+ * @return float
+ * @access public
+ */
+ public function getImageRBY() {
+ return $this->img_rb_y;
+ }
+
+ /**
+ * This method is used to render the page header.
+ * It is automatically called by AddPage() and could be overwritten in your own inherited class.
+ * @access public
+ */
+ public function Header() {
+ $ormargins = $this->getOriginalMargins();
+ $headerfont = $this->getHeaderFont();
+ $headerdata = $this->getHeaderData();
+ if (($headerdata['logo']) AND ($headerdata['logo'] != K_BLANK_IMAGE)) {
+ $this->Image(K_PATH_IMAGES.$headerdata['logo'], $this->GetX(), $this->getHeaderMargin(), $headerdata['logo_width']);
+ $imgy = $this->getImageRBY();
+ } else {
+ $imgy = $this->GetY();
+ }
+ $cell_height = round(($this->getCellHeightRatio() * $headerfont[2]) / $this->getScaleFactor(), 2);
+ // set starting margin for text data cell
+ if ($this->getRTL()) {
+ $header_x = $ormargins['right'] + ($headerdata['logo_width'] * 1.1);
+ } else {
+ $header_x = $ormargins['left'] + ($headerdata['logo_width'] * 1.1);
+ }
+ $this->SetTextColor(0, 0, 0);
+ // header title
+ $this->SetFont($headerfont[0], 'B', $headerfont[2] + 1);
+ $this->SetX($header_x);
+ $this->Cell(0, $cell_height, $headerdata['title'], 0, 1, '', 0, '', 0);
+ // header string
+ $this->SetFont($headerfont[0], $headerfont[1], $headerfont[2]);
+ $this->SetX($header_x);
+ $this->MultiCell(0, $cell_height, $headerdata['string'], 0, '', 0, 1, '', '', true, 0, false);
+ // print an ending header line
+ $this->SetLineStyle(array('width' => 0.85 / $this->getScaleFactor(), 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)));
+ $this->SetY((2.835 / $this->getScaleFactor()) + max($imgy, $this->GetY()));
+ if ($this->getRTL()) {
+ $this->SetX($ormargins['right']);
+ } else {
+ $this->SetX($ormargins['left']);
+ }
+ $this->Cell(0, 0, '', 'T', 0, 'C');
+ }
+
+ /**
+ * This method is used to render the page footer.
+ * It is automatically called by AddPage() and could be overwritten in your own inherited class.
+ * @access public
+ */
+ public function Footer() {
+ $cur_y = $this->GetY();
+ $ormargins = $this->getOriginalMargins();
+ $this->SetTextColor(0, 0, 0);
+ //set style for cell border
+ $line_width = 0.85 / $this->getScaleFactor();
+ $this->SetLineStyle(array('width' => $line_width, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)));
+ //print document barcode
+ $barcode = $this->getBarcode();
+ if (!empty($barcode)) {
+ $this->Ln($line_width);
+ $barcode_width = round(($this->getPageWidth() - $ormargins['left'] - $ormargins['right'])/3);
+ $this->write1DBarcode($barcode, 'C128B', $this->GetX(), $cur_y + $line_width, $barcode_width, (($this->getFooterMargin() / 3) - $line_width), 0.3, '', '');
+ }
+ if (empty($this->pagegroups)) {
+ $pagenumtxt = $this->l['w_page'].' '.$this->getAliasNumPage().' / '.$this->getAliasNbPages();
+ } else {
+ $pagenumtxt = $this->l['w_page'].' '.$this->getPageNumGroupAlias().' / '.$this->getPageGroupAlias();
+ }
+ $this->SetY($cur_y);
+ //Print page number
+ if ($this->getRTL()) {
+ $this->SetX($ormargins['right']);
+ $this->Cell(0, 0, $pagenumtxt, 'T', 0, 'L');
+ } else {
+ $this->SetX($ormargins['left']);
+ $this->Cell(0, 0, $pagenumtxt, 'T', 0, 'R');
+ }
+ }
+
+ /**
+ * This method is used to render the page header.
+ * @access protected
+ * @since 4.0.012 (2008-07-24)
+ */
+ protected function setHeader() {
+ if ($this->print_header) {
+ $lasth = $this->lasth;
+ $this->_out('q');
+ $this->rMargin = $this->original_rMargin;
+ $this->lMargin = $this->original_lMargin;
+ $this->cMargin = 0;
+ //set current position
+ if ($this->rtl) {
+ $this->SetXY($this->original_rMargin, $this->header_margin);
+ } else {
+ $this->SetXY($this->original_lMargin, $this->header_margin);
+ }
+ $this->SetFont($this->header_font[0], $this->header_font[1], $this->header_font[2]);
+ $this->Header();
+ //restore position
+ if ($this->rtl) {
+ $this->SetXY($this->original_rMargin, $this->tMargin);
+ } else {
+ $this->SetXY($this->original_lMargin, $this->tMargin);
+ }
+ $this->_out('Q');
+ $this->lasth = $lasth;
+ }
+ }
+
+ /**
+ * This method is used to render the page footer.
+ * @access protected
+ * @since 4.0.012 (2008-07-24)
+ */
+ protected function setFooter() {
+ //Page footer
+ // save current graphic settings
+ $gvars = $this->getGraphicVars();
+ // mark this point
+ $this->footerpos[$this->page] = $this->pagelen[$this->page];
+ $this->_out("\n");
+ if ($this->print_footer) {
+ $lasth = $this->lasth;
+ $this->_out('q');
+ $this->rMargin = $this->original_rMargin;
+ $this->lMargin = $this->original_lMargin;
+ $this->cMargin = 0;
+ //set current position
+ $footer_y = $this->h - $this->footer_margin;
+ if ($this->rtl) {
+ $this->SetXY($this->original_rMargin, $footer_y);
+ } else {
+ $this->SetXY($this->original_lMargin, $footer_y);
+ }
+ $this->SetFont($this->footer_font[0], $this->footer_font[1], $this->footer_font[2]);
+ $this->Footer();
+ //restore position
+ if ($this->rtl) {
+ $this->SetXY($this->original_rMargin, $this->tMargin);
+ } else {
+ $this->SetXY($this->original_lMargin, $this->tMargin);
+ }
+ $this->_out('Q');
+ $this->lasth = $lasth;
+ }
+ // restore graphic settings
+ $this->setGraphicVars($gvars);
+ // calculate footer lenght
+ $this->footerlen[$this->page] = $this->pagelen[$this->page] - $this->footerpos[$this->page];
+ }
+
+ /**
+ * This method is used to render the table header on new page (if any).
+ * @access protected
+ * @since 4.5.030 (2009-03-25)
+ */
+ protected function setTableHeader() {
+ if (!empty($this->theadMargin)) {
+ // restore the original top-margin
+ $this->tMargin = $this->theadMargin;
+ $this->pagedim[$this->page]['tm'] = $this->theadMargin;
+ $this->y = $this->theadMargin;
+ }
+ if (!empty($this->thead)) {
+ // print table header
+ $this->writeHTML($this->thead, false, false, false, false, '');
+ // set new top margin to skip the table headers
+ if (!isset($this->theadMargin) OR (empty($this->theadMargin))) {
+ $this->theadMargin = $this->tMargin;
+ }
+ $this->tMargin = $this->y;
+ $this->pagedim[$this->page]['tm'] = $this->tMargin;
+ }
+ }
+
+ /**
+ * Returns the current page number.
+ * @return int page number
+ * @access public
+ * @since 1.0
+ * @see AliasNbPages(), getAliasNbPages()
+ */
+ public function PageNo() {
+ return $this->page;
+ }
+
+ /**
+ * Defines a new spot color.
+ * It can be expressed in RGB components or gray scale.
+ * The method can be called before the first page is created and the value is retained from page to page.
+ * @param int $c Cyan color for CMYK. Value between 0 and 255
+ * @param int $m Magenta color for CMYK. Value between 0 and 255
+ * @param int $y Yellow color for CMYK. Value between 0 and 255
+ * @param int $k Key (Black) color for CMYK. Value between 0 and 255
+ * @access public
+ * @since 4.0.024 (2008-09-12)
+ * @see SetDrawSpotColor(), SetFillSpotColor(), SetTextSpotColor()
+ */
+ public function AddSpotColor($name, $c, $m, $y, $k) {
+ if (!isset($this->spot_colors[$name])) {
+ $i = 1 + count($this->spot_colors);
+ $this->spot_colors[$name] = array('i' => $i, 'c' => $c, 'm' => $m, 'y' => $y, 'k' => $k);
+ }
+ }
+
+ /**
+ * Defines the color used for all drawing operations (lines, rectangles and cell borders).
+ * It can be expressed in RGB components or gray scale.
+ * The method can be called before the first page is created and the value is retained from page to page.
+ * @param array $color array of colors
+ * @access public
+ * @since 3.1.000 (2008-06-11)
+ * @see SetDrawColor()
+ */
+ public function SetDrawColorArray($color) {
+ if (isset($color)) {
+ $color = array_values($color);
+ $r = isset($color[0]) ? $color[0] : -1;
+ $g = isset($color[1]) ? $color[1] : -1;
+ $b = isset($color[2]) ? $color[2] : -1;
+ $k = isset($color[3]) ? $color[3] : -1;
+ if ($r >= 0) {
+ $this->SetDrawColor($r, $g, $b, $k);
+ }
+ }
+ }
+
+ /**
+ * Defines the color used for all drawing operations (lines, rectangles and cell borders). It can be expressed in RGB components or gray scale. The method can be called before the first page is created and the value is retained from page to page.
+ * @param int $col1 Gray level for single color, or Red color for RGB, or Cyan color for CMYK. Value between 0 and 255
+ * @param int $col2 Green color for RGB, or Magenta color for CMYK. Value between 0 and 255
+ * @param int $col3 Blue color for RGB, or Yellow color for CMYK. Value between 0 and 255
+ * @param int $col4 Key (Black) color for CMYK. Value between 0 and 255
+ * @access public
+ * @since 1.3
+ * @see SetDrawColorArray(), SetFillColor(), SetTextColor(), Line(), Rect(), Cell(), MultiCell()
+ */
+ public function SetDrawColor($col1=0, $col2=-1, $col3=-1, $col4=-1) {
+ // set default values
+ if (!is_numeric($col1)) {
+ $col1 = 0;
+ }
+ if (!is_numeric($col2)) {
+ $col2 = -1;
+ }
+ if (!is_numeric($col3)) {
+ $col3 = -1;
+ }
+ if (!is_numeric($col4)) {
+ $col4 = -1;
+ }
+ //Set color for all stroking operations
+ if (($col2 == -1) AND ($col3 == -1) AND ($col4 == -1)) {
+ // Grey scale
+ $this->DrawColor = sprintf('%.3F G', $col1/255);
+ } elseif ($col4 == -1) {
+ // RGB
+ $this->DrawColor = sprintf('%.3F %.3F %.3F RG', $col1/255, $col2/255, $col3/255);
+ } else {
+ // CMYK
+ $this->DrawColor = sprintf('%.3F %.3F %.3F %.3F K', $col1/100, $col2/100, $col3/100, $col4/100);
+ }
+ if ($this->page > 0) {
+ $this->_out($this->DrawColor);
+ }
+ }
+
+ /**
+ * Defines the spot color used for all drawing operations (lines, rectangles and cell borders).
+ * @param string $name name of the spot color
+ * @param int $tint the intensity of the color (from 0 to 100 ; 100 = full intensity by default).
+ * @access public
+ * @since 4.0.024 (2008-09-12)
+ * @see AddSpotColor(), SetFillSpotColor(), SetTextSpotColor()
+ */
+ public function SetDrawSpotColor($name, $tint=100) {
+ if (!isset($this->spot_colors[$name])) {
+ $this->Error('Undefined spot color: '.$name);
+ }
+ $this->DrawColor = sprintf('/CS%d CS %.3F SCN', $this->spot_colors[$name]['i'], $tint/100);
+ if ($this->page > 0) {
+ $this->_out($this->DrawColor);
+ }
+ }
+
+ /**
+ * Defines the color used for all filling operations (filled rectangles and cell backgrounds).
+ * It can be expressed in RGB components or gray scale.
+ * The method can be called before the first page is created and the value is retained from page to page.
+ * @param array $color array of colors
+ * @access public
+ * @since 3.1.000 (2008-6-11)
+ * @see SetFillColor()
+ */
+ public function SetFillColorArray($color) {
+ if (isset($color)) {
+ $color = array_values($color);
+ $r = isset($color[0]) ? $color[0] : -1;
+ $g = isset($color[1]) ? $color[1] : -1;
+ $b = isset($color[2]) ? $color[2] : -1;
+ $k = isset($color[3]) ? $color[3] : -1;
+ if ($r >= 0) {
+ $this->SetFillColor($r, $g, $b, $k);
+ }
+ }
+ }
+
+ /**
+ * Defines the color used for all filling operations (filled rectangles and cell backgrounds). It can be expressed in RGB components or gray scale. The method can be called before the first page is created and the value is retained from page to page.
+ * @param int $col1 Gray level for single color, or Red color for RGB, or Cyan color for CMYK. Value between 0 and 255
+ * @param int $col2 Green color for RGB, or Magenta color for CMYK. Value between 0 and 255
+ * @param int $col3 Blue color for RGB, or Yellow color for CMYK. Value between 0 and 255
+ * @param int $col4 Key (Black) color for CMYK. Value between 0 and 255
+ * @access public
+ * @since 1.3
+ * @see SetFillColorArray(), SetDrawColor(), SetTextColor(), Rect(), Cell(), MultiCell()
+ */
+ public function SetFillColor($col1=0, $col2=-1, $col3=-1, $col4=-1) {
+ // set default values
+ if (!is_numeric($col1)) {
+ $col1 = 0;
+ }
+ if (!is_numeric($col2)) {
+ $col2 = -1;
+ }
+ if (!is_numeric($col3)) {
+ $col3 = -1;
+ }
+ if (!is_numeric($col4)) {
+ $col4 = -1;
+ }
+ //Set color for all filling operations
+ if (($col2 == -1) AND ($col3 == -1) AND ($col4 == -1)) {
+ // Grey scale
+ $this->FillColor = sprintf('%.3F g', $col1/255);
+ $this->bgcolor = array('G' => $col1);
+ } elseif ($col4 == -1) {
+ // RGB
+ $this->FillColor = sprintf('%.3F %.3F %.3F rg', $col1/255, $col2/255, $col3/255);
+ $this->bgcolor = array('R' => $col1, 'G' => $col2, 'B' => $col3);
+ } else {
+ // CMYK
+ $this->FillColor = sprintf('%.3F %.3F %.3F %.3F k', $col1/100, $col2/100, $col3/100, $col4/100);
+ $this->bgcolor = array('C' => $col1, 'M' => $col2, 'Y' => $col3, 'K' => $col4);
+ }
+ $this->ColorFlag = ($this->FillColor != $this->TextColor);
+ if ($this->page > 0) {
+ $this->_out($this->FillColor);
+ }
+ }
+
+ /**
+ * Defines the spot color used for all filling operations (filled rectangles and cell backgrounds).
+ * @param string $name name of the spot color
+ * @param int $tint the intensity of the color (from 0 to 100 ; 100 = full intensity by default).
+ * @access public
+ * @since 4.0.024 (2008-09-12)
+ * @see AddSpotColor(), SetDrawSpotColor(), SetTextSpotColor()
+ */
+ public function SetFillSpotColor($name, $tint=100) {
+ if (!isset($this->spot_colors[$name])) {
+ $this->Error('Undefined spot color: '.$name);
+ }
+ $this->FillColor = sprintf('/CS%d cs %.3F scn', $this->spot_colors[$name]['i'], $tint/100);
+ $this->ColorFlag = ($this->FillColor != $this->TextColor);
+ if ($this->page > 0) {
+ $this->_out($this->FillColor);
+ }
+ }
+
+ /**
+ * Defines the color used for text. It can be expressed in RGB components or gray scale.
+ * The method can be called before the first page is created and the value is retained from page to page.
+ * @param array $color array of colors
+ * @access public
+ * @since 3.1.000 (2008-6-11)
+ * @see SetFillColor()
+ */
+ public function SetTextColorArray($color) {
+ if (isset($color)) {
+ $color = array_values($color);
+ $r = isset($color[0]) ? $color[0] : -1;
+ $g = isset($color[1]) ? $color[1] : -1;
+ $b = isset($color[2]) ? $color[2] : -1;
+ $k = isset($color[3]) ? $color[3] : -1;
+ if ($r >= 0) {
+ $this->SetTextColor($r, $g, $b, $k);
+ }
+ }
+ }
+
+ /**
+ * Defines the color used for text. It can be expressed in RGB components or gray scale. The method can be called before the first page is created and the value is retained from page to page.
+ * @param int $col1 Gray level for single color, or Red color for RGB, or Cyan color for CMYK. Value between 0 and 255
+ * @param int $col2 Green color for RGB, or Magenta color for CMYK. Value between 0 and 255
+ * @param int $col3 Blue color for RGB, or Yellow color for CMYK. Value between 0 and 255
+ * @param int $col4 Key (Black) color for CMYK. Value between 0 and 255
+ * @access public
+ * @since 1.3
+ * @see SetTextColorArray(), SetDrawColor(), SetFillColor(), Text(), Cell(), MultiCell()
+ */
+ public function SetTextColor($col1=0, $col2=-1, $col3=-1, $col4=-1) {
+ // set default values
+ if (!is_numeric($col1)) {
+ $col1 = 0;
+ }
+ if (!is_numeric($col2)) {
+ $col2 = -1;
+ }
+ if (!is_numeric($col3)) {
+ $col3 = -1;
+ }
+ if (!is_numeric($col4)) {
+ $col4 = -1;
+ }
+ //Set color for text
+ if (($col2 == -1) AND ($col3 == -1) AND ($col4 == -1)) {
+ // Grey scale
+ $this->TextColor = sprintf('%.3F g', $col1/255);
+ $this->fgcolor = array('G' => $col1);
+ } elseif ($col4 == -1) {
+ // RGB
+ $this->TextColor = sprintf('%.3F %.3F %.3F rg', $col1/255, $col2/255, $col3/255);
+ $this->fgcolor = array('R' => $col1, 'G' => $col2, 'B' => $col3);
+ } else {
+ // CMYK
+ $this->TextColor = sprintf('%.3F %.3F %.3F %.3F k', $col1/100, $col2/100, $col3/100, $col4/100);
+ $this->fgcolor = array('C' => $col1, 'M' => $col2, 'Y' => $col3, 'K' => $col4);
+ }
+ $this->ColorFlag = ($this->FillColor != $this->TextColor);
+ }
+
+ /**
+ * Defines the spot color used for text.
+ * @param string $name name of the spot color
+ * @param int $tint the intensity of the color (from 0 to 100 ; 100 = full intensity by default).
+ * @access public
+ * @since 4.0.024 (2008-09-12)
+ * @see AddSpotColor(), SetDrawSpotColor(), SetFillSpotColor()
+ */
+ public function SetTextSpotColor($name, $tint=100) {
+ if (!isset($this->spot_colors[$name])) {
+ $this->Error('Undefined spot color: '.$name);
+ }
+ $this->TextColor = sprintf('/CS%d cs %.3F scn', $this->spot_colors[$name]['i'], $tint/100);
+ $this->ColorFlag = ($this->FillColor != $this->TextColor);
+ if ($this->page > 0) {
+ $this->_out($this->TextColor);
+ }
+ }
+
+ /**
+ * Returns the length of a string in user unit. A font must be selected.<br>
+ * @param string $s The string whose length is to be computed
+ * @param string $fontname Family font. It can be either a name defined by AddFont() or one of the standard families. It is also possible to pass an empty string, in that case, the current family is retained.
+ * @param string $fontstyle Font style. Possible values are (case insensitive):<ul><li>empty string: regular</li><li>B: bold</li><li>I: italic</li><li>U: underline</li><li>D: line trough</li></ul> or any combination. The default value is regular.
+ * @param float $fontsize Font size in points. The default value is the current size.
+ * @return int string length
+ * @author Nicola Asuni
+ * @access public
+ * @since 1.2
+ */
+ public function GetStringWidth($s, $fontname='', $fontstyle='', $fontsize=0) {
+ return $this->GetArrStringWidth($this->utf8Bidi($this->UTF8StringToArray($s), $this->tmprtl), $fontname, $fontstyle, $fontsize);
+ }
+
+ /**
+ * Returns the string length of an array of chars in user unit. A font must be selected.<br>
+ * @param string $arr The array of chars whose total length is to be computed
+ * @param string $fontname Family font. It can be either a name defined by AddFont() or one of the standard families. It is also possible to pass an empty string, in that case, the current family is retained.
+ * @param string $fontstyle Font style. Possible values are (case insensitive):<ul><li>empty string: regular</li><li>B: bold</li><li>I: italic</li><li>U: underline</li><li>D: line trough</li></ul> or any combination. The default value is regular.
+ * @param float $fontsize Font size in points. The default value is the current size.
+ * @return int string length
+ * @author Nicola Asuni
+ * @access public
+ * @since 2.4.000 (2008-03-06)
+ */
+ public function GetArrStringWidth($sa, $fontname='', $fontstyle='', $fontsize=0) {
+ // store current values
+ if (!empty($fontname)) {
+ $prev_FontFamily = $this->FontFamily;
+ $prev_FontStyle = $this->FontStyle;
+ $prev_FontSizePt = $this->FontSizePt;
+ $this->SetFont($fontname, $fontstyle, $fontsize);
+ }
+ $w = 0;
+ foreach ($sa as $char) {
+ $w += $this->GetCharWidth($char);
+ }
+ // restore previous values
+ if (!empty($fontname)) {
+ $this->SetFont($prev_FontFamily, $prev_FontStyle, $prev_FontSizePt);
+ }
+ return $w;
+ }
+
+ /**
+ * Returns the length of the char in user unit for the current font.<br>
+ * @param int $char The char code whose length is to be returned
+ * @return int char width
+ * @author Nicola Asuni
+ * @access public
+ * @since 2.4.000 (2008-03-06)
+ */
+ public function GetCharWidth($char) {
+ if ($char == 173) {
+ // SHY character will not be printed
+ return (0);
+ }
+ $cw = &$this->CurrentFont['cw'];
+ if (isset($cw[$char])) {
+ $w = $cw[$char];
+ } elseif (isset($this->CurrentFont['dw'])) {
+ // default width
+ $w = $this->CurrentFont['dw'];
+ } elseif (isset($cw[32])) {
+ // default width
+ $dw = $cw[32];
+ } else {
+ $w = 600;
+ }
+ return ($w * $this->FontSize / 1000);
+ }
+
+ /**
+ * Returns the numbero of characters in a string.
+ * @param string $s The input string.
+ * @return int number of characters
+ * @access public
+ * @since 2.0.0001 (2008-01-07)
+ */
+ public function GetNumChars($s) {
+ if (($this->CurrentFont['type'] == 'TrueTypeUnicode') OR ($this->CurrentFont['type'] == 'cidfont0')) {
+ return count($this->UTF8StringToArray($s));
+ }
+ return strlen($s);
+ }
+
+ /**
+ * Fill the list of available fonts ($this->fontlist).
+ * @access protected
+ * @since 4.0.013 (2008-07-28)
+ */
+ protected function getFontsList() {
+ $fontsdir = opendir($this->_getfontpath());
+ while (($file = readdir($fontsdir)) !== false) {
+ if (substr($file, -4) == '.php') {
+ array_push($this->fontlist, strtolower(basename($file, '.php')));
+ }
+ }
+ closedir($fontsdir);
+ }
+
+ /**
+ * Imports a TrueType, Type1, core, or CID0 font and makes it available.
+ * It is necessary to generate a font definition file first (read /fonts/utils/README.TXT).
+ * The definition file (and the font file itself when embedding) must be present either in the current directory or in the one indicated by K_PATH_FONTS if the constant is defined. If it could not be found, the error "Could not include font definition file" is generated.
+ * @param string $family Font family. The name can be chosen arbitrarily. If it is a standard family name, it will override the corresponding font.
+ * @param string $style Font style. Possible values are (case insensitive):<ul><li>empty string: regular (default)</li><li>B: bold</li><li>I: italic</li><li>BI or IB: bold italic</li></ul>
+ * @param string $fontfile The font definition file. By default, the name is built from the family and style, in lower case with no spaces.
+ * @return array containing the font data, or false in case of error.
+ * @access public
+ * @since 1.5
+ * @see SetFont()
+ */
+ public function AddFont($family, $style='', $fontfile='') {
+ if (empty($family)) {
+ if (!empty($this->FontFamily)) {
+ $family = $this->FontFamily;
+ } else {
+ $this->Error('Empty font family');
+ }
+ }
+ $family = strtolower($family);
+ if ((!$this->isunicode) AND ($family == 'arial')) {
+ $family = 'helvetica';
+ }
+ if (($family == 'symbol') OR ($family == 'zapfdingbats')) {
+ $style = '';
+ }
+ $tempstyle = strtoupper($style);
+ $style = '';
+ // underline
+ if (strpos($tempstyle, 'U') !== false) {
+ $this->underline = true;
+ } else {
+ $this->underline = false;
+ }
+ // line through (deleted)
+ if (strpos($tempstyle, 'D') !== false) {
+ $this->linethrough = true;
+ } else {
+ $this->linethrough = false;
+ }
+ // bold
+ if (strpos($tempstyle, 'B') !== false) {
+ $style .= 'B';
+ }
+ // oblique
+ if (strpos($tempstyle, 'I') !== false) {
+ $style .= 'I';
+ }
+ $bistyle = $style;
+ $fontkey = $family.$style;
+ $font_style = $style.($this->underline ? 'U' : '').($this->linethrough ? 'D' : '');
+ $fontdata = array('fontkey' => $fontkey, 'family' => $family, 'style' => $font_style);
+ // check if the font has been already added
+ if ($this->getFontBuffer($fontkey) !== false) {
+ return $fontdata;
+ }
+ if (isset($type)) {
+ unset($type);
+ }
+ if (isset($cw)) {
+ unset($cw);
+ }
+ // get specified font directory (if any)
+ $fontdir = '';
+ if (!empty($fontfile)) {
+ $fontdir = dirname($fontfile);
+ if (empty($fontdir) OR ($fontdir == '.')) {
+ $fontdir = '';
+ } else {
+ $fontdir .= '/';
+ }
+ }
+ // search and include font file
+ if (empty($fontfile) OR (!file_exists($fontfile))) {
+ // build a standard filenames for specified font
+ $fontfile1 = str_replace(' ', '', $family).strtolower($style).'.php';
+ $fontfile2 = str_replace(' ', '', $family).'.php';
+ // search files on various directories
+ if (file_exists($fontdir.$fontfile1)) {
+ $fontfile = $fontdir.$fontfile1;
+ } elseif (file_exists($this->_getfontpath().$fontfile1)) {
+ $fontfile = $this->_getfontpath().$fontfile1;
+ } elseif (file_exists($fontfile1)) {
+ $fontfile = $fontfile1;
+ } elseif (file_exists($fontdir.$fontfile2)) {
+ $fontfile = $fontdir.$fontfile2;
+ } elseif (file_exists($this->_getfontpath().$fontfile2)) {
+ $fontfile = $this->_getfontpath().$fontfile2;
+ } else {
+ $fontfile = $fontfile2;
+ }
+ }
+ // include font file
+ if (file_exists($fontfile)) {
+ include($fontfile);
+ } else {
+ $this->Error('Could not include font definition file: '.$family.'');
+ }
+ // check font parameters
+ if ((!isset($type)) OR (!isset($cw))) {
+ $this->Error('The font definition file has a bad format: '.$fontfile.'');
+ }
+ if (!isset($file)) {
+ $file = '';
+ }
+ if (!isset($enc)) {
+ $enc = '';
+ }
+ if (!isset($dw) OR empty($dw)) {
+ // set default width
+ if (isset($desc['MissingWidth']) AND ($desc['MissingWidth'] > 0)) {
+ $dw = $desc['MissingWidth'];
+ } elseif (isset($cw[32])) {
+ $dw = $cw[32];
+ } else {
+ $dw = 600;
+ }
+ }
+ ++$this->numfonts;
+ // register CID font (all styles at once)
+ if ($type == 'cidfont0') {
+ $file = ''; // not embedded
+ $styles = array('' => '', 'B' => ',Bold', 'I' => ',Italic', 'BI' => ',BoldItalic');
+ $sname = $name.$styles[$bistyle];
+ if ((strpos($bistyle, 'B') !== false) AND (isset($desc['StemV'])) AND ($desc['StemV'] == 70)) {
+ $desc['StemV'] = 120;
+ }
+ $this->setFontBuffer($fontkey, array('i' => $this->numfonts, 'type' => $type, 'name' => $sname, 'desc' => $desc, 'cidinfo' => $cidinfo, 'up' => $up, 'ut' => $ut, 'cw' => $cw, 'dw' => $dw, 'enc' => $enc));
+ } elseif ($type == 'core') {
+ $this->setFontBuffer($fontkey, array('i' => $this->numfonts, 'type' => 'core', 'name' => $this->CoreFonts[$fontkey], 'up' => -100, 'ut' => 50, 'cw' => $cw, 'dw' => $dw));
+ } elseif (($type == 'TrueType') OR ($type == 'Type1')) {
+ $this->setFontBuffer($fontkey, array('i' => $this->numfonts, 'type' => $type, 'name' => $name, 'up' => $up, 'ut' => $ut, 'cw' => $cw, 'dw' => $dw, 'file' => $file, 'enc' => $enc, 'desc' => $desc));
+ } elseif ($type == 'TrueTypeUnicode') {
+ $this->setFontBuffer($fontkey, array('i' => $this->numfonts, 'type' => $type, 'name' => $name, 'desc' => $desc, 'up' => $up, 'ut' => $ut, 'cw' => $cw, 'dw' => $dw, 'enc' => $enc, 'file' => $file, 'ctg' => $ctg));
+ } else {
+ $this->Error('Unknow font type: '.$type.'');
+ }
+ if (isset($diff) AND (!empty($diff))) {
+ //Search existing encodings
+ $d = 0;
+ $nb = count($this->diffs);
+ for($i=1; $i <= $nb; ++$i) {
+ if ($this->diffs[$i] == $diff) {
+ $d = $i;
+ break;
+ }
+ }
+ if ($d == 0) {
+ $d = $nb + 1;
+ $this->diffs[$d] = $diff;
+ }
+ $this->setFontSubBuffer($fontkey, 'diff', $d);
+ }
+ if (!empty($file)) {
+ if ((strcasecmp($type,'TrueType') == 0) OR (strcasecmp($type, 'TrueTypeUnicode') == 0)) {
+ $this->FontFiles[$file] = array('length1' => $originalsize, 'fontdir' => $fontdir);
+ } elseif ($type != 'core') {
+ $this->FontFiles[$file] = array('length1' => $size1, 'length2' => $size2, 'fontdir' => $fontdir);
+ }
+ }
+ return $fontdata;
+ }
+
+ /**
+ * Sets the font used to print character strings.
+ * The font can be either a standard one or a font added via the AddFont() method. Standard fonts use Windows encoding cp1252 (Western Europe).
+ * The method can be called before the first page is created and the font is retained from page to page.
+ * If you just wish to change the current font size, it is simpler to call SetFontSize().
+ * Note: for the standard fonts, the font metric files must be accessible. There are three possibilities for this:<ul><li>They are in the current directory (the one where the running script lies)</li><li>They are in one of the directories defined by the include_path parameter</li><li>They are in the directory defined by the K_PATH_FONTS constant</li></ul><br />
+ * @param string $family Family font. It can be either a name defined by AddFont() or one of the standard Type1 families (case insensitive):<ul><li>times (Times-Roman)</li><li>timesb (Times-Bold)</li><li>timesi (Times-Italic)</li><li>timesbi (Times-BoldItalic)</li><li>helvetica (Helvetica)</li><li>helveticab (Helvetica-Bold)</li><li>helveticai (Helvetica-Oblique)</li><li>helveticabi (Helvetica-BoldOblique)</li><li>courier (Courier)</li><li>courierb (Courier-Bold)</li><li>courieri (Courier-Oblique)</li><li>courierbi (Courier-BoldOblique)</li><li>symbol (Symbol)</li><li>zapfdingbats (ZapfDingbats)</li></ul> It is also possible to pass an empty string. In that case, the current family is retained.
+ * @param string $style Font style. Possible values are (case insensitive):<ul><li>empty string: regular</li><li>B: bold</li><li>I: italic</li><li>U: underline</li><li>D: line trough</li></ul> or any combination. The default value is regular. Bold and italic styles do not apply to Symbol and ZapfDingbats basic fonts or other fonts when not defined.
+ * @param float $size Font size in points. The default value is the current size. If no size has been specified since the beginning of the document, the value taken is 12
+ * @param string $fontfile The font definition file. By default, the name is built from the family and style, in lower case with no spaces.
+ * @access public
+ * @since 1.0
+ * @see AddFont(), SetFontSize()
+ */
+ public function SetFont($family, $style='', $size=0, $fontfile='') {
+ //Select a font; size given in points
+ if ($size == 0) {
+ $size = $this->FontSizePt;
+ }
+ // try to add font (if not already added)
+ $fontdata = $this->AddFont($family, $style, $fontfile);
+ $this->FontFamily = $fontdata['family'];
+ $this->FontStyle = $fontdata['style'];
+ $this->CurrentFont = $this->getFontBuffer($fontdata['fontkey']);
+ $this->SetFontSize($size);
+ }
+
+ /**
+ * Defines the size of the current font.
+ * @param float $size The size (in points)
+ * @access public
+ * @since 1.0
+ * @see SetFont()
+ */
+ public function SetFontSize($size) {
+ //Set font size in points
+ $this->FontSizePt = $size;
+ $this->FontSize = $size / $this->k;
+ if (isset($this->CurrentFont['desc']['Ascent']) AND ($this->CurrentFont['desc']['Ascent'] > 0)) {
+ $this->FontAscent = $this->CurrentFont['desc']['Ascent'] * $this->FontSize / 1000;
+ } else {
+ $this->FontAscent = 0.8 * $this->FontSize;
+ }
+ if (isset($this->CurrentFont['desc']['Descent']) AND ($this->CurrentFont['desc']['Descent'] > 0)) {
+ $this->FontDescent = - $this->CurrentFont['desc']['Descent'] * $this->FontSize / 1000;
+ } else {
+ $this->FontDescent = 0.2 * $this->FontSize;
+ }
+ if (($this->page > 0) AND (isset($this->CurrentFont['i']))) {
+ $this->_out(sprintf('BT /F%d %.2F Tf ET', $this->CurrentFont['i'], $this->FontSizePt));
+ }
+ }
+
+ /**
+ * Defines the default monospaced font.
+ * @param string $font Font name.
+ * @access public
+ * @since 4.5.025
+ */
+ public function SetDefaultMonospacedFont($font) {
+ $this->default_monospaced_font = $font;
+ }
+
+ /**
+ * Creates a new internal link and returns its identifier. An internal link is a clickable area which directs to another place within the document.<br />
+ * The identifier can then be passed to Cell(), Write(), Image() or Link(). The destination is defined with SetLink().
+ * @access public
+ * @since 1.5
+ * @see Cell(), Write(), Image(), Link(), SetLink()
+ */
+ public function AddLink() {
+ //Create a new internal link
+ $n = count($this->links) + 1;
+ $this->links[$n] = array(0, 0);
+ return $n;
+ }
+
+ /**
+ * Defines the page and position a link points to.
+ * @param int $link The link identifier returned by AddLink()
+ * @param float $y Ordinate of target position; -1 indicates the current position. The default value is 0 (top of page)
+ * @param int $page Number of target page; -1 indicates the current page. This is the default value
+ * @access public
+ * @since 1.5
+ * @see AddLink()
+ */
+ public function SetLink($link, $y=0, $page=-1) {
+ if ($y == -1) {
+ $y = $this->y;
+ }
+ if ($page == -1) {
+ $page = $this->page;
+ }
+ $this->links[$link] = array($page, $y);
+ }
+
+ /**
+ * Puts a link on a rectangular area of the page.
+ * Text or image links are generally put via Cell(), Write() or Image(), but this method can be useful for instance to define a clickable area inside an image.
+ * @param float $x Abscissa of the upper-left corner of the rectangle
+ * @param float $y Ordinate of the upper-left corner of the rectangle
+ * @param float $w Width of the rectangle
+ * @param float $h Height of the rectangle
+ * @param mixed $link URL or identifier returned by AddLink()
+ * @param int $spaces number of spaces on the text to link
+ * @access public
+ * @since 1.5
+ * @see AddLink(), Annotation(), Cell(), Write(), Image()
+ */
+ public function Link($x, $y, $w, $h, $link, $spaces=0) {
+ $this->Annotation($x, $y, $w, $h, $link, array('Subtype'=>'Link'), $spaces);
+ }
+
+ /**
+ * Puts a markup annotation on a rectangular area of the page.
+ * !!!!THE ANNOTATION SUPPORT IS NOT YET FULLY IMPLEMENTED !!!!
+ * @param float $x Abscissa of the upper-left corner of the rectangle
+ * @param float $y Ordinate of the upper-left corner of the rectangle
+ * @param float $w Width of the rectangle
+ * @param float $h Height of the rectangle
+ * @param string $text annotation text or alternate content
+ * @param array $opt array of options (see section 8.4 of PDF reference 1.7).
+ * @param int $spaces number of spaces on the text to link
+ * @access public
+ * @since 4.0.018 (2008-08-06)
+ */
+ public function Annotation($x, $y, $w, $h, $text, $opt=array('Subtype'=>'Text'), $spaces=0) {
+ // recalculate coordinates to account for graphic transformations
+ if (isset($this->transfmatrix)) {
+ $maxid = count($this->transfmatrix) - 1;
+ for ($i=$maxid; $i >= 0; $i--) {
+ $ctm = $this->transfmatrix[$i];
+ if (isset($ctm['a'])) {
+ $x = $x * $this->k;
+ $y = ($this->h - $y) * $this->k;
+ $w = $w * $this->k;
+ $h = $h * $this->k;
+ // top left
+ $xt = $x;
+ $yt = $y;
+ $x1 = ($ctm['a'] * $xt) + ($ctm['c'] * $yt) + $ctm['e'];
+ $y1 = ($ctm['b'] * $xt) + ($ctm['d'] * $yt) + $ctm['f'];
+ // top right
+ $xt = $x + $w;
+ $yt = $y;
+ $x2 = ($ctm['a'] * $xt) + ($ctm['c'] * $yt) + $ctm['e'];
+ $y2 = ($ctm['b'] * $xt) + ($ctm['d'] * $yt) + $ctm['f'];
+ // bottom left
+ $xt = $x;
+ $yt = $y - $h;
+ $x3 = ($ctm['a'] * $xt) + ($ctm['c'] * $yt) + $ctm['e'];
+ $y3 = ($ctm['b'] * $xt) + ($ctm['d'] * $yt) + $ctm['f'];
+ // bottom right
+ $xt = $x + $w;
+ $yt = $y - $h;
+ $x4 = ($ctm['a'] * $xt) + ($ctm['c'] * $yt) + $ctm['e'];
+ $y4 = ($ctm['b'] * $xt) + ($ctm['d'] * $yt) + $ctm['f'];
+ // new coordinates (rectangle area)
+ $x = min($x1, $x2, $x3, $x4);
+ $y = max($y1, $y2, $y3, $y4);
+ $w = (max($x1, $x2, $x3, $x4) - $x) / $this->k;
+ $h = ($y - min($y1, $y2, $y3, $y4)) / $this->k;
+ $x = $x / $this->k;
+ $y = $this->h - ($y / $this->k);
+ }
+ }
+ }
+ $this->PageAnnots[$this->page][] = array('x' => $x, 'y' => $y, 'w' => $w, 'h' => $h, 'txt' => $text, 'opt' => $opt, 'numspaces' => $spaces);
+ if (($opt['Subtype'] == 'FileAttachment') AND (!empty($opt['FS'])) AND file_exists($opt['FS']) AND (!isset($this->embeddedfiles[basename($opt['FS'])]))) {
+ $this->embeddedfiles[basename($opt['FS'])] = array('file' => $opt['FS'], 'n' => ($this->n + count($this->embeddedfiles) + 10000));
+ }
+ }
+
+ /**
+ * Embedd the attached files.
+ * @since 4.4.000 (2008-12-07)
+ * @access protected
+ * @see Annotation()
+ */
+ protected function _putEmbeddedFiles() {
+ reset($this->embeddedfiles);
+ foreach ($this->embeddedfiles as $filename => $filedata) {
+ $data = file_get_contents($filedata['file']);
+ $filter = '';
+ if ($this->compress) {
+ $data = gzcompress($data);
+ $filter = ' /Filter /FlateDecode';
+ }
+ $this->offsets[$filedata['n']] = $this->bufferlen;
+ $this->_out($filedata['n'].' 0 obj');
+ $this->_out('<</Type /EmbeddedFile'.$filter.' /Length '.strlen($data).' >>');
+ $this->_putstream($data);
+ $this->_out('endobj');
+ }
+ }
+
+ /**
+ * Prints a character string.
+ * The origin is on the left of the first charcter, on the baseline.
+ * This method allows to place a string precisely on the page.
+ * @param float $x Abscissa of the origin
+ * @param float $y Ordinate of the origin
+ * @param string $txt String to print
+ * @param int $stroke outline size in points (0 = disable)
+ * @param boolean $clip if true activate clipping mode (you must call StartTransform() before this function and StopTransform() to stop the clipping tranformation).
+ * @access public
+ * @since 1.0
+ * @deprecated deprecated since version 4.3.005 (2008-11-25)
+ * @see Cell(), Write(), MultiCell(), WriteHTML(), WriteHTMLCell()
+ */
+ public function Text($x, $y, $txt, $stroke=0, $clip=false) {
+ //Output a string
+ if ($this->rtl) {
+ // bidirectional algorithm (some chars may be changed affecting the line length)
+ $s = $this->utf8Bidi($this->UTF8StringToArray($txt), $this->tmprtl);
+ $l = $this->GetArrStringWidth($s);
+ $xr = $this->w - $x - $this->GetArrStringWidth($s);
+ } else {
+ $xr = $x;
+ }
+ $opt = '';
+ if (($stroke > 0) AND (!$clip)) {
+ $opt .= '1 Tr '.intval($stroke).' w ';
+ } elseif (($stroke > 0) AND $clip) {
+ $opt .= '5 Tr '.intval($stroke).' w ';
+ } elseif ($clip) {
+ $opt .= '7 Tr ';
+ }
+ $s = sprintf('BT %.2F %.2F Td %s(%s) Tj ET 0 Tr', $xr * $this->k, ($this->h-$y) * $this->k, $opt, $this->_escapetext($txt));
+ if ($this->underline AND ($txt!='')) {
+ $s .= ' '.$this->_dounderline($xr, $y, $txt);
+ }
+ if ($this->linethrough AND ($txt!='')) {
+ $s .= ' '.$this->_dolinethrough($xr, $y, $txt);
+ }
+ if ($this->ColorFlag AND (!$clip)) {
+ $s='q '.$this->TextColor.' '.$s.' Q';
+ }
+ $this->_out($s);
+ }
+
+ /**
+ * Whenever a page break condition is met, the method is called, and the break is issued or not depending on the returned value.
+ * The default implementation returns a value according to the mode selected by SetAutoPageBreak().<br />
+ * This method is called automatically and should not be called directly by the application.
+ * @return boolean
+ * @access public
+ * @since 1.4
+ * @see SetAutoPageBreak()
+ */
+ public function AcceptPageBreak() {
+ return $this->AutoPageBreak;
+ }
+
+ /**
+ * Add page if needed.
+ * @param float $h Cell height. Default value: 0.
+ * @return boolean true in case of page break, false otherwise.
+ * @since 3.2.000 (2008-07-01)
+ * @access protected
+ */
+ protected function checkPageBreak($h) {
+ if ((($this->y + $h) > $this->PageBreakTrigger) AND (!$this->InFooter) AND ($this->AcceptPageBreak())) {
+ //Automatic page break
+ $x = $this->x;
+ $this->AddPage($this->CurOrientation);
+ $this->y = $this->tMargin;
+ $oldpage = $this->page - 1;
+ if ($this->rtl) {
+ if ($this->pagedim[$this->page]['orm'] != $this->pagedim[$oldpage]['orm']) {
+ $this->x = $x - ($this->pagedim[$this->page]['orm'] - $this->pagedim[$oldpage]['orm']);
+ } else {
+ $this->x = $x;
+ }
+ } else {
+ if ($this->pagedim[$this->page]['olm'] != $this->pagedim[$oldpage]['olm']) {
+ $this->x = $x + ($this->pagedim[$this->page]['olm'] - $this->pagedim[$oldpage]['olm']);
+ } else {
+ $this->x = $x;
+ }
+ }
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Prints a cell (rectangular area) with optional borders, background color and character string. The upper-left corner of the cell corresponds to the current position. The text can be aligned or centered. After the call, the current position moves to the right or to the next line. It is possible to put a link on the text.<br />
+ * If automatic page breaking is enabled and the cell goes beyond the limit, a page break is done before outputting.
+ * @param float $w Cell width. If 0, the cell extends up to the right margin.
+ * @param float $h Cell height. Default value: 0.
+ * @param string $txt String to print. Default value: empty string.
+ * @param mixed $border Indicates if borders must be drawn around the cell. The value can be either a number:<ul><li>0: no border (default)</li><li>1: frame</li></ul>or a string containing some or all of the following characters (in any order):<ul><li>L: left</li><li>T: top</li><li>R: right</li><li>B: bottom</li></ul>
+ * @param int $ln Indicates where the current position should go after the call. Possible values are:<ul><li>0: to the right (or left for RTL languages)</li><li>1: to the beginning of the next line</li><li>2: below</li></ul>
+ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0.
+ * @param string $align Allows to center or align the text. Possible values are:<ul><li>L or empty string: left align (default value)</li><li>C: center</li><li>R: right align</li><li>J: justify</li></ul>
+ * @param int $fill Indicates if the cell background must be painted (1) or transparent (0). Default value: 0.
+ * @param mixed $link URL or identifier returned by AddLink().
+ * @param int $stretch stretch carachter mode: <ul><li>0 = disabled</li><li>1 = horizontal scaling only if necessary</li><li>2 = forced horizontal scaling</li><li>3 = character spacing only if necessary</li><li>4 = forced character spacing</li></ul>
+ * @param boolean $ignore_min_height if true ignore automatic minimum height value.
+ * @access public
+ * @since 1.0
+ * @see SetFont(), SetDrawColor(), SetFillColor(), SetTextColor(), SetLineWidth(), AddLink(), Ln(), MultiCell(), Write(), SetAutoPageBreak()
+ */
+ public function Cell($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=0, $link='', $stretch=0, $ignore_min_height=false) {
+ //$min_cell_height = $this->FontAscent + $this->FontDescent;
+ $min_cell_height = $this->FontSize * $this->cell_height_ratio;
+ if ($h < $min_cell_height) {
+ $h = $min_cell_height;
+ }
+ $this->checkPageBreak($h);
+ $this->_out($this->getCellCode($w, $h, $txt, $border, $ln, $align, $fill, $link, $stretch, $ignore_min_height));
+ }
+
+ /**
+ * Removes SHY characters from text.
+ * @param string $txt input string
+ * @return string without SHY characters.
+ * @access public
+ * @since (4.5.019) 2009-02-28
+ */
+ public function removeSHY($txt='') {
+ /*
+ * Unicode Data
+ * Name : SOFT HYPHEN, commonly abbreviated as SHY
+ * HTML Entity (decimal): &#173;
+ * HTML Entity (hex): &#xad;
+ * HTML Entity (named): &shy;
+ * How to type in Microsoft Windows: [Alt +00AD] or [Alt 0173]
+ * UTF-8 (hex): 0xC2 0xAD (c2ad)
+ * UTF-8 character: chr(194).chr(173)
+ */
+ $txt = preg_replace('/([\\xc2]{1}[\\xad]{1})/', '', $txt);
+ if (!$this->isunicode) {
+ $txt = preg_replace('/([\\xad]{1})/', '', $txt);
+ }
+ return $txt;
+ }
+
+ /**
+ * Returns the PDF string code to print a cell (rectangular area) with optional borders, background color and character string. The upper-left corner of the cell corresponds to the current position. The text can be aligned or centered. After the call, the current position moves to the right or to the next line. It is possible to put a link on the text.<br />
+ * If automatic page breaking is enabled and the cell goes beyond the limit, a page break is done before outputting.
+ * @param float $w Cell width. If 0, the cell extends up to the right margin.
+ * @param float $h Cell height. Default value: 0.
+ * @param string $txt String to print. Default value: empty string.
+ * @param mixed $border Indicates if borders must be drawn around the cell. The value can be either a number:<ul><li>0: no border (default)</li><li>1: frame</li></ul>or a string containing some or all of the following characters (in any order):<ul><li>L: left</li><li>T: top</li><li>R: right</li><li>B: bottom</li></ul>
+ * @param int $ln Indicates where the current position should go after the call. Possible values are:<ul><li>0: to the right (or left for RTL languages)</li><li>1: to the beginning of the next line</li><li>2: below</li></ul>Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0.
+ * @param string $align Allows to center or align the text. Possible values are:<ul><li>L or empty string: left align (default value)</li><li>C: center</li><li>R: right align</li><li>J: justify</li></ul>
+ * @param int $fill Indicates if the cell background must be painted (1) or transparent (0). Default value: 0.
+ * @param mixed $link URL or identifier returned by AddLink().
+ * @param int $stretch stretch carachter mode: <ul><li>0 = disabled</li><li>1 = horizontal scaling only if necessary</li><li>2 = forced horizontal scaling</li><li>3 = character spacing only if necessary</li><li>4 = forced character spacing</li></ul>
+ * @param boolean $ignore_min_height if true ignore automatic minimum height value.
+ * @access protected
+ * @since 1.0
+ * @see Cell()
+ */
+ protected function getCellCode($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=0, $link='', $stretch=0, $ignore_min_height=false) {
+ $txt = $this->removeSHY($txt);
+ $rs = ''; //string to be returned
+ if (!$ignore_min_height) {
+ $min_cell_height = $this->FontSize * $this->cell_height_ratio;
+ if ($h < $min_cell_height) {
+ $h = $min_cell_height;
+ }
+ }
+ $k = $this->k;
+ if (empty($w) OR ($w <= 0)) {
+ if ($this->rtl) {
+ $w = $this->x - $this->lMargin;
+ } else {
+ $w = $this->w - $this->rMargin - $this->x;
+ }
+ }
+ $s = '';
+ if (($fill == 1) OR ($border == 1)) {
+ if ($fill == 1) {
+ $op = ($border == 1) ? 'B' : 'f';
+ } else {
+ $op = 'S';
+ }
+ if ($this->rtl) {
+ $xk = (($this->x - $w) * $k);
+ } else {
+ $xk = ($this->x * $k);
+ }
+ $s .= sprintf('%.2F %.2F %.2F %.2F re %s ', $xk, (($this->h - $this->y) * $k), ($w * $k), (-$h * $k), $op);
+ }
+ if (is_string($border)) {
+ $lm = ($this->LineWidth / 2);
+ $x = $this->x;
+ $y = $this->y;
+ if (strpos($border,'L') !== false) {
+ if ($this->rtl) {
+ $xk = ($x - $w) * $k;
+ } else {
+ $xk = $x * $k;
+ }
+ $s .= sprintf('%.2F %.2F m %.2F %.2F l S ', $xk, (($this->h - $y + $lm) * $k), $xk, (($this->h - ($y + $h + $lm)) * $k));
+ }
+ if (strpos($border,'T') !== false) {
+ if ($this->rtl) {
+ $xk = ($x - $w + $lm) * $k;
+ $xwk = ($x - $lm) * $k;
+ } else {
+ $xk = ($x - $lm) * $k;
+ $xwk = ($x + $w + $lm) * $k;
+ }
+ $s .= sprintf('%.2F %.2F m %.2F %.2F l S ', $xk, (($this->h - $y) * $k), $xwk, (($this->h - $y) * $k));
+ }
+ if (strpos($border,'R') !== false) {
+ if ($this->rtl) {
+ $xk = $x * $k;
+ } else {
+ $xk = ($x + $w) * $k;
+ }
+ $s .= sprintf('%.2F %.2F m %.2F %.2F l S ', $xk, (($this->h - $y + $lm) * $k), $xk, (($this->h - ($y + $h + $lm))* $k));
+ }
+ if (strpos($border,'B') !== false) {
+ if ($this->rtl) {
+ $xk = ($x - $w + $lm) * $k;
+ $xwk = ($x - $lm) * $k;
+ } else {
+ $xk = ($x - $lm) * $k;
+ $xwk = ($x + $w + $lm) * $k;
+ }
+ $s .= sprintf('%.2F %.2F m %.2F %.2F l S ', $xk, (($this->h - ($y + $h)) * $k), $xwk, (($this->h - ($y + $h)) * $k));
+ }
+ }
+ if ($txt != '') {
+ // text lenght
+ $width = $this->GetStringWidth($txt);
+ // ratio between cell lenght and text lenght
+ $ratio = ($w - (2 * $this->cMargin)) / $width;
+
+ // stretch text if required
+ if (($stretch > 0) AND (($ratio < 1) OR (($ratio > 1) AND (($stretch % 2) == 0)))) {
+ if ($stretch > 2) {
+ // spacing
+ //Calculate character spacing in points
+ $char_space = (($w - $width - (2 * $this->cMargin)) * $this->k) / max($this->GetNumChars($txt)-1,1);
+ //Set character spacing
+ $rs .= sprintf('BT %.2F Tc ET ', $char_space);
+ } else {
+ // scaling
+ //Calculate horizontal scaling
+ $horiz_scale = $ratio * 100.0;
+ //Set horizontal scaling
+ $rs .= sprintf('BT %.2F Tz ET ', $horiz_scale);
+ }
+ $align = '';
+ $width = $w - (2 * $this->cMargin);
+ } else {
+ $stretch == 0;
+ }
+ if ($align == 'L') {
+ if ($this->rtl) {
+ $dx = $w - $width - $this->cMargin;
+ } else {
+ $dx = $this->cMargin;
+ }
+ } elseif ($align == 'R') {
+ if ($this->rtl) {
+ $dx = $this->cMargin;
+ } else {
+ $dx = $w - $width - $this->cMargin;
+ }
+ } elseif ($align == 'C') {
+ $dx = ($w - $width) / 2;
+ } elseif ($align == 'J') {
+ if ($this->rtl) {
+ $dx = $w - $width - $this->cMargin;
+ } else {
+ $dx = $this->cMargin;
+ }
+ } else {
+ $dx = $this->cMargin;
+ }
+ if ($this->ColorFlag) {
+ $s .= 'q '.$this->TextColor.' ';
+ }
+ $txt2 = $this->_escapetext($txt);
+ if ($this->rtl) {
+ $xdk = ($this->x - $dx - $width) * $k;
+ } else {
+ $xdk = ($this->x + $dx) * $k;
+ }
+ // Justification
+ if ($align == 'J') {
+ // count number of spaces
+ $ns = substr_count($txt, ' ');
+ if (($this->CurrentFont['type'] == 'TrueTypeUnicode') OR ($this->CurrentFont['type'] == 'cidfont0')) {
+ // get string width without spaces
+ $width = $this->GetStringWidth(str_replace(' ', '', $txt));
+ // calculate average space width
+ $spacewidth = ($w - $width - (2 * $this->cMargin)) / ($ns?$ns:1) / $this->FontSize / $this->k;
+ // set word position to be used with TJ operator
+ $txt2 = str_replace(chr(0).' ', ') '.(-2830 * $spacewidth).' (', $txt2);
+ } else {
+ // get string width
+ $width = $this->GetStringWidth($txt);
+ $spacewidth = (($w - $width - (2 * $this->cMargin)) / ($ns?$ns:1)) * $this->k;
+ $rs .= sprintf('BT %.3F Tw ET ', $spacewidth);
+ }
+ }
+ // calculate approximate position of the font base line
+ //$basefonty = $this->y + (($h + $this->FontAscent - $this->FontDescent)/2);
+ $basefonty = $this->y + ($h/2) + ($this->FontSize/3);
+ // print text
+ $s .= sprintf('BT %.2F %.2F Td [(%s)] TJ ET', $xdk, (($this->h - $basefonty) * $k), $txt2);
+ if ($this->rtl) {
+ $xdx = $this->x - $dx - $width;
+ } else {
+ $xdx = $this->x + $dx;
+ }
+ if ($this->underline) {
+ $s .= ' '.$this->_dounderline($xdx, $basefonty, $txt);
+ }
+ if ($this->linethrough) {
+ $s .= ' '.$this->_dolinethrough($xdx, $basefonty, $txt);
+ }
+ if ($this->ColorFlag) {
+ $s .= ' Q';
+ }
+ if ($link) {
+ $this->Link($xdx, $this->y + (($h - $this->FontSize)/2), $width, $this->FontSize, $link, substr_count($txt, chr(32)));
+ }
+ }
+ // output cell
+ if ($s) {
+ // output cell
+ $rs .= $s;
+ // reset text stretching
+ if ($stretch > 2) {
+ //Reset character horizontal spacing
+ $rs .= ' BT 0 Tc ET';
+ } elseif ($stretch > 0) {
+ //Reset character horizontal scaling
+ $rs .= ' BT 100 Tz ET';
+ }
+ }
+ // reset word spacing
+ if (!(($this->CurrentFont['type'] == 'TrueTypeUnicode') OR ($this->CurrentFont['type'] == 'cidfont0')) AND ($align == 'J')) {
+ $rs .= ' BT 0 Tw ET';
+ }
+ $this->lasth = $h;
+ if ($ln > 0) {
+ //Go to the beginning of the next line
+ $this->y += $h;
+ if ($ln == 1) {
+ if ($this->rtl) {
+ $this->x = $this->w - $this->rMargin;
+ } else {
+ $this->x = $this->lMargin;
+ }
+ }
+ } else {
+ // go left or right by case
+ if ($this->rtl) {
+ $this->x -= $w;
+ } else {
+ $this->x += $w;
+ }
+ }
+ $gstyles = ''.$this->linestyleWidth.' '.$this->linestyleCap.' '.$this->linestyleJoin.' '.$this->linestyleDash.' '.$this->DrawColor.' '.$this->FillColor."\n";
+ $rs = $gstyles.$rs;
+ return $rs;
+ }
+
+ /**
+ * This method allows printing text with line breaks.
+ * They can be automatic (as soon as the text reaches the right border of the cell) or explicit (via the \n character). As many cells as necessary are output, one below the other.<br />
+ * Text can be aligned, centered or justified. The cell block can be framed and the background painted.
+ * @param float $w Width of cells. If 0, they extend up to the right margin of the page.
+ * @param float $h Cell minimum height. The cell extends automatically if needed.
+ * @param string $txt String to print
+ * @param mixed $border Indicates if borders must be drawn around the cell block. The value can be either a number:<ul><li>0: no border (default)</li><li>1: frame</li></ul>or a string containing some or all of the following characters (in any order):<ul><li>L: left</li><li>T: top</li><li>R: right</li><li>B: bottom</li></ul>
+ * @param string $align Allows to center or align the text. Possible values are:<ul><li>L or empty string: left align</li><li>C: center</li><li>R: right align</li><li>J: justification (default value when $ishtml=false)</li></ul>
+ * @param int $fill Indicates if the cell background must be painted (1) or transparent (0). Default value: 0.
+ * @param int $ln Indicates where the current position should go after the call. Possible values are:<ul><li>0: to the right</li><li>1: to the beginning of the next line [DEFAULT]</li><li>2: below</li></ul>
+ * @param int $x x position in user units
+ * @param int $y y position in user units
+ * @param boolean $reseth if true reset the last cell height (default true).
+ * @param int $stretch stretch carachter mode: <ul><li>0 = disabled</li><li>1 = horizontal scaling only if necessary</li><li>2 = forced horizontal scaling</li><li>3 = character spacing only if necessary</li><li>4 = forced character spacing</li></ul>
+ * @param boolean $ishtml set to true if $txt is HTML content (default = false).
+ * @param boolean $autopadding if true, uses internal padding and automatically adjust it to account for line width.
+ * @param float $maxh maximum height. It should be >= $h and less then remaining space to the bottom of the page, or 0 for disable this feature. This feature works only when $ishtml=false.
+ * @return int Return the number of cells or 1 for html mode.
+ * @access public
+ * @since 1.3
+ * @see SetFont(), SetDrawColor(), SetFillColor(), SetTextColor(), SetLineWidth(), Cell(), Write(), SetAutoPageBreak()
+ */
+ public function MultiCell($w, $h, $txt, $border=0, $align='J', $fill=0, $ln=1, $x='', $y='', $reseth=true, $stretch=0, $ishtml=false, $autopadding=true, $maxh=0) {
+ if (empty($this->lasth) OR $reseth) {
+ //set row height
+ $this->lasth = $this->FontSize * $this->cell_height_ratio;
+ }
+ if (!empty($y)) {
+ $this->SetY($y);
+ } else {
+ $y = $this->GetY();
+ }
+ // check for page break
+ $this->checkPageBreak($h);
+ $y = $this->GetY();
+ // get current page number
+ $startpage = $this->page;
+ if (!empty($x)) {
+ $this->SetX($x);
+ } else {
+ $x = $this->GetX();
+ }
+ if (empty($w) OR ($w <= 0)) {
+ if ($this->rtl) {
+ $w = $this->x - $this->lMargin;
+ } else {
+ $w = $this->w - $this->rMargin - $this->x;
+ }
+ }
+ // store original margin values
+ $lMargin = $this->lMargin;
+ $rMargin = $this->rMargin;
+ if ($this->rtl) {
+ $this->SetRightMargin($this->w - $this->x);
+ $this->SetLeftMargin($this->x - $w);
+ } else {
+ $this->SetLeftMargin($this->x);
+ $this->SetRightMargin($this->w - $this->x - $w);
+ }
+ $starty = $this->y;
+ if ($autopadding) {
+ // Adjust internal padding
+ if ($this->cMargin < ($this->LineWidth / 2)) {
+ $this->cMargin = ($this->LineWidth / 2);
+ }
+ // Add top space if needed
+ if (($this->lasth - $this->FontSize) < $this->LineWidth) {
+ $this->y += $this->LineWidth / 2;
+ }
+ // add top padding
+ $this->y += $this->cMargin;
+ }
+ if ($ishtml) {
+ // ******* Write HTML text
+ $this->writeHTML($txt, true, 0, $reseth, true, $align);
+ $nl = 1;
+ } else {
+ // ******* Write text
+ $nl = $this->Write($this->lasth, $txt, '', 0, $align, true, $stretch, false, false, $maxh);
+ }
+ if ($autopadding) {
+ // add bottom padding
+ $this->y += $this->cMargin;
+ // Add bottom space if needed
+ if (($this->lasth - $this->FontSize) < $this->LineWidth) {
+ $this->y += $this->LineWidth / 2;
+ }
+ }
+ // Get end-of-text Y position
+ $currentY = $this->GetY();
+ // get latest page number
+ $endpage = $this->page;
+ // check if a new page has been created
+ if ($endpage > $startpage) {
+ // design borders around HTML cells.
+ for ($page=$startpage; $page <= $endpage; ++$page) {
+ $this->setPage($page);
+ if ($page == $startpage) {
+ $this->y = $starty; // put cursor at the beginning of cell on the first page
+ $h = $this->getPageHeight() - $starty - $this->getBreakMargin();
+ $cborder = $this->getBorderMode($border, $position='start');
+ } elseif ($page == $endpage) {
+ $this->y = $this->tMargin; // put cursor at the beginning of last page
+ $h = $currentY - $this->tMargin;
+ $cborder = $this->getBorderMode($border, $position='end');
+ } else {
+ $this->y = $this->tMargin; // put cursor at the beginning of the current page
+ $h = $this->getPageHeight() - $this->tMargin - $this->getBreakMargin();
+ $cborder = $this->getBorderMode($border, $position='middle');
+ }
+ $nx = $x;
+ // account for margin changes
+ if ($page > $startpage) {
+ if (($this->rtl) AND ($this->pagedim[$page]['orm'] != $this->pagedim[$startpage]['orm'])) {
+ $nx = $x + ($this->pagedim[$page]['orm'] - $this->pagedim[$startpage]['orm']);
+ } elseif ((!$this->rtl) AND ($this->pagedim[$page]['olm'] != $this->pagedim[$startpage]['olm'])) {
+ $nx = $x + ($this->pagedim[$page]['olm'] - $this->pagedim[$startpage]['olm']);
+ }
+ }
+ $this->SetX($nx);
+ $ccode = $this->getCellCode($w, $h, '', $cborder, 1, '', $fill, '', 0, false);
+ if ($cborder OR $fill) {
+ $pstart = substr($this->getPageBuffer($this->page), 0, $this->intmrk[$this->page]);
+ $pend = substr($this->getPageBuffer($this->page), $this->intmrk[$this->page]);
+ $this->setPageBuffer($this->page, $pstart.$ccode."\n".$pend);
+ $this->intmrk[$this->page] += strlen($ccode."\n");
+ }
+ }
+ } else {
+ $h = max($h, ($currentY - $y));
+ // put cursor at the beginning of text
+ $this->SetY($y);
+ $this->SetX($x);
+ // design a cell around the text
+ $ccode = $this->getCellCode($w, $h, '', $border, 1, '', $fill, '', 0, true);
+ if ($border OR $fill) {
+ if (end($this->transfmrk[$this->page]) !== false) {
+ $pagemarkkey = key($this->transfmrk[$this->page]);
+ $pagemark = &$this->transfmrk[$this->page][$pagemarkkey];
+ } elseif ($this->InFooter) {
+ $pagemark = &$this->footerpos[$this->page];
+ } else {
+ $pagemark = &$this->intmrk[$this->page];
+ }
+ $pstart = substr($this->getPageBuffer($this->page), 0, $pagemark);
+ $pend = substr($this->getPageBuffer($this->page), $pagemark);
+ $this->setPageBuffer($this->page, $pstart.$ccode."\n".$pend);
+ $pagemark += strlen($ccode."\n");
+ }
+ }
+ // Get end-of-cell Y position
+ $currentY = $this->GetY();
+ // restore original margin values
+ $this->SetLeftMargin($lMargin);
+ $this->SetRightMargin($rMargin);
+ if ($ln > 0) {
+ //Go to the beginning of the next line
+ $this->SetY($currentY);
+ if ($ln == 2) {
+ $this->SetX($x + $w);
+ }
+ } else {
+ // go left or right by case
+ $this->setPage($startpage);
+ $this->y = $y;
+ $this->SetX($x + $w);
+ }
+ return $nl;
+ }
+
+ /**
+ * Get the border mode accounting for multicell position (opens bottom side of multicell crossing pages)
+ * @param mixed $border Indicates if borders must be drawn around the cell block. The value can be either a number:<ul><li>0: no border (default)</li><li>1: frame</li></ul>or a string containing some or all of the following characters (in any order):<ul><li>L: left</li><li>T: top</li><li>R: right</li><li>B: bottom</li></ul>
+ * @param string multicell position: 'start', 'middle', 'end'
+ * @return border mode
+ * @access protected
+ * @since 4.4.002 (2008-12-09)
+ */
+ protected function getBorderMode($border, $position='start') {
+ if ((!$this->opencell) AND ($border == 1)) {
+ return 1;
+ }
+ $cborder = '';
+ switch ($position) {
+ case 'start': {
+ if ($border == 1) {
+ $cborder = 'LTR';
+ } else {
+ if (!(false === strpos($border, 'L'))) {
+ $cborder .= 'L';
+ }
+ if (!(false === strpos($border, 'T'))) {
+ $cborder .= 'T';
+ }
+ if (!(false === strpos($border, 'R'))) {
+ $cborder .= 'R';
+ }
+ if ((!$this->opencell) AND (!(false === strpos($border, 'B')))) {
+ $cborder .= 'B';
+ }
+ }
+ break;
+ }
+ case 'middle': {
+ if ($border == 1) {
+ $cborder = 'LR';
+ } else {
+ if (!(false === strpos($border, 'L'))) {
+ $cborder .= 'L';
+ }
+ if ((!$this->opencell) AND (!(false === strpos($border, 'T')))) {
+ $cborder .= 'T';
+ }
+ if (!(false === strpos($border, 'R'))) {
+ $cborder .= 'R';
+ }
+ if ((!$this->opencell) AND (!(false === strpos($border, 'B')))) {
+ $cborder .= 'B';
+ }
+ }
+ break;
+ }
+ case 'end': {
+ if ($border == 1) {
+ $cborder = 'LRB';
+ } else {
+ if (!(false === strpos($border, 'L'))) {
+ $cborder .= 'L';
+ }
+ if ((!$this->opencell) AND (!(false === strpos($border, 'T')))) {
+ $cborder .= 'T';
+ }
+ if (!(false === strpos($border, 'R'))) {
+ $cborder .= 'R';
+ }
+ if (!(false === strpos($border, 'B'))) {
+ $cborder .= 'B';
+ }
+ }
+ break;
+ }
+ default: {
+ $cborder = $border;
+ break;
+ }
+ }
+ return $cborder;
+ }
+
+ /**
+ * This method returns the estimated number of lines required to print the text.
+ * @param string $txt text to print
+ * @param float $w width of cell. If 0, they extend up to the right margin of the page.
+ * @return int Return the estimated number of lines.
+ * @access public
+ * @since 4.5.011
+ */
+ public function getNumLines($txt, $w=0) {
+ $lines = 0;
+ if (empty($w) OR ($w <= 0)) {
+ if ($this->rtl) {
+ $w = $this->x - $this->lMargin;
+ } else {
+ $w = $this->w - $this->rMargin - $this->x;
+ }
+ }
+ // max column width
+ $wmax = $w - (2 * $this->cMargin);
+ // remove carriage returns
+ $txt = str_replace("\r", '', $txt);
+ // divide text in blocks
+ $txtblocks = explode("\n", $txt);
+ // for each block;
+ foreach ($txtblocks as $block) {
+
+ $string = explode(" ", $block);
+ $sum = 0;
+ $lines = 1;
+ foreach($string as $word){
+
+ if($sum > 0){
+ if($this->GetStringWidth($word) + $sum < $wmax)
+ $sum += $this->GetStringWidth($word);
+ else{
+ $sum = $this->GetStringWidth($word);
+ $lines++;
+ }
+ }
+ else{
+ if($this->GetStringWidth($word) < $wmax)
+ $sum = $this->GetStringWidth($word);
+ else{
+ $lines++;
+ }
+
+ }
+ }
+
+ // estimate the number of lines
+ //$lines += empty($block) ? 1 : (ceil($this->GetStringWidth($block) / $wmax));
+ }
+ return $lines;
+ }
+
+ /**
+ * This method prints text from the current position.<br />
+ * @param float $h Line height
+ * @param string $txt String to print
+ * @param mixed $link URL or identifier returned by AddLink()
+ * @param int $fill Indicates if the background must be painted (1) or transparent (0). Default value: 0.
+ * @param string $align Allows to center or align the text. Possible values are:<ul><li>L or empty string: left align (default value)</li><li>C: center</li><li>R: right align</li><li>J: justify</li></ul>
+ * @param boolean $ln if true set cursor at the bottom of the line, otherwise set cursor at the top of the line.
+ * @param int $stretch stretch carachter mode: <ul><li>0 = disabled</li><li>1 = horizontal scaling only if necessary</li><li>2 = forced horizontal scaling</li><li>3 = character spacing only if necessary</li><li>4 = forced character spacing</li></ul>
+ * @param boolean $firstline if true prints only the first line and return the remaining string.
+ * @param boolean $firstblock if true the string is the starting of a line.
+ * @param float $maxh maximum height. The remaining unprinted text will be returned. It should be >= $h and less then remaining space to the bottom of the page, or 0 for disable this feature.
+ * @return mixed Return the number of cells or the remaining string if $firstline = true.
+ * @access public
+ * @since 1.5
+ */
+ public function Write($h, $txt, $link='', $fill=0, $align='', $ln=false, $stretch=0, $firstline=false, $firstblock=false, $maxh=0) {
+ // remove carriage returns
+ $s = str_replace("\r", '', $txt);
+ // check if string contains arabic text
+ if (preg_match(K_RE_PATTERN_ARABIC, $s)) {
+ $arabic = true;
+ } else {
+ $arabic = false;
+ }
+ // get a char width
+ $chrwidth = $this->GetCharWidth('.');
+ // get array of chars
+ $chars = $this->UTF8StringToArray($s);
+ // get the number of characters
+ $nb = count($chars);
+ // handle single space character
+ if (($nb == 1) AND preg_match('/[\s]/', $s)) {
+ if ($this->rtl) {
+ $this->x -= $this->GetStringWidth($s);
+ } else {
+ $this->x += $this->GetStringWidth($s);
+ }
+ return;
+ }
+ // replacement for SHY character (minus symbol)
+ $shy_replacement = 45;
+ $shy_replacement_char = $this->unichr($shy_replacement);
+ // widht for SHY replacement
+ $shy_replacement_width = $this->GetCharWidth($shy_replacement);
+ // store current position
+ $prevx = $this->x;
+ $prevy = $this->y;
+ // max Y
+ $maxy = $this->y + $maxh - $h - (2 * $this->cMargin);
+ // calculate remaining line width ($w)
+ if ($this->rtl) {
+ $w = $this->x - $this->lMargin;
+ } else {
+ $w = $this->w - $this->rMargin - $this->x;
+ }
+ // max column width
+ $wmax = $w - (2 * $this->cMargin);
+ $i = 0; // character position
+ $j = 0; // current starting position
+ $sep = -1; // position of the last blank space
+ $shy = false; // true if the last blank is a soft hypen (SHY)
+ $l = 0; // current string lenght
+ $nl = 0; //number of lines
+ $linebreak = false;
+ // for each character
+ while ($i < $nb) {
+ if (($maxh > 0) AND ($this->y >= $maxy) ) {
+ $firstline = true;
+ }
+ //Get the current character
+ $c = $chars[$i];
+ if ($c == 10) { // 10 = "\n" = new line
+ //Explicit line break
+ if ($align == 'J') {
+ if ($this->rtl) {
+ $talign = 'R';
+ } else {
+ $talign = 'L';
+ }
+ } else {
+ $talign = $align;
+ }
+ if ($firstline) {
+ $startx = $this->x;
+ $linew = $this->GetArrStringWidth($this->utf8Bidi(array_slice($chars, $j, $i), $this->tmprtl));
+ if ($this->rtl) {
+ $this->endlinex = $startx - $linew;
+ } else {
+ $this->endlinex = $startx + $linew;
+ }
+ $w = $linew;
+ $tmpcmargin = $this->cMargin;
+ if ($maxh == 0) {
+ $this->cMargin = 0;
+ }
+ }
+ $this->Cell($w, $h, $this->UTF8ArrSubString($chars, $j, $i), 0, 1, $talign, $fill, $link, $stretch);
+ if ($firstline) {
+ $this->cMargin = $tmpcmargin;
+ return ($this->UTF8ArrSubString($chars, $i));
+ }
+ ++$nl;
+ $j = $i + 1;
+ $l = 0;
+ $sep = -1;
+ $shy = false;
+ // account for margin changes
+ if ((($this->y + $this->lasth) > $this->PageBreakTrigger) AND (!$this->InFooter)) {
+ // AcceptPageBreak() may be overriden on extended classed to include margin changes
+ $this->AcceptPageBreak();
+ }
+ $w = $this->getRemainingWidth();
+ $wmax = $w - (2 * $this->cMargin);
+ } else {
+ // 160 is the non-breaking space, 173 is SHY (Soft Hypen)
+ if (($c != 160) AND (preg_match('/[\s]/', $this->unichr($c)) OR ($c == 173))) {
+ // update last blank space position
+ $sep = $i;
+ // check if is a SHY
+ if ($c == 173) {
+ $shy = true;
+ } else {
+ $shy = false;
+ }
+ }
+ // update string length
+ if ((($this->CurrentFont['type'] == 'TrueTypeUnicode') OR ($this->CurrentFont['type'] == 'cidfont0')) AND ($arabic)) {
+ // with bidirectional algorithm some chars may be changed affecting the line length
+ // *** very slow ***
+ $l = $this->GetArrStringWidth($this->utf8Bidi(array_slice($chars, $j, $i-$j+1), $this->tmprtl));
+ } else {
+ $l += $this->GetCharWidth($c);
+ }
+ if (($l > $wmax) OR ($shy AND (($l + $shy_replacement_width) > $wmax)) ) {
+ // we have reached the end of column
+ if ($sep == -1) {
+ // check if the line was already started
+ if (($this->rtl AND ($this->x <= ($this->w - $this->rMargin - $chrwidth)))
+ OR ((!$this->rtl) AND ($this->x >= ($this->lMargin + $chrwidth)))) {
+ // print a void cell and go to next line
+ $this->Cell($w, $h, '', 0, 1);
+ $linebreak = true;
+ if ($firstline) {
+ return ($this->UTF8ArrSubString($chars, $j));
+ }
+ } else {
+ // truncate the word because do not fit on column
+ if ($firstline) {
+ $startx = $this->x;
+ $linew = $this->GetArrStringWidth($this->utf8Bidi(array_slice($chars, $j, $i), $this->tmprtl));
+ if ($this->rtl) {
+ $this->endlinex = $startx - $linew;
+ } else {
+ $this->endlinex = $startx + $linew;
+ }
+ $w = $linew;
+ $tmpcmargin = $this->cMargin;
+ if ($maxh == 0) {
+ $this->cMargin = 0;
+ }
+ }
+ $this->Cell($w, $h, $this->UTF8ArrSubString($chars, $j, $i), 0, 1, $align, $fill, $link, $stretch);
+ if ($firstline) {
+ $this->cMargin = $tmpcmargin;
+ return ($this->UTF8ArrSubString($chars, $i));
+ }
+ $j = $i;
+ --$i;
+ }
+ } else {
+ // word wrapping
+ if ($this->rtl AND (!$firstblock)) {
+ $endspace = 1;
+ } else {
+ $endspace = 0;
+ }
+ if ($shy) {
+ // add hypen (minus symbol) at the end of the line
+ $shy_width = $shy_replacement_width;
+ if ($this->rtl) {
+ $shy_char_left = $shy_replacement_char;
+ $shy_char_right = '';
+ } else {
+ $shy_char_left = '';
+ $shy_char_right = $shy_replacement_char;
+ }
+ } else {
+ $shy_width = 0;
+ $shy_char_left = '';
+ $shy_char_right = '';
+ }
+ if ($firstline) {
+ $startx = $this->x;
+ $linew = $this->GetArrStringWidth($this->utf8Bidi(array_slice($chars, $j, ($sep + $endspace)), $this->tmprtl));
+ if ($this->rtl) {
+ $this->endlinex = $startx - $linew - $shy_width;
+ } else {
+ $this->endlinex = $startx + $linew + $shy_width;
+ }
+ $w = $linew;
+ $tmpcmargin = $this->cMargin;
+ if ($maxh == 0) {
+ $this->cMargin = 0;
+ }
+ }
+ // print the line
+ $this->Cell($w, $h, $shy_char_left.$this->UTF8ArrSubString($chars, $j, ($sep + $endspace)).$shy_char_right, 0, 1, $align, $fill, $link, $stretch);
+ if ($firstline) {
+ // return the remaining text
+ $this->cMargin = $tmpcmargin;
+ return ($this->UTF8ArrSubString($chars, ($sep + $endspace)));
+ }
+ $i = $sep;
+ $sep = -1;
+ $shy = false;
+ $j = ($i+1);
+ }
+ // account for margin changes
+ if ((($this->y + $this->lasth) > $this->PageBreakTrigger) AND (!$this->InFooter)) {
+ // AcceptPageBreak() may be overriden on extended classed to include margin changes
+ $this->AcceptPageBreak();
+ }
+ $w = $this->getRemainingWidth();
+ $wmax = $w - (2 * $this->cMargin);
+ if ($linebreak) {
+ $linebreak = false;
+ } else {
+ ++$nl;
+ $l = 0;
+ }
+ }
+ }
+ ++$i;
+ } // end while i < nb
+ // print last substring (if any)
+ if ($l > 0) {
+ switch ($align) {
+ case 'J':
+ case 'C': {
+ $w = $w;
+ break;
+ }
+ case 'L': {
+ if ($this->rtl) {
+ $w = $w;
+ } else {
+ $w = $l;
+ }
+ break;
+ }
+ case 'R': {
+ if ($this->rtl) {
+ $w = $l;
+ } else {
+ $w = $w;
+ }
+ break;
+ }
+ default: {
+ $w = $l;
+ break;
+ }
+ }
+ if ($firstline) {
+ $startx = $this->x;
+ $linew = $this->GetArrStringWidth($this->utf8Bidi(array_slice($chars, $j, $nb), $this->tmprtl));
+ if ($this->rtl) {
+ $this->endlinex = $startx - $linew;
+ } else {
+ $this->endlinex = $startx + $linew;
+ }
+ $w = $linew;
+ $tmpcmargin = $this->cMargin;
+ if ($maxh == 0) {
+ $this->cMargin = 0;
+ }
+ }
+ $this->Cell($w, $h, $this->UTF8ArrSubString($chars, $j, $nb), 0, $ln, $align, $fill, $link, $stretch);
+ if ($firstline) {
+ $this->cMargin = $tmpcmargin;
+ return ($this->UTF8ArrSubString($chars, $nb));
+ }
+ ++$nl;
+ }
+ if ($firstline) {
+ return '';
+ }
+ return $nl;
+ }
+
+ /**
+ * Returns the remaining width between the current position and margins.
+ * @return int Return the remaining width
+ * @access protected
+ */
+ protected function getRemainingWidth() {
+ if ($this->rtl) {
+ return ($this->x - $this->lMargin);
+ } else {
+ return ($this->w - $this->rMargin - $this->x);
+ }
+ }
+
+ /**
+ * Extract a slice of the $strarr array and return it as string.
+ * @param string $strarr The input array of characters.
+ * @param int $start the starting element of $strarr.
+ * @param int $end first element that will not be returned.
+ * @return Return part of a string
+ * @access public
+ */
+ public function UTF8ArrSubString($strarr, $start='', $end='') {
+ if (strlen($start) == 0) {
+ $start = 0;
+ }
+ if (strlen($end) == 0) {
+ $end = count($strarr);
+ }
+ $string = '';
+ for ($i=$start; $i < $end; ++$i) {
+ $string .= $this->unichr($strarr[$i]);
+ }
+ return $string;
+ }
+
+ /**
+ * Returns the unicode caracter specified by UTF-8 code
+ * @param int $c UTF-8 code
+ * @return Returns the specified character.
+ * @author Miguel Perez, Nicola Asuni
+ * @access public
+ * @since 2.3.000 (2008-03-05)
+ */
+ public function unichr($c) {
+ if (!$this->isunicode) {
+ return chr($c);
+ } elseif ($c <= 0x7F) {
+ // one byte
+ return chr($c);
+ } elseif ($c <= 0x7FF) {
+ // two bytes
+ return chr(0xC0 | $c >> 6).chr(0x80 | $c & 0x3F);
+ } elseif ($c <= 0xFFFF) {
+ // three bytes
+ return chr(0xE0 | $c >> 12).chr(0x80 | $c >> 6 & 0x3F).chr(0x80 | $c & 0x3F);
+ } elseif ($c <= 0x10FFFF) {
+ // four bytes
+ return chr(0xF0 | $c >> 18).chr(0x80 | $c >> 12 & 0x3F).chr(0x80 | $c >> 6 & 0x3F).chr(0x80 | $c & 0x3F);
+ } else {
+ return '';
+ }
+ }
+
+ /**
+ * Puts an image in the page.
+ * The upper-left corner must be given.
+ * The dimensions can be specified in different ways:<ul>
+ * <li>explicit width and height (expressed in user unit)</li>
+ * <li>one explicit dimension, the other being calculated automatically in order to keep the original proportions</li>
+ * <li>no explicit dimension, in which case the image is put at 72 dpi</li></ul>
+ * Supported formats are JPEG and PNG images whitout GD library and all images supported by GD: GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM;
+ * The format can be specified explicitly or inferred from the file extension.<br />
+ * It is possible to put a link on the image.<br />
+ * Remark: if an image is used several times, only one copy will be embedded in the file.<br />
+ * @param string $file Name of the file containing the image.
+ * @param float $x Abscissa of the upper-left corner.
+ * @param float $y Ordinate of the upper-left corner.
+ * @param float $w Width of the image in the page. If not specified or equal to zero, it is automatically calculated.
+ * @param float $h Height of the image in the page. If not specified or equal to zero, it is automatically calculated.
+ * @param string $type Image format. Possible values are (case insensitive): JPEG and PNG (whitout GD library) and all images supported by GD: GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM;. If not specified, the type is inferred from the file extension.
+ * @param mixed $link URL or identifier returned by AddLink().
+ * @param string $align Indicates the alignment of the pointer next to image insertion relative to image height. The value can be:<ul><li>T: top-right for LTR or top-left for RTL</li><li>M: middle-right for LTR or middle-left for RTL</li><li>B: bottom-right for LTR or bottom-left for RTL</li><li>N: next line</li></ul>
+ * @param boolean $resize If true resize (reduce) the image to fit $w and $h (requires GD library).
+ * @param int $dpi dot-per-inch resolution used on resize
+ * @param string $palign Allows to center or align the image on the current line. Possible values are:<ul><li>L : left align</li><li>C : center</li><li>R : right align</li><li>'' : empty string : left for LTR or right for RTL</li></ul>
+ * @param boolean $ismask true if this image is a mask, false otherwise
+ * @param mixed $imgmask image object returned by this function or false
+ * @param mixed $border Indicates if borders must be drawn around the image. The value can be either a number:<ul><li>0: no border (default)</li><li>1: frame</li></ul>or a string containing some or all of the following characters (in any order):<ul><li>L: left</li><li>T: top</li><li>R: right</li><li>B: bottom</li></ul>
+ * @return image information
+ * @access public
+ * @since 1.1
+ */
+ public function Image($file, $x='', $y='', $w=0, $h=0, $type='', $link='', $align='', $resize=false, $dpi=300, $palign='', $ismask=false, $imgmask=false, $border=0) {
+ if ($x === '') {
+ $x = $this->x;
+ }
+ if ($y === '') {
+ $y = $this->y;
+ }
+ // get image dimensions
+ $imsize = @getimagesize($file);
+ if ($imsize === FALSE) {
+ // encode spaces on filename
+ $file = str_replace(' ', '%20', $file);
+ $imsize = @getimagesize($file);
+ if ($imsize === FALSE) {
+ $this->Error('[Image] No such file or directory in '.$file);
+ }
+ }
+ // get original image width and height in pixels
+ list($pixw, $pixh) = $imsize;
+ // calculate image width and height on document
+ if (($w <= 0) AND ($h <= 0)) {
+ // convert image size to document unit
+ $w = $pixw / ($this->imgscale * $this->k);
+ $h = $pixh / ($this->imgscale * $this->k);
+ } elseif ($w <= 0) {
+ $w = $h * $pixw / $pixh;
+ } elseif ($h <= 0) {
+ $h = $w * $pixh / $pixw;
+ }
+ // calculate new minimum dimensions in pixels
+ $neww = round($w * $this->k * $dpi / $this->dpi);
+ $newh = round($h * $this->k * $dpi / $this->dpi);
+ // check if resize is necessary (resize is used only to reduce the image)
+ if (($neww * $newh) >= ($pixw * $pixh)) {
+ $resize = false;
+ }
+ // check if image has been already added on document
+ if (!in_array($file, $this->imagekeys)) {
+ //First use of image, get info
+ if ($type == '') {
+ $fileinfo = pathinfo($file);
+ if (isset($fileinfo['extension']) AND (!empty($fileinfo['extension']))) {
+ $type = $fileinfo['extension'];
+ } else {
+ $this->Error('Image file has no extension and no type was specified: '.$file);
+ }
+ }
+ $type = strtolower($type);
+ if ($type == 'jpg') {
+ $type = 'jpeg';
+ }
+ $mqr = get_magic_quotes_runtime();
+ if($mqr){
+ set_magic_quotes_runtime(0);
+ }
+
+ // Specific image handlers
+ $mtd = '_parse'.$type;
+ // GD image handler function
+ $gdfunction = 'imagecreatefrom'.$type;
+ $info = false;
+ if ((method_exists($this, $mtd)) AND (!($resize AND function_exists($gdfunction)))) {
+ // TCPDF image functions
+ $info = $this->$mtd($file);
+ if ($info == 'pngalpha') {
+ return $this->ImagePngAlpha($file, $x, $y, $w, $h, 'PNG', $link, $align, $resize, $dpi, $palign);
+ }
+ }
+ if (!$info) {
+ if (function_exists($gdfunction)) {
+ // GD library
+ $img = $gdfunction($file);
+ if ($resize) {
+ $imgr = imagecreatetruecolor($neww, $newh);
+ imagecopyresampled($imgr, $img, 0, 0, 0, 0, $neww, $newh, $pixw, $pixh);
+ $info = $this->_toJPEG($imgr);
+ } else {
+ $info = $this->_toJPEG($img);
+ }
+ } elseif (extension_loaded('imagick')) {
+ // ImageMagick library
+ $img = new Imagick();
+ $img->readImage($file);
+ if ($resize) {
+ $img->resizeImage($neww, $newh, 10, 1, false);
+ }
+ $img->setCompressionQuality($this->jpeg_quality);
+ $img->setImageFormat('jpeg');
+ $tempname = tempnam(K_PATH_CACHE, 'jpg_');
+ $img->writeImage($tempname);
+ $info = $this->_parsejpeg($tempname);
+ unlink($tempname);
+ $img->destroy();
+ } else {
+ return;
+ }
+ }
+ if ($info === false) {
+ //If false, we cannot process image
+ return;
+ }
+ if(get_magic_quotes_runtime()){
+ set_magic_quotes_runtime($mqr);
+ }
+ if ($ismask) {
+ // force grayscale
+ $info['cs'] = 'DeviceGray';
+ }
+ $info['i'] = $this->numimages + 1;
+ if ($imgmask !== false) {
+ $info['masked'] = $imgmask;
+ }
+ // add image to document
+ $this->setImageBuffer($file, $info);
+ } else {
+ $info = $this->getImageBuffer($file);
+ }
+ // Check whether we need a new page first as this does not fit
+ if ((($y + $h) > $this->PageBreakTrigger) AND (!$this->InFooter) AND $this->AcceptPageBreak()) {
+ // Automatic page break
+ $this->AddPage($this->CurOrientation);
+ // Reset Y coordinate to the top of next page
+ $y = $this->GetY() + $this->cMargin;
+ }
+ // set bottomcoordinates
+ $this->img_rb_y = $y + $h;
+ // set alignment
+ if ($this->rtl) {
+ if ($palign == 'L') {
+ $ximg = $this->lMargin;
+ // set right side coordinate
+ $this->img_rb_x = $ximg + $w;
+ } elseif ($palign == 'C') {
+ $ximg = ($this->w - $x - $w) / 2;
+ // set right side coordinate
+ $this->img_rb_x = $ximg + $w;
+ } else {
+ $ximg = $this->w - $x - $w;
+ // set left side coordinate
+ $this->img_rb_x = $ximg;
+ }
+ } else {
+ if ($palign == 'R') {
+ $ximg = $this->w - $this->rMargin - $w;
+ // set left side coordinate
+ $this->img_rb_x = $ximg;
+ } elseif ($palign == 'C') {
+ $ximg = ($this->w - $x - $w) / 2;
+ // set right side coordinate
+ $this->img_rb_x = $ximg + $w;
+ } else {
+ $ximg = $x;
+ // set right side coordinate
+ $this->img_rb_x = $ximg + $w;
+ }
+ }
+ if ($ismask) {
+ // embed hidden, ouside the canvas
+ $xkimg = ($this->pagedim[$this->page]['w'] + 10);
+ } else {
+ $xkimg = $ximg * $this->k;
+ }
+ $this->_out(sprintf('q %.2F 0 0 %.2F %.2F %.2F cm /I%d Do Q', ($w * $this->k), ($h * $this->k), $xkimg, (($this->h - ($y + $h)) * $this->k), $info['i']));
+ if (!empty($border)) {
+ $bx = $x;
+ $by = $y;
+ $this->x = $ximg;
+ $this->y = $y;
+ $this->Cell($w, $h, '', $border, 0, '', 0, '', 0);
+ $this->x = $bx;
+ $this->y = $by;
+ }
+ if ($link) {
+ $this->Link($ximg, $y, $w, $h, $link, 0);
+ }
+ // set pointer to align the successive text/objects
+ switch($align) {
+ case 'T': {
+ $this->y = $y;
+ $this->x = $this->img_rb_x;
+ break;
+ }
+ case 'M': {
+ $this->y = $y + round($h/2);
+ $this->x = $this->img_rb_x;
+ break;
+ }
+ case 'B': {
+ $this->y = $this->img_rb_y;
+ $this->x = $this->img_rb_x;
+ break;
+ }
+ case 'N': {
+ $this->SetY($this->img_rb_y);
+ break;
+ }
+ default:{
+ break;
+ }
+ }
+ $this->endlinex = $this->img_rb_x;
+ return $info['i'];
+ }
+
+ /**
+ * Convert the loaded php image to a JPEG and then return a structure for the PDF creator.
+ * This function requires GD library and write access to the directory defined on K_PATH_CACHE constant.
+ * @param string $file Image file name.
+ * @param image $image Image object.
+ * return image JPEG image object.
+ * @access protected
+ */
+ protected function _toJPEG($image) {
+ $tempname = tempnam(K_PATH_CACHE, 'jpg_');
+ imagejpeg($image, $tempname, $this->jpeg_quality);
+ imagedestroy($image);
+ $retvars = $this->_parsejpeg($tempname);
+ // tidy up by removing temporary image
+ unlink($tempname);
+ return $retvars;
+ }
+
+ /**
+ * Extract info from a JPEG file without using the GD library.
+ * @param string $file image file to parse
+ * @return array structure containing the image data
+ * @access protected
+ */
+ protected function _parsejpeg($file) {
+ $a = getimagesize($file);
+ if (empty($a)) {
+ $this->Error('Missing or incorrect image file: '.$file);
+ }
+ if ($a[2] != 2) {
+ $this->Error('Not a JPEG file: '.$file);
+ }
+ if ((!isset($a['channels'])) OR ($a['channels'] == 3)) {
+ $colspace = 'DeviceRGB';
+ } elseif ($a['channels'] == 4) {
+ $colspace = 'DeviceCMYK';
+ } else {
+ $colspace = 'DeviceGray';
+ }
+ $bpc = isset($a['bits']) ? $a['bits'] : 8;
+ $data = file_get_contents($file);
+ return array('w' => $a[0], 'h' => $a[1], 'cs' => $colspace, 'bpc' => $bpc, 'f' => 'DCTDecode', 'data' => $data);
+ }
+
+ /**
+ * Extract info from a PNG file without using the GD library.
+ * @param string $file image file to parse
+ * @return array structure containing the image data
+ * @access protected
+ */
+ protected function _parsepng($file) {
+ $f = fopen($file, 'rb');
+ if (empty($f)) {
+ $this->Error('Can\'t open image file: '.$file);
+ }
+ //Check signature
+ if (fread($f, 8) != chr(137).'PNG'.chr(13).chr(10).chr(26).chr(10)) {
+ $this->Error('Not a PNG file: '.$file);
+ }
+ //Read header chunk
+ fread($f, 4);
+ if (fread($f, 4) != 'IHDR') {
+ $this->Error('Incorrect PNG file: '.$file);
+ }
+ $w = $this->_freadint($f);
+ $h = $this->_freadint($f);
+ $bpc = ord(fread($f, 1));
+ if ($bpc > 8) {
+ //$this->Error('16-bit depth not supported: '.$file);
+ fclose($f);
+ return false;
+ }
+ $ct = ord(fread($f, 1));
+ if ($ct == 0) {
+ $colspace = 'DeviceGray';
+ } elseif ($ct == 2) {
+ $colspace = 'DeviceRGB';
+ } elseif ($ct == 3) {
+ $colspace = 'Indexed';
+ } else {
+ // alpha channel
+ fclose($f);
+ return 'pngalpha';
+ }
+ if (ord(fread($f, 1)) != 0) {
+ //$this->Error('Unknown compression method: '.$file);
+ fclose($f);
+ return false;
+ }
+ if (ord(fread($f, 1)) != 0) {
+ //$this->Error('Unknown filter method: '.$file);
+ fclose($f);
+ return false;
+ }
+ if (ord(fread($f, 1)) != 0) {
+ //$this->Error('Interlacing not supported: '.$file);
+ fclose($f);
+ return false;
+ }
+ fread($f, 4);
+ $parms = '/DecodeParms <</Predictor 15 /Colors '.($ct==2 ? 3 : 1).' /BitsPerComponent '.$bpc.' /Columns '.$w.'>>';
+ //Scan chunks looking for palette, transparency and image data
+ $pal = '';
+ $trns = '';
+ $data = '';
+ do {
+ $n = $this->_freadint($f);
+ $type = fread($f, 4);
+ if ($type == 'PLTE') {
+ //Read palette
+ $pal = $this->rfread($f, $n);
+ fread($f, 4);
+ } elseif ($type == 'tRNS') {
+ //Read transparency info
+ $t = $this->rfread($f, $n);
+ if ($ct == 0) {
+ $trns = array(ord(substr($t, 1, 1)));
+ } elseif ($ct == 2) {
+ $trns = array(ord(substr($t, 1, 1)), ord(substr($t, 3, 1)), ord(substr($t, 5, 1)));
+ } else {
+ $pos = strpos($t, chr(0));
+ if ($pos !== false) {
+ $trns = array($pos);
+ }
+ }
+ fread($f, 4);
+ } elseif ($type == 'IDAT') {
+ //Read image data block
+ $data .= $this->rfread($f, $n);
+ fread($f, 4);
+ } elseif ($type == 'IEND') {
+ break;
+ } else {
+ $this->rfread($f, $n + 4);
+ }
+ } while ($n);
+ if (($colspace == 'Indexed') AND (empty($pal))) {
+ //$this->Error('Missing palette in '.$file);
+ fclose($f);
+ return false;
+ }
+ fclose($f);
+ return array('w' => $w, 'h' => $h, 'cs' => $colspace, 'bpc' => $bpc, 'f' => 'FlateDecode', 'parms' => $parms, 'pal' => $pal, 'trns' => $trns, 'data' => $data);
+ }
+
+ /**
+ * Binary-safe and URL-safe file read.
+ * Reads up to length bytes from the file pointer referenced by handle. Reading stops as soon as one of the following conditions is met: length bytes have been read; EOF (end of file) is reached.
+ * @param resource $handle
+ * @param int $length
+ * @author Nicola Asuni
+ * @access protected
+ * @since 4.5.027 (2009-03-16)
+ */
+ protected function rfread($handle, $length) {
+ $data = fread($handle, $length);
+ $rest = $length - strlen($data);
+ if ($rest > 0) {
+ $data .= $this->rfread($handle, $rest);
+ }
+ return $data;
+ }
+
+ /**
+ * Extract info from a PNG image with alpha channel using the GD library.
+ * @param string $file Name of the file containing the image.
+ * @param float $x Abscissa of the upper-left corner.
+ * @param float $y Ordinate of the upper-left corner.
+ * @param float $w Width of the image in the page. If not specified or equal to zero, it is automatically calculated.
+ * @param float $h Height of the image in the page. If not specified or equal to zero, it is automatically calculated.
+ * @param string $type Image format. Possible values are (case insensitive): JPEG and PNG (whitout GD library) and all images supported by GD: GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM;. If not specified, the type is inferred from the file extension.
+ * @param mixed $link URL or identifier returned by AddLink().
+ * @param string $align Indicates the alignment of the pointer next to image insertion relative to image height. The value can be:<ul><li>T: top-right for LTR or top-left for RTL</li><li>M: middle-right for LTR or middle-left for RTL</li><li>B: bottom-right for LTR or bottom-left for RTL</li><li>N: next line</li></ul>
+ * @param boolean $resize If true resize (reduce) the image to fit $w and $h (requires GD library).
+ * @param int $dpi dot-per-inch resolution used on resize
+ * @param string $palign Allows to center or align the image on the current line. Possible values are:<ul><li>L : left align</li><li>C : center</li><li>R : right align</li><li>'' : empty string : left for LTR or right for RTL</li></ul>
+ * @author Valentin Schmidt, Nicola Asuni
+ * @access protected
+ * @since 4.3.007 (2008-12-04)
+ * @see Image()
+ */
+ protected function ImagePngAlpha($file, $x='', $y='', $w=0, $h=0, $type='', $link='', $align='', $resize=false, $dpi=300, $palign='') {
+ // get image size
+ list($wpx, $hpx) = getimagesize($file);
+ // generate images
+ $img = imagecreatefrompng($file);
+ $imgalpha = imagecreate($wpx, $hpx);
+ // generate gray scale pallete
+ for($c = 0; $c < 256; ++$c) {
+ ImageColorAllocate($imgalpha, $c, $c, $c);
+ }
+ // extract alpha channel
+ for ($xpx = 0; $xpx < $wpx; ++$xpx) {
+ for ($ypx = 0; $ypx < $hpx; ++$ypx) {
+ $colorindex = imagecolorat($img, $xpx, $ypx);
+ $col = imagecolorsforindex($img, $colorindex);
+ imagesetpixel($imgalpha, $xpx, $ypx, $this->getGDgamma((127 - $col['alpha']) * 255 / 127));
+ }
+ }
+ // create temp alpha file
+ $tempfile_alpha = tempnam(K_PATH_CACHE, 'mska_');
+ imagepng($imgalpha, $tempfile_alpha);
+ imagedestroy($imgalpha);
+ // extract image without alpha channel
+ $imgplain = imagecreatetruecolor($wpx, $hpx);
+ imagecopy($imgplain, $img, 0, 0, 0, 0, $wpx, $hpx);
+ // create temp image file
+ $tempfile_plain = tempnam(K_PATH_CACHE, 'mskp_');
+ imagepng($imgplain, $tempfile_plain);
+ imagedestroy($imgplain);
+ // embed mask image
+ $imgmask = $this->Image($tempfile_alpha, $x, $y, $w, $h, 'PNG', '', '', $resize, $dpi, '', true, false);
+ // embed image, masked with previously embedded mask
+ $this->Image($tempfile_plain, $x, $y, $w, $h, $type, $link, $align, $resize, $dpi, $palign, false, $imgmask);
+ // remove temp files
+ unlink($tempfile_alpha);
+ unlink($tempfile_plain);
+ }
+
+ /**
+ * Correct the gamma value to be used with GD library
+ * @param float $v the gamma value to be corrected
+ * @access protected
+ * @since 4.3.007 (2008-12-04)
+ */
+ protected function getGDgamma($v) {
+ return (pow(($v / 255), 2.2) * 255);
+ }
+
+ /**
+ * Performs a line break.
+ * The current abscissa goes back to the left margin and the ordinate increases by the amount passed in parameter.
+ * @param float $h The height of the break. By default, the value equals the height of the last printed cell.
+ * @param boolean $cell if true add a cMargin to the x coordinate
+ * @access public
+ * @since 1.0
+ * @see Cell()
+ */
+ public function Ln($h='', $cell=false) {
+ //Line feed; default value is last cell height
+ if ($cell) {
+ $cellmargin = $this->cMargin;
+ } else {
+ $cellmargin = 0;
+ }
+ if ($this->rtl) {
+ $this->x = $this->w - $this->rMargin - $cellmargin;
+ } else {
+ $this->x = $this->lMargin + $cellmargin;
+ }
+ if (is_string($h)) {
+ $this->y += $this->lasth;
+ } else {
+ $this->y += $h;
+ }
+ $this->newline = true;
+ }
+
+ /**
+ * Returns the relative X value of current position.
+ * The value is relative to the left border for LTR languages and to the right border for RTL languages.
+ * @return float
+ * @access public
+ * @since 1.2
+ * @see SetX(), GetY(), SetY()
+ */
+ public function GetX() {
+ //Get x position
+ if ($this->rtl) {
+ return ($this->w - $this->x);
+ } else {
+ return $this->x;
+ }
+ }
+
+ /**
+ * Returns the absolute X value of current position.
+ * @return float
+ * @access public
+ * @since 1.2
+ * @see SetX(), GetY(), SetY()
+ */
+ public function GetAbsX() {
+ return $this->x;
+ }
+
+ /**
+ * Returns the ordinate of the current position.
+ * @return float
+ * @access public
+ * @since 1.0
+ * @see SetY(), GetX(), SetX()
+ */
+ public function GetY() {
+ //Get y position
+ return $this->y;
+ }
+
+ /**
+ * Defines the abscissa of the current position.
+ * If the passed value is negative, it is relative to the right of the page (or left if language is RTL).
+ * @param float $x The value of the abscissa.
+ * @access public
+ * @since 1.2
+ * @see GetX(), GetY(), SetY(), SetXY()
+ */
+ public function SetX($x) {
+ //Set x position
+ if ($this->rtl) {
+ if ($x >= 0) {
+ $this->x = $this->w - $x;
+ } else {
+ $this->x = abs($x);
+ }
+ } else {
+ if ($x >= 0) {
+ $this->x = $x;
+ } else {
+ $this->x = $this->w + $x;
+ }
+ }
+ if ($this->x < 0) {
+ $this->x = 0;
+ }
+ if ($this->x > $this->w) {
+ $this->x = $this->w;
+ }
+ }
+
+ /**
+ * Moves the current abscissa back to the left margin and sets the ordinate.
+ * If the passed value is negative, it is relative to the bottom of the page.
+ * @param float $y The value of the ordinate.
+ * @param bool $resetx if true (default) reset the X position.
+ * @access public
+ * @since 1.0
+ * @see GetX(), GetY(), SetY(), SetXY()
+ */
+ public function SetY($y, $resetx=true) {
+ if ($resetx) {
+ //reset x
+ if ($this->rtl) {
+ $this->x = $this->w - $this->rMargin;
+ } else {
+ $this->x = $this->lMargin;
+ }
+ }
+ if ($y >= 0) {
+ $this->y = $y;
+ } else {
+ $this->y = $this->h + $y;
+ }
+ if ($this->y < 0) {
+ $this->y = 0;
+ }
+ if ($this->y > $this->h) {
+ $this->y = $this->h;
+ }
+ }
+
+ /**
+ * Defines the abscissa and ordinate of the current position.
+ * If the passed values are negative, they are relative respectively to the right and bottom of the page.
+ * @param float $x The value of the abscissa
+ * @param float $y The value of the ordinate
+ * @access public
+ * @since 1.2
+ * @see SetX(), SetY()
+ */
+ public function SetXY($x, $y) {
+ //Set x and y positions
+ $this->SetY($y);
+ $this->SetX($x);
+ }
+
+ /**
+ * Send the document to a given destination: string, local file or browser.
+ * In the last case, the plug-in may be used (if present) or a download ("Save as" dialog box) may be forced.<br />
+ * The method first calls Close() if necessary to terminate the document.
+ * @param string $name The name of the file when saved. Note that special characters are removed and blanks characters are replaced with the underscore character.
+ * @param string $dest Destination where to send the document. It can take one of the following values:<ul><li>I: send the file inline to the browser (default). The plug-in is used if available. The name given by name is used when one selects the "Save as" option on the link generating the PDF.</li><li>D: send to the browser and force a file download with the name given by name.</li><li>F: save to a local file with the name given by name.</li><li>S: return the document as a string. name is ignored.</li></ul>
+ * @access public
+ * @since 1.0
+ * @see Close()
+ */
+ public function Output($name='doc.pdf', $dest='I') {
+ //Output PDF to some destination
+ //Finish document if necessary
+ if ($this->state < 3) {
+ $this->Close();
+ }
+ //Normalize parameters
+ if (is_bool($dest)) {
+ $dest = $dest ? 'D' : 'F';
+ }
+ $dest = strtoupper($dest);
+ if ($dest != 'F') {
+ $name = preg_replace('/[\s]+/', '_', $name);
+ $name = preg_replace('/[^a-zA-Z0-9_\.-]/', '', $name);
+ }
+ switch($dest) {
+ case 'I': {
+ // Send PDF to the standard output
+ if (ob_get_contents()) {
+ $this->Error('Some data has already been output, can\'t send PDF file');
+ }
+ if (php_sapi_name() != 'cli') {
+ //We send to a browser
+ header('Content-Type: application/pdf');
+ if (headers_sent()) {
+ $this->Error('Some data has already been output to browser, can\'t send PDF file');
+ }
+ //header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1
+ header('Cache-Control: private, must-revalidate, post-check=0, pre-check=0, max-age=1');
+ header('Pragma: public');
+ header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past
+ header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
+ //header('Content-Length: '.$this->bufferlen);
+ header('Content-Disposition: inline; filename="'.basename($name).'"');
+
+ $this->sendOutputData($this->getBuffer(), $this->bufferlen);
+ }
+ //echo $this->getBuffer();
+ else {
+ echo $this->getBuffer();
+ }
+ break;
+ }
+ case 'D': {
+ // Download PDF as file
+ if (ob_get_contents()) {
+ $this->Error('Some data has already been output, can\'t send PDF file');
+ }
+ header('Content-Description: File Transfer');
+ if (headers_sent()) {
+ $this->Error('Some data has already been output to browser, can\'t send PDF file');
+ }
+ header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1
+ header('Pragma: public');
+ header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past
+ header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
+ // force download dialog
+ header('Content-Type: application/force-download');
+ header('Content-Type: application/octet-stream', false);
+ header('Content-Type: application/download', false);
+ header('Content-Type: application/pdf', false);
+ // use the Content-Disposition header to supply a recommended filename
+ header('Content-Disposition: attachment; filename="'.basename($name).'"');
+ header('Content-Transfer-Encoding: binary');
+ header('Content-Length: '.$this->bufferlen);
+ echo $this->getBuffer();
+ break;
+ }
+ case 'F': {
+ // Save PDF to a local file
+ if ($this->diskcache) {
+ copy($this->buffer, $name);
+ } else {
+ $f = fopen($name, 'wb');
+ if (!$f) {
+ $this->Error('Unable to create output file: '.$name);
+ }
+ fwrite($f, $this->getBuffer(), $this->bufferlen);
+ fclose($f);
+ }
+ break;
+ }
+ case 'S': {
+ // Returns PDF as a string
+ return $this->getBuffer();
+ }
+ default: {
+ $this->Error('Incorrect output destination: '.$dest);
+ }
+ }
+ return '';
+ }
+
+ /**
+ * Ouput input data and compress it if possible.
+ * @param $data (string) Data to output.
+ * @param $length (int) Data length in bytes.
+ * @protected
+ * @since 5.9.086
+ */
+ protected function sendOutputData($data, $length) {
+ if (!isset($_SERVER['HTTP_ACCEPT_ENCODING']) OR empty($_SERVER['HTTP_ACCEPT_ENCODING'])) {
+ // the content length may vary if the server is using compression
+ header('Content-Length: '.$length);
+ }
+ echo $data;
+ }
+
+ /**
+ * Unset all class variables except the following critical variables: internal_encoding, state, bufferlen, buffer and diskcache.
+ * @param boolean $destroyall if true destroys all class variables, otherwise preserves critical variables.
+ * @param boolean $preserve_objcopy if true preserves the objcopy variable
+ * @access public
+ * @since 4.5.016 (2009-02-24)
+ */
+ public function _destroy($destroyall=false, $preserve_objcopy=false) {
+ if ($destroyall AND isset($this->diskcache) AND $this->diskcache AND (!$preserve_objcopy) AND (!empty($this->buffer))) {
+ // remove buffer file from cache
+ unlink($this->buffer);
+ }
+ foreach (array_keys(get_object_vars($this)) as $val) {
+ if ($destroyall OR (($val != 'internal_encoding') AND ($val != 'state') AND ($val != 'bufferlen') AND ($val != 'buffer') AND ($val != 'diskcache'))) {
+ if (!$preserve_objcopy OR ($val != 'objcopy')) {
+ unset($this->$val);
+ }
+ }
+ }
+ }
+
+ /**
+ * Check for locale-related bug
+ * @access protected
+ */
+ protected function _dochecks() {
+ //Check for locale-related bug
+ if (1.1 == 1) {
+ $this->Error('Don\'t alter the locale before including class file');
+ }
+ //Check for decimal separator
+ if (sprintf('%.1F', 1.0) != '1.0') {
+ setlocale(LC_NUMERIC, 'C');
+ }
+ }
+
+ /**
+ * Return fonts path
+ * @return string
+ * @access protected
+ */
+ protected function _getfontpath() {
+ if (!defined('K_PATH_FONTS') AND is_dir(dirname(__FILE__).'/fonts')) {
+ define('K_PATH_FONTS', dirname(__FILE__).'/fonts/');
+ }
+ return defined('K_PATH_FONTS') ? K_PATH_FONTS : '';
+ }
+
+ /**
+ * Output pages.
+ * @access protected
+ */
+ protected function _putpages() {
+ $nb = $this->numpages;
+ if (!empty($this->AliasNbPages)) {
+ $nbs = $this->formatPageNumber($nb);
+ $nbu = $this->UTF8ToUTF16BE($nbs, false); // replacement for unicode font
+ $alias_a = $this->_escape($this->AliasNbPages);
+ $alias_au = $this->_escape('{'.$this->AliasNbPages.'}');
+ if ($this->isunicode) {
+ $alias_b = $this->_escape($this->UTF8ToLatin1($this->AliasNbPages));
+ $alias_bu = $this->_escape($this->UTF8ToLatin1('{'.$this->AliasNbPages.'}'));
+ $alias_c = $this->_escape($this->utf8StrRev($this->AliasNbPages, false, $this->tmprtl));
+ $alias_cu = $this->_escape($this->utf8StrRev('{'.$this->AliasNbPages.'}', false, $this->tmprtl));
+ }
+ }
+ if (!empty($this->AliasNumPage)) {
+ $alias_pa = $this->_escape($this->AliasNumPage);
+ $alias_pau = $this->_escape('{'.$this->AliasNumPage.'}');
+ if ($this->isunicode) {
+ $alias_pb = $this->_escape($this->UTF8ToLatin1($this->AliasNumPage));
+ $alias_pbu = $this->_escape($this->UTF8ToLatin1('{'.$this->AliasNumPage.'}'));
+ $alias_pc = $this->_escape($this->utf8StrRev($this->AliasNumPage, false, $this->tmprtl));
+ $alias_pcu = $this->_escape($this->utf8StrRev('{'.$this->AliasNumPage.'}', false, $this->tmprtl));
+ }
+ }
+ $pagegroupnum = 0;
+ $filter = ($this->compress) ? '/Filter /FlateDecode ' : '';
+ for($n=1; $n <= $nb; ++$n) {
+ $temppage = $this->getPageBuffer($n);
+ if (!empty($this->pagegroups)) {
+ if(isset($this->newpagegroup[$n])) {
+ $pagegroupnum = 0;
+ }
+ ++$pagegroupnum;
+ foreach ($this->pagegroups as $k => $v) {
+ // replace total pages group numbers
+ $vs = $this->formatPageNumber($v);
+ $vu = $this->UTF8ToUTF16BE($vs, false);
+ $alias_ga = $this->_escape($k);
+ $alias_gau = $this->_escape('{'.$k.'}');
+ if ($this->isunicode) {
+ $alias_gb = $this->_escape($this->UTF8ToLatin1($k));
+ $alias_gbu = $this->_escape($this->UTF8ToLatin1('{'.$k.'}'));
+ $alias_gc = $this->_escape($this->utf8StrRev($k, false, $this->tmprtl));
+ $alias_gcu = $this->_escape($this->utf8StrRev('{'.$k.'}', false, $this->tmprtl));
+ }
+ $temppage = str_replace($alias_gau, $vu, $temppage);
+ if ($this->isunicode) {
+ $temppage = str_replace($alias_gbu, $vu, $temppage);
+ $temppage = str_replace($alias_gcu, $vu, $temppage);
+ $temppage = str_replace($alias_gb, $vs, $temppage);
+ $temppage = str_replace($alias_gc, $vs, $temppage);
+ }
+ $temppage = str_replace($alias_ga, $vs, $temppage);
+ // replace page group numbers
+ $pvs = $this->formatPageNumber($pagegroupnum);
+ $pvu = $this->UTF8ToUTF16BE($pvs, false);
+ $pk = str_replace('{nb', '{pnb', $k);
+ $alias_pga = $this->_escape($pk);
+ $alias_pgau = $this->_escape('{'.$pk.'}');
+ if ($this->isunicode) {
+ $alias_pgb = $this->_escape($this->UTF8ToLatin1($pk));
+ $alias_pgbu = $this->_escape($this->UTF8ToLatin1('{'.$pk.'}'));
+ $alias_pgc = $this->_escape($this->utf8StrRev($pk, false, $this->tmprtl));
+ $alias_pgcu = $this->_escape($this->utf8StrRev('{'.$pk.'}', false, $this->tmprtl));
+ }
+ $temppage = str_replace($alias_pgau, $pvu, $temppage);
+ if ($this->isunicode) {
+ $temppage = str_replace($alias_pgbu, $pvu, $temppage);
+ $temppage = str_replace($alias_pgcu, $pvu, $temppage);
+ $temppage = str_replace($alias_pgb, $pvs, $temppage);
+ $temppage = str_replace($alias_pgc, $pvs, $temppage);
+ }
+ $temppage = str_replace($alias_pga, $pvs, $temppage);
+ }
+ }
+ if (!empty($this->AliasNbPages)) {
+ // replace total pages number
+ $temppage = str_replace($alias_au, $nbu, $temppage);
+ if ($this->isunicode) {
+ $temppage = str_replace($alias_bu, $nbu, $temppage);
+ $temppage = str_replace($alias_cu, $nbu, $temppage);
+ $temppage = str_replace($alias_b, $nbs, $temppage);
+ $temppage = str_replace($alias_c, $nbs, $temppage);
+ }
+ $temppage = str_replace($alias_a, $nbs, $temppage);
+ }
+ if (!empty($this->AliasNumPage)) {
+ // replace page number
+ $pnbs = $this->formatPageNumber($n);
+ $pnbu = $this->UTF8ToUTF16BE($pnbs, false); // replacement for unicode font
+ $temppage = str_replace($alias_pau, $pnbu, $temppage);
+ if ($this->isunicode) {
+ $temppage = str_replace($alias_pbu, $pnbu, $temppage);
+ $temppage = str_replace($alias_pcu, $pnbu, $temppage);
+ $temppage = str_replace($alias_pb, $pnbs, $temppage);
+ $temppage = str_replace($alias_pc, $pnbs, $temppage);
+ }
+ $temppage = str_replace($alias_pa, $pnbs, $temppage);
+ }
+ $temppage = str_replace($this->epsmarker, '', $temppage);
+ //$this->setPageBuffer($n, $temppage);
+ //Page
+ $this->_newobj();
+ $this->_out('<</Type /Page');
+ $this->_out('/Parent 1 0 R');
+ $this->_out(sprintf('/MediaBox [0 0 %.2F %.2F]', $this->pagedim[$n]['w'], $this->pagedim[$n]['h']));
+ $this->_out('/Resources 2 0 R');
+ $this->_putannots($n);
+ $this->_out('/Contents '.($this->n + 1).' 0 R>>');
+ $this->_out('endobj');
+ //Page content
+ $p = ($this->compress) ? gzcompress($temppage) : $temppage;
+ $this->_newobj();
+ $this->_out('<<'.$filter.'/Length '.strlen($p).'>>');
+ $this->_putstream($p);
+ $this->_out('endobj');
+ if ($this->diskcache) {
+ // remove temporary files
+ unlink($this->pages[$n]);
+ }
+ }
+ //Pages root
+ $this->offsets[1] = $this->bufferlen;
+ $this->_out('1 0 obj');
+ $this->_out('<</Type /Pages');
+ $kids='/Kids [';
+ for($i=0; $i < $nb; ++$i) {
+ $kids .= (3 + (2 * $i)).' 0 R ';
+ }
+ $this->_out($kids.']');
+ $this->_out('/Count '.$nb);
+ //$this->_out(sprintf('/MediaBox [0 0 %.2F %.2F]',$this->pagedim[0]['w'],$this->pagedim[0]['h']));
+ $this->_out('>>');
+ $this->_out('endobj');
+ }
+
+ /**
+ * Output Page Annotations.
+ * !!! THIS FUNCTION IS NOT YET COMPLETED !!!
+ * See section 8.4 of PDF reference.
+ * @param int $n page number
+ * @access protected
+ * @author Nicola Asuni
+ * @since 4.0.018 (2008-08-06)
+ */
+ protected function _putannots($n) {
+ if (isset($this->PageAnnots[$n])) {
+ $annots = '/Annots [';
+ foreach ($this->PageAnnots[$n] as $key => $pl) {
+ $pl['opt'] = array_change_key_case($pl['opt'], CASE_LOWER);
+ $a = $pl['x'] * $this->k;
+ $b = $this->pagedim[$n]['h'] - ($pl['y'] * $this->k);
+ $c = $pl['w'] * $this->k;
+ $d = $pl['h'] * $this->k;
+ $rect = sprintf('%.2F %.2F %.2F %.2F', $a, $b, $a+$c, $b-$d);
+ $annots .= "\n";
+ $annots .= '<</Type /Annot';
+ $annots .= ' /Subtype /'.$pl['opt']['subtype'];
+ $annots .= ' /Rect ['.$rect.']';
+ $annots .= ' /Contents '.$this->_textstring($pl['txt']);
+ //$annots .= ' /P ';
+ $annots .= ' /NM '.$this->_textstring(sprintf('%04u-%04u', $n, $key));
+ $annots .= ' /M '.$this->_datastring('D:'.date('YmdHis'));
+ if (isset($pl['opt']['f'])) {
+ $val = 0;
+ if (is_array($pl['opt']['f'])) {
+ foreach ($pl['opt']['f'] as $f) {
+ switch (strtolower($f)) {
+ case 'invisible': {
+ $val += 1 << 0;
+ break;
+ }
+ case 'hidden': {
+ $val += 1 << 1;
+ break;
+ }
+ case 'print': {
+ $val += 1 << 2;
+ break;
+ }
+ case 'nozoom': {
+ $val += 1 << 3;
+ break;
+ }
+ case 'norotate': {
+ $val += 1 << 4;
+ break;
+ }
+ case 'noview': {
+ $val += 1 << 5;
+ break;
+ }
+ case 'readonly': {
+ $val += 1 << 6;
+ break;
+ }
+ case 'locked': {
+ $val += 1 << 8;
+ break;
+ }
+ case 'togglenoview': {
+ $val += 1 << 9;
+ break;
+ }
+ case 'lockedcontents': {
+ $val += 1 << 10;
+ break;
+ }
+ default: {
+ break;
+ }
+ }
+ }
+ }
+ $annots .= ' /F '.intval($val);
+ }
+ //$annots .= ' /AP ';
+ //$annots .= ' /AS ';
+ $annots .= ' /Border [';
+ if (isset($pl['opt']['border']) AND (count($pl['opt']['border']) >= 3)) {
+ $annots .= intval($pl['opt']['border'][0]).' ';
+ $annots .= intval($pl['opt']['border'][1]).' ';
+ $annots .= intval($pl['opt']['border'][2]);
+ if (isset($pl['opt']['border'][3]) AND is_array($pl['opt']['border'][3])) {
+ $annots .= ' [';
+ foreach ($pl['opt']['border'][3] as $dash) {
+ $annots .= intval($dash).' ';
+ }
+ $annots .= ']';
+ }
+ } else {
+ $annots .= '0 0 0';
+ }
+ $annots .= ']';
+ if (isset($pl['opt']['bs']) AND (is_array($pl['opt']['bs']))) {
+ $annots .= ' /BS <<Type /Border';
+ if (isset($pl['opt']['bs']['w'])) {
+ $annots .= ' /W '.sprintf("%.4F", floatval($pl['opt']['bs']['w']));
+ }
+ $bstyles = array('S', 'D', 'B', 'I', 'U');
+ if (isset($pl['opt']['bs']['s']) AND in_array($pl['opt']['bs']['s'], $bstyles)) {
+ $annots .= ' /S /'.$pl['opt']['bs']['s'];
+ }
+ if (isset($pl['opt']['bs']['d']) AND (is_array($pl['opt']['bs']['d']))) {
+ $annots .= ' /D [';
+ foreach ($pl['opt']['bs']['d'] as $cord) {
+ $cord = floatval($cord);
+ $annots .= sprintf(" %.4F", $cord);
+ }
+ $annots .= ']';
+ }
+ $annots .= '>> ';
+ }
+ if (isset($pl['opt']['be']) AND (is_array($pl['opt']['be']))) {
+ $annots .= ' /BE <<';
+ $bstyles = array('S', 'C');
+ if (isset($pl['opt']['be']['s']) AND in_array($pl['opt']['be']['s'], $markups)) {
+ $annots .= ' /S /'.$pl['opt']['bs']['s'];
+ } else {
+ $annots .= ' /S /S';
+ }
+ if (isset($pl['opt']['be']['i']) AND ($pl['opt']['be']['i'] >= 0) AND ($pl['opt']['be']['i'] <= 2)) {
+ $annots .= ' /I '.sprintf(" %.4F", $pl['opt']['be']['i']);
+ }
+ $annots .= '>>';
+ }
+ $annots .= ' /C [';
+ if (isset($pl['opt']['c']) AND (is_array($pl['opt']['c']))) {
+ foreach ($pl['opt']['c'] as $col) {
+ $col = intval($col);
+ $color = $col <= 0 ? 0 : ($col >= 255 ? 1 : $col / 255);
+ $annots .= sprintf(" %.4F", $color);
+ }
+ }
+ $annots .= ']';
+ //$annots .= ' /StructParent ';
+ //$annots .= ' /OC ';
+ $markups = array('text', 'freetext', 'line', 'square', 'circle', 'polygon', 'polyline', 'highlight', 'underline', 'squiggly', 'strikeout', 'stamp', 'caret', 'ink', 'fileattachment', 'sound');
+ if (in_array(strtolower($pl['opt']['subtype']), $markups)) {
+ // this is a markup type
+ if (isset($pl['opt']['t']) AND is_string($pl['opt']['t'])) {
+ $annots .= ' /T '.$this->_textstring($pl['opt']['t']);
+ }
+ //$annots .= ' /Popup ';
+ if (isset($pl['opt']['ca'])) {
+ $annots .= ' /CA '.sprintf("%.4F", floatval($pl['opt']['ca']));
+ }
+ if (isset($pl['opt']['rc'])) {
+ $annots .= ' /RC '.$this->_textstring($pl['opt']['rc']);
+ }
+ $annots .= ' /CreationDate '.$this->_datastring('D:'.date('YmdHis'));
+ //$annots .= ' /IRT ';
+ if (isset($pl['opt']['subj'])) {
+ $annots .= ' /Subj '.$this->_textstring($pl['opt']['subj']);
+ }
+ //$annots .= ' /RT ';
+ //$annots .= ' /IT ';
+ //$annots .= ' /ExData ';
+ }
+ switch (strtolower($pl['opt']['subtype'])) {
+ case 'text': {
+ if (isset($pl['opt']['open'])) {
+ $annots .= ' /Open '. (strtolower($pl['opt']['open']) == 'true' ? 'true' : 'false');
+ }
+ $iconsapp = array('Comment', 'Help', 'Insert', 'Key', 'NewParagraph', 'Note', 'Paragraph');
+ if (isset($pl['opt']['name']) AND in_array($pl['opt']['name'], $iconsapp)) {
+ $annots .= ' /Name /'.$pl['opt']['name'];
+ } else {
+ $annots .= ' /Name /Note';
+ }
+ $statemodels = array('Marked', 'Review');
+ if (isset($pl['opt']['statemodel']) AND in_array($pl['opt']['statemodel'], $statemodels)) {
+ $annots .= ' /StateModel /'.$pl['opt']['statemodel'];
+ } else {
+ $pl['opt']['statemodel'] = 'Marked';
+ $annots .= ' /StateModel /'.$pl['opt']['statemodel'];
+ }
+ if ($pl['opt']['statemodel'] == 'Marked') {
+ $states = array('Accepted', 'Unmarked');
+ } else {
+ $states = array('Accepted', 'Rejected', 'Cancelled', 'Completed', 'None');
+ }
+ if (isset($pl['opt']['state']) AND in_array($pl['opt']['state'], $states)) {
+ $annots .= ' /State /'.$pl['opt']['state'];
+ } else {
+ if ($pl['opt']['statemodel'] == 'Marked') {
+ $annots .= ' /State /Unmarked';
+ } else {
+ $annots .= ' /State /None';
+ }
+ }
+ break;
+ }
+ case 'link': {
+ if(is_string($pl['txt'])) {
+ // external URI link
+ $annots .= ' /A <</S /URI /URI '.$this->_datastring($pl['txt']).'>>';
+ } else {
+ // internal link
+ $l = $this->links[$pl['txt']];
+ $annots .= sprintf(' /Dest [%d 0 R /XYZ 0 %.2F null]', (1 + (2 * $l[0])), ($this->pagedim[$l[0]]['h'] - ($l[1] * $this->k)));
+ }
+ $hmodes = array('N', 'I', 'O', 'P');
+ if (isset($pl['opt']['h']) AND in_array($pl['opt']['h'], $hmodes)) {
+ $annots .= ' /H /'.$pl['opt']['h'];
+ } else {
+ $annots .= ' /H /I';
+ }
+ //$annots .= ' /PA ';
+ //$annots .= ' /Quadpoints ';
+ break;
+ }
+ case 'freetext': {
+ $annots .= ' /DA '.$this->_textstring($pl['txt']);
+ if (isset($pl['opt']['q']) AND ($pl['opt']['q'] >= 0) AND ($pl['opt']['q'] <= 2)) {
+ $annots .= ' /Q '.intval($pl['opt']['q']);
+ }
+ if (isset($pl['opt']['rc'])) {
+ $annots .= ' /RC '.$this->_textstring($pl['opt']['rc']);
+ }
+ if (isset($pl['opt']['ds'])) {
+ $annots .= ' /DS '.$this->_textstring($pl['opt']['ds']);
+ }
+ if (isset($pl['opt']['cl']) AND is_array($pl['opt']['cl'])) {
+ $annots .= ' /CL [';
+ foreach ($pl['opt']['cl'] as $cl) {
+ $annots .= sprintf("%.4F ", $cl * $this->k);
+ }
+ $annots .= ']';
+ }
+ $tfit = array('FreeTextCallout', 'FreeTextTypeWriter');
+ if (isset($pl['opt']['it']) AND in_array($pl['opt']['it'], $tfit)) {
+ $annots .= ' /IT '.$pl['opt']['it'];
+ }
+ if (isset($pl['opt']['rd']) AND is_array($pl['opt']['rd'])) {
+ $l = $pl['opt']['rd'][0] * $this->k;
+ $r = $pl['opt']['rd'][1] * $this->k;
+ $t = $pl['opt']['rd'][2] * $this->k;
+ $b = $pl['opt']['rd'][3] * $this->k;
+ $annots .= ' /RD ['.sprintf('%.2F %.2F %.2F %.2F', $l, $r, $t, $b).']';
+ }
+ //$annots .= ' /LE ';
+ break;
+ }
+ // ... to be completed ...
+ case 'line': {
+ break;
+ }
+ case 'square': {
+ break;
+ }
+ case 'circle': {
+ break;
+ }
+ case 'polygon': {
+ break;
+ }
+ case 'polyline': {
+ break;
+ }
+ case 'highlight': {
+ break;
+ }
+ case 'underline': {
+ break;
+ }
+ case 'squiggly': {
+ break;
+ }
+ case 'strikeout': {
+ break;
+ }
+ case 'stamp': {
+ break;
+ }
+ case 'caret': {
+ break;
+ }
+ case 'ink': {
+ break;
+ }
+ case 'popup': {
+ break;
+ }
+ case 'fileattachment': {
+ if (!isset($pl['opt']['fs'])) {
+ break;
+ }
+ $filename = basename($pl['opt']['fs']);
+ if (isset($this->embeddedfiles[$filename]['n'])) {
+ $annots .= ' /FS <</Type /Filespec /F '.$this->_datastring($filename).' /EF <</F '.$this->embeddedfiles[$filename]['n'].' 0 R>> >>';
+ $iconsapp = array('Graph', 'Paperclip', 'PushPin', 'Tag');
+ if (isset($pl['opt']['name']) AND in_array($pl['opt']['name'], $iconsapp)) {
+ $annots .= ' /Name /'.$pl['opt']['name'];
+ } else {
+ $annots .= ' /Name /PushPin';
+ }
+ }
+ break;
+ }
+ case 'sound': {
+ if (!isset($pl['opt']['sound'])) {
+ break;
+ }
+ $filename = basename($pl['opt']['sound']);
+ if (isset($this->embeddedfiles[$filename]['n'])) {
+ // to be completed...
+ $iconsapp = array('Speaker', 'Mic');
+ if (isset($pl['opt']['name']) AND in_array($pl['opt']['name'], $iconsapp)) {
+ $annots .= ' /Name /'.$pl['opt']['name'];
+ } else {
+ $annots .= ' /Name /Speaker';
+ }
+ }
+ break;
+ }
+ case 'movie': {
+ break;
+ }
+ case 'widget': {
+ break;
+ }
+ case 'screen': {
+ break;
+ }
+ case 'printermark': {
+ break;
+ }
+ case 'trapnet': {
+ break;
+ }
+ case 'watermark': {
+ break;
+ }
+ case '3d': {
+ break;
+ }
+ default: {
+ break;
+ }
+ }
+
+ $annots .= '>>';
+ }
+ $annots .= "\n]";
+ $this->_out($annots);
+ }
+ }
+
+ /**
+ * Output fonts.
+ * @access protected
+ */
+ protected function _putfonts() {
+ $nf = $this->n;
+ foreach ($this->diffs as $diff) {
+ //Encodings
+ $this->_newobj();
+ $this->_out('<</Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences ['.$diff.']>>');
+ $this->_out('endobj');
+ }
+ $mqr = get_magic_quotes_runtime();
+ //set_magic_quotes_runtime(0);
+ foreach ($this->FontFiles as $file => $info) {
+ // search and get font file to embedd
+ $fontdir = $info['fontdir'];
+ $file = strtolower($file);
+ $fontfile = '';
+ // search files on various directories
+ if (file_exists($fontdir.$file)) {
+ $fontfile = $fontdir.$file;
+ } elseif (file_exists($this->_getfontpath().$file)) {
+ $fontfile = $this->_getfontpath().$file;
+ } elseif (file_exists($file)) {
+ $fontfile = $file;
+ }
+ if (!empty($fontfile)) {
+ $font = file_get_contents($fontfile);
+ $compressed = (substr($file, -2) == '.z');
+ if ((!$compressed) AND (isset($info['length2']))) {
+ $header = (ord($font{0}) == 128);
+ if ($header) {
+ //Strip first binary header
+ $font = substr($font, 6);
+ }
+ if ($header AND (ord($font{$info['length1']}) == 128)) {
+ //Strip second binary header
+ $font = substr($font, 0, $info['length1']).substr($font, ($info['length1'] + 6));
+ }
+ }
+ $this->_newobj();
+ $this->FontFiles[$file]['n'] = $this->n;
+ $this->_out('<</Length '.strlen($font));
+ if ($compressed) {
+ $this->_out('/Filter /FlateDecode');
+ }
+ $this->_out('/Length1 '.$info['length1']);
+ if (isset($info['length2'])) {
+ $this->_out('/Length2 '.$info['length2'].' /Length3 0');
+ }
+ $this->_out('>>');
+ $this->_putstream($font);
+ $this->_out('endobj');
+ }
+ }
+ //set_magic_quotes_runtime($mqr);
+ foreach ($this->fontkeys as $k) {
+ //Font objects
+ $this->setFontSubBuffer($k, 'n', $this->n + 1);
+ $font = $this->getFontBuffer($k);
+ $type = $font['type'];
+ $name = $font['name'];
+ if ($type == 'core') {
+ //Standard font
+ $this->_newobj();
+ $this->_out('<</Type /Font');
+ $this->_out('/BaseFont /'.$name);
+ $this->_out('/Subtype /Type1');
+ if (($name != 'symbol') AND ($name != 'zapfdingbats')) {
+ $this->_out('/Encoding /WinAnsiEncoding');
+ }
+ $this->_out('>>');
+ $this->_out('endobj');
+ } elseif (($type == 'Type1') OR ($type == 'TrueType')) {
+ //Additional Type1 or TrueType font
+ $this->_newobj();
+ $this->_out('<</Type /Font');
+ $this->_out('/BaseFont /'.$name);
+ $this->_out('/Subtype /'.$type);
+ $this->_out('/FirstChar 32 /LastChar 255');
+ $this->_out('/Widths '.($this->n + 1).' 0 R');
+ $this->_out('/FontDescriptor '.($this->n + 2).' 0 R');
+ if ($font['enc']) {
+ if (isset($font['diff'])) {
+ $this->_out('/Encoding '.($nf + $font['diff']).' 0 R');
+ } else {
+ $this->_out('/Encoding /WinAnsiEncoding');
+ }
+ }
+ $this->_out('>>');
+ $this->_out('endobj');
+ // Widths
+ $this->_newobj();
+ $cw = &$font['cw'];
+ $s = '[';
+ for($i = 32; $i < 256; ++$i) {
+ $s .= $cw[$i].' ';
+ }
+ $this->_out($s.']');
+ $this->_out('endobj');
+ //Descriptor
+ $this->_newobj();
+ $s = '<</Type /FontDescriptor /FontName /'.$name;
+ foreach ($font['desc'] as $k => $v) {
+ $s .= ' /'.$k.' '.$v.'';
+ }
+ if (!empty($font['file'])) {
+ $s .= ' /FontFile'.($type == 'Type1' ? '' : '2').' '.$this->FontFiles[$font['file']]['n'].' 0 R';
+ }
+ $this->_out($s.'>>');
+ $this->_out('endobj');
+ } else {
+ //Allow for additional types
+ $mtd = '_put'.strtolower($type);
+ if (!method_exists($this, $mtd)) {
+ $this->Error('Unsupported font type: '.$type);
+ }
+ $this->$mtd($font);
+ }
+ }
+ }
+
+ /**
+ * Outputs font widths
+ * @parameter array $font font data
+ * @parameter int $cidoffset offset for CID values
+ * @author Nicola Asuni
+ * @access protected
+ * @since 4.4.000 (2008-12-07)
+ */
+ protected function _putfontwidths($font, $cidoffset=0) {
+ ksort($font['cw']);
+ $rangeid = 0;
+ $range = array();
+ $prevcid = -2;
+ $prevwidth = -1;
+ $interval = false;
+ // for each character
+ foreach ($font['cw'] as $cid => $width) {
+ $cid -= $cidoffset;
+ if ($width != $font['dw']) {
+ if ($cid == ($prevcid + 1)) {
+ // consecutive CID
+ if ($width == $prevwidth) {
+ if ($width == $range[$rangeid][0]) {
+ $range[$rangeid][] = $width;
+ } else {
+ array_pop($range[$rangeid]);
+ // new range
+ $rangeid = $prevcid;
+ $range[$rangeid] = array();
+ $range[$rangeid][] = $prevwidth;
+ $range[$rangeid][] = $width;
+ }
+ $interval = true;
+ $range[$rangeid]['interval'] = true;
+ } else {
+ if ($interval) {
+ // new range
+ $rangeid = $cid;
+ $range[$rangeid] = array();
+ $range[$rangeid][] = $width;
+ } else {
+ $range[$rangeid][] = $width;
+ }
+ $interval = false;
+ }
+ } else {
+ // new range
+ $rangeid = $cid;
+ $range[$rangeid] = array();
+ $range[$rangeid][] = $width;
+ $interval = false;
+ }
+ $prevcid = $cid;
+ $prevwidth = $width;
+ }
+ }
+ // optimize ranges
+ $prevk = -1;
+ $nextk = -1;
+ $prevint = false;
+ foreach ($range as $k => $ws) {
+ $cws = count($ws);
+ if (($k == $nextk) AND (!$prevint) AND ((!isset($ws['interval'])) OR ($cws < 4))) {
+ if (isset($range[$k]['interval'])) {
+ unset($range[$k]['interval']);
+ }
+ $range[$prevk] = array_merge($range[$prevk], $range[$k]);
+ unset($range[$k]);
+ } else {
+ $prevk = $k;
+ }
+ $nextk = $k + $cws;
+ if (isset($ws['interval'])) {
+ if ($cws > 3) {
+ $prevint = true;
+ } else {
+ $prevint = false;
+ }
+ unset($range[$k]['interval']);
+ --$nextk;
+ } else {
+ $prevint = false;
+ }
+ }
+ // output data
+ $w = '';
+ foreach ($range as $k => $ws) {
+ if (count(array_count_values($ws)) == 1) {
+ // interval mode is more compact
+ $w .= ' '.$k.' '.($k + count($ws) - 1).' '.$ws[0];
+ } else {
+ // range mode
+ $w .= ' '.$k.' [ '.implode(' ', $ws).' ]';
+ }
+ }
+ $this->_out('/W ['.$w.' ]');
+ }
+
+ /**
+ * Adds unicode fonts.<br>
+ * Based on PDF Reference 1.3 (section 5)
+ * @parameter array $font font data
+ * @access protected
+ * @author Nicola Asuni
+ * @since 1.52.0.TC005 (2005-01-05)
+ */
+ protected function _puttruetypeunicode($font) {
+ // Type0 Font
+ // A composite font composed of other fonts, organized hierarchically
+ $this->_newobj();
+ $this->_out('<</Type /Font');
+ $this->_out('/Subtype /Type0');
+ $this->_out('/BaseFont /'.$font['name'].'');
+ $this->_out('/Encoding /Identity-H'); //The horizontal identity mapping for 2-byte CIDs; may be used with CIDFonts using any Registry, Ordering, and Supplement values.
+ $this->_out('/ToUnicode /Identity-H');
+ $this->_out('/DescendantFonts ['.($this->n + 1).' 0 R]');
+ $this->_out('>>');
+ $this->_out('endobj');
+ // CIDFontType2
+ // A CIDFont whose glyph descriptions are based on TrueType font technology
+ $this->_newobj();
+ $this->_out('<</Type /Font');
+ $this->_out('/Subtype /CIDFontType2');
+ $this->_out('/BaseFont /'.$font['name'].'');
+ // A dictionary containing entries that define the character collection of the CIDFont.
+ $cidinfo = '/Registry '.$this->_datastring('Adobe');
+ $cidinfo .= ' /Ordering '.$this->_datastring('Identity');
+ $cidinfo .= ' /Supplement 0';
+ $this->_out('/CIDSystemInfo <<'.$cidinfo.'>>');
+ $this->_out('/FontDescriptor '.($this->n + 1).' 0 R');
+ $this->_out('/DW '.$font['dw'].''); // default width
+ $this->_putfontwidths($font, 0);
+ $this->_out('/CIDToGIDMap '.($this->n + 2).' 0 R');
+ $this->_out('>>');
+ $this->_out('endobj');
+ // Font descriptor
+ // A font descriptor describing the CIDFont default metrics other than its glyph widths
+ $this->_newobj();
+ $this->_out('<</Type /FontDescriptor');
+ $this->_out('/FontName /'.$font['name']);
+ foreach ($font['desc'] as $key => $value) {
+ $this->_out('/'.$key.' '.$value);
+ }
+ $fontdir = '';
+ if (!empty($font['file'])) {
+ // A stream containing a TrueType font
+ $this->_out('/FontFile2 '.$this->FontFiles[$font['file']]['n'].' 0 R');
+ $fontdir = $this->FontFiles[$font['file']]['fontdir'];
+ }
+ $this->_out('>>');
+ $this->_out('endobj');
+ $this->_newobj();
+ if (isset($font['ctg']) AND (!empty($font['ctg']))) {
+ // Embed CIDToGIDMap
+ // A specification of the mapping from CIDs to glyph indices
+ // search and get CTG font file to embedd
+ $ctgfile = strtolower($font['ctg']);
+ // search and get ctg font file to embedd
+ $fontfile = '';
+ // search files on various directories
+ if (file_exists($fontdir.$ctgfile)) {
+ $fontfile = $fontdir.$ctgfile;
+ } elseif (file_exists($this->_getfontpath().$ctgfile)) {
+ $fontfile = $this->_getfontpath().$ctgfile;
+ } elseif (file_exists($ctgfile)) {
+ $fontfile = $ctgfile;
+ }
+ if (empty($fontfile)) {
+ $this->Error('Font file not found: '.$ctgfile);
+ }
+ $size = filesize($fontfile);
+ $this->_out('<</Length '.$size.'');
+ if (substr($fontfile, -2) == '.z') { // check file extension
+ // Decompresses data encoded using the public-domain
+ // zlib/deflate compression method, reproducing the
+ // original text or binary data
+ $this->_out('/Filter /FlateDecode');
+ }
+ $this->_out('>>');
+ $this->_putstream(file_get_contents($fontfile));
+ }
+ $this->_out('endobj');
+ }
+
+ /**
+ * Output CID-0 fonts.
+ * @param array $font font data
+ * @access protected
+ * @author Andrew Whitehead, Nicola Asuni, Yukihiro Nakadaira
+ * @since 3.2.000 (2008-06-23)
+ */
+ protected function _putcidfont0($font) {
+ $cidoffset = 31;
+ if (isset($font['cidinfo']['uni2cid'])) {
+ // convert unicode to cid.
+ $uni2cid = $font['cidinfo']['uni2cid'];
+ $cw = array();
+ foreach ($font['cw'] as $uni => $width) {
+ if (isset($uni2cid[$uni])) {
+ $cw[($uni2cid[$uni] + $cidoffset)] = $width;
+ } elseif ($uni < 256) {
+ $cw[$uni] = $width;
+ } // else unknown character
+ }
+ $font = array_merge($font, array('cw' => $cw));
+ }
+ $name = $font['name'];
+ $enc = $font['enc'];
+ if ($enc) {
+ $longname = $name.'-'.$enc;
+ } else {
+ $longname = $name;
+ }
+ $this->_newobj();
+ $this->_out('<</Type /Font');
+ $this->_out('/BaseFont /'.$longname);
+ $this->_out('/Subtype /Type0');
+ if ($enc) {
+ $this->_out('/Encoding /'.$enc);
+ }
+ $this->_out('/DescendantFonts ['.($this->n + 1).' 0 R]');
+ $this->_out('>>');
+ $this->_out('endobj');
+ $this->_newobj();
+ $this->_out('<</Type /Font');
+ $this->_out('/BaseFont /'.$name);
+ $this->_out('/Subtype /CIDFontType0');
+ $cidinfo = '/Registry '.$this->_datastring($font['cidinfo']['Registry']);
+ $cidinfo .= ' /Ordering '.$this->_datastring($font['cidinfo']['Ordering']);
+ $cidinfo .= ' /Supplement '.$font['cidinfo']['Supplement'];
+ $this->_out('/CIDSystemInfo <<'.$cidinfo.'>>');
+ $this->_out('/FontDescriptor '.($this->n + 1).' 0 R');
+ $this->_out('/DW '.$font['dw']);
+ $this->_putfontwidths($font, $cidoffset);
+ $this->_out('>>');
+ $this->_out('endobj');
+ $this->_newobj();
+ $s = '<</Type /FontDescriptor /FontName /'.$name;
+ foreach ($font['desc'] as $k => $v) {
+ if ($k != 'Style') {
+ $s .= ' /'.$k.' '.$v.'';
+ }
+ }
+ $this->_out($s.'>>');
+ $this->_out('endobj');
+ }
+
+ /**
+ * Output images.
+ * @access protected
+ */
+ protected function _putimages() {
+ $filter = ($this->compress) ? '/Filter /FlateDecode ' : '';
+ foreach ($this->imagekeys as $file) {
+ $info = $this->getImageBuffer($file);
+ $this->_newobj();
+ $this->setImageSubBuffer($file, 'n', $this->n);
+ $this->_out('<</Type /XObject');
+ $this->_out('/Subtype /Image');
+ $this->_out('/Width '.$info['w']);
+ $this->_out('/Height '.$info['h']);
+ if (isset($info['masked'])) {
+ $this->_out('/SMask '.($this->n - 1).' 0 R');
+ }
+ if ($info['cs'] == 'Indexed') {
+ $this->_out('/ColorSpace [/Indexed /DeviceRGB '.((strlen($info['pal']) / 3) - 1).' '.($this->n + 1).' 0 R]');
+ } else {
+ $this->_out('/ColorSpace /'.$info['cs']);
+ if ($info['cs'] == 'DeviceCMYK') {
+ $this->_out('/Decode [1 0 1 0 1 0 1 0]');
+ }
+ }
+ $this->_out('/BitsPerComponent '.$info['bpc']);
+ if (isset($info['f'])) {
+ $this->_out('/Filter /'.$info['f']);
+ }
+ if (isset($info['parms'])) {
+ $this->_out($info['parms']);
+ }
+ if (isset($info['trns']) AND is_array($info['trns'])) {
+ $trns='';
+ $count_info = count($info['trns']);
+ for($i=0; $i < $count_info; ++$i) {
+ $trns .= $info['trns'][$i].' '.$info['trns'][$i].' ';
+ }
+ $this->_out('/Mask ['.$trns.']');
+ }
+ $this->_out('/Length '.strlen($info['data']).'>>');
+ $this->_putstream($info['data']);
+ $this->_out('endobj');
+ //Palette
+ if ($info['cs'] == 'Indexed') {
+ $this->_newobj();
+ $pal = ($this->compress) ? gzcompress($info['pal']) : $info['pal'];
+ $this->_out('<<'.$filter.'/Length '.strlen($pal).'>>');
+ $this->_putstream($pal);
+ $this->_out('endobj');
+ }
+ }
+ }
+
+ /**
+ * Output Spot Colors Resources.
+ * @access protected
+ * @since 4.0.024 (2008-09-12)
+ */
+ protected function _putspotcolors() {
+ foreach ($this->spot_colors as $name => $color) {
+ $this->_newobj();
+ $this->spot_colors[$name]['n'] = $this->n;
+ $this->_out('[/Separation /'.str_replace(' ', '#20', $name));
+ $this->_out('/DeviceCMYK <<');
+ $this->_out('/Range [0 1 0 1 0 1 0 1] /C0 [0 0 0 0] ');
+ $this->_out(sprintf('/C1 [%.4F %.4F %.4F %.4F] ', $color['c']/100, $color['m']/100, $color['y']/100, $color['k']/100));
+ $this->_out('/FunctionType 2 /Domain [0 1] /N 1>>]');
+ $this->_out('endobj');
+ }
+ }
+
+ /**
+ * Output object dictionary for images.
+ * @access protected
+ */
+ protected function _putxobjectdict() {
+ foreach ($this->imagekeys as $file) {
+ $info = $this->getImageBuffer($file);
+ $this->_out('/I'.$info['i'].' '.$info['n'].' 0 R');
+ }
+ }
+
+ /**
+ * Output Resources Dictionary.
+ * @access protected
+ */
+ protected function _putresourcedict() {
+ $this->_out('/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]');
+ $this->_out('/Font <<');
+ foreach ($this->fontkeys as $fontkey) {
+ $font = $this->getFontBuffer($fontkey);
+ $this->_out('/F'.$font['i'].' '.$font['n'].' 0 R');
+ }
+ $this->_out('>>');
+ $this->_out('/XObject <<');
+ $this->_putxobjectdict();
+ $this->_out('>>');
+ // visibility
+ $this->_out('/Properties <</OC1 '.$this->n_ocg_print.' 0 R /OC2 '.$this->n_ocg_view.' 0 R>>');
+ // transparency
+ $this->_out('/ExtGState <<');
+ foreach ($this->extgstates as $k => $extgstate) {
+ $this->_out('/GS'.$k.' '.$extgstate['n'].' 0 R');
+ }
+ $this->_out('>>');
+ // gradients
+ if (isset($this->gradients) AND (count($this->gradients) > 0)) {
+ $this->_out('/Shading <<');
+ foreach ($this->gradients as $id => $grad) {
+ $this->_out('/Sh'.$id.' '.$grad['id'].' 0 R');
+ }
+ $this->_out('>>');
+ }
+ // spot colors
+ if (isset($this->spot_colors) AND (count($this->spot_colors) > 0)) {
+ $this->_out('/ColorSpace <<');
+ foreach ($this->spot_colors as $color) {
+ $this->_out('/CS'.$color['i'].' '.$color['n'].' 0 R');
+ }
+ $this->_out('>>');
+ }
+ }
+
+ /**
+ * Output Resources.
+ * @access protected
+ */
+ protected function _putresources() {
+ $this->_putextgstates();
+ $this->_putocg();
+ $this->_putfonts();
+ $this->_putimages();
+ $this->_putspotcolors();
+ $this->_putshaders();
+ //Resource dictionary
+ $this->offsets[2] = $this->bufferlen;
+ $this->_out('2 0 obj');
+ $this->_out('<<');
+ $this->_putresourcedict();
+ $this->_out('>>');
+ $this->_out('endobj');
+ $this->_putjavascript();
+ $this->_putbookmarks();
+ $this->_putEmbeddedFiles();
+ // encryption
+ if ($this->encrypted) {
+ $this->_newobj();
+ $this->enc_obj_id = $this->n;
+ $this->_out('<<');
+ $this->_putencryption();
+ $this->_out('>>');
+ $this->_out('endobj');
+ }
+ }
+
+ /**
+ * Adds some Metadata information
+ * (see Chapter 10.2 of PDF Reference)
+ * @access protected
+ */
+ protected function _putinfo() {
+ if (!empty($this->title)) {
+ $this->_out('/Title '.$this->_textstring($this->title));
+ }
+ if (!empty($this->author)) {
+ $this->_out('/Author '.$this->_textstring($this->author));
+ }
+ if (!empty($this->subject)) {
+ $this->_out('/Subject '.$this->_textstring($this->subject));
+ }
+ if (!empty($this->keywords)) {
+ $this->_out('/Keywords '.$this->_textstring($this->keywords));
+ }
+ if (!empty($this->creator)) {
+ $this->_out('/Creator '.$this->_textstring($this->creator));
+ }
+ if (defined('PDF_PRODUCER')) {
+ $this->_out('/Producer '.$this->_textstring(PDF_PRODUCER));
+ }
+ $this->_out('/CreationDate '.$this->_datastring('D:'.date('YmdHis')));
+ $this->_out('/ModDate '.$this->_datastring('D:'.date('YmdHis')));
+ }
+
+ /**
+ * Output Catalog.
+ * @access protected
+ */
+ protected function _putcatalog() {
+ $this->_out('/Type /Catalog');
+ $this->_out('/Pages 1 0 R');
+ if ($this->ZoomMode == 'fullpage') {
+ $this->_out('/OpenAction [3 0 R /Fit]');
+ } elseif ($this->ZoomMode == 'fullwidth') {
+ $this->_out('/OpenAction [3 0 R /FitH null]');
+ } elseif ($this->ZoomMode == 'real') {
+ $this->_out('/OpenAction [3 0 R /XYZ null null 1]');
+ } elseif (!is_string($this->ZoomMode)) {
+ $this->_out('/OpenAction [3 0 R /XYZ null null '.($this->ZoomMode / 100).']');
+ }
+ if (isset($this->LayoutMode) AND (!empty($this->LayoutMode))) {
+ $this->_out('/PageLayout /'.$this->LayoutMode.'');
+ }
+ if (isset($this->PageMode) AND (!empty($this->PageMode))) {
+ $this->_out('/PageMode /'.$this->PageMode);
+ }
+ if (isset($this->l['a_meta_language'])) {
+ $this->_out('/Lang /'.$this->l['a_meta_language']);
+ }
+ $this->_out('/Names <<');
+ if (!empty($this->javascript)) {
+ $this->_out('/JavaScript '.($this->n_js).' 0 R');
+ }
+ $this->_out('>>');
+ if (count($this->outlines) > 0) {
+ $this->_out('/Outlines '.$this->OutlineRoot.' 0 R');
+ $this->_out('/PageMode /UseOutlines');
+ }
+ $this->_putviewerpreferences();
+ $p = $this->n_ocg_print.' 0 R';
+ $v = $this->n_ocg_view.' 0 R';
+ $as = '<</Event /Print /OCGs ['.$p.' '.$v.'] /Category [/Print]>> <</Event /View /OCGs ['.$p.' '.$v.'] /Category [/View]>>';
+ $this->_out('/OCProperties <</OCGs ['.$p.' '.$v.'] /D <</ON ['.$p.'] /OFF ['.$v.'] /AS ['.$as.']>>>>');
+ $this->_putuserrights();
+ }
+
+ /**
+ * Output viewer preferences.
+ * @author Nicola asuni
+ * @since 3.1.000 (2008-06-09)
+ * @access protected
+ */
+ protected function _putviewerpreferences() {
+ $this->_out('/ViewerPreferences<<');
+ if ($this->rtl) {
+ $this->_out('/Direction /R2L');
+ } else {
+ $this->_out('/Direction /L2R');
+ }
+ if (isset($this->viewer_preferences['HideToolbar']) AND ($this->viewer_preferences['HideToolbar'])) {
+ $this->_out('/HideToolbar true');
+ }
+ if (isset($this->viewer_preferences['HideMenubar']) AND ($this->viewer_preferences['HideMenubar'])) {
+ $this->_out('/HideMenubar true');
+ }
+ if (isset($this->viewer_preferences['HideWindowUI']) AND ($this->viewer_preferences['HideWindowUI'])) {
+ $this->_out('/HideWindowUI true');
+ }
+ if (isset($this->viewer_preferences['FitWindow']) AND ($this->viewer_preferences['FitWindow'])) {
+ $this->_out('/FitWindow true');
+ }
+ if (isset($this->viewer_preferences['CenterWindow']) AND ($this->viewer_preferences['CenterWindow'])) {
+ $this->_out('/CenterWindow true');
+ }
+ if (isset($this->viewer_preferences['DisplayDocTitle']) AND ($this->viewer_preferences['DisplayDocTitle'])) {
+ $this->_out('/DisplayDocTitle true');
+ }
+ if (isset($this->viewer_preferences['NonFullScreenPageMode'])) {
+ $this->_out('/NonFullScreenPageMode /'.$this->viewer_preferences['NonFullScreenPageMode'].'');
+ }
+ if (isset($this->viewer_preferences['ViewArea'])) {
+ $this->_out('/ViewArea /'.$this->viewer_preferences['ViewArea']);
+ }
+ if (isset($this->viewer_preferences['ViewClip'])) {
+ $this->_out('/ViewClip /'.$this->viewer_preferences['ViewClip']);
+ }
+ if (isset($this->viewer_preferences['PrintArea'])) {
+ $this->_out('/PrintArea /'.$this->viewer_preferences['PrintArea']);
+ }
+ if (isset($this->viewer_preferences['PrintClip'])) {
+ $this->_out('/PrintClip /'.$this->viewer_preferences['PrintClip']);
+ }
+ if (isset($this->viewer_preferences['PrintScaling'])) {
+ $this->_out('/PrintScaling /'.$this->viewer_preferences['PrintScaling']);
+ }
+ if (isset($this->viewer_preferences['Duplex']) AND (!empty($this->viewer_preferences['Duplex']))) {
+ $this->_out('/Duplex /'.$this->viewer_preferences['Duplex']);
+ }
+ if (isset($this->viewer_preferences['PickTrayByPDFSize'])) {
+ if ($this->viewer_preferences['PickTrayByPDFSize']) {
+ $this->_out('/PickTrayByPDFSize true');
+ } else {
+ $this->_out('/PickTrayByPDFSize false');
+ }
+ }
+ if (isset($this->viewer_preferences['PrintPageRange'])) {
+ $PrintPageRangeNum = '';
+ foreach ($this->viewer_preferences['PrintPageRange'] as $k => $v) {
+ $PrintPageRangeNum .= ' '.($v - 1).'';
+ }
+ $this->_out('/PrintPageRange ['.substr($PrintPageRangeNum,1).']');
+ }
+ if (isset($this->viewer_preferences['NumCopies'])) {
+ $this->_out('/NumCopies '.intval($this->viewer_preferences['NumCopies']));
+ }
+ $this->_out('>>');
+ }
+
+ /**
+ * Output trailer.
+ * @access protected
+ */
+ protected function _puttrailer() {
+ $this->_out('/Size '.($this->n + 1));
+ $this->_out('/Root '.$this->n.' 0 R');
+ $this->_out('/Info '.($this->n - 1).' 0 R');
+ if ($this->encrypted) {
+ $this->_out('/Encrypt '.$this->enc_obj_id.' 0 R');
+ $this->_out('/ID [()()]');
+ }
+ }
+
+ /**
+ * Output PDF header.
+ * @access protected
+ */
+ protected function _putheader() {
+ $this->_out('%PDF-'.$this->PDFVersion);
+ }
+
+ /**
+ * Output end of document (EOF).
+ * @access protected
+ */
+ protected function _enddoc() {
+ $this->state = 1;
+ $this->_putheader();
+ $this->_putpages();
+ $this->_putresources();
+ //Info
+ $this->_newobj();
+ $this->_out('<<');
+ $this->_putinfo();
+ $this->_out('>>');
+ $this->_out('endobj');
+ //Catalog
+ $this->_newobj();
+ $this->_out('<<');
+ $this->_putcatalog();
+ $this->_out('>>');
+ $this->_out('endobj');
+ //Cross-ref
+ $o = $this->bufferlen;
+ $this->_out('xref');
+ $this->_out('0 '.($this->n + 1));
+ $this->_out('0000000000 65535 f ');
+ for($i=1; $i <= $this->n; ++$i) {
+ $this->_out(sprintf('%010d 00000 n ',$this->offsets[$i]));
+ }
+ foreach ($this->embeddedfiles as $filename => $filedata) {
+ $this->_out(sprintf('%010d 00000 n ',$this->offsets[$filedata['n']]));
+ }
+ //Trailer
+ $this->_out('trailer');
+ $this->_out('<<');
+ $this->_puttrailer();
+ $this->_out('>>');
+ $this->_out('startxref');
+ $this->_out($o);
+ $this->_out('%%EOF');
+ $this->state = 3; // end-of-doc
+ if ($this->diskcache) {
+ // remove temporary files used for images
+ foreach ($this->imagekeys as $key) {
+ // remove temporary files
+ unlink($this->images[$key]);
+ }
+ foreach ($this->fontkeys as $key) {
+ // remove temporary files
+ unlink($this->fonts[$key]);
+ }
+ }
+ }
+
+ /**
+ * Initialize a new page.
+ * @param string $orientation page orientation. Possible values are (case insensitive):<ul><li>P or PORTRAIT (default)</li><li>L or LANDSCAPE</li></ul>
+ * @param mixed $format The format used for pages. It can be either one of the following values (case insensitive) or a custom format in the form of a two-element array containing the width and the height (expressed in the unit given by unit).<ul><li>4A0</li><li>2A0</li><li>A0</li><li>A1</li><li>A2</li><li>A3</li><li>A4 (default)</li><li>A5</li><li>A6</li><li>A7</li><li>A8</li><li>A9</li><li>A10</li><li>B0</li><li>B1</li><li>B2</li><li>B3</li><li>B4</li><li>B5</li><li>B6</li><li>B7</li><li>B8</li><li>B9</li><li>B10</li><li>C0</li><li>C1</li><li>C2</li><li>C3</li><li>C4</li><li>C5</li><li>C6</li><li>C7</li><li>C8</li><li>C9</li><li>C10</li><li>RA0</li><li>RA1</li><li>RA2</li><li>RA3</li><li>RA4</li><li>SRA0</li><li>SRA1</li><li>SRA2</li><li>SRA3</li><li>SRA4</li><li>LETTER</li><li>LEGAL</li><li>EXECUTIVE</li><li>FOLIO</li></ul>
+ * @access protected
+ */
+ protected function _beginpage($orientation='', $format='') {
+ ++$this->page;
+ $this->setPageBuffer($this->page, '');
+ // initialize array for graphics tranformation positions inside a page buffer
+ $this->transfmrk[$this->page] = array();
+ $this->state = 2;
+ if (empty($orientation)) {
+ if (isset($this->CurOrientation)) {
+ $orientation = $this->CurOrientation;
+ } else {
+ $orientation = 'P';
+ }
+ }
+ if (!empty($format)) {
+ $this->setPageFormat($format, $orientation);
+ } else {
+ $this->setPageOrientation($orientation);
+ }
+ if ($this->rtl) {
+ $this->x = $this->w - $this->rMargin;
+ } else {
+ $this->x = $this->lMargin;
+ }
+ $this->y = $this->tMargin;
+ if (isset($this->newpagegroup[$this->page])) {
+ // start a new group
+ $n = sizeof($this->pagegroups) + 1;
+ $alias = '{nb'.$n.'}';
+ $this->pagegroups[$alias] = 1;
+ $this->currpagegroup = $alias;
+ } elseif ($this->currpagegroup) {
+ ++$this->pagegroups[$this->currpagegroup];
+ }
+ }
+
+ /**
+ * Mark end of page.
+ * @access protected
+ */
+ protected function _endpage() {
+ $this->setVisibility('all');
+ $this->state = 1;
+ }
+
+ /**
+ * Begin a new object.
+ * @access protected
+ */
+ protected function _newobj() {
+ ++$this->n;
+ $this->offsets[$this->n] = $this->bufferlen;
+ $this->_out($this->n.' 0 obj');
+ }
+
+ /**
+ * Underline text.
+ * @param int $x X coordinate
+ * @param int $y Y coordinate
+ * @param string $txt text to underline
+ * @access protected
+ */
+ protected function _dounderline($x, $y, $txt) {
+ $up = $this->CurrentFont['up'];
+ $ut = $this->CurrentFont['ut'];
+ $w = $this->GetStringWidth($txt);
+ return sprintf('%.2F %.2F %.2F %.2F re f', $x * $this->k, ($this->h - ($y - $up / 1000 * $this->FontSize)) * $this->k, $w * $this->k, -$ut / 1000 * $this->FontSizePt);
+ }
+
+ /**
+ * Line through text.
+ * @param int $x X coordinate
+ * @param int $y Y coordinate
+ * @param string $txt text to linethrough
+ * @access protected
+ */
+ protected function _dolinethrough($x, $y, $txt) {
+ $up = $this->CurrentFont['up'];
+ $ut = $this->CurrentFont['ut'];
+ $w = $this->GetStringWidth($txt);
+ return sprintf('%.2F %.2F %.2F %.2F re f', $x * $this->k, ($this->h - ($y - ($this->FontSize/2) - $up / 1000 * $this->FontSize)) * $this->k, $w * $this->k, -$ut / 1000 * $this->FontSizePt);
+ }
+
+ /**
+ * Read a 4-byte integer from file.
+ * @param string $f file name.
+ * @return 4-byte integer
+ * @access protected
+ */
+ protected function _freadint($f) {
+ $a = unpack('Ni', fread($f, 4));
+ return $a['i'];
+ }
+
+ /**
+ * Add "\" before "\", "(" and ")"
+ * @param string $s string to escape.
+ * @return string escaped string.
+ * @access protected
+ */
+ protected function _escape($s) {
+ // the chr(13) substitution fixes the Bugs item #1421290.
+ return strtr($s, array(')' => '\\)', '(' => '\\(', '\\' => '\\\\', chr(13) => '\r'));
+ }
+
+ /**
+ * Format a date string for meta information
+ * @param string $s date string to escape.
+ * @return string escaped string.
+ * @access protected
+ */
+ protected function _datastring($s) {
+ if ($this->encrypted) {
+ $s = $this->_RC4($this->_objectkey($this->n), $s);
+ }
+ return '('. $this->_escape($s).')';
+ }
+
+ /**
+ * Format a text string for meta information
+ * @param string $s string to escape.
+ * @return string escaped string.
+ * @access protected
+ */
+ protected function _textstring($s) {
+ if ($this->isunicode) {
+ //Convert string to UTF-16BE
+ $s = $this->UTF8ToUTF16BE($s, true);
+ }
+ return $this->_datastring($s);
+ }
+
+ /**
+ * Format a text string
+ * @param string $s string to escape.
+ * @return string escaped string.
+ * @access protected
+ */
+ protected function _escapetext($s) {
+ if ($this->isunicode) {
+ if (($this->CurrentFont['type'] == 'core') OR ($this->CurrentFont['type'] == 'TrueType') OR ($this->CurrentFont['type'] == 'Type1')) {
+ $s = $this->UTF8ToLatin1($s);
+ } else {
+ //Convert string to UTF-16BE and reverse RTL language
+ $s = $this->utf8StrRev($s, false, $this->tmprtl);
+ }
+ }
+ return $this->_escape($s);
+ }
+
+ /**
+ * Output a stream.
+ * @param string $s string to output.
+ * @access protected
+ */
+ protected function _putstream($s) {
+ if ($this->encrypted) {
+ $s = $this->_RC4($this->_objectkey($this->n), $s);
+ }
+ $this->_out('stream');
+ $this->_out($s);
+ $this->_out('endstream');
+ }
+
+ /**
+ * Output a string to the document.
+ * @param string $s string to output.
+ * @access protected
+ */
+ protected function _out($s) {
+ if ($this->state == 2) {
+ if ((!$this->InFooter) AND isset($this->footerlen[$this->page]) AND ($this->footerlen[$this->page] > 0)) {
+ // puts data before page footer
+ $page = substr($this->getPageBuffer($this->page), 0, -$this->footerlen[$this->page]);
+ $footer = substr($this->getPageBuffer($this->page), -$this->footerlen[$this->page]);
+ $this->setPageBuffer($this->page, $page.$s."\n".$footer);
+ } else {
+ $this->setPageBuffer($this->page, $s."\n", true);
+ }
+ } else {
+ $this->setBuffer($s."\n");
+ }
+ }
+
+ /**
+ * Converts UTF-8 strings to codepoints array.<br>
+ * Invalid byte sequences will be replaced with 0xFFFD (replacement character)<br>
+ * Based on: http://www.faqs.org/rfcs/rfc3629.html
+ * <pre>
+ * Char. number range | UTF-8 octet sequence
+ * (hexadecimal) | (binary)
+ * --------------------+-----------------------------------------------
+ * 0000 0000-0000 007F | 0xxxxxxx
+ * 0000 0080-0000 07FF | 110xxxxx 10xxxxxx
+ * 0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
+ * 0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
+ * ---------------------------------------------------------------------
+ *
+ * ABFN notation:
+ * ---------------------------------------------------------------------
+ * UTF8-octets = *( UTF8-char )
+ * UTF8-char = UTF8-1 / UTF8-2 / UTF8-3 / UTF8-4
+ * UTF8-1 = %x00-7F
+ * UTF8-2 = %xC2-DF UTF8-tail
+ *
+ * UTF8-3 = %xE0 %xA0-BF UTF8-tail / %xE1-EC 2( UTF8-tail ) /
+ * %xED %x80-9F UTF8-tail / %xEE-EF 2( UTF8-tail )
+ * UTF8-4 = %xF0 %x90-BF 2( UTF8-tail ) / %xF1-F3 3( UTF8-tail ) /
+ * %xF4 %x80-8F 2( UTF8-tail )
+ * UTF8-tail = %x80-BF
+ * ---------------------------------------------------------------------
+ * </pre>
+ * @param string $str string to process.
+ * @return array containing codepoints (UTF-8 characters values)
+ * @access protected
+ * @author Nicola Asuni
+ * @since 1.53.0.TC005 (2005-01-05)
+ */
+ protected function UTF8StringToArray($str) {
+ if (!$this->isunicode) {
+ // split string into array of equivalent codes
+ $strarr = array();
+ $strlen = strlen($str);
+ for($i=0; $i < $strlen; ++$i) {
+ $strarr[] = ord($str{$i});
+ }
+ return $strarr;
+ }
+ $unicode = array(); // array containing unicode values
+ $bytes = array(); // array containing single character byte sequences
+ $numbytes = 1; // number of octetc needed to represent the UTF-8 character
+ $str .= ''; // force $str to be a string
+ $length = strlen($str);
+ for($i = 0; $i < $length; ++$i) {
+ $char = ord($str{$i}); // get one string character at time
+ if (count($bytes) == 0) { // get starting octect
+ if ($char <= 0x7F) {
+ $unicode[] = $char; // use the character "as is" because is ASCII
+ $numbytes = 1;
+ } elseif (($char >> 0x05) == 0x06) { // 2 bytes character (0x06 = 110 BIN)
+ $bytes[] = ($char - 0xC0) << 0x06;
+ $numbytes = 2;
+ } elseif (($char >> 0x04) == 0x0E) { // 3 bytes character (0x0E = 1110 BIN)
+ $bytes[] = ($char - 0xE0) << 0x0C;
+ $numbytes = 3;
+ } elseif (($char >> 0x03) == 0x1E) { // 4 bytes character (0x1E = 11110 BIN)
+ $bytes[] = ($char - 0xF0) << 0x12;
+ $numbytes = 4;
+ } else {
+ // use replacement character for other invalid sequences
+ $unicode[] = 0xFFFD;
+ $bytes = array();
+ $numbytes = 1;
+ }
+ } elseif (($char >> 0x06) == 0x02) { // bytes 2, 3 and 4 must start with 0x02 = 10 BIN
+ $bytes[] = $char - 0x80;
+ if (count($bytes) == $numbytes) {
+ // compose UTF-8 bytes to a single unicode value
+ $char = $bytes[0];
+ for($j = 1; $j < $numbytes; ++$j) {
+ $char += ($bytes[$j] << (($numbytes - $j - 1) * 0x06));
+ }
+ if ((($char >= 0xD800) AND ($char <= 0xDFFF)) OR ($char >= 0x10FFFF)) {
+ /* The definition of UTF-8 prohibits encoding character numbers between
+ U+D800 and U+DFFF, which are reserved for use with the UTF-16
+ encoding form (as surrogate pairs) and do not directly represent
+ characters. */
+ $unicode[] = 0xFFFD; // use replacement character
+ } else {
+ $unicode[] = $char; // add char to array
+ }
+ // reset data for next char
+ $bytes = array();
+ $numbytes = 1;
+ }
+ } else {
+ // use replacement character for other invalid sequences
+ $unicode[] = 0xFFFD;
+ $bytes = array();
+ $numbytes = 1;
+ }
+ }
+ return $unicode;
+ }
+
+ /**
+ * Converts UTF-8 strings to UTF16-BE.<br>
+ * @param string $str string to process.
+ * @param boolean $setbom if true set the Byte Order Mark (BOM = 0xFEFF)
+ * @return string
+ * @access protected
+ * @author Nicola Asuni
+ * @since 1.53.0.TC005 (2005-01-05)
+ * @uses UTF8StringToArray(), arrUTF8ToUTF16BE()
+ */
+ protected function UTF8ToUTF16BE($str, $setbom=true) {
+ if (!$this->isunicode) {
+ return $str; // string is not in unicode
+ }
+ $unicode = $this->UTF8StringToArray($str); // array containing UTF-8 unicode values
+ return $this->arrUTF8ToUTF16BE($unicode, $setbom);
+ }
+
+ /**
+ * Converts UTF-8 strings to Latin1 when using the standard 14 core fonts.<br>
+ * @param string $str string to process.
+ * @return string
+ * @author Andrew Whitehead, Nicola Asuni
+ * @access protected
+ * @since 3.2.000 (2008-06-23)
+ */
+ protected function UTF8ToLatin1($str) {
+ global $utf8tolatin;
+ if (!$this->isunicode) {
+ return $str; // string is not in unicode
+ }
+ $outstr = ''; // string to be returned
+ $unicode = $this->UTF8StringToArray($str); // array containing UTF-8 unicode values
+ foreach ($unicode as $char) {
+ if ($char < 256) {
+ $outstr .= chr($char);
+ } elseif (array_key_exists($char, $utf8tolatin)) {
+ // map from UTF-8
+ $outstr .= chr($utf8tolatin[$char]);
+ } elseif ($char == 0xFFFD) {
+ // skip
+ } else {
+ $outstr .= '?';
+ }
+ }
+ return $outstr;
+ }
+
+ /**
+ * Converts array of UTF-8 characters to UTF16-BE string.<br>
+ * Based on: http://www.faqs.org/rfcs/rfc2781.html
+ * <pre>
+ * Encoding UTF-16:
+ *
+ * Encoding of a single character from an ISO 10646 character value to
+ * UTF-16 proceeds as follows. Let U be the character number, no greater
+ * than 0x10FFFF.
+ *
+ * 1) If U < 0x10000, encode U as a 16-bit unsigned integer and
+ * terminate.
+ *
+ * 2) Let U' = U - 0x10000. Because U is less than or equal to 0x10FFFF,
+ * U' must be less than or equal to 0xFFFFF. That is, U' can be
+ * represented in 20 bits.
+ *
+ * 3) Initialize two 16-bit unsigned integers, W1 and W2, to 0xD800 and
+ * 0xDC00, respectively. These integers each have 10 bits free to
+ * encode the character value, for a total of 20 bits.
+ *
+ * 4) Assign the 10 high-order bits of the 20-bit U' to the 10 low-order
+ * bits of W1 and the 10 low-order bits of U' to the 10 low-order
+ * bits of W2. Terminate.
+ *
+ * Graphically, steps 2 through 4 look like:
+ * U' = yyyyyyyyyyxxxxxxxxxx
+ * W1 = 110110yyyyyyyyyy
+ * W2 = 110111xxxxxxxxxx
+ * </pre>
+ * @param array $unicode array containing UTF-8 unicode values
+ * @param boolean $setbom if true set the Byte Order Mark (BOM = 0xFEFF)
+ * @return string
+ * @access protected
+ * @author Nicola Asuni
+ * @since 2.1.000 (2008-01-08)
+ * @see UTF8ToUTF16BE()
+ */
+ protected function arrUTF8ToUTF16BE($unicode, $setbom=true) {
+ $outstr = ''; // string to be returned
+ if ($setbom) {
+ $outstr .= "\xFE\xFF"; // Byte Order Mark (BOM)
+ }
+ foreach ($unicode as $char) {
+ if ($char == 0xFFFD) {
+ $outstr .= "\xFF\xFD"; // replacement character
+ } elseif ($char < 0x10000) {
+ $outstr .= chr($char >> 0x08);
+ $outstr .= chr($char & 0xFF);
+ } else {
+ $char -= 0x10000;
+ $w1 = 0xD800 | ($char >> 0x10);
+ $w2 = 0xDC00 | ($char & 0x3FF);
+ $outstr .= chr($w1 >> 0x08);
+ $outstr .= chr($w1 & 0xFF);
+ $outstr .= chr($w2 >> 0x08);
+ $outstr .= chr($w2 & 0xFF);
+ }
+ }
+ return $outstr;
+ }
+ // ====================================================
+
+ /**
+ * Set header font.
+ * @param array $font font
+ * @access public
+ * @since 1.1
+ */
+ public function setHeaderFont($font) {
+ $this->header_font = $font;
+ }
+
+ /**
+ * Get header font.
+ * @return array()
+ * @access public
+ * @since 4.0.012 (2008-07-24)
+ */
+ public function getHeaderFont() {
+ return $this->header_font;
+ }
+
+ /**
+ * Set footer font.
+ * @param array $font font
+ * @access public
+ * @since 1.1
+ */
+ public function setFooterFont($font) {
+ $this->footer_font = $font;
+ }
+
+ /**
+ * Get Footer font.
+ * @return array()
+ * @access public
+ * @since 4.0.012 (2008-07-24)
+ */
+ public function getFooterFont() {
+ return $this->footer_font;
+ }
+
+ /**
+ * Set language array.
+ * @param array $language
+ * @access public
+ * @since 1.1
+ */
+ public function setLanguageArray($language) {
+ $this->l = $language;
+ $this->rtl = $this->l['a_meta_dir']=='rtl' ? true : false;
+ }
+
+ /**
+ * Returns the PDF data.
+ * @access public
+ */
+ public function getPDFData() {
+ if ($this->state < 3) {
+ $this->Close();
+ }
+ return $this->buffer;
+ }
+
+ /**
+ * Output anchor link.
+ * @param string $url link URL or internal link (i.e.: &lt;a href="#23"&gt;link to page 23&lt;/a&gt;)
+ * @param string $name link name
+ * @param int $fill Indicates if the cell background must be painted (1) or transparent (0). Default value: 0.
+ * @param boolean $firstline if true prints only the first line and return the remaining string.
+ * @param array $color array of RGB text color
+ * @param string $style font style (U, D, B, I)
+ * @return the number of cells used or the remaining text if $firstline = true;
+ * @access public
+ */
+ public function addHtmlLink($url, $name, $fill=0, $firstline=false, $color='', $style=-1) {
+ if (!empty($url) AND ($url{0} == '#')) {
+ // convert url to internal link
+ $page = intval(substr($url, 1));
+ $url = $this->AddLink();
+ $this->SetLink($url, 0, $page);
+ }
+ // store current settings
+ $prevcolor = $this->fgcolor;
+ $prevstyle = $this->FontStyle;
+ if (empty($color)) {
+ $this->SetTextColorArray($this->htmlLinkColorArray);
+ } else {
+ $this->SetTextColorArray($color);
+ }
+ if ($style == -1) {
+ $this->SetFont('', $this->FontStyle.$this->htmlLinkFontStyle);
+ } else {
+ $this->SetFont('', $this->FontStyle.$style);
+ }
+ $ret = $this->Write($this->lasth, $name, $url, $fill, '', false, 0, $firstline);
+ // restore settings
+ $this->SetFont('', $prevstyle);
+ $this->SetTextColorArray($prevcolor);
+ return $ret;
+ }
+
+ /**
+ * Returns an associative array (keys: R,G,B) from an html color name or a six-digit or three-digit hexadecimal color representation (i.e. #3FE5AA or #7FF).
+ * @param string $color html color
+ * @return array
+ * @access public
+ */
+ public function convertHTMLColorToDec($color='#000000') {
+ global $webcolor;
+ $color = preg_replace('/[\s]*/', '', $color); // remove extra spaces
+ $color = strtolower($color);
+ // set default color to be returned in case of error
+ $returncolor = array ('R' => 0, 'G' => 0, 'B' => 0);
+ if (empty($color)) {
+ return $returncolor;
+ }
+ if (substr($color, 0, 3) == 'rgb') {
+ $codes = substr($color, 4);
+ $codes = str_replace(')', '', $codes);
+ $returncolor = explode(',', $codes, 3);
+ return $returncolor;
+ }
+ if (substr($color, 0, 1) != '#') {
+ // decode color name
+ if (isset($webcolor[$color])) {
+ $color_code = $webcolor[$color];
+ } else {
+ return $returncolor;
+ }
+ } else {
+ $color_code = substr($color, 1);
+ }
+ switch (strlen($color_code)) {
+ case 3: {
+ // three-digit hexadecimal representation
+ $r = substr($color_code, 0, 1);
+ $g = substr($color_code, 1, 1);
+ $b = substr($color_code, 2, 1);
+ $returncolor['R'] = hexdec($r.$r);
+ $returncolor['G'] = hexdec($g.$g);
+ $returncolor['B'] = hexdec($b.$b);
+ break;
+ }
+ case 6: {
+ // six-digit hexadecimal representation
+ $returncolor['R'] = hexdec(substr($color_code, 0, 2));
+ $returncolor['G'] = hexdec(substr($color_code, 2, 2));
+ $returncolor['B'] = hexdec(substr($color_code, 4, 2));
+ break;
+ }
+ }
+ return $returncolor;
+ }
+
+ /**
+ * Converts pixels to User's Units.
+ * @param int $px pixels
+ * @return float value in user's unit
+ * @access public
+ */
+ public function pixelsToUnits($px) {
+ return ($px / $this->k);
+ }
+
+ /**
+ * Reverse function for htmlentities.
+ * Convert entities in UTF-8.
+ * @param $text_to_convert Text to convert.
+ * @return string converted
+ * @access public
+ */
+ public function unhtmlentities($text_to_convert) {
+ return html_entity_decode($text_to_convert, ENT_QUOTES, $this->encoding);
+ }
+
+ // ENCRYPTION METHODS ----------------------------------
+ // SINCE 2.0.000 (2008-01-02)
+
+ /**
+ * Compute encryption key depending on object number where the encrypted data is stored
+ * @param int $n object number
+ * @access protected
+ * @since 2.0.000 (2008-01-02)
+ */
+ protected function _objectkey($n) {
+ return substr($this->_md5_16($this->encryption_key.pack('VXxx', $n)), 0, 10);
+ }
+
+ /**
+ * Put encryption on PDF document.
+ * @access protected
+ * @since 2.0.000 (2008-01-02)
+ */
+ protected function _putencryption() {
+ $this->_out('/Filter /Standard');
+ $this->_out('/V 1');
+ $this->_out('/R 2');
+ $this->_out('/O ('.$this->_escape($this->Ovalue).')');
+ $this->_out('/U ('.$this->_escape($this->Uvalue).')');
+ $this->_out('/P '.$this->Pvalue);
+ }
+
+ /**
+ * Returns the input text exrypted using RC4 algorithm and the specified key.
+ * RC4 is the standard encryption algorithm used in PDF format
+ * @param string $key encryption key
+ * @param String $text input text to be encrypted
+ * @return String encrypted text
+ * @access protected
+ * @since 2.0.000 (2008-01-02)
+ * @author Klemen Vodopivec
+ */
+ protected function _RC4($key, $text) {
+ if ($this->last_rc4_key != $key) {
+ $k = str_repeat($key, ((256 / strlen($key)) + 1));
+ $rc4 = range(0, 255);
+ $j = 0;
+ for ($i = 0; $i < 256; ++$i) {
+ $t = $rc4[$i];
+ $j = ($j + $t + ord($k{$i})) % 256;
+ $rc4[$i] = $rc4[$j];
+ $rc4[$j] = $t;
+ }
+ $this->last_rc4_key = $key;
+ $this->last_rc4_key_c = $rc4;
+ } else {
+ $rc4 = $this->last_rc4_key_c;
+ }
+ $len = strlen($text);
+ $a = 0;
+ $b = 0;
+ $out = '';
+ for ($i = 0; $i < $len; ++$i) {
+ $a = ($a + 1) % 256;
+ $t = $rc4[$a];
+ $b = ($b + $t) % 256;
+ $rc4[$a] = $rc4[$b];
+ $rc4[$b] = $t;
+ $k = $rc4[($rc4[$a] + $rc4[$b]) % 256];
+ $out .= chr(ord($text{$i}) ^ $k);
+ }
+ return $out;
+ }
+
+ /**
+ * Encrypts a string using MD5 and returns it's value as a binary string.
+ * @param string $str input string
+ * @return String MD5 encrypted binary string
+ * @access protected
+ * @since 2.0.000 (2008-01-02)
+ * @author Klemen Vodopivec
+ */
+ protected function _md5_16($str) {
+ return pack('H*', md5($str));
+ }
+
+ /**
+ * Compute O value (used for RC4 encryption)
+ * @param String $user_pass user password
+ * @param String $owner_pass user password
+ * @return String O value
+ * @access protected
+ * @since 2.0.000 (2008-01-02)
+ * @author Klemen Vodopivec
+ */
+ protected function _Ovalue($user_pass, $owner_pass) {
+ $tmp = $this->_md5_16($owner_pass);
+ $owner_RC4_key = substr($tmp, 0, 5);
+ return $this->_RC4($owner_RC4_key, $user_pass);
+ }
+
+ /**
+ * Compute U value (used for RC4 encryption)
+ * @return String U value
+ * @access protected
+ * @since 2.0.000 (2008-01-02)
+ * @author Klemen Vodopivec
+ */
+ protected function _Uvalue() {
+ return $this->_RC4($this->encryption_key, $this->padding);
+ }
+
+ /**
+ * Compute encryption key
+ * @param String $user_pass user password
+ * @param String $owner_pass user password
+ * @param String $protection protection type
+ * @access protected
+ * @since 2.0.000 (2008-01-02)
+ * @author Klemen Vodopivec
+ */
+ protected function _generateencryptionkey($user_pass, $owner_pass, $protection) {
+ // Pad passwords
+ $user_pass = substr($user_pass.$this->padding, 0, 32);
+ $owner_pass = substr($owner_pass.$this->padding, 0, 32);
+ // Compute O value
+ $this->Ovalue = $this->_Ovalue($user_pass, $owner_pass);
+ // Compute encyption key
+ $tmp = $this->_md5_16($user_pass.$this->Ovalue.chr($protection)."\xFF\xFF\xFF");
+ $this->encryption_key = substr($tmp, 0, 5);
+ // Compute U value
+ $this->Uvalue = $this->_Uvalue();
+ // Compute P value
+ $this->Pvalue = -(($protection^255) + 1);
+ }
+
+ /**
+ * Set document protection
+ * The permission array is composed of values taken from the following ones:
+ * - copy: copy text and images to the clipboard
+ * - print: print the document
+ * - modify: modify it (except for annotations and forms)
+ * - annot-forms: add annotations and forms
+ * Remark: the protection against modification is for people who have the full Acrobat product.
+ * If you don't set any password, the document will open as usual. If you set a user password, the PDF viewer will ask for it before displaying the document. The master password, if different from the user one, can be used to get full access.
+ * Note: protecting a document requires to encrypt it, which increases the processing time a lot. This can cause a PHP time-out in some cases, especially if the document contains images or fonts.
+ * @param Array $permissions the set of permissions. Empty by default (only viewing is allowed). (print, modify, copy, annot-forms)
+ * @param String $user_pass user password. Empty by default.
+ * @param String $owner_pass owner password. If not specified, a random value is used.
+ * @access public
+ * @since 2.0.000 (2008-01-02)
+ * @author Klemen Vodopivec
+ */
+ public function SetProtection($permissions=array(), $user_pass='', $owner_pass=null) {
+ $options = array('print' => 4, 'modify' => 8, 'copy' => 16, 'annot-forms' => 32);
+ $protection = 192;
+ foreach ($permissions as $permission) {
+ if (!isset($options[$permission])) {
+ $this->Error('Incorrect permission: '.$permission);
+ }
+ $protection += $options[$permission];
+ }
+ if ($owner_pass === null) {
+ $owner_pass = uniqid(rand());
+ }
+ $this->encrypted = true;
+ $this->_generateencryptionkey($user_pass, $owner_pass, $protection);
+ }
+
+ // END OF ENCRYPTION FUNCTIONS -------------------------
+
+ // START TRANSFORMATIONS SECTION -----------------------
+
+ /**
+ * Starts a 2D tranformation saving current graphic state.
+ * This function must be called before scaling, mirroring, translation, rotation and skewing.
+ * Use StartTransform() before, and StopTransform() after the transformations to restore the normal behavior.
+ * @access public
+ * @since 2.1.000 (2008-01-07)
+ * @see StartTransform(), StopTransform()
+ */
+ public function StartTransform() {
+ $this->_out('q');
+ $this->transfmrk[$this->page][] = $this->pagelen[$this->page];
+ }
+
+ /**
+ * Stops a 2D tranformation restoring previous graphic state.
+ * This function must be called after scaling, mirroring, translation, rotation and skewing.
+ * Use StartTransform() before, and StopTransform() after the transformations to restore the normal behavior.
+ * @access public
+ * @since 2.1.000 (2008-01-07)
+ * @see StartTransform(), StopTransform()
+ */
+ public function StopTransform() {
+ $this->_out('Q');
+ if (isset($this->transfmatrix)) {
+ array_pop($this->transfmatrix);
+ }
+ array_pop($this->transfmrk[$this->page]);
+ }
+ /**
+ * Horizontal Scaling.
+ * @param float $s_x scaling factor for width as percent. 0 is not allowed.
+ * @param int $x abscissa of the scaling center. Default is current x position
+ * @param int $y ordinate of the scaling center. Default is current y position
+ * @access public
+ * @since 2.1.000 (2008-01-07)
+ * @see StartTransform(), StopTransform()
+ */
+ public function ScaleX($s_x, $x='', $y='') {
+ $this->Scale($s_x, 100, $x, $y);
+ }
+
+ /**
+ * Vertical Scaling.
+ * @param float $s_y scaling factor for height as percent. 0 is not allowed.
+ * @param int $x abscissa of the scaling center. Default is current x position
+ * @param int $y ordinate of the scaling center. Default is current y position
+ * @access public
+ * @since 2.1.000 (2008-01-07)
+ * @see StartTransform(), StopTransform()
+ */
+ public function ScaleY($s_y, $x='', $y='') {
+ $this->Scale(100, $s_y, $x, $y);
+ }
+
+ /**
+ * Vertical and horizontal proportional Scaling.
+ * @param float $s scaling factor for width and height as percent. 0 is not allowed.
+ * @param int $x abscissa of the scaling center. Default is current x position
+ * @param int $y ordinate of the scaling center. Default is current y position
+ * @access public
+ * @since 2.1.000 (2008-01-07)
+ * @see StartTransform(), StopTransform()
+ */
+ public function ScaleXY($s, $x='', $y='') {
+ $this->Scale($s, $s, $x, $y);
+ }
+
+ /**
+ * Vertical and horizontal non-proportional Scaling.
+ * @param float $s_x scaling factor for width as percent. 0 is not allowed.
+ * @param float $s_y scaling factor for height as percent. 0 is not allowed.
+ * @param int $x abscissa of the scaling center. Default is current x position
+ * @param int $y ordinate of the scaling center. Default is current y position
+ * @access public
+ * @since 2.1.000 (2008-01-07)
+ * @see StartTransform(), StopTransform()
+ */
+ public function Scale($s_x, $s_y, $x='', $y='') {
+ if ($x === '') {
+ $x = $this->x;
+ }
+ if ($y === '') {
+ $y = $this->y;
+ }
+ if ($this->rtl) {
+ $x = $this->w - $x;
+ }
+ if (($s_x == 0) OR ($s_y == 0)) {
+ $this->Error('Please do not use values equal to zero for scaling');
+ }
+ $y = ($this->h - $y) * $this->k;
+ $x *= $this->k;
+ //calculate elements of transformation matrix
+ $s_x /= 100;
+ $s_y /= 100;
+ $tm[0] = $s_x;
+ $tm[1] = 0;
+ $tm[2] = 0;
+ $tm[3] = $s_y;
+ $tm[4] = $x * (1 - $s_x);
+ $tm[5] = $y * (1 - $s_y);
+ //scale the coordinate system
+ $this->Transform($tm);
+ }
+
+ /**
+ * Horizontal Mirroring.
+ * @param int $x abscissa of the point. Default is current x position
+ * @access public
+ * @since 2.1.000 (2008-01-07)
+ * @see StartTransform(), StopTransform()
+ */
+ public function MirrorH($x='') {
+ $this->Scale(-100, 100, $x);
+ }
+
+ /**
+ * Verical Mirroring.
+ * @param int $y ordinate of the point. Default is current y position
+ * @access public
+ * @since 2.1.000 (2008-01-07)
+ * @see StartTransform(), StopTransform()
+ */
+ public function MirrorV($y='') {
+ $this->Scale(100, -100, '', $y);
+ }
+
+ /**
+ * Point reflection mirroring.
+ * @param int $x abscissa of the point. Default is current x position
+ * @param int $y ordinate of the point. Default is current y position
+ * @access public
+ * @since 2.1.000 (2008-01-07)
+ * @see StartTransform(), StopTransform()
+ */
+ public function MirrorP($x='',$y='') {
+ $this->Scale(-100, -100, $x, $y);
+ }
+
+ /**
+ * Reflection against a straight line through point (x, y) with the gradient angle (angle).
+ * @param float $angle gradient angle of the straight line. Default is 0 (horizontal line).
+ * @param int $x abscissa of the point. Default is current x position
+ * @param int $y ordinate of the point. Default is current y position
+ * @access public
+ * @since 2.1.000 (2008-01-07)
+ * @see StartTransform(), StopTransform()
+ */
+ public function MirrorL($angle=0, $x='',$y='') {
+ $this->Scale(-100, 100, $x, $y);
+ $this->Rotate(-2*($angle-90), $x, $y);
+ }
+
+ /**
+ * Translate graphic object horizontally.
+ * @param int $t_x movement to the right (or left for RTL)
+ * @access public
+ * @since 2.1.000 (2008-01-07)
+ * @see StartTransform(), StopTransform()
+ */
+ public function TranslateX($t_x) {
+ $this->Translate($t_x, 0);
+ }
+
+ /**
+ * Translate graphic object vertically.
+ * @param int $t_y movement to the bottom
+ * @access public
+ * @since 2.1.000 (2008-01-07)
+ * @see StartTransform(), StopTransform()
+ */
+ public function TranslateY($t_y) {
+ $this->Translate(0, $t_y);
+ }
+
+ /**
+ * Translate graphic object horizontally and vertically.
+ * @param int $t_x movement to the right
+ * @param int $t_y movement to the bottom
+ * @access public
+ * @since 2.1.000 (2008-01-07)
+ * @see StartTransform(), StopTransform()
+ */
+ public function Translate($t_x, $t_y) {
+ if ($this->rtl) {
+ $t_x = -$t_x;
+ }
+ //calculate elements of transformation matrix
+ $tm[0] = 1;
+ $tm[1] = 0;
+ $tm[2] = 0;
+ $tm[3] = 1;
+ $tm[4] = $t_x * $this->k;
+ $tm[5] = -$t_y * $this->k;
+ //translate the coordinate system
+ $this->Transform($tm);
+ }
+
+ /**
+ * Rotate object.
+ * @param float $angle angle in degrees for counter-clockwise rotation
+ * @param int $x abscissa of the rotation center. Default is current x position
+ * @param int $y ordinate of the rotation center. Default is current y position
+ * @access public
+ * @since 2.1.000 (2008-01-07)
+ * @see StartTransform(), StopTransform()
+ */
+ public function Rotate($angle, $x='', $y='') {
+ if ($x === '') {
+ $x = $this->x;
+ }
+ if ($y === '') {
+ $y = $this->y;
+ }
+ if ($this->rtl) {
+ $x = $this->w - $x;
+ $angle = -$angle;
+ }
+ $y = ($this->h - $y) * $this->k;
+ $x *= $this->k;
+ //calculate elements of transformation matrix
+ $tm[0] = cos(deg2rad($angle));
+ $tm[1] = sin(deg2rad($angle));
+ $tm[2] = -$tm[1];
+ $tm[3] = $tm[0];
+ $tm[4] = $x + ($tm[1] * $y) - ($tm[0] * $x);
+ $tm[5] = $y - ($tm[0] * $y) - ($tm[1] * $x);
+ //rotate the coordinate system around ($x,$y)
+ $this->Transform($tm);
+ }
+
+ /**
+ * Skew horizontally.
+ * @param float $angle_x angle in degrees between -90 (skew to the left) and 90 (skew to the right)
+ * @param int $x abscissa of the skewing center. default is current x position
+ * @param int $y ordinate of the skewing center. default is current y position
+ * @access public
+ * @since 2.1.000 (2008-01-07)
+ * @see StartTransform(), StopTransform()
+ */
+ public function SkewX($angle_x, $x='', $y='') {
+ $this->Skew($angle_x, 0, $x, $y);
+ }
+
+ /**
+ * Skew vertically.
+ * @param float $angle_y angle in degrees between -90 (skew to the bottom) and 90 (skew to the top)
+ * @param int $x abscissa of the skewing center. default is current x position
+ * @param int $y ordinate of the skewing center. default is current y position
+ * @access public
+ * @since 2.1.000 (2008-01-07)
+ * @see StartTransform(), StopTransform()
+ */
+ public function SkewY($angle_y, $x='', $y='') {
+ $this->Skew(0, $angle_y, $x, $y);
+ }
+
+ /**
+ * Skew.
+ * @param float $angle_x angle in degrees between -90 (skew to the left) and 90 (skew to the right)
+ * @param float $angle_y angle in degrees between -90 (skew to the bottom) and 90 (skew to the top)
+ * @param int $x abscissa of the skewing center. default is current x position
+ * @param int $y ordinate of the skewing center. default is current y position
+ * @access public
+ * @since 2.1.000 (2008-01-07)
+ * @see StartTransform(), StopTransform()
+ */
+ public function Skew($angle_x, $angle_y, $x='', $y='') {
+ if ($x === '') {
+ $x = $this->x;
+ }
+ if ($y === '') {
+ $y = $this->y;
+ }
+ if ($this->rtl) {
+ $x = $this->w - $x;
+ $angle_x = -$angle_x;
+ }
+ if (($angle_x <= -90) OR ($angle_x >= 90) OR ($angle_y <= -90) OR ($angle_y >= 90)) {
+ $this->Error('Please use values between -90 and +90 degrees for Skewing.');
+ }
+ $x *= $this->k;
+ $y = ($this->h - $y) * $this->k;
+ //calculate elements of transformation matrix
+ $tm[0] = 1;
+ $tm[1] = tan(deg2rad($angle_y));
+ $tm[2] = tan(deg2rad($angle_x));
+ $tm[3] = 1;
+ $tm[4] = -$tm[2] * $y;
+ $tm[5] = -$tm[1] * $x;
+ //skew the coordinate system
+ $this->Transform($tm);
+ }
+
+ /**
+ * Apply graphic transformations.
+ * @access protected
+ * @since 2.1.000 (2008-01-07)
+ * @see StartTransform(), StopTransform()
+ */
+ protected function Transform($tm) {
+ $this->_out(sprintf('%.3F %.3F %.3F %.3F %.3F %.3F cm', $tm[0], $tm[1], $tm[2], $tm[3], $tm[4], $tm[5]));
+ // store transformation matrix
+ $this->transfmatrix[] = array('a' => $tm[0], 'b' => $tm[1], 'c' => $tm[2], 'd' => $tm[3], 'e' => $tm[4], 'f' => $tm[5]);
+ // update tranformation mark
+ if (end($this->transfmrk[$this->page]) !== false) {
+ $key = key($this->transfmrk[$this->page]);
+ $this->transfmrk[$this->page][$key] = $this->pagelen[$this->page];
+ }
+ }
+
+ // END TRANSFORMATIONS SECTION -------------------------
+
+
+ // START GRAPHIC FUNCTIONS SECTION ---------------------
+ // The following section is based on the code provided by David Hernandez Sanz
+
+ /**
+ * Defines the line width. By default, the value equals 0.2 mm. The method can be called before the first page is created and the value is retained from page to page.
+ * @param float $width The width.
+ * @access public
+ * @since 1.0
+ * @see Line(), Rect(), Cell(), MultiCell()
+ */
+ public function SetLineWidth($width) {
+ //Set line width
+ $this->LineWidth = $width;
+ $this->linestyleWidth = sprintf('%.2F w', ($width * $this->k));
+ $this->_out($this->linestyleWidth);
+ }
+
+ /**
+ * Returns the current the line width.
+ * @return int Line width
+ * @access public
+ * @since 2.1.000 (2008-01-07)
+ * @see Line(), SetLineWidth()
+ */
+ public function GetLineWidth() {
+ return $this->LineWidth;
+ }
+
+ /**
+ * Set line style.
+ * @param array $style Line style. Array with keys among the following:
+ * <ul>
+ * <li>width (float): Width of the line in user units.</li>
+ * <li>cap (string): Type of cap to put on the line. Possible values are:
+ * butt, round, square. The difference between "square" and "butt" is that
+ * "square" projects a flat end past the end of the line.</li>
+ * <li>join (string): Type of join. Possible values are: miter, round,
+ * bevel.</li>
+ * <li>dash (mixed): Dash pattern. Is 0 (without dash) or string with
+ * series of length values, which are the lengths of the on and off dashes.
+ * For example: "2" represents 2 on, 2 off, 2 on, 2 off, ...; "2,1" is 2 on,
+ * 1 off, 2 on, 1 off, ...</li>
+ * <li>phase (integer): Modifier on the dash pattern which is used to shift
+ * the point at which the pattern starts.</li>
+ * <li>color (array): Draw color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K).</li>
+ * </ul>
+ * @access public
+ * @since 2.1.000 (2008-01-08)
+ */
+ public function SetLineStyle($style) {
+ extract($style);
+ if (isset($width)) {
+ $width_prev = $this->LineWidth;
+ $this->SetLineWidth($width);
+ $this->LineWidth = $width_prev;
+ }
+ if (isset($cap)) {
+ $ca = array('butt' => 0, 'round'=> 1, 'square' => 2);
+ if (isset($ca[$cap])) {
+ $this->linestyleCap = $ca[$cap].' J';
+ $this->_out($this->linestyleCap);
+ }
+ }
+ if (isset($join)) {
+ $ja = array('miter' => 0, 'round' => 1, 'bevel' => 2);
+ if (isset($ja[$join])) {
+ $this->linestyleJoin = $ja[$join].' j';
+ $this->_out($this->linestyleJoin);
+ }
+ }
+ if (isset($dash)) {
+ $dash_string = '';
+ if ($dash) {
+ //if (ereg('^.+,', $dash)) {
+ if (preg_match('/^.+,/', $dash)) {
+ $tab = explode(',', $dash);
+ } else {
+ $tab = array($dash);
+ }
+ $dash_string = '';
+ foreach ($tab as $i => $v) {
+ if ($i) {
+ $dash_string .= ' ';
+ }
+ $dash_string .= sprintf("%.2F", $v);
+ }
+ }
+ if (!isset($phase) OR !$dash) {
+ $phase = 0;
+ }
+ $this->linestyleDash = sprintf("[%s] %.2F d", $dash_string, $phase);
+ $this->_out($this->linestyleDash);
+ }
+ if (isset($color)) {
+ $this->SetDrawColorArray($color);
+ }
+ }
+
+ /*
+ * Set a draw point.
+ * @param float $x Abscissa of point.
+ * @param float $y Ordinate of point.
+ * @access protected
+ * @since 2.1.000 (2008-01-08)
+ */
+ protected function _outPoint($x, $y) {
+ if ($this->rtl) {
+ $x = $this->w - $x;
+ }
+ $this->_out(sprintf("%.2F %.2F m", $x * $this->k, ($this->h - $y) * $this->k));
+ }
+
+ /*
+ * Draws a line from last draw point.
+ * @param float $x Abscissa of end point.
+ * @param float $y Ordinate of end point.
+ * @access protected
+ * @since 2.1.000 (2008-01-08)
+ */
+ protected function _outLine($x, $y) {
+ if ($this->rtl) {
+ $x = $this->w - $x;
+ }
+ $this->_out(sprintf("%.2F %.2F l", $x * $this->k, ($this->h - $y) * $this->k));
+ }
+
+ /**
+ * Draws a rectangle.
+ * @param float $x Abscissa of upper-left corner (or upper-right corner for RTL language).
+ * @param float $y Ordinate of upper-left corner (or upper-right corner for RTL language).
+ * @param float $w Width.
+ * @param float $h Height.
+ * @param string $op options
+ * @access protected
+ * @since 2.1.000 (2008-01-08)
+ */
+ protected function _outRect($x, $y, $w, $h, $op) {
+ if ($this->rtl) {
+ $x = $this->w - $x - $w;
+ }
+ $this->_out(sprintf('%.2F %.2F %.2F %.2F re %s', $x*$this->k, ($this->h-$y)*$this->k, $w*$this->k, -$h*$this->k, $op));
+ }
+
+ /*
+ * Draws a Bezier curve from last draw point.
+ * The Bezier curve is a tangent to the line between the control points at either end of the curve.
+ * @param float $x1 Abscissa of control point 1.
+ * @param float $y1 Ordinate of control point 1.
+ * @param float $x2 Abscissa of control point 2.
+ * @param float $y2 Ordinate of control point 2.
+ * @param float $x3 Abscissa of end point.
+ * @param float $y3 Ordinate of end point.
+ * @access protected
+ * @since 2.1.000 (2008-01-08)
+ */
+ protected function _outCurve($x1, $y1, $x2, $y2, $x3, $y3) {
+ if ($this->rtl) {
+ $x1 = $this->w - $x1;
+ $x2 = $this->w - $x2;
+ $x3 = $this->w - $x3;
+ }
+ $this->_out(sprintf("%.2F %.2F %.2F %.2F %.2F %.2F c", $x1 * $this->k, ($this->h - $y1) * $this->k, $x2 * $this->k, ($this->h - $y2) * $this->k, $x3 * $this->k, ($this->h - $y3) * $this->k));
+ }
+
+ /**
+ * Draws a line between two points.
+ * @param float $x1 Abscissa of first point.
+ * @param float $y1 Ordinate of first point.
+ * @param float $x2 Abscissa of second point.
+ * @param float $y2 Ordinate of second point.
+ * @param array $style Line style. Array like for {@link SetLineStyle SetLineStyle}. Default value: default line style (empty array).
+ * @access public
+ * @since 1.0
+ * @see SetLineWidth(), SetDrawColor(), SetLineStyle()
+ */
+ public function Line($x1, $y1, $x2, $y2, $style=array()) {
+ if ($style) {
+ $this->SetLineStyle($style);
+ }
+ $this->_outPoint($x1, $y1);
+ $this->_outLine($x2, $y2);
+ $this->_out(' S');
+ }
+
+ /**
+ * Draws a rectangle.
+ * @param float $x Abscissa of upper-left corner (or upper-right corner for RTL language).
+ * @param float $y Ordinate of upper-left corner (or upper-right corner for RTL language).
+ * @param float $w Width.
+ * @param float $h Height.
+ * @param string $style Style of rendering. Possible values are:
+ * <ul>
+ * <li>D or empty string: Draw (default).</li>
+ * <li>F: Fill.</li>
+ * <li>DF or FD: Draw and fill.</li>
+ * <li>CNZ: Clipping mode (using the even-odd rule to determine which regions lie inside the clipping path).</li>
+ * <li>CEO: Clipping mode (using the nonzero winding number rule to determine which regions lie inside the clipping path).</li>
+ * </ul>
+ * @param array $border_style Border style of rectangle. Array with keys among the following:
+ * <ul>
+ * <li>all: Line style of all borders. Array like for {@link SetLineStyle SetLineStyle}.</li>
+ * <li>L, T, R, B or combinations: Line style of left, top, right or bottom border. Array like for {@link SetLineStyle SetLineStyle}.</li>
+ * </ul>
+ * If a key is not present or is null, not draws the border. Default value: default line style (empty array).
+ * @param array $border_style Border style of rectangle. Array like for {@link SetLineStyle SetLineStyle}. Default value: default line style (empty array).
+ * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K). Default value: default color (empty array).
+ * @access public
+ * @since 1.0
+ * @see SetLineStyle()
+ */
+ public function Rect($x, $y, $w, $h, $style='', $border_style=array(), $fill_color=array()) {
+ if (!(false === strpos($style, 'F')) AND isset($fill_color)) {
+ $this->SetFillColorArray($fill_color);
+ }
+ switch ($style) {
+ case 'F': {
+ $op = 'f';
+ $border_style = array();
+ $this->_outRect($x, $y, $w, $h, $op);
+ break;
+ }
+ case 'DF':
+ case 'FD': {
+ if ((!$border_style) OR (isset($border_style['all']))) {
+ $op = 'B';
+ if (isset($border_style['all'])) {
+ $this->SetLineStyle($border_style['all']);
+ $border_style = array();
+ }
+ } else {
+ $op = 'f';
+ }
+ $this->_outRect($x, $y, $w, $h, $op);
+ break;
+ }
+ case 'CNZ': {
+ $op = 'W n';
+ $this->_outRect($x, $y, $w, $h, $op);
+ break;
+ }
+ case 'CEO': {
+ $op = 'W* n';
+ $this->_outRect($x, $y, $w, $h, $op);
+ break;
+ }
+ default: {
+ $op = 'S';
+ if ((!$border_style) OR (isset($border_style['all']))) {
+ if (isset($border_style['all']) AND $border_style['all']) {
+ $this->SetLineStyle($border_style['all']);
+ $border_style = array();
+ }
+ $this->_outRect($x, $y, $w, $h, $op);
+ }
+ break;
+ }
+ }
+ if ($border_style) {
+ $border_style2 = array();
+ foreach ($border_style as $line => $value) {
+ $lenght = strlen($line);
+ for ($i = 0; $i < $lenght; ++$i) {
+ $border_style2[$line[$i]] = $value;
+ }
+ }
+ $border_style = $border_style2;
+ if (isset($border_style['L']) AND $border_style['L']) {
+ $this->Line($x, $y, $x, $y + $h, $border_style['L']);
+ }
+ if (isset($border_style['T']) AND $border_style['T']) {
+ $this->Line($x, $y, $x + $w, $y, $border_style['T']);
+ }
+ if (isset($border_style['R']) AND $border_style['R']) {
+ $this->Line($x + $w, $y, $x + $w, $y + $h, $border_style['R']);
+ }
+ if (isset($border_style['B']) AND $border_style['B']) {
+ $this->Line($x, $y + $h, $x + $w, $y + $h, $border_style['B']);
+ }
+ }
+ }
+
+
+ /**
+ * Draws a Bezier curve.
+ * The Bezier curve is a tangent to the line between the control points at
+ * either end of the curve.
+ * @param float $x0 Abscissa of start point.
+ * @param float $y0 Ordinate of start point.
+ * @param float $x1 Abscissa of control point 1.
+ * @param float $y1 Ordinate of control point 1.
+ * @param float $x2 Abscissa of control point 2.
+ * @param float $y2 Ordinate of control point 2.
+ * @param float $x3 Abscissa of end point.
+ * @param float $y3 Ordinate of end point.
+ * @param string $style Style of rendering. Possible values are:
+ * <ul>
+ * <li>D or empty string: Draw (default).</li>
+ * <li>F: Fill.</li>
+ * <li>DF or FD: Draw and fill.</li>
+ * <li>CNZ: Clipping mode (using the even-odd rule to determine which regions lie inside the clipping path).</li>
+ * <li>CEO: Clipping mode (using the nonzero winding number rule to determine which regions lie inside the clipping path).</li>
+ * </ul>
+ * @param array $line_style Line style of curve. Array like for {@link SetLineStyle SetLineStyle}. Default value: default line style (empty array).
+ * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K). Default value: default color (empty array).
+ * @access public
+ * @see SetLineStyle()
+ * @since 2.1.000 (2008-01-08)
+ */
+ public function Curve($x0, $y0, $x1, $y1, $x2, $y2, $x3, $y3, $style='', $line_style=array(), $fill_color=array()) {
+ if (!(false === strpos($style, 'F')) AND isset($fill_color)) {
+ $this->SetFillColorArray($fill_color);
+ }
+ switch ($style) {
+ case 'F': {
+ $op = 'f';
+ $line_style = array();
+ break;
+ }
+ case 'FD':
+ case 'DF': {
+ $op = 'B';
+ break;
+ }
+ case 'CNZ': {
+ $op = 'W n';
+ break;
+ }
+ case 'CEO': {
+ $op = 'W* n';
+ break;
+ }
+ default: {
+ $op = 'S';
+ break;
+ }
+ }
+ if ($line_style) {
+ $this->SetLineStyle($line_style);
+ }
+ $this->_outPoint($x0, $y0);
+ $this->_outCurve($x1, $y1, $x2, $y2, $x3, $y3);
+ $this->_out($op);
+ }
+
+ /**
+ * Draws a poly-Bezier curve.
+ * Each Bezier curve segment is a tangent to the line between the control points at
+ * either end of the curve.
+ * @param float $x0 Abscissa of start point.
+ * @param float $y0 Ordinate of start point.
+ * @param float $segments An array of bezier descriptions. Format: array(x1, y1, x2, y2, x3, y3).
+ * @param string $style Style of rendering. Possible values are:
+ * <ul>
+ * <li>D or empty string: Draw (default).</li>
+ * <li>F: Fill.</li>
+ * <li>DF or FD: Draw and fill.</li>
+ * <li>CNZ: Clipping mode (using the even-odd rule to determine which regions lie inside the clipping path).</li>
+ * <li>CEO: Clipping mode (using the nonzero winding number rule to determine which regions lie inside the clipping path).</li>
+ * </ul>
+ * @param array $line_style Line style of curve. Array like for {@link SetLineStyle SetLineStyle}. Default value: default line style (empty array).
+ * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K). Default value: default color (empty array).
+ * @access public
+ * @see SetLineStyle()
+ * @since 3.0008 (2008-05-12)
+ */
+ public function Polycurve($x0, $y0, $segments, $style='', $line_style=array(), $fill_color=array()) {
+ if (!(false === strpos($style, 'F')) AND isset($fill_color)) {
+ $this->SetFillColorArray($fill_color);
+ }
+ switch ($style) {
+ case 'F': {
+ $op = 'f';
+ $line_style = array();
+ break;
+ }
+ case 'FD':
+ case 'DF': {
+ $op = 'B';
+ break;
+ }
+ case 'CNZ': {
+ $op = 'W n';
+ break;
+ }
+ case 'CEO': {
+ $op = 'W* n';
+ break;
+ }
+ default: {
+ $op = 'S';
+ break;
+ }
+ }
+ if ($line_style) {
+ $this->SetLineStyle($line_style);
+ }
+ $this->_outPoint($x0, $y0);
+ foreach ($segments as $segment) {
+ list($x1, $y1, $x2, $y2, $x3, $y3) = $segment;
+ $this->_outCurve($x1, $y1, $x2, $y2, $x3, $y3);
+ }
+ $this->_out($op);
+ }
+
+ /**
+ * Draws an ellipse.
+ * An ellipse is formed from n Bezier curves.
+ * @param float $x0 Abscissa of center point.
+ * @param float $y0 Ordinate of center point.
+ * @param float $rx Horizontal radius.
+ * @param float $ry Vertical radius (if ry = 0 then is a circle, see {@link Circle Circle}). Default value: 0.
+ * @param float $angle: Angle oriented (anti-clockwise). Default value: 0.
+ * @param float $astart: Angle start of draw line. Default value: 0.
+ * @param float $afinish: Angle finish of draw line. Default value: 360.
+ * @param string $style Style of rendering. Possible values are:
+ * <ul>
+ * <li>D or empty string: Draw (default).</li>
+ * <li>F: Fill.</li>
+ * <li>DF or FD: Draw and fill.</li>
+ * <li>C: Draw close.</li>
+ * <li>CNZ: Clipping mode (using the even-odd rule to determine which regions lie inside the clipping path).</li>
+ * <li>CEO: Clipping mode (using the nonzero winding number rule to determine which regions lie inside the clipping path).</li>
+ * </ul>
+ * @param array $line_style Line style of ellipse. Array like for {@link SetLineStyle SetLineStyle}. Default value: default line style (empty array).
+ * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K). Default value: default color (empty array).
+ * @param integer $nc Number of curves used in ellipse. Default value: 8.
+ * @access public
+ * @since 2.1.000 (2008-01-08)
+ */
+ public function Ellipse($x0, $y0, $rx, $ry=0, $angle=0, $astart=0, $afinish=360, $style='', $line_style=array(), $fill_color=array(), $nc=8) {
+ if ($angle) {
+ $this->StartTransform();
+ $this->Rotate($angle, $x0, $y0);
+ $this->Ellipse($x0, $y0, $rx, $ry, 0, $astart, $afinish, $style, $line_style, $fill_color, $nc);
+ $this->StopTransform();
+ return;
+ }
+ if ($rx) {
+ if (!(false === strpos($style, 'F')) AND isset($fill_color)) {
+ $this->SetFillColorArray($fill_color);
+ }
+ switch ($style) {
+ case 'F': {
+ $op = 'f';
+ $line_style = array();
+ break;
+ }
+ case 'FD':
+ case 'DF': {
+ $op = 'B';
+ break;
+ }
+ case 'C': {
+ $op = 's'; // Small 's' signifies closing the path as well
+ break;
+ }
+ case 'CNZ': {
+ $op = 'W n';
+ break;
+ }
+ case 'CEO': {
+ $op = 'W* n';
+ break;
+ }
+ default: {
+ $op = 'S';
+ break;
+ }
+ }
+ if ($line_style) {
+ $this->SetLineStyle($line_style);
+ }
+ if (!$ry) {
+ $ry = $rx;
+ }
+ $rx *= $this->k;
+ $ry *= $this->k;
+ if ($nc < 2) {
+ $nc = 2;
+ }
+ $astart = deg2rad((float) $astart);
+ $afinish = deg2rad((float) $afinish);
+ $total_angle = $afinish - $astart;
+ $dt = $total_angle / $nc;
+ $dtm = $dt / 3;
+ $x0 *= $this->k;
+ $y0 = ($this->h - $y0) * $this->k;
+ $t1 = $astart;
+ $a0 = $x0 + ($rx * cos($t1));
+ $b0 = $y0 + ($ry * sin($t1));
+ $c0 = -$rx * sin($t1);
+ $d0 = $ry * cos($t1);
+ $this->_outPoint($a0 / $this->k, $this->h - ($b0 / $this->k));
+ for ($i = 1; $i <= $nc; ++$i) {
+ // Draw this bit of the total curve
+ $t1 = ($i * $dt) + $astart;
+ $a1 = $x0 + ($rx * cos($t1));
+ $b1 = $y0 + ($ry * sin($t1));
+ $c1 = -$rx * sin($t1);
+ $d1 = $ry * cos($t1);
+ $this->_outCurve(($a0 + ($c0 * $dtm)) / $this->k, $this->h - (($b0 + ($d0 * $dtm)) / $this->k), ($a1 - ($c1 * $dtm)) / $this->k, $this->h - (($b1 - ($d1 * $dtm)) / $this->k), $a1 / $this->k, $this->h - ($b1 / $this->k));
+ $a0 = $a1;
+ $b0 = $b1;
+ $c0 = $c1;
+ $d0 = $d1;
+ }
+ $this->_out($op);
+ }
+ }
+
+ /**
+ * Draws a circle.
+ * A circle is formed from n Bezier curves.
+ * @param float $x0 Abscissa of center point.
+ * @param float $y0 Ordinate of center point.
+ * @param float $r Radius.
+ * @param float $astart: Angle start of draw line. Default value: 0.
+ * @param float $afinish: Angle finish of draw line. Default value: 360.
+ * @param string $style Style of rendering. Possible values are:
+ * <ul>
+ * <li>D or empty string: Draw (default).</li>
+ * <li>F: Fill.</li>
+ * <li>DF or FD: Draw and fill.</li>
+ * <li>C: Draw close.</li>
+ * <li>CNZ: Clipping mode (using the even-odd rule to determine which regions lie inside the clipping path).</li>
+ * <li>CEO: Clipping mode (using the nonzero winding number rule to determine which regions lie inside the clipping path).</li>
+ * </ul>
+ * @param array $line_style Line style of circle. Array like for {@link SetLineStyle SetLineStyle}. Default value: default line style (empty array).
+ * @param array $fill_color Fill color. Format: array(red, green, blue). Default value: default color (empty array).
+ * @param integer $nc Number of curves used in circle. Default value: 8.
+ * @access public
+ * @since 2.1.000 (2008-01-08)
+ */
+ public function Circle($x0, $y0, $r, $astart=0, $afinish=360, $style='', $line_style=array(), $fill_color=array(), $nc=8) {
+ $this->Ellipse($x0, $y0, $r, 0, 0, $astart, $afinish, $style, $line_style, $fill_color, $nc);
+ }
+
+ /**
+ * Draws a polygon.
+ * @param array $p Points 0 to ($np - 1). Array with values (x0, y0, x1, y1,..., x(np-1), y(np - 1))
+ * @param string $style Style of rendering. Possible values are:
+ * <ul>
+ * <li>D or empty string: Draw (default).</li>
+ * <li>F: Fill.</li>
+ * <li>DF or FD: Draw and fill.</li>
+ * <li>CNZ: Clipping mode (using the even-odd rule to determine which regions lie inside the clipping path).</li>
+ * <li>CEO: Clipping mode (using the nonzero winding number rule to determine which regions lie inside the clipping path).</li>
+ * </ul>
+ * @param array $line_style Line style of polygon. Array with keys among the following:
+ * <ul>
+ * <li>all: Line style of all lines. Array like for {@link SetLineStyle SetLineStyle}.</li>
+ * <li>0 to ($np - 1): Line style of each line. Array like for {@link SetLineStyle SetLineStyle}.</li>
+ * </ul>
+ * If a key is not present or is null, not draws the line. Default value is default line style (empty array).
+ * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K). Default value: default color (empty array).
+ * @access public
+ * @since 2.1.000 (2008-01-08)
+ */
+ public function Polygon($p, $style='', $line_style=array(), $fill_color=array()) {
+ $np = count($p) / 2;
+ if (!(false === strpos($style, 'F')) AND isset($fill_color)) {
+ $this->SetFillColorArray($fill_color);
+ }
+ switch ($style) {
+ case 'F': {
+ $line_style = array();
+ $op = 'f';
+ break;
+ }
+ case 'FD':
+ case 'DF': {
+ $op = 'B';
+ break;
+ }
+ case 'CNZ': {
+ $op = 'W n';
+ break;
+ }
+ case 'CEO': {
+ $op = 'W* n';
+ break;
+ }
+ default: {
+ $op = 'S';
+ break;
+ }
+ }
+ $draw = true;
+ if ($line_style) {
+ if (isset($line_style['all'])) {
+ $this->SetLineStyle($line_style['all']);
+ } else { // 0 .. (np - 1), op = {B, S}
+ $draw = false;
+ if ('B' == $op) {
+ $op = 'f';
+ $this->_outPoint($p[0], $p[1]);
+ for ($i = 2; $i < ($np * 2); $i = $i + 2) {
+ $this->_outLine($p[$i], $p[$i + 1]);
+ }
+ $this->_outLine($p[0], $p[1]);
+ $this->_out($op);
+ }
+ $p[($np * 2)] = $p[0];
+ $p[(($np * 2) + 1)] = $p[1];
+ for ($i = 0; $i < $np; ++$i) {
+ if (isset($line_style[$i]) AND ($line_style[$i] != 0)) {
+ $this->Line($p[($i * 2)], $p[(($i * 2) + 1)], $p[(($i * 2) + 2)], $p[(($i * 2) + 3)], $line_style[$i]);
+ }
+ }
+ }
+ }
+ if ($draw) {
+ $this->_outPoint($p[0], $p[1]);
+ for ($i = 2; $i < ($np * 2); $i = $i + 2) {
+ $this->_outLine($p[$i], $p[$i + 1]);
+ }
+ $this->_outLine($p[0], $p[1]);
+ $this->_out($op);
+ }
+ }
+
+ /**
+ * Draws a regular polygon.
+ * @param float $x0 Abscissa of center point.
+ * @param float $y0 Ordinate of center point.
+ * @param float $r: Radius of inscribed circle.
+ * @param integer $ns Number of sides.
+ * @param float $angle Angle oriented (anti-clockwise). Default value: 0.
+ * @param boolean $draw_circle Draw inscribed circle or not. Default value: false.
+ * @param string $style Style of rendering. Possible values are:
+ * <ul>
+ * <li>D or empty string: Draw (default).</li>
+ * <li>F: Fill.</li>
+ * <li>DF or FD: Draw and fill.</li>
+ * <li>CNZ: Clipping mode (using the even-odd rule to determine which regions lie inside the clipping path).</li>
+ * <li>CEO: Clipping mode (using the nonzero winding number rule to determine which regions lie inside the clipping path).</li>
+ * </ul>
+ * @param array $line_style Line style of polygon sides. Array with keys among the following:
+ * <ul>
+ * <li>all: Line style of all sides. Array like for {@link SetLineStyle SetLineStyle}.</li>
+ * <li>0 to ($ns - 1): Line style of each side. Array like for {@link SetLineStyle SetLineStyle}.</li>
+ * </ul>
+ * If a key is not present or is null, not draws the side. Default value is default line style (empty array).
+ * @param array $fill_color Fill color. Format: array(red, green, blue). Default value: default color (empty array).
+ * @param string $circle_style Style of rendering of inscribed circle (if draws). Possible values are:
+ * <ul>
+ * <li>D or empty string: Draw (default).</li>
+ * <li>F: Fill.</li>
+ * <li>DF or FD: Draw and fill.</li>
+ * <li>CNZ: Clipping mode (using the even-odd rule to determine which regions lie inside the clipping path).</li>
+ * <li>CEO: Clipping mode (using the nonzero winding number rule to determine which regions lie inside the clipping path).</li>
+ * </ul>
+ * @param array $circle_outLine_style Line style of inscribed circle (if draws). Array like for {@link SetLineStyle SetLineStyle}. Default value: default line style (empty array).
+ * @param array $circle_fill_color Fill color of inscribed circle (if draws). Format: array(red, green, blue). Default value: default color (empty array).
+ * @access public
+ * @since 2.1.000 (2008-01-08)
+ */
+ public function RegularPolygon($x0, $y0, $r, $ns, $angle=0, $draw_circle=false, $style='', $line_style=array(), $fill_color=array(), $circle_style='', $circle_outLine_style=array(), $circle_fill_color=array()) {
+ if (3 > $ns) {
+ $ns = 3;
+ }
+ if ($draw_circle) {
+ $this->Circle($x0, $y0, $r, 0, 360, $circle_style, $circle_outLine_style, $circle_fill_color);
+ }
+ $p = array();
+ for ($i = 0; $i < $ns; ++$i) {
+ $a = $angle + ($i * 360 / $ns);
+ $a_rad = deg2rad((float) $a);
+ $p[] = $x0 + ($r * sin($a_rad));
+ $p[] = $y0 + ($r * cos($a_rad));
+ }
+ $this->Polygon($p, $style, $line_style, $fill_color);
+ }
+
+ /**
+ * Draws a star polygon
+ * @param float $x0 Abscissa of center point.
+ * @param float $y0 Ordinate of center point.
+ * @param float $r Radius of inscribed circle.
+ * @param integer $nv Number of vertices.
+ * @param integer $ng Number of gap (if ($ng % $nv = 1) then is a regular polygon).
+ * @param float $angle: Angle oriented (anti-clockwise). Default value: 0.
+ * @param boolean $draw_circle: Draw inscribed circle or not. Default value is false.
+ * @param string $style Style of rendering. Possible values are:
+ * <ul>
+ * <li>D or empty string: Draw (default).</li>
+ * <li>F: Fill.</li>
+ * <li>DF or FD: Draw and fill.</li>
+ * <li>CNZ: Clipping mode (using the even-odd rule to determine which regions lie inside the clipping path).</li>
+ * <li>CEO: Clipping mode (using the nonzero winding number rule to determine which regions lie inside the clipping path).</li>
+ * </ul>
+ * @param array $line_style Line style of polygon sides. Array with keys among the following:
+ * <ul>
+ * <li>all: Line style of all sides. Array like for
+ * {@link SetLineStyle SetLineStyle}.</li>
+ * <li>0 to (n - 1): Line style of each side. Array like for {@link SetLineStyle SetLineStyle}.</li>
+ * </ul>
+ * If a key is not present or is null, not draws the side. Default value is default line style (empty array).
+ * @param array $fill_color Fill color. Format: array(red, green, blue). Default value: default color (empty array).
+ * @param string $circle_style Style of rendering of inscribed circle (if draws). Possible values are:
+ * <ul>
+ * <li>D or empty string: Draw (default).</li>
+ * <li>F: Fill.</li>
+ * <li>DF or FD: Draw and fill.</li>
+ * <li>CNZ: Clipping mode (using the even-odd rule to determine which regions lie inside the clipping path).</li>
+ * <li>CEO: Clipping mode (using the nonzero winding number rule to determine which regions lie inside the clipping path).</li>
+ * </ul>
+ * @param array $circle_outLine_style Line style of inscribed circle (if draws). Array like for {@link SetLineStyle SetLineStyle}. Default value: default line style (empty array).
+ * @param array $circle_fill_color Fill color of inscribed circle (if draws). Format: array(red, green, blue). Default value: default color (empty array).
+ * @access public
+ * @since 2.1.000 (2008-01-08)
+ */
+ public function StarPolygon($x0, $y0, $r, $nv, $ng, $angle=0, $draw_circle=false, $style='', $line_style=array(), $fill_color=array(), $circle_style='', $circle_outLine_style=array(), $circle_fill_color=array()) {
+ if (2 > $nv) {
+ $nv = 2;
+ }
+ if ($draw_circle) {
+ $this->Circle($x0, $y0, $r, 0, 360, $circle_style, $circle_outLine_style, $circle_fill_color);
+ }
+ $p2 = array();
+ $visited = array();
+ for ($i = 0; $i < $nv; ++$i) {
+ $a = $angle + ($i * 360 / $nv);
+ $a_rad = deg2rad((float) $a);
+ $p2[] = $x0 + ($r * sin($a_rad));
+ $p2[] = $y0 + ($r * cos($a_rad));
+ $visited[] = false;
+ }
+ $p = array();
+ $i = 0;
+ do {
+ $p[] = $p2[$i * 2];
+ $p[] = $p2[($i * 2) + 1];
+ $visited[$i] = true;
+ $i += $ng;
+ $i %= $nv;
+ } while (!$visited[$i]);
+ $this->Polygon($p, $style, $line_style, $fill_color);
+ }
+
+ /**
+ * Draws a rounded rectangle.
+ * @param float $x Abscissa of upper-left corner.
+ * @param float $y Ordinate of upper-left corner.
+ * @param float $w Width.
+ * @param float $h Height.
+ * @param float $r Radius of the rounded corners.
+ * @param string $round_corner Draws rounded corner or not. String with a 0 (not rounded i-corner) or 1 (rounded i-corner) in i-position. Positions are, in order and begin to 0: top left, top right, bottom right and bottom left. Default value: all rounded corner ("1111").
+ * @param string $style Style of rendering. Possible values are:
+ * <ul>
+ * <li>D or empty string: Draw (default).</li>
+ * <li>F: Fill.</li>
+ * <li>DF or FD: Draw and fill.</li>
+ * <li>CNZ: Clipping mode (using the even-odd rule to determine which regions lie inside the clipping path).</li>
+ * <li>CEO: Clipping mode (using the nonzero winding number rule to determine which regions lie inside the clipping path).</li>
+ * </ul>
+ * @param array $border_style Border style of rectangle. Array like for {@link SetLineStyle SetLineStyle}. Default value: default line style (empty array).
+ * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K). Default value: default color (empty array).
+ * @access public
+ * @since 2.1.000 (2008-01-08)
+ */
+ public function RoundedRect($x, $y, $w, $h, $r, $round_corner='1111', $style='', $border_style=array(), $fill_color=array()) {
+ if ('0000' == $round_corner) { // Not rounded
+ $this->Rect($x, $y, $w, $h, $style, $border_style, $fill_color);
+ } else { // Rounded
+ if (!(false === strpos($style, 'F')) AND isset($fill_color)) {
+ $this->SetFillColorArray($fill_color);
+ }
+ switch ($style) {
+ case 'F': {
+ $border_style = array();
+ $op = 'f';
+ break;
+ }
+ case 'FD':
+ case 'DF': {
+ $op = 'B';
+ break;
+ }
+ case 'CNZ': {
+ $op = 'W n';
+ break;
+ }
+ case 'CEO': {
+ $op = 'W* n';
+ break;
+ }
+ default: {
+ $op = 'S';
+ break;
+ }
+ }
+ if ($border_style) {
+ $this->SetLineStyle($border_style);
+ }
+ $MyArc = 4 / 3 * (sqrt(2) - 1);
+ $this->_outPoint($x + $r, $y);
+ $xc = $x + $w - $r;
+ $yc = $y + $r;
+ $this->_outLine($xc, $y);
+ if ($round_corner[0]) {
+ $this->_outCurve($xc + ($r * $MyArc), $yc - $r, $xc + $r, $yc - ($r * $MyArc), $xc + $r, $yc);
+ } else {
+ $this->_outLine($x + $w, $y);
+ }
+ $xc = $x + $w - $r;
+ $yc = $y + $h - $r;
+ $this->_outLine($x + $w, $yc);
+ if ($round_corner[1]) {
+ $this->_outCurve($xc + $r, $yc + ($r * $MyArc), $xc + ($r * $MyArc), $yc + $r, $xc, $yc + $r);
+ } else {
+ $this->_outLine($x + $w, $y + $h);
+ }
+ $xc = $x + $r;
+ $yc = $y + $h - $r;
+ $this->_outLine($xc, $y + $h);
+ if ($round_corner[2]) {
+ $this->_outCurve($xc - ($r * $MyArc), $yc + $r, $xc - $r, $yc + ($r * $MyArc), $xc - $r, $yc);
+ } else {
+ $this->_outLine($x, $y + $h);
+ }
+ $xc = $x + $r;
+ $yc = $y + $r;
+ $this->_outLine($x, $yc);
+ if ($round_corner[3]) {
+ $this->_outCurve($xc - $r, $yc - ($r * $MyArc), $xc - ($r * $MyArc), $yc - $r, $xc, $yc - $r);
+ } else {
+ $this->_outLine($x, $y);
+ $this->_outLine($x + $r, $y);
+ }
+ $this->_out($op);
+ }
+ }
+
+ // END GRAPHIC FUNCTIONS SECTION -----------------------
+
+ // BIDIRECTIONAL TEXT SECTION --------------------------
+ /**
+ * Reverse the RLT substrings using the Bidirectional Algorithm (http://unicode.org/reports/tr9/).
+ * @param string $str string to manipulate.
+ * @param bool $forcertl if 'R' forces RTL, if 'L' forces LTR
+ * @return string
+ * @access protected
+ * @author Nicola Asuni
+ * @since 2.1.000 (2008-01-08)
+ */
+ protected function utf8StrRev($str, $setbom=false, $forcertl=false) {
+ return $this->arrUTF8ToUTF16BE($this->utf8Bidi($this->UTF8StringToArray($str), $forcertl), $setbom);
+ }
+
+ /**
+ * Reverse the RLT substrings using the Bidirectional Algorithm (http://unicode.org/reports/tr9/).
+ * @param array $ta array of characters composing the string.
+ * @param bool $forcertl if 'R' forces RTL, if 'L' forces LTR
+ * @return string
+ * @author Nicola Asuni
+ * @access protected
+ * @since 2.4.000 (2008-03-06)
+ */
+ protected function utf8Bidi($ta, $forcertl=false) {
+ global $unicode, $unicode_mirror, $unicode_arlet, $laa_array, $diacritics;
+ // paragraph embedding level
+ $pel = 0;
+ // max level
+ $maxlevel = 0;
+ // create string from array
+ $str = $this->UTF8ArrSubString($ta);
+ // check if string contains arabic text
+ if (preg_match(K_RE_PATTERN_ARABIC, $str)) {
+ $arabic = true;
+ } else {
+ $arabic = false;
+ }
+ // check if string contains RTL text
+ if (!($forcertl OR $arabic OR preg_match(K_RE_PATTERN_RTL, $str))) {
+ return $ta;
+ }
+
+ // get number of chars
+ $numchars = count($ta);
+
+ if ($forcertl == 'R') {
+ $pel = 1;
+ } elseif ($forcertl == 'L') {
+ $pel = 0;
+ } else {
+ // P2. In each paragraph, find the first character of type L, AL, or R.
+ // P3. If a character is found in P2 and it is of type AL or R, then set the paragraph embedding level to one; otherwise, set it to zero.
+ for ($i=0; $i < $numchars; ++$i) {
+ $type = $unicode[$ta[$i]];
+ if ($type == 'L') {
+ $pel = 0;
+ break;
+ } elseif (($type == 'AL') OR ($type == 'R')) {
+ $pel = 1;
+ break;
+ }
+ }
+ }
+
+ // Current Embedding Level
+ $cel = $pel;
+ // directional override status
+ $dos = 'N';
+ $remember = array();
+ // start-of-level-run
+ $sor = $pel % 2 ? 'R' : 'L';
+ $eor = $sor;
+
+ // Array of characters data
+ $chardata = Array();
+
+ // X1. Begin by setting the current embedding level to the paragraph embedding level. Set the directional override status to neutral. Process each character iteratively, applying rules X2 through X9. Only embedding levels from 0 to 61 are valid in this phase.
+ // In the resolution of levels in rules I1 and I2, the maximum embedding level of 62 can be reached.
+ for ($i=0; $i < $numchars; ++$i) {
+ if ($ta[$i] == K_RLE) {
+ // X2. With each RLE, compute the least greater odd embedding level.
+ // a. If this new level would be valid, then this embedding code is valid. Remember (push) the current embedding level and override status. Reset the current level to this new level, and reset the override status to neutral.
+ // b. If the new level would not be valid, then this code is invalid. Do not change the current level or override status.
+ $next_level = $cel + ($cel % 2) + 1;
+ if ($next_level < 62) {
+ $remember[] = array('num' => K_RLE, 'cel' => $cel, 'dos' => $dos);
+ $cel = $next_level;
+ $dos = 'N';
+ $sor = $eor;
+ $eor = $cel % 2 ? 'R' : 'L';
+ }
+ } elseif ($ta[$i] == K_LRE) {
+ // X3. With each LRE, compute the least greater even embedding level.
+ // a. If this new level would be valid, then this embedding code is valid. Remember (push) the current embedding level and override status. Reset the current level to this new level, and reset the override status to neutral.
+ // b. If the new level would not be valid, then this code is invalid. Do not change the current level or override status.
+ $next_level = $cel + 2 - ($cel % 2);
+ if ( $next_level < 62 ) {
+ $remember[] = array('num' => K_LRE, 'cel' => $cel, 'dos' => $dos);
+ $cel = $next_level;
+ $dos = 'N';
+ $sor = $eor;
+ $eor = $cel % 2 ? 'R' : 'L';
+ }
+ } elseif ($ta[$i] == K_RLO) {
+ // X4. With each RLO, compute the least greater odd embedding level.
+ // a. If this new level would be valid, then this embedding code is valid. Remember (push) the current embedding level and override status. Reset the current level to this new level, and reset the override status to right-to-left.
+ // b. If the new level would not be valid, then this code is invalid. Do not change the current level or override status.
+ $next_level = $cel + ($cel % 2) + 1;
+ if ($next_level < 62) {
+ $remember[] = array('num' => K_RLO, 'cel' => $cel, 'dos' => $dos);
+ $cel = $next_level;
+ $dos = 'R';
+ $sor = $eor;
+ $eor = $cel % 2 ? 'R' : 'L';
+ }
+ } elseif ($ta[$i] == K_LRO) {
+ // X5. With each LRO, compute the least greater even embedding level.
+ // a. If this new level would be valid, then this embedding code is valid. Remember (push) the current embedding level and override status. Reset the current level to this new level, and reset the override status to left-to-right.
+ // b. If the new level would not be valid, then this code is invalid. Do not change the current level or override status.
+ $next_level = $cel + 2 - ($cel % 2);
+ if ( $next_level < 62 ) {
+ $remember[] = array('num' => K_LRO, 'cel' => $cel, 'dos' => $dos);
+ $cel = $next_level;
+ $dos = 'L';
+ $sor = $eor;
+ $eor = $cel % 2 ? 'R' : 'L';
+ }
+ } elseif ($ta[$i] == K_PDF) {
+ // X7. With each PDF, determine the matching embedding or override code. If there was a valid matching code, restore (pop) the last remembered (pushed) embedding level and directional override.
+ if (count($remember)) {
+ $last = count($remember ) - 1;
+ if (($remember[$last]['num'] == K_RLE) OR
+ ($remember[$last]['num'] == K_LRE) OR
+ ($remember[$last]['num'] == K_RLO) OR
+ ($remember[$last]['num'] == K_LRO)) {
+ $match = array_pop($remember);
+ $cel = $match['cel'];
+ $dos = $match['dos'];
+ $sor = $eor;
+ $eor = ($cel > $match['cel'] ? $cel : $match['cel']) % 2 ? 'R' : 'L';
+ }
+ }
+ } elseif (($ta[$i] != K_RLE) AND
+ ($ta[$i] != K_LRE) AND
+ ($ta[$i] != K_RLO) AND
+ ($ta[$i] != K_LRO) AND
+ ($ta[$i] != K_PDF)) {
+ // X6. For all types besides RLE, LRE, RLO, LRO, and PDF:
+ // a. Set the level of the current character to the current embedding level.
+ // b. Whenever the directional override status is not neutral, reset the current character type to the directional override status.
+ if ($dos != 'N') {
+ $chardir = $dos;
+ } else {
+ $chardir = $unicode[$ta[$i]];
+ }
+ // stores string characters and other information
+ $chardata[] = array('char' => $ta[$i], 'level' => $cel, 'type' => $chardir, 'sor' => $sor, 'eor' => $eor);
+ }
+ } // end for each char
+
+ // X8. All explicit directional embeddings and overrides are completely terminated at the end of each paragraph. Paragraph separators are not included in the embedding.
+ // X9. Remove all RLE, LRE, RLO, LRO, PDF, and BN codes.
+ // X10. The remaining rules are applied to each run of characters at the same level. For each run, determine the start-of-level-run (sor) and end-of-level-run (eor) type, either L or R. This depends on the higher of the two levels on either side of the boundary (at the start or end of the paragraph, the level of the 'other' run is the base embedding level). If the higher level is odd, the type is R; otherwise, it is L.
+
+ // 3.3.3 Resolving Weak Types
+ // Weak types are now resolved one level run at a time. At level run boundaries where the type of the character on the other side of the boundary is required, the type assigned to sor or eor is used.
+ // Nonspacing marks are now resolved based on the previous characters.
+ $numchars = count($chardata);
+
+ // W1. Examine each nonspacing mark (NSM) in the level run, and change the type of the NSM to the type of the previous character. If the NSM is at the start of the level run, it will get the type of sor.
+ $prevlevel = -1; // track level changes
+ $levcount = 0; // counts consecutive chars at the same level
+ for ($i=0; $i < $numchars; ++$i) {
+ if ($chardata[$i]['type'] == 'NSM') {
+ if ($levcount) {
+ $chardata[$i]['type'] = $chardata[$i]['sor'];
+ } elseif ($i > 0) {
+ $chardata[$i]['type'] = $chardata[($i-1)]['type'];
+ }
+ }
+ if ($chardata[$i]['level'] != $prevlevel) {
+ $levcount = 0;
+ } else {
+ ++$levcount;
+ }
+ $prevlevel = $chardata[$i]['level'];
+ }
+
+ // W2. Search backward from each instance of a European number until the first strong type (R, L, AL, or sor) is found. If an AL is found, change the type of the European number to Arabic number.
+ $prevlevel = -1;
+ $levcount = 0;
+ for ($i=0; $i < $numchars; ++$i) {
+ if ($chardata[$i]['char'] == 'EN') {
+ for ($j=$levcount; $j >= 0; $j--) {
+ if ($chardata[$j]['type'] == 'AL') {
+ $chardata[$i]['type'] = 'AN';
+ } elseif (($chardata[$j]['type'] == 'L') OR ($chardata[$j]['type'] == 'R')) {
+ break;
+ }
+ }
+ }
+ if ($chardata[$i]['level'] != $prevlevel) {
+ $levcount = 0;
+ } else {
+ ++$levcount;
+ }
+ $prevlevel = $chardata[$i]['level'];
+ }
+
+ // W3. Change all ALs to R.
+ for ($i=0; $i < $numchars; ++$i) {
+ if ($chardata[$i]['type'] == 'AL') {
+ $chardata[$i]['type'] = 'R';
+ }
+ }
+
+ // W4. A single European separator between two European numbers changes to a European number. A single common separator between two numbers of the same type changes to that type.
+ $prevlevel = -1;
+ $levcount = 0;
+ for ($i=0; $i < $numchars; ++$i) {
+ if (($levcount > 0) AND (($i+1) < $numchars) AND ($chardata[($i+1)]['level'] == $prevlevel)) {
+ if (($chardata[$i]['type'] == 'ES') AND ($chardata[($i-1)]['type'] == 'EN') AND ($chardata[($i+1)]['type'] == 'EN')) {
+ $chardata[$i]['type'] = 'EN';
+ } elseif (($chardata[$i]['type'] == 'CS') AND ($chardata[($i-1)]['type'] == 'EN') AND ($chardata[($i+1)]['type'] == 'EN')) {
+ $chardata[$i]['type'] = 'EN';
+ } elseif (($chardata[$i]['type'] == 'CS') AND ($chardata[($i-1)]['type'] == 'AN') AND ($chardata[($i+1)]['type'] == 'AN')) {
+ $chardata[$i]['type'] = 'AN';
+ }
+ }
+ if ($chardata[$i]['level'] != $prevlevel) {
+ $levcount = 0;
+ } else {
+ ++$levcount;
+ }
+ $prevlevel = $chardata[$i]['level'];
+ }
+
+ // W5. A sequence of European terminators adjacent to European numbers changes to all European numbers.
+ $prevlevel = -1;
+ $levcount = 0;
+ for ($i=0; $i < $numchars; ++$i) {
+ if ($chardata[$i]['type'] == 'ET') {
+ if (($levcount > 0) AND ($chardata[($i-1)]['type'] == 'EN')) {
+ $chardata[$i]['type'] = 'EN';
+ } else {
+ $j = $i+1;
+ while (($j < $numchars) AND ($chardata[$j]['level'] == $prevlevel)) {
+ if ($chardata[$j]['type'] == 'EN') {
+ $chardata[$i]['type'] = 'EN';
+ break;
+ } elseif ($chardata[$j]['type'] != 'ET') {
+ break;
+ }
+ ++$j;
+ }
+ }
+ }
+ if ($chardata[$i]['level'] != $prevlevel) {
+ $levcount = 0;
+ } else {
+ ++$levcount;
+ }
+ $prevlevel = $chardata[$i]['level'];
+ }
+
+ // W6. Otherwise, separators and terminators change to Other Neutral.
+ $prevlevel = -1;
+ $levcount = 0;
+ for ($i=0; $i < $numchars; ++$i) {
+ if (($chardata[$i]['type'] == 'ET') OR ($chardata[$i]['type'] == 'ES') OR ($chardata[$i]['type'] == 'CS')) {
+ $chardata[$i]['type'] = 'ON';
+ }
+ if ($chardata[$i]['level'] != $prevlevel) {
+ $levcount = 0;
+ } else {
+ ++$levcount;
+ }
+ $prevlevel = $chardata[$i]['level'];
+ }
+
+ //W7. Search backward from each instance of a European number until the first strong type (R, L, or sor) is found. If an L is found, then change the type of the European number to L.
+ $prevlevel = -1;
+ $levcount = 0;
+ for ($i=0; $i < $numchars; ++$i) {
+ if ($chardata[$i]['char'] == 'EN') {
+ for ($j=$levcount; $j >= 0; $j--) {
+ if ($chardata[$j]['type'] == 'L') {
+ $chardata[$i]['type'] = 'L';
+ } elseif ($chardata[$j]['type'] == 'R') {
+ break;
+ }
+ }
+ }
+ if ($chardata[$i]['level'] != $prevlevel) {
+ $levcount = 0;
+ } else {
+ ++$levcount;
+ }
+ $prevlevel = $chardata[$i]['level'];
+ }
+
+ // N1. A sequence of neutrals takes the direction of the surrounding strong text if the text on both sides has the same direction. European and Arabic numbers act as if they were R in terms of their influence on neutrals. Start-of-level-run (sor) and end-of-level-run (eor) are used at level run boundaries.
+ $prevlevel = -1;
+ $levcount = 0;
+ for ($i=0; $i < $numchars; ++$i) {
+ if (($levcount > 0) AND (($i+1) < $numchars) AND ($chardata[($i+1)]['level'] == $prevlevel)) {
+ if (($chardata[$i]['type'] == 'N') AND ($chardata[($i-1)]['type'] == 'L') AND ($chardata[($i+1)]['type'] == 'L')) {
+ $chardata[$i]['type'] = 'L';
+ } elseif (($chardata[$i]['type'] == 'N') AND
+ (($chardata[($i-1)]['type'] == 'R') OR ($chardata[($i-1)]['type'] == 'EN') OR ($chardata[($i-1)]['type'] == 'AN')) AND
+ (($chardata[($i+1)]['type'] == 'R') OR ($chardata[($i+1)]['type'] == 'EN') OR ($chardata[($i+1)]['type'] == 'AN'))) {
+ $chardata[$i]['type'] = 'R';
+ } elseif ($chardata[$i]['type'] == 'N') {
+ // N2. Any remaining neutrals take the embedding direction
+ $chardata[$i]['type'] = $chardata[$i]['sor'];
+ }
+ } elseif (($levcount == 0) AND (($i+1) < $numchars) AND ($chardata[($i+1)]['level'] == $prevlevel)) {
+ // first char
+ if (($chardata[$i]['type'] == 'N') AND ($chardata[$i]['sor'] == 'L') AND ($chardata[($i+1)]['type'] == 'L')) {
+ $chardata[$i]['type'] = 'L';
+ } elseif (($chardata[$i]['type'] == 'N') AND
+ (($chardata[$i]['sor'] == 'R') OR ($chardata[$i]['sor'] == 'EN') OR ($chardata[$i]['sor'] == 'AN')) AND
+ (($chardata[($i+1)]['type'] == 'R') OR ($chardata[($i+1)]['type'] == 'EN') OR ($chardata[($i+1)]['type'] == 'AN'))) {
+ $chardata[$i]['type'] = 'R';
+ } elseif ($chardata[$i]['type'] == 'N') {
+ // N2. Any remaining neutrals take the embedding direction
+ $chardata[$i]['type'] = $chardata[$i]['sor'];
+ }
+ } elseif (($levcount > 0) AND ((($i+1) == $numchars) OR (($i+1) < $numchars) AND ($chardata[($i+1)]['level'] != $prevlevel))) {
+ //last char
+ if (($chardata[$i]['type'] == 'N') AND ($chardata[($i-1)]['type'] == 'L') AND ($chardata[$i]['eor'] == 'L')) {
+ $chardata[$i]['type'] = 'L';
+ } elseif (($chardata[$i]['type'] == 'N') AND
+ (($chardata[($i-1)]['type'] == 'R') OR ($chardata[($i-1)]['type'] == 'EN') OR ($chardata[($i-1)]['type'] == 'AN')) AND
+ (($chardata[$i]['eor'] == 'R') OR ($chardata[$i]['eor'] == 'EN') OR ($chardata[$i]['eor'] == 'AN'))) {
+ $chardata[$i]['type'] = 'R';
+ } elseif ($chardata[$i]['type'] == 'N') {
+ // N2. Any remaining neutrals take the embedding direction
+ $chardata[$i]['type'] = $chardata[$i]['sor'];
+ }
+ } elseif ($chardata[$i]['type'] == 'N') {
+ // N2. Any remaining neutrals take the embedding direction
+ $chardata[$i]['type'] = $chardata[$i]['sor'];
+ }
+ if ($chardata[$i]['level'] != $prevlevel) {
+ $levcount = 0;
+ } else {
+ ++$levcount;
+ }
+ $prevlevel = $chardata[$i]['level'];
+ }
+
+ // I1. For all characters with an even (left-to-right) embedding direction, those of type R go up one level and those of type AN or EN go up two levels.
+ // I2. For all characters with an odd (right-to-left) embedding direction, those of type L, EN or AN go up one level.
+ for ($i=0; $i < $numchars; ++$i) {
+ $odd = $chardata[$i]['level'] % 2;
+ if ($odd) {
+ if (($chardata[$i]['type'] == 'L') OR ($chardata[$i]['type'] == 'AN') OR ($chardata[$i]['type'] == 'EN')) {
+ $chardata[$i]['level'] += 1;
+ }
+ } else {
+ if ($chardata[$i]['type'] == 'R') {
+ $chardata[$i]['level'] += 1;
+ } elseif (($chardata[$i]['type'] == 'AN') OR ($chardata[$i]['type'] == 'EN')) {
+ $chardata[$i]['level'] += 2;
+ }
+ }
+ $maxlevel = max($chardata[$i]['level'],$maxlevel);
+ }
+
+ // L1. On each line, reset the embedding level of the following characters to the paragraph embedding level:
+ // 1. Segment separators,
+ // 2. Paragraph separators,
+ // 3. Any sequence of whitespace characters preceding a segment separator or paragraph separator, and
+ // 4. Any sequence of white space characters at the end of the line.
+ for ($i=0; $i < $numchars; ++$i) {
+ if (($chardata[$i]['type'] == 'B') OR ($chardata[$i]['type'] == 'S')) {
+ $chardata[$i]['level'] = $pel;
+ } elseif ($chardata[$i]['type'] == 'WS') {
+ $j = $i+1;
+ while ($j < $numchars) {
+ if ((($chardata[$j]['type'] == 'B') OR ($chardata[$j]['type'] == 'S')) OR
+ (($j == ($numchars-1)) AND ($chardata[$j]['type'] == 'WS'))) {
+ $chardata[$i]['level'] = $pel;
+ break;
+ } elseif ($chardata[$j]['type'] != 'WS') {
+ break;
+ }
+ ++$j;
+ }
+ }
+ }
+
+ // Arabic Shaping
+ // Cursively connected scripts, such as Arabic or Syriac, require the selection of positional character shapes that depend on adjacent characters. Shaping is logically applied after the Bidirectional Algorithm is used and is limited to characters within the same directional run.
+ if ($arabic) {
+ $endedletter = array(1569,1570,1571,1572,1573,1575,1577,1583,1584,1585,1586,1608,1688);
+ $alfletter = array(1570,1571,1573,1575);
+ $chardata2 = $chardata;
+ $laaletter = false;
+ $charAL = array();
+ $x = 0;
+ for ($i=0; $i < $numchars; ++$i) {
+ if (($unicode[$chardata[$i]['char']] == 'AL') OR ($chardata[$i]['char'] == 32) OR ($chardata[$i]['char'] == 8204)) {
+ $charAL[$x] = $chardata[$i];
+ $charAL[$x]['i'] = $i;
+ $chardata[$i]['x'] = $x;
+ ++$x;
+ }
+ }
+ $numAL = $x;
+ for ($i=0; $i < $numchars; ++$i) {
+ $thischar = $chardata[$i];
+ if ($i > 0) {
+ $prevchar = $chardata[($i-1)];
+ } else {
+ $prevchar = false;
+ }
+ if (($i+1) < $numchars) {
+ $nextchar = $chardata[($i+1)];
+ } else {
+ $nextchar = false;
+ }
+ if ($unicode[$thischar['char']] == 'AL') {
+ $x = $thischar['x'];
+ if ($x > 0) {
+ $prevchar = $charAL[($x-1)];
+ } else {
+ $prevchar = false;
+ }
+ if (($x+1) < $numAL) {
+ $nextchar = $charAL[($x+1)];
+ } else {
+ $nextchar = false;
+ }
+ // if laa letter
+ if (($prevchar !== false) AND ($prevchar['char'] == 1604) AND (in_array($thischar['char'], $alfletter))) {
+ $arabicarr = $laa_array;
+ $laaletter = true;
+ if ($x > 1) {
+ $prevchar = $charAL[($x-2)];
+ } else {
+ $prevchar = false;
+ }
+ } else {
+ $arabicarr = $unicode_arlet;
+ $laaletter = false;
+ }
+ if (($prevchar !== false) AND ($nextchar !== false) AND
+ (($unicode[$prevchar['char']] == 'AL') OR ($unicode[$prevchar['char']] == 'NSM')) AND
+ (($unicode[$nextchar['char']] == 'AL') OR ($unicode[$nextchar['char']] == 'NSM')) AND
+ ($prevchar['type'] == $thischar['type']) AND
+ ($nextchar['type'] == $thischar['type']) AND
+ ($nextchar['char'] != 1567)) {
+ if (in_array($prevchar['char'], $endedletter)) {
+ if (isset($arabicarr[$thischar['char']][2])) {
+ // initial
+ $chardata2[$i]['char'] = $arabicarr[$thischar['char']][2];
+ }
+ } else {
+ if (isset($arabicarr[$thischar['char']][3])) {
+ // medial
+ $chardata2[$i]['char'] = $arabicarr[$thischar['char']][3];
+ }
+ }
+ } elseif (($nextchar !== false) AND
+ (($unicode[$nextchar['char']] == 'AL') OR ($unicode[$nextchar['char']] == 'NSM')) AND
+ ($nextchar['type'] == $thischar['type']) AND
+ ($nextchar['char'] != 1567)) {
+ if (isset($arabicarr[$chardata[$i]['char']][2])) {
+ // initial
+ $chardata2[$i]['char'] = $arabicarr[$thischar['char']][2];
+ }
+ } elseif ((($prevchar !== false) AND
+ (($unicode[$prevchar['char']] == 'AL') OR ($unicode[$prevchar['char']] == 'NSM')) AND
+ ($prevchar['type'] == $thischar['type'])) OR
+ (($nextchar !== false) AND ($nextchar['char'] == 1567))) {
+ // final
+ if (($i > 1) AND ($thischar['char'] == 1607) AND
+ ($chardata[$i-1]['char'] == 1604) AND
+ ($chardata[$i-2]['char'] == 1604)) {
+ //Allah Word
+ // mark characters to delete with false
+ $chardata2[$i-2]['char'] = false;
+ $chardata2[$i-1]['char'] = false;
+ $chardata2[$i]['char'] = 65010;
+ } else {
+ if (($prevchar !== false) AND in_array($prevchar['char'], $endedletter)) {
+ if (isset($arabicarr[$thischar['char']][0])) {
+ // isolated
+ $chardata2[$i]['char'] = $arabicarr[$thischar['char']][0];
+ }
+ } else {
+ if (isset($arabicarr[$thischar['char']][1])) {
+ // final
+ $chardata2[$i]['char'] = $arabicarr[$thischar['char']][1];
+ }
+ }
+ }
+ } elseif (isset($arabicarr[$thischar['char']][0])) {
+ // isolated
+ $chardata2[$i]['char'] = $arabicarr[$thischar['char']][0];
+ }
+ // if laa letter
+ if ($laaletter) {
+ // mark characters to delete with false
+ $chardata2[($charAL[($x-1)]['i'])]['char'] = false;
+ }
+ } // end if AL (Arabic Letter)
+ } // end for each char
+ /*
+ * Combining characters that can occur with Shadda (0651 HEX, 1617 DEC) are placed in UE586-UE594.
+ * Putting the combining mark and shadda in the same glyph allows us to avoid the two marks overlapping each other in an illegible manner.
+ */
+ $cw = &$this->CurrentFont['cw'];
+ for ($i = 0; $i < ($numchars-1); ++$i) {
+ if (($chardata2[$i]['char'] == 1617) AND (isset($diacritics[($chardata2[$i+1]['char'])]))) {
+ // check if the subtitution font is defined on current font
+ if (isset($cw[($diacritics[($chardata2[$i+1]['char'])])])) {
+ $chardata2[$i]['char'] = false;
+ $chardata2[$i+1]['char'] = $diacritics[($chardata2[$i+1]['char'])];
+ }
+ }
+ }
+ // remove marked characters
+ foreach ($chardata2 as $key => $value) {
+ if ($value['char'] === false) {
+ unset($chardata2[$key]);
+ }
+ }
+ $chardata = array_values($chardata2);
+ $numchars = count($chardata);
+ unset($chardata2);
+ unset($arabicarr);
+ unset($laaletter);
+ unset($charAL);
+ }
+
+ // L2. From the highest level found in the text to the lowest odd level on each line, including intermediate levels not actually present in the text, reverse any contiguous sequence of characters that are at that level or higher.
+ for ($j=$maxlevel; $j > 0; $j--) {
+ $ordarray = Array();
+ $revarr = Array();
+ $onlevel = false;
+ for ($i=0; $i < $numchars; ++$i) {
+ if ($chardata[$i]['level'] >= $j) {
+ $onlevel = true;
+ if (isset($unicode_mirror[$chardata[$i]['char']])) {
+ // L4. A character is depicted by a mirrored glyph if and only if (a) the resolved directionality of that character is R, and (b) the Bidi_Mirrored property value of that character is true.
+ $chardata[$i]['char'] = $unicode_mirror[$chardata[$i]['char']];
+ }
+ $revarr[] = $chardata[$i];
+ } else {
+ if ($onlevel) {
+ $revarr = array_reverse($revarr);
+ $ordarray = array_merge($ordarray, $revarr);
+ $revarr = Array();
+ $onlevel = false;
+ }
+ $ordarray[] = $chardata[$i];
+ }
+ }
+ if ($onlevel) {
+ $revarr = array_reverse($revarr);
+ $ordarray = array_merge($ordarray, $revarr);
+ }
+ $chardata = $ordarray;
+ }
+
+ $ordarray = array();
+ for ($i=0; $i < $numchars; ++$i) {
+ $ordarray[] = $chardata[$i]['char'];
+ }
+
+ return $ordarray;
+ }
+
+ // END OF BIDIRECTIONAL TEXT SECTION -------------------
+
+ /*
+ * Adds a bookmark.
+ * @param string $txt bookmark description.
+ * @param int $level bookmark level (minimum value is 0).
+ * @param float $y Ordinate of the boorkmark position (default = -1 = current position).
+ * @param int $page target page number (leave empty for current page).
+ * @access public
+ * @author Olivier Plathey, Nicola Asuni
+ * @since 2.1.002 (2008-02-12)
+ */
+ public function Bookmark($txt, $level=0, $y=-1, $page='') {
+ if ($level < 0) {
+ $level = 0;
+ }
+ if (isset($this->outlines[0])) {
+ $lastoutline = end($this->outlines);
+ $maxlevel = $lastoutline['l'] + 1;
+ } else {
+ $maxlevel = 0;
+ }
+ if ($level > $maxlevel) {
+ $level = $maxlevel;
+ }
+ if ($y == -1) {
+ $y = $this->GetY();
+ }
+ if (empty($page)) {
+ $page = $this->PageNo();
+ }
+ $this->outlines[] = array('t' => $txt, 'l' => $level, 'y' => $y, 'p' => $page);
+ }
+
+ /*
+ * Create a bookmark PDF string.
+ * @access protected
+ * @author Olivier Plathey, Nicola Asuni
+ * @since 2.1.002 (2008-02-12)
+ */
+ protected function _putbookmarks() {
+ $nb = count($this->outlines);
+ if ($nb == 0) {
+ return;
+ }
+ $lru = array();
+ $level = 0;
+ foreach ($this->outlines as $i => $o) {
+ if ($o['l'] > 0) {
+ $parent = $lru[($o['l'] - 1)];
+ //Set parent and last pointers
+ $this->outlines[$i]['parent'] = $parent;
+ $this->outlines[$parent]['last'] = $i;
+ if ($o['l'] > $level) {
+ //Level increasing: set first pointer
+ $this->outlines[$parent]['first'] = $i;
+ }
+ } else {
+ $this->outlines[$i]['parent'] = $nb;
+ }
+ if (($o['l'] <= $level) AND ($i > 0)) {
+ //Set prev and next pointers
+ $prev = $lru[$o['l']];
+ $this->outlines[$prev]['next'] = $i;
+ $this->outlines[$i]['prev'] = $prev;
+ }
+ $lru[$o['l']] = $i;
+ $level = $o['l'];
+ }
+ //Outline items
+ $n = $this->n + 1;
+ foreach ($this->outlines as $i => $o) {
+ $this->_newobj();
+ $this->_out('<</Title '.$this->_textstring($o['t']));
+ $this->_out('/Parent '.($n + $o['parent']).' 0 R');
+ if (isset($o['prev']))
+ $this->_out('/Prev '.($n + $o['prev']).' 0 R');
+ if (isset($o['next']))
+ $this->_out('/Next '.($n + $o['next']).' 0 R');
+ if (isset($o['first']))
+ $this->_out('/First '.($n + $o['first']).' 0 R');
+ if (isset($o['last']))
+ $this->_out('/Last '.($n + $o['last']).' 0 R');
+ $this->_out(sprintf('/Dest [%d 0 R /XYZ 0 %.2F null]', (1 + (2 * $o['p'])), ($this->pagedim[$o['p']]['h'] - ($o['y'] * $this->k))));
+ $this->_out('/Count 0>>');
+ $this->_out('endobj');
+ }
+ //Outline root
+ $this->_newobj();
+ $this->OutlineRoot = $this->n;
+ $this->_out('<</Type /Outlines /First '.$n.' 0 R');
+ $this->_out('/Last '.($n + $lru[0]).' 0 R>>');
+ $this->_out('endobj');
+ }
+
+
+ // --- JAVASCRIPT - FORMS ------------------------------
+
+ /*
+ * Adds a javascript
+ * @access public
+ * @author Johannes Güntert, Nicola Asuni
+ * @since 2.1.002 (2008-02-12)
+ */
+ public function IncludeJS($script) {
+ $this->javascript .= $script;
+ }
+
+ /*
+ * Create a javascript PDF string.
+ * @access protected
+ * @author Johannes Güntert, Nicola Asuni
+ * @since 2.1.002 (2008-02-12)
+ */
+ protected function _putjavascript() {
+ if (empty($this->javascript)) {
+ return;
+ }
+ // the following two lines are uded to avoid form fields duplication after saving
+ $js1 = sprintf("ftcpdfdocsaved=this.addField('%s','%s',%d,[%.2F,%.2F,%.2F,%.2F]);", 'tcpdfdocsaved', 'text', 0, 0, 1, 0, 1);
+ $js2 = "getField('tcpdfdocsaved').value = 'saved';";
+ $this->_newobj();
+ $this->n_js = $this->n;
+ $this->_out('<<');
+ $this->_out('/Names [(EmbeddedJS) '.($this->n + 1).' 0 R ]');
+ $this->_out('>>');
+ $this->_out('endobj');
+ $this->_newobj();
+ $this->_out('<<');
+ $this->_out('/S /JavaScript');
+ $this->_out('/JS '.$this->_textstring($js1."\n".$this->javascript."\n".$js2));
+ $this->_out('>>');
+ $this->_out('endobj');
+ }
+
+ /*
+ * Convert color to javascript color.
+ * @param string $color color name or #RRGGBB
+ * @access protected
+ * @author Denis Van Nuffelen, Nicola Asuni
+ * @since 2.1.002 (2008-02-12)
+ */
+ protected function _JScolor($color) {
+ static $aColors = array('transparent', 'black', 'white', 'red', 'green', 'blue', 'cyan', 'magenta', 'yellow', 'dkGray', 'gray', 'ltGray');
+ if (substr($color,0,1) == '#') {
+ return sprintf("['RGB',%.3F,%.3F,%.3F]", hexdec(substr($color,1,2))/255, hexdec(substr($color,3,2))/255, hexdec(substr($color,5,2))/255);
+ }
+ if (!in_array($color,$aColors)) {
+ $this->Error('Invalid color: '.$color);
+ }
+ return 'color.'.$color;
+ }
+
+ /*
+ * Adds a javascript form field.
+ * @param string $type field type
+ * @param string $name field name
+ * @param int $x horizontal position
+ * @param int $y vertical position
+ * @param int $w width
+ * @param int $h height
+ * @param array $prop array of properties. Possible values are (http://www.adobe.com/devnet/acrobat/pdfs/js_developer_guide.pdf): <ul><li>rect: Position and size of field on page.</li><li>borderStyle: Rectangle border appearance.</li><li>strokeColor: Color of bounding rectangle.</li><li>lineWidth: Width of the edge of the surrounding rectangle.</li><li>rotation: Rotation of field in 90-degree increments.</li><li>fillColor: Background color of field (gray, transparent, RGB, or CMYK).</li><li>userName: Short description of field that appears on mouse-over.</li><li>readonly: Whether the user may change the field contents.</li><li>doNotScroll: Whether text fields may scroll.</li><li>display: Whether visible or hidden on screen or in print.</li><li>textFont: Text font.</li><li>textColor: Text color.</li><li>textSize: Text size.</li><li>richText: Rich text.</li><li>richValue: Text.</li><li>comb: Text comb format.</li><li>multiline: Text multiline.</li><li>charLimit: Text limit to number of characters.</li><li>fileSelect: Text file selection format.</li><li>password: Text password format.</li><li>alignment: Text layout in text fields.</li><li>buttonAlignX: X alignment of icon on button face.</li><li>buttonAlignY: Y alignment of icon on button face.</li><li>buttonFitBounds: Relative scaling of an icon to fit inside a button face.</li><li>buttonScaleHow: Relative scaling of an icon to fit inside a button face.</li><li>buttonScaleWhen: Relative scaling of an icon to fit inside a button face.</li><li>highlight: Appearance of a button when pushed.</li><li>style: Glyph style for checkbox and radio buttons.</li><li>numItems: Number of items in a combo box or list box.</li><li>editable: Whether the user can type in a combo box.</li><li>multipleSelection: Whether multiple list box items may be selected.</li></ul>
+ * @access protected
+ * @author Denis Van Nuffelen, Nicola Asuni
+ * @since 2.1.002 (2008-02-12)
+ */
+ protected function _addfield($type, $name, $x, $y, $w, $h, $prop) {
+ if ($this->rtl) {
+ $x = $x - $w;
+ }
+ // the followind avoid fields duplication after saving the document
+ $this->javascript .= "if(getField('tcpdfdocsaved').value != 'saved') {";
+ $k = $this->k;
+ $this->javascript .= sprintf("f".$name."=this.addField('%s','%s',%d,[%.2F,%.2F,%.2F,%.2F]);", $name, $type, $this->PageNo()-1, $x*$k, ($this->h-$y)*$k+1, ($x+$w)*$k, ($this->h-$y-$h)*$k+1)."\n";
+ $this->javascript .= 'f'.$name.'.textSize='.$this->FontSizePt.";\n";
+ while (list($key, $val) = each($prop)) {
+ if (strcmp(substr($key, -5), 'Color') == 0) {
+ $val = $this->_JScolor($val);
+ } else {
+ $val = "'".$val."'";
+ }
+ $this->javascript .= 'f'.$name.'.'.$key.'='.$val.";\n";
+ }
+ if ($this->rtl) {
+ $this->x -= $w;
+ } else {
+ $this->x += $w;
+ }
+ $this->javascript .= '}';
+ }
+
+ /*
+ * Creates a text field
+ * @param string $name field name
+ * @param int $w width
+ * @param int $h height
+ * @param string $prop properties. The value property allows to set the initial value. The multiline property allows to define the field as multiline. Possible values are (http://www.adobe.com/devnet/acrobat/pdfs/js_developer_guide.pdf): <ul><li>rect: Position and size of field on page.</li><li>borderStyle: Rectangle border appearance.</li><li>strokeColor: Color of bounding rectangle.</li><li>lineWidth: Width of the edge of the surrounding rectangle.</li><li>rotation: Rotation of field in 90-degree increments.</li><li>fillColor: Background color of field (gray, transparent, RGB, or CMYK).</li><li>userName: Short description of field that appears on mouse-over.</li><li>readonly: Whether the user may change the field contents.</li><li>doNotScroll: Whether text fields may scroll.</li><li>display: Whether visible or hidden on screen or in print.</li><li>textFont: Text font.</li><li>textColor: Text color.</li><li>textSize: Text size.</li><li>richText: Rich text.</li><li>richValue: Text.</li><li>comb: Text comb format.</li><li>multiline: Text multiline.</li><li>charLimit: Text limit to number of characters.</li><li>fileSelect: Text file selection format.</li><li>password: Text password format.</li><li>alignment: Text layout in text fields.</li><li>buttonAlignX: X alignment of icon on button face.</li><li>buttonAlignY: Y alignment of icon on button face.</li><li>buttonFitBounds: Relative scaling of an icon to fit inside a button face.</li><li>buttonScaleHow: Relative scaling of an icon to fit inside a button face.</li><li>buttonScaleWhen: Relative scaling of an icon to fit inside a button face.</li><li>highlight: Appearance of a button when pushed.</li><li>style: Glyph style for checkbox and radio buttons.</li><li>numItems: Number of items in a combo box or list box.</li><li>editable: Whether the user can type in a combo box.</li><li>multipleSelection: Whether multiple list box items may be selected.</li></ul>
+ * @access public
+ * @author Denis Van Nuffelen, Nicola Asuni
+ * @since 2.1.002 (2008-02-12)
+ */
+ public function TextField($name, $w, $h, $prop=array()) {
+ $this->_addfield('text', $name, $this->x, $this->y, $w, $h, $prop);
+ }
+
+ /*
+ * Creates a RadioButton field
+ * @param string $name field name
+ * @param int $w width
+ * @param string $prop properties. Possible values are (http://www.adobe.com/devnet/acrobat/pdfs/js_developer_guide.pdf): <ul><li>rect: Position and size of field on page.</li><li>borderStyle: Rectangle border appearance.</li><li>strokeColor: Color of bounding rectangle.</li><li>lineWidth: Width of the edge of the surrounding rectangle.</li><li>rotation: Rotation of field in 90-degree increments.</li><li>fillColor: Background color of field (gray, transparent, RGB, or CMYK).</li><li>userName: Short description of field that appears on mouse-over.</li><li>readonly: Whether the user may change the field contents.</li><li>doNotScroll: Whether text fields may scroll.</li><li>display: Whether visible or hidden on screen or in print.</li><li>textFont: Text font.</li><li>textColor: Text color.</li><li>textSize: Text size.</li><li>richText: Rich text.</li><li>richValue: Text.</li><li>comb: Text comb format.</li><li>multiline: Text multiline.</li><li>charLimit: Text limit to number of characters.</li><li>fileSelect: Text file selection format.</li><li>password: Text password format.</li><li>alignment: Text layout in text fields.</li><li>buttonAlignX: X alignment of icon on button face.</li><li>buttonAlignY: Y alignment of icon on button face.</li><li>buttonFitBounds: Relative scaling of an icon to fit inside a button face.</li><li>buttonScaleHow: Relative scaling of an icon to fit inside a button face.</li><li>buttonScaleWhen: Relative scaling of an icon to fit inside a button face.</li><li>highlight: Appearance of a button when pushed.</li><li>style: Glyph style for checkbox and radio buttons.</li><li>numItems: Number of items in a combo box or list box.</li><li>editable: Whether the user can type in a combo box.</li><li>multipleSelection: Whether multiple list box items may be selected.</li></ul>
+ * @access public
+ * @author Nicola Asuni
+ * @since 2.2.003 (2008-03-03)
+ */
+ public function RadioButton($name, $w, $prop=array()) {
+ if (!isset($prop['strokeColor'])) {
+ $prop['strokeColor']='black';
+ }
+ $this->_addfield('radiobutton', $name, $this->x, $this->y, $w, $w, $prop);
+ }
+
+ /*
+ * Creates a List-box field
+ * @param string $name field name
+ * @param int $w width
+ * @param int $h height
+ * @param array $values array containing the list of values.
+ * @param string $prop properties. Possible values are (http://www.adobe.com/devnet/acrobat/pdfs/js_developer_guide.pdf): <ul><li>rect: Position and size of field on page.</li><li>borderStyle: Rectangle border appearance.</li><li>strokeColor: Color of bounding rectangle.</li><li>lineWidth: Width of the edge of the surrounding rectangle.</li><li>rotation: Rotation of field in 90-degree increments.</li><li>fillColor: Background color of field (gray, transparent, RGB, or CMYK).</li><li>userName: Short description of field that appears on mouse-over.</li><li>readonly: Whether the user may change the field contents.</li><li>doNotScroll: Whether text fields may scroll.</li><li>display: Whether visible or hidden on screen or in print.</li><li>textFont: Text font.</li><li>textColor: Text color.</li><li>textSize: Text size.</li><li>richText: Rich text.</li><li>richValue: Text.</li><li>comb: Text comb format.</li><li>multiline: Text multiline.</li><li>charLimit: Text limit to number of characters.</li><li>fileSelect: Text file selection format.</li><li>password: Text password format.</li><li>alignment: Text layout in text fields.</li><li>buttonAlignX: X alignment of icon on button face.</li><li>buttonAlignY: Y alignment of icon on button face.</li><li>buttonFitBounds: Relative scaling of an icon to fit inside a button face.</li><li>buttonScaleHow: Relative scaling of an icon to fit inside a button face.</li><li>buttonScaleWhen: Relative scaling of an icon to fit inside a button face.</li><li>highlight: Appearance of a button when pushed.</li><li>style: Glyph style for checkbox and radio buttons.</li><li>numItems: Number of items in a combo box or list box.</li><li>editable: Whether the user can type in a combo box.</li><li>multipleSelection: Whether multiple list box items may be selected.</li></ul>
+ * @access public
+ * @author Nicola Asuni
+ * @since 2.2.003 (2008-03-03)
+ */
+ public function ListBox($name, $w, $h, $values, $prop=array()) {
+ if (!isset($prop['strokeColor'])) {
+ $prop['strokeColor'] = 'ltGray';
+ }
+ $this->_addfield('listbox', $name, $this->x, $this->y, $w, $h, $prop);
+ $s = '';
+ foreach ($values as $value) {
+ $s .= "'".addslashes($value)."',";
+ }
+ $this->javascript .= 'f'.$name.'.setItems(['.substr($s, 0, -1)."]);\n";
+ }
+
+ /*
+ * Creates a Combo-box field
+ * @param string $name field name
+ * @param int $w width
+ * @param int $h height
+ * @param array $values array containing the list of values.
+ * @param string $prop properties. Possible values are (http://www.adobe.com/devnet/acrobat/pdfs/js_developer_guide.pdf): <ul><li>rect: Position and size of field on page.</li><li>borderStyle: Rectangle border appearance.</li><li>strokeColor: Color of bounding rectangle.</li><li>lineWidth: Width of the edge of the surrounding rectangle.</li><li>rotation: Rotation of field in 90-degree increments.</li><li>fillColor: Background color of field (gray, transparent, RGB, or CMYK).</li><li>userName: Short description of field that appears on mouse-over.</li><li>readonly: Whether the user may change the field contents.</li><li>doNotScroll: Whether text fields may scroll.</li><li>display: Whether visible or hidden on screen or in print.</li><li>textFont: Text font.</li><li>textColor: Text color.</li><li>textSize: Text size.</li><li>richText: Rich text.</li><li>richValue: Text.</li><li>comb: Text comb format.</li><li>multiline: Text multiline.</li><li>charLimit: Text limit to number of characters.</li><li>fileSelect: Text file selection format.</li><li>password: Text password format.</li><li>alignment: Text layout in text fields.</li><li>buttonAlignX: X alignment of icon on button face.</li><li>buttonAlignY: Y alignment of icon on button face.</li><li>buttonFitBounds: Relative scaling of an icon to fit inside a button face.</li><li>buttonScaleHow: Relative scaling of an icon to fit inside a button face.</li><li>buttonScaleWhen: Relative scaling of an icon to fit inside a button face.</li><li>highlight: Appearance of a button when pushed.</li><li>style: Glyph style for checkbox and radio buttons.</li><li>numItems: Number of items in a combo box or list box.</li><li>editable: Whether the user can type in a combo box.</li><li>multipleSelection: Whether multiple list box items may be selected.</li></ul>
+ * @access public
+ * @author Denis Van Nuffelen, Nicola Asuni
+ * @since 2.1.002 (2008-02-12)
+ */
+ public function ComboBox($name, $w, $h, $values, $prop=array()) {
+ $this->_addfield('combobox', $name, $this->x, $this->y, $w, $h, $prop);
+ $s = '';
+ foreach ($values as $value) {
+ $s .= "'".addslashes($value)."',";
+ }
+ $this->javascript .= 'f'.$name.'.setItems(['.substr($s, 0, -1)."]);\n";
+ }
+
+ /*
+ * Creates a CheckBox field
+ * @param string $name field name
+ * @param int $w width
+ * @param boolean $checked define the initial state (default = false).
+ * @param string $prop properties. Possible values are (http://www.adobe.com/devnet/acrobat/pdfs/js_developer_guide.pdf): <ul><li>rect: Position and size of field on page.</li><li>borderStyle: Rectangle border appearance.</li><li>strokeColor: Color of bounding rectangle.</li><li>lineWidth: Width of the edge of the surrounding rectangle.</li><li>rotation: Rotation of field in 90-degree increments.</li><li>fillColor: Background color of field (gray, transparent, RGB, or CMYK).</li><li>userName: Short description of field that appears on mouse-over.</li><li>readonly: Whether the user may change the field contents.</li><li>doNotScroll: Whether text fields may scroll.</li><li>display: Whether visible or hidden on screen or in print.</li><li>textFont: Text font.</li><li>textColor: Text color.</li><li>textSize: Text size.</li><li>richText: Rich text.</li><li>richValue: Text.</li><li>comb: Text comb format.</li><li>multiline: Text multiline.</li><li>charLimit: Text limit to number of characters.</li><li>fileSelect: Text file selection format.</li><li>password: Text password format.</li><li>alignment: Text layout in text fields.</li><li>buttonAlignX: X alignment of icon on button face.</li><li>buttonAlignY: Y alignment of icon on button face.</li><li>buttonFitBounds: Relative scaling of an icon to fit inside a button face.</li><li>buttonScaleHow: Relative scaling of an icon to fit inside a button face.</li><li>buttonScaleWhen: Relative scaling of an icon to fit inside a button face.</li><li>highlight: Appearance of a button when pushed.</li><li>style: Glyph style for checkbox and radio buttons.</li><li>numItems: Number of items in a combo box or list box.</li><li>editable: Whether the user can type in a combo box.</li><li>multipleSelection: Whether multiple list box items may be selected.</li></ul>
+ * @access public
+ * @author Denis Van Nuffelen, Nicola Asuni
+ * @since 2.1.002 (2008-02-12)
+ */
+ public function CheckBox($name, $w, /*$checked=false,*/ $prop=array()) {
+ /*$prop['value'] = ($checked ? 'Yes' : 'Off');*/
+ if (!isset($prop['strokeColor'])) {
+ $prop['strokeColor'] = 'black';
+ }
+ $this->_addfield('checkbox', $name, $this->x, $this->y, $w, $w, $prop);
+ }
+
+ /*
+ * Creates a button field
+ * @param string $name field name
+ * @param int $w width
+ * @param int $h height
+ * @param string $caption caption.
+ * @param string $action action triggered by the button (JavaScript code).
+ * @param string $prop properties. Possible values are (http://www.adobe.com/devnet/acrobat/pdfs/js_developer_guide.pdf): <ul><li>rect: Position and size of field on page.</li><li>borderStyle: Rectangle border appearance.</li><li>strokeColor: Color of bounding rectangle.</li><li>lineWidth: Width of the edge of the surrounding rectangle.</li><li>rotation: Rotation of field in 90-degree increments.</li><li>fillColor: Background color of field (gray, transparent, RGB, or CMYK).</li><li>userName: Short description of field that appears on mouse-over.</li><li>readonly: Whether the user may change the field contents.</li><li>doNotScroll: Whether text fields may scroll.</li><li>display: Whether visible or hidden on screen or in print.</li><li>textFont: Text font.</li><li>textColor: Text color.</li><li>textSize: Text size.</li><li>richText: Rich text.</li><li>richValue: Text.</li><li>comb: Text comb format.</li><li>multiline: Text multiline.</li><li>charLimit: Text limit to number of characters.</li><li>fileSelect: Text file selection format.</li><li>password: Text password format.</li><li>alignment: Text layout in text fields.</li><li>buttonAlignX: X alignment of icon on button face.</li><li>buttonAlignY: Y alignment of icon on button face.</li><li>buttonFitBounds: Relative scaling of an icon to fit inside a button face.</li><li>buttonScaleHow: Relative scaling of an icon to fit inside a button face.</li><li>buttonScaleWhen: Relative scaling of an icon to fit inside a button face.</li><li>highlight: Appearance of a button when pushed.</li><li>style: Glyph style for checkbox and radio buttons.</li><li>numItems: Number of items in a combo box or list box.</li><li>editable: Whether the user can type in a combo box.</li><li>multipleSelection: Whether multiple list box items may be selected.</li></ul>
+ * @access public
+ * @author Denis Van Nuffelen, Nicola Asuni
+ * @since 2.1.002 (2008-02-12)
+ */
+ public function Button($name, $w, $h, $caption, $action, $prop=array()) {
+ if (!isset($prop['strokeColor'])) {
+ $prop['strokeColor'] = 'black';
+ }
+ if (!isset($prop['borderStyle'])) {
+ $prop['borderStyle'] = 'beveled';
+ }
+ $this->_addfield('button', $name, $this->x, $this->y, $w, $h, $prop);
+ $this->javascript .= 'f'.$name.".buttonSetCaption('".addslashes($caption)."');\n";
+ $this->javascript .= 'f'.$name.".setAction('MouseUp','".addslashes($action)."');\n";
+ $this->javascript .= 'f'.$name.".highlight='push';\n";
+ $this->javascript .= 'f'.$name.".print=false;\n";
+ }
+
+ // END JAVASCRIPT - FORMS ------------------------------
+
+ /*
+ * Enable Write permissions for PDF Reader.
+ * (EXPERIMENTAL - ONLY WORKS WITH SOME ACROBAT READER VERSIONS)
+ * TO BE COMPLETED
+ * @access protected
+ * @author Nicola Asuni
+ * @since 2.9.000 (2008-03-26)
+ */
+ protected function _putuserrights() {
+ if (!$this->ur) {
+ return;
+ }
+ $this->_out('/Perms');
+ $this->_out('<<');
+ $this->_out('/UR3');
+ $this->_out('<<');
+ $this->_out('/Type/Sig');
+ $this->_out('/Filter/Adobe.PPKLite');
+ $this->_out('/SubFilter/adbe.pkcs7.sha1');
+ $this->_out('/Name(TCPDF)');
+ $this->_out('/ByteRange[0 2 2 2]'); // %PDF SHA1: 39B6D73EFF36493BA0674E48255A9D81724B4521
+ $this->_out('/Contents<0>'); // This must be calculated
+ $this->_out('/M '.$this->_datastring('D:'.date('YmdHis')));
+ $this->_out('/Reference');
+ $this->_out('[');
+ $this->_out('<<');
+ $this->_out('/Type/SigRef');
+ $this->_out('/TransformMethod/UR3');
+ $this->_out('/TransformParams');
+ $this->_out('<<');
+ $this->_out('/Type/TransformParams');
+ $this->_out('/V/2.2');
+ if (!empty($this->ur_document)) {
+ $this->_out('/Document['.$this->ur_document.']');
+ }
+ if (!empty($this->ur_annots)) {
+ $this->_out('/Annots['.$this->ur_annots.']');
+ }
+ if (!empty($this->ur_form)) {
+ $this->_out('/Form['.$this->ur_form.']');
+ }
+ if (!empty($this->ur_signature)) {
+ $this->_out('/Signature['.$this->ur_signature.']');
+ }
+ $this->_out('>>');
+ $this->_out('/DigestMethod/SHA1');
+ $this->_out('>>');
+ $this->_out(']');
+ $this->_out('>>');
+ $this->_out('>>');
+ }
+
+ /*
+ * Set User's Rights for PDF Reader
+ * Check the PDF Reference 8.7.1 Transform Methods,
+ * Table 8.105 Entries in the UR transform parameters dictionary
+ * @param boolean $enable if true enable user's rights on PDF reader
+ * @param string $document Names specifying additional document-wide usage rights for the document. The only defined value is "/FullSave", which permits a user to save the document along with modified form and/or annotation data.
+ * @param string $annots Names specifying additional annotation-related usage rights for the document. Valid names in PDF 1.5 and later are /Create/Delete/Modify/Copy/Import/Export, which permit the user to perform the named operation on annotations.
+ * @param string $form Names specifying additional form-field-related usage rights for the document. Valid names are: /Add/Delete/FillIn/Import/Export/SubmitStandalone/SpawnTemplate
+ * @param string $signature Names specifying additional signature-related usage rights for the document. The only defined value is /Modify, which permits a user to apply a digital signature to an existing signature form field or clear a signed signature form field.
+ * @access public
+ * @author Nicola Asuni
+ * @since 2.9.000 (2008-03-26)
+ */
+ public function setUserRights(
+ $enable=true,
+ $document='/FullSave',
+ $annots='/Create/Delete/Modify/Copy/Import/Export',
+ $form='/Add/Delete/FillIn/Import/Export/SubmitStandalone/SpawnTemplate',
+ $signature='/Modify') {
+ $this->ur = $enable;
+ $this->ur_document = $document;
+ $this->ur_annots = $annots;
+ $this->ur_form = $form;
+ $this->ur_signature = $signature;
+ }
+
+ /*
+ * Create a new page group.
+ * NOTE: call this function before calling AddPage()
+ * @param int $page starting group page (leave empty for next page).
+ * @access public
+ * @since 3.0.000 (2008-03-27)
+ */
+ public function startPageGroup($page='') {
+ if (empty($page)) {
+ $page = $this->page + 1;
+ }
+ $this->newpagegroup[$page] = true;
+ }
+
+ /**
+ * Defines an alias for the total number of pages.
+ * It will be substituted as the document is closed.
+ * @param string $alias The alias.
+ * @access public
+ * @since 1.4
+ * @see getAliasNbPages(), PageNo(), Footer()
+ */
+ public function AliasNbPages($alias='{nb}') {
+ $this->AliasNbPages = $alias;
+ }
+
+ /**
+ * Returns the string alias used for the total number of pages.
+ * If the current font is unicode type, the returned string is surrounded by additional curly braces.
+ * @return string
+ * @access public
+ * @since 4.0.018 (2008-08-08)
+ * @see AliasNbPages(), PageNo(), Footer()
+ */
+ public function getAliasNbPages() {
+ if (($this->CurrentFont['type'] == 'TrueTypeUnicode') OR ($this->CurrentFont['type'] == 'cidfont0')) {
+ return '{'.$this->AliasNbPages.'}';
+ }
+ return $this->AliasNbPages;
+ }
+
+ /**
+ * Defines an alias for the page number.
+ * It will be substituted as the document is closed.
+ * @param string $alias The alias.
+ * @access public
+ * @since 4.5.000 (2009-01-02)
+ * @see getAliasNbPages(), PageNo(), Footer()
+ */
+ public function AliasNumPage($alias='{pnb}') {
+ //Define an alias for total number of pages
+ $this->AliasNumPage = $alias;
+ }
+
+ /**
+ * Returns the string alias used for the page number.
+ * If the current font is unicode type, the returned string is surrounded by additional curly braces.
+ * @return string
+ * @access public
+ * @since 4.5.000 (2009-01-02)
+ * @see AliasNbPages(), PageNo(), Footer()
+ */
+ public function getAliasNumPage() {
+ if (($this->CurrentFont['type'] == 'TrueTypeUnicode') OR ($this->CurrentFont['type'] == 'cidfont0')) {
+ return '{'.$this->AliasNumPage.'}';
+ }
+ return $this->AliasNumPage;
+ }
+
+ /*
+ * Return the current page in the group.
+ * @return current page in the group
+ * @access public
+ * @since 3.0.000 (2008-03-27)
+ */
+ public function getGroupPageNo() {
+ return $this->pagegroups[$this->currpagegroup];
+ }
+
+ /**
+ * Returns the current group page number formatted as a string.
+ * @access public
+ * @since 4.3.003 (2008-11-18)
+ * @see PaneNo(), formatPageNumber()
+ */
+ public function getGroupPageNoFormatted() {
+ return $this->formatPageNumber($this->getGroupPageNo());
+ }
+
+ /*
+ * Return the alias of the current page group
+ * If the current font is unicode type, the returned string is surrounded by additional curly braces.
+ * (will be replaced by the total number of pages in this group).
+ * @return alias of the current page group
+ * @access public
+ * @since 3.0.000 (2008-03-27)
+ */
+ public function getPageGroupAlias() {
+ if (($this->CurrentFont['type'] == 'TrueTypeUnicode') OR ($this->CurrentFont['type'] == 'cidfont0')) {
+ return '{'.$this->currpagegroup.'}';
+ }
+ return $this->currpagegroup;
+ }
+
+ /*
+ * Return the alias for the page number on the current page group
+ * If the current font is unicode type, the returned string is surrounded by additional curly braces.
+ * (will be replaced by the total number of pages in this group).
+ * @return alias of the current page group
+ * @access public
+ * @since 4.5.000 (2009-01-02)
+ */
+ public function getPageNumGroupAlias() {
+ if (($this->CurrentFont['type'] == 'TrueTypeUnicode') OR ($this->CurrentFont['type'] == 'cidfont0')) {
+ return '{'.str_replace('{nb', '{pnb', $this->currpagegroup).'}';
+ }
+ return str_replace('{nb', '{pnb', $this->currpagegroup);
+ }
+
+ /**
+ * Format the page numbers.
+ * This method can be overriden for custom formats.
+ * @param int $num page number
+ * @access protected
+ * @since 4.2.005 (2008-11-06)
+ */
+ protected function formatPageNumber($num) {
+ return number_format((float)$num, 0, '', '.');
+ }
+
+ /**
+ * Format the page numbers on the Table Of Content.
+ * This method can be overriden for custom formats.
+ * @param int $num page number
+ * @access protected
+ * @since 4.5.001 (2009-01-04)
+ * @see addTOC()
+ */
+ protected function formatTOCPageNumber($num) {
+ return number_format((float)$num, 0, '', '.');
+ }
+
+ /**
+ * Returns the current page number formatted as a string.
+ * @access public
+ * @since 4.2.005 (2008-11-06)
+ * @see PaneNo(), formatPageNumber()
+ */
+ public function PageNoFormatted() {
+ return $this->formatPageNumber($this->PageNo());
+ }
+
+ /*
+ * Put visibility settings.
+ * @access protected
+ * @since 3.0.000 (2008-03-27)
+ */
+ protected function _putocg() {
+ $this->_newobj();
+ $this->n_ocg_print = $this->n;
+ $this->_out('<</Type /OCG /Name '.$this->_textstring('print'));
+ $this->_out('/Usage <</Print <</PrintState /ON>> /View <</ViewState /OFF>>>>>>');
+ $this->_out('endobj');
+ $this->_newobj();
+ $this->n_ocg_view=$this->n;
+ $this->_out('<</Type /OCG /Name '.$this->_textstring('view'));
+ $this->_out('/Usage <</Print <</PrintState /OFF>> /View <</ViewState /ON>>>>>>');
+ $this->_out('endobj');
+ }
+
+ /*
+ * Set the visibility of the successive elements.
+ * This can be useful, for instance, to put a background
+ * image or color that will show on screen but won't print.
+ * @param string $v visibility mode. Legal values are: all, print, screen.
+ * @access public
+ * @since 3.0.000 (2008-03-27)
+ */
+ public function setVisibility($v) {
+ if ($this->openMarkedContent) {
+ // close existing open marked-content
+ $this->_out('EMC');
+ $this->openMarkedContent = false;
+ }
+ switch($v) {
+ case 'print': {
+ $this->_out('/OC /OC1 BDC');
+ $this->openMarkedContent = true;
+ break;
+ }
+ case 'screen': {
+ $this->_out('/OC /OC2 BDC');
+ $this->openMarkedContent = true;
+ break;
+ }
+ case 'all': {
+ $this->_out('');
+ break;
+ }
+ default: {
+ $this->Error('Incorrect visibility: '.$v);
+ break;
+ }
+ }
+ $this->visibility = $v;
+ }
+
+ /*
+ * Add transparency parameters to the current extgstate
+ * @param array $params parameters
+ * @return the number of extgstates
+ * @access protected
+ * @since 3.0.000 (2008-03-27)
+ */
+ protected function addExtGState($parms) {
+ $n = count($this->extgstates) + 1;
+ $this->extgstates[$n]['parms'] = $parms;
+ return $n;
+ }
+
+ /*
+ * Add an extgstate
+ * @param array $gs extgstate
+ * @access protected
+ * @since 3.0.000 (2008-03-27)
+ */
+ protected function setExtGState($gs) {
+ $this->_out(sprintf('/GS%d gs', $gs));
+ }
+
+ /*
+ * Put extgstates for object transparency
+ * @param array $gs extgstate
+ * @access protected
+ * @since 3.0.000 (2008-03-27)
+ */
+ protected function _putextgstates() {
+ $ne = count($this->extgstates);
+ for ($i = 1; $i <= $ne; ++$i) {
+ $this->_newobj();
+ $this->extgstates[$i]['n'] = $this->n;
+ $this->_out('<</Type /ExtGState');
+ foreach ($this->extgstates[$i]['parms'] as $k => $v) {
+ $this->_out('/'.$k.' '.$v);
+ }
+ $this->_out('>>');
+ $this->_out('endobj');
+ }
+ }
+
+ /*
+ * Set alpha for stroking (CA) and non-stroking (ca) operations.
+ * @param float $alpha real value from 0 (transparent) to 1 (opaque)
+ * @param string $bm blend mode, one of the following: Normal, Multiply, Screen, Overlay, Darken, Lighten, ColorDodge, ColorBurn, HardLight, SoftLight, Difference, Exclusion, Hue, Saturation, Color, Luminosity
+ * @access public
+ * @since 3.0.000 (2008-03-27)
+ */
+ public function setAlpha($alpha, $bm='Normal') {
+ $gs = $this->addExtGState(array('ca' => $alpha, 'CA' => $alpha, 'BM' => '/'.$bm));
+ $this->setExtGState($gs);
+ }
+
+ /*
+ * Set the default JPEG compression quality (1-100)
+ * @param int $quality JPEG quality, integer between 1 and 100
+ * @access public
+ * @since 3.0.000 (2008-03-27)
+ */
+ public function setJPEGQuality($quality) {
+ if (($quality < 1) OR ($quality > 100)) {
+ $quality = 75;
+ }
+ $this->jpeg_quality = intval($quality);
+ }
+
+ /*
+ * Set the default number of columns in a row for HTML tables.
+ * @param int $cols number of columns
+ * @access public
+ * @since 3.0.014 (2008-06-04)
+ */
+ public function setDefaultTableColumns($cols=4) {
+ $this->default_table_columns = intval($cols);
+ }
+
+ /*
+ * Set the height of cell repect font height.
+ * @param int $h cell proportion respect font height (typical value = 1.25).
+ * @access public
+ * @since 3.0.014 (2008-06-04)
+ */
+ public function setCellHeightRatio($h) {
+ $this->cell_height_ratio = $h;
+ }
+
+ /*
+ * return the height of cell repect font height.
+ * @access public
+ * @since 4.0.012 (2008-07-24)
+ */
+ public function getCellHeightRatio() {
+ return $this->cell_height_ratio;
+ }
+
+ /*
+ * Set the PDF version (check PDF reference for valid values).
+ * Default value is 1.t
+ * @access public
+ * @since 3.1.000 (2008-06-09)
+ */
+ public function setPDFVersion($version='1.7') {
+ $this->PDFVersion = $version;
+ }
+
+ /*
+ * Set the viewer preferences dictionary controlling the way the document is to be presented on the screen or in print.
+ * (see Section 8.1 of PDF reference, "Viewer Preferences").
+ * <ul>
+ * <li>HideToolbar boolean (Optional) A flag specifying whether to hide the viewer application's tool bars when the document is active. Default value: false.</li>
+ * <li>HideMenubar boolean (Optional) A flag specifying whether to hide the viewer application's menu bar when the document is active. Default value: false.</li>
+ * <li>HideWindowUI boolean (Optional) A flag specifying whether to hide user interface elements in the document's window (such as scroll bars and navigation controls), leaving only the document's contents displayed. Default value: false.</li>
+ * <li>FitWindow boolean (Optional) A flag specifying whether to resize the document's window to fit the size of the first displayed page. Default value: false.</li>
+ * <li>CenterWindow boolean (Optional) A flag specifying whether to position the document's window in the center of the screen. Default value: false.</li>
+ * <li>DisplayDocTitle boolean (Optional; PDF 1.4) A flag specifying whether the window's title bar should display the document title taken from the Title entry of the document information dictionary (see Section 10.2.1, "Document Information Dictionary"). If false, the title bar should instead display the name of the PDF file containing the document. Default value: false.</li>
+ * <li>NonFullScreenPageMode name (Optional) The document's page mode, specifying how to display the document on exiting full-screen mode:<ul><li>UseNone Neither document outline nor thumbnail images visible</li><li>UseOutlines Document outline visible</li><li>UseThumbs Thumbnail images visible</li><li>UseOC Optional content group panel visible</li><ul>This entry is meaningful only if the value of the PageMode entry in the catalog dictionary (see Section 3.6.1, "Document Catalog") is FullScreen; it is ignored otherwise. Default value: UseNone.</li>
+ * <li>ViewArea name (Optional; PDF 1.4) The name of the page boundary representing the area of a page to be displayed when viewing the document on the screen. Valid values are (see Section 10.10.1, "Page Boundaries").:<ul><li>MediaBox</li><li>CropBox (default)</li><li>BleedBox</li><li>TrimBox</li><li>ArtBox</li></ul></li>
+ * <li>ViewClip name (Optional; PDF 1.4) The name of the page boundary to which the contents of a page are to be clipped when viewing the document on the screen. Valid values are (see Section 10.10.1, "Page Boundaries").:<ul><li>MediaBox</li><li>CropBox (default)</li><li>BleedBox</li><li>TrimBox</li><li>ArtBox</li></ul></li>
+ * <li>PrintArea name (Optional; PDF 1.4) The name of the page boundary representing the area of a page to be rendered when printing the document. Valid values are (see Section 10.10.1, "Page Boundaries").:<ul><li>MediaBox</li><li>CropBox (default)</li><li>BleedBox</li><li>TrimBox</li><li>ArtBox</li></ul></li>
+ * <li>PrintClip name (Optional; PDF 1.4) The name of the page boundary to which the contents of a page are to be clipped when printing the document. Valid values are (see Section 10.10.1, "Page Boundaries").:<ul><li>MediaBox</li><li>CropBox (default)</li><li>BleedBox</li><li>TrimBox</li><li>ArtBox</li></ul></li>
+ * <li>PrintScaling name (Optional; PDF 1.6) The page scaling option to be selected when a print dialog is displayed for this document. Valid values are: <ul><li>None, which indicates that the print dialog should reflect no page scaling</li><li>AppDefault (default), which indicates that applications should use the current print scaling</li><ul></li>
+ * <li>Duplex name (Optional; PDF 1.7) The paper handling option to use when printing the file from the print dialog. The following values are valid:<ul><li>Simplex - Print single-sided</li><li>DuplexFlipShortEdge - Duplex and flip on the short edge of the sheet</li><li>DuplexFlipLongEdge - Duplex and flip on the long edge of the sheet</li></ul>Default value: none</li>
+ * <li>PickTrayByPDFSize boolean (Optional; PDF 1.7) A flag specifying whether the PDF page size is used to select the input paper tray. This setting influences only the preset values used to populate the print dialog presented by a PDF viewer application. If PickTrayByPDFSize is true, the check box in the print dialog associated with input paper tray is checked. Note: This setting has no effect on Mac OS systems, which do not provide the ability to pick the input tray by size.</li>
+ * <li>PrintPageRange array (Optional; PDF 1.7) The page numbers used to initialize the print dialog box when the file is printed. The first page of the PDF file is denoted by 1. Each pair consists of the first and last pages in the sub-range. An odd number of integers causes this entry to be ignored. Negative numbers cause the entire array to be ignored. Default value: as defined by PDF viewer application</li>
+ * <li>NumCopies integer (Optional; PDF 1.7) The number of copies to be printed when the print dialog is opened for this file. Supported values are the integers 2 through 5. Values outside this range are ignored. Default value: as defined by PDF viewer application, but typically 1</li>
+ * </ul>
+ * @param array $preferences array of options.
+ * @author Nicola Asuni
+ * @access public
+ * @since 3.1.000 (2008-06-09)
+ */
+ public function setViewerPreferences($preferences) {
+ $this->viewer_preferences = $preferences;
+ }
+
+ /**
+ * Paints a linear colour gradient.
+ * @param float $x abscissa of the top left corner of the rectangle.
+ * @param float $y ordinate of the top left corner of the rectangle.
+ * @param float $w width of the rectangle.
+ * @param float $h height of the rectangle.
+ * @param array $col1 first color (RGB components).
+ * @param array $col2 second color (RGB components).
+ * @param array $coords array of the form (x1, y1, x2, y2) which defines the gradient vector (see linear_gradient_coords.jpg). The default value is from left to right (x1=0, y1=0, x2=1, y2=0).
+ * @author Andreas Würmser, Nicola Asuni
+ * @since 3.1.000 (2008-06-09)
+ * @access public
+ */
+ public function LinearGradient($x, $y, $w, $h, $col1=array(), $col2=array(), $coords=array(0,0,1,0)) {
+ $this->Clip($x, $y, $w, $h);
+ $this->Gradient(2, $col1, $col2, $coords);
+ }
+
+ /**
+ * Paints a radial colour gradient.
+ * @param float $x abscissa of the top left corner of the rectangle.
+ * @param float $y ordinate of the top left corner of the rectangle.
+ * @param float $w width of the rectangle.
+ * @param float $h height of the rectangle.
+ * @param array $col1 first color (RGB components).
+ * @param array $col2 second color (RGB components).
+ * @param array $coords array of the form (fx, fy, cx, cy, r) where (fx, fy) is the starting point of the gradient with color1, (cx, cy) is the center of the circle with color2, and r is the radius of the circle (see radial_gradient_coords.jpg). (fx, fy) should be inside the circle, otherwise some areas will not be defined.
+ * @author Andreas Würmser, Nicola Asuni
+ * @since 3.1.000 (2008-06-09)
+ * @access public
+ */
+ public function RadialGradient($x, $y, $w, $h, $col1=array(), $col2=array(), $coords=array(0.5,0.5,0.5,0.5,1)) {
+ $this->Clip($x, $y, $w, $h);
+ $this->Gradient(3, $col1, $col2, $coords);
+ }
+
+ /**
+ * Paints a coons patch mesh.
+ * @param float $x abscissa of the top left corner of the rectangle.
+ * @param float $y ordinate of the top left corner of the rectangle.
+ * @param float $w width of the rectangle.
+ * @param float $h height of the rectangle.
+ * @param array $col1 first color (lower left corner) (RGB components).
+ * @param array $col2 second color (lower right corner) (RGB components).
+ * @param array $col3 third color (upper right corner) (RGB components).
+ * @param array $col4 fourth color (upper left corner) (RGB components).
+ * @param array $coords <ul><li>for one patch mesh: array(float x1, float y1, .... float x12, float y12): 12 pairs of coordinates (normally from 0 to 1) which specify the Bezier control points that define the patch. First pair is the lower left edge point, next is its right control point (control point 2). Then the other points are defined in the order: control point 1, edge point, control point 2 going counter-clockwise around the patch. Last (x12, y12) is the first edge point's left control point (control point 1).</li><li>for two or more patch meshes: array[number of patches]: arrays with the following keys for each patch: f: where to put that patch (0 = first patch, 1, 2, 3 = right, top and left of precedent patch - I didn't figure this out completely - just try and error ;-) points: 12 pairs of coordinates of the Bezier control points as above for the first patch, 8 pairs of coordinates for the following patches, ignoring the coordinates already defined by the precedent patch (I also didn't figure out the order of these - also: try and see what's happening) colors: must be 4 colors for the first patch, 2 colors for the following patches</li></ul>
+ * @param array $coords_min minimum value used by the coordinates. If a coordinate's value is smaller than this it will be cut to coords_min. default: 0
+ * @param array $coords_max maximum value used by the coordinates. If a coordinate's value is greater than this it will be cut to coords_max. default: 1
+ * @author Andreas Würmser, Nicola Asuni
+ * @since 3.1.000 (2008-06-09)
+ * @access public
+ */
+ public function CoonsPatchMesh($x, $y, $w, $h, $col1=array(), $col2=array(), $col3=array(), $col4=array(), $coords=array(0.00,0.0,0.33,0.00,0.67,0.00,1.00,0.00,1.00,0.33,1.00,0.67,1.00,1.00,0.67,1.00,0.33,1.00,0.00,1.00,0.00,0.67,0.00,0.33), $coords_min=0, $coords_max=1) {
+ $this->Clip($x, $y, $w, $h);
+ $n = count($this->gradients) + 1;
+ $this->gradients[$n]['type'] = 6; //coons patch mesh
+ //check the coords array if it is the simple array or the multi patch array
+ if (!isset($coords[0]['f'])) {
+ //simple array -> convert to multi patch array
+ if (!isset($col1[1])) {
+ $col1[1] = $col1[2] = $col1[0];
+ }
+ if (!isset($col2[1])) {
+ $col2[1] = $col2[2] = $col2[0];
+ }
+ if (!isset($col3[1])) {
+ $col3[1] = $col3[2] = $col3[0];
+ }
+ if (!isset($col4[1])) {
+ $col4[1] = $col4[2] = $col4[0];
+ }
+ $patch_array[0]['f'] = 0;
+ $patch_array[0]['points'] = $coords;
+ $patch_array[0]['colors'][0]['r'] = $col1[0];
+ $patch_array[0]['colors'][0]['g'] = $col1[1];
+ $patch_array[0]['colors'][0]['b'] = $col1[2];
+ $patch_array[0]['colors'][1]['r'] = $col2[0];
+ $patch_array[0]['colors'][1]['g'] = $col2[1];
+ $patch_array[0]['colors'][1]['b'] = $col2[2];
+ $patch_array[0]['colors'][2]['r'] = $col3[0];
+ $patch_array[0]['colors'][2]['g'] = $col3[1];
+ $patch_array[0]['colors'][2]['b'] = $col3[2];
+ $patch_array[0]['colors'][3]['r'] = $col4[0];
+ $patch_array[0]['colors'][3]['g'] = $col4[1];
+ $patch_array[0]['colors'][3]['b'] = $col4[2];
+ } else {
+ //multi patch array
+ $patch_array = $coords;
+ }
+ $bpcd = 65535; //16 BitsPerCoordinate
+ //build the data stream
+ $this->gradients[$n]['stream'] = '';
+ $count_patch = count($patch_array);
+ for($i=0; $i < $count_patch; ++$i) {
+ $this->gradients[$n]['stream'] .= chr($patch_array[$i]['f']); //start with the edge flag as 8 bit
+ $count_points = count($patch_array[$i]['points']);
+ for($j=0; $j < $count_points; ++$j) {
+ //each point as 16 bit
+ $patch_array[$i]['points'][$j] = (($patch_array[$i]['points'][$j] - $coords_min) / ($coords_max - $coords_min)) * $bpcd;
+ if ($patch_array[$i]['points'][$j] < 0) {
+ $patch_array[$i]['points'][$j] = 0;
+ }
+ if ($patch_array[$i]['points'][$j] > $bpcd) {
+ $patch_array[$i]['points'][$j] = $bpcd;
+ }
+ $this->gradients[$n]['stream'] .= chr(floor($patch_array[$i]['points'][$j] / 256));
+ $this->gradients[$n]['stream'] .= chr(floor($patch_array[$i]['points'][$j] % 256));
+ }
+ $count_cols = count($patch_array[$i]['colors']);
+ for($j=0; $j < $count_cols; ++$j) {
+ //each color component as 8 bit
+ $this->gradients[$n]['stream'] .= chr($patch_array[$i]['colors'][$j]['r']);
+ $this->gradients[$n]['stream'] .= chr($patch_array[$i]['colors'][$j]['g']);
+ $this->gradients[$n]['stream'] .= chr($patch_array[$i]['colors'][$j]['b']);
+ }
+ }
+ //paint the gradient
+ $this->_out('/Sh'.$n.' sh');
+ //restore previous Graphic State
+ $this->_out('Q');
+ }
+
+ /**
+ * Set a rectangular clipping area.
+ * @param float $x abscissa of the top left corner of the rectangle (or top right corner for RTL mode).
+ * @param float $y ordinate of the top left corner of the rectangle.
+ * @param float $w width of the rectangle.
+ * @param float $h height of the rectangle.
+ * @author Andreas Würmser, Nicola Asuni
+ * @since 3.1.000 (2008-06-09)
+ * @access protected
+ */
+ protected function Clip($x, $y, $w, $h) {
+ if ($this->rtl) {
+ $x = $this->w - $x - $w;
+ }
+ //save current Graphic State
+ $s = 'q';
+ //set clipping area
+ $s .= sprintf(' %.2F %.2F %.2F %.2F re W n', $x*$this->k, ($this->h-$y)*$this->k, $w*$this->k, -$h*$this->k);
+ //set up transformation matrix for gradient
+ $s .= sprintf(' %.3F 0 0 %.3F %.3F %.3F cm', $w*$this->k, $h*$this->k, $x*$this->k, ($this->h-($y+$h))*$this->k);
+ $this->_out($s);
+ }
+
+ /**
+ * Output gradient.
+ * @param int $type type of gradient.
+ * @param array $col1 first color (RGB components).
+ * @param array $col2 second color (RGB components).
+ * @param array $coords array of coordinates.
+ * @author Andreas Würmser, Nicola Asuni
+ * @since 3.1.000 (2008-06-09)
+ * @access protected
+ */
+ protected function Gradient($type, $col1, $col2, $coords) {
+ $n = count($this->gradients) + 1;
+ $this->gradients[$n]['type'] = $type;
+ if (!isset($col1[1])) {
+ $col1[1]=$col1[2]=$col1[0];
+ }
+ $this->gradients[$n]['col1'] = sprintf('%.3F %.3F %.3F', ($col1[0]/255), ($col1[1]/255), ($col1[2]/255));
+ if (!isset($col2[1])) {
+ $col2[1] = $col2[2] = $col2[0];
+ }
+ $this->gradients[$n]['col2'] = sprintf('%.3F %.3F %.3F', ($col2[0]/255), ($col2[1]/255), ($col2[2]/255));
+ $this->gradients[$n]['coords'] = $coords;
+ //paint the gradient
+ $this->_out('/Sh'.$n.' sh');
+ //restore previous Graphic State
+ $this->_out('Q');
+ }
+
+ /**
+ * Output shaders.
+ * @author Andreas Würmser, Nicola Asuni
+ * @since 3.1.000 (2008-06-09)
+ * @access protected
+ */
+ function _putshaders() {
+ foreach ($this->gradients as $id => $grad) {
+ if (($grad['type'] == 2) OR ($grad['type'] == 3)) {
+ $this->_newobj();
+ $this->_out('<<');
+ $this->_out('/FunctionType 2');
+ $this->_out('/Domain [0.0 1.0]');
+ $this->_out('/C0 ['.$grad['col1'].']');
+ $this->_out('/C1 ['.$grad['col2'].']');
+ $this->_out('/N 1');
+ $this->_out('>>');
+ $this->_out('endobj');
+ $f1 = $this->n;
+ }
+ $this->_newobj();
+ $this->_out('<<');
+ $this->_out('/ShadingType '.$grad['type']);
+ $this->_out('/ColorSpace /DeviceRGB');
+ if ($grad['type'] == 2) {
+ $this->_out(sprintf('/Coords [%.3F %.3F %.3F %.3F]', $grad['coords'][0], $grad['coords'][1], $grad['coords'][2], $grad['coords'][3]));
+ $this->_out('/Function '.$f1.' 0 R');
+ $this->_out('/Extend [true true] ');
+ $this->_out('>>');
+ } elseif ($grad['type'] == 3) {
+ //x0, y0, r0, x1, y1, r1
+ //at this this time radius of inner circle is 0
+ $this->_out(sprintf('/Coords [%.3F %.3F 0 %.3F %.3F %.3F]', $grad['coords'][0], $grad['coords'][1], $grad['coords'][2], $grad['coords'][3], $grad['coords'][4]));
+ $this->_out('/Function '.$f1.' 0 R');
+ $this->_out('/Extend [true true] ');
+ $this->_out('>>');
+ } elseif ($grad['type'] == 6) {
+ $this->_out('/BitsPerCoordinate 16');
+ $this->_out('/BitsPerComponent 8');
+ $this->_out('/Decode[0 1 0 1 0 1 0 1 0 1]');
+ $this->_out('/BitsPerFlag 8');
+ $this->_out('/Length '.strlen($grad['stream']));
+ $this->_out('>>');
+ $this->_putstream($grad['stream']);
+ }
+ $this->_out('endobj');
+ $this->gradients[$id]['id'] = $this->n;
+ }
+ }
+
+ /**
+ * Output an arc
+ * @author Maxime Delorme, Nicola Asuni
+ * @since 3.1.000 (2008-06-09)
+ * @access protected
+ */
+ protected function _outarc($x1, $y1, $x2, $y2, $x3, $y3 ) {
+ $h = $this->h;
+ $this->_out(sprintf('%.2F %.2F %.2F %.2F %.2F %.2F c', $x1*$this->k, ($h-$y1)*$this->k, $x2*$this->k, ($h-$y2)*$this->k, $x3*$this->k, ($h-$y3)*$this->k));
+ }
+
+ /**
+ * Draw the sector of a circle.
+ * It can be used for instance to render pie charts.
+ * @param float $xc abscissa of the center.
+ * @param float $yc ordinate of the center.
+ * @param float $r radius.
+ * @param float $a start angle (in degrees).
+ * @param float $b end angle (in degrees).
+ * @param string $style: D, F, FD or DF (draw, fill, fill and draw). Default: FD.
+ * @param float $cw: indicates whether to go clockwise (default: true).
+ * @param float $o: origin of angles (0 for 3 o'clock, 90 for noon, 180 for 9 o'clock, 270 for 6 o'clock). Default: 90.
+ * @author Maxime Delorme, Nicola Asuni
+ * @since 3.1.000 (2008-06-09)
+ * @access public
+ */
+ public function PieSector($xc, $yc, $r, $a, $b, $style='FD', $cw=true, $o=90) {
+ if ($this->rtl) {
+ $xc = $this->w - $xc;
+ }
+ if ($cw) {
+ $d = $b;
+ $b = $o - $a;
+ $a = $o - $d;
+ } else {
+ $b += $o;
+ $a += $o;
+ }
+ $a = ($a % 360) + 360;
+ $b = ($b % 360) + 360;
+ if ($a > $b) {
+ $b +=360;
+ }
+ $b = $b / 360 * 2 * M_PI;
+ $a = $a / 360 * 2 * M_PI;
+ $d = $b - $a;
+ if ($d == 0 ) {
+ $d = 2 * M_PI;
+ }
+ $k = $this->k;
+ $hp = $this->h;
+ if ($style=='F') {
+ $op = 'f';
+ } elseif ($style=='FD' or $style=='DF') {
+ $op = 'b';
+ } else {
+ $op = 's';
+ }
+ if (sin($d/2)) {
+ $MyArc = 4/3 * (1 - cos($d/2)) / sin($d/2) * $r;
+ }
+ //first put the center
+ $this->_out(sprintf('%.2F %.2F m', ($xc)*$k, ($hp-$yc)*$k));
+ //put the first point
+ $this->_out(sprintf('%.2F %.2F l', ($xc+$r*cos($a))*$k, (($hp-($yc-$r*sin($a)))*$k)));
+ //draw the arc
+ if ($d < (M_PI/2)) {
+ $this->_outarc($xc+$r*cos($a)+$MyArc*cos(M_PI/2+$a), $yc-$r*sin($a)-$MyArc*sin(M_PI/2+$a), $xc+$r*cos($b)+$MyArc*cos($b-M_PI/2), $yc-$r*sin($b)-$MyArc*sin($b-M_PI/2), $xc+$r*cos($b), $yc-$r*sin($b));
+ } else {
+ $b = $a + $d/4;
+ $MyArc = 4/3*(1-cos($d/8))/sin($d/8)*$r;
+ $this->_outarc($xc+$r*cos($a)+$MyArc*cos(M_PI/2+$a), $yc-$r*sin($a)-$MyArc*sin(M_PI/2+$a), $xc+$r*cos($b)+$MyArc*cos($b-M_PI/2), $yc-$r*sin($b)-$MyArc*sin($b-M_PI/2), $xc+$r*cos($b), $yc-$r*sin($b));
+ $a = $b;
+ $b = $a + $d/4;
+ $this->_outarc($xc+$r*cos($a)+$MyArc*cos(M_PI/2+$a), $yc-$r*sin($a)-$MyArc*sin(M_PI/2+$a), $xc+$r*cos($b)+$MyArc*cos($b-M_PI/2), $yc-$r*sin($b)-$MyArc*sin($b-M_PI/2), $xc+$r*cos($b), $yc-$r*sin($b));
+ $a = $b;
+ $b = $a + $d/4;
+ $this->_outarc($xc+$r*cos($a)+$MyArc*cos(M_PI/2+$a), $yc-$r*sin($a)-$MyArc*sin(M_PI/2+$a), $xc+$r*cos($b)+$MyArc*cos($b-M_PI/2), $yc-$r*sin($b)-$MyArc*sin($b-M_PI/2), $xc+$r*cos($b), $yc-$r*sin($b) );
+ $a = $b;
+ $b = $a + $d/4;
+ $this->_outarc($xc+$r*cos($a)+$MyArc*cos(M_PI/2+$a), $yc-$r*sin($a)-$MyArc*sin(M_PI/2+$a), $xc+$r*cos($b)+$MyArc*cos($b-M_PI/2), $yc-$r*sin($b)-$MyArc*sin($b-M_PI/2), $xc+$r*cos($b), $yc-$r*sin($b));
+ }
+ //terminate drawing
+ $this->_out($op);
+ }
+
+ /**
+ * Embed vector-based Adobe Illustrator (AI) or AI-compatible EPS files.
+ * Only vector drawing is supported, not text or bitmap.
+ * Although the script was successfully tested with various AI format versions, best results are probably achieved with files that were exported in the AI3 format (tested with Illustrator CS2, Freehand MX and Photoshop CS2).
+ * @param string $file Name of the file containing the image.
+ * @param float $x Abscissa of the upper-left corner.
+ * @param float $y Ordinate of the upper-left corner.
+ * @param float $w Width of the image in the page. If not specified or equal to zero, it is automatically calculated.
+ * @param float $h Height of the image in the page. If not specified or equal to zero, it is automatically calculated.
+ * @param mixed $link URL or identifier returned by AddLink().
+ * @param boolean useBoundingBox specifies whether to position the bounding box (true) or the complete canvas (false) at location (x,y). Default value is true.
+ * @param string $align Indicates the alignment of the pointer next to image insertion relative to image height. The value can be:<ul><li>T: top-right for LTR or top-left for RTL</li><li>M: middle-right for LTR or middle-left for RTL</li><li>B: bottom-right for LTR or bottom-left for RTL</li><li>N: next line</li></ul>
+ * @param string $palign Allows to center or align the image on the current line. Possible values are:<ul><li>L : left align</li><li>C : center</li><li>R : right align</li><li>'' : empty string : left for LTR or right for RTL</li></ul>
+ * @param mixed $border Indicates if borders must be drawn around the image. The value can be either a number:<ul><li>0: no border (default)</li><li>1: frame</li></ul>or a string containing some or all of the following characters (in any order):<ul><li>L: left</li><li>T: top</li><li>R: right</li><li>B: bottom</li></ul>
+ * @author Valentin Schmidt, Nicola Asuni
+ * @since 3.1.000 (2008-06-09)
+ * @access public
+ */
+ public function ImageEps($file, $x='', $y='', $w=0, $h=0, $link='', $useBoundingBox=true, $align='', $palign='', $border=0) {
+ if ($x === '') {
+ $x = $this->x;
+ }
+ if ($y === '') {
+ $y = $this->y;
+ }
+ $k = $this->k;
+ $data = file_get_contents($file);
+ if ($data === false) {
+ $this->Error('EPS file not found: '.$file);
+ }
+ $regs = array();
+ // EPS/AI compatibility check (only checks files created by Adobe Illustrator!)
+ preg_match("/%%Creator:([^\r\n]+)/", $data, $regs); # find Creator
+ if (count($regs) > 1) {
+ $version_str = trim($regs[1]); # e.g. "Adobe Illustrator(R) 8.0"
+ if (strpos($version_str, 'Adobe Illustrator') !== false) {
+ $versexp = explode(' ', $version_str);
+ $version = (float)array_pop($versexp);
+ if ($version >= 9) {
+ $this->Error('This version of Adobe Illustrator file is not supported: '.$file);
+ }
+ }
+ }
+ // strip binary bytes in front of PS-header
+ $start = strpos($data, '%!PS-Adobe');
+ if ($start > 0) {
+ $data = substr($data, $start);
+ }
+ // find BoundingBox params
+ preg_match("/%%BoundingBox:([^\r\n]+)/", $data, $regs);
+ if (count($regs) > 1) {
+ list($x1, $y1, $x2, $y2) = explode(' ', trim($regs[1]));
+ } else {
+ $this->Error('No BoundingBox found in EPS file: '.$file);
+ }
+ $start = strpos($data, '%%EndSetup');
+ if ($start === false) {
+ $start = strpos($data, '%%EndProlog');
+ }
+ if ($start === false) {
+ $start = strpos($data, '%%BoundingBox');
+ }
+ $data = substr($data, $start);
+ $end = strpos($data, '%%PageTrailer');
+ if ($end===false) {
+ $end = strpos($data, 'showpage');
+ }
+ if ($end) {
+ $data = substr($data, 0, $end);
+ }
+ if ($w > 0) {
+ $scale_x = $w / (($x2 - $x1) / $k);
+ if ($h > 0) {
+ $scale_y = $h / (($y2 - $y1) / $k);
+ } else {
+ $scale_y = $scale_x;
+ $h = ($y2 - $y1) / $k * $scale_y;
+ }
+ } else {
+ if ($h > 0) {
+ $scale_y = $h / (($y2 - $y1) / $k);
+ $scale_x = $scale_y;
+ $w = ($x2-$x1) / $k * $scale_x;
+ } else {
+ $w = ($x2 - $x1) / $k;
+ $h = ($y2 - $y1) / $k;
+ }
+ }
+ // Check whether we need a new page first as this does not fit
+ if ((($y + $h) > $this->PageBreakTrigger) AND (!$this->InFooter) AND $this->AcceptPageBreak()) {
+ // Automatic page break
+ $this->AddPage($this->CurOrientation);
+ // Reset Y coordinate to the top of next page
+ $y = $this->GetY() + $this->cMargin;
+ }
+ // set bottomcoordinates
+ $this->img_rb_y = $y + $h;
+ // set alignment
+ if ($this->rtl) {
+ if ($palign == 'L') {
+ $ximg = $this->lMargin;
+ // set right side coordinate
+ $this->img_rb_x = $ximg + $w;
+ } elseif ($palign == 'C') {
+ $ximg = ($this->w - $x - $w) / 2;
+ // set right side coordinate
+ $this->img_rb_x = $ximg + $w;
+ } else {
+ $ximg = $this->w - $x - $w;
+ // set left side coordinate
+ $this->img_rb_x = $ximg;
+ }
+ } else {
+ if ($palign == 'R') {
+ $ximg = $this->w - $this->rMargin - $w;
+ // set left side coordinate
+ $this->img_rb_x = $ximg;
+ } elseif ($palign == 'C') {
+ $ximg = ($this->w - $x - $w) / 2;
+ // set right side coordinate
+ $this->img_rb_x = $ximg + $w;
+ } else {
+ $ximg = $x;
+ // set right side coordinate
+ $this->img_rb_x = $ximg + $w;
+ }
+ }
+ if ($useBoundingBox) {
+ $dx = $ximg * $k - $x1;
+ $dy = $y * $k - $y1;
+ } else {
+ $dx = $ximg * $k;
+ $dy = $y * $k;
+ }
+ // save the current graphic state
+ $this->_out('q'.$this->epsmarker);
+ // translate
+ $this->_out(sprintf('%.3F %.3F %.3F %.3F %.3F %.3F cm', 1, 0, 0, 1, $dx, $dy + ($this->hPt - (2 * $y * $k) - ($y2 - $y1))));
+ // scale
+ if (isset($scale_x)) {
+ $this->_out(sprintf('%.3F %.3F %.3F %.3F %.3F %.3F cm', $scale_x, 0, 0, $scale_y, $x1 * (1 - $scale_x), $y2 * (1 - $scale_y)));
+ }
+ // handle pc/unix/mac line endings
+ preg_match('/[\r\n]+/s', $data, $regs);
+ $lines = explode($regs[0], $data);
+ $u=0;
+ $cnt = count($lines);
+ for ($i=0; $i < $cnt; ++$i) {
+ $line = $lines[$i];
+ if (($line == '') OR ($line{0} == '%')) {
+ continue;
+ }
+ $len = strlen($line);
+ $chunks = explode(' ', $line);
+ $cmd = array_pop($chunks);
+ // RGB
+ if (($cmd == 'Xa') OR ($cmd == 'XA')) {
+ $b = array_pop($chunks);
+ $g = array_pop($chunks);
+ $r = array_pop($chunks);
+ $this->_out(''.$r.' '.$g.' '.$b.' '.($cmd=='Xa'?'rg':'RG')); //substr($line, 0, -2).'rg' -> in EPS (AI8): c m y k r g b rg!
+ continue;
+ }
+ switch ($cmd) {
+ case 'm':
+ case 'l':
+ case 'v':
+ case 'y':
+ case 'c':
+ case 'k':
+ case 'K':
+ case 'g':
+ case 'G':
+ case 's':
+ case 'S':
+ case 'J':
+ case 'j':
+ case 'w':
+ case 'M':
+ case 'd':
+ case 'n':
+ case 'v': {
+ $this->_out($line);
+ break;
+ }
+ case 'x': {// custom fill color
+ list($c,$m,$y,$k) = $chunks;
+ $this->_out(''.$c.' '.$m.' '.$y.' '.$k.' k');
+ break;
+ }
+ case 'X': { // custom stroke color
+ list($c,$m,$y,$k) = $chunks;
+ $this->_out(''.$c.' '.$m.' '.$y.' '.$k.' K');
+ break;
+ }
+ case 'Y':
+ case 'N':
+ case 'V':
+ case 'L':
+ case 'C': {
+ $line{$len-1} = strtolower($cmd);
+ $this->_out($line);
+ break;
+ }
+ case 'b':
+ case 'B': {
+ $this->_out($cmd . '*');
+ break;
+ }
+ case 'f':
+ case 'F': {
+ if ($u > 0) {
+ $isU = false;
+ $max = min($i+5, $cnt);
+ for ($j=$i+1; $j < $max; ++$j)
+ $isU = ($isU OR (($lines[$j] == 'U') OR ($lines[$j] == '*U')));
+ if ($isU) {
+ $this->_out('f*');
+ }
+ } else {
+ $this->_out('f*');
+ }
+ break;
+ }
+ case '*u': {
+ ++$u;
+ break;
+ }
+ case '*U': {
+ --$u;
+ break;
+ }
+ }
+ }
+ // restore previous graphic state
+ $this->_out($this->epsmarker.'Q');
+ if (!empty($border)) {
+ $bx = $x;
+ $by = $y;
+ $this->x = $x;
+ $this->y = $y;
+ $this->Cell($w, $h, '', $border, 0, '', 0, '', 0);
+ $this->x = $bx;
+ $this->y = $by;
+ }
+ if ($link) {
+ $this->Link($ximg, $y, $w, $h, $link, 0);
+ }
+ // set pointer to align the successive text/objects
+ switch($align) {
+ case 'T':{
+ $this->y = $y;
+ $this->x = $this->img_rb_x;
+ break;
+ }
+ case 'M':{
+ $this->y = $y + round($h/2);
+ $this->x = $this->img_rb_x;
+ break;
+ }
+ case 'B':{
+ $this->y = $this->img_rb_y;
+ $this->x = $this->img_rb_x;
+ break;
+ }
+ case 'N':{
+ $this->SetY($this->img_rb_y);
+ break;
+ }
+ default:{
+ break;
+ }
+ }
+ $this->endlinex = $this->img_rb_x;
+ }
+
+ /**
+ * Set document barcode.
+ * @param string $bc barcode
+ * @access public
+ */
+ public function setBarcode($bc='') {
+ $this->barcode = $bc;
+ }
+
+ /**
+ * Get current barcode.
+ * @return string
+ * @access public
+ * @since 4.0.012 (2008-07-24)
+ */
+ public function getBarcode() {
+ return $this->barcode;
+ }
+
+ /**
+ * Print Barcode.
+ * @param string $code code to print
+ * @param string $type type of barcode.
+ * @param int $x x position in user units
+ * @param int $y y position in user units
+ * @param int $w width in user units
+ * @param int $h height position in user units
+ * @param float $xres width of the smallest bar in user units
+ * @param array $style array of options:<ul><li>string $style['position'] barcode position inside the specified width: L = left (default for LTR); C = center; R = right (default for RTL); S = stretch</li><li>boolean $style['border'] if true prints a border around the barcode</li><li>int $style['padding'] padding to leave around the barcode in user units</li><li>array $style['fgcolor'] color array for bars and text</li><li>mixed $style['bgcolor'] color array for background or false for transparent</li><li>boolean $style["text"] boolean if true prints text below the barcode</li><li>string $style['font'] font name for text</li><li>int $style['fontsize'] font size for text</li><li>int $style['stretchtext']: 0 = disabled; 1 = horizontal scaling only if necessary; 2 = forced horizontal scaling; 3 = character spacing only if necessary; 4 = forced character spacing</li></ul>
+ * @param string $align Indicates the alignment of the pointer next to image insertion relative to image height. The value can be:<ul><li>T: top-right for LTR or top-left for RTL</li><li>M: middle-right for LTR or middle-left for RTL</li><li>B: bottom-right for LTR or bottom-left for RTL</li><li>N: next line</li></ul>
+ * @author Nicola Asuni
+ * @since 3.1.000 (2008-06-09)
+ * @access public
+ */
+ public function write1DBarcode($code, $type, $x='', $y='', $w='', $h='', $xres=0.4, $style='', $align='') {
+ if (empty($code)) {
+ return;
+ }
+ require_once(dirname(__FILE__).'/barcodes.php');
+ // save current graphic settings
+ $gvars = $this->getGraphicVars();
+ // create new barcode object
+ $barcodeobj = new TCPDFbarcode($code, $type);
+ $arrcode = $barcodeobj->getBarcodeArray();
+ if ($arrcode === false) {
+ $this->Error('Error in barcode string');
+ }
+ // set default values
+ if (!isset($style['position'])) {
+ if ($this->rtl) {
+ $style['position'] = 'R';
+ } else {
+ $style['position'] = 'L';
+ }
+ }
+ if (!isset($style['padding'])) {
+ $style['padding'] = 0;
+ }
+ if (!isset($style['fgcolor'])) {
+ $style['fgcolor'] = array(0,0,0); // default black
+ }
+ if (!isset($style['bgcolor'])) {
+ $style['bgcolor'] = false; // default transparent
+ }
+ if (!isset($style['border'])) {
+ $style['border'] = false;
+ }
+ if (!isset($style['text'])) {
+ $style['text'] = false;
+ $fontsize = 0;
+ }
+ if ($style['text'] AND isset($style['font'])) {
+ if (isset($style['fontsize'])) {
+ $fontsize = $style['fontsize'];
+ } else {
+ $fontsize = 0;
+ }
+ $this->SetFont($style['font'], '', $fontsize);
+ }
+ if (!isset($style['stretchtext'])) {
+ $style['stretchtext'] = 4;
+ }
+ // set foreground color
+ $this->SetDrawColorArray($style['fgcolor']);
+ $this->SetTextColorArray($style['fgcolor']);
+ if (empty($w) OR ($w <= 0)) {
+ if ($this->rtl) {
+ $w = $this->x - $this->lMargin;
+ } else {
+ $w = $this->w - $this->rMargin - $this->x;
+ }
+ }
+ if (empty($x)) {
+ $x = $this->GetX();
+ }
+ if ($this->rtl) {
+ $x = $this->w - $x;
+ }
+ if (empty($y)) {
+ $y = $this->GetY();
+ }
+ if (empty($xres)) {
+ $xres = 0.4;
+ }
+ $fbw = ($arrcode['maxw'] * $xres) + (2 * $style['padding']);
+ $extraspace = ($this->cell_height_ratio * $fontsize / $this->k) + (2 * $style['padding']);
+ if (empty($h)) {
+ $h = 10 + $extraspace;
+ }
+ if ($this->checkPageBreak($h)) {
+ $y = $this->y;
+ }
+ // maximum bar heigth
+ $barh = $h - $extraspace;
+ switch ($style['position']) {
+ case 'L': { // left
+ if ($this->rtl) {
+ $xpos = $x - $w;
+ } else {
+ $xpos = $x;
+ }
+ break;
+ }
+ case 'C': { // center
+ $xdiff = (($w - $fbw) / 2);
+ if ($this->rtl) {
+ $xpos = $x - $w + $xdiff;
+ } else {
+ $xpos = $x + $xdiff;
+ }
+ break;
+ }
+ case 'R': { // right
+ if ($this->rtl) {
+ $xpos = $x - $fbw;
+ } else {
+ $xpos = $x + $w - $fbw;
+ }
+ break;
+ }
+ case 'S': { // stretch
+ $fbw = $w;
+ $xres = ($w - (2 * $style['padding'])) / $arrcode['maxw'];
+ if ($this->rtl) {
+ $xpos = $x - $w;
+ } else {
+ $xpos = $x;
+ }
+ break;
+ }
+ }
+ $xpos_rect = $xpos;
+ $xpos = $xpos_rect + $style['padding'];
+ $xpos_text = $xpos;
+ // barcode is always printed in LTR direction
+ $tempRTL = $this->rtl;
+ $this->rtl = false;
+ // print background color
+ if ($style['bgcolor']) {
+ $this->Rect($xpos_rect, $y, $fbw, $h, 'DF', '', $style['bgcolor']);
+ } elseif ($style['border']) {
+ $this->Rect($xpos_rect, $y, $fbw, $h, 'D');
+ }
+ // print bars
+ if ($arrcode !== false) {
+ foreach ($arrcode['bcode'] as $k => $v) {
+ $bw = ($v['w'] * $xres);
+ if ($v['t']) {
+ // braw a vertical bar
+ $ypos = $y + $style['padding'] + ($v['p'] * $barh / $arrcode['maxh']);
+ $this->Rect($xpos, $ypos, $bw, ($v['h'] * $barh / $arrcode['maxh']), 'DF', array('L'=>0, 'T'=>0, 'R'=>0, 'B'=>0), $style['fgcolor']);
+ }
+ $xpos += $bw;
+ }
+ }
+ // print text
+ if ($style['text']) {
+ // print text
+ $this->x = $xpos_text;
+ $this->y = $y + $style['padding'] + $barh;
+ $this->Cell(($arrcode['maxw'] * $xres), ($this->cell_height_ratio * $fontsize / $this->k), $code, 0, 0, 'C', 0, '', $style['stretchtext']);
+ }
+ // restore original direction
+ $this->rtl = $tempRTL;
+ // restore previous settings
+ $this->setGraphicVars($gvars);
+ // set bottomcoordinates
+ $this->img_rb_y = $y + $h;
+ if ($this->rtl) {
+ // set left side coordinate
+ $this->img_rb_x = ($this->w - $x - $w);
+ } else {
+ // set right side coordinate
+ $this->img_rb_x = $x + $w;
+ }
+ // set pointer to align the successive text/objects
+ switch($align) {
+ case 'T':{
+ $this->y = $y;
+ $this->x = $this->img_rb_x;
+ break;
+ }
+ case 'M':{
+ $this->y = $y + round($h/2);
+ $this->x = $this->img_rb_x;
+ break;
+ }
+ case 'B':{
+ $this->y = $this->img_rb_y;
+ $this->x = $this->img_rb_x;
+ break;
+ }
+ case 'N':{
+ $this->SetY($this->img_rb_y);
+ break;
+ }
+ default:{
+ break;
+ }
+ }
+ }
+
+ /**
+ * This function is DEPRECATED, please use the new write1DBarcode() function.
+ * @param int $x x position in user units
+ * @param int $y y position in user units
+ * @param int $w width in user units
+ * @param int $h height position in user units
+ * @param string $type type of barcode (I25, C128A, C128B, C128C, C39)
+ * @param string $style barcode style
+ * @param string $font font for text
+ * @param int $xres x resolution
+ * @param string $code code to print
+ * @deprecated deprecated since version 3.1.000 (2008-06-10)
+ * @access public
+ * @see write1DBarcode()
+ */
+ public function writeBarcode($x, $y, $w, $h, $type, $style, $font, $xres, $code) {
+ // convert old settings for the new write1DBarcode() function.
+ $xres = 1 / $xres;
+ $newstyle = array(
+ 'position' => 'L',
+ 'border' => false,
+ 'padding' => 0,
+ 'fgcolor' => array(0,0,0),
+ 'bgcolor' => false,
+ 'text' => true,
+ 'font' => $font,
+ 'fontsize' => 8,
+ 'stretchtext' => 4
+ );
+ if ($style & 1) {
+ $newstyle['border'] = true;
+ }
+ if ($style & 2) {
+ $newstyle['bgcolor'] = false;
+ }
+ if ($style & 4) {
+ $newstyle['position'] = 'C';
+ } elseif ($style & 8) {
+ $newstyle['position'] = 'L';
+ } elseif ($style & 16) {
+ $newstyle['position'] = 'R';
+ }
+ if ($style & 128) {
+ $newstyle['text'] = true;
+ }
+ if ($style & 256) {
+ $newstyle['stretchtext'] = 4;
+ }
+ $this->write1DBarcode($code, $type, $x, $y, $w, $h, $xres, $newstyle, '');
+ }
+
+ /**
+ * Returns an array containing current margins:
+ * <ul>
+ <li>$ret['left'] = left margin</li>
+ <li>$ret['right'] = right margin</li>
+ <li>$ret['top'] = top margin</li>
+ <li>$ret['bottom'] = bottom margin</li>
+ <li>$ret['header'] = header margin</li>
+ <li>$ret['footer'] = footer margin</li>
+ <li>$ret['cell'] = cell margin</li>
+ * </ul>
+ * @return array containing all margins measures
+ * @access public
+ * @since 3.2.000 (2008-06-23)
+ */
+ public function getMargins() {
+ $ret = array(
+ 'left' => $this->lMargin,
+ 'right' => $this->rMargin,
+ 'top' => $this->tMargin,
+ 'bottom' => $this->bMargin,
+ 'header' => $this->header_margin,
+ 'footer' => $this->footer_margin,
+ 'cell' => $this->cMargin,
+ );
+ return $ret;
+ }
+
+ /**
+ * Returns an array containing original margins:
+ * <ul>
+ <li>$ret['left'] = left margin</li>
+ <li>$ret['right'] = right margin</li>
+ * </ul>
+ * @return array containing all margins measures
+ * @access public
+ * @since 4.0.012 (2008-07-24)
+ */
+ public function getOriginalMargins() {
+ $ret = array(
+ 'left' => $this->original_lMargin,
+ 'right' => $this->original_rMargin
+ );
+ return $ret;
+ }
+
+ /**
+ * Returns the current font size.
+ * @return current font size
+ * @access public
+ * @since 3.2.000 (2008-06-23)
+ */
+ public function getFontSize() {
+ return $this->FontSize;
+ }
+
+ /**
+ * Returns the current font size in points unit.
+ * @return current font size in points unit
+ * @access public
+ * @since 3.2.000 (2008-06-23)
+ */
+ public function getFontSizePt() {
+ return $this->FontSizePt;
+ }
+
+ /**
+ * Returns the current font family name.
+ * @return string current font family name
+ * @access public
+ * @since 4.3.008 (2008-12-05)
+ */
+ public function getFontFamily() {
+ return $this->FontFamily;
+ }
+
+ /**
+ * Returns the current font style.
+ * @return string current font style
+ * @access public
+ * @since 4.3.008 (2008-12-05)
+ */
+ public function getFontStyle() {
+ return $this->FontStyle;
+ }
+
+ /**
+ * Prints a cell (rectangular area) with optional borders, background color and html text string.
+ * The upper-left corner of the cell corresponds to the current position. After the call, the current position moves to the right or to the next line.<br />
+ * If automatic page breaking is enabled and the cell goes beyond the limit, a page break is done before outputting.
+ * @param float $w Cell width. If 0, the cell extends up to the right margin.
+ * @param float $h Cell minimum height. The cell extends automatically if needed.
+ * @param float $x upper-left corner X coordinate
+ * @param float $y upper-left corner Y coordinate
+ * @param string $html html text to print. Default value: empty string.
+ * @param mixed $border Indicates if borders must be drawn around the cell. The value can be either a number:<ul><li>0: no border (default)</li><li>1: frame</li></ul>or a string containing some or all of the following characters (in any order):<ul><li>L: left</li><li>T: top</li><li>R: right</li><li>B: bottom</li></ul>
+ * @param int $ln Indicates where the current position should go after the call. Possible values are:<ul><li>0: to the right (or left for RTL language)</li><li>1: to the beginning of the next line</li><li>2: below</li></ul>
+ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0.
+ * @param int $fill Indicates if the cell background must be painted (1) or transparent (0). Default value: 0.
+ * @param boolean $reseth if true reset the last cell height (default true).
+ * @param string $align Allows to center or align the text. Possible values are:<ul><li>L : left align</li><li>C : center</li><li>R : right align</li><li>'' : empty string : left for LTR or right for RTL</li></ul>
+ * @param boolean $autopadding if true, uses internal padding and automatically adjust it to account for line width.
+ * @access public
+ * @uses MultiCell()
+ * @see Multicell(), writeHTML()
+ */
+ public function writeHTMLCell($w, $h, $x, $y, $html='', $border=0, $ln=0, $fill=0, $reseth=true, $align='', $autopadding=true) {
+ return $this->MultiCell($w, $h, $html, $border, $align, $fill, $ln, $x, $y, $reseth, 0, true, $autopadding, 0);
+ }
+
+ /**
+ * Returns the HTML DOM array.
+ * <ul><li>$dom[$key]['tag'] = true if tag, false otherwise;</li><li>$dom[$key]['value'] = tag name or text;</li><li>$dom[$key]['opening'] = true if opening tag, false otherwise;</li><li>$dom[$key]['attribute'] = array of attributes (attribute name is the key);</li><li>$dom[$key]['style'] = array of style attributes (attribute name is the key);</li><li>$dom[$key]['parent'] = id of parent element;</li><li>$dom[$key]['fontname'] = font family name;</li><li>$dom[$key]['fontstyle'] = font style;</li><li>$dom[$key]['fontsize'] = font size in points;</li><li>$dom[$key]['bgcolor'] = RGB array of background color;</li><li>$dom[$key]['fgcolor'] = RGB array of foreground color;</li><li>$dom[$key]['width'] = width in pixels;</li><li>$dom[$key]['height'] = height in pixels;</li><li>$dom[$key]['align'] = text alignment;</li><li>$dom[$key]['cols'] = number of colums in table;</li><li>$dom[$key]['rows'] = number of rows in table;</li></ul>
+ * @param string $html html code
+ * @return array
+ * @access protected
+ * @since 3.2.000 (2008-06-20)
+ */
+ protected function getHtmlDomArray($html) {
+ // remove all unsupported tags (the line below lists all supported tags)
+ $html = strip_tags($html, '<marker/><a><b><blockquote><br><br/><dd><del><div><dl><dt><em><font><h1><h2><h3><h4><h5><h6><hr><i><img><li><ol><p><pre><small><span><strong><sub><sup><table><td><th><thead><tr><tt><u><ul>');
+ //replace some blank characters
+ $html = preg_replace('@(\r\n|\r)@', "\n", $html);
+ $repTable = array("\t" => ' ', "\0" => ' ', "\x0B" => ' ', "\\" => "\\\\");
+ $html = strtr($html, $repTable);
+ while (preg_match("'<pre([^\>]*)>(.*?)\n(.*?)</pre>'si", $html)) {
+ // preserve newlines on <pre> tag
+ $html = preg_replace("'<pre([^\>]*)>(.*?)\n(.*?)</pre>'si", "<pre\\1>\\2<br />\\3</pre>", $html);
+ }
+ $html = str_replace("\n", ' ', $html);
+ /*
+ $html = preg_replace("'<div([^\>]*)>'si", "<br /><table><tr><td\\1>", $html);
+ $html = preg_replace("'</div>'si", "</td></tr></table>", $html);
+ $html = preg_replace("'<pre([^\>]*)>'si", "<table><tr><td\\1>", $html);
+ $html = preg_replace("'</pre>'si", "</td></tr></table>", $html);
+ */
+ // remove extra spaces from code
+ $html = preg_replace('/[\s]*<\/table>[\s]*/', '</table>', $html);
+ $html = preg_replace('/[\s]*<\/tr>[\s]*/', '</tr>', $html);
+ $html = preg_replace('/[\s]*<tr/', '<tr', $html);
+ $html = preg_replace('/[\s]*<\/th>[\s]*/', '</th>', $html);
+ $html = preg_replace('/[\s]*<th/', '<th', $html);
+ $html = preg_replace('/[\s]*<\/td>[\s]*/', '</td>', $html);
+ $html = preg_replace('/[\s]*<td/', '<td', $html);
+ $html = preg_replace('/<\/th>/', '<marker style="font-size:0"/></th>', $html);
+ $html = preg_replace('/<\/td>/', '<marker style="font-size:0"/></td>', $html);
+ $html = preg_replace('/<\/table>([\s]*)<marker style="font-size:0"\/>/', '</table>', $html);
+ $html = preg_replace('/<img/', ' <img', $html);
+ $html = preg_replace('/<img([^\>]*)>/xi', '<img\\1><span></span>', $html);
+ $html = preg_replace('/[\s]+<ul/', '<ul', $html);
+ $html = preg_replace('/[\s]+<ol/', '<ol', $html);
+ $html = preg_replace('/[\s]+<li/', '<li', $html);
+ $html = preg_replace('/[\s]*<\/li>[\s]*/', '</li>', $html);
+ $html = preg_replace('/[\s]*<\/ul>[\s]*/', '</ul>', $html);
+ $html = preg_replace('/[\s]*<\/ol>[\s]*/', '</ol>', $html);
+ $html = preg_replace('/[\s]+<br/', '<br', $html);
+ // pattern for generic tag
+ $tagpattern = '/(<[^>]+>)/';
+ // explodes the string
+ $a = preg_split($tagpattern, $html, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
+ // count elements
+ $maxel = count($a);
+ $elkey = 0;
+ $key = 0;
+ // create an array of elements
+ $dom = array();
+ $dom[$key] = array();
+ // set first void element
+ $dom[$key]['tag'] = false;
+ $dom[$key]['value'] = '';
+ $dom[$key]['parent'] = 0;
+ $dom[$key]['fontname'] = $this->FontFamily;
+ $dom[$key]['fontstyle'] = $this->FontStyle;
+ $dom[$key]['fontsize'] = $this->FontSizePt;
+ $dom[$key]['bgcolor'] = false;
+ $dom[$key]['fgcolor'] = $this->fgcolor;
+ $dom[$key]['align'] = '';
+ $dom[$key]['listtype'] = '';
+ $thead = false; // true when we are inside the THEAD tag
+ ++$key;
+ $level = array();
+ array_push($level, 0); // root
+ while ($elkey < $maxel) {
+ $dom[$key] = array();
+ $element = $a[$elkey];
+ $dom[$key]['elkey'] = $elkey;
+ if (preg_match($tagpattern, $element)) {
+ // html tag
+ $element = substr($element, 1, -1);
+ // get tag name
+ preg_match('/[\/]?([a-zA-Z0-9]*)/', $element, $tag);
+ $tagname = strtolower($tag[1]);
+ // check if we are inside a table header
+ if ($tagname == 'thead') {
+ if ($element{0} == '/') {
+ $thead = false;
+ } else {
+ $thead = true;
+ }
+ ++$elkey;
+ continue;
+ }
+ $dom[$key]['tag'] = true;
+ $dom[$key]['value'] = $tagname;
+ if ($element{0} == '/') {
+ // closing html tag
+ $dom[$key]['opening'] = false;
+ $dom[$key]['parent'] = end($level);
+ array_pop($level);
+ $dom[$key]['fontname'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['fontname'];
+ $dom[$key]['fontstyle'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['fontstyle'];
+ $dom[$key]['fontsize'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['fontsize'];
+ $dom[$key]['bgcolor'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['bgcolor'];
+ $dom[$key]['fgcolor'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['fgcolor'];
+ $dom[$key]['align'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['align'];
+ if (isset($dom[($dom[($dom[$key]['parent'])]['parent'])]['listtype'])) {
+ $dom[$key]['listtype'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['listtype'];
+ }
+ // set the number of columns in table tag
+ if (($dom[$key]['value'] == 'tr') AND (!isset($dom[($dom[($dom[$key]['parent'])]['parent'])]['cols']))) {
+ $dom[($dom[($dom[$key]['parent'])]['parent'])]['cols'] = $dom[($dom[$key]['parent'])]['cols'];
+ }
+ if (($dom[$key]['value'] == 'td') OR ($dom[$key]['value'] == 'th')) {
+ $dom[($dom[$key]['parent'])]['content'] = '';
+ for ($i = ($dom[$key]['parent'] + 1); $i < $key; ++$i) {
+ $dom[($dom[$key]['parent'])]['content'] .= $a[$dom[$i]['elkey']];
+ }
+ $key = $i;
+ }
+ // store header rows on a new table
+ if (($dom[$key]['value'] == 'tr') AND ($dom[($dom[$key]['parent'])]['thead'] == true)) {
+ if (empty($dom[($dom[($dom[$key]['parent'])]['parent'])]['thead'])) {
+ $dom[($dom[($dom[$key]['parent'])]['parent'])]['thead'] = $a[$dom[($dom[($dom[$key]['parent'])]['parent'])]['elkey']];
+ }
+ for ($i = $dom[$key]['parent']; $i <= $key; ++$i) {
+ $dom[($dom[($dom[$key]['parent'])]['parent'])]['thead'] .= $a[$dom[$i]['elkey']];
+ }
+ }
+ if (($dom[$key]['value'] == 'table') AND (!empty($dom[($dom[$key]['parent'])]['thead']))) {
+ $dom[($dom[$key]['parent'])]['thead'] .= '</table>';
+ }
+ } else {
+ // opening html tag
+ $dom[$key]['opening'] = true;
+ $dom[$key]['parent'] = end($level);
+ if (substr($element, -1, 1) != '/') {
+ // not self-closing tag
+ array_push($level, $key);
+ $dom[$key]['self'] = false;
+ } else {
+ $dom[$key]['self'] = true;
+ }
+ // copy some values from parent
+ $parentkey = 0;
+ if ($key > 0) {
+ $parentkey = $dom[$key]['parent'];
+ $dom[$key]['fontname'] = $dom[$parentkey]['fontname'];
+ $dom[$key]['fontstyle'] = $dom[$parentkey]['fontstyle'];
+ $dom[$key]['fontsize'] = $dom[$parentkey]['fontsize'];
+ $dom[$key]['bgcolor'] = $dom[$parentkey]['bgcolor'];
+ $dom[$key]['fgcolor'] = $dom[$parentkey]['fgcolor'];
+ $dom[$key]['align'] = $dom[$parentkey]['align'];
+ $dom[$key]['listtype'] = $dom[$parentkey]['listtype'];
+ }
+ // get attributes
+ preg_match_all('/([^=\s]*)=["\']?([^"\']*)["\']?/', $element, $attr_array, PREG_PATTERN_ORDER);
+ $dom[$key]['attribute'] = array(); // reset attribute array
+ while (list($id, $name) = each($attr_array[1])) {
+ $dom[$key]['attribute'][strtolower($name)] = $attr_array[2][$id];
+ }
+ // split style attributes
+ if (isset($dom[$key]['attribute']['style'])) {
+ // get style attributes
+ preg_match_all('/([^;:\s]*):([^;]*)/', $dom[$key]['attribute']['style'], $style_array, PREG_PATTERN_ORDER);
+ $dom[$key]['style'] = array(); // reset style attribute array
+ while (list($id, $name) = each($style_array[1])) {
+ $dom[$key]['style'][strtolower($name)] = trim($style_array[2][$id]);
+ }
+ // --- get some style attributes ---
+ if (isset($dom[$key]['style']['font-family'])) {
+ // font family
+ if (isset($dom[$key]['style']['font-family'])) {
+ $fontslist =explode(',', strtolower($dom[$key]['style']['font-family']));
+ foreach ($fontslist as $font) {
+ $font = trim(strtolower($font));
+ if (in_array($font, $this->fontlist) OR in_array($font, $this->fontkeys)) {
+ $dom[$key]['fontname'] = $font;
+ break;
+ }
+ }
+ }
+ }
+ // list-style-type
+ if (isset($dom[$key]['style']['list-style-type'])) {
+ $dom[$key]['listtype'] = trim(strtolower($dom[$key]['style']['list-style-type']));
+ if ($dom[$key]['listtype'] == 'inherit') {
+ $dom[$key]['listtype'] = $dom[$parentkey]['listtype'];
+ }
+ }
+ // font size
+ if (isset($dom[$key]['style']['font-size'])) {
+ $fsize = trim($dom[$key]['style']['font-size']);
+ switch ($fsize) {
+ // absolute-size
+ case 'xx-small': {
+ $dom[$key]['fontsize'] = $dom[0]['fontsize'] - 4;
+ break;
+ }
+ case 'x-small': {
+ $dom[$key]['fontsize'] = $dom[0]['fontsize'] - 3;
+ break;
+ }
+ case 'small': {
+ $dom[$key]['fontsize'] = $dom[0]['fontsize'] - 2;
+ break;
+ }
+ case 'medium': {
+ $dom[$key]['fontsize'] = $dom[0]['fontsize'];
+ break;
+ }
+ case 'large': {
+ $dom[$key]['fontsize'] = $dom[0]['fontsize'] + 2;
+ break;
+ }
+ case 'x-large': {
+ $dom[$key]['fontsize'] = $dom[0]['fontsize'] + 4;
+ break;
+ }
+ case 'xx-large': {
+ $dom[$key]['fontsize'] = $dom[0]['fontsize'] + 6;
+ break;
+ }
+ // relative-size
+ case 'smaller': {
+ $dom[$key]['fontsize'] = $dom[$parentkey]['fontsize'] - 3;
+ break;
+ }
+ case 'larger': {
+ $dom[$key]['fontsize'] = $dom[$parentkey]['fontsize'] + 3;
+ break;
+ }
+ default: {
+ $dom[$key]['fontsize'] = $this->getHTMLUnitToUnits($fsize, $dom[$parentkey]['fontsize'], 'pt', true);
+ }
+ }
+ }
+ // font style
+ if (isset($dom[$key]['style']['font-weight']) AND (strtolower($dom[$key]['style']['font-weight']{0}) == 'b')) {
+ $dom[$key]['fontstyle'] .= 'B';
+ }
+ if (isset($dom[$key]['style']['font-style']) AND (strtolower($dom[$key]['style']['font-style']{0}) == 'i')) {
+ $dom[$key]['fontstyle'] .= '"I';
+ }
+ // font color
+ if (isset($dom[$key]['style']['color']) AND (!empty($dom[$key]['style']['color']))) {
+ $dom[$key]['fgcolor'] = $this->convertHTMLColorToDec($dom[$key]['style']['color']);
+ }
+ // background color
+ if (isset($dom[$key]['style']['background-color']) AND (!empty($dom[$key]['style']['background-color']))) {
+ $dom[$key]['bgcolor'] = $this->convertHTMLColorToDec($dom[$key]['style']['background-color']);
+ }
+ // text-decoration
+ if (isset($dom[$key]['style']['text-decoration'])) {
+ $decors = explode(' ', strtolower($dom[$key]['style']['text-decoration']));
+ foreach ($decors as $dec) {
+ $dec = trim($dec);
+ if (!empty($dec)) {
+ if ($dec{0} == 'u') {
+ $dom[$key]['fontstyle'] .= 'U';
+ } elseif ($dec{0} == 'l') {
+ $dom[$key]['fontstyle'] .= 'D';
+ }
+ }
+ }
+ }
+ // check for width attribute
+ if (isset($dom[$key]['style']['width'])) {
+ $dom[$key]['width'] = $dom[$key]['style']['width'];
+ }
+ // check for height attribute
+ if (isset($dom[$key]['style']['height'])) {
+ $dom[$key]['height'] = $dom[$key]['style']['height'];
+ }
+ // check for text alignment
+ if (isset($dom[$key]['style']['text-align'])) {
+ $dom[$key]['align'] = strtoupper($dom[$key]['style']['text-align']{0});
+ }
+ // check for border attribute
+ if (isset($dom[$key]['style']['border'])) {
+ $dom[$key]['attribute']['border'] = $dom[$key]['style']['border'];
+ }
+ }
+ // check for font tag
+ if ($dom[$key]['value'] == 'font') {
+ // font family
+ if (isset($dom[$key]['attribute']['face'])) {
+ $fontslist = explode(',', strtolower($dom[$key]['attribute']['face']));
+ foreach ($fontslist as $font) {
+ $font = trim(strtolower($font));
+ if (in_array($font, $this->fontlist) OR in_array($font, $this->fontkeys)) {
+ $dom[$key]['fontname'] = $font;
+ break;
+ }
+ }
+ }
+ // font size
+ if (isset($dom[$key]['attribute']['size'])) {
+ if ($key > 0) {
+ if ($dom[$key]['attribute']['size']{0} == '+') {
+ $dom[$key]['fontsize'] = $dom[($dom[$key]['parent'])]['fontsize'] + intval(substr($dom[$key]['attribute']['size'], 1));
+ } elseif ($dom[$key]['attribute']['size']{0} == '-') {
+ $dom[$key]['fontsize'] = $dom[($dom[$key]['parent'])]['fontsize'] - intval(substr($dom[$key]['attribute']['size'], 1));
+ } else {
+ $dom[$key]['fontsize'] = intval($dom[$key]['attribute']['size']);
+ }
+ } else {
+ $dom[$key]['fontsize'] = intval($dom[$key]['attribute']['size']);
+ }
+ }
+ }
+ // force natural alignment for lists
+ if ((($dom[$key]['value'] == 'ul') OR ($dom[$key]['value'] == 'ol') OR ($dom[$key]['value'] == 'dl'))
+ AND (!isset($dom[$key]['align']) OR empty($dom[$key]['align']) OR ($dom[$key]['align'] != 'J'))) {
+ if ($this->rtl) {
+ $dom[$key]['align'] = 'R';
+ } else {
+ $dom[$key]['align'] = 'L';
+ }
+ }
+ if (($dom[$key]['value'] == 'small') OR ($dom[$key]['value'] == 'sup') OR ($dom[$key]['value'] == 'sub')) {
+ $dom[$key]['fontsize'] = $dom[$key]['fontsize'] * K_SMALL_RATIO;
+ }
+ if (($dom[$key]['value'] == 'strong') OR ($dom[$key]['value'] == 'b')) {
+ $dom[$key]['fontstyle'] .= 'B';
+ }
+ if (($dom[$key]['value'] == 'em') OR ($dom[$key]['value'] == 'i')) {
+ $dom[$key]['fontstyle'] .= 'I';
+ }
+ if ($dom[$key]['value'] == 'u') {
+ $dom[$key]['fontstyle'] .= 'U';
+ }
+ if ($dom[$key]['value'] == 'del') {
+ $dom[$key]['fontstyle'] .= 'D';
+ }
+ if (($dom[$key]['value'] == 'pre') OR ($dom[$key]['value'] == 'tt')) {
+ $dom[$key]['fontname'] = $this->default_monospaced_font;
+ }
+ if (($dom[$key]['value']{0} == 'h') AND (intval($dom[$key]['value']{1}) > 0) AND (intval($dom[$key]['value']{1}) < 7)) {
+ $headsize = (4 - intval($dom[$key]['value']{1})) * 2;
+ $dom[$key]['fontsize'] = $dom[0]['fontsize'] + $headsize;
+ $dom[$key]['fontstyle'] .= 'B';
+ }
+ if (($dom[$key]['value'] == 'table')) {
+ $dom[$key]['rows'] = 0; // number of rows
+ $dom[$key]['trids'] = array(); // IDs of TR elements
+ $dom[$key]['thead'] = ''; // table header rows
+ }
+ if (($dom[$key]['value'] == 'tr')) {
+ $dom[$key]['cols'] = 0;
+ // store the number of rows on table element
+ ++$dom[($dom[$key]['parent'])]['rows'];
+ // store the TR elements IDs on table element
+ array_push($dom[($dom[$key]['parent'])]['trids'], $key);
+ if ($thead) {
+ $dom[$key]['thead'] = true;
+ } else {
+ $dom[$key]['thead'] = false;
+ }
+ }
+ if (($dom[$key]['value'] == 'th') OR ($dom[$key]['value'] == 'td')) {
+ if (isset($dom[$key]['attribute']['colspan'])) {
+ $colspan = intval($dom[$key]['attribute']['colspan']);
+ } else {
+ $colspan = 1;
+ }
+ $dom[$key]['attribute']['colspan'] = $colspan;
+ $dom[($dom[$key]['parent'])]['cols'] += $colspan;
+ }
+ // set foreground color attribute
+ if (isset($dom[$key]['attribute']['color']) AND (!empty($dom[$key]['attribute']['color']))) {
+ $dom[$key]['fgcolor'] = $this->convertHTMLColorToDec($dom[$key]['attribute']['color']);
+ }
+ // set background color attribute
+ if (isset($dom[$key]['attribute']['bgcolor']) AND (!empty($dom[$key]['attribute']['bgcolor']))) {
+ $dom[$key]['bgcolor'] = $this->convertHTMLColorToDec($dom[$key]['attribute']['bgcolor']);
+ }
+ // check for width attribute
+ if (isset($dom[$key]['attribute']['width'])) {
+ $dom[$key]['width'] = $dom[$key]['attribute']['width'];
+ }
+ // check for height attribute
+ if (isset($dom[$key]['attribute']['height'])) {
+ $dom[$key]['height'] = $dom[$key]['attribute']['height'];
+ }
+ // check for text alignment
+ if (isset($dom[$key]['attribute']['align']) AND (!empty($dom[$key]['attribute']['align'])) AND ($dom[$key]['value'] !== 'img')) {
+ $dom[$key]['align'] = strtoupper($dom[$key]['attribute']['align']{0});
+ }
+ } // end opening tag
+ } else {
+ // text
+ $dom[$key]['tag'] = false;
+ $dom[$key]['value'] = stripslashes($this->unhtmlentities($element));
+ $dom[$key]['parent'] = end($level);
+ }
+ ++$elkey;
+ ++$key;
+ }
+ return $dom;
+ }
+
+ /**
+ * Allows to preserve some HTML formatting (limited support).<br />
+ * IMPORTANT: The HTML must be well formatted - try to clean-up it using an application like HTML-Tidy before submitting.
+ * Supported tags are: a, b, blockquote, br, dd, del, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, img, li, ol, p, small, span, strong, sub, sup, table, td, th, tr, u, ul,
+ * @param string $html text to display
+ * @param boolean $ln if true add a new line after text (default = true)
+ * @param int $fill Indicates if the background must be painted (true) or transparent (false).
+ * @param boolean $reseth if true reset the last cell height (default false).
+ * @param boolean $cell if true add the default cMargin space to each Write (default false).
+ * @param string $align Allows to center or align the text. Possible values are:<ul><li>L : left align</li><li>C : center</li><li>R : right align</li><li>'' : empty string : left for LTR or right for RTL</li></ul>
+ * @access public
+ */
+ public function writeHTML($html, $ln=true, $fill=false, $reseth=false, $cell=false, $align='') {
+ $gvars = $this->getGraphicVars();
+ // store current values
+ $prevPage = $this->page;
+ $prevlMargin = $this->lMargin;
+ $prevrMargin = $this->rMargin;
+ $curfontname = $this->FontFamily;
+ $curfontstyle = $this->FontStyle;
+ $curfontsize = $this->FontSizePt;
+ $this->newline = true;
+ $minstartliney = $this->y;
+ $yshift = 0;
+ $startlinepage = $this->page;
+ $newline = true;
+ $loop = 0;
+ $curpos = 0;
+ $blocktags = array('blockquote','br','dd','div','dt','h1','h2','h3','h4','h5','h6','hr','li','ol','p','ul');
+ $this->premode = false;
+ if (isset($this->PageAnnots[$this->page])) {
+ $pask = count($this->PageAnnots[$this->page]);
+ } else {
+ $pask = 0;
+ }
+ if (isset($this->footerlen[$this->page])) {
+ $this->footerpos[$this->page] = $this->pagelen[$this->page] - $this->footerlen[$this->page];
+ } else {
+ $this->footerpos[$this->page] = $this->pagelen[$this->page];
+ }
+ $startlinepos = $this->footerpos[$this->page];
+ $lalign = $align;
+ $plalign = $align;
+ if ($this->rtl) {
+ $w = $this->x - $this->lMargin;
+ } else {
+ $w = $this->w - $this->rMargin - $this->x;
+ }
+ $w -= (2 * $this->cMargin);
+ if ($cell) {
+ if ($this->rtl) {
+ $this->x -= $this->cMargin;
+ } else {
+ $this->x += $this->cMargin;
+ }
+ }
+ if ($this->customlistindent >= 0) {
+ $this->listindent = $this->customlistindent;
+ } else {
+ $this->listindent = $this->GetStringWidth('0000');
+ }
+ $this->listnum = 0;
+ if ((empty($this->lasth))OR ($reseth)) {
+ //set row height
+ $this->lasth = $this->FontSize * $this->cell_height_ratio;
+ }
+ $dom = $this->getHtmlDomArray($html);
+ $maxel = count($dom);
+ $key = 0;
+ while ($key < $maxel) {
+ if ($dom[$key]['tag'] OR ($key == 0)) {
+ if ((($dom[$key]['value'] == 'table') OR ($dom[$key]['value'] == 'tr')) AND (isset($dom[$key]['align']))) {
+ $dom[$key]['align'] = ($this->rtl) ? 'R' : 'L';
+ }
+ // vertically align image in line
+ if ((!$this->newline)
+ AND ($dom[$key]['value'] == 'img')
+ AND (isset($dom[$key]['attribute']['height']))
+ AND ($dom[$key]['attribute']['height'] > 0)
+ AND (!((($this->y + $this->getHTMLUnitToUnits($dom[$key]['attribute']['height'], $this->lasth, 'px')) > $this->PageBreakTrigger)
+ AND (!$this->InFooter)
+ AND $this->AcceptPageBreak()))
+ ) {
+ if ($this->page > $startlinepage) {
+ // fix lines splitted over two pages
+ if (isset($this->footerlen[$startlinepage])) {
+ $curpos = $this->pagelen[$startlinepage] - $this->footerlen[$startlinepage];
+ }
+ // line to be moved one page forward
+ $linebeg = substr($this->getPageBuffer($startlinepage), $startlinepos, ($curpos - $startlinepos));
+ $tstart = substr($this->getPageBuffer($startlinepage), 0, $startlinepos);
+ $tend = substr($this->getPageBuffer($startlinepage), $curpos);
+ // remove line start from previous page
+ $this->setPageBuffer($startlinepage, $tstart.''.$tend);
+ $tstart = substr($this->getPageBuffer($this->page), 0, $this->intmrk[$this->page]);
+ $tend = substr($this->getPageBuffer($this->page), $this->intmrk[$this->page]);
+ // add line start to current page
+ $yshift = $minstartliney - $this->y;
+ $try = sprintf('1 0 0 1 0 %.3F cm', ($yshift * $this->k));
+ $this->setPageBuffer($this->page, $tstart."\nq\n".$try."\n".$linebeg."\nQ\n".$tend);
+ // shift the annotations and links
+ if (isset($this->PageAnnots[$startlinepage])) {
+ foreach ($this->PageAnnots[$startlinepage] as $pak => $pac) {
+ if ($pak >= $pask) {
+ $this->PageAnnots[$this->page][] = $pac;
+ unset($this->PageAnnots[$startlinepage][$pak]);
+ $npak = count($this->PageAnnots[$this->page]) - 1;
+ $this->PageAnnots[$this->page][$npak]['y'] -= $yshift;
+ }
+ }
+ }
+ }
+ $this->y += (($curfontsize / $this->k) - $this->getHTMLUnitToUnits($dom[$key]['attribute']['height'], $this->lasth, 'px'));
+ $minstartliney = min($this->y, $minstartliney);
+ } elseif (isset($dom[$key]['fontname']) OR isset($dom[$key]['fontstyle']) OR isset($dom[$key]['fontsize'])) {
+ // account for different font size
+ $pfontname = $curfontname;
+ $pfontstyle = $curfontstyle;
+ $pfontsize = $curfontsize;
+ $fontname = isset($dom[$key]['fontname']) ? $dom[$key]['fontname'] : $curfontname;
+ $fontstyle = isset($dom[$key]['fontstyle']) ? $dom[$key]['fontstyle'] : $curfontstyle;
+ $fontsize = isset($dom[$key]['fontsize']) ? $dom[$key]['fontsize'] : $curfontsize;
+ if (($fontname != $curfontname) OR ($fontstyle != $curfontstyle) OR ($fontsize != $curfontsize)) {
+ $this->SetFont($fontname, $fontstyle, $fontsize);
+ $this->lasth = $this->FontSize * $this->cell_height_ratio;
+ if (is_numeric($fontsize) AND ($fontsize > 0)
+ AND is_numeric($curfontsize) AND ($curfontsize > 0)
+ AND ($fontsize != $curfontsize) AND (!$this->newline)
+ AND ($key < ($maxel - 1))
+ ) {
+ if ((!$this->newline) AND ($this->page > $startlinepage)) {
+ // fix lines splitted over two pages
+ if (isset($this->footerlen[$startlinepage])) {
+ $curpos = $this->pagelen[$startlinepage] - $this->footerlen[$startlinepage];
+ }
+ // line to be moved one page forward
+ $linebeg = substr($this->getPageBuffer($startlinepage), $startlinepos, ($curpos - $startlinepos));
+ $tstart = substr($this->getPageBuffer($startlinepage), 0, $startlinepos);
+ $tend = substr($this->getPageBuffer($startlinepage), $curpos);
+ // remove line start from previous page
+ $this->setPageBuffer($startlinepage, $tstart.''.$tend);
+ $tstart = substr($this->getPageBuffer($this->page), 0, $this->intmrk[$this->page]);
+ $tend = substr($this->getPageBuffer($this->page), $this->intmrk[$this->page]);
+ // add line start to current page
+ $yshift = $minstartliney - $this->y;
+ $try = sprintf('1 0 0 1 0 %.3F cm', ($yshift * $this->k));
+ $this->setPageBuffer($this->page, $tstart."\nq\n".$try."\n".$linebeg."\nQ\n".$tend);
+ // shift the annotations and links
+ if (isset($this->PageAnnots[$startlinepage])) {
+ foreach ($this->PageAnnots[$startlinepage] as $pak => $pac) {
+ if ($pak >= $pask) {
+ $this->PageAnnots[$this->page][] = $pac;
+ unset($this->PageAnnots[$startlinepage][$pak]);
+ $npak = count($this->PageAnnots[$this->page]) - 1;
+ $this->PageAnnots[$this->page][$npak]['y'] -= $yshift;
+ }
+ }
+ }
+ }
+ $this->y += (($curfontsize - $fontsize) / $this->k);
+ $minstartliney = min($this->y, $minstartliney);
+ }
+ $curfontname = $fontname;
+ $curfontstyle = $fontstyle;
+ $curfontsize = $fontsize;
+ }
+ }
+ if (($plalign == 'J') AND (in_array($dom[$key]['value'], $blocktags))) {
+ $plalign = '';
+ }
+ // get current position on page buffer
+ $curpos = $this->pagelen[$startlinepage];
+ if (isset($dom[$key]['bgcolor']) AND ($dom[$key]['bgcolor'] !== false)) {
+ $this->SetFillColorArray($dom[$key]['bgcolor']);
+ $wfill = true;
+ } else {
+ $wfill = $fill | false;
+ }
+ if (isset($dom[$key]['fgcolor']) AND ($dom[$key]['fgcolor'] !== false)) {
+ $this->SetTextColorArray($dom[$key]['fgcolor']);
+ }
+ if (isset($dom[$key]['align'])) {
+ $lalign = $dom[$key]['align'];
+ }
+ if (empty($lalign)) {
+ $lalign = $align;
+ }
+ }
+ // align lines
+ if ($this->newline AND (strlen($dom[$key]['value']) > 0) AND ($dom[$key]['value'] != 'td') AND ($dom[$key]['value'] != 'th')) {
+ $newline = true;
+ // we are at the beginning of a new line
+ if (isset($startlinex)) {
+ $yshift = $minstartliney - $startliney;
+ if (($yshift > 0) OR ($this->page > $startlinepage)) {
+ $yshift = 0;
+ }
+ if ((isset($plalign) AND ((($plalign == 'C') OR ($plalign == 'J') OR (($plalign == 'R') AND (!$this->rtl)) OR (($plalign == 'L') AND ($this->rtl))))) OR ($yshift < 0)) {
+ // the last line must be shifted to be aligned as requested
+ $linew = abs($this->endlinex - $startlinex);
+ $pstart = substr($this->getPageBuffer($startlinepage), 0, $startlinepos);
+ if (isset($opentagpos) AND isset($this->footerlen[$startlinepage])) {
+ $this->footerpos[$startlinepage] = $this->pagelen[$startlinepage] - $this->footerlen[$startlinepage];
+ $midpos = min($opentagpos, $this->footerpos[$startlinepage]);
+ } elseif (isset($opentagpos)) {
+ $midpos = $opentagpos;
+ } elseif (isset($this->footerlen[$startlinepage])) {
+ $this->footerpos[$startlinepage] = $this->pagelen[$startlinepage] - $this->footerlen[$startlinepage];
+ $midpos = $this->footerpos[$startlinepage];
+ } else {
+ $midpos = 0;
+ }
+ if ($midpos > 0) {
+ $pmid = substr($this->getPageBuffer($startlinepage), $startlinepos, ($midpos - $startlinepos));
+ $pend = substr($this->getPageBuffer($startlinepage), $midpos);
+ } else {
+ $pmid = substr($this->getPageBuffer($startlinepage), $startlinepos);
+ $pend = '';
+ }
+ // calculate shifting amount
+ $tw = $w;
+ if ($this->lMargin != $prevlMargin) {
+ $tw += ($prevlMargin - $this->lMargin);
+ }
+ if ($this->rMargin != $prevrMargin) {
+ $tw += ($prevrMargin - $this->rMargin);
+ }
+ $mdiff = abs($tw - $linew);
+ $t_x = 0;
+ if ($plalign == 'C') {
+ if ($this->rtl) {
+ $t_x = -($mdiff / 2);
+ } else {
+ $t_x = ($mdiff / 2);
+ }
+ } elseif (($plalign == 'R') AND (!$this->rtl)) {
+ // right alignment on LTR document
+ $t_x = $mdiff;
+ } elseif (($plalign == 'L') AND ($this->rtl)) {
+ // left alignment on RTL document
+ $t_x = -$mdiff;
+ } elseif (($plalign == 'J') AND ($plalign == $lalign)) {
+ // Justification
+ if ($this->rtl OR $this->tmprtl) {
+ $t_x = $this->lMargin - $this->endlinex;
+ }
+ $no = 0;
+ $ns = 0;
+
+ $pmidtemp = $pmid;
+ // escape special characters
+ $pmidtemp = preg_replace('/[\\\][\(]/x', '\\#!#OP#!#', $pmidtemp);
+ $pmidtemp = preg_replace('/[\\\][\)]/x', '\\#!#CP#!#', $pmidtemp);
+ // search spaces
+ if (preg_match_all('/\[\(([^\)]*)\)\]/x', $pmidtemp, $lnstring, PREG_PATTERN_ORDER)) {
+ $maxkk = count($lnstring[1]) - 1;
+ //foreach ($lnstring[1] as $kk => $value) {
+ for ($kk=0; $kk <= $maxkk; ++$kk) {
+ // restore special characters
+ $lnstring[1][$kk] = str_replace('#!#OP#!#', '(', $lnstring[1][$kk]);
+ $lnstring[1][$kk] = str_replace('#!#CP#!#', ')', $lnstring[1][$kk]);
+ if ($kk == $maxkk) {
+ if ($this->rtl OR $this->tmprtl) {
+ $tvalue = ltrim($lnstring[1][$kk]);
+ } else {
+ $tvalue = rtrim($lnstring[1][$kk]);
+ }
+ } else {
+ $tvalue = $lnstring[1][$kk];
+ }
+ // count spaces on line
+ $no += substr_count($lnstring[1][$kk], chr(32));
+ $ns += substr_count($tvalue, chr(32));
+ }
+ if ($this->rtl OR $this->tmprtl) {
+ $t_x = $this->lMargin - $this->endlinex - (($no - $ns - 1) * $this->GetStringWidth(chr(32)));
+ }
+ // calculate additional space to add to each space
+ $spacewidth = (($tw - $linew + (($no - $ns) * $this->GetStringWidth(chr(32)))) / ($ns?$ns:1)) * $this->k;
+ $spacewidthu = ($tw - $linew + ($no * $this->GetStringWidth(chr(32)))) / ($ns?$ns:1) / $this->FontSize / $this->k;
+ $nsmax = $ns;
+ $ns = 0;
+ reset($lnstring);
+ $offset = 0;
+ $strcount = 0;
+ $prev_epsposbeg = 0;
+ global $spacew;
+ while (preg_match('/([0-9\.\+\-]*)[\s](Td|cm|m|l|c|re)[\s]/x', $pmid, $strpiece, PREG_OFFSET_CAPTURE, $offset) == 1) {
+ if ($this->rtl OR $this->tmprtl) {
+ $spacew = ($spacewidth * ($nsmax - $ns));
+ } else {
+ $spacew = ($spacewidth * $ns);
+ }
+ $offset = $strpiece[2][1] + strlen($strpiece[2][0]);
+ $epsposbeg = strpos($pmid, 'q'.$this->epsmarker, $offset);
+ $epsposend = strpos($pmid, $this->epsmarker.'Q', $offset) + strlen($this->epsmarker.'Q');
+ if ((($epsposbeg > 0) AND ($epsposend > 0) AND ($offset > $epsposbeg) AND ($offset < $epsposend))
+ OR (($epsposbeg === false) AND ($epsposend > 0) AND ($offset < $epsposend))) {
+ // shift EPS images
+ $trx = sprintf('1 0 0 1 %.3F 0 cm', $spacew);
+ $epsposbeg = strpos($pmid, 'q'.$this->epsmarker, ($prev_epsposbeg - 6));
+ $pmid_b = substr($pmid, 0, $epsposbeg);
+ $pmid_m = substr($pmid, $epsposbeg, ($epsposend - $epsposbeg));
+ $pmid_e = substr($pmid, $epsposend);
+ $pmid = $pmid_b."\nq\n".$trx."\n".$pmid_m."\nQ\n".$pmid_e;
+ $offset = $epsposend;
+ continue;
+ }
+ $prev_epsposbeg = $epsposbeg;
+ $currentxpos = 0;
+ // shift blocks of code
+ switch ($strpiece[2][0]) {
+ case 'Td':
+ case 'cm':
+ case 'm':
+ case 'l': {
+ // get current X position
+ preg_match('/([0-9\.\+\-]*)[\s]('.$strpiece[1][0].')[\s]('.$strpiece[2][0].')([\s]*)/x', $pmid, $xmatches);
+ $currentxpos = $xmatches[1];
+ if (($strcount <= $maxkk) AND ($strpiece[2][0] == 'Td')) {
+ if ($strcount == $maxkk) {
+ if ($this->rtl OR $this->tmprtl) {
+ $tvalue = $lnstring[1][$strcount];
+ } else {
+ $tvalue = rtrim($lnstring[1][$strcount]);
+ }
+ } else {
+ $tvalue = $lnstring[1][$strcount];
+ }
+ $ns += substr_count($tvalue, chr(32));
+ ++$strcount;
+ }
+ if ($this->rtl OR $this->tmprtl) {
+ $spacew = ($spacewidth * ($nsmax - $ns));
+ }
+ // justify block
+ $pmid = preg_replace_callback('/([0-9\.\+\-]*)[\s]('.$strpiece[1][0].')[\s]('.$strpiece[2][0].')([\s]*)/x',
+ create_function('$matches', 'global $spacew;
+ $newx = sprintf("%.2F",(floatval($matches[1]) + $spacew));
+ return "".$newx." ".$matches[2]." x*#!#*x".$matches[3].$matches[4];'), $pmid, 1);
+ break;
+ }
+ case 're': {
+ // get current X position
+ preg_match('/([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]('.$strpiece[1][0].')[\s]('.$strpiece[2][0].')([\s]*)/x', $pmid, $xmatches);
+ $currentxpos = $xmatches[1];
+ // justify block
+ $pmid = preg_replace_callback('/([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]('.$strpiece[1][0].')[\s]('.$strpiece[2][0].')([\s]*)/x',
+ create_function('$matches', 'global $spacew;
+ $newx = sprintf("%.2F",(floatval($matches[1]) + $spacew));
+ return "".$newx." ".$matches[2]." ".$matches[3]." ".$matches[4]." x*#!#*x".$matches[5].$matches[6];'), $pmid, 1);
+ break;
+ }
+ case 'c': {
+ // get current X position
+ preg_match('/([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]('.$strpiece[1][0].')[\s]('.$strpiece[2][0].')([\s]*)/x', $pmid, $xmatches);
+ $currentxpos = $xmatches[1];
+ // justify block
+ $pmid = preg_replace_callback('/([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]('.$strpiece[1][0].')[\s]('.$strpiece[2][0].')([\s]*)/x',
+ create_function('$matches', 'global $spacew;
+ $newx1 = sprintf("%.3F",(floatval($matches[1]) + $spacew));
+ $newx2 = sprintf("%.3F",(floatval($matches[3]) + $spacew));
+ $newx3 = sprintf("%.3F",(floatval($matches[5]) + $spacew));
+ return "".$newx1." ".$matches[2]." ".$newx2." ".$matches[4]." ".$newx3." ".$matches[6]." x*#!#*x".$matches[7].$matches[8];'), $pmid, 1);
+ break;
+ }
+ }
+ // shift the annotations and links
+ if (isset($this->PageAnnots[$this->page])) {
+ foreach ($this->PageAnnots[$this->page] as $pak => $pac) {
+ if (($pac['y'] >= $minstartliney) AND (($pac['x'] * $this->k) >= ($currentxpos - $this->feps)) AND (($pac['x'] * $this->k) <= ($currentxpos + $this->feps))) {
+ $this->PageAnnots[$this->page][$pak]['x'] += ($spacew / $this->k);
+ $this->PageAnnots[$this->page][$pak]['w'] += (($spacewidth * $pac['numspaces']) / $this->k);
+ break;
+ }
+ }
+ }
+ } // end of while
+ // remove markers
+ $pmid = str_replace('x*#!#*x', '', $pmid);
+ if (($this->CurrentFont['type'] == 'TrueTypeUnicode') OR ($this->CurrentFont['type'] == 'cidfont0')) {
+ // multibyte characters
+ $spacew = $spacewidthu;
+ $pmidtemp = $pmid;
+ // escape special characters
+ $pmidtemp = preg_replace('/[\\\][\(]/x', '\\#!#OP#!#', $pmidtemp);
+ $pmidtemp = preg_replace('/[\\\][\)]/x', '\\#!#CP#!#', $pmidtemp);
+ $pmid = preg_replace_callback("/\[\(([^\)]*)\)\]/x",
+ create_function('$matches', 'global $spacew;
+ $matches[1] = str_replace("#!#OP#!#", "(", $matches[1]);
+ $matches[1] = str_replace("#!#CP#!#", ")", $matches[1]);
+ return "[(".str_replace(chr(0).chr(32), ") ".(-2830 * $spacew)." (", $matches[1]).")]";'), $pmidtemp);
+ $this->setPageBuffer($startlinepage, $pstart."\n".$pmid."\n".$pend);
+ $endlinepos = strlen($pstart."\n".$pmid."\n");
+ } else {
+ // non-unicode (single-byte characters)
+ $rs = sprintf("%.3F Tw", $spacewidth);
+ $pmid = preg_replace("/\[\(/x", $rs.' [(', $pmid);
+ $this->setPageBuffer($startlinepage, $pstart."\n".$pmid."\nBT 0 Tw ET\n".$pend);
+ $endlinepos = strlen($pstart."\n".$pmid."\nBT 0 Tw ET\n");
+ }
+ }
+ } // end of J
+ if (($t_x != 0) OR ($yshift < 0)) {
+ // shift the line
+ $trx = sprintf('1 0 0 1 %.3F %.3F cm', ($t_x * $this->k), ($yshift * $this->k));
+ $this->setPageBuffer($startlinepage, $pstart."\nq\n".$trx."\n".$pmid."\nQ\n".$pend);
+ $endlinepos = strlen($pstart."\nq\n".$trx."\n".$pmid."\nQ\n");
+ // shift the annotations and links
+ if (isset($this->PageAnnots[$this->page])) {
+ foreach ($this->PageAnnots[$this->page] as $pak => $pac) {
+ if ($pak >= $pask) {
+ $this->PageAnnots[$this->page][$pak]['x'] += $t_x;
+ $this->PageAnnots[$this->page][$pak]['y'] -= $yshift;
+ }
+ }
+ }
+ $this->y -= $yshift;
+ }
+ }
+ }
+ $this->newline = false;
+ $pbrk = $this->checkPageBreak($this->lasth);
+ $this->SetFont($fontname, $fontstyle, $fontsize);
+ if ($wfill) {
+ $this->SetFillColorArray($this->bgcolor);
+ }
+ $startlinex = $this->x;
+ $startliney = $this->y;
+ $minstartliney = $this->y;
+ $startlinepage = $this->page;
+ if (isset($endlinepos) AND (!$pbrk)) {
+ $startlinepos = $endlinepos;
+ unset($endlinepos);
+ } else {
+ if (isset($this->footerlen[$this->page])) {
+ $this->footerpos[$this->page] = $this->pagelen[$this->page] - $this->footerlen[$this->page];
+ } else {
+ $this->footerpos[$this->page] = $this->pagelen[$this->page];
+ }
+ $startlinepos = $this->footerpos[$this->page];
+ }
+ $plalign = $lalign;
+ if (isset($this->PageAnnots[$this->page])) {
+ $pask = count($this->PageAnnots[$this->page]);
+ } else {
+ $pask = 0;
+ }
+ }
+ if (isset($opentagpos)) {
+ unset($opentagpos);
+ }
+ if ($dom[$key]['tag']) {
+ if ($dom[$key]['opening']) {
+ if ($dom[$key]['value'] == 'table') {
+ if ($this->rtl) {
+ $wtmp = $this->x - $this->lMargin;
+ } else {
+ $wtmp = $this->w - $this->rMargin - $this->x;
+ }
+ $wtmp -= (2 * $this->cMargin);
+ // calculate cell width
+ if (isset($dom[$key]['width'])) {
+ $table_width = $this->getHTMLUnitToUnits($dom[$key]['width'], $wtmp, 'px');
+ } else {
+ $table_width = $wtmp;
+ }
+ }
+ // table content is handled in a special way
+ if (($dom[$key]['value'] == 'td') OR ($dom[$key]['value'] == 'th')) {
+ $trid = $dom[$key]['parent'];
+ $table_el = $dom[$trid]['parent'];
+ if (!isset($dom[$table_el]['cols'])) {
+ $dom[$table_el]['cols'] = $trid['cols'];
+ }
+ if (isset($dom[($dom[$trid]['parent'])]['attribute']['cellpadding'])) {
+ $currentcmargin = $this->getHTMLUnitToUnits($dom[($dom[$trid]['parent'])]['attribute']['cellpadding'], 1, 'px');
+ } else {
+ $currentcmargin = 0;
+ }
+ $this->cMargin = $currentcmargin;
+ if (isset($dom[($dom[$trid]['parent'])]['attribute']['cellspacing'])) {
+ $cellspacing = $this->getHTMLUnitToUnits($dom[($dom[$trid]['parent'])]['attribute']['cellspacing'], 1, 'px');
+ } else {
+ $cellspacing = 0;
+ }
+ if ($this->rtl) {
+ $cellspacingx = -$cellspacing;
+ } else {
+ $cellspacingx = $cellspacing;
+ }
+ $colspan = $dom[$key]['attribute']['colspan'];
+ $wtmp = ($colspan * ($table_width / $dom[$table_el]['cols']));
+ if (isset($dom[$key]['width'])) {
+ $cellw = $this->getHTMLUnitToUnits($dom[$key]['width'], $wtmp, 'px');
+ } else {
+ $cellw = $wtmp;
+ }
+ if (isset($dom[$key]['height'])) {
+ // minimum cell height
+ $cellh = $this->getHTMLUnitToUnits($dom[$key]['height'], 0, 'px');
+ } else {
+ $cellh = 0;
+ }
+ $cellw -= $cellspacing;
+ if (isset($dom[$key]['content'])) {
+ $cell_content = $dom[$key]['content'];
+ } else {
+ $cell_content = '&nbsp;';
+ }
+ $tagtype = $dom[$key]['value'];
+ $parentid = $key;
+ while (($key < $maxel) AND (!(($dom[$key]['tag']) AND (!$dom[$key]['opening']) AND ($dom[$key]['value'] == $tagtype) AND ($dom[$key]['parent'] == $parentid)))) {
+ // move $key index forward
+ ++$key;
+ }
+ if (!isset($dom[$trid]['startpage'])) {
+ $dom[$trid]['startpage'] = $this->page;
+ } else {
+ $this->setPage($dom[$trid]['startpage']);
+ }
+ if (!isset($dom[$trid]['starty'])) {
+ $dom[$trid]['starty'] = $this->y;
+ } else {
+ $this->y = $dom[$trid]['starty'];
+ }
+ if (!isset($dom[$trid]['startx'])) {
+ $dom[$trid]['startx'] = $this->x;
+ }
+ $this->x += ($cellspacingx / 2);
+ if (isset($dom[$parentid]['attribute']['rowspan'])) {
+ $rowspan = intval($dom[$parentid]['attribute']['rowspan']);
+ } else {
+ $rowspan = 1;
+ }
+ // skip row-spanned cells started on the previous rows
+ if (isset($dom[$table_el]['rowspans'])) {
+ $rsk = 0;
+ $rskmax = count($dom[$table_el]['rowspans']);
+ while ($rsk < $rskmax) {
+ $trwsp = $dom[$table_el]['rowspans'][$rsk];
+ $rsstartx = $trwsp['startx'];
+ $rsendx = $trwsp['endx'];
+ // account for margin changes
+ if ($trwsp['startpage'] < $this->page) {
+ if (($this->rtl) AND ($this->pagedim[$this->page]['orm'] != $this->pagedim[$trwsp['startpage']]['orm'])) {
+ $dl = ($this->pagedim[$this->page]['orm'] - $this->pagedim[$trwsp['startpage']]['orm']);
+ $rsstartx -= $dl;
+ $rsendx -= $dl;
+ } elseif ((!$this->rtl) AND ($this->pagedim[$this->page]['olm'] != $this->pagedim[$trwsp['startpage']]['olm'])) {
+ $dl = ($this->pagedim[$this->page]['olm'] - $this->pagedim[$trwsp['startpage']]['olm']);
+ $rsstartx += $dl;
+ $rsendx += $dl;
+ }
+ }
+ if (($trwsp['rowspan'] > 0)
+ AND ($rsstartx > ($this->x - $cellspacing - $currentcmargin - $this->feps))
+ AND ($rsstartx < ($this->x + $cellspacing + $currentcmargin + $this->feps))
+ AND (($trwsp['starty'] < ($this->y - $this->feps)) OR ($trwsp['startpage'] < $this->page))) {
+ // set the starting X position of the current cell
+ $this->x = $rsendx + $cellspacingx;
+ if (($trwsp['rowspan'] == 1)
+ AND (isset($dom[$trid]['endy']))
+ AND (isset($dom[$trid]['endpage']))
+ AND ($trwsp['endpage'] == $dom[$trid]['endpage'])) {
+ // set ending Y position for row
+ $dom[$table_el]['rowspans'][$rsk]['endy'] = max($dom[$trid]['endy'], $trwsp['endy']);
+ $dom[$trid]['endy'] = $dom[$table_el]['rowspans'][$rsk]['endy'];
+ }
+ $rsk = 0;
+ } else {
+ ++$rsk;
+ }
+ }
+ }
+ // add rowspan information to table element
+ if ($rowspan > 1) {
+ if (isset($this->footerlen[$this->page])) {
+ $this->footerpos[$this->page] = $this->pagelen[$this->page] - $this->footerlen[$this->page];
+ } else {
+ $this->footerpos[$this->page] = $this->pagelen[$this->page];
+ }
+ $trintmrkpos = $this->footerpos[$this->page];
+ $trsid = array_push($dom[$table_el]['rowspans'], array('trid' => $trid, 'rowspan' => $rowspan, 'mrowspan' => $rowspan, 'colspan' => $colspan, 'startpage' => $this->page, 'startx' => $this->x, 'starty' => $this->y, 'intmrkpos' => $trintmrkpos));
+ }
+ $cellid = array_push($dom[$trid]['cellpos'], array('startx' => $this->x));
+ if ($rowspan > 1) {
+ $dom[$trid]['cellpos'][($cellid - 1)]['rowspanid'] = ($trsid - 1);
+ }
+ // push background colors
+ if (isset($dom[$parentid]['bgcolor']) AND ($dom[$parentid]['bgcolor'] !== false)) {
+ $dom[$trid]['cellpos'][($cellid - 1)]['bgcolor'] = $dom[$parentid]['bgcolor'];
+ }
+ $prevLastH = $this->lasth;
+ // ****** write the cell content ******
+ $this->MultiCell($cellw, $cellh, $cell_content, false, $lalign, false, 2, '', '', true, 0, true);
+ $this->lasth = $prevLastH;
+ $this->cMargin = $currentcmargin;
+ $dom[$trid]['cellpos'][($cellid - 1)]['endx'] = $this->x;
+ // update the end of row position
+ if ($rowspan <= 1) {
+ if (isset($dom[$trid]['endy'])) {
+ if ($this->page == $dom[$trid]['endpage']) {
+ $dom[$trid]['endy'] = max($this->y, $dom[$trid]['endy']);
+ } elseif ($this->page > $dom[$trid]['endpage']) {
+ $dom[$trid]['endy'] = $this->y;
+ }
+ } else {
+ $dom[$trid]['endy'] = $this->y;
+ }
+ if (isset($dom[$trid]['endpage'])) {
+ $dom[$trid]['endpage'] = max($this->page, $dom[$trid]['endpage']);
+ } else {
+ $dom[$trid]['endpage'] = $this->page;
+ }
+ } else {
+ // account for row-spanned cells
+ $dom[$table_el]['rowspans'][($trsid - 1)]['endx'] = $this->x;
+ $dom[$table_el]['rowspans'][($trsid - 1)]['endy'] = $this->y;
+ $dom[$table_el]['rowspans'][($trsid - 1)]['endpage'] = $this->page;
+ }
+ if (isset($dom[$table_el]['rowspans'])) {
+ // update endy and endpage on rowspanned cells
+ foreach ($dom[$table_el]['rowspans'] as $k => $trwsp) {
+ if ($trwsp['rowspan'] > 0) {
+ if (isset($dom[$trid]['endpage'])) {
+ if ($trwsp['endpage'] == $dom[$trid]['endpage']) {
+ $dom[$table_el]['rowspans'][$k]['endy'] = max($dom[$trid]['endy'], $trwsp['endy']);
+ } elseif ($trwsp['endpage'] < $dom[$trid]['endpage']) {
+ $dom[$table_el]['rowspans'][$k]['endy'] = $dom[$trid]['endy'];
+ $dom[$table_el]['rowspans'][$k]['endpage'] = $dom[$trid]['endpage'];
+ } else {
+ $dom[$trid]['endy'] = $this->pagedim[$dom[$trid]['endpage']]['hk'] - $this->pagedim[$dom[$trid]['endpage']]['bm'];
+ }
+ }
+ }
+ }
+ }
+ $this->x += ($cellspacingx / 2);
+ } else {
+ // opening tag (or self-closing tag)
+ if (!isset($opentagpos)) {
+ if (isset($this->footerlen[$this->page])) {
+ $this->footerpos[$this->page] = $this->pagelen[$this->page] - $this->footerlen[$this->page];
+ } else {
+ $this->footerpos[$this->page] = $this->pagelen[$this->page];
+ }
+ $opentagpos = $this->footerpos[$this->page];
+ }
+ $this->openHTMLTagHandler($dom, $key, $cell);
+ }
+ } else {
+ // closing tag
+ $this->closeHTMLTagHandler($dom, $key, $cell);
+ }
+ } elseif (strlen($dom[$key]['value']) > 0) {
+ // print list-item
+ if (!empty($this->lispacer)) {
+ $this->SetFont($pfontname, $pfontstyle, $pfontsize);
+ $this->lasth = $this->FontSize * $this->cell_height_ratio;
+ $minstartliney = $this->y;
+ $this->putHtmlListBullet($this->listnum, $this->lispacer, $pfontsize);
+ $this->SetFont($curfontname, $curfontstyle, $curfontsize);
+ $this->lasth = $this->FontSize * $this->cell_height_ratio;
+ if (is_numeric($pfontsize) AND ($pfontsize > 0) AND is_numeric($curfontsize) AND ($curfontsize > 0) AND ($pfontsize != $curfontsize)) {
+ $this->y += (($pfontsize - $curfontsize) / $this->k);
+ $minstartliney = min($this->y, $minstartliney);
+ }
+ }
+ // text
+ $this->htmlvspace = 0;
+ if ((!$this->premode) AND ($this->rtl OR $this->tmprtl)) {
+ // reverse spaces order
+ $len1 = strlen($dom[$key]['value']);
+ $lsp = $len1 - strlen(ltrim($dom[$key]['value']));
+ $rsp = $len1 - strlen(rtrim($dom[$key]['value']));
+ $tmpstr = '';
+ if ($rsp > 0) {
+ $tmpstr .= substr($dom[$key]['value'], -$rsp);
+ }
+ $tmpstr .= trim($dom[$key]['value']);
+ if ($lsp > 0) {
+ $tmpstr .= substr($dom[$key]['value'], 0, $lsp);
+ }
+ $dom[$key]['value'] = $tmpstr;
+ }
+ if ($newline) {
+ if (!$this->premode) {
+ if (($this->rtl OR $this->tmprtl)) {
+ $dom[$key]['value'] = rtrim($dom[$key]['value']);
+ } else {
+ $dom[$key]['value'] = ltrim($dom[$key]['value']);
+ }
+ }
+ $newline = false;
+ $firstblock = true;
+ } else {
+ $firstblock = false;
+ }
+ $strrest = '';
+ if (!empty($this->HREF)) {
+ // HTML <a> Link
+ $strrest = $this->addHtmlLink($this->HREF['url'], $dom[$key]['value'], $wfill, true, $this->HREF['color'], $this->HREF['style']);
+ } else {
+ $ctmpmargin = $this->cMargin;
+ $this->cMargin = 0;
+ // ****** write only until the end of the line and get the rest ******
+ $strrest = $this->Write($this->lasth, $dom[$key]['value'], '', $wfill, '', false, 0, true, $firstblock);
+ $this->cMargin = $ctmpmargin;
+ }
+ if (strlen($strrest) > 0) {
+ // store the remaining string on the previous $key position
+ $this->newline = true;
+ if ($cell) {
+ if ($this->rtl) {
+ $this->x -= $this->cMargin;
+ } else {
+ $this->x += $this->cMargin;
+ }
+ }
+ if ($strrest == $dom[$key]['value']) {
+ // used to avoid infinite loop
+ ++$loop;
+ } else {
+ $loop = 0;
+ }
+ $dom[$key]['value'] = ltrim($strrest);
+ if ($loop < 3) {
+ --$key;
+ }
+ } else {
+ $loop = 0;
+ }
+ }
+ ++$key;
+ } // end for each $key
+ // align the last line
+ if (isset($startlinex)) {
+ $yshift = $minstartliney - $startliney;
+ if (($yshift > 0) OR ($this->page > $startlinepage)) {
+ $yshift = 0;
+ }
+ if ((isset($plalign) AND ((($plalign == 'C') OR ($plalign == 'J') OR (($plalign == 'R') AND (!$this->rtl)) OR (($plalign == 'L') AND ($this->rtl))))) OR ($yshift < 0)) {
+ // the last line must be shifted to be aligned as requested
+ $linew = abs($this->endlinex - $startlinex);
+ $pstart = substr($this->getPageBuffer($startlinepage), 0, $startlinepos);
+ if (isset($opentagpos) AND isset($this->footerlen[$startlinepage])) {
+ $this->footerpos[$startlinepage] = $this->pagelen[$startlinepage] - $this->footerlen[$startlinepage];
+ $midpos = min($opentagpos, $this->footerpos[$startlinepage]);
+ } elseif (isset($opentagpos)) {
+ $midpos = $opentagpos;
+ } elseif (isset($this->footerlen[$startlinepage])) {
+ $this->footerpos[$startlinepage] = $this->pagelen[$startlinepage] - $this->footerlen[$startlinepage];
+ $midpos = $this->footerpos[$startlinepage];
+ } else {
+ $midpos = 0;
+ }
+ if ($midpos > 0) {
+ $pmid = substr($this->getPageBuffer($startlinepage), $startlinepos, ($midpos - $startlinepos));
+ $pend = substr($this->getPageBuffer($startlinepage), $midpos);
+ } else {
+ $pmid = substr($this->getPageBuffer($startlinepage), $startlinepos);
+ $pend = '';
+ }
+ // calculate shifting amount
+ $tw = $w;
+ if ($this->lMargin != $prevlMargin) {
+ $tw += ($prevlMargin - $this->lMargin);
+ }
+ if ($this->rMargin != $prevrMargin) {
+ $tw += ($prevrMargin - $this->rMargin);
+ }
+ $mdiff = abs($tw - $linew);
+ if ($plalign == 'C') {
+ if ($this->rtl) {
+ $t_x = -($mdiff / 2);
+ } else {
+ $t_x = ($mdiff / 2);
+ }
+ } elseif (($plalign == 'R') AND (!$this->rtl)) {
+ // right alignment on LTR document
+ $t_x = $mdiff;
+ } elseif (($plalign == 'L') AND ($this->rtl)) {
+ // left alignment on RTL document
+ $t_x = -$mdiff;
+ } else {
+ $t_x = 0;
+ }
+ if (($t_x != 0) OR ($yshift < 0)) {
+ // shift the line
+ $trx = sprintf('1 0 0 1 %.3F %.3F cm', ($t_x * $this->k), ($yshift * $this->k));
+ $this->setPageBuffer($startlinepage, $pstart."\nq\n".$trx."\n".$pmid."\nQ\n".$pend);
+ $endlinepos = strlen($pstart."\nq\n".$trx."\n".$pmid."\nQ\n");
+ // shift the annotations and links
+ if (isset($this->PageAnnots[$this->page])) {
+ foreach ($this->PageAnnots[$this->page] as $pak => $pac) {
+ if ($pak >= $pask) {
+ $this->PageAnnots[$this->page][$pak]['x'] += $t_x;
+ $this->PageAnnots[$this->page][$pak]['y'] -= $yshift;
+ }
+ }
+ }
+ $this->y -= $yshift;
+ }
+ }
+ }
+ if ($ln AND (!($cell AND ($dom[$key-1]['value'] == 'table')))) {
+ $this->Ln($this->lasth);
+ }
+ // restore previous values
+ $this->setGraphicVars($gvars);
+ if ($this->page > $prevPage) {
+ $this->lMargin = $this->pagedim[$this->page]['olm'];
+ $this->rMargin = $this->pagedim[$this->page]['orm'];
+ }
+ unset($dom);
+ }
+
+ /**
+ * Process opening tags.
+ * @param array $dom html dom array
+ * @param int $key current element id
+ * @param boolean $cell if true add the default cMargin space to each new line (default false).
+ * @access protected
+ */
+ protected function openHTMLTagHandler(&$dom, $key, $cell=false) {
+ $tag = $dom[$key];
+ $parent = $dom[($dom[$key]['parent'])];
+ $firstorlast = ($key == 1);
+ // check for text direction attribute
+ if (isset($tag['attribute']['dir'])) {
+ $this->tmprtl = $tag['attribute']['dir'] == 'rtl' ? 'R' : 'L';
+ } else {
+ $this->tmprtl = false;
+ }
+ //Opening tag
+ switch($tag['value']) {
+ case 'table': {
+ $cp = 0;
+ $cs = 0;
+ $dom[$key]['rowspans'] = array();
+ if (!empty($dom[$key]['thead'])) {
+ // set table header
+ $this->thead = $dom[$key]['thead'];
+ }
+ if (isset($tag['attribute']['cellpadding'])) {
+ $cp = $this->getHTMLUnitToUnits($tag['attribute']['cellpadding'], 1, 'px');
+ $this->oldcMargin = $this->cMargin;
+ $this->cMargin = $cp;
+ }
+ if (isset($tag['attribute']['cellspacing'])) {
+ $cs = $this->getHTMLUnitToUnits($tag['attribute']['cellspacing'], 1, 'px');
+ }
+ $this->checkPageBreak((2 * $cp) + (2 * $cs) + $this->lasth);
+ break;
+ }
+ case 'tr': {
+ // array of columns positions
+ $dom[$key]['cellpos'] = array();
+ break;
+ }
+ case 'hr': {
+ $this->addHTMLVertSpace(1, $cell, '', $firstorlast, $tag['value'], false);
+ $this->htmlvspace = 0;
+ $wtmp = $this->w - $this->lMargin - $this->rMargin;
+ if ((isset($tag['attribute']['width'])) AND ($tag['attribute']['width'] != '')) {
+ $hrWidth = $this->getHTMLUnitToUnits($tag['attribute']['width'], $wtmp, 'px');
+ } else {
+ $hrWidth = $wtmp;
+ }
+ $x = $this->GetX();
+ $y = $this->GetY();
+ $prevlinewidth = $this->GetLineWidth();
+ $this->Line($x, $y, $x + $hrWidth, $y);
+ $this->SetLineWidth($prevlinewidth);
+ $this->addHTMLVertSpace(1, $cell, '', !isset($dom[($key + 1)]), $tag['value'], false);
+ break;
+ }
+ case 'a': {
+ if (array_key_exists('href', $tag['attribute'])) {
+ $this->HREF['url'] = $tag['attribute']['href'];
+ }
+ $this->HREF['color'] = $this->htmlLinkColorArray;
+ $this->HREF['style'] = $this->htmlLinkFontStyle;
+ if (array_key_exists('style', $tag['attribute'])) {
+ // get style attributes
+ preg_match_all('/([^;:\s]*):([^;]*)/', $tag['attribute']['style'], $style_array, PREG_PATTERN_ORDER);
+ $astyle = array();
+ while (list($id, $name) = each($style_array[1])) {
+ $name = strtolower($name);
+ $astyle[$name] = trim($style_array[2][$id]);
+ }
+ if (isset($astyle['color'])) {
+ $this->HREF['color'] = $this->convertHTMLColorToDec($astyle['color']);
+ }
+ if (isset($astyle['text-decoration'])) {
+ $this->HREF['style'] = '';
+ $decors = explode(' ', strtolower($astyle['text-decoration']));
+ foreach ($decors as $dec) {
+ $dec = trim($dec);
+ if (!empty($dec)) {
+ if ($dec{0} == 'u') {
+ $this->HREF['style'] .= 'U';
+ } elseif ($dec{0} == 'l') {
+ $this->HREF['style'] .= 'D';
+ }
+ }
+ }
+ }
+ }
+ break;
+ }
+ case 'img': {
+ if (isset($tag['attribute']['src'])) {
+ // replace relative path with real server path
+ if ($tag['attribute']['src'][0] == '/') {
+ $tag['attribute']['src'] = $_SERVER['DOCUMENT_ROOT'].$tag['attribute']['src'];
+ }
+ $tag['attribute']['src'] = urldecode($tag['attribute']['src']);
+ // S tem ne delajo slike vkljucene v html, ki so na streznik uploadane
+ //$tag['attribute']['src'] = str_replace(K_PATH_URL, K_PATH_MAIN, $tag['attribute']['src']);
+
+ if (!isset($tag['attribute']['width'])) {
+ $tag['attribute']['width'] = 0;
+ }
+ if (!isset($tag['attribute']['height'])) {
+ $tag['attribute']['height'] = 0;
+ }
+ //if (!isset($tag['attribute']['align'])) {
+ // the only alignment supported is "bottom"
+ // further development is required for other modes.
+ $tag['attribute']['align'] = 'bottom';
+ //}
+ switch($tag['attribute']['align']) {
+ case 'top': {
+ $align = 'T';
+ break;
+ }
+ case 'middle': {
+ $align = 'M';
+ break;
+ }
+ case 'bottom': {
+ $align = 'B';
+ break;
+ }
+ default: {
+ $align = 'B';
+ break;
+ }
+ }
+ $fileinfo = pathinfo($tag['attribute']['src']);
+ if (isset($fileinfo['extension']) AND (!empty($fileinfo['extension']))) {
+ $type = strtolower($fileinfo['extension']);
+ }
+ $prevy = $this->y;
+ $xpos = $this->GetX();
+ if (isset($dom[($key - 1)]) AND ($dom[($key - 1)]['value'] == ' ')) {
+ if ($this->rtl) {
+ $xpos += $this->GetStringWidth(' ');
+ } else {
+ $xpos -= $this->GetStringWidth(' ');
+ }
+ }
+ $imglink = '';
+ if (isset($this->HREF['url']) AND !empty($this->HREF['url'])) {
+ $imglink = $this->HREF['url'];
+ if ($imglink{0} == '#') {
+ // convert url to internal link
+ $page = intval(substr($imglink, 1));
+ $imglink = $this->AddLink();
+ $this->SetLink($imglink, 0, $page);
+ }
+ }
+ $border = 0;
+ if (isset($tag['attribute']['border']) AND !empty($tag['attribute']['border'])) {
+ // currently only support 1 (frame) or a combination of 'LTRB'
+ $border = $tag['attribute']['border'];
+ }
+ if (($type == 'eps') OR ($type == 'ai')) {
+ $this->ImageEps($tag['attribute']['src'], $xpos, $this->GetY(), $this->pixelsToUnits($tag['attribute']['width']), $this->pixelsToUnits($tag['attribute']['height']), $imglink, true, $align, '', $border);
+ } else {
+ $this->Image($tag['attribute']['src'], $xpos, $this->GetY(), $this->pixelsToUnits($tag['attribute']['width']), $this->pixelsToUnits($tag['attribute']['height']), '', $imglink, $align, false, 300, '', false, false, $border);
+ }
+ switch($align) {
+ case 'T': {
+ $this->y = $prevy;
+ break;
+ }
+ case 'M': {
+ $this->y = (($this->img_rb_y + $prevy - ($tag['fontsize'] / $this->k)) / 2) ;
+ break;
+ }
+ case 'B': {
+ $this->y = $this->img_rb_y - ($tag['fontsize'] / $this->k);
+ break;
+ }
+ }
+ }
+ break;
+ }
+ case 'dl': {
+ ++$this->listnum;
+ $this->addHTMLVertSpace(0, $cell, '', $firstorlast, $tag['value'], false);
+ break;
+ }
+ case 'dt': {
+ $this->addHTMLVertSpace(1, $cell, '', $firstorlast, $tag['value'], false);
+ break;
+ }
+ case 'dd': {
+ if ($this->rtl) {
+ $this->rMargin += $this->listindent;
+ } else {
+ $this->lMargin += $this->listindent;
+ }
+ $this->addHTMLVertSpace(1, $cell, '', $firstorlast, $tag['value'], false);
+ break;
+ }
+ case 'ul':
+ case 'ol': {
+ $this->addHTMLVertSpace(0, $cell, '', $firstorlast, $tag['value'], false);
+ $this->htmlvspace = 0;
+ ++$this->listnum;
+ if ($tag['value'] == 'ol') {
+ $this->listordered[$this->listnum] = true;
+ } else {
+ $this->listordered[$this->listnum] = false;
+ }
+ if (isset($tag['attribute']['start'])) {
+ $this->listcount[$this->listnum] = intval($tag['attribute']['start']) - 1;
+ } else {
+ $this->listcount[$this->listnum] = 0;
+ }
+ if ($this->rtl) {
+ $this->rMargin += $this->listindent;
+ } else {
+ $this->lMargin += $this->listindent;
+ }
+ break;
+ }
+ case 'li': {
+ $this->addHTMLVertSpace(1, $cell, '', $firstorlast, $tag['value'], false);
+ if ($this->listordered[$this->listnum]) {
+ // ordered item
+ if (!empty($parent['attribute']['type'])) {
+ $this->lispacer = $parent['attribute']['type'];
+ } elseif (!empty($parent['listtype'])) {
+ $this->lispacer = $parent['listtype'];
+ } elseif (!empty($this->lisymbol)) {
+ $this->lispacer = $this->lisymbol;
+ } else {
+ $this->lispacer = '#';
+ }
+ ++$this->listcount[$this->listnum];
+ if (isset($tag['attribute']['value'])) {
+ $this->listcount[$this->listnum] = intval($tag['attribute']['value']);
+ }
+ } else {
+ // unordered item
+ if (!empty($parent['attribute']['type'])) {
+ $this->lispacer = $parent['attribute']['type'];
+ } elseif (!empty($parent['listtype'])) {
+ $this->lispacer = $parent['listtype'];
+ } elseif (!empty($this->lisymbol)) {
+ $this->lispacer = $this->lisymbol;
+ } else {
+ $this->lispacer = '!';
+ }
+ }
+ break;
+ }
+ case 'blockquote': {
+ if ($this->rtl) {
+ $this->rMargin += $this->listindent;
+ } else {
+ $this->lMargin += $this->listindent;
+ }
+ $this->addHTMLVertSpace(2, $cell, '', $firstorlast, $tag['value'], false);
+ break;
+ }
+ case 'br': {
+ $this->Ln('', $cell);
+ break;
+ }
+ case 'div': {
+ $this->addHTMLVertSpace(1, $cell, '', $firstorlast, $tag['value'], false);
+ break;
+ }
+ case 'p': {
+ $this->addHTMLVertSpace(2, $cell, '', $firstorlast, $tag['value'], false);
+ break;
+ }
+ case 'pre': {
+ $this->addHTMLVertSpace(1, $cell, '', $firstorlast, $tag['value'], false);
+ $this->premode = true;
+ break;
+ }
+ case 'sup': {
+ $this->SetXY($this->GetX(), $this->GetY() - ((0.7 * $this->FontSizePt) / $this->k));
+ break;
+ }
+ case 'sub': {
+ $this->SetXY($this->GetX(), $this->GetY() + ((0.3 * $this->FontSizePt) / $this->k));
+ break;
+ }
+ case 'h1':
+ case 'h2':
+ case 'h3':
+ case 'h4':
+ case 'h5':
+ case 'h6': {
+ $this->addHTMLVertSpace(1, $cell, ($tag['fontsize'] * 1.5) / $this->k, $firstorlast, $tag['value'], false);
+ break;
+ }
+ default: {
+ break;
+ }
+ }
+ }
+
+ /**
+ * Process closing tags.
+ * @param array $dom html dom array
+ * @param int $key current element id
+ * @param boolean $cell if true add the default cMargin space to each new line (default false).
+ * @access protected
+ */
+ protected function closeHTMLTagHandler(&$dom, $key, $cell=false) {
+ $tag = $dom[$key];
+ $parent = $dom[($dom[$key]['parent'])];
+ $firstorlast = ((!isset($dom[($key + 1)])) OR ((!isset($dom[($key + 2)])) AND ($dom[($key + 1)]['value'] == 'marker')));
+ //Closing tag
+ switch($tag['value']) {
+ case 'tr': {
+ $table_el = $dom[($dom[$key]['parent'])]['parent'];
+ if(!isset($parent['endy'])) {
+ $dom[($dom[$key]['parent'])]['endy'] = $this->y;
+ $parent['endy'] = $this->y;
+ }
+ if(!isset($parent['endpage'])) {
+ $dom[($dom[$key]['parent'])]['endpage'] = $this->page;
+ $parent['endpage'] = $this->page;
+ }
+ // update row-spanned cells
+ if (isset($dom[$table_el]['rowspans'])) {
+ foreach ($dom[$table_el]['rowspans'] as $k => $trwsp) {
+ $dom[$table_el]['rowspans'][$k]['rowspan'] -= 1;
+ if ($dom[$table_el]['rowspans'][$k]['rowspan'] == 0) {
+ if ($dom[$table_el]['rowspans'][$k]['endpage'] == $parent['endpage']) {
+ $dom[($dom[$key]['parent'])]['endy'] = max($dom[$table_el]['rowspans'][$k]['endy'], $parent['endy']);
+ } elseif ($dom[$table_el]['rowspans'][$k]['endpage'] > $parent['endpage']) {
+ $dom[($dom[$key]['parent'])]['endy'] = $dom[$table_el]['rowspans'][$k]['endy'];
+ $dom[($dom[$key]['parent'])]['endpage'] = $dom[$table_el]['rowspans'][$k]['endpage'];
+ }
+ }
+ }
+ // report new endy and endpage to the rowspanned cells
+ foreach ($dom[$table_el]['rowspans'] as $k => $trwsp) {
+ if ($dom[$table_el]['rowspans'][$k]['rowspan'] == 0) {
+ $dom[$table_el]['rowspans'][$k]['endpage'] = max($dom[$table_el]['rowspans'][$k]['endpage'], $dom[($dom[$key]['parent'])]['endpage']);
+ $dom[($dom[$key]['parent'])]['endpage'] = $dom[$table_el]['rowspans'][$k]['endpage'];
+ $dom[$table_el]['rowspans'][$k]['endy'] = max($dom[$table_el]['rowspans'][$k]['endy'], $dom[($dom[$key]['parent'])]['endy']);
+ $dom[($dom[$key]['parent'])]['endy'] = $dom[$table_el]['rowspans'][$k]['endy'];
+ }
+ }
+ // update remaining rowspanned cells
+ foreach ($dom[$table_el]['rowspans'] as $k => $trwsp) {
+ if ($dom[$table_el]['rowspans'][$k]['rowspan'] == 0) {
+ $dom[$table_el]['rowspans'][$k]['endpage'] = $dom[($dom[$key]['parent'])]['endpage'];
+ $dom[$table_el]['rowspans'][$k]['endy'] = $dom[($dom[$key]['parent'])]['endy'];
+ }
+ }
+ }
+ $this->setPage($dom[($dom[$key]['parent'])]['endpage']);
+ $this->y = $dom[($dom[$key]['parent'])]['endy'];
+ if (isset($dom[$table_el]['attribute']['cellspacing'])) {
+ $cellspacing = $this->getHTMLUnitToUnits($dom[$table_el]['attribute']['cellspacing'], 1, 'px');
+ $this->y += $cellspacing;
+ }
+ $this->Ln(0, $cell);
+ $this->x = $parent['startx'];
+ // account for booklet mode
+ if ($this->page > $parent['startpage']) {
+ if (($this->rtl) AND ($this->pagedim[$this->page]['orm'] != $this->pagedim[$parent['startpage']]['orm'])) {
+ $this->x += ($this->pagedim[$this->page]['orm'] - $this->pagedim[$parent['startpage']]['orm']);
+ } elseif ((!$this->rtl) AND ($this->pagedim[$this->page]['olm'] != $this->pagedim[$parent['startpage']]['olm'])) {
+ $this->x += ($this->pagedim[$this->page]['olm'] - $this->pagedim[$parent['startpage']]['olm']);
+ }
+ }
+ break;
+ }
+ case 'table': {
+ // draw borders
+ $table_el = $parent;
+ if ((isset($table_el['attribute']['border']) AND ($table_el['attribute']['border'] > 0))
+ OR (isset($table_el['style']['border']) AND ($table_el['style']['border'] > 0))) {
+ $border = 1;
+ } else {
+ $border = 0;
+ }
+ // fix bottom line alignment of last line before page break
+ foreach ($dom[($dom[$key]['parent'])]['trids'] as $j => $trkey) {
+ // update row-spanned cells
+ if (isset($dom[($dom[$key]['parent'])]['rowspans'])) {
+ foreach ($dom[($dom[$key]['parent'])]['rowspans'] as $k => $trwsp) {
+ if ($trwsp['trid'] == $trkey) {
+ $dom[($dom[$key]['parent'])]['rowspans'][$k]['mrowspan'] -= 1;
+ }
+ if (isset($prevtrkey) AND ($trwsp['trid'] == $prevtrkey) AND ($trwsp['mrowspan'] >= 0)) {
+ $dom[($dom[$key]['parent'])]['rowspans'][$k]['trid'] = $trkey;
+ }
+ }
+ }
+ if (isset($prevtrkey) AND ($dom[$trkey]['startpage'] > $dom[$prevtrkey]['endpage'])) {
+ $pgendy = $this->pagedim[$dom[$prevtrkey]['endpage']]['hk'] - $this->pagedim[$dom[$prevtrkey]['endpage']]['bm'];
+ $dom[$prevtrkey]['endy'] = $pgendy;
+ // update row-spanned cells
+ if (isset($dom[($dom[$key]['parent'])]['rowspans'])) {
+ foreach ($dom[($dom[$key]['parent'])]['rowspans'] as $k => $trwsp) {
+ if (($trwsp['trid'] == $trkey) AND ($trwsp['mrowspan'] == 1) AND ($trwsp['endpage'] == $dom[$prevtrkey]['endpage'])) {
+ $dom[($dom[$key]['parent'])]['rowspans'][$k]['endy'] = $pgendy;
+ $dom[($dom[$key]['parent'])]['rowspans'][$k]['mrowspan'] = -1;
+ }
+ }
+ }
+ }
+ $prevtrkey = $trkey;
+ $table_el = $dom[($dom[$key]['parent'])];
+ }
+ // for each row
+ foreach ($table_el['trids'] as $j => $trkey) {
+ $parent = $dom[$trkey];
+ // for each cell on the row
+ foreach ($parent['cellpos'] as $k => $cellpos) {
+ if (isset($cellpos['rowspanid']) AND ($cellpos['rowspanid'] >= 0)) {
+ $cellpos['startx'] = $table_el['rowspans'][($cellpos['rowspanid'])]['startx'];
+ $cellpos['endx'] = $table_el['rowspans'][($cellpos['rowspanid'])]['endx'];
+ $endy = $table_el['rowspans'][($cellpos['rowspanid'])]['endy'];
+ $startpage = $table_el['rowspans'][($cellpos['rowspanid'])]['startpage'];
+ $endpage = $table_el['rowspans'][($cellpos['rowspanid'])]['endpage'];
+ } else {
+ $endy = $parent['endy'];
+ $startpage = $parent['startpage'];
+ $endpage = $parent['endpage'];
+ }
+ if ($endpage > $startpage) {
+ // design borders around HTML cells.
+ for ($page=$startpage; $page <= $endpage; ++$page) {
+ $this->setPage($page);
+ if ($page == $startpage) {
+ $this->y = $parent['starty']; // put cursor at the beginning of row on the first page
+ $ch = $this->getPageHeight() - $parent['starty'] - $this->getBreakMargin();
+ $cborder = $this->getBorderMode($border, $position='start');
+ } elseif ($page == $endpage) {
+ $this->y = $this->tMargin; // put cursor at the beginning of last page
+ $ch = $endy - $this->tMargin;
+ $cborder = $this->getBorderMode($border, $position='end');
+ } else {
+ $this->y = $this->tMargin; // put cursor at the beginning of the current page
+ $ch = $this->getPageHeight() - $this->tMargin - $this->getBreakMargin();
+ $cborder = $this->getBorderMode($border, $position='middle');
+ }
+ if (isset($cellpos['bgcolor']) AND ($cellpos['bgcolor']) !== false) {
+ $this->SetFillColorArray($cellpos['bgcolor']);
+ $fill = true;
+ } else {
+ $fill = false;
+ }
+ $cw = abs($cellpos['endx'] - $cellpos['startx']);
+ $this->x = $cellpos['startx'];
+ // account for margin changes
+ if ($page > $startpage) {
+ if (($this->rtl) AND ($this->pagedim[$page]['orm'] != $this->pagedim[$startpage]['orm'])) {
+ $this->x -= ($this->pagedim[$page]['orm'] - $this->pagedim[$startpage]['orm']);
+ } elseif ((!$this->rtl) AND ($this->pagedim[$page]['lm'] != $this->pagedim[$startpage]['olm'])) {
+ $this->x += ($this->pagedim[$page]['olm'] - $this->pagedim[$startpage]['olm']);
+ }
+ }
+ // design a cell around the text
+ $ccode = $this->FillColor."\n".$this->getCellCode($cw, $ch, '', $cborder, 1, '', $fill, '', 0, true);
+ if ($cborder OR $fill) {
+ $pstart = substr($this->getPageBuffer($this->page), 0, $this->intmrk[$this->page]);
+ $pend = substr($this->getPageBuffer($this->page), $this->intmrk[$this->page]);
+ $this->setPageBuffer($this->page, $pstart.$ccode."\n".$pend);
+ $this->intmrk[$this->page] += strlen($ccode."\n");
+ }
+ }
+ } else {
+ $this->setPage($startpage);
+ if (isset($cellpos['bgcolor']) AND ($cellpos['bgcolor']) !== false) {
+ $this->SetFillColorArray($cellpos['bgcolor']);
+ $fill = true;
+ } else {
+ $fill = false;
+ }
+ $this->x = $cellpos['startx'];
+ $this->y = $parent['starty'];
+ $cw = abs($cellpos['endx'] - $cellpos['startx']);
+ $ch = $endy - $parent['starty'];
+ // design a cell around the text
+ $ccode = $this->FillColor."\n".$this->getCellCode($cw, $ch, '', $border, 1, '', $fill, '', 0, true);
+ if ($border OR $fill) {
+ if (end($this->transfmrk[$this->page]) !== false) {
+ $pagemarkkey = key($this->transfmrk[$this->page]);
+ $pagemark = &$this->transfmrk[$this->page][$pagemarkkey];
+ } elseif ($this->InFooter) {
+ $pagemark = &$this->footerpos[$this->page];
+ } else {
+ $pagemark = &$this->intmrk[$this->page];
+ }
+ $pstart = substr($this->getPageBuffer($this->page), 0, $pagemark);
+ $pend = substr($this->getPageBuffer($this->page), $pagemark);
+ $this->setPageBuffer($this->page, $pstart.$ccode."\n".$pend);
+ $pagemark += strlen($ccode."\n");
+ }
+ }
+ }
+ if (isset($table_el['attribute']['cellspacing'])) {
+ $cellspacing = $this->getHTMLUnitToUnits($table_el['attribute']['cellspacing'], 1, 'px');
+ $this->y += $cellspacing;
+ }
+ $this->Ln(0, $cell);
+ $this->x = $parent['startx'];
+ if ($endpage > $startpage) {
+ if (($this->rtl) AND ($this->pagedim[$endpage]['orm'] != $this->pagedim[$startpage]['orm'])) {
+ $this->x += ($this->pagedim[$endpage]['orm'] - $this->pagedim[$startpage]['orm']);
+ } elseif ((!$this->rtl) AND ($this->pagedim[$endpage]['olm'] != $this->pagedim[$startpage]['olm'])) {
+ $this->x += ($this->pagedim[$endpage]['olm'] - $this->pagedim[$startpage]['olm']);
+ }
+ }
+ }
+ if (isset($parent['cellpadding'])) {
+ $this->cMargin = $this->oldcMargin;
+ }
+ $this->lasth = $this->FontSize * $this->cell_height_ratio;
+ if (!empty($table_el['thead']) AND !empty($this->theadMargin)) {
+ // reset table header
+ $this->thead = '';
+ // restore top margin
+ $this->tMargin = $this->theadMargin;
+ $this->pagedim[$this->page]['tm'] = $this->theadMargin;
+ $this->theadMargin = '';
+ }
+ break;
+ }
+ case 'a': {
+ $this->HREF = '';
+ break;
+ }
+ case 'sup': {
+ $this->SetXY($this->GetX(), $this->GetY() + ((0.7 * $parent['fontsize']) / $this->k));
+ break;
+ }
+ case 'sub': {
+ $this->SetXY($this->GetX(), $this->GetY() - ((0.3 * $parent['fontsize'])/$this->k));
+ break;
+ }
+ case 'div': {
+ $this->addHTMLVertSpace(1, $cell, '', $firstorlast, $tag['value'], true);
+ break;
+ }
+ case 'blockquote': {
+ if ($this->rtl) {
+ $this->rMargin -= $this->listindent;
+ } else {
+ $this->lMargin -= $this->listindent;
+ }
+ $this->addHTMLVertSpace(2, $cell, '', $firstorlast, $tag['value'], true);
+ break;
+ }
+ case 'p': {
+ $this->addHTMLVertSpace(2, $cell, '', $firstorlast, $tag['value'], true);
+ break;
+ }
+ case 'pre': {
+ $this->addHTMLVertSpace(1, $cell, '', $firstorlast, $tag['value'], true);
+ $this->premode = false;
+ break;
+ }
+ case 'dl': {
+ --$this->listnum;
+ if ($this->listnum <= 0) {
+ $this->listnum = 0;
+ $this->addHTMLVertSpace(2, $cell, '', $firstorlast, $tag['value'], true);
+ }
+ break;
+ }
+ case 'dt': {
+ $this->lispacer = '';
+ $this->addHTMLVertSpace(0, $cell, '', $firstorlast, $tag['value'], true);
+ break;
+ }
+ case 'dd': {
+ $this->lispacer = '';
+ if ($this->rtl) {
+ $this->rMargin -= $this->listindent;
+ } else {
+ $this->lMargin -= $this->listindent;
+ }
+ $this->addHTMLVertSpace(0, $cell, '', $firstorlast, $tag['value'], true);
+ break;
+ }
+ case 'ul':
+ case 'ol': {
+ --$this->listnum;
+ $this->lispacer = '';
+ if ($this->rtl) {
+ $this->rMargin -= $this->listindent;
+ } else {
+ $this->lMargin -= $this->listindent;
+ }
+ if ($this->listnum <= 0) {
+ $this->listnum = 0;
+ $this->addHTMLVertSpace(2, $cell, '', $firstorlast, $tag['value'], true);
+ }
+ $this->lasth = $this->FontSize * $this->cell_height_ratio;
+ break;
+ }
+ case 'li': {
+ $this->lispacer = '';
+ $this->addHTMLVertSpace(0, $cell, '', $firstorlast, $tag['value'], true);
+ break;
+ }
+ case 'h1':
+ case 'h2':
+ case 'h3':
+ case 'h4':
+ case 'h5':
+ case 'h6': {
+ $this->addHTMLVertSpace(1, $cell, ($parent['fontsize'] * 1.5) / $this->k, $firstorlast, $tag['value'], true);
+ break;
+ }
+ default : {
+ break;
+ }
+ }
+ $this->tmprtl = false;
+ }
+
+ /**
+ * Add vertical spaces if needed.
+ * @param int $n number of spaces to add
+ * @param boolean $cell if true add the default cMargin space to each new line (default false).
+ * @param string $h The height of the break. By default, the value equals the height of the last printed cell.
+ * @param boolean $firstorlast if true do not print additional empty lines.
+ * @param string $tag HTML tag to which this space will be applied
+ * @param boolean $closing true if this space will be applied to a closing tag, false otherwise
+ * @access protected
+ */
+ protected function addHTMLVertSpace($n, $cell=false, $h='', $firstorlast=false, $tag='', $closing=false) {
+ if ($firstorlast) {
+ $this->Ln(0, $cell);
+ $this->htmlvspace = 0;
+ return;
+ }
+ if (isset($this->tagvspaces[$tag][intval($closing)]['n'])) {
+ $n = $this->tagvspaces[$tag][intval($closing)]['n'];
+ }
+ if (isset($this->tagvspaces[$tag][intval($closing)]['h'])) {
+ $h = $this->tagvspaces[$tag][intval($closing)]['h'];
+ }
+ if (is_string($h)) {
+ $vsize = $n * $this->lasth;
+ } else {
+ $vsize = $n * $h;
+ }
+ if ($vsize > $this->htmlvspace) {
+ $this->Ln(($vsize - $this->htmlvspace), $cell);
+ $this->htmlvspace = $vsize;
+ }
+ }
+
+ /**
+ * Set the default bullet to be used as LI bullet symbol
+ * @param string $symbol character or string to be used (legal values are: '' = automatic, '!' = auto bullet, '#' = auto numbering, 'disc', 'disc', 'circle', 'square', '1', 'decimal', 'decimal-leading-zero', 'i', 'lower-roman', 'I', 'upper-roman', 'a', 'lower-alpha', 'lower-latin', 'A', 'upper-alpha', 'upper-latin', 'lower-greek')
+ * @access public
+ * @since 4.0.028 (2008-09-26)
+ */
+ public function setLIsymbol($symbol='!') {
+ $symbol = strtolower($symbol);
+ switch ($symbol) {
+ case '!' :
+ case '#' :
+ case 'disc' :
+ case 'disc' :
+ case 'circle' :
+ case 'square' :
+ case '1':
+ case 'decimal':
+ case 'decimal-leading-zero':
+ case 'i':
+ case 'lower-roman':
+ case 'I':
+ case 'upper-roman':
+ case 'a':
+ case 'lower-alpha':
+ case 'lower-latin':
+ case 'A':
+ case 'upper-alpha':
+ case 'upper-latin':
+ case 'lower-greek': {
+ $this->lisymbol = $symbol;
+ break;
+ }
+ default : {
+ $this->lisymbol = '';
+ }
+ }
+ }
+
+ /**
+ * Set the booklet mode for double-sided pages.
+ * @param boolean $booklet true set the booklet mode on, fals eotherwise.
+ * @param float $inner Inner page margin.
+ * @param float $outer Outer page margin.
+ * @access public
+ * @since 4.2.000 (2008-10-29)
+ */
+ public function SetBooklet($booklet=true, $inner=-1, $outer=-1) {
+ $this->booklet = $booklet;
+ if ($inner >= 0) {
+ $this->lMargin = $inner;
+ }
+ if ($outer >= 0) {
+ $this->rMargin = $outer;
+ }
+ }
+
+ /**
+ * Swap the left and right margins.
+ * @param boolean $reverse if true swap left and right margins.
+ * @access protected
+ * @since 4.2.000 (2008-10-29)
+ */
+ protected function swapMargins($reverse=true) {
+ if ($reverse) {
+ // swap left and right margins
+ $mtemp = $this->original_lMargin;
+ $this->original_lMargin = $this->original_rMargin;
+ $this->original_rMargin = $mtemp;
+ $deltam = $this->original_lMargin - $this->original_rMargin;
+ $this->lMargin += $deltam;
+ $this->rMargin -= $deltam;
+ }
+ }
+
+ /**
+ * Set the vertical spaces for HTML tags.
+ * The array must have the following structure (example):
+ * $tagvs = array('h1' => array(0 => array('h' => '', 'n' => 2), 1 => array('h' => 1.3, 'n' => 1)));
+ * The first array level contains the tag names,
+ * the second level contains 0 for opening tags or 1 for closing tags,
+ * the third level contains the vertical space unit (h) and the number spaces to add (n).
+ * If the h parameter is not specified, default values are used.
+ * @param array $tagvs array of tags and relative vertical spaces.
+ * @access public
+ * @since 4.2.001 (2008-10-30)
+ */
+ public function setHtmlVSpace($tagvs) {
+ $this->tagvspaces = $tagvs;
+ }
+
+ /**
+ * Set custom width for list indentation.
+ * @param float $width width of the indentation. Use negative value to disable it.
+ * @access public
+ * @since 4.2.007 (2008-11-12)
+ */
+ public function setListIndentWidth($width) {
+ return $this->customlistindent = floatval($width);
+ }
+
+ /**
+ * Set the top/bottom cell sides to be open or closed when the cell cross the page.
+ * @param boolean $isopen if true keeps the top/bottom border open for the cell sides that cross the page.
+ * @access public
+ * @since 4.2.010 (2008-11-14)
+ */
+ public function setOpenCell($isopen) {
+ $this->opencell = $isopen;
+ }
+
+ /**
+ * Set the color and font style for HTML links.
+ * @param array $color RGB array of colors
+ * @param string $fontstyle additional font styles to add
+ * @access public
+ * @since 4.4.003 (2008-12-09)
+ */
+ public function setHtmlLinksStyle($color=array(0,0,255), $fontstyle='U') {
+ $this->htmlLinkColorArray = $color;
+ $this->htmlLinkFontStyle = $fontstyle;
+ }
+
+ /**
+ * convert html string containing value and unit of measure to user's units or points.
+ * @param string $htmlval string containing values and unit
+ * @param string $refsize reference value in points
+ * @param string $defaultunit default unit (can be one of the following: %, em, ex, px, in, mm, pc, pt).
+ * @param boolean $point if true returns points, otherwise returns value in user's units
+ * @return float value in user's unit or point if $points=true
+ * @access public
+ * @since 4.4.004 (2008-12-10)
+ */
+ public function getHTMLUnitToUnits($htmlval, $refsize=1, $defaultunit='px', $points=false) {
+ $supportedunits = array('%', 'em', 'ex', 'px', 'in', 'cm', 'mm', 'pc', 'pt');
+ $retval = 0;
+ $value = 0;
+ $unit = 'px';
+ $k = $this->k;
+ if ($points) {
+ $k = 1;
+ }
+ if (in_array($defaultunit, $supportedunits)) {
+ $unit = $defaultunit;
+ }
+ if (is_numeric($htmlval)) {
+ $value = floatval($htmlval);
+ } elseif (preg_match('/([0-9\.]+)/', $htmlval, $mnum)) {
+ $value = floatval($mnum[1]);
+ if (preg_match('/([a-z%]+)/', $htmlval, $munit)) {
+ if (in_array($munit[1], $supportedunits)) {
+ $unit = $munit[1];
+ }
+ }
+ }
+ switch ($unit) {
+ // percentage
+ case '%': {
+ $retval = (($value * $refsize) / 100);
+ break;
+ }
+ // relative-size
+ case 'em': {
+ $retval = ($value * $refsize);
+ break;
+ }
+ case 'ex': {
+ $retval = $value * ($refsize / 2);
+ break;
+ }
+ // absolute-size
+ case 'in': {
+ $retval = ($value * $this->dpi) / $k;
+ break;
+ }
+ case 'cm': {
+ $retval = ($value / 2.54 * $this->dpi) / $k;
+ break;
+ }
+ case 'mm': {
+ $retval = ($value / 25.4 * $this->dpi) / $k;
+ break;
+ }
+ case 'pc': {
+ // one pica is 12 points
+ $retval = ($value * 12) / $k;
+ break;
+ }
+ case 'px':
+ case 'pt': {
+ $retval = $value / $k;
+ break;
+ }
+ }
+ return $retval;
+ }
+
+ /**
+ * Returns the Roman representation of an integer number
+ * @param int number to convert
+ * @return string roman representation of the specified number
+ * @access public
+ * @since 4.4.004 (2008-12-10)
+ */
+ public function intToRoman($number) {
+ $roman = '';
+ while ($number >= 1000) {
+ $roman .= 'M';
+ $number -= 1000;
+ }
+ while ($number >= 900) {
+ $roman .= 'CM';
+ $number -= 900;
+ }
+ while ($number >= 500) {
+ $roman .= 'D';
+ $number -= 500;
+ }
+ while ($number >= 400) {
+ $roman .= 'CD';
+ $number -= 400;
+ }
+ while ($number >= 100) {
+ $roman .= 'C';
+ $number -= 100;
+ }
+ while ($number >= 90) {
+ $roman .= 'XC';
+ $number -= 90;
+ }
+ while ($number >= 50) {
+ $roman .= 'L';
+ $number -= 50;
+ }
+ while ($number >= 40) {
+ $roman .= 'XL';
+ $number -= 40;
+ }
+ while ($number >= 10) {
+ $roman .= 'X';
+ $number -= 10;
+ }
+ while ($number >= 9) {
+ $roman .= 'IX';
+ $number -= 9;
+ }
+ while ($number >= 5) {
+ $roman .= 'V';
+ $number -= 5;
+ }
+ while ($number >= 4) {
+ $roman .= 'IV';
+ $number -= 4;
+ }
+ while ($number >= 1) {
+ $roman .= 'I';
+ --$number;
+ }
+ return $roman;
+ }
+
+ /**
+ * Output an HTML list bullet or ordered item symbol
+ * @param int $listdepth list nesting level
+ * @param string $listtype type of list
+ * @param float $size current font size
+ * @access protected
+ * @since 4.4.004 (2008-12-10)
+ */
+ protected function putHtmlListBullet($listdepth, $listtype='', $size=10) {
+ $size /= $this->k;
+ $fill = '';
+ $color = $this->fgcolor;
+ $width = 0;
+ $textitem = '';
+ $tmpx = $this->x;
+ $lspace = $this->GetStringWidth(' ');
+ if ($listtype == '!') {
+ // set default list type for unordered list
+ $deftypes = array('disc', 'circle', 'square');
+ $listtype = $deftypes[($listdepth - 1) % 3];
+ } elseif ($listtype == '#') {
+ // set default list type for ordered list
+ $listtype = 'decimal';
+ }
+ switch ($listtype) {
+ // unordered types
+ case 'none': {
+ break;
+ }
+ case 'disc': {
+ $fill = 'F';
+ }
+ case 'circle': {
+ $fill .= 'D';
+ $r = $size / 6;
+ $lspace += (2 * $r);
+ if ($this->rtl) {
+ $this->x += $lspace;
+ } else {
+ $this->x -= $lspace;
+ }
+ $this->Circle(($this->x + $r), ($this->y + ($this->lasth / 2)), $r, 0, 360, $fill, array('color'=>$color), $color, 8);
+ break;
+ }
+ case 'square': {
+ $l = $size / 3;
+ $lspace += $l;
+ if ($this->rtl) {
+ $this->x += $lspace;
+ } else {
+ $this->x -= $lspace;
+ }
+ $this->Rect($this->x, ($this->y + (($this->lasth - $l)/ 2)), $l, $l, 'F', array(), $color);
+ break;
+ }
+ // ordered types
+
+ // $this->listcount[$this->listnum];
+ // $textitem
+ case '1':
+ case 'decimal': {
+ $textitem = $this->listcount[$this->listnum];
+ break;
+ }
+ case 'decimal-leading-zero': {
+ $textitem = sprintf("%02d", $this->listcount[$this->listnum]);
+ break;
+ }
+ case 'i':
+ case 'lower-roman': {
+ $textitem = strtolower($this->intToRoman($this->listcount[$this->listnum]));
+ break;
+ }
+ case 'I':
+ case 'upper-roman': {
+ $textitem = $this->intToRoman($this->listcount[$this->listnum]);
+ break;
+ }
+ case 'a':
+ case 'lower-alpha':
+ case 'lower-latin': {
+ $textitem = chr(97 + $this->listcount[$this->listnum] - 1);
+ break;
+ }
+ case 'A':
+ case 'upper-alpha':
+ case 'upper-latin': {
+ $textitem = chr(65 + $this->listcount[$this->listnum] - 1);
+ break;
+ }
+ case 'lower-greek': {
+ $textitem = $this->unichr(945 + $this->listcount[$this->listnum] - 1);
+ break;
+ }
+ /*
+ // Types to be implemented (special handling)
+ case 'hebrew': {
+ break;
+ }
+ case 'armenian': {
+ break;
+ }
+ case 'georgian': {
+ break;
+ }
+ case 'cjk-ideographic': {
+ break;
+ }
+ case 'hiragana': {
+ break;
+ }
+ case 'katakana': {
+ break;
+ }
+ case 'hiragana-iroha': {
+ break;
+ }
+ case 'katakana-iroha': {
+ break;
+ }
+ */
+ default: {
+ $textitem = $this->listcount[$this->listnum];
+ }
+ }
+ if (!empty($textitem)) {
+ // print ordered item
+ if ($this->rtl) {
+ $textitem = '.'.$textitem;
+ } else {
+ $textitem = $textitem.'.';
+ }
+ $lspace += $this->GetStringWidth($textitem);
+ if ($this->rtl) {
+ $this->x += $lspace;
+ } else {
+ $this->x -= $lspace;
+ }
+ $this->Write($this->lasth, $textitem, '', false, '', false, 0, false);
+ }
+ $this->x = $tmpx;
+ $this->lispacer = '';
+ }
+
+ /**
+ * Returns current graphic variables as array.
+ * @return array graphic variables
+ * @access protected
+ * @since 4.2.010 (2008-11-14)
+ */
+ protected function getGraphicVars() {
+ $grapvars = array(
+ 'FontFamily' => $this->FontFamily,
+ 'FontStyle' => $this->FontStyle,
+ 'FontSizePt' => $this->FontSizePt,
+ 'rMargin' => $this->rMargin,
+ 'lMargin' => $this->lMargin,
+ 'cMargin' => $this->cMargin,
+ 'LineWidth' => $this->LineWidth,
+ 'linestyleWidth' => $this->linestyleWidth,
+ 'linestyleCap' => $this->linestyleCap,
+ 'linestyleJoin' => $this->linestyleJoin,
+ 'linestyleDash' => $this->linestyleDash,
+ 'DrawColor' => $this->DrawColor,
+ 'FillColor' => $this->FillColor,
+ 'TextColor' => $this->TextColor,
+ 'ColorFlag' => $this->ColorFlag,
+ 'bgcolor' => $this->bgcolor,
+ 'fgcolor' => $this->fgcolor,
+ 'htmlvspace' => $this->htmlvspace,
+ 'lasth' => $this->lasth
+ );
+ return $grapvars;
+ }
+
+ /**
+ * Set graphic variables.
+ * @param $gvars array graphic variables
+ * @access protected
+ * @since 4.2.010 (2008-11-14)
+ */
+ protected function setGraphicVars($gvars) {
+ $this->FontFamily = $gvars['FontFamily'];
+ $this->FontStyle = $gvars['FontStyle'];
+ $this->FontSizePt = $gvars['FontSizePt'];
+ $this->rMargin = $gvars['rMargin'];
+ $this->lMargin = $gvars['lMargin'];
+ $this->cMargin = $gvars['cMargin'];
+ $this->LineWidth = $gvars['LineWidth'];
+ $this->linestyleWidth = $gvars['linestyleWidth'];
+ $this->linestyleCap = $gvars['linestyleCap'];
+ $this->linestyleJoin = $gvars['linestyleJoin'];
+ $this->linestyleDash = $gvars['linestyleDash'];
+ $this->DrawColor = $gvars['DrawColor'];
+ $this->FillColor = $gvars['FillColor'];
+ $this->TextColor = $gvars['TextColor'];
+ $this->ColorFlag = $gvars['ColorFlag'];
+ $this->bgcolor = $gvars['bgcolor'];
+ $this->fgcolor = $gvars['fgcolor'];
+ $this->htmlvspace = $gvars['htmlvspace'];
+ //$this->lasth = $gvars['lasth'];
+ $this->_out(''.$this->linestyleWidth.' '.$this->linestyleCap.' '.$this->linestyleJoin.' '.$this->linestyleDash.' '.$this->DrawColor.' '.$this->FillColor.'');
+ if (!empty($this->FontFamily)) {
+ $this->SetFont($this->FontFamily, $this->FontStyle, $this->FontSizePt);
+ }
+ }
+
+ /**
+ * Returns a temporary filename for caching object on filesystem.
+ * @param string $prefix prefix to add to filename
+ * return string filename.
+ * @access protected
+ * @since 4.5.000 (2008-12-31)
+ */
+ protected function getObjFilename($name) {
+ return tempnam(K_PATH_CACHE, $name.'_');
+ }
+
+ /**
+ * Writes data to a temporary file on filesystem.
+ * @param string $file file name
+ * @param mixed $data data to write on file
+ * @param boolean $append if true append data, false replace.
+ * @access protected
+ * @since 4.5.000 (2008-12-31)
+ */
+ protected function writeDiskCache($filename, $data, $append=false) {
+ if ($append) {
+ $fmode = 'ab+';
+ } else {
+ $fmode = 'wb+';
+ }
+ $f = @fopen($filename, $fmode);
+ if (!$f) {
+ $this->Error('Unable to write cache file: '.$filename);
+ } else {
+ fwrite($f, $data);
+ fclose($f);
+ }
+ // update file lenght (needed for transactions)
+ if (!isset($this->cache_file_lenght[$filename])) {
+ $this->cache_file_lenght[$filename] = strlen($data);
+ } else {
+ $this->cache_file_lenght[$filename] += strlen($data);
+ }
+ }
+
+ /**
+ * Read data from a temporary file on filesystem.
+ * @param string $file file name
+ * @return mixed retrieved data
+ * @access protected
+ * @since 4.5.000 (2008-12-31)
+ */
+ protected function readDiskCache($filename) {
+ return file_get_contents($filename);
+ }
+
+ /**
+ * Set buffer content (always append data).
+ * @param string $data data
+ * @access protected
+ * @since 4.5.000 (2009-01-02)
+ */
+ protected function setBuffer($data) {
+ $this->bufferlen += strlen($data);
+ if ($this->diskcache) {
+ if (!isset($this->buffer) OR empty($this->buffer)) {
+ $this->buffer = $this->getObjFilename('buffer');
+ }
+ $this->writeDiskCache($this->buffer, $data, true);
+ } else {
+ $this->buffer .= $data;
+ }
+ }
+
+ /**
+ * Get buffer content.
+ * @return string buffer content
+ * @access protected
+ * @since 4.5.000 (2009-01-02)
+ */
+ protected function getBuffer() {
+ if ($this->diskcache) {
+ return $this->readDiskCache($this->buffer);
+ } else {
+ return $this->buffer;
+ }
+ }
+
+ /**
+ * Set page buffer content.
+ * @param int $page page number
+ * @param string $data page data
+ * @param boolean $append if true append data, false replace.
+ * @access protected
+ * @since 4.5.000 (2008-12-31)
+ */
+ protected function setPageBuffer($page, $data, $append=false) {
+ if ($this->diskcache) {
+ if (!isset($this->pages[$page])) {
+ $this->pages[$page] = $this->getObjFilename('page'.$page);
+ }
+ $this->writeDiskCache($this->pages[$page], $data, $append);
+ } else {
+ if ($append) {
+ $this->pages[$page] .= $data;
+ } else {
+ $this->pages[$page] = $data;
+ }
+ }
+ if ($append AND isset($this->pagelen[$page])) {
+ $this->pagelen[$page] += strlen($data);
+ } else {
+ $this->pagelen[$page] = strlen($data);
+ }
+ }
+
+ /**
+ * Get page buffer content.
+ * @param int $page page number
+ * @return string page buffer content or false in case of error
+ * @access protected
+ * @since 4.5.000 (2008-12-31)
+ */
+ protected function getPageBuffer($page) {
+ if ($this->diskcache) {
+ return $this->readDiskCache($this->pages[$page]);
+ } elseif (isset($this->pages[$page])) {
+ return $this->pages[$page];
+ }
+ return false;
+ }
+
+ /**
+ * Set image buffer content.
+ * @param string $image image key
+ * @param array $data image data
+ * @access protected
+ * @since 4.5.000 (2008-12-31)
+ */
+ protected function setImageBuffer($image, $data) {
+ if ($this->diskcache) {
+ if (!isset($this->images[$image])) {
+ $this->images[$image] = $this->getObjFilename('image'.$image);
+ }
+ $this->writeDiskCache($this->images[$image], serialize($data));
+ } else {
+ $this->images[$image] = $data;
+ }
+ if (!in_array($image, $this->imagekeys)) {
+ $this->imagekeys[] = $image;
+ }
+ ++$this->numimages;
+ }
+
+ /**
+ * Set image buffer content.
+ * @param string $image image key
+ * @param string $key image sub-key
+ * @param array $data image data
+ * @access protected
+ * @since 4.5.000 (2008-12-31)
+ */
+ protected function setImageSubBuffer($image, $key, $data) {
+ if (!isset($this->images[$image])) {
+ $this->setImageBuffer($image, array());
+ }
+ if ($this->diskcache) {
+ $tmpimg = $this->getImageBuffer($image);
+ $tmpimg[$key] = $data;
+ $this->writeDiskCache($this->images[$image], serialize($tmpimg));
+ } else {
+ $this->images[$image][$key] = $data;
+ }
+ }
+
+ /**
+ * Get page buffer content.
+ * @param string $image image key
+ * @return string image buffer content or false in case of error
+ * @access protected
+ * @since 4.5.000 (2008-12-31)
+ */
+ protected function getImageBuffer($image) {
+ if ($this->diskcache AND isset($this->images[$image])) {
+ return unserialize($this->readDiskCache($this->images[$image]));
+ } elseif (isset($this->images[$image])) {
+ return $this->images[$image];
+ }
+ return false;
+ }
+
+ /**
+ * Set font buffer content.
+ * @param string $font font key
+ * @param array $data font data
+ * @access protected
+ * @since 4.5.000 (2009-01-02)
+ */
+ protected function setFontBuffer($font, $data) {
+ if ($this->diskcache) {
+ if (!isset($this->fonts[$font])) {
+ $this->fonts[$font] = $this->getObjFilename('font');
+ }
+ $this->writeDiskCache($this->fonts[$font], serialize($data));
+ } else {
+ $this->fonts[$font] = $data;
+ }
+ if (!in_array($font, $this->fontkeys)) {
+ $this->fontkeys[] = $font;
+ }
+ }
+
+ /**
+ * Set font buffer content.
+ * @param string $font font key
+ * @param string $key font sub-key
+ * @param array $data font data
+ * @access protected
+ * @since 4.5.000 (2009-01-02)
+ */
+ protected function setFontSubBuffer($font, $key, $data) {
+ if (!isset($this->fonts[$font])) {
+ $this->setFontBuffer($font, array());
+ }
+ if ($this->diskcache) {
+ $tmpfont = $this->getFontBuffer($font);
+ $tmpfont[$key] = $data;
+ $this->writeDiskCache($this->fonts[$font], serialize($tmpfont));
+ } else {
+ $this->fonts[$font][$key] = $data;
+ }
+ }
+
+ /**
+ * Get font buffer content.
+ * @param string $font font key
+ * @return string font buffer content or false in case of error
+ * @access protected
+ * @since 4.5.000 (2009-01-02)
+ */
+ protected function getFontBuffer($font) {
+ if ($this->diskcache AND isset($this->fonts[$font])) {
+ return unserialize($this->readDiskCache($this->fonts[$font]));
+ } elseif (isset($this->fonts[$font])) {
+ return $this->fonts[$font];
+ }
+ return false;
+ }
+
+ /**
+ * Move a page to a previous position.
+ * Use this method just before Output().
+ * @param int $frompage number of the source page
+ * @param int $topage number of the destination page (must be less than $frompage)
+ * @return true in case of success, false in case of error.
+ * @access public
+ * @since 4.5.000 (2009-01-02)
+ */
+ public function movePage($frompage, $topage) {
+ if (($frompage > $this->numpages) OR ($frompage <= $topage)) {
+ return false;
+ }
+ if ($frompage == $this->page) {
+ // close the page before moving it
+ $this->endPage();
+ }
+ // move all page-related states
+ $tmppage = $this->pages[$frompage];
+ $tmppagedim = $this->pagedim[$frompage];
+ $tmppagelen = $this->pagelen[$frompage];
+ $tmpintmrk = $this->intmrk[$frompage];
+ if (isset($this->footerpos[$frompage])) {
+ $tmpfooterpos = $this->footerpos[$frompage];
+ }
+ if (isset($this->footerlen[$frompage])) {
+ $tmpfooterlen = $this->footerlen[$frompage];
+ }
+ if (isset($this->transfmrk[$frompage])) {
+ $tmptransfmrk = $this->transfmrk[$frompage];
+ }
+ if (isset($this->PageAnnots[$frompage])) {
+ $tmpannots = $this->PageAnnots[$frompage];
+ }
+ if (isset($this->newpagegroup[$frompage])) {
+ $tmpnewpagegroup = $this->newpagegroup[$frompage];
+ }
+ for ($i = $frompage; $i > $topage; $i--) {
+ // shift pages down
+ $this->pages[$i] = $this->pages[($i - 1)];
+ $this->pagedim[$i] = $this->pagedim[($i - 1)];
+ $this->pagelen[$i] = $this->pagelen[($i - 1)];
+ $this->intmrk[$i] = $this->intmrk[($i - 1)];
+ if (isset($this->footerpos[($i - 1)])) {
+ $this->footerpos[$i] = $this->footerpos[($i - 1)];
+ } elseif (isset($this->footerpos[$i])) {
+ unset($this->footerpos[$i]);
+ }
+ if (isset($this->footerlen[($i - 1)])) {
+ $this->footerlen[$i] = $this->footerlen[($i - 1)];
+ } elseif (isset($this->footerlen[$i])) {
+ unset($this->footerlen[$i]);
+ }
+ if (isset($this->transfmrk[($i - 1)])) {
+ $this->transfmrk[$i] = $this->transfmrk[($i - 1)];
+ } elseif (isset($this->transfmrk[$i])) {
+ unset($this->transfmrk[$i]);
+ }
+ if (isset($this->PageAnnots[($i - 1)])) {
+ $this->PageAnnots[$i] = $this->PageAnnots[($i - 1)];
+ } elseif (isset($this->PageAnnots[$i])) {
+ unset($this->PageAnnots[$i]);
+ }
+ if (isset($this->newpagegroup[($i - 1)])) {
+ $this->newpagegroup[$i] = $this->newpagegroup[($i - 1)];
+ } elseif (isset($this->newpagegroup[$i])) {
+ unset($this->newpagegroup[$i]);
+ }
+ }
+ $this->pages[$topage] = $tmppage;
+ $this->pagedim[$topage] = $tmppagedim;
+ $this->pagelen[$topage] = $tmppagelen;
+ $this->intmrk[$topage] = $tmpintmrk;
+ if (isset($tmpfooterpos)) {
+ $this->footerpos[$topage] = $tmpfooterpos;
+ } elseif (isset($this->footerpos[$topage])) {
+ unset($this->footerpos[$topage]);
+ }
+ if (isset($tmpfooterlen)) {
+ $this->footerlen[$topage] = $tmpfooterlen;
+ } elseif (isset($this->footerlen[$topage])) {
+ unset($this->footerlen[$topage]);
+ }
+ if (isset($tmptransfmrk)) {
+ $this->transfmrk[$topage] = $tmptransfmrk;
+ } elseif (isset($this->transfmrk[$topage])) {
+ unset($this->transfmrk[$topage]);
+ }
+ if (isset($tmpannots)) {
+ $this->PageAnnots[$topage] = $tmpannots;
+ } elseif (isset($this->PageAnnots[$topage])) {
+ unset($this->PageAnnots[$topage]);
+ }
+ if (isset($tmpnewpagegroup)) {
+ $this->newpagegroup[$topage] = $tmpnewpagegroup;
+ } elseif (isset($this->newpagegroup[$topage])) {
+ unset($this->newpagegroup[$topage]);
+ }
+ // adjust outlines
+ $tmpoutlines = $this->outlines;
+ foreach ($tmpoutlines as $key => $outline) {
+ if (($outline['p'] >= $topage) AND ($outline['p'] < $frompage)) {
+ $this->outlines[$key]['p'] = $outline['p'] + 1;
+ } elseif ($outline['p'] == $frompage) {
+ $this->outlines[$key]['p'] = $topage;
+ }
+ }
+ // adjust links
+ $tmplinks = $this->links;
+ foreach ($tmplinks as $key => $link) {
+ if (($link[0] >= $topage) AND ($link[0] < $frompage)) {
+ $this->links[$key][0] = $link[0] + 1;
+ } elseif ($link[0] == $frompage) {
+ $this->links[$key][0] = $topage;
+ }
+ }
+ // adjust javascript
+ $tmpjavascript = $this->javascript;
+ global $jfrompage, $jtopage;
+ $jfrompage = $frompage;
+ $jtopage = $topage;
+ $this->javascript = preg_replace_callback('/this\.addField\(\'([^\']*)\',\'([^\']*)\',([0-9]+)/',
+ create_function('$matches', 'global $jfrompage, $jtopage;
+ $pagenum = intval($matches[3]) + 1;
+ if (($pagenum >= $jtopage) AND ($pagenum < $jfrompage)) {
+ $newpage = ($pagenum + 1);
+ } elseif ($pagenum == $jfrompage) {
+ $newpage = $jtopage;
+ } else {
+ $newpage = $pagenum;
+ }
+ --$newpage;
+ return "this.addField(\'".$matches[1]."\',\'".$matches[2]."\',".$newpage."";'), $tmpjavascript);
+ // return to last page
+ $this->lastPage(true);
+ return true;
+ }
+
+ /**
+ * Output a Table of Content Index (TOC).
+ * You can override this method to achieve different styles.
+ * @param int $page page number where this TOC should be inserted (leave empty for current page).
+ * @param string $numbersfont set the font for page numbers (please use monospaced font for better alignment).
+ * @param string $filler string used to fill the space between text and page number.
+ * @access public
+ * @author Nicola Asuni
+ * @since 4.5.000 (2009-01-02)
+ */
+ public function addTOC($page='', $numbersfont='', $filler='.') {
+ $fontsize = $this->FontSizePt;
+ $fontfamily = $this->FontFamily;
+ $fontstyle = $this->FontStyle;
+ $w = $this->w - $this->lMargin - $this->rMargin;
+ $spacer = $this->GetStringWidth(' ') * 4;
+ $page_first = $this->getPage();
+ $lmargin = $this->lMargin;
+ $rmargin = $this->rMargin;
+ $x_start = $this->GetX();
+ if (empty($numbersfont)) {
+ $numbersfont = $this->default_monospaced_font;
+ }
+ if (empty($filler)) {
+ $filler = ' ';
+ }
+ if (empty($page)) {
+ $gap = ' ';
+ } else {
+ $gap = '';
+ }
+ foreach ($this->outlines as $key => $outline) {
+ if ($this->rtl) {
+ $aligntext = 'R';
+ $alignnum = 'L';
+ } else {
+ $aligntext = 'L';
+ $alignnum = 'R';
+ }
+ if ($outline['l'] == 0) {
+ $this->SetFont($fontfamily, $fontstyle.'B', $fontsize);
+ } else {
+ $this->SetFont($fontfamily, $fontstyle, $fontsize - $outline['l']);
+ }
+ $indent = ($spacer * $outline['l']);
+ if ($this->rtl) {
+ $this->rMargin += $indent;
+ $this->x -= $indent;
+ } else {
+ $this->lMargin += $indent;
+ $this->x += $indent;
+ }
+ $link = $this->AddLink();
+ $this->SetLink($link, 0, $outline['p']);
+ // write the text
+ $this->Write(0, $outline['t'], $link, 0, $aligntext, false, 0, false, false, 0);
+ $this->SetFont($numbersfont, $fontstyle, $fontsize);
+ if (empty($page)) {
+ $pagenum = $outline['p'];
+ } else {
+ // placemark to be replaced with the correct number
+ $pagenum = '{#'.($outline['p']).'}';
+ if (($this->CurrentFont['type'] == 'TrueTypeUnicode') OR ($this->CurrentFont['type'] == 'cidfont0')) {
+ $pagenum = '{'.$pagenum.'}';
+ }
+ }
+ $numwidth = $this->GetStringWidth($pagenum);
+ if ($this->rtl) {
+ $tw = $this->x - $this->lMargin;
+ } else {
+ $tw = $this->w - $this->rMargin - $this->x;
+ }
+ $fw = $tw - $numwidth - $this->GetStringWidth(' ');
+ $numfills = floor($fw / $this->GetStringWidth($filler));
+ if ($numfills > 0) {
+ $rowfill = str_repeat($filler, $numfills);
+ } else {
+ $rowfill = '';
+ }
+ if ($this->rtl) {
+ $pagenum = $pagenum.$gap.$rowfill.' ';
+ } else {
+ $pagenum = ' '.$rowfill.$gap.$pagenum;
+ }
+ // write the number
+ //$this->SetX($x_start);
+ $this->Cell($tw, 0, $pagenum, 0, 1, $alignnum, 0, $link, 0);
+ $this->SetX($x_start);
+ $this->lMargin = $lmargin;
+ $this->rMargin = $rmargin;
+ }
+ $page_last = $this->getPage();
+ $numpages = $page_last - $page_first + 1;
+ if (!empty($page)) {
+ for($p = $page_first; $p <= $page_last; ++$p) {
+ // get page data
+ $temppage = $this->getPageBuffer($p);
+ for($n = 1; $n <= $this->numpages; ++$n) {
+ // update page numbers
+ $k = '{#'.$n.'}';
+ $ku = '{'.$k.'}';
+ $alias_a = $this->_escape($k);
+ $alias_au = $this->_escape('{'.$k.'}');
+ if ($this->isunicode) {
+ $alias_b = $this->_escape($this->UTF8ToLatin1($k));
+ $alias_bu = $this->_escape($this->UTF8ToLatin1($ku));
+ $alias_c = $this->_escape($this->utf8StrRev($k, false, $this->tmprtl));
+ $alias_cu = $this->_escape($this->utf8StrRev($ku, false, $this->tmprtl));
+ }
+ if ($n >= $page) {
+ $np = $n + $numpages;
+ } else {
+ $np = $n;
+ }
+ $ns = $this->formatTOCPageNumber($np);
+ $nu = $ns;
+ $sdiff = strlen($k) - strlen($ns) - 1;
+ $sdiffu = strlen($ku) - strlen($ns) - 1;
+ $sfill = str_repeat($filler, $sdiff);
+ $sfillu = str_repeat($filler, $sdiffu);
+ if ($this->rtl) {
+ $ns = $ns.' '.$sfill;
+ $nu = $nu.' '.$sfillu;
+ } else {
+ $ns = $sfill.' '.$ns;
+ $nu = $sfillu.' '.$nu;
+ }
+ $nu = $this->UTF8ToUTF16BE($nu, false);
+ $temppage = str_replace($alias_au, $nu, $temppage);
+ if ($this->isunicode) {
+ $temppage = str_replace($alias_bu, $nu, $temppage);
+ $temppage = str_replace($alias_cu, $nu, $temppage);
+ $temppage = str_replace($alias_b, $ns, $temppage);
+ $temppage = str_replace($alias_c, $ns, $temppage);
+ }
+ $temppage = str_replace($alias_a, $ns, $temppage);
+ }
+ // save changes
+ $this->setPageBuffer($p, $temppage);
+ }
+ // move pages
+ for ($i = 0; $i < $numpages; ++$i) {
+ $this->movePage($page_last, $page);
+ }
+ }
+ $this->SetFont($fontfamily, $fontstyle, $fontsize);
+ }
+
+ /**
+ * Stores a copy of the current TCPDF object.
+ * @access public
+ * @since 4.5.029 (2009-03-19)
+ */
+ public function startTransaction() {
+ if (isset($this->objcopy)) {
+ // remove previous copy
+ $this->commitTransaction();
+ }
+ // clone current object
+ $this->objcopy = $this->objclone($this);
+ }
+
+ /**
+ * Delete the copy of the current TCPDF object
+ * @access public
+ * @since 4.5.029 (2009-03-19)
+ */
+ public function commitTransaction() {
+ if (isset($this->objcopy)) {
+ $this->objcopy->_destroy(true, true);
+ unset($this->objcopy);
+ }
+ }
+
+ /**
+ * This method allows to encapsulate some TCPDF commands to be later commited or deleted.
+ * @param string $action the action to be taken. Legal values are 'start' = starts a new transaction; 'commit' = commit the latest transaction; 'rollback' = undo the latest transaction.
+ * @access public
+ * @since 4.5.029 (2009-03-19)
+ */
+ public function rollbackTransaction() {
+ if (isset($this->objcopy)) {
+ if (isset($this->objcopy->diskcache) AND $this->objcopy->diskcache) {
+ // truncate files to previous values
+ foreach ($this->objcopy->cache_file_lenght as $file => $lenght) {
+ $handle = fopen($file, 'r+');
+ ftruncate($handle, $lenght);
+ }
+ }
+ $this->_destroy(true, true);
+ return $this->objcopy;
+ }
+ return $this;
+ }
+
+ /**
+ * Creates a copy of a class object
+ * @param object $object class object to be cloned
+ * @return cloned object
+ * @access protected
+ * @since 4.5.029 (2009-03-19)
+ */
+ public function objclone($object) {
+ return @clone($object);
+ }
+
+ } // END OF TCPDF CLASS
+}
+//============================================================+
+// END OF FILE
+//============================================================+
+?>
diff --git a/admin/exportclases/class.xls.php b/admin/exportclases/class.xls.php
new file mode 100644
index 0000000..ddea66e
--- /dev/null
+++ b/admin/exportclases/class.xls.php
@@ -0,0 +1,35 @@
+<?php
+
+include_once('../../settings.php');
+include_once('../../function.php');
+//include_once('class.xls.php');
+include_once('../../vendor/autoload.php');
+
+class xls {
+
+ private $xls_string = '';
+ private $row = 0;
+ private $col = 0;
+ private $filename = '';
+
+ function __construct($filename = false) {
+ if ($filename) {
+ $this->filename = $this->check_extension($filename);
+ } else {
+ $this->filename = 'XLS_download_' . date('dmY') . '.xls';
+ }
+ }
+
+
+ function display($filename, $output) {
+
+ header('Content-type: application/vnd.ms-excel; charset=windows-1250');
+ header('Content-Disposition: attachment; filename="'.$filename.'"');
+
+ echo $output;
+
+ exit;
+ }
+}
+
+?> \ No newline at end of file
diff --git a/admin/exportclases/class.xlsIzvozAnalizaBreak.php b/admin/exportclases/class.xlsIzvozAnalizaBreak.php
new file mode 100644
index 0000000..1ad3a87
--- /dev/null
+++ b/admin/exportclases/class.xlsIzvozAnalizaBreak.php
@@ -0,0 +1,1189 @@
+<?php
+
+ global $site_path;
+
+ include_once('../../function.php');
+ include_once('../survey/definition.php');
+ include_once('../exportclases/class.xls.php');
+
+
+/** Class za generacijo xls-ja
+ *
+ */
+class XlsIzvozAnalizaBreak {
+
+ var $anketa; // trenutna anketa
+
+ public $breakClass = null; // break class
+ public $crosstabClass = null; // crosstab class
+
+ var $spr = 0; // spremenljivka za katero delamo razbitje
+ var $seq; // sekvenca
+
+ var $break_percent; // opcija za odstotke
+
+ var $sessionData; // podatki ki so bili prej v sessionu - za nastavitve, ki se prenasajo v izvoze...
+
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null, $podstran = 'break')
+ {
+ global $site_path;
+ global $global_user_id;
+ global $output;
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) )
+ {
+ $this->anketa['id'] = $anketa;
+
+ // create new XLS document
+ $this->xls = new xls();
+ }
+ else
+ {
+ return false;
+ }
+
+ $_GET['a'] = A_ANALYSIS;
+
+ // preberemo nastavitve iz baze (prej v sessionu)
+ SurveyUserSession::Init($this->anketa['id']);
+ $this->sessionData = SurveyUserSession::getData('break');
+
+ // ustvarimo break objekt
+ $this->breakClass = new SurveyBreak($anketa);
+ $this->spr = $this->sessionData['spr'];
+ # poiÅ¡Äemo sekvenco
+ $this->seq = $this->sessionData['seq'];
+
+ $this->break_percent = (isset($this->sessionData['break_percent']) && $this->sessionData['break_percent'] == false) ? false : true;
+
+ if ( SurveyInfo::getInstance()->SurveyInit($this->anketa['id']) && $this->init())
+ {
+ $this->anketa['uid'] = $global_user_id;
+ SurveyUserSetting::getInstance()->Init($this->anketa['id'], $this->anketa['uid']);
+ }
+ else
+ return false;
+
+ return true;
+ }
+
+ // SETTERS && GETTERS
+
+ function getFile($fileName)
+ {
+ //Close and output rtf document
+ $output = $this->createXls();
+ $this->xls->display($fileName, $output);
+ }
+
+
+ function init()
+ {
+ return true;
+ }
+
+ function encodeText($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace(array("&scaron;","&#353;","&#269;"),array("Å¡","Å¡","Ä"),$text);
+ return strip_tags($text);
+ }
+
+ function createXls()
+ {
+ global $site_path;
+ global $lang;
+ global $output;
+
+ $convertTypes = array('charSet' => "windows-1250",
+ 'delimit' => ";",
+ 'newLine' => "\n",
+ 'BOMchar' => "\xEF\xBB\xBF");
+
+ $output = $convertTypes['BOMchar'];
+
+ $output .= '<table border="0"><tr><td colspan="10"><font size="3"><b>'.$lang['export_analisys_break'].'</b></font></td></tr></table>';
+
+ $output .= '<table border="0"><tr><td></td></tr></table>';
+
+ if ($this->spr != 0){
+ # poiÅ¡Äemo pripadajoÄe variable
+ $_spr_data = $this->breakClass->_HEADERS[$this->spr];
+
+ # poiÅ¡Äemo opcije
+ $options = $_spr_data['options'];
+
+ # za vsako opcijo posebej izraÄunamo povpreÄja za vse spremenljivke
+ $frequencys = null;
+ if (count($options) > 0) {
+ foreach ($options as $okey => $option) {
+
+ # zloopamo skozi variable
+ $okeyfrequencys = $this->breakClass->getAllFrequencys($okey, $this->seq, $this->spr);
+ if ($okeyfrequencys != null) {
+ if ($frequencys == null) {
+ $frequencys = array();
+ }
+ $frequencys[$okey] = $okeyfrequencys;
+ }
+ }
+ }
+ $this->displayBreak($this->spr,$frequencys);
+
+ } else {
+ $output .= '<table border="0"><tr><td>'.$lang['srv_break_error_note_1'].'</td></tr></table>';
+ }
+
+ return $output;
+ }
+
+ function displayBreak($forSpr, $frequencys) {
+
+ # Äe ne uporabljamo privzetega Äasovnega profila izpiÅ¡emo opozorilo
+ //SurveyTimeProfiles :: printIsDefaultProfile(false);
+
+ # Äe imamo filter ifov ga izpiÅ¡emo
+ //SurveyConditionProfiles:: getConditionString();
+
+ # Äe imamo filter spremenljivk ga izpiÅ¡emo
+ //SurveyVariablesProfiles:: getProfileString(true);
+ //SurveyDataSettingProfiles :: getVariableTypeNote();
+
+ # Äe rekodiranje
+ //$SR = new SurveyRecoding($this->anketa);
+ //$SR -> getProfileString();
+
+ # filtriranje po spremenljivkah
+ $_FILTRED_VARIABLES = SurveyVariablesProfiles::getProfileVariables(SurveyVariablesProfiles::checkDefaultProfile(), true);
+
+
+ foreach ($this->breakClass->_HEADERS AS $skey => $spremenljivka) {
+
+ $spremenljivka['id'] = $skey;
+ $tip = $spremenljivka['tip'];
+ if ( is_numeric($tip)
+ && $tip != 4 #text
+ && $tip != 5 #label
+ && $tip != 8 #datum
+ && $tip != 9 #SN-imena
+ && $tip != 19 #multitext
+ && $tip != 21 #besedilo*
+ && ( count($_FILTRED_VARIABLES) == 0 || (count($_FILTRED_VARIABLES) > 0 && isset($_FILTRED_VARIABLES[$skey]) ))
+ ) {
+
+ $this->displayBreakSpremenljivka($forSpr,$frequencys,$spremenljivka);
+ } else if ( is_numeric($tip)
+ && (
+ $tip == 4 #text
+ || $tip == 19 #multitext
+ || $tip == 21 #besedilo*
+ || $tip == 20 #multi numer*
+ ) && ( count($_FILTRED_VARIABLES) == 0 || (count($_FILTRED_VARIABLES) > 0 && isset($_FILTRED_VARIABLES[$skey]) ) )
+ ) {
+ $this->displayBreakSpremenljivka($forSpr,$frequencys,$spremenljivka);
+ }
+ }
+ }
+
+ function displayBreakSpremenljivka($forSpr,$frequencys,$spremenljivka) {
+ $tip = $spremenljivka['tip'];
+ $skala = $spremenljivka['skala'];
+ if ($forSpr != $spremenljivka['id']) {
+ switch ($tip) {
+ # radio, dropdown
+ case 1:
+ case 3:
+ $this->displayCrosstabs($forSpr,$frequencys,$spremenljivka);
+ break;
+ #multigrid
+ case 6:
+ if ($spremenljivka['skala'] == 0) {
+ $this->displayBreakTableMgrid($forSpr,$frequencys,$spremenljivka);
+ } else {
+ $this->displayCrosstabs($forSpr,$frequencys,$spremenljivka);
+ }
+ break;
+ # checkbox
+ case 2:
+ $this->displayCrosstabs($forSpr,$frequencys,$spremenljivka);
+ break;
+ #number
+ case 7:
+ #ranking
+ case 17:
+ #vsota
+ case 18:
+ #multinumber
+ case 20:
+ $this->displayBreakTableNumber($forSpr,$frequencys,$spremenljivka);
+ break ;
+ case 19:
+ $this->displayBreakTableText($forSpr,$frequencys,$spremenljivka);
+ break ;
+ #multicheck
+ case 16:
+ $this->displayCrosstabs($forSpr,$frequencys,$spremenljivka);
+ break;
+ case 4:
+
+ case 21:
+ $this->displayCrosstabs($forSpr,$frequencys,$spremenljivka);
+ break;
+ default:
+ $this->displayCrosstabs($forSpr,$frequencys,$spremenljivka);
+ break;
+ }
+ }
+ }
+
+ function displayBreakTableMgrid($forSpr,$frequencys,$spremenljivka) {
+ global $lang;
+ global $output;
+
+ $keysCount = count($frequencys);
+ $sequences = explode('_',$spremenljivka['sequences']);
+ $forSpremenljivka = $this->breakClass->_HEADERS[$forSpr];
+ $tip = $spremenljivka['tip'];
+
+ # izraÄunamo povpreÄja za posamezne sekvence
+ $means = array();
+ $totalMeans = array();
+ $totalFreq = array();
+ foreach ($frequencys AS $fkey => $fkeyFrequency) {
+ foreach ($sequences AS $sequence) {
+ $means[$fkey][$sequence] = $this->breakClass->getMeansFromKey($fkeyFrequency[$sequence]);
+ }
+ }
+
+ $rowspan = 'rowspan="3"';
+ $colspan = 'colspan="'.count($sequences).'"';
+
+
+ # Äe ni multicheck in multi grid
+ $output .= '<table border="1">';
+
+ $output .= '<tr>';
+ $output .= '<td align="center"'.$rowspan.'>';
+ $output .= '<b>'.$forSpremenljivka['naslov'];
+ $output .= '('.$forSpremenljivka['variable'].')</b>';
+ $output .= '</td>';
+ $output .= '<td align="center"'.$colspan.'>';
+ $output .= '<b>'.$spremenljivka['naslov'];
+ $output .= '('.$spremenljivka['variable'].')</b>';
+ $output .= '</td>';
+ $output .= '</tr>';
+
+ $output .= '<tr>';
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $output .= '<td align="center">';
+ $output .= $variable['naslov'];
+ $output .= '('.$variable['variable'].')';
+ $output .= '</td>';
+ }
+ }
+ $output .= '</tr>';
+ $output .= '<tr>';
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $output .= '<td align="center">PovpreÄje';
+ $output .= '</td>';
+ }
+ }
+ $output .= '</tr>';
+
+ foreach ($frequencys AS $fkey => $fkeyFrequency) {
+ $output .= '<tr>';
+ $output .= '<td align="center">';
+ $output .= $forSpremenljivka['options'][$fkey];
+ $output .= '</td>';
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $sequence = $variable['sequence'];
+ if ($variable['other'] != 1) {
+ #povpreÄja
+ $output .= '<td align="center">';
+ $output .= self::formatNumber($means[$fkey][$sequence],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'');
+ $output .= '</td>';
+ $totalMeans[$sequence] += ($this->breakClass->getMeansFromKey($fkeyFrequency[$sequence])*(int)$frequencys[$fkey][$sequence]['validCnt']);
+ $totalFreq[$sequence]+= (int)$frequencys[$fkey][$sequence]['validCnt'];
+ }
+
+ }
+
+ }
+ $output .= '</tr>';
+ }
+ #dodamo Å¡e skupno sumo in povpreÄje
+ $output .= '<tr>';
+ $output .= '<td align="center">';
+ $output .= 'Skupaj';
+ $output .= '</td>';
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ foreach ($grid['variables'] AS $vkey => $variable) {
+
+ $sequence = $variable['sequence'];
+ if ($variable['other'] != 1) {
+ #povpreÄja
+ $output .= '<td align="center">';
+ $totalMean = $totalFreq[$sequence] > 0 ? $totalMeans[$sequence] / $totalFreq[$sequence] : 0;
+ $output .= self::formatNumber($totalMean ,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'');
+ $output .= '</td>';
+ }
+
+ }
+
+ }
+ $output .= '</tr>';
+ $output .= '</table>';
+
+ $output .= '<table border="0"><tr><td></td></tr><tr><td></td></tr></table>';
+ }
+
+ function displayBreakTableNumber($forSpr,$frequencys,$spremenljivka) {
+ global $lang;
+ global $output;
+
+ $keysCount = count($frequencys);
+ $sequences = explode('_',$spremenljivka['sequences']);
+ $forSpremenljivka = $this->breakClass->_HEADERS[$forSpr];
+ $tip = $spremenljivka['tip'];
+
+ # izraÄunamo povpreÄja za posamezne sekvence
+ $means = array();
+ $totalMeans = array();
+ $totalFreq = array();
+ foreach ($frequencys AS $fkey => $fkeyFrequency) {
+ foreach ($sequences AS $sequence) {
+ $means[$fkey][$sequence] = $this->breakClass->getMeansFromKey($fkeyFrequency[$sequence]);
+ }
+ }
+
+
+ # za multi number naredimo po skupinah
+ if ($tip != 20 ) {
+ $rowspan = ' rowspan="3"';
+ $colspan = ' colspan="'.(count($sequences)).'"';
+
+ # Äe ni multicheck in multi grid
+ $output .= '<table border="1">';
+ $output .= '<tr>';
+ $output .= '<td align="center"'.$rowspan.'>';
+ $output .= '<b>'.$forSpremenljivka['naslov'];
+ $output .= '('.$forSpremenljivka['variable'].')</b>';
+
+ $output .= '</td>';
+ $output .= '<td align="center"'.$colspan.'>';
+ $output .= '<b>'.$spremenljivka['naslov'];
+ $output .= '('.$spremenljivka['variable'].')</b>';
+ $output .= '</td>';
+ $output .= '</tr>';
+
+ $output .= '<tr>';
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $output .= '<td align="center">';
+ $output .= $variable['naslov'];
+ $output .= '('.$variable['variable'].')';
+ $output .= '</td>';
+ }
+ }
+ $output .= '</tr>';
+ $output .= '<tr>';
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $output .= '<td align="center">PovpreÄje';
+ $output .= '</td>';
+ }
+ }
+ $output .= '</tr>';
+
+ foreach ($frequencys AS $fkey => $fkeyFrequency) {
+ $output .= '<tr>';
+ $output .= '<td align="center">';
+ $output .= $forSpremenljivka['options'][$fkey];
+ $output .= '</td>';
+
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $sequence = $variable['sequence'];
+ if ($variable['other'] != 1) {
+ #povpreÄja
+ $output .= '<td align="center">';
+ $output .= self::formatNumber($means[$fkey][$sequence],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'');
+ $output .= '</td>';
+
+ $totalMeans[$sequence] += ($this->breakClass->getMeansFromKey($fkeyFrequency[$sequence])*(int)$frequencys[$fkey][$sequence]['validCnt']);
+ $totalFreq[$sequence]+= (int)$frequencys[$fkey][$sequence]['validCnt'];
+ }
+
+ }
+
+ }
+ $output .= '</tr>';
+
+ }
+ #dodamo Å¡e skupno sumo in povpreÄje
+ $output .= '<tr>';
+ $output .= '<td align="center">';
+ $output .= 'Skupaj';
+ $output .= '</td>';
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+ foreach ($grid['variables'] AS $vkey => $variable) {
+
+ $sequence = $variable['sequence'];
+ if ($variable['other'] != 1) {
+ #povpreÄja
+ $output .= '<td align="center">';
+ $totalMean = $totalFreq[$sequence] > 0 ? $totalMeans[$sequence] / $totalFreq[$sequence] : 0;
+ $output .= self::formatNumber($totalMean ,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'');
+ $output .= '</td>';
+ }
+
+ }
+
+ }
+ $output .= '</tr>';
+ $output .= '</table>';
+
+
+ $output .= '<table border="0"><tr><td></td></tr><tr><td></td></tr></table>';
+ }
+
+ else if ($tip == 20){
+ # za multi number razdelimo na grupe - skupine
+ $rowspan = ' rowspan="3"';
+ $colspan = ' colspan="'.(count($spremenljivka['grids'][0]['variables'])).'"';
+
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+
+ $text = '<table><tr><td colspan="10"><b>Tabela za: '.$spremenljivka['naslov'].' ('.$spremenljivka['variable'].') = '.$grid['naslov'].' ('.$grid['variable'].')';
+ $text .= '</b></td></tr></table>';
+ $output.= $text;
+
+
+ $output .= '<table border="1">';
+ #labele
+ $output .= '<tr>';
+ $output .= '<td align="center"'.$rowspan.'>';
+ $output .= '<b>'.$forSpremenljivka['naslov'];
+ $output .= '('.$forSpremenljivka['variable'].')</b>';
+ $output .= '</td>';
+
+ $output .= '<td align="center"'.$colspan.'>';
+ $output .= '<b>'.$spremenljivka['naslov']. ' - ';
+ $output .= $grid['naslov'];
+ $output .= '('.$grid['variable'].')</b>';
+ $output .= '</td>';
+ $output .='</tr>';
+ #labele
+ $output .= '<tr>';
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $output .= '<td align="center">';
+ $output .= $variable['naslov'];
+ $output .= '('.$variable['variable'].')';
+ $output .= '</td>';
+ }
+ $output .= '</tr>';
+ $output .= '<tr>';
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $output .= '<td align="center">PovpreÄje';
+ $output .= '</td>';
+ }
+ $output .= '</tr>';
+ foreach ($forSpremenljivka['options'] AS $okey => $option) {
+ $output .= '<tr>';
+ $output .= '<td align="center"'.$break_percentRowSpan.' class="rsdl_bck_variable1">';
+ $output .= $option;
+ $output .= '</td>';
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $sequence = $variable['sequence'];
+ #povpreÄje
+ $output .= '<td align="center">';
+ $output .= self::formatNumber($means[$okey][$sequence],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'');
+ $output .= '</td>';
+
+ $totalMeans[$sequence] += ($means[$okey][$sequence]*(int)$frequencys[$okey][$sequence]['validCnt']);
+ $totalFreq[$sequence]+= (int)$frequencys[$okey][$sequence]['validCnt'];
+
+ }
+ $output .= '</tr>';
+ }
+ #dodamo Å¡e skupno sumo in povpreÄje
+ $output .= '<tr>';
+ $output .= '<td align="center">';
+ $output .= 'Skupaj';
+ $output .= '</td>';
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $sequence = $variable['sequence'];
+ if ($variable['other'] != 1) {
+ #povpreÄja
+ $output .= '<td align="center" class="red strong">';
+ $totalMean = $totalFreq[$sequence] > 0 ? $totalMeans[$sequence] / $totalFreq[$sequence] : 0;
+ $output .= self::formatNumber($totalMean ,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'');
+ $output .= '</td>';
+ }
+ }
+ $output .= '</tr>';
+ $output .= '</table>';
+
+
+ $output .= '<table border="0"><tr><td></td></tr><tr><td></td></tr></table>';
+ }
+
+ }
+ }
+
+ function displayBreakTableText($forSpr,$frequencys,$spremenljivka) {
+ global $lang;
+ global $output;
+
+ $keysCount = count($frequencys);
+ $sequences = explode('_',$spremenljivka['sequences']);
+ $forSpremenljivka = $this->breakClass->_HEADERS[$forSpr];
+ $tip = $spremenljivka['tip'];
+
+ # izraÄunamo povpreÄja za posamezne sekvence
+ $texts = array();
+ $totalMeans = array();
+ $totalFreq = array();
+ foreach ($frequencys AS $fkey => $fkeyFrequency) {
+ foreach ($sequences AS $sequence) {
+ $texts[$fkey][$sequence] = $this->breakClass->getTextFromKey($fkeyFrequency[$sequence]);
+ }
+ }
+
+
+ # za multi text razdelimo na grupe - skupine
+ $rowspan = ' rowspan="2"';
+ $colspan = ' colspan="'.(count($spremenljivka['grids'][0]['variables'])).'"';
+
+ foreach ($spremenljivka['grids'] AS $gkey => $grid) {
+
+ $text = '<table><tr><td colspan="10"><b>Tabela za: '.$spremenljivka['naslov'].' ('.$spremenljivka['variable'].') = '.$grid['naslov'].' ('.$grid['variable'].')';
+ $text .= '</b></td></tr></table>';
+ $output.= $text;
+
+
+ $output .= '<table border=1>';
+ #labele
+ $output .= '<tr>';
+ $output .= '<td align="center"'.$rowspan.'>';
+ $output .= '<b>'.$forSpremenljivka['naslov'];
+ $output .= '('.$forSpremenljivka['variable'].')</b>';
+ $output .= '</td>';
+
+ $output .= '<td align="center"'.$colspan.'>';
+ $output .= '<b>'.$spremenljivka['naslov']. ' - ';
+ $output .= $grid['naslov'];
+ $output .= '('.$grid['variable'].')</b>';
+ $output .= '</td>';
+ $output .='</tr>';
+ #labele
+ $output .= '<tr>';
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $output .= '<td align="center" class="sub" >';
+ $output .= $variable['naslov'];
+ $output .= '('.$variable['variable'].')';
+ $output .= '</td>';
+ }
+ $output .= '</tr>';
+ foreach ($forSpremenljivka['options'] AS $okey => $option) {
+ $output .= '<tr>';
+ $output .= '<td align="center"'.$break_percentRowSpan.'>';
+ $output .= $option;
+ $output .= '</td>';
+ foreach ($grid['variables'] AS $vkey => $variable) {
+ $sequence = $variable['sequence'];
+ #povpreÄje
+ $output .= '<td align="center">';
+ if (count($texts[$okey][$sequence]) > 0) {
+ $text = '';
+ foreach ($texts[$okey][$sequence] AS $ky => $units) {
+ $text .= $units['text'].', ';
+ }
+ $text = substr($text,0,-2);
+
+ $output .= $units['text'];
+ }
+
+ $output .= '</td>';
+
+ }
+ $output .= '</tr>';
+ }
+ $output .= '</table>';
+
+
+ $output .= '<table border="0"><tr><td></td></tr><tr><td></td></tr></table>';
+ }
+ }
+
+ function displayCrosstabs($forSpr,$frequencys,$spremenljivka) {
+ global $lang;
+ global $output;
+
+ //ustvarimo crosstab objekt
+ $this->crosstabClass = new SurveyCrosstabs();
+ $this->crosstabClass->Init($this->anketa['id']);
+
+ $spr1 = $this->spr;
+ $seq1 = $this->seq;
+ $grd1 = 'undefined';
+ foreach ($this->breakClass->_HEADERS[$spr1]['grids'] AS $gid => $grid) {
+ foreach ($grid['variables'] AS $vkey => $vrednost) {
+ if ($vrednost['sequence'] == $seq1) {
+ $grd1 = $gid;
+ }
+ }
+ }
+
+ $spr2 = $spremenljivka['id'];
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ if ($spremenljivka['tip'] == 16 || $spremenljivka['tip'] == 6) {
+
+ $text = '<table><tr><td colspan="10"><b>Tabela za: '.$spremenljivka['naslov'].' ('.$spremenljivka['variable'].') = '.$grid['naslov'];
+ if ($spremenljivka['tip'] != 6) {
+ $text .= ' ('.$grid['variable'].')';
+ }
+ $text .= '</b></td></tr></table>';
+ $output.= $text;
+ }
+
+ $seq2 = $grid['variables'][0]['sequence'];
+ $grd2 = $gid;
+
+ $this->crosstabClass->setVariables($seq2,$spr2,$grd2,$seq1,$spr1,$grd1);
+ $this->displayCrosstabsTable();
+ }
+ }
+
+ function displayCrosstabsTable() {
+ global $lang;
+ global $output;
+
+ if ($this->crosstabClass->getSelectedVariables(1) !== null && $this->crosstabClass->getSelectedVariables(2) !== null) {
+ $variables1 = $this->crosstabClass->getSelectedVariables(1);
+ $variables2 = $this->crosstabClass->getSelectedVariables(2);
+ foreach ($variables1 AS $v_first) {
+ foreach ($variables2 AS $v_second) {
+
+ $crosstabs = null;
+ $crosstabs_value = null;
+
+ $crosstabs = $this->crosstabClass->createCrostabulation($v_first, $v_second);
+ $crosstabs_value = $crosstabs['crosstab'];
+
+ # podatki spremenljivk
+ $spr1 = $this->crosstabClass->_HEADERS[$v_first['spr']];
+ $spr2 = $this->crosstabClass->_HEADERS[$v_second['spr']];
+
+ $grid1 = $spr1['grids'][$v_first['grd']];
+ $grid2 = $spr2['grids'][$v_second['grd']];
+
+ #Å¡tevilo vratic in Å¡tevilo kolon
+ $cols = count($crosstabs['options1']);
+ $rows = count($crosstabs['options2']);
+
+ # ali prikazujemo vrednosti variable pri spremenljivkah
+ $show_variables_values = $this->crosstabClass->doValues;
+
+ # nastavitve oblike
+ if (($this->crosstabClass->crossChk1 || $this->crosstabClass->crossChk2 || $this->crosstabClass->crossChk3) && ($this->crosstabClass->crossChkEC || $this->crosstabClass->crossChkRE || $this->crosstabClass->crossChkSR || $this->crosstabClass->crossChkAR)) {
+ # dodamo procente in residuale
+ $rowSpan = 3;
+ $numColumnPercent = $this->crosstabClass->crossChk1 + $this->crosstabClass->crossChk2 + $this->crosstabClass->crossChk3;
+ $numColumnResidual = $this->crosstabClass->crossChkEC + $this->crosstabClass->crossChkRE + $this->crosstabClass->crossChkSR + $this->crosstabClass->crossChkAR;
+ $tblColumn = max($numColumnPercent,$numColumnResidual);
+ } else if ($this->crosstabClass->crossChk1 || $this->crosstabClass->crossChk2 || $this->crosstabClass->crossChk3) {
+ # imamo samo procente
+ $rowSpan = 2;
+ $numColumnPercent = $this->crosstabClass->crossChk1 + $this->crosstabClass->crossChk2 + $this->crosstabClass->crossChk3;
+ $numColumnResidual = 0;
+ $tblColumn = $numColumnPercent;
+ } else if ($this->crosstabClass->crossChkEC || $this->crosstabClass->crossChkRE || $this->crosstabClass->crossChkSR || $this->crosstabClass->crossChkAR) {
+ # imamo samo residuale
+ $rowSpan = 2;
+ $numColumnPercent = 0;
+ $numColumnResidual = $this->crosstabClass->crossChkEC + $this->crosstabClass->crossChkRE + $this->crosstabClass->crossChkSR + $this->crosstabClass->crossChkAR;
+ $tblColumn = $numColumnResidual;
+ } else {
+ #prikazujemo samo podatke
+ $rowSpan = 1;
+ $numColumnPercent = 0;
+ $numColumnResidual = 0;
+ $tblColumn = 1;
+ }
+
+ //izracun sirine ene celice
+ $singleWidth = round( 170 / $cols );
+
+ //izracun visine ene celice
+ if($rowSpan == 1)
+ $height = 8;
+ elseif($rowSpan == 2)
+ $height = 10;
+ else
+ $height = 15;
+
+ # izrišemo tabelo
+
+ # najprej izrišemo naslovne vrstice
+ # za multicheckboxe popravimo naslov, na podtip
+ $sub_q1 = null;
+ if ($spr1['tip'] == '6' || $spr1['tip'] == '16' || $spr1['tip'] == '17' || $spr1['tip'] == '19' || $spr1['tip'] == '20') {
+ foreach ($spr1['grids'] AS $grid) {
+ foreach ($grid['variables'] AS $variable) {
+ if ($variable['sequence'] == $v_first['seq']) {
+ $sub_q1 = strip_tags($spr1['naslov']);
+ if ($show_variables_values == true ) {
+ $sub_q1 .= '&nbsp;('.strip_tags($spr1['variable']).')';
+ }
+ if ($spr1['tip'] == '16') {
+ $sub_q1 .= ', ' . strip_tags($grid1['naslov']) . ($show_variables_values == true ? '&nbsp;(' . strip_tags($grid1['variable']) . ')' : '');
+ } else {
+ $sub_q1 .= ', ' . strip_tags($variable['naslov']) . ($show_variables_values == true ? '&nbsp;(' . strip_tags($variable['variable']) . ')' : '');
+ }
+ }
+ }
+ }
+ }
+ if ($sub_q1 == null) {
+ $sub_q1 .= strip_tags($spr1['naslov']);
+ $sub_q1 .= ($show_variables_values == true ? '&nbsp;('.strip_tags($spr1['variable']).')' : '');
+ }
+
+ $sub_q2 = null;
+ if ($spr2['tip'] == '6' || $spr2['tip'] == '16' || $spr2['tip'] == '17' || $spr2['tip'] == '19' || $spr2['tip'] == '20') {
+ foreach ($spr2['grids'] AS $grid) {
+ foreach ($grid['variables'] AS $variable) {
+ if ($variable['sequence'] == $v_second['seq']) {
+ $sub_q2 = strip_tags($spr2['naslov']);
+ if ($show_variables_values == true) {
+ $sub_q2 .= '&nbsp;('.strip_tags($spr2['variable']).')';
+ }
+ if ($spr2['tip'] == '16') {
+ $sub_q2.= ', <br style="mso-data-placement:same-cell;" />' . strip_tags($grid2['naslov']) . ($show_variables_values == true ? '&nbsp;(' . strip_tags($grid2['variable']) . ')' : '');
+ } else {
+ $sub_q2.= ', <br style="mso-data-placement:same-cell;" />' . strip_tags($variable['naslov']) . ($show_variables_values == true ? '&nbsp;(' . strip_tags($variable['variable']) . ')' : '');
+ }
+ }
+ }
+ }
+ }
+ if ($sub_q2 == null) {
+ $sub_q2 .= strip_tags($spr2['naslov']);
+ $sub_q2 .= ($show_variables_values == true ? '&nbsp;('.strip_tags($spr2['variable']).')' : '');
+ }
+
+ # izrišemo tabelo
+ # najprej izrišemo naslovne vrstice
+ $output .= '<table border="1">';
+
+ /*$output .= '<colgroup>';
+ $output .= '<col style="width:auto; min-width:150px;" />';
+ $output .= '<col style="width:auto; min-width:150px;" />';
+ if (count($crosstabs['options1']) > 0 ) {
+ $_width_percent = round(100 / count($crosstabs['options1'],2));
+ foreach ($crosstabs['options1'] as $ckey1 =>$crossVariabla) {
+ $output .= '<col style="width:'.$_width_percent.'%;" />';
+ }
+
+ }
+ $output .= '<col style="width:auto;" />';
+ $output .= '</colgroup>';*/
+
+ $output .= '<tr><td></td><td></td>';
+ /*$output .= '<td>&#x3A7;<sup>2</sup> = ';
+ $output .= $this->formatNumber($crosstabs['hi2'], 3, '');
+ $output .= '</td>';*/
+ $output .= '<td align="center" colspan="' . $cols . '">';
+ $output .= '<b>'.$sub_q1.'</b>';
+ $output .= '</td>';
+ $output .= '<td>&nbsp;</td>';
+ $output .= '</tr>';
+ $output .= '<tr><td></td><td></td>';
+ $col_cnt=0;
+ if (count($crosstabs['options1']) > 0 ) {
+ foreach ($crosstabs['options1'] as $ckey1 =>$crossVariabla) {
+ $col_cnt++;
+ #ime variable
+ $output .= '<td align="center">';
+ $output .= $crossVariabla['naslov'];
+ # Äe ni tekstovni odgovor dodamo key
+ if ($crossVariabla['type'] != 't' && $show_variables_values == true) {
+ if ($crossVariabla['vr_id'] == null ) {
+ $output .= '<br style="mso-data-placement:same-cell;" /> ( '.$ckey1.' )';
+ } else {
+ $output .= '<br style="mso-data-placement:same-cell;" /> ( '.$crossVariabla['vr_id'].' )';
+ }
+ }
+ $output .= '</td>';
+ }
+ }
+ $col_cnt++;
+
+ $output .= '<td align="center">' . $lang['srv_analiza_crosstab_skupaj'] . '</td>';
+ $output .= '</tr>';
+
+ $cntY = 0;
+ if (count($crosstabs['options2']) > 0) {
+ foreach ($crosstabs['options2'] as $ckey2 =>$crossVariabla2) {
+ $cntY++;
+ $output .= '<tr>';
+
+ if ($cntY == 1) {
+ # ime variable
+ $output .= '<td align="center" rowspan="' . $rows . '" valign="top">';
+ $output .= '<b>'.$sub_q2.'</b>';
+ $output .= '</td>';
+ }
+ //$css_backY = 'rsdl_bck_variable'.($cntY & 1);
+ $css_backY = ' rsdl_bck_variable1';
+
+ $output .= '<td align="center">';
+
+ $output .= $crossVariabla2['naslov'];
+ # Äe ni tekstovni odgovor dodamo key
+ if ($crossVariabla2['type'] !== 't' && $show_variables_values == true ) {
+ if ($crossVariabla2['vr_id'] == null) {
+ $output .= '<br style="mso-data-placement:same-cell;" /> ( '.$ckey2.' )';
+ } else {
+ $output .= '<br style="mso-data-placement:same-cell;" /> ( '.$crossVariabla2['vr_id'].' )';
+ }
+
+ }
+ $output .= '</td>';
+
+ foreach ($crosstabs['options1'] as $ckey1 => $crossVariabla1) {
+ $output .= '<td align="center">';
+ # celica z vebino
+ {
+ # prikazujemo eno ali veÄ od: frekvenc, odstotkov, residualov
+ $output .= '<table>';
+ if ($this->crosstabClass->crossChk0) {
+ # izpišemo frekvence crostabov
+ $output .= '<tr>';
+ $output .= '<td align="center">';
+ $output .= ((int)$crosstabs_value[$ckey1][$ckey2] > 0) ? $crosstabs_value[$ckey1][$ckey2] : 0;
+ # .$crossTab[$crossVariabla1[cell_id]][$ckey2]
+ #
+
+ $output .= '</td>';
+ $output .= '</tr>';
+ }
+
+ if ($this->crosstabClass->crossChk1 || $this->crosstabClass->crossChk2 || $this->crosstabClass->crossChk3) {
+ # sirina celice v %
+ if ( ($this->crosstabClass->crossChk1 + $this->crosstabClass->crossChk2 + $this->crosstabClass->crossChk3) == 3 )
+ $css_width = ' ctb_w33p';
+ elseif (($this->crosstabClass->crossChk1 + $this->crosstabClass->crossChk2 + $this->crosstabClass->crossChk3) == 2 )
+ $css_width = ' ctb_w50p';
+ else
+ $css_width = '';
+ $css_bt = ( $this->crosstabClass->crossChk0 ) ? 'anl_dash_bt' : '';
+ # izpisemo procente
+ $output .= '<tr>';
+ $output .= '<td align="center">';
+
+ $output .= '<table>';
+ $output .= '<tr>';
+ $col=0;
+
+ if ($this->crosstabClass->crossChk1) {
+ #procent vrstica
+ $col++;
+
+ $css_color = ($this->crosstabClass->doColor == 'true') ? 'ctbChck_sp1' : '';
+ $css_br = $numColumnPercent > $col ? ' anl_dash_br' : '';
+ $output .= '<td align="center">';
+ $output .= $this->formatNumber($this->crosstabClass->getCrossTabPercentage($crosstabs['sumaVrstica'][$ckey2], $crosstabs_value[$ckey1][$ckey2]), SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $output .= '</td>';
+ }
+ if ($this->crosstabClass->crossChk2) {
+ #procent stolpec
+ $col++;
+ $css_br = $numColumnPercent > $col ? ' anl_dash_br' : '';
+ $css_color = ($this->crosstabClass->doColor == 'true') ? 'ctbChck_sp2' : '';
+ $output .= '<td align="center">';
+
+ $output .= $this->formatNumber($this->crosstabClass->getCrossTabPercentage($crosstabs['sumaStolpec'][$ckey1], $crosstabs_value[$ckey1][$ckey2]), SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $output .= '</td>';
+ }
+ if ($this->crosstabClass->crossChk3) {
+ #procent skupni
+ $col++;
+ $css_br = $numColumnPercent > $col ? ' anl_dash_br' : '';
+ $css_color = ($this->crosstabClass->doColor == 'true') ? 'ctbChck_sp3' : '';
+ $output .= '<td align="center">';
+
+ $output .= $this->formatNumber($this->crosstabClass->getCrossTabPercentage($crosstabs['sumaSkupna'], $crosstabs_value[$ckey1][$ckey2]), SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $output .= '</td>';
+ }
+ $output .= '</tr>';
+ $output .= '</table>';
+
+ $output .= '</td>';
+ $output .= '</tr>';
+ }
+ # izpisemo residuale
+ if ($this->crosstabClass->crossChkEC || $this->crosstabClass->crossChkRE || $this->crosstabClass->crossChkSR || $this->crosstabClass->crossChkAR) {
+ # sirina celice v %
+ if ( ($this->crosstabClass->crossChkEC + $this->crosstabClass->crossChkRE + $this->crosstabClass->crossChkSR + $this->crosstabClass->crossChkAR) == 4 )
+ $css_width = ' ctb_w25p';
+ elseif ( ($this->crosstabClass->crossChkEC + $this->crosstabClass->crossChkRE + $this->crosstabClass->crossChkSR + $this->crosstabClass->crossChkAR) == 3 )
+ $css_width = ' ctb_w33p';
+ elseif ( ($this->crosstabClass->crossChkEC + $this->crosstabClass->crossChkRE + $this->crosstabClass->crossChkSR + $this->crosstabClass->crossChkAR) == 2 )
+ $css_width = ' ctb_w50p';
+ else
+ $css_width = '';
+ $css_bt = ( $this->crosstabClass->crossChk0 || ($this->crosstabClass->crossChk1 && $this->crosstabClass->crossChk2 && $this->crosstabClass->crossChk3)) ? 'anl_dash_bt' : '';
+ $output .= '<tr>';
+
+ $output .= '<td align="center">';
+ $output .= '<table>';
+ $output .= '<tr>';
+ $col=0;
+
+ if ($this->crosstabClass->crossChkEC) {
+ $col++;
+ $css_br = $numColumnResidual > $col ? ' anl_dash_br' : '';
+ $css_color = ($this->crosstabClass->doColor == 'true') ? 'crossCheck_EC' : '';
+ $output .= '<td align="center">';
+ $output .= $this->formatNumber($crosstabs['exC'][$ckey1][$ckey2], SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_RESIDUAL'), '');
+ $output .= '</td>';
+ }
+ if ($this->crosstabClass->crossChkRE) {
+ $col++;
+ $css_br = $numColumnResidual > $col ? ' anl_dash_br' : '';
+ $css_color = ($this->crosstabClass->doColor == 'true') ? 'crossCheck_RE' : '';
+ $output .= '<td align="center">';
+ $output .= $this->formatNumber($crosstabs['res'][$ckey1][$ckey2], SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_RESIDUAL'), '');
+ $output .= '</td>';
+ }
+ if ($this->crosstabClass->crossChkSR) {
+ $col++;
+ $css_br = $numColumnResidual > $col ? ' anl_dash_br' : '';
+ $css_color = ($this->crosstabClass->doColor == 'true') ? 'crossCheck_SR' : '';
+ $output .= '<td align="center">';
+ $output .= $this->formatNumber($crosstabs['stR'][$ckey1][$ckey2], SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_RESIDUAL'), '');
+ $output .= '</td>';
+ }
+ if ($this->crosstabClass->crossChkAR) {
+ $col++;
+ $css_br = $numColumnResidual > $col ? ' anl_dash_br' : '';
+ $css_color = ($this->crosstabClass->doColor == 'true') ? 'crossCheck_AR' : '';
+ $output .= '<td align="center">';
+ $output .= $this->formatNumber($crosstabs['adR'][$ckey1][$ckey2], SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_RESIDUAL'), '');
+ $output .= '</td>';
+ }
+ $output .= '</tr>';
+ $output .= '</table>';
+ $output .= '</td>';
+ $output .= '</tr>';
+ }
+ $output .= '</table>';
+ }
+ # konec celice z vsebino
+ $output .= '</td>';
+ }
+
+ // vedno rišemo zadnji stolpec.
+ $output .= '<td align="center" >';
+ $output .= '<table>';
+ if ($this->crosstabClass->crossChk0) {
+ $output .= '<tr>';
+ $output .= '<td align="center" colspan="' . ( $this->crosstabClass->crossChk1 + $this->crosstabClass->crossChk2 + $this->crosstabClass->crossChk3 ).'">';
+ # suma po vrsticah
+ $output .= (int)$crosstabs['sumaVrstica'][$ckey2];
+ $output .= '</td>';
+ $output .= '</tr>';
+ }
+ if ($this->crosstabClass->crossChk1 || $this->crosstabClass->crossChk2 || $this->crosstabClass->crossChk3) {
+ if (($this->crosstabClass->crossChk1 + $this->crosstabClass->crossChk2 + $this->crosstabClass->crossChk3) == 3) {
+ $css_width = ' ctb_w33p';
+ } else if (($this->crosstabClass->crossChk1 + $this->crosstabClass->crossChk2 + $this->crosstabClass->crossChk3) == 2) {
+ $css_width = ' ctb_w50p';
+ } else {
+ $css_width = '';
+ }
+ $css_bt = ( $this->crosstabClass->crossChk0 ) ? ' anl_dash_bt' : '';
+ # suma po vrsticah v procentih
+ $output .= '<tr>';
+ if ($this->crosstabClass->crossChk1) {
+ $css_color = ($this->crosstabClass->doColor == 'true') ? ' ctbChck_sp1' : '';
+ $output .= '<td align="center">';
+ $output .= $this->formatNumber(100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $output .= '</td>';
+ }
+ if ($this->crosstabClass->crossChk2) {
+ $css_color = ($this->crosstabClass->doColor == 'true') ? ' ctbChck_sp2' : '';
+ $css_border = ($this->crosstabClass->crossChk1 ? ' anl_dash_bl ' : '');
+ $output .= '<td align="center">';
+ $output .= $this->formatNumber( ($crosstabs['sumaSkupna'] > 0 ? (100 * $crosstabs['sumaVrstica'][$ckey2] / $crosstabs['sumaSkupna']) : 0), SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $output .= '</td>';
+ }
+ if ($this->crosstabClass->crossChk3) {
+ $css_color = ($this->crosstabClass->doColor == 'true') ? ' ctbChck_sp3' : '';
+ $css_border = ($this->crosstabClass->crossChk1 || $this->crosstabClass->crossChk2 ? ' anl_dash_bl ' : '');
+ $output .= '<td align="center">';
+ $output .= $this->formatNumber( ($crosstabs['sumaSkupna'] > 0 ? (100 * $crosstabs['sumaVrstica'][$ckey2] / $crosstabs['sumaSkupna']) : 0), SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $output .= '</td>';
+ }
+ $output .= '</tr>';
+ }
+
+ $output .= '</table>';
+
+ $output .= '</td>';
+ $output .= '</tr>';
+ }
+ }
+ $cntY++;
+ $output .= '<tr>';
+
+ $output .= '<td align="center">&nbsp;</th>';
+ //$css_backY = 'rsdl_bck_variable'.($cntY & 1);
+ $css_backY = ' rsdl_bck_variable1';
+ $output .= '<td align="center">' . $lang['srv_analiza_crosstab_skupaj'] . '</td>';
+ // skupni sestevki po stolpcih
+ if (count($crosstabs['options1']) > 0)
+ foreach ($crosstabs['options1'] as $ckey1 => $crossVariabla1) {
+ $output .= '<td align="center" >';
+ {
+ # prikazujemo eno od treh možnosti
+ $output .= '<table>';
+ if ($this->crosstabClass->crossChk0) {
+ $output .= '<tr>';
+ $output .= '<td align="center" colspan="'.($this->crosstabClass->crossChk1 + $this->crosstabClass->crossChk2 + $this->crosstabClass->crossChk3).'">';
+ # suma po stolpcih
+ $output .= (int)$crosstabs['sumaStolpec'][$ckey1];
+ $output .= '</td>';
+ $output .= '</tr>';
+ }
+ if ($this->crosstabClass->crossChk1 || $this->crosstabClass->crossChk2 || $this->crosstabClass->crossChk3) {
+ # suma po stolpcih v procentih
+ $css_bt = ($this->crosstabClass->crossChk0) ? ' anl_dash_bt' : '';
+ $output .= '<tr>';
+ if ($this->crosstabClass->crossChk1) {
+ $css_color = ($this->crosstabClass->doColor == 'true') ? ' ctbChck_sp1' : '';
+ $output .= '<td align="center">';
+ $output .= $this->formatNumber( ($crosstabs['sumaSkupna'] > 0 ? (100 * $crosstabs['sumaStolpec'][$ckey1] / $crosstabs['sumaSkupna']) : 0), SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $output .= '</td>';
+ }
+ if ($this->crosstabClass->crossChk2) {
+ $css_color = ($this->crosstabClass->doColor == 'true') ? ' ctbChck_sp2' : '';
+ $output .= '<td align="center">';
+ $output .= $this->formatNumber(100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $output .= '</td>';
+ }
+ if ($this->crosstabClass->crossChk3)
+ {
+ $css_color = ($this->crosstabClass->doColor == 'true') ? ' ctbChck_sp3' : '';
+ $output .= '<td align="center">';
+ $output .= $this->formatNumber( ($crosstabs['sumaSkupna'] > 0 ? (100 * $crosstabs['sumaStolpec'][$ckey1] / $crosstabs['sumaSkupna']) : 0), SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $output .= '</td>';
+ }
+ $output .= '</tr>';
+ }
+ $output .= '</table>';
+ }
+ $output .= '</td>';
+ }
+ # zadnja celica z skupno sumo
+ $output .= '<td align="center">';
+ {
+ $output .= '<table>';
+ if ($this->crosstabClass->crossChk0) {
+ $output .= '<tr>';
+ $output .= '<td align="center" colspan="'.($this->crosstabClass->crossChk1 + $this->crosstabClass->crossChk2 + $this->crosstabClass->crossChk3).'">';
+ # skupna suma
+ $output .= (int)$crosstabs['sumaSkupna'];
+ $output .= '</td>';
+ $output .= '</tr>';
+ }
+ if ($this->crosstabClass->crossChk1 || $this->crosstabClass->crossChk2 || $this->crosstabClass->crossChk3) {
+ # suma po stolpcih v procentih
+ $css_bt = ($this->crosstabClass->crossChk0) ? ' anl_dash_bt' : '';
+ $output .= '<tr>';
+ if ($this->crosstabClass->crossChk1) {
+ $css_color = ($this->crosstabClass->doColor == 'true') ? ' ctbChck_sp1' : '';
+ $css_border = ($this->crosstabClass->crossChk2 || $this->crosstabClass->crossChk3) ? ' anl_dash_br' : '';
+ $output .= '<td align="center">';
+ $output .= $this->formatNumber(100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $output .= '</td>';
+ }
+ if ($this->crosstabClass->crossChk2) {
+ $css_color = ($this->crosstabClass->doColor == 'true') ? ' ctbChck_sp2' : '';
+ $css_border = ($this->crosstabClass->crossChk3) ? ' anl_dash_br' : '';
+ $output .= '<td align="center">';
+ $output .= $this->formatNumber(100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $output .= '</td>';
+ }
+ if ($this->crosstabClass->crossChk3) {
+ $css_color = ($this->crosstabClass->doColor == 'true') ? ' ctbChck_sp3' : '';
+ $output .= '<td align="center">';
+ $output .= $this->formatNumber(100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $output .= '</td>';
+ }
+ $output .= '</tr>';
+ }
+ $output .= '</table>';
+ }
+ $output .= '</td>';
+
+ $output .= '</tr>';
+ $output .= '</table>';
+
+ $output .= '<table border="0"><tr><td></td></tr><tr><td></td></tr></table>';
+ }
+ }
+ }
+ }
+
+
+ /*Skrajsa tekst in doda '...' na koncu*/
+ function snippet($text,$length=64,$tail="...")
+ {
+ $text = trim($text);
+ $txtl = strlen($text);
+ if($txtl > $length)
+ {
+ for($i=1;$text[$length-$i]!=" ";$i++)
+ {
+ if($i == $length)
+ {
+ return substr($text,0,$length) . $tail;
+ }
+ }
+ $text = substr($text,0,$length-$i+1) . $tail;
+ }
+ return $text;
+ }
+
+ function setUserId($usrId) {$this->anketa['uid'] = $usrId;}
+ function getUserId() {return ($this->anketa['uid'])?$this->anketa['uid']:false;}
+
+ function formatNumber($value,$digit=0,$sufix="")
+ {
+ if ( $value <> 0 && $value != null )
+ $result = round($value,$digit);
+ else
+ $result = "0";
+ //$result = number_format($result, $digit, ',', '.').$sufix;
+ $result = number_format($result, $digit, ',', '') . $sufix;
+
+ // Preprecimo da bi se stevilo z decimalko pretvorilo v datum
+ //$result = '="'. $result.'"';
+
+ return $result;
+ }
+
+}
+
+?> \ No newline at end of file
diff --git a/admin/exportclases/class.xlsIzvozAnalizaCrosstab.php b/admin/exportclases/class.xlsIzvozAnalizaCrosstab.php
new file mode 100644
index 0000000..9acbaaa
--- /dev/null
+++ b/admin/exportclases/class.xlsIzvozAnalizaCrosstab.php
@@ -0,0 +1,666 @@
+<?php
+
+ global $site_path;
+
+ include_once('../../function.php');
+ include_once('../survey/definition.php');
+ require_once('../exportclases/class.xls.php');
+
+
+class XlsIzvozAnalizaCrosstab {
+
+ var $anketa; // trenutna anketa
+
+ var $pi=array('canCreate'=>false); // za shrambo parametrov in sporocil
+
+ public $crosstabClass = null; //crosstab class
+
+ var $crossData1;
+ var $crossData2;
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null, $crossData1, $crossData2, $podstran = M_ANALIZA_CROSSTAB)
+ {
+ global $site_path;
+ global $global_user_id;
+ global $output;
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) )
+ {
+ $this->anketa['id'] = $anketa;
+ $this->anketa['podstran'] = $podstran;
+
+ // create new XLS document
+ $this->xls = new xls();
+ }
+ else
+ {
+ $this->pi['msg'] = "Anketa ni izbrana!";
+ $this->pi['canCreate'] = false;
+ return false;
+ }
+ $_GET['a'] = A_ANALYSIS;
+
+ //ustvarimo crosstab objekt in mu napolnimo variable (var1, var2, checkboxi)
+ $this->crosstabClass = new SurveyCrosstabs();
+ $this->crosstabClass->Init($anketa);
+
+ for($i=0; $i<sizeof($crossData1)/3; $i++){
+ $index = $i * 3;
+ $this->crossData1[$i] = array($crossData1[$index],$crossData1[$index+1],$crossData1[$index+2]);
+ }
+ for($i=0; $i<sizeof($crossData2)/3; $i++){
+ $index = $i * 3;
+ $this->crossData2[$i] = array($crossData2[$index],$crossData2[$index+1],$crossData2[$index+2]);
+ }
+
+ if ( SurveyInfo::getInstance()->SurveyInit($this->anketa['id']) && $this->init())
+ {
+ $this->anketa['uid'] = $global_user_id;
+ SurveyUserSetting::getInstance()->Init($this->anketa['id'], $this->anketa['uid']);
+ }
+ else
+ return false;
+ // ce smo prisli do tu je vse ok
+ $this->pi['canCreate'] = true;
+
+ return true;
+ }
+
+ // SETTERS && GETTERS
+
+ function checkCreate()
+ {
+ return $this->pi['canCreate'];
+ }
+
+ function getFile($fileName)
+ {
+ $output = $this->createXls();
+ $this->xls->display($fileName, $output);
+ }
+
+
+ function init()
+ {
+ return true;
+ }
+
+ function encodeText($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace(array("&scaron;","&#353;","&#269;"),array("Å¡","Å¡","Ä"),$text);
+ return strip_tags($text);
+ }
+
+ function createXls()
+ {
+ global $site_path;
+ global $lang;
+ global $output;
+
+ $convertTypes = array('charSet' => "windows-1250",
+ 'delimit' => ";",
+ 'newLine' => "\n",
+ 'BOMchar' => "\xEF\xBB\xBF");
+
+ $output = $convertTypes['BOMchar'];
+
+ $output .= '<table border="0"><tr><td colspan="10"><font size="3"><b>'.$lang['export_analisys_crosstabs'].'</b></font></td></tr></table>';
+
+
+ # polovimo nastavtve missing profila
+ //SurveyConditionProfiles:: getConditionString();
+
+ $this->crosstabClass->_LOOPS = SurveyZankaProfiles::getFiltersForLoops();
+ if (count($this->crosstabClass->_LOOPS) > 0) {
+ # Äe mamo zanke
+ foreach ( $this->crosstabClass->_LOOPS AS $loop) {
+
+ $this->crosstabClass->_CURRENT_LOOP = $loop;
+ $this->displayCrosstabsTable();
+ }
+ } else {
+
+ // loopamo cez vse izbrane variable in izrisemo vse tabele
+ for($j=0; $j<sizeof($this->crossData2); $j++){
+ for($i=0; $i<sizeof($this->crossData1); $i++){
+ $this->crosstabClass->setVariables($this->crossData2[$j][0],$this->crossData2[$j][1],$this->crossData2[$j][2],$this->crossData1[$i][0],$this->crossData1[$i][1],$this->crossData1[$i][2]);
+
+ $this->displayCrosstabsTable();
+ }
+ }
+ }
+
+ return $output;
+ }
+
+ public function displayCrosstabsTable() {
+ global $lang;
+ global $output;
+
+ if ($this->crosstabClass->getSelectedVariables(1) !== null && $this->crosstabClass->getSelectedVariables(2) !== null) {
+ $variables1 = $this->crosstabClass->getSelectedVariables(1);
+ $variables2 = $this->crosstabClass->getSelectedVariables(2);
+ foreach ($variables1 AS $v_first) {
+ foreach ($variables2 AS $v_second) {
+
+ $crosstabs = null;
+ $crosstabs_value = null;
+
+ $crosstabs = $this->crosstabClass->createCrostabulation($v_first, $v_second);
+ $crosstabs_value = $crosstabs['crosstab'];
+
+ # podatki spremenljivk
+ $spr1 = $this->crosstabClass->_HEADERS[$v_first['spr']];
+ $spr2 = $this->crosstabClass->_HEADERS[$v_second['spr']];
+
+ $grid1 = $spr1['grids'][$v_first['grd']];
+ $grid2 = $spr2['grids'][$v_second['grd']];
+
+ #Å¡tevilo vratic in Å¡tevilo kolon
+ $cols = count($crosstabs['options1']);
+ $rows = count($crosstabs['options2']);
+
+ # ali prikazujemo vrednosti variable pri spremenljivkah
+ $show_variables_values = $this->crosstabClass->doValues;
+
+ # nastavitve oblike
+ if (($this->crosstabClass->crossChk1 || $this->crosstabClass->crossChk2 || $this->crosstabClass->crossChk3) && ($this->crosstabClass->crossChkEC || $this->crosstabClass->crossChkRE || $this->crosstabClass->crossChkSR || $this->crosstabClass->crossChkAR)) {
+ # dodamo procente in residuale
+ $rowSpan = 3;
+ $numColumnPercent = $this->crosstabClass->crossChk1 + $this->crosstabClass->crossChk2 + $this->crosstabClass->crossChk3;
+ $numColumnResidual = $this->crosstabClass->crossChkEC + $this->crosstabClass->crossChkRE + $this->crosstabClass->crossChkSR + $this->crosstabClass->crossChkAR;
+ $tblColumn = max($numColumnPercent,$numColumnResidual);
+ } else if ($this->crosstabClass->crossChk1 || $this->crosstabClass->crossChk2 || $this->crosstabClass->crossChk3) {
+ # imamo samo procente
+ $rowSpan = 2;
+ $numColumnPercent = $this->crosstabClass->crossChk1 + $this->crosstabClass->crossChk2 + $this->crosstabClass->crossChk3;
+ $numColumnResidual = 0;
+ $tblColumn = $numColumnPercent;
+ } else if ($this->crosstabClass->crossChkEC || $this->crosstabClass->crossChkRE || $this->crosstabClass->crossChkSR || $this->crosstabClass->crossChkAR) {
+ # imamo samo residuale
+ $rowSpan = 2;
+ $numColumnPercent = 0;
+ $numColumnResidual = $this->crosstabClass->crossChkEC + $this->crosstabClass->crossChkRE + $this->crosstabClass->crossChkSR + $this->crosstabClass->crossChkAR;
+ $tblColumn = $numColumnResidual;
+ } else {
+ #prikazujemo samo podatke
+ $rowSpan = 1;
+ $numColumnPercent = 0;
+ $numColumnResidual = 0;
+ $tblColumn = 1;
+ }
+
+ //izracun sirine ene celice
+ $singleWidth = round( 170 / $cols );
+
+ //izracun visine ene celice
+ if($rowSpan == 1)
+ $height = 8;
+ elseif($rowSpan == 2)
+ $height = 10;
+ else
+ $height = 15;
+
+ # izrišemo tabelo
+
+ # najprej izrišemo naslovne vrstice
+ # za multicheckboxe popravimo naslov, na podtip
+ $sub_q1 = null;
+ if ($spr1['tip'] == '6' || $spr1['tip'] == '16' || $spr1['tip'] == '17' || $spr1['tip'] == '19' || $spr1['tip'] == '20') {
+ foreach ($spr1['grids'] AS $grid) {
+ foreach ($grid['variables'] AS $variable) {
+ if ($variable['sequence'] == $v_first['seq']) {
+ $sub_q1 = strip_tags($spr1['naslov']);
+ if ($show_variables_values == true ) {
+ $sub_q1 .= '&nbsp;('.strip_tags($spr1['variable']).')';
+ }
+ if ($spr1['tip'] == '16') {
+ $sub_q1 .= ', ' . strip_tags($grid1['naslov']) . ($show_variables_values == true ? '&nbsp;(' . strip_tags($grid1['variable']) . ')' : '');
+ } else {
+ $sub_q1 .= ', ' . strip_tags($variable['naslov']) . ($show_variables_values == true ? '&nbsp;(' . strip_tags($variable['variable']) . ')' : '');
+ }
+ }
+ }
+ }
+ }
+ if ($sub_q1 == null) {
+ $sub_q1 .= strip_tags($spr1['naslov']);
+ $sub_q1 .= ($show_variables_values == true ? '&nbsp;('.strip_tags($spr1['variable']).')' : '');
+ }
+
+ $sub_q2 = null;
+ if ($spr2['tip'] == '6' || $spr2['tip'] == '16' || $spr2['tip'] == '17' || $spr2['tip'] == '19' || $spr2['tip'] == '20') {
+ foreach ($spr2['grids'] AS $grid) {
+ foreach ($grid['variables'] AS $variable) {
+ if ($variable['sequence'] == $v_second['seq']) {
+ $sub_q2 = strip_tags($spr2['naslov']);
+ if ($show_variables_values == true) {
+ $sub_q2 .= '&nbsp;('.strip_tags($spr2['variable']).')';
+ }
+ if ($spr2['tip'] == '16') {
+ $sub_q2.= ', <br style="mso-data-placement:same-cell;" />' . strip_tags($grid2['naslov']) . ($show_variables_values == true ? '&nbsp;(' . strip_tags($grid2['variable']) . ')' : '');
+ } else {
+ $sub_q2.= ', <br style="mso-data-placement:same-cell;" />' . strip_tags($variable['naslov']) . ($show_variables_values == true ? '&nbsp;(' . strip_tags($variable['variable']) . ')' : '');
+ }
+ }
+ }
+ }
+ }
+ if ($sub_q2 == null) {
+ $sub_q2 .= strip_tags($spr2['naslov']);
+ $sub_q2 .= ($show_variables_values == true ? '&nbsp;('.strip_tags($spr2['variable']).')' : '');
+ }
+
+ $output .= '<table border="0"><tr><td></td></tr></table>';
+
+ # izrišemo tabelo
+ # najprej izrišemo naslovne vrstice
+ $output .= '<table border="1">';
+
+ /*$output .= '<colgroup>';
+ $output .= '<col style="width:auto; min-width:150px;" />';
+ $output .= '<col style="width:auto; min-width:150px;" />';
+ if (count($crosstabs['options1']) > 0 ) {
+ $_width_percent = round(100 / count($crosstabs['options1'],2));
+ foreach ($crosstabs['options1'] as $ckey1 =>$crossVariabla) {
+ $output .= '<col style="width:'.$_width_percent.'%;" />';
+ }
+
+ }
+ $output .= '<col style="width:auto;" />';
+ $output .= '</colgroup>';*/
+
+ $output .= '<tr><td></td><td></td>';
+ /*$output .= '<td>&#x3A7;<sup>2</sup> = ';
+ $output .= $this->formatNumber($crosstabs['hi2'], 3, '');
+ $output .= '</td>';*/
+ $output .= '<td align="center" colspan="' . $cols . '">';
+ $output .= '<b>'.$sub_q1.'</b>';
+ $output .= '</td>';
+ $output .= '<td>&nbsp;</td>';
+ $output .= '</tr>';
+ $output .= '<tr><td></td><td></td>';
+ $col_cnt=0;
+ if (count($crosstabs['options1']) > 0 ) {
+ foreach ($crosstabs['options1'] as $ckey1 =>$crossVariabla) {
+ $col_cnt++;
+ #ime variable
+ $output .= '<td align="center">';
+ $output .= $crossVariabla['naslov'];
+ # Äe ni tekstovni odgovor dodamo key
+ if ($crossVariabla['type'] != 't' && $show_variables_values == true) {
+ if ($crossVariabla['vr_id'] == null ) {
+ $output .= '<br style="mso-data-placement:same-cell;" /> ( '.$ckey1.' )';
+ } else {
+ $output .= '<br style="mso-data-placement:same-cell;" /> ( '.$crossVariabla['vr_id'].' )';
+ }
+ }
+ $output .= '</td>';
+ }
+ }
+ $col_cnt++;
+
+ $output .= '<td align="center">' . $lang['srv_analiza_crosstab_skupaj'] . '</td>';
+ $output .= '</tr>';
+
+ $cntY = 0;
+ if (count($crosstabs['options2']) > 0) {
+ foreach ($crosstabs['options2'] as $ckey2 =>$crossVariabla2) {
+ $cntY++;
+ $output .= '<tr>';
+
+ if ($cntY == 1) {
+ # ime variable
+ $output .= '<td align="center" rowspan="' . $rows . '" valign="top">';
+ $output .= '<b>'.$sub_q2.'</b>';
+ $output .= '</td>';
+ }
+ //$css_backY = 'rsdl_bck_variable'.($cntY & 1);
+ $css_backY = ' rsdl_bck_variable1';
+
+ $output .= '<td align="center">';
+
+ $output .= $crossVariabla2['naslov'];
+ # Äe ni tekstovni odgovor dodamo key
+ if ($crossVariabla2['type'] !== 't' && $show_variables_values == true ) {
+ if ($crossVariabla2['vr_id'] == null) {
+ $output .= '<br style="mso-data-placement:same-cell;" /> ( '.$ckey2.' )';
+ } else {
+ $output .= '<br style="mso-data-placement:same-cell;" /> ( '.$crossVariabla2['vr_id'].' )';
+ }
+
+ }
+ $output .= '</td>';
+
+ foreach ($crosstabs['options1'] as $ckey1 => $crossVariabla1) {
+ $output .= '<td align="center">';
+ # celica z vebino
+ {
+ # prikazujemo eno ali veÄ od: frekvenc, odstotkov, residualov
+ $output .= '<table>';
+ if ($this->crosstabClass->crossChk0) {
+ # izpišemo frekvence crostabov
+ $output .= '<tr>';
+ $output .= '<td align="center">';
+ $output .= ((int)$crosstabs_value[$ckey1][$ckey2] > 0) ? $crosstabs_value[$ckey1][$ckey2] : 0;
+ # .$crossTab[$crossVariabla1[cell_id]][$ckey2]
+ #
+
+ $output .= '</td>';
+ $output .= '</tr>';
+ }
+
+ if ($this->crosstabClass->crossChk1 || $this->crosstabClass->crossChk2 || $this->crosstabClass->crossChk3) {
+ # sirina celice v %
+ if ( ($this->crosstabClass->crossChk1 + $this->crosstabClass->crossChk2 + $this->crosstabClass->crossChk3) == 3 )
+ $css_width = ' ctb_w33p';
+ elseif (($this->crosstabClass->crossChk1 + $this->crosstabClass->crossChk2 + $this->crosstabClass->crossChk3) == 2 )
+ $css_width = ' ctb_w50p';
+ else
+ $css_width = '';
+ $css_bt = ( $this->crosstabClass->crossChk0 ) ? 'anl_dash_bt' : '';
+ # izpisemo procente
+ $output .= '<tr>';
+ $output .= '<td align="center">';
+
+ $output .= '<table>';
+ $output .= '<tr>';
+ $col=0;
+
+ if ($this->crosstabClass->crossChk1) {
+ #procent vrstica
+ $col++;
+
+ $css_color = ($this->crosstabClass->doColor == 'true') ? 'ctbChck_sp1' : '';
+ $css_br = $numColumnPercent > $col ? ' anl_dash_br' : '';
+ $output .= '<td align="center">';
+ $output .= $this->formatNumber($this->crosstabClass->getCrossTabPercentage($crosstabs['sumaVrstica'][$ckey2], $crosstabs_value[$ckey1][$ckey2]), SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $output .= '</td>';
+ }
+ if ($this->crosstabClass->crossChk2) {
+ #procent stolpec
+ $col++;
+ $css_br = $numColumnPercent > $col ? ' anl_dash_br' : '';
+ $css_color = ($this->crosstabClass->doColor == 'true') ? 'ctbChck_sp2' : '';
+ $output .= '<td align="center">';
+
+ $output .= $this->formatNumber($this->crosstabClass->getCrossTabPercentage($crosstabs['sumaStolpec'][$ckey1], $crosstabs_value[$ckey1][$ckey2]), SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $output .= '</td>';
+ }
+ if ($this->crosstabClass->crossChk3) {
+ #procent skupni
+ $col++;
+ $css_br = $numColumnPercent > $col ? ' anl_dash_br' : '';
+ $css_color = ($this->crosstabClass->doColor == 'true') ? 'ctbChck_sp3' : '';
+ $output .= '<td align="center">';
+
+ $output .= $this->formatNumber($this->crosstabClass->getCrossTabPercentage($crosstabs['sumaSkupna'], $crosstabs_value[$ckey1][$ckey2]), SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $output .= '</td>';
+ }
+ $output .= '</tr>';
+ $output .= '</table>';
+
+ $output .= '</td>';
+ $output .= '</tr>';
+ }
+ # izpisemo residuale
+ if ($this->crosstabClass->crossChkEC || $this->crosstabClass->crossChkRE || $this->crosstabClass->crossChkSR || $this->crosstabClass->crossChkAR) {
+ # sirina celice v %
+ if ( ($this->crosstabClass->crossChkEC + $this->crosstabClass->crossChkRE + $this->crosstabClass->crossChkSR + $this->crosstabClass->crossChkAR) == 4 )
+ $css_width = ' ctb_w25p';
+ elseif ( ($this->crosstabClass->crossChkEC + $this->crosstabClass->crossChkRE + $this->crosstabClass->crossChkSR + $this->crosstabClass->crossChkAR) == 3 )
+ $css_width = ' ctb_w33p';
+ elseif ( ($this->crosstabClass->crossChkEC + $this->crosstabClass->crossChkRE + $this->crosstabClass->crossChkSR + $this->crosstabClass->crossChkAR) == 2 )
+ $css_width = ' ctb_w50p';
+ else
+ $css_width = '';
+ $css_bt = ( $this->crosstabClass->crossChk0 || ($this->crosstabClass->crossChk1 && $this->crosstabClass->crossChk2 && $this->crosstabClass->crossChk3)) ? 'anl_dash_bt' : '';
+ $output .= '<tr>';
+
+ $output .= '<td align="center">';
+ $output .= '<table>';
+ $output .= '<tr>';
+ $col=0;
+
+ if ($this->crosstabClass->crossChkEC) {
+ $col++;
+ $css_br = $numColumnResidual > $col ? ' anl_dash_br' : '';
+ $css_color = ($this->crosstabClass->doColor == 'true') ? 'crossCheck_EC' : '';
+ $output .= '<td align="center">';
+ $output .= $this->formatNumber($crosstabs['exC'][$ckey1][$ckey2], SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_RESIDUAL'), '');
+ $output .= '</td>';
+ }
+ if ($this->crosstabClass->crossChkRE) {
+ $col++;
+ $css_br = $numColumnResidual > $col ? ' anl_dash_br' : '';
+ $css_color = ($this->crosstabClass->doColor == 'true') ? 'crossCheck_RE' : '';
+ $output .= '<td align="center">';
+ $output .= $this->formatNumber($crosstabs['res'][$ckey1][$ckey2], SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_RESIDUAL'), '');
+ $output .= '</td>';
+ }
+ if ($this->crosstabClass->crossChkSR) {
+ $col++;
+ $css_br = $numColumnResidual > $col ? ' anl_dash_br' : '';
+ $css_color = ($this->crosstabClass->doColor == 'true') ? 'crossCheck_SR' : '';
+ $output .= '<td align="center">';
+ $output .= $this->formatNumber($crosstabs['stR'][$ckey1][$ckey2], SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_RESIDUAL'), '');
+ $output .= '</td>';
+ }
+ if ($this->crosstabClass->crossChkAR) {
+ $col++;
+ $css_br = $numColumnResidual > $col ? ' anl_dash_br' : '';
+ $css_color = ($this->crosstabClass->doColor == 'true') ? 'crossCheck_AR' : '';
+ $output .= '<td align="center">';
+ $output .= $this->formatNumber($crosstabs['adR'][$ckey1][$ckey2], SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_RESIDUAL'), '');
+ $output .= '</td>';
+ }
+ $output .= '</tr>';
+ $output .= '</table>';
+ $output .= '</td>';
+ $output .= '</tr>';
+ }
+ $output .= '</table>';
+ }
+ # konec celice z vsebino
+ $output .= '</td>';
+ }
+
+ // vedno rišemo zadnji stolpec.
+ $output .= '<td align="center" >';
+ $output .= '<table>';
+ if ($this->crosstabClass->crossChk0) {
+ $output .= '<tr>';
+ $output .= '<td align="center" colspan="' . ( $this->crosstabClass->crossChk1 + $this->crosstabClass->crossChk2 + $this->crosstabClass->crossChk3 ).'">';
+ # suma po vrsticah
+ $output .= (int)$crosstabs['sumaVrstica'][$ckey2];
+ $output .= '</td>';
+ $output .= '</tr>';
+ }
+ if ($this->crosstabClass->crossChk1 || $this->crosstabClass->crossChk2 || $this->crosstabClass->crossChk3) {
+ if (($this->crosstabClass->crossChk1 + $this->crosstabClass->crossChk2 + $this->crosstabClass->crossChk3) == 3) {
+ $css_width = ' ctb_w33p';
+ } else if (($this->crosstabClass->crossChk1 + $this->crosstabClass->crossChk2 + $this->crosstabClass->crossChk3) == 2) {
+ $css_width = ' ctb_w50p';
+ } else {
+ $css_width = '';
+ }
+ $css_bt = ( $this->crosstabClass->crossChk0 ) ? ' anl_dash_bt' : '';
+ # suma po vrsticah v procentih
+ $output .= '<tr>';
+ if ($this->crosstabClass->crossChk1) {
+ $css_color = ($this->crosstabClass->doColor == 'true') ? ' ctbChck_sp1' : '';
+ $output .= '<td align="center">';
+ $output .= $this->formatNumber(100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $output .= '</td>';
+ }
+ if ($this->crosstabClass->crossChk2) {
+ $css_color = ($this->crosstabClass->doColor == 'true') ? ' ctbChck_sp2' : '';
+ $css_border = ($this->crosstabClass->crossChk1 ? ' anl_dash_bl ' : '');
+ $output .= '<td align="center">';
+ $output .= $this->formatNumber( ($crosstabs['sumaSkupna'] > 0 ? (100 * $crosstabs['sumaVrstica'][$ckey2] / $crosstabs['sumaSkupna']) : 0), SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $output .= '</td>';
+ }
+ if ($this->crosstabClass->crossChk3) {
+ $css_color = ($this->crosstabClass->doColor == 'true') ? ' ctbChck_sp3' : '';
+ $css_border = ($this->crosstabClass->crossChk1 || $this->crosstabClass->crossChk2 ? ' anl_dash_bl ' : '');
+ $output .= '<td align="center">';
+ $output .= $this->formatNumber( ($crosstabs['sumaSkupna'] > 0 ? (100 * $crosstabs['sumaVrstica'][$ckey2] / $crosstabs['sumaSkupna']) : 0), SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $output .= '</td>';
+ }
+ $output .= '</tr>';
+ }
+
+ $output .= '</table>';
+
+ $output .= '</td>';
+ $output .= '</tr>';
+ }
+ }
+ $cntY++;
+ $output .= '<tr>';
+
+ $output .= '<td align="center">&nbsp;</th>';
+ //$css_backY = 'rsdl_bck_variable'.($cntY & 1);
+ $css_backY = ' rsdl_bck_variable1';
+ $output .= '<td align="center">' . $lang['srv_analiza_crosstab_skupaj'] . '</td>';
+ // skupni sestevki po stolpcih
+ if (count($crosstabs['options1']) > 0)
+ foreach ($crosstabs['options1'] as $ckey1 => $crossVariabla1) {
+ $output .= '<td align="center" >';
+ {
+ # prikazujemo eno od treh možnosti
+ $output .= '<table>';
+ if ($this->crosstabClass->crossChk0) {
+ $output .= '<tr>';
+ $output .= '<td align="center" colspan="'.($this->crosstabClass->crossChk1 + $this->crosstabClass->crossChk2 + $this->crosstabClass->crossChk3).'">';
+ # suma po stolpcih
+ $output .= (int)$crosstabs['sumaStolpec'][$ckey1];
+ $output .= '</td>';
+ $output .= '</tr>';
+ }
+ if ($this->crosstabClass->crossChk1 || $this->crosstabClass->crossChk2 || $this->crosstabClass->crossChk3) {
+ # suma po stolpcih v procentih
+ $css_bt = ($this->crosstabClass->crossChk0) ? ' anl_dash_bt' : '';
+ $output .= '<tr>';
+ if ($this->crosstabClass->crossChk1) {
+ $css_color = ($this->crosstabClass->doColor == 'true') ? ' ctbChck_sp1' : '';
+ $output .= '<td align="center">';
+ $output .= $this->formatNumber( ($crosstabs['sumaSkupna'] > 0 ? (100 * $crosstabs['sumaStolpec'][$ckey1] / $crosstabs['sumaSkupna']) : 0), SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $output .= '</td>';
+ }
+ if ($this->crosstabClass->crossChk2) {
+ $css_color = ($this->crosstabClass->doColor == 'true') ? ' ctbChck_sp2' : '';
+ $output .= '<td align="center">';
+ $output .= $this->formatNumber(100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $output .= '</td>';
+ }
+ if ($this->crosstabClass->crossChk3)
+ {
+ $css_color = ($this->crosstabClass->doColor == 'true') ? ' ctbChck_sp3' : '';
+ $output .= '<td align="center">';
+ $output .= $this->formatNumber( ($crosstabs['sumaSkupna'] > 0 ? (100 * $crosstabs['sumaStolpec'][$ckey1] / $crosstabs['sumaSkupna']) : 0), SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $output .= '</td>';
+ }
+ $output .= '</tr>';
+ }
+ $output .= '</table>';
+ }
+ $output .= '</td>';
+ }
+ # zadnja celica z skupno sumo
+ $output .= '<td align="center">';
+ {
+ $output .= '<table>';
+ if ($this->crosstabClass->crossChk0) {
+ $output .= '<tr>';
+ $output .= '<td align="center" colspan="'.($this->crosstabClass->crossChk1 + $this->crosstabClass->crossChk2 + $this->crosstabClass->crossChk3).'">';
+ # skupna suma
+ $output .= (int)$crosstabs['sumaSkupna'];
+ $output .= '</td>';
+ $output .= '</tr>';
+ }
+ if ($this->crosstabClass->crossChk1 || $this->crosstabClass->crossChk2 || $this->crosstabClass->crossChk3) {
+ # suma po stolpcih v procentih
+ $css_bt = ($this->crosstabClass->crossChk0) ? ' anl_dash_bt' : '';
+ $output .= '<tr>';
+ if ($this->crosstabClass->crossChk1) {
+ $css_color = ($this->crosstabClass->doColor == 'true') ? ' ctbChck_sp1' : '';
+ $css_border = ($this->crosstabClass->crossChk2 || $this->crosstabClass->crossChk3) ? ' anl_dash_br' : '';
+ $output .= '<td align="center">';
+ $output .= $this->formatNumber(100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $output .= '</td>';
+ }
+ if ($this->crosstabClass->crossChk2) {
+ $css_color = ($this->crosstabClass->doColor == 'true') ? ' ctbChck_sp2' : '';
+ $css_border = ($this->crosstabClass->crossChk3) ? ' anl_dash_br' : '';
+ $output .= '<td align="center">';
+ $output .= $this->formatNumber(100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $output .= '</td>';
+ }
+ if ($this->crosstabClass->crossChk3) {
+ $css_color = ($this->crosstabClass->doColor == 'true') ? ' ctbChck_sp3' : '';
+ $output .= '<td align="center">';
+ $output .= $this->formatNumber(100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $output .= '</td>';
+ }
+ $output .= '</tr>';
+ }
+ $output .= '</table>';
+ }
+ $output .= '</td>';
+
+ $output .= '</tr>';
+ $output .= '</table>';
+
+ }
+ }
+ }
+ }
+
+
+
+
+ /*Skrajsa tekst in doda '...' na koncu*/
+ function snippet($text,$length=64,$tail="...")
+ {
+ $text = trim($text);
+ $txtl = strlen($text);
+ if($txtl > $length)
+ {
+ for($i=1;$text[$length-$i]!=" ";$i++)
+ {
+ if($i == $length)
+ {
+ return substr($text,0,$length) . $tail;
+ }
+ }
+ $text = substr($text,0,$length-$i+1) . $tail;
+ }
+ return $text;
+ }
+
+ function setUserId($usrId) {$this->anketa['uid'] = $usrId;}
+ function getUserId() {return ($this->anketa['uid'])?$this->anketa['uid']:false;}
+
+ function formatNumber($value,$digit=0,$sufix="")
+ {
+ if ( $value <> 0 && $value != null )
+ $result = round($value,$digit);
+ else
+ $result = "0";
+ //$result = number_format($result, $digit, ',', '.').$sufix;
+ $result = number_format($result, $digit, ',', '') . $sufix;
+
+ // Preprecimo da bi se stevilo z decimalko pretvorilo v datum
+ //$result = '="'. $result.'"';
+
+ return $result;
+ }
+}
+
+?> \ No newline at end of file
diff --git a/admin/exportclases/class.xlsIzvozAnalizaFrekvenca.php b/admin/exportclases/class.xlsIzvozAnalizaFrekvenca.php
new file mode 100644
index 0000000..6fcf638
--- /dev/null
+++ b/admin/exportclases/class.xlsIzvozAnalizaFrekvenca.php
@@ -0,0 +1,688 @@
+<?php
+
+global $site_path;
+
+ include_once('../../function.php');
+ include_once('../survey/definition.php');
+ include_once('../exportclases/class.xls.php');
+
+class XlsIzvozAnalizaFrekvenca {
+
+ var $anketa; // trenutna anketa
+ var $pi=array('canCreate'=>false); // za shrambo parametrov in sporocil
+
+ private $headFileName = null; # pot do header fajla
+ private $dataFileName = null; # pot do data fajla
+ private $dataFileStatus = null; # status data datoteke
+ private $CID = null; # class za inkrementalno dodajanje fajlov
+
+ var $current_loop = 'undefined';
+
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null, $sprID = null, $loop = null)
+ {
+ global $site_path;
+ global $global_user_id;
+ global $output;
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) ){
+
+ $this->anketa['id'] = $anketa;
+ $this->spremenljivka = $sprID;
+
+ SurveyAnalysis::Init($this->anketa['id']);
+ SurveyAnalysis::$setUpJSAnaliza = false;
+
+ // create new XLS document
+ $this->xls = new xls();
+
+ // Poskrbimo za datoteko s podatki
+ $SDF = SurveyDataFile::get_instance();
+ $SDF->init($this->anketa['id']);
+ $SDF->prepareFiles();
+
+ $this->headFileName = $SDF->getHeaderFileName();
+ $this->dataFileName = $SDF->getDataFileName();
+ $this->dataFileStatus = $SDF->getStatus();
+
+ SurveyZankaProfiles :: Init($this->anketa['id'], $global_user_id);
+ $this->current_loop = ($loop != null) ? $loop : $this->current_loop;
+ }
+ else{
+ $this->pi['msg'] = "Anketa ni izbrana!";
+ $this->pi['canCreate'] = false;
+ return false;
+ }
+
+ if ( SurveyInfo::getInstance()->SurveyInit($this->anketa['id']) && $this->init()){
+ $this->anketa['uid'] = $global_user_id;
+ SurveyUserSetting::getInstance()->Init($this->anketa['id'], $this->anketa['uid']);
+ }
+ else
+ return false;
+
+ // ce smo prisli do tu je vse ok
+ $this->pi['canCreate'] = true;
+
+ return true;
+ }
+
+ function getAnketa()
+ {
+ return $this->anketa['id'];
+ }
+
+ function checkCreate()
+ {
+ return $this->pi['canCreate'];
+ }
+
+ function getFile($fileName)
+ {
+ //Close and output rtf document
+// $this->rtf->Output($fileName, 'I');
+ $output = $this->createXls();
+ $this->xls->display($fileName, $output);
+ }
+
+ function init()
+ {
+ return true;
+ }
+
+ function createXls(){
+ global $site_path;
+ global $lang;
+ global $output;
+
+ $convertTypes = array('charSet' => "windows-1250",
+ 'delimit' => ";",
+ 'newLine' => "\n",
+ 'BOMchar' => "\xEF\xBB\xBF");
+
+ $output = $convertTypes['BOMchar'];
+
+ $output .= '<table border="0"><tr><td colspan="10"><font size="3"><b>'.$lang['export_analisys_freq'].'</b></font></td></tr></table>';
+
+ # preberemo header
+ if ($this->headFileName !== null) {
+ //polovimo podatke o nastavitvah trenutnega profila (missingi..)
+ SurveyAnalysis::$missingProfileData = SurveyMissingProfiles::getProfile(SurveyAnalysis::$currentMissingProfile);
+
+ // Preverimo ce imamo zanke (po skupinah)
+ SurveyAnalysis::$_LOOPS = SurveyZankaProfiles::getFiltersForLoops();
+
+ # Äe nimamo zank
+ if(count(SurveyAnalysis::$_LOOPS) == 0){
+
+ $this->displayTables();
+ }
+ else{
+ // izrisemo samo eno tabelo iz enega loopa
+ if($this->current_loop > 0){
+
+ $loop = SurveyAnalysis::$_LOOPS[(int)$this->current_loop-1];
+ $loop['cnt'] = $this->current_loop;
+ SurveyAnalysis::$_CURRENT_LOOP = $loop;
+
+ // Izpisemo naslov zanke za skupino
+ $output .= '<table border="0"><tr><td></td></tr></table>';
+ $output .= '<table border="0"><tr><td colspan="10"><font size="3"><b>'.$lang['srv_zanka_note'].$loop['text'].'</b></font></td></tr></table>';
+
+ $this->displayTables();
+ }
+ // Izrisemo vse tabele spremenljivka (iz vseh loopov)
+ else{
+ $loop_cnt = 0;
+ # Äe mamo zanke
+ foreach(SurveyAnalysis::$_LOOPS AS $loop) {
+ $loop_cnt++;
+ $loop['cnt'] = $loop_cnt;
+ SurveyAnalysis::$_CURRENT_LOOP = $loop;
+
+ // Izpisemo naslov zanke za skupino
+ $output .= '<table border="0"><tr><td></td></tr></table>';
+ $output .= '<table border="0"><tr><td colspan="10"><font size="3"><b>'.$lang['srv_zanka_note'].$loop['text'].'</b></font></td></tr></table>';
+
+ $this->displayTables();
+ }
+ }
+ }
+
+ } // end if else ($_headFileName == null)
+
+ return $output;
+ }
+
+ function displayTables(){
+ global $site_path;
+ global $lang;
+ global $global_user_id;
+
+ #preberemo HEADERS iz datoteke
+ SurveyAnalysis::$_HEADERS = unserialize(file_get_contents($this->headFileName));
+
+ # polovimo frekvence
+ SurveyAnalysis::getFrequencys();
+ $vars_count = count(SurveyAnalysis::$_FILTRED_VARIABLES);
+
+ #odstranimo sistemske variable
+ SurveyAnalysis::removeSystemVariables();
+
+ foreach (SurveyAnalysis::$_HEADERS AS $spid => $spremenljivka) {
+ # preverjamo ali je meta
+ if (($spremenljivka['tip'] != 'm'
+ && in_array($spremenljivka['tip'], SurveyAnalysis::$_FILTRED_TYPES ))
+ && (!isset($_spid) || (isset($_spid) && $_spid == $spid))
+ && ($this->spremenljivka == $spid || $this->spremenljivka == null) ) {
+ # ali imamo sfiltrirano spremenljivko
+ if ($vars_count == 0 || ($vars_count > 0 && isset(SurveyAnalysis::$_FILTRED_VARIABLES[$spid]) ) ) {
+
+ # prikazujemo v odvisnosti od kategorije spremenljivke
+ switch ($spremenljivka['tip']) {
+ case 1: # radio - prikjaže navpiÄno
+ case 2: #checkbox Äe je dihotomna:
+ case 3: # dropdown - prikjaže navpiÄno
+ case 6: # multigrid
+ case 4: # text
+ case 7:# variabla tipa »število«
+ case 8: # datum
+ case 16: #multicheckbox Äe je dihotomna:
+ case 17: #razvrÅ¡Äanje Äe je ordinalna
+ case 18: # vsota
+ case 19: # multitext
+ case 20: # multi number
+ case 21: # besedilo*
+ case 22: # kalkulacija
+ case 26: # lokacija
+ self::frequencyVertical($spid);
+ break;
+ case 5:
+ # nagovor
+ //pdfIzvozAnalizaSums::sumNagovor($spid,'freq');
+ break;
+
+ }
+
+ }
+
+ } // end if $spremenljivka['tip'] != 'm'
+
+ } // end foreach SurveyAnalysis::$_HEADERS
+ }
+
+
+ /** Izriše frekvence v vertikalni obliki
+ *
+ * @param unknown_type $spid
+ */
+ function frequencyVertical($spid) {
+ global $lang;
+ global $output;
+
+ $output .= '<table border="0"><tr><td></td></tr></table>';
+
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+ # Äe je besedilo * in je samo ena kategorija je inline legenda false
+ $inline_legenda = (SurveyAnalysis::$_HEADERS[$spid]['cnt_all'] == 1 || in_array($spremenljivka['tip'],array(1,8) ) ) ? false: true;
+
+ # tekst vprašanja
+ $output .= '<table border="1">';
+ # naslovna vrstica
+ $output .= '<tr>';
+ $output .= '<td align="center"><b>'.$spremenljivka['variable'].'</b></td>';
+ #odgovori
+ $output .= '<td colspan="'.(SurveyAnalysis::$_HEADERS[$spid]['show_valid_percent'] == true ? '5' : '4').'"><b>'.$spremenljivka['naslov'].'</b>';
+ $output .= '</td>';
+ $output .= '</tr>';
+ $output .= '<tr>';
+ #odgovori
+ $output .= '<td></td>';
+ $output .= '<td align="center">'.$lang['srv_analiza_frekvence_titleAnswers'] . '</td>';
+ $output .= '<td align="center">'. $lang['srv_analiza_frekvence_titleFrekvenca'] .'</td>';
+ $output .= '<td align="center">'. $lang['srv_analiza_frekvence_titleOdstotek'] .'</td>';
+ if (SurveyAnalysis::$_HEADERS[$spid]['show_valid_percent'] == true) {
+ $output .= '<td align="center">'. $lang['srv_analiza_frekvence_titleVeljavni'] .'</td>';
+ }
+ $output .= '<td align="center">'. $lang['srv_analiza_frekvence_titleKumulativa'] .'</td>';
+ $output .= '</tr>';
+ // konec naslovne vrstice
+
+ $_answersOther = array();
+
+ # dodamo opcijo kje izrisujemo legendo
+ $options=array('inline_legenda' => $inline_legenda, 'isTextAnswer' => false, 'isOtherAnswer' => false, 'num_show_records' => $num_show_records);
+
+ # izpišemo vlejavne odgovore
+ $_current_grid = null;
+ if (count($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $_variables_count = count($grid['variables']);
+
+ # dodamo dodatne vrstice z albelami grida
+ if ($_variables_count > 0 )
+ foreach ($grid['variables'] AS $vid => $variable ){
+
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if (($variable['text'] != true && $variable['other'] != true)
+ || (in_array($spremenljivka['tip'],array(4,8,21,22,26)))){
+ # dodamo ime podvariable
+ //if ($_variables_count > 1 && in_array($spremenljivka['tip'],array(2,6,7,16,17,18,19,20,21))) {
+ if ($inline_legenda) {
+ # ali riÅ¡emo dvojno Ärto med grupami
+ if ( $_current_grid != $gid && $_current_grid !== null && $spremenljivka['tip'] != 6) {
+ $options['doubleTop'] = true;
+ $_current_grid = $gid;
+ } else {
+ $options['doubleTop'] = false;
+ $_current_grid = $gid;
+ }
+ self::outputSubVariablaVertical($spremenljivka,$variable,$grid,$spid,$options);
+ }
+
+ $maxAnswer = (SurveyDataSettingProfiles :: getSetting('numOpenAnswers') > 0) ? SurveyDataSettingProfiles :: getSetting('numOpenAnswers') : 30;
+ $counter = 0;
+ $_kumulativa = 0;
+
+ #po potrebi posortiramo podatke
+ if ($spremenljivka['tip'] == 7 && is_array(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'])) {
+ ksort(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']);
+ }
+ //SurveyAnalysis::$_FREQUENCYS[$_sequence]
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'])> 0 ) {
+ # tekstovne odgovore posortiramo kronološko
+ if ($spremenljivka['tip'] == 21 || $spremenljivka['tip'] == 4) {
+ $_valid_answers = SurveyAnalysis :: sortTextValidAnswers($spid,$variable,SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']);
+ } else {
+ $_valid_answers = SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'];
+ }
+ foreach ($_valid_answers AS $vkey => $vAnswer) {
+ //if ($counter < $maxAnswer) {
+ if ($vAnswer['cnt'] > 0 || true) { # izpisujemo samo tiste ki nisno 0
+ if (in_array($spremenljivka['tip'],array(4,7,8,19,20,21,26))) { // text, number, datum, mtext, mnumber, text*
+ $options['isTextAnswer'] = true;
+ } else {
+ $options['isTextAnswer'] = false;
+ }
+ $counter = self::outputValidAnswerVertical($counter,$vkey,$vAnswer,$_sequence,$spid,$_kumulativa,$options);
+ }
+ //}
+ }
+ # izpišemo sumo veljavnih
+ $counter = self::outputSumaValidAnswerVertical($counter,$_sequence,$spid,$options);
+ }
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'] AS $ikey => $iAnswer) {
+ if ($iAnswer['cnt'] > 0 ) { # izpisujemo samo tiste ki nisno 0
+ $counter = self::outputInvalidAnswerVertical($counter,$ikey,$iAnswer,$_sequence,$spid,$options);
+ }
+ }
+ # izpišemo sumo veljavnih
+ $counter = self::outputSumaInvalidAnswerVertical($counter,$_sequence,$spid,$options);
+ }
+ #izpišemo še skupno sumo
+ $counter = self::outputSumaVertical($counter,$_sequence,$spid,$options);
+ } else {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ }
+ }
+
+ $output .= '</table>';
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ self::outputOtherAnswers($oAnswers);
+ }
+ }
+ }
+
+ function outputSubVariablaVertical($spremenljivka,$variable,$grid,$spid,$_options = array()) {
+ global $lang;
+ global $output;
+
+ # opcije
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ 'doubleTop' =>false, # ali imamo novo grupa in nardimo dvojni rob
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+
+ $output .= '<tr>';
+
+ $output .= '<td align="center">'.$variable['variable'].'</td>';
+
+ $output .= '<td align="left">';
+ // $output .= $grid['naslov'] . ' - ' .$variable['naslov'];
+ $output .= $variable['naslov'];
+ $output .= '</td>';
+
+ $output .= '<td class="anl_bb anl_br '.$css_bck.' anl_w70">&nbsp;</td>';
+ $output .= '<td class="anl_bb anl_br '.$css_bck.' anl_w70">&nbsp;</td>';
+ if (SurveyAnalysis::$_HEADERS[$spid]['show_valid_percent'] == true) {
+ $output .= '<td class="anl_bb anl_br '.$css_bck.' anl_w70">&nbsp;</td>';
+ }
+ $output .= '<td class="anl_bb '.$css_bck.' anl_w70">&nbsp;</td>';
+ $output .= '</tr>';
+ }
+
+
+ function outputValidAnswerVertical($counter,$vkey,$vAnswer,$_sequence,$spid,&$_kumulativa,$_options=array()) {
+ global $lang;
+ global $output;
+
+ # opcije
+
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ );
+
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+
+ $_valid = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] > 0 ) ? 100*$vAnswer['cnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] : 0;
+ $_percent = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] > 0 ) ? 100*$vAnswer['cnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] : 0;
+ $_kumulativa += $_valid;
+
+ $output .= '<tr>';
+ $output .= '<td></td>';
+ $output .= '<td align="left">'.strip_tags($vkey, "<br>");
+ $output .= (($options['isTextAnswer'] == false && (string)$vkey != $vAnswer['text']) ? ' ('.$vAnswer['text'] .')' : '');
+ $output .= '</td>';
+
+ $output .= '<td align="center">';
+ $output .= (int)$vAnswer['cnt'];
+ $output .= '</td>';
+ $output .= '<td align="center">';
+ $output .= self::formatNumber($_percent, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $output .= '</td>';
+ if (SurveyAnalysis::$_HEADERS[$spid]['show_valid_percent']) {
+ $output .= '<td align="center">';
+ $output .= self::formatNumber($_valid, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $output .= '</td>';
+ }
+ $output .= '<td align="center">';
+ $output .= self::formatNumber($_kumulativa, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+
+ $output .= '</td align="center">';
+ $output .= '</tr>';
+ $counter++;
+ return $counter;
+ }
+
+ function outputSumaValidAnswerVertical($counter,$_sequence,$spid,$_options=array()) {
+ global $lang;
+ global $output;
+
+ # opcije
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+
+ $output .= '<tr>';
+ $output .= '<td align="center">'.$lang['srv_anl_valid'].'</td>';
+ $output .= '<td>'.$lang['srv_anl_suma1'].'</td>';
+
+ $output .= '<td align="center">';
+
+ $output .= SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] > 0 ? SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] : 0;
+ $output .= '</td>';
+ $_percent = SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] > 0
+ ? 100 * SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt']
+ : 0;
+ $output .= '<td align="center">' . self::formatNumber($_percent, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%') . '</td>';
+ if (SurveyAnalysis::$_HEADERS[$spid]['show_valid_percent'] == true) {
+ $output .= '<td align="center">' . self::formatNumber(100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%') . '</td>';
+ }
+ $output .= '<td align="center"></td>';
+ $output .= '</tr>';
+// $counter++;
+ return $counter;
+
+ }
+
+ function outputInvalidAnswerVertical($counter,$vkey,$vAnswer,$_sequence,$spid,$_options=array()) {
+ global $lang;
+ global $output;
+
+ # opcije
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+
+ $_percent = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] > 0 ) ? 100*$vAnswer['cnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] : 0;
+ $_invalid = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'] > 0 ) ? 100*$vAnswer['cnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'] : 0;
+
+ $_Z_MV = ((int)SurveyAnalysis::$missingProfileData['display_mv_type'] === 2) ? TRUE : FALSE;
+ if($_Z_MV){
+ $output .= '<tr>';
+ $output .= '<td></td>';
+ $output .= '<td>';
+ $output .= $vkey . ' (' . $vAnswer['text'].')';
+ //$output .= self::formatNumber($_invalid, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ //$output .= $vAnswer['cnt'];
+ $output .= '</td>';
+
+ $output .= '<td align="center">';
+ $output .= (int)$vAnswer['cnt'];
+ $output .= '</td>';
+ $output .= '<td align="center">';
+ $output .= self::formatNumber($_percent, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $output .= '</td>';
+ if (SurveyAnalysis::$_HEADERS[$spid]['show_valid_percent']) {
+ $output .= '<td align="center">';
+ $output .= '</td>';
+ }
+ $output .= '<td align="center">';
+ $output .= '</td>';
+ $output .= '</tr>';
+ }
+
+ $counter++;
+ return $counter;
+ }
+
+ function outputSumaInvalidAnswerVertical($counter,$_sequence,$spid,$_options = array()) {
+ global $lang;
+ global $output;
+
+ # opcije
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+
+ $_percent = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] > 0 ) ? 100*SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] : 0;
+
+ $_brez_MV = ((int)SurveyAnalysis::$missingProfileData['display_mv_type'] === 0) ? TRUE : FALSE;
+
+ $_sufix = (SurveyAnalysis::$podstran == M_ANALYSIS_SUMMARY_NEW ? '_NEW' : '');
+ # da deluje razpiranje manjkajoÄih tudi kadar imamo skupine
+ if (isset(SurveyAnalysis::$_CURRENT_LOOP['cnt'])) {
+ $_sufix = '_loop'.SurveyAnalysis::$_CURRENT_LOOP['cnt'].$_sufix;
+ }
+
+ if(!$_brez_MV){
+ $output .= '<tr>';
+
+ $output .= '<td align="center">'.$lang['srv_anl_missing'].'</td>';
+
+ $output .= '<td>';
+ $output .= $lang['srv_analiza_manjkajocevrednosti'];
+ //$output .= '100.0%';
+ //$output .= SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'];
+ $output .= '</td>';
+
+ $output .= '<td align="center">';
+ $answer['cnt'] = SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'] > 0 ? SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'] : 0;
+ $output .= (int)$answer['cnt'];
+ $output .= '</td>';
+ $output .= '<td align="center">';
+ $output .= self::formatNumber($_percent, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $output .= '</td>';
+ if (SurveyAnalysis::$_HEADERS[$spid]['show_valid_percent']) {
+ $output .= '<td align="center">';
+ $output .= '</td>';
+ }
+ $output .= '<td align="center"></td>';
+ $output .= '</tr>';
+ }
+
+ $counter++;
+ return $counter;
+ }
+
+ function outputSumaVertical($counter,$_sequence,$spid, $_options = array()) {
+ global $lang;
+ global $output;
+
+ # opcije
+
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+
+ $_brez_MV = ((int)SurveyAnalysis::$missingProfileData['display_mv_type'] === 0) ? TRUE : FALSE;
+
+ if(!$_brez_MV){
+ $output .= '<tr>';
+ //$output .= '<td class="anl_bl anl_ac anl_dash_bt anl_br anl_bb gray">&nbsp;</td>'; // $lang['srv_anl_appropriate']
+ //$output .= '<td class="anl_al anl_dash_bt anl_br anl_bb red anl_ita'.$cssBck.'">'.$lang['srv_anl_suma2'].'</td>';
+ $output .= '<td align="center">'.$lang['srv_anl_suma2'].'</td>';
+ $output .= '<td></td>';
+
+ $output .= '<td align="center">' . (SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] ? SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] : 0) . '</td>';
+ $output .= '<td align="center">' . SurveyAnalysis::formatNumber('100', SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%') . '</td>';
+ if (SurveyAnalysis::$_HEADERS[$spid]['show_valid_percent']) {
+ $output .= '<td align="center"></td>';
+ }
+ $output .= '<td align="center"></td>';
+ $output .= '</tr>';
+ }
+ }
+
+ /** izpišemo tabelo z tekstovnimi odgovori drugo
+ *
+ * @param $skey
+ * @param $oAnswers
+ * @param $spid
+ */
+ function outputOtherAnswers($oAnswers) {
+ global $lang;
+ global $output;
+
+ $output .= '<table border="0"><tr><td></td></tr></table>';
+
+ $spid = $oAnswers['spid'];
+ $_variable = SurveyAnalysis::$_HEADERS[$spid]['grids'][$oAnswers['gid']]['variables'][$oAnswers['vid']];
+ $_sequence = $_variable['sequence'];
+ $_frekvence = SurveyAnalysis::$_FREQUENCYS[$_variable['sequence']];
+
+ $output .= '<table border="1">';
+ $output .= '<tr>';
+ $output .= '<td>'. $_variable['variable'] . '</td>';
+ $output .= '<td colspan="5">';
+ $output .= '<span>'.SurveyAnalysis::$_HEADERS[$oAnswers['spid']]['variable'].' ('.$_variable['naslov'].' )</span>';
+
+ $output .= '</td>';
+ $output .= '</tr>';
+
+ $output .= '<tr>';
+ $output .= '<td>';
+ $output .= '</td>';
+
+ $output .= '<td>'. $lang['srv_analiza_frekvence_titleAnswers'] .'</td>';
+
+ $output .= '<td>'. $lang['srv_analiza_frekvence_titleFrekvenca'] .'</td>';
+ $output .= '<td>'. $lang['srv_analiza_frekvence_titleOdstotek'] .'</td>';
+ $output .= '<td>'. $lang['srv_analiza_frekvence_titleVeljavni'] .'</td>';
+ $output .= '<td>'. $lang['srv_analiza_frekvence_titleKumulativa'] .'</td>';
+ $output .= '</tr>';
+ // konec naslovne vrstice
+
+ $counter = 1;
+ $_kumulativa = 0;
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'] AS $vkey => $vAnswer) {
+ if ($vAnswer['cnt'] > 0 ) { # izpisujemo samo tiste ki nisno 0
+ $counter = self::outputValidAnswerVertical($counter,$vkey,$vAnswer,$_sequence,$spid,$_kumulativa,array('isOtherAnswer'=>true));
+ }
+ }
+ # izpišemo sumo veljavnih
+ $counter = self::outputSumaValidAnswerVertical($counter,$_sequence,$spid,array('isOtherAnswer'=>true));
+ }
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'] AS $ikey => $iAnswer) {
+ if ($iAnswer['cnt'] > 0 ) { # izpisujemo samo tiste ki nisno 0
+ $counter = self::outputInvalidAnswerVertical($counter,$ikey,$iAnswer,$_sequence,$spid,array('isOtherAnswer'=>true));
+ }
+ }
+ # izpišemo sumo veljavnih
+ $counter = self::outputSumaInvalidAnswerVertical($counter,$_sequence,$spid,array('isOtherAnswer'=>true));
+ }
+ #izpišemo še skupno sumo
+ $counter = self::outputSumaVertical($counter,$_sequence,$spid,array('isOtherAnswer'=>true));
+
+ $output .= '</table>';
+ }
+
+
+ function encodeText($text)
+ { // popravimo sumnike ce je potrebno
+
+ $stringIn = array("&#269;","&#353;","&#273;","&#263;","&#382;","&#268;","&#352;","&#272;","&#262;","&#381;","&nbsp;");
+ $stringOut = array("Ä","Å¡","Ä‘","ć","ž","ÄŒ","Å ","Ä","Ć","Ž"," ");
+
+ //$text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace($stringIn, $stringOut, $text);
+ return $text;
+ }
+
+ function enkaEncode($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ return strip_tags($text);
+ }
+
+ function formatNumber ($value, $digit = 0, $sufix = "") {
+ if ($value <> 0 && $value != null)
+ $result = round($value, $digit);
+ else
+ $result = "0";
+ //$result = number_format($result, $digit, '.', ',') . $sufix;
+ $result = number_format($result, $digit, ',', '') . $sufix;
+
+ // Preprecimo da bi se stevilo z decimalko pretvorilo v datum
+ //$result = '="'. $result.'"';
+
+ return $result;
+ }
+
+}
+
+?> \ No newline at end of file
diff --git a/admin/exportclases/class.xlsIzvozAnalizaMean.php b/admin/exportclases/class.xlsIzvozAnalizaMean.php
new file mode 100644
index 0000000..c007754
--- /dev/null
+++ b/admin/exportclases/class.xlsIzvozAnalizaMean.php
@@ -0,0 +1,294 @@
+<?php
+
+ global $site_path;
+
+ include_once('../../function.php');
+ include_once('../survey/definition.php');
+ include_once('../exportclases/class.xls.php');
+
+
+/** Class za generacijo xls-ja
+ *
+ */
+class XlsIzvozAnalizaMean {
+
+ var $anketa; // trenutna anketa
+
+ private $headFileName = null; // pot do header fajla
+ private $dataFileName = null; // pot do data fajla
+ private $dataFileStatus = null; // status data datoteke
+
+ public $meansClass = null; //means class
+
+ var $meanData1;
+ var $meanData2;
+
+ var $sessionData; // podatki ki so bili prej v sessionu - za nastavitve, ki se prenasajo v izvoze...
+
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null, $podstran = 'mean'){
+ global $site_path;
+ global $global_user_id;
+ global $output;
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) ){
+
+ $this->anketa['id'] = $anketa;
+
+ SurveyAnalysis::Init($this->anketa['id']);
+ SurveyAnalysis::$setUpJSAnaliza = false;
+
+ // create new XLS document
+ $this->xls = new xls();
+
+ // Poskrbimo za datoteko s podatki
+ $SDF = SurveyDataFile::get_instance();
+ $SDF->init($this->anketa['id']);
+ $SDF->prepareFiles();
+
+ $this->headFileName = $SDF->getHeaderFileName();
+ $this->dataFileName = $SDF->getDataFileName();
+ $this->dataFileStatus = $SDF->getStatus();
+
+ $_GET['a'] = A_ANALYSIS;
+
+ // preberemo nastavitve iz baze (prej v sessionu)
+ SurveyUserSession::Init($this->anketa['id']);
+ $this->sessionData = SurveyUserSession::getData('means');
+
+ // ustvarimo means objekt
+ $this->meansClass = new SurveyMeans($anketa);
+
+ if ( SurveyInfo::getInstance()->SurveyInit($this->anketa['id']) && $this->init()){
+ $this->anketa['uid'] = $global_user_id;
+ SurveyUserSetting::getInstance()->Init($this->anketa['id'], $this->anketa['uid']);
+ }
+ else
+ return false;
+
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+
+ // SETTERS && GETTERS
+
+ function getFile($fileName)
+ {
+ //Close and output rtf document
+ $output = $this->createXls();
+ $this->xls->display($fileName, $output);
+ }
+
+
+ function init()
+ {
+ return true;
+ }
+
+ function encodeText($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace(array("&scaron;","&#353;","&#269;"),array("Å¡","Å¡","Ä"),$text);
+ return strip_tags($text);
+ }
+
+ function createXls()
+ {
+ global $site_path;
+ global $lang;
+ global $output;
+
+ $convertTypes = array('charSet' => "windows-1250",
+ 'delimit' => ";",
+ 'newLine' => "\n",
+ 'BOMchar' => "\xEF\xBB\xBF");
+
+ $output = $convertTypes['BOMchar'];
+
+ $output .= '<table border="0"><tr><td colspan="10"><font size="3"><b>'.$lang['export_analisys_means'].'</b></font></td></tr></table>';
+
+
+ $means = array();
+ # Äe ne uporabljamo privzetega Äasovnega profila izpiÅ¡emo opozorilo
+ //$doNewLine = SurveyTimeProfiles :: printIsDefaultProfile(false);
+
+ # Äe imamo filter ifov ga izpiÅ¡emo
+ //$doNewLine = SurveyConditionProfiles:: getConditionString($doNewLine );
+
+ # Äe imamo filter spremenljivk ga izpiÅ¡emo
+ //$doNewLine = SurveyVariablesProfiles:: getProfileString($doNewLine , true) || $doNewLine;
+
+
+ $this->meanData1 = $this->sessionData['means_variables']['variabla1'];
+ $this->meanData2 = $this->sessionData['means_variables']['variabla2'];
+
+ if ($this->meanData1 !== null && $this->meanData2 !== null) {
+ $variables1 = $this->meanData2;
+ $variables2 = $this->meanData1;
+ $c1=0;
+ $c2=0;
+ if (is_array($variables2) && count($variables2) > 0) {
+ foreach ($variables2 AS $v_second) {
+ if (is_array($variables1) && count($variables1) > 0) {
+ foreach ($variables1 AS $v_first) {
+ $_means = $this->meansClass->createMeans($v_first, $v_second);
+ if ($_means != null) {
+ $means[$c1][$c2] = $_means;
+ }
+ $c2++;
+ }
+ }
+ $c1++;
+ $c2=0;
+ }
+ }
+
+ if (is_array($means) && count($means) > 0) {
+
+ foreach ($means AS $mean_sub_grup) {
+
+ $output .= '<table border="0"><tr><td></td></tr></table>';
+
+ $this->displayMeansTable($mean_sub_grup);
+ }
+ }
+ }
+
+ return $output;
+ }
+
+ public function displayMeansTable($_means) {
+ global $lang;
+ global $output;
+
+ #Å¡tevilo vratic in Å¡tevilo kolon
+ $cols = count($_means);
+ # preberemo kr iz prvega loopa
+ $rows = count($_means[0]['options']);
+
+ # ali prikazujemo vrednosti variable pri spremenljivkah
+ $show_variables_values = $this->meansClass->doValues;
+ # izrišemo tabelo
+ $output .= '<table border="1">';
+
+ $output .= '<tr>';
+
+ $label2 = $this->meansClass->getSpremenljivkaTitle($_means[0]['v2']);
+ $label2 = $this->encodeText($label2);
+
+ $output .= '<td align="center" rowspan="2">';
+ $output .= '<b>'.$label2.'</b>';
+ $output .= '</td>';
+
+ for ($i = 0; $i < $cols; $i++) {
+ $output .= '<td align="center" colspan="2" >';
+ $label1 = $this->meansClass->getSpremenljivkaTitle($_means[$i]['v1']);
+ $label1 = $this->encodeText($label1);
+ $output .= '<b>'.$label1.'</b>';
+ $output .= '</td>';
+ }
+ $output .= '</tr>';
+ $output .= '<tr>';
+
+ for ($i = 0; $i < $cols; $i++) {
+ #PovpreÄje
+ $output .= '<td align="center">';
+ $output .= $lang['srv_means_label'];
+ $output .= '</td>';
+ #odstotki
+ $output .= '<td align="center">'.$lang['srv_means_label4'].'</td>';
+ }
+ $output .= '</tr>';
+
+ if (count($_means[0]['options']) > 0) {
+ foreach ($_means[0]['options'] as $ckey2 =>$crossVariabla2) {
+ $output .= '<tr>';
+
+
+ $output .= '<td align="center">';
+ $output .= $crossVariabla2['naslov'];
+ # Äe ni tekstovni odgovor dodamo key
+ if ($crossVariabla2['type'] !== 't' ) {
+ if ($show_variables_values == true) {
+ if ($crossVariabla2['vr_id'] == null) {
+ $output .= '&nbsp;( '.$ckey2.' )';
+ } else {
+ $output .= '&nbsp;( '.$crossVariabla2['vr_id'].' )';
+ }
+ }
+ }
+ $output .= '</td>';
+ # celice z vsebino
+ for ($i = 0; $i < $cols; $i++) {
+ $output .= '<td align="center" k1="'.$ckey1.'" k2="'.$ckey2.'" n1="'.$crossVariabla1['naslov'].'" n2="'.$crossVariabla2['naslov'].'" v1="'.$crossVariabla1['vr_id'].'" v2="'.$crossVariabla2['vr_id'].'">';
+ $output .= $this->meansClass->formatNumber($_means[$i]['result'][$ckey2], SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_RESIDUAL'));
+ $output .= '</td>';
+ $output .= '<td align="center">';
+ $output .= (int)$_means[$i]['sumaVrstica'][$ckey2];
+ $output .= '</td>';
+ }
+ $output .= '</tr>';
+ }
+ }
+ $output .= '<tr>';
+ $output .= '<td align="center">'.$lang['srv_means_label3'].'</td>';
+ for ($i = 0; $i < $cols; $i++) {
+ $output .= '<td align="center">';
+
+ $output .= $this->meansClass->formatNumber($_means[$i]['sumaMeans'], SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_RESIDUAL'));
+ $output .= '</td>';
+ $output .= '<td align="center">';
+ $output .= (int)$_means[$i]['sumaSkupna'];
+ $output .= '</td>';
+ }
+ $output .= '</tr>';
+ $output .= '</table>';
+ }
+
+
+ /*Skrajsa tekst in doda '...' na koncu*/
+ function snippet($text,$length=64,$tail="...")
+ {
+ $text = trim($text);
+ $txtl = strlen($text);
+ if($txtl > $length)
+ {
+ for($i=1;$text[$length-$i]!=" ";$i++)
+ {
+ if($i == $length)
+ {
+ return substr($text,0,$length) . $tail;
+ }
+ }
+ $text = substr($text,0,$length-$i+1) . $tail;
+ }
+ return $text;
+ }
+
+ function setUserId($usrId) {$this->anketa['uid'] = $usrId;}
+ function getUserId() {return ($this->anketa['uid'])?$this->anketa['uid']:false;}
+
+ function formatNumber($value,$digit=0,$sufix="")
+ {
+ if ( $value <> 0 && $value != null )
+ $result = round($value,$digit);
+ else
+ $result = "0";
+ //$result = number_format($result, $digit, ',', '.').$sufix;
+ $result = number_format($result, $digit, ',', '') . $sufix;
+
+ // Preprecimo da bi se stevilo z decimalko pretvorilo v datum
+ //$result = '="'. $result.'"';
+
+ return $result;
+ }
+}
+
+?> \ No newline at end of file
diff --git a/admin/exportclases/class.xlsIzvozAnalizaMultiCrosstab.php b/admin/exportclases/class.xlsIzvozAnalizaMultiCrosstab.php
new file mode 100644
index 0000000..cd1f5e7
--- /dev/null
+++ b/admin/exportclases/class.xlsIzvozAnalizaMultiCrosstab.php
@@ -0,0 +1,1173 @@
+<?php
+
+ global $site_path;
+
+ include_once('../../function.php');
+ include_once('../survey/definition.php');
+ require_once('../exportclases/class.xls.php');
+
+
+class XlsIzvozAnalizaMultiCrosstab {
+
+ var $anketa; // trenutna anketa
+
+ var $pi=array('canCreate'=>false); // za shrambo parametrov in sporocil
+
+ public $multiCrosstabClass = null; //crosstab class
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null){
+ global $site_path;
+ global $global_user_id;
+ global $output;
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) )
+ {
+ $this->anketa['id'] = $anketa;
+
+ // create new XLS document
+ $this->xls = new xls();
+ }
+ else
+ {
+ $this->pi['msg'] = "Anketa ni izbrana!";
+ $this->pi['canCreate'] = false;
+ return false;
+ }
+ $_GET['a'] = A_ANALYSIS;
+
+ //ustvarimo multicrosstabs objekt
+ $this->multiCrosstabClass = new SurveyMultiCrosstabs($anketa);
+
+ if ( SurveyInfo::getInstance()->SurveyInit($this->anketa['id']) && $this->init()){
+ $this->anketa['uid'] = $global_user_id;
+
+ SurveyUserSetting::getInstance()->Init($this->anketa['id'], $this->anketa['uid']);
+ SurveyDataSettingProfiles::Init($this->anketa['id']);
+ }
+ else
+ return false;
+ // ce smo prisli do tu je vse ok
+ $this->pi['canCreate'] = true;
+
+ return true;
+ }
+
+ // SETTERS && GETTERS
+
+ function checkCreate()
+ {
+ return $this->pi['canCreate'];
+ }
+
+ function getFile($fileName)
+ {
+ $output = $this->createXls();
+ $this->xls->display($fileName, $output);
+ }
+
+
+ function init()
+ {
+ return true;
+ }
+
+ function encodeText($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace(array("&scaron;","&#353;","&#269;"),array("Å¡","Å¡","Ä"),$text);
+ return strip_tags($text);
+ }
+
+ function createXls(){
+ global $site_path;
+ global $lang;
+ global $output;
+
+ $convertTypes = array('charSet' => "windows-1250",
+ 'delimit' => ";",
+ 'newLine' => "\n",
+ 'BOMchar' => "\xEF\xBB\xBF");
+
+ $output = $convertTypes['BOMchar'];
+
+ $output .= '<table border="0"><tr><td colspan="10"><font size="3"><b>'.$lang['export_analisys_multicrosstabs'].'</b></font></td></tr></table>';
+ $output .= '<table border="0"><tr><td colspan="10"></td></tr></table>';
+
+ // Napolnimo variable s katerimi lahko operiramo
+ $this->multiCrosstabClass->getVariableList();
+
+ // Izris tabele
+ $this->displayTable();
+
+ return $output;
+ }
+
+
+ public function displayTable(){
+ global $site_path;
+ global $lang;
+ global $output;
+
+ // Napolnimo variable ki so ze izbrane
+ $this->multiCrosstabClass->getSelectedVars();
+
+
+ // Izpisemo naslov tabele
+ $output .= '<table border="0"><tr><td colspan="10">';
+ $output .= '<b>'.$this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['title'].'</b>';
+ $output .= '</td></tr></table>';
+
+
+ $output .= '<table cellspacing="0" cellpadding="0" border="1">';
+
+
+ // Imamo 2 nivoja
+ if($this->multiCrosstabClass->colLevel2){
+
+ // Izrisemo VERTIKALNO izbrane spremenljivkec - 1. vrstica
+ if($this->multiCrosstabClass->rowSpan == 0)
+ $colspan = ' colspan="1"';
+ elseif(!$this->multiCrosstabClass->rowLevel2)
+ $colspan = ' colspan="2"';
+ else
+ $colspan = ' colspan="4"';
+ $output .= '<tr><td class="borderless" '.$colspan.'></td>';
+ if(count($this->multiCrosstabClass->selectedVars['ver'])){
+ foreach($this->multiCrosstabClass->selectedVars['ver'] as $var){
+
+ $rowspan = count($var['sub']) > 0 ? '':' rowspan="2"';
+ $colspan = ' colspan="'.$var['span'].'"';
+ $output .= '<td align="center" '.$rowspan . $colspan.'>';
+
+ $output .= $this->snippet($this->multiCrosstabClass->variablesList[$var['spr']]['naslov'], 25);
+
+ $output .= '</td>';
+ }
+ }
+ $output .= '</tr>';
+
+ // Izrisemo VARIABLE za spremenljivko - 2. vrstica
+ if($this->multiCrosstabClass->rowSpan == 0)
+ $colspan = ' colspan="1"';
+ elseif(!$this->multiCrosstabClass->rowLevel2)
+ $colspan = ' colspan="2"';
+ else
+ $colspan = ' colspan="4"';
+ $output .= '<tr><td class="borderless" '.$colspan.'></td>';
+ if(count($this->multiCrosstabClass->selectedVars['ver'])){
+ foreach($this->multiCrosstabClass->selectedVars['ver'] as $var){
+
+ if(count($var['sub']) > 0){
+ // Loop cez variable spremenljivke
+ foreach($this->multiCrosstabClass->variablesList[$var['spr']]['options'] as $option){
+
+ $colspan = ' colspan="'.( $var['span'] / count($this->multiCrosstabClass->variablesList[$var['spr']]['options']) ).'"';
+ $output .= '<td align="center" '.$colspan.'>';
+
+ $output .= $this->snippet($option, 25);
+
+ $output .= '</td>';
+ }
+ }
+ }
+ }
+ $output .= '</tr>';
+
+ // Izris vrstic za 2. nivo - 3. in 4. vrstica
+
+ if($this->multiCrosstabClass->rowSpan == 0)
+ $colspan = ' colspan="1"';
+ elseif(!$this->multiCrosstabClass->rowLevel2)
+ $colspan = ' colspan="2"';
+ else
+ $colspan = ' colspan="4"';
+ $output .= '<tr><td '.$colspan.'></td>';
+ if(count($this->multiCrosstabClass->selectedVars['ver'])){
+ foreach($this->multiCrosstabClass->selectedVars['ver'] as $parentVar){
+
+ foreach($this->multiCrosstabClass->variablesList[$parentVar['spr']]['options'] as $option){
+ // ce imamo childe na 2. nivoju
+ if(count($parentVar['sub']) > 0){
+ foreach($parentVar['sub'] as $var){
+
+ $colspan = ' colspan="'.( count($this->multiCrosstabClass->variablesList[$var['spr']]['options']) ).'"';
+ $output .= '<td align="center" '.$colspan.'>';
+
+ $output .= $this->snippet($this->multiCrosstabClass->variablesList[$var['spr']]['naslov'], 25);
+
+ $output .= '</td>';
+ }
+ }
+ else{
+ $rowspan = ' rowspan="2"';
+ $colspan = ' colspan="'.( $parentVar['span'] / count($this->multiCrosstabClass->variablesList[$parentVar['spr']]['options']) ).'"';
+ $output .= '<td align="center" '.$rowspan . $colspan.'>';
+
+ $output .= $this->snippet($option, 25);
+
+ $output .= '</td>';
+ }
+ }
+ }
+ }
+ $output .= '</tr>';
+
+ if($this->multiCrosstabClass->rowSpan == 0)
+ $colspan = ' colspan="1"';
+ elseif(!$this->multiCrosstabClass->rowLevel2)
+ $colspan = ' colspan="2"';
+ else
+ $colspan = ' colspan="4"';
+ $output .= '<tr><td class="borderless" '.$colspan.'></td>';
+ if(count($this->multiCrosstabClass->selectedVars['ver'])){
+ foreach($this->multiCrosstabClass->selectedVars['ver'] as $parentVar){
+
+ foreach($this->multiCrosstabClass->variablesList[$parentVar['spr']]['options'] as $option){
+ // ce imamo childe na 2. nivoju
+ if(count($parentVar['sub']) > 0){
+ foreach($parentVar['sub'] as $var){
+
+ foreach($this->multiCrosstabClass->variablesList[$var['spr']]['options'] as $suboption){
+ $output .= '<td align="center">';
+
+ $output .= $this->snippet($suboption, 25);
+
+ $output .= '</td>';
+ }
+ }
+ }
+ }
+ }
+ }
+ $output .= '</tr>';
+ }
+ // Imamo samo 1 nivo
+ else{
+ // Izrisemo VERTIKALNO izbrane spremenljivkec - 1. vrstica
+ if($this->multiCrosstabClass->rowSpan == 0)
+ $colspan = ' colspan="1"';
+ elseif(!$this->multiCrosstabClass->rowLevel2)
+ $colspan = ' colspan="2"';
+ else
+ $colspan = ' colspan="4"';
+ $output .= '<tr><td class="borderless" '.$colspan.'></td>';
+ if(count($this->multiCrosstabClass->selectedVars['ver'])){
+ foreach($this->multiCrosstabClass->selectedVars['ver'] as $var){
+
+ $colspan = ' colspan="'.($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['sums'] == 1 && !$this->multiCrosstabClass->rowLevel2 ? $var['span']+1 : $var['span']).'"';
+ $output .= '<td align="center" '.$colspan.'>';
+
+ $output .= $this->snippet($this->multiCrosstabClass->variablesList[$var['spr']]['naslov'], 25);
+
+ $output .= '</td>';
+ }
+ }
+ // Nimamo nobene vertikalne spremenljivke in 2 horizontalni
+ elseif($this->multiCrosstabClass->rowLevel2){
+ $output .= '<td class="borderless"></td>';
+ }
+
+ // Izrisemo se zadnjo prazno navpicno celico vrstico
+ $output .= '</tr>';
+
+ // Izrisemo VARIABLE za spremenljivko - 2. vrstica
+ if($this->multiCrosstabClass->rowSpan == 0)
+ $colspan = ' colspan="1"';
+ elseif(!$this->multiCrosstabClass->rowLevel2)
+ $colspan = ' colspan="2"';
+ else
+ $colspan = ' colspan="4"';
+ $output .= '<tr><td class="borderless" '.$colspan.'></td>';
+ if(count($this->multiCrosstabClass->selectedVars['ver'])){
+ foreach($this->multiCrosstabClass->selectedVars['ver'] as $var){
+
+ // Loop cez variable spremenljivke
+ foreach($this->multiCrosstabClass->variablesList[$var['spr']]['options'] as $option){
+
+ $colspan = ' colspan="'.( $var['span'] / count($this->multiCrosstabClass->variablesList[$var['spr']]['options']) ).'"';
+ $output .= '<td align="center" '.$colspan.'>';
+
+ $output .= $this->snippet($option, 25);
+
+ $output .= '</td>';
+ }
+
+ // Suma (ce jo imamo vklopljeno)
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['sums'] == 1 && !$this->multiCrosstabClass->rowLevel2){
+ $output .= '<td align="center">';
+ $output .= $lang['srv_analiza_crosstab_skupaj'];
+ $output .= '</td>';
+ }
+ }
+ }
+ $output .= '</tr>';
+ }
+
+
+
+ // Izrisemo HORIZONTALNO izbrane variable
+ if(count($this->multiCrosstabClass->selectedVars['hor'])){
+
+ // Imamo 2 nivoja vrstic
+ if($this->multiCrosstabClass->rowLevel2){
+ foreach($this->multiCrosstabClass->selectedVars['hor'] as $parentVar){
+
+ $cnt = 0;
+ $order0 = 0;
+
+ foreach($this->multiCrosstabClass->variablesList[$parentVar['spr']]['options'] as $option){
+
+ $cnt2 = 0;
+
+ // ce imamo childe na 2. nivoju
+ if(count($parentVar['sub']) > 0){
+ foreach($parentVar['sub'] as $var){
+
+ $cnt3 = 0;
+
+ foreach($this->multiCrosstabClass->variablesList[$var['spr']]['options'] as $suboption){
+
+ $output .= '<tr>';
+
+ if($cnt == 0){
+ $span = $this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['sums'] == 1 && count($this->multiCrosstabClass->selectedVars['ver']) == 0 ? $parentVar['span']+(count($parentVar['sub'])*count($this->multiCrosstabClass->variablesList[$parentVar['spr']]['options'])) : $parentVar['span'];
+ $rowspan = ' rowspan="'.$span.'"';
+ $output .= '<td align="center" '.$rowspan.'>';
+
+ $output .= $this->snippet($this->multiCrosstabClass->variablesList[$parentVar['spr']]['naslov'], 25);
+
+ $output .= '</td>';
+ }
+
+ // Variabla
+ if($cnt2 == 0){
+ $span = $this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['sums'] == 1 && count($this->multiCrosstabClass->selectedVars['ver']) == 0 ? $parentVar['span'] / count($this->multiCrosstabClass->variablesList[$parentVar['spr']]['options']) + count($parentVar['sub']) : $parentVar['span'] / count($this->multiCrosstabClass->variablesList[$parentVar['spr']]['options']);
+ $rowspan = ' rowspan="'.$span.'"';
+ $output .= '<td align="center" '.$rowspan.'>';
+ $output .= $this->snippet($option, 25);
+ $output .= '</td>';
+ }
+
+ if($cnt3 == 0){
+ $span = $this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['sums'] == 1 && count($this->multiCrosstabClass->selectedVars['ver']) == 0 ? count($this->multiCrosstabClass->variablesList[$var['spr']]['options']) + 1 : count($this->multiCrosstabClass->variablesList[$var['spr']]['options']);
+ $rowspan = ' rowspan="'.$span.'"';
+ $output .= '<td align="center" '.$rowspan.'>';
+
+ $output .= $this->snippet($this->multiCrosstabClass->variablesList[$var['spr']]['naslov'], 25);
+
+ $output .= '</td>';
+ }
+
+ // Variabla 2
+ $output .= '<td align="center">';
+ $output .= $this->snippet($suboption, 25);
+ $output .= '</td>';
+
+ // Celice s podatki
+ $this->displayDataCells($parentVar, $order0, $var, $cnt3);
+
+ $output .= '</tr>';
+
+ $cnt++;
+ $cnt2++;
+ $cnt3++;
+ }
+
+ $order0++;
+
+ // Izrisemo se sumo ce je vklopljena
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['sums'] == 1 && count($this->multiCrosstabClass->selectedVars['ver']) == 0){
+
+ $output .= '<tr>';
+
+ $output .= '<td align="center">'.$lang['srv_analiza_crosstab_skupaj'].'</td>';
+
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$parentVar['spr'].'-'.$var['spr']];
+
+ $keys1 = array_keys($crosstabs['options2']);
+ $key = ceil($cnt / (count($this->multiCrosstabClass->variablesList[$var['spr']]['options'])*count($parentVar['sub']))) - 1;
+ $val = $keys1[$key];
+
+ $this->displaySumsCell($parentVar, $var, $val, $orientation=0);
+
+ $output .= '</tr>';
+ }
+ }
+ }
+ else{
+ $output .= '<tr>';
+
+ if($cnt == 0){
+ $rowspan = ' rowspan="'.$parentVar['span'].'"';
+ $output .= '<td align="center" '.$rowspan.' colspan="2">';
+
+ $output .= $this->snippet($this->multiCrosstabClass->variablesList[$parentVar['spr']]['naslov'], 25);
+
+ $output .= '</td>';
+ }
+
+ // Variabla
+ $rowspan = ' rowspan="'.( $parentVar['span'] / count($this->multiCrosstabClass->variablesList[$parentVar['spr']]['options']) ).'"';
+ $output .= '<td align="center" '.$rowspan.' colspan="2">';
+ $output .= $this->snippet($option, 25);
+ $output .= '</td>';
+
+
+ // Celice s podatki
+ $this->displayDataCells($parentVar, $cnt);
+
+ $output .= '</tr>';
+
+ $cnt++;
+ }
+ }
+ }
+ }
+ // Imamo samo 1 nivo vrstic
+ else{
+ foreach($this->multiCrosstabClass->selectedVars['hor'] as $var){
+
+ $cnt = 0;
+ foreach($this->multiCrosstabClass->variablesList[$var['spr']]['options'] as $option){
+ $output .= '<tr>';
+
+ if($cnt == 0){
+ $rowspan = ' rowspan="'.($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['sums'] == 1 && count($this->multiCrosstabClass->selectedVars['ver']) > 0 ? $var['span']+1 : $var['span']).'"';
+ $output .= '<td align="center" '.$rowspan.'>';
+
+ $output .= $this->snippet($this->multiCrosstabClass->variablesList[$var['spr']]['naslov'], 25);
+
+ $output .= '</td>';
+ }
+
+ // Variabla
+ $output .= '<td align="center">';
+ $output .= $this->snippet($option, 25);
+ $output .= '</td>';
+
+ // Celice s podatki
+ $this->displayDataCells($var, $cnt);
+
+
+ $output .= '</tr>';
+
+ $cnt++;
+ }
+
+ // Vrstica za sumo (ce jo imamo vklopljeno)
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['sums'] == 1 && count($this->multiCrosstabClass->selectedVars['ver']) > 0 && !$this->multiCrosstabClass->colLevel2){
+ $output .= '<tr>';
+ $output .= '<td align="center">'.$lang['srv_analiza_crosstab_skupaj'].'</td>';
+
+ // Loop cez vse stolpce
+ foreach($this->multiCrosstabClass->selectedVars['ver'] as $spr2){
+
+ // Loop cez variable trenutnega stolpca
+ $cnt = 0;
+ foreach($this->multiCrosstabClass->variablesList[$spr2['spr']]['options'] as $var2){
+
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$var['spr'].'-'.$spr2['spr']];
+
+ $keys1 = array_keys($crosstabs['options1']);
+ $val = $keys1[$cnt];
+
+ $this->displaySumsCell($var, $spr2, $val, $orientation=1);
+
+ $cnt++;
+ }
+
+ // Krizanje navpicne in vodoravne sume
+ $this->displaySumsCell($var, $spr2, 0, $orientation=2);
+ }
+
+ $output .= '</tr>';
+ }
+ }
+ }
+ }
+
+
+ $output .= '</table>';
+ }
+
+ // Izpis celic v vrstici s podatki
+ function displayDataCells($spr1, $var1, $spr2='', $var2=''){
+ global $output;
+
+ // Ce nimamo nobenega krizanja izpisemo prazne
+ if($spr2 == '' && $this->multiCrosstabClass->colSpan == 0){
+ for($i=0; $i<$this->multiCrosstabClass->colSpan; $i++){
+ $output .= '<td class="data"></td>';
+ }
+ }
+
+ // Ce nimamo stolpcev - krizanje dveh vrstic
+ elseif($spr2 != '' && $this->multiCrosstabClass->colSpan == 0){
+
+ $spr1_temp = explode('-', $spr1['spr']);
+ $grd = $this->multiCrosstabClass->variablesList[$spr1['spr']]['grd_id'];
+ $variabla1 = array('seq' => $spr1_temp[1], 'spr' => $spr1_temp[0], 'grd' => $grd);
+
+ $spr2_temp = explode('-', $spr2['spr']);
+ $grd = $this->multiCrosstabClass->variablesList[$spr2['spr']]['grd_id'];
+ $variabla2 = array('seq' => $spr2_temp[1], 'spr' => $spr2_temp[0], 'grd' => $grd);
+
+ // Ce se nimamo izracunanih rezultatov jih izracunamo
+ if(isset($this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr']]))
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr']];
+ else{
+ $variables = array();
+ $variables[0] = array('seq' => $variabla1['seq'], 'spr' => $variabla1['spr'], 'grd' => $variabla1['grd']);
+ $variables[1] = array('seq' => $variabla2['seq'], 'spr' => $variabla2['spr'], 'grd' => $variabla2['grd']);
+
+ $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr']] = $this->multiCrosstabClass->createCrostabulation($variables);
+
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr']];
+ }
+
+ $keys1 = array_keys($crosstabs['options1']);
+ $val1 = $keys1[$var1];
+
+ $keys2 = array_keys($crosstabs['options2']);
+ $val2 = $keys2[$var2];
+
+ $crosstab = (isset($crosstabs['crosstab'][$val1][$val2])) ? $crosstabs['crosstab'][$val1][$val2] : 0;
+ $percent = ($crosstab > 0) ? $this->multiCrosstabClass->getCrossTabPercentage($crosstabs['sumaVrstica'][$val1], $crosstab) : 0;
+ $avg = (isset($crosstabs['avg'][$val1][$val2])) ? $crosstabs['avg'][$val1][$val2] : 0;
+ $delez = (isset($crosstabs['delez'][$val1][$val2])) ? $crosstabs['delez'][$val1][$val2] : 0;
+
+ $this->displayDataCell($crosstab, $percent, $avg, $delez);
+ }
+
+ // Krizanje 1 vrstice in 1 stolpca
+ elseif($spr2 == '' && !$this->multiCrosstabClass->colLevel2){
+
+ // Loop cez vse stolpce
+ foreach($this->multiCrosstabClass->selectedVars['ver'] as $spr2){
+
+ $spr1_temp = explode('-', $spr1['spr']);
+ $grd = $this->multiCrosstabClass->variablesList[$spr1['spr']]['grd_id'];
+ $variabla1 = array('seq' => $spr1_temp[1], 'spr' => $spr1_temp[0], 'grd' => $grd);
+
+ $spr2_temp = explode('-', $spr2['spr']);
+ $grd = $this->multiCrosstabClass->variablesList[$spr2['spr']]['grd_id'];
+ $variabla2 = array('seq' => $spr2_temp[1], 'spr' => $spr2_temp[0], 'grd' => $grd);
+
+
+ // Ce se nimamo izracunanih rezultatov jih izracunamo
+ if(isset($this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr']]))
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr']];
+ else{
+ $variables = array();
+ $variables[0] = array('seq' => $variabla1['seq'], 'spr' => $variabla1['spr'], 'grd' => $variabla1['grd']);
+ $variables[1] = array('seq' => $variabla2['seq'], 'spr' => $variabla2['spr'], 'grd' => $variabla2['grd']);
+
+ $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr']] = $this->multiCrosstabClass->createCrostabulation($variables);
+
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr']];
+ }
+
+ $keys1 = array_keys($crosstabs['options1']);
+ $val1 = $keys1[$var1];
+
+ // Loop cez variable trenutnega stolpca
+ $cnt = 0;
+ foreach($this->multiCrosstabClass->variablesList[$spr2['spr']]['options'] as $var2){
+
+ $keys2 = array_keys($crosstabs['options2']);
+ $val2 = $keys2[$cnt];
+
+ $crosstab = (isset($crosstabs['crosstab'][$val1][$val2])) ? $crosstabs['crosstab'][$val1][$val2] : 0;
+ $percent = ($crosstab > 0) ? $this->multiCrosstabClass->getCrossTabPercentage($crosstabs['sumaVrstica'][$val1], $crosstab) : 0;
+ $avg = (isset($crosstabs['avg'][$val1][$val2])) ? $crosstabs['avg'][$val1][$val2] : 0;
+ $delez = (isset($crosstabs['delez'][$val1][$val2])) ? $crosstabs['delez'][$val1][$val2] : 0;
+
+ $this->displayDataCell($crosstab, $percent, $avg, $delez);
+
+ $cnt++;
+ }
+
+ // Suma (ce jo imamo vklopljeno)
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['sums'] == 1){
+ $this->displaySumsCell($spr1, $spr2, $val1, $orientation=0);
+ }
+ }
+ }
+
+ // Izpisemo vecnivojske podatke (krizanje 3 ali 4 spremenljivk)
+ else{
+
+ // Nastavimo 1. vrsticno variablo
+ $spr1_temp = explode('-', $spr1['spr']);
+ $grd = $this->multiCrosstabClass->variablesList[$spr1['spr']]['grd_id'];
+ $variabla1 = array('seq' => $spr1_temp[1], 'spr' => $spr1_temp[0], 'grd' => $grd);
+
+ // Krizanje 2 vrstic in 1 stolpca
+ if(!$this->multiCrosstabClass->colLevel2){
+
+ // Nastavimo 2. vrsticno variablo
+ $spr2_temp = explode('-', $spr2['spr']);
+ $grd = $this->multiCrosstabClass->variablesList[$spr2['spr']]['grd_id'];
+ $variabla2 = array('seq' => $spr2_temp[1], 'spr' => $spr2_temp[0], 'grd' => $grd);
+
+ // Loop cez vse stolpce
+ foreach($this->multiCrosstabClass->selectedVars['ver'] as $spr3){
+
+ $spr3_temp = explode('-', $spr3['spr']);
+ $grd = $this->multiCrosstabClass->variablesList[$spr3['spr']]['grd_id'];
+ $variabla3 = array('seq' => $spr3_temp[1], 'spr' => $spr3_temp[0], 'grd' => $grd);
+
+ // Ce se nimamo izracunanih rezultatov jih izracunamo
+ if(isset($this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']]))
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']];
+ else{
+ $variables = array();
+ $variables[0] = array('seq' => $variabla1['seq'], 'spr' => $variabla1['spr'], 'grd' => $variabla1['grd']);
+ $variables[1] = array('seq' => $variabla2['seq'], 'spr' => $variabla2['spr'], 'grd' => $variabla2['grd']);
+ $variables[2] = array('seq' => $variabla3['seq'], 'spr' => $variabla3['spr'], 'grd' => $variabla3['grd']);
+
+ $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']] = $this->multiCrosstabClass->createCrostabulation($variables);
+
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']];
+ }
+
+ $keys1 = array_keys($crosstabs['options1']);
+ $val1 = $keys1[$var1];
+
+ $keys2 = array_keys($crosstabs['options2']);
+ $val2 = $keys2[$var2];
+
+ // Loop cez variable trenutnega stolpca
+ $cnt = 0;
+ foreach($this->multiCrosstabClass->variablesList[$spr3['spr']]['options'] as $var3){
+
+ $keys3 = array_keys($crosstabs['options3']);
+ $val3 = $keys3[$cnt];
+
+ $crosstab = (isset($crosstabs['crosstab'][$val1][$val2][$val3])) ? $crosstabs['crosstab'][$val1][$val2][$val3] : 0;
+ $percent = ($crosstab > 0) ? $this->multiCrosstabClass->getCrossTabPercentage($crosstabs['sumaVrstica'][$val1], $crosstab) : 0;
+ $avg = (isset($crosstabs['avg'][$val1][$val2][$val3])) ? $crosstabs['avg'][$val1][$val2][$val3] : 0;
+ $delez = (isset($crosstabs['delez'][$val1][$val2][$val3])) ? $crosstabs['delez'][$val1][$val2][$val3] : 0;
+
+ $this->displayDataCell($crosstab, $percent, $avg, $delez);
+
+ $cnt++;
+ }
+ }
+ }
+
+ // Krizanje 1 vrstice in 2 stolpcev
+ elseif($spr2 == ''){
+
+ // Loop cez vse stolpce 1. navpicne spremenljivke
+ foreach($this->multiCrosstabClass->selectedVars['ver'] as $spr2){
+
+ $spr2_temp = explode('-', $spr2['spr']);
+ $grd = $this->multiCrosstabClass->variablesList[$spr2['spr']]['grd_id'];
+ $variabla2 = array('seq' => $spr2_temp[1], 'spr' => $spr2_temp[0], 'grd' => $grd);
+
+ // Loop cez variable 1. navpicne spremnljivke
+ $cnt2 = 0;
+ foreach($this->multiCrosstabClass->variablesList[$spr2['spr']]['options'] as $var2){
+
+ // Loop cez vse navpicne spremenljivke 2. nivoja - ce obstajajo
+ if(count($spr2['sub']) > 0){
+ foreach($spr2['sub'] as $spr3){
+
+ // Nastavimo navpicno spremenljivko 2. nivoja
+ $spr3_temp = explode('-', $spr3['spr']);
+ $grd = $this->multiCrosstabClass->variablesList[$spr3['spr']]['grd_id'];
+ $variabla3 = array('seq' => $spr3_temp[1], 'spr' => $spr3_temp[0], 'grd' => $grd);
+
+ // Ce se nimamo izracunanih rezultatov jih izracunamo
+ if(isset($this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']]))
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']];
+ else{
+ $variables = array();
+ $variables[0] = array('seq' => $variabla1['seq'], 'spr' => $variabla1['spr'], 'grd' => $variabla1['grd']);
+ $variables[1] = array('seq' => $variabla2['seq'], 'spr' => $variabla2['spr'], 'grd' => $variabla2['grd']);
+ $variables[2] = array('seq' => $variabla3['seq'], 'spr' => $variabla3['spr'], 'grd' => $variabla3['grd']);
+
+ $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']] = $this->multiCrosstabClass->createCrostabulation($variables);
+
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']];
+ }
+
+ $keys1 = array_keys($crosstabs['options1']);
+ $val1 = $keys1[$var1];
+
+ $keys2 = array_keys($crosstabs['options2']);
+ $val2 = $keys2[$cnt2];
+
+ // Loop cez variable spremenljivke 2. nivoja
+ $cnt3 = 0;
+ foreach($this->multiCrosstabClass->variablesList[$spr3['spr']]['options'] as $var3){
+
+ $keys3 = array_keys($crosstabs['options3']);
+ $val3 = $keys3[$cnt3];
+
+ $crosstab = (isset($crosstabs['crosstab'][$val1][$val2][$val3])) ? $crosstabs['crosstab'][$val1][$val2][$val3] : 0;
+ $percent = ($crosstab > 0) ? $this->multiCrosstabClass->getCrossTabPercentage($crosstabs['sumaVrstica'][$val1], $crosstab) : 0;
+ $avg = (isset($crosstabs['avg'][$val1][$val2][$val3])) ? $crosstabs['avg'][$val1][$val2][$val3] : 0;
+ $delez = (isset($crosstabs['delez'][$val1][$val2][$val3])) ? $crosstabs['delez'][$val1][$val2][$val3] : 0;
+
+ $this->displayDataCell($crosstab, $percent, $avg, $delez);
+
+ $cnt3++;
+ }
+ }
+ }
+ // 1 nivojska spremenljivka v stolpcu
+ else{
+ // Ce se nimamo izracunanih rezultatov jih izracunamo
+ if(isset($this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr']]))
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr']];
+ else{
+ $variables = array();
+ $variables[0] = array('seq' => $variabla1['seq'], 'spr' => $variabla1['spr'], 'grd' => $variabla1['grd']);
+ $variables[1] = array('seq' => $variabla2['seq'], 'spr' => $variabla2['spr'], 'grd' => $variabla2['grd']);
+
+ $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr']] = $this->multiCrosstabClass->createCrostabulation($variables);
+
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr']];
+ }
+
+ $keys1 = array_keys($crosstabs['options1']);
+ $val1 = $keys1[$var1];
+
+ $keys2 = array_keys($crosstabs['options2']);
+ $val2 = $keys2[$cnt2];
+
+ $crosstab = (isset($crosstabs['crosstab'][$val1][$val2])) ? $crosstabs['crosstab'][$val1][$val2] : 0;
+ $percent = ($crosstab > 0) ? $this->multiCrosstabClass->getCrossTabPercentage($crosstabs['sumaVrstica'][$val1], $crosstab) : 0;
+ $avg = (isset($crosstabs['avg'][$val1][$val2])) ? $crosstabs['avg'][$val1][$val2] : 0;
+ $delez = (isset($crosstabs['delez'][$val1][$val2])) ? $crosstabs['delez'][$val1][$val2] : 0;
+
+ $this->displayDataCell($crosstab, $percent, $avg, $delez);
+ }
+
+ $cnt2++;
+ }
+ }
+ }
+
+
+
+ // Krizanje 2 vrstic in 2 stolpcev
+ else{
+
+ // Nastavimo 2. vrsticno variablo
+ $spr2_temp = explode('-', $spr2['spr']);
+ $grd = $this->multiCrosstabClass->variablesList[$spr2['spr']]['grd_id'];
+ $variabla2 = array('seq' => $spr2_temp[1], 'spr' => $spr2_temp[0], 'grd' => $grd);
+
+ // Loop cez vse stolpce 1. navpicne spremenljivke
+ foreach($this->multiCrosstabClass->selectedVars['ver'] as $spr3){
+
+ $spr3_temp = explode('-', $spr3['spr']);
+ $grd = $this->multiCrosstabClass->variablesList[$spr3['spr']]['grd_id'];
+ $variabla3 = array('seq' => $spr3_temp[1], 'spr' => $spr3_temp[0], 'grd' => $grd);
+
+ // Loop cez variable 1. navpicne spremnljivke
+ $cnt3 = 0;
+ foreach($this->multiCrosstabClass->variablesList[$spr3['spr']]['options'] as $var3){
+
+ // Loop cez vse navpicne spremenljivke 2. nivoja
+ if(count($spr3['sub']) > 0){
+ foreach($spr3['sub'] as $spr4){
+
+ // Nastavimo navpicno spremenljivko 2. nivoja
+ $spr4_temp = explode('-', $spr4['spr']);
+ $grd = $this->multiCrosstabClass->variablesList[$spr4['spr']]['grd_id'];
+ $variabla4 = array('seq' => $spr4_temp[1], 'spr' => $spr4_temp[0], 'grd' => $grd);
+
+ // Ce se nimamo izracunanih rezultatov jih izracunamo
+ if(isset($this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr'].'-'.$spr4['spr']]))
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr'].'-'.$spr4['spr']];
+ else{
+ $variables = array();
+ $variables[0] = array('seq' => $variabla1['seq'], 'spr' => $variabla1['spr'], 'grd' => $variabla1['grd']);
+ $variables[1] = array('seq' => $variabla2['seq'], 'spr' => $variabla2['spr'], 'grd' => $variabla2['grd']);
+ $variables[2] = array('seq' => $variabla3['seq'], 'spr' => $variabla3['spr'], 'grd' => $variabla3['grd']);
+ $variables[3] = array('seq' => $variabla4['seq'], 'spr' => $variabla4['spr'], 'grd' => $variabla4['grd']);
+
+ $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr'].'-'.$spr4['spr']] = $this->multiCrosstabClass->createCrostabulation($variables);
+
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr'].'-'.$spr4['spr']];
+ }
+
+ $keys1 = array_keys($crosstabs['options1']);
+ $val1 = $keys1[$var1];
+
+ $keys2 = array_keys($crosstabs['options2']);
+ $val2 = $keys2[$var2];
+
+ $keys3 = array_keys($crosstabs['options3']);
+ $val3 = $keys3[$cnt3];
+
+ // Loop cez variable spremenljivke 2. nivoja
+ $cnt4 = 0;
+ foreach($this->multiCrosstabClass->variablesList[$spr4['spr']]['options'] as $var4){
+
+ $keys4 = array_keys($crosstabs['options4']);
+ $val4 = $keys4[$cnt4];
+
+ $crosstab = (isset($crosstabs['crosstab'][$val1][$val2][$val3][$val4])) ? $crosstabs['crosstab'][$val1][$val2][$val3][$val4] : 0;
+ $percent = ($crosstab > 0) ? $this->multiCrosstabClass->getCrossTabPercentage($crosstabs['sumaVrstica'][$val1], $crosstab) : 0;
+ $avg = (isset($crosstabs['avg'][$val1][$val2][$val3][$val4])) ? $crosstabs['avg'][$val1][$val2][$val3][$val4] : 0;
+ $delez = (isset($crosstabs['delez'][$val1][$val2][$val3][$val4])) ? $crosstabs['delez'][$val1][$val2][$val3][$val4] : 0;
+
+ $this->displayDataCell($crosstab, $percent, $avg, $delez);
+
+ $cnt4++;
+ }
+ }
+ }
+ // 1 nivo navpicne spremenljivke
+ else{
+ // Ce se nimamo izracunanih rezultatov jih izracunamo
+ if(isset($this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']]))
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']];
+ else{
+ $variables = array();
+ $variables[0] = array('seq' => $variabla1['seq'], 'spr' => $variabla1['spr'], 'grd' => $variabla1['grd']);
+ $variables[1] = array('seq' => $variabla2['seq'], 'spr' => $variabla2['spr'], 'grd' => $variabla2['grd']);
+ $variables[2] = array('seq' => $variabla3['seq'], 'spr' => $variabla3['spr'], 'grd' => $variabla3['grd']);
+
+ $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']] = $this->multiCrosstabClass->createCrostabulation($variables);
+
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr'].'-'.$spr3['spr']];
+ }
+
+ $keys1 = array_keys($crosstabs['options1']);
+ $val1 = $keys1[$var1];
+
+ $keys2 = array_keys($crosstabs['options2']);
+ $val2 = $keys2[$var2];
+
+ $keys3 = array_keys($crosstabs['options3']);
+ $val3 = $keys3[$cnt3];
+
+ $crosstab = (isset($crosstabs['crosstab'][$val1][$val2][$val3])) ? $crosstabs['crosstab'][$val1][$val2][$val3] : 0;
+ $percent = ($crosstab > 0) ? $this->multiCrosstabClass->getCrossTabPercentage($crosstabs['sumaVrstica'][$val1], $crosstab) : 0;
+ $avg = (isset($crosstabs['avg'][$val1][$val2][$val3])) ? $crosstabs['avg'][$val1][$val2][$val3] : 0;
+ $delez = (isset($crosstabs['delez'][$val1][$val2][$val3])) ? $crosstabs['delez'][$val1][$val2][$val3] : 0;
+
+ $this->displayDataCell($crosstab, $percent, $avg, $delez);
+ }
+
+ $cnt3++;
+ }
+ }
+ }
+ }
+ }
+
+ // Izpis celic v vrstici s sumami ($orientation 0->vrstica, 1->stolpec, 2->skupaj)
+ function displaySumsCell($spr1, $spr2, $val, $orientation){
+ global $output;
+
+ $crosstabs = $this->multiCrosstabClass->crosstabData[$spr1['spr'].'-'.$spr2['spr']];
+
+ $output .= '<td>';
+ $output .= '<table>';
+
+ // Celica s skupno sumo
+ if($orientation == 2){
+ // Numerus
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['numerus'] == 1){
+ $output .= '<tr><td align="center">';
+ $output .= '<b>'.$crosstabs['sumaSkupna'].'</b>';
+ $output .= '</td></tr>';
+ }
+
+ // Procenti
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['percent'] == 1){
+ $output .= '<tr><td align="center">';
+ $output .= $this->formatNumber(100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $output .= '</td></tr>';
+ }
+
+ // Povprecje
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['avgVar'] > 0){
+
+ // Loop cez vse in izracunamo povprecje z ustreznimi utezmi
+ $avg = 0;
+ if($crosstabs['crosstab']){
+ $tempAvg = 0;
+ foreach($crosstabs['crosstab'] as $key1 => $row){
+ foreach($row as $key2 => $count){
+ $tempAvg += $count * $crosstabs['avg'][$key1][$key2];
+ }
+ }
+ $avg = $tempAvg / $crosstabs['sumaSkupna'];
+ }
+
+ $output .= '<tr><td align="center">';
+ $output .= '<font color="blue">'.$this->formatNumber($avg, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE')).'</font>';
+ $output .= '</td></tr>';
+ }
+
+ // Delez
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['delezVar'] > 0){
+
+ // Loop cez vrstico in izracunamo skupen delez
+ $delez = 0;
+ if($crosstabs['delez']){
+ foreach($crosstabs['delez'] as $row){
+ foreach($row as $tempDelez){
+ $delez += $tempDelez;
+ }
+ }
+ }
+
+ $output .= '<tr><td align="center">';
+ $output .= '<font color="red">'.$this->formatNumber($delez*100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%').'</font>';
+ $output .= '</td></tr>';
+ }
+ }
+ // Suma na koncu vrstice
+ elseif($orientation == 0){
+ // Izpisemo podatek
+ if($crosstabs['sumaVrstica'][$val]){
+ // Numerus
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['numerus'] == 1){
+ $output .= '<tr><td align="center">';
+ $output .= '<b>'.$crosstabs['sumaVrstica'][$val].'</b>';
+ $output .= '</td></tr>';
+ }
+ // Procenti
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['percent'] == 1){
+ $output .= '<tr><td align="center">';
+ $output .= $this->formatNumber(100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $output .= '</td></tr>';
+ }
+ }
+ else{
+ // Numerus
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['numerus'] == 1){
+ $output .= '<tr><td align="center">';
+ $output .= '<b>0</b>';
+ $output .= '</td></tr>';
+ }
+ // Procenti
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['percent'] == 1){
+ $output .= '<tr><td align="center">';
+ $output .= $this->formatNumber(100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $output .= '</td></tr>';
+ }
+ }
+
+ // Povprecje
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['avgVar'] > 0){
+
+ // Loop cez vrstico in izracunamo povprecje z ustreznimi utezmi
+ $avg = 0;
+ if($crosstabs['crosstab'][$val]){
+ $tempAvg = 0;
+ foreach($crosstabs['crosstab'][$val] as $key => $count){
+ $tempAvg += $count * $crosstabs['avg'][$val][$key];
+ }
+ $avg = $tempAvg / $crosstabs['sumaVrstica'][$val];
+ }
+
+ $output .= '<tr><td align="center">';
+ $output .= '<font color="blue">'.$this->formatNumber($avg, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE')).'</font>';
+ $output .= '</td></tr>';
+ }
+
+ // Delez
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['delezVar'] > 0){
+
+ // Loop cez vrstico in izracunamo skupen delez
+ $delez = 0;
+ if($crosstabs['delez'][$val]){
+ foreach($crosstabs['delez'][$val] as $tempDelez){
+ $delez += $tempDelez;
+ }
+ }
+
+ $output .= '<tr><td align="center">';
+ $output .= '<font color="red">'.$this->formatNumber($delez*100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%').'</font>';
+ $output .= '</td></tr>';
+ }
+ }
+ // Suma za stolpce
+ else{
+ // Izpisemo podatek
+ if(isset($crosstabs['sumaStolpec'][$val])){
+ // Numerus
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['numerus'] == 1){
+ $output .= '<tr><td align="center">';
+ $output .= '<b>'.$crosstabs['sumaStolpec'][$val].'</b>';
+ $output .= '</td></tr>';
+ }
+ // Procenti
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['percent'] == 1){
+ $output .= '<tr><td align="center">';
+ $output .= $this->formatNumber($this->multiCrosstabClass->getCrossTabPercentage($crosstabs['sumaSkupna'], $crosstabs['sumaStolpec'][$val]), SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $output .= '</td></tr>';
+ }
+ }
+ else{
+ // Numerus
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['numerus'] == 1){
+ $output .= '<tr><td align="center">';
+ $output .= '<b>0</b>';
+ $output .= '</td></tr>';
+ }
+ // Procenti
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['percent'] == 1){
+ $output .= '<tr><td align="center">';
+ $output .= $this->formatNumber(0, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $output .= '</td></tr>';
+ }
+ }
+
+ // Povprecje
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['avgVar'] > 0){
+
+ // Loop cez vrstico in izracunamo povprecje z ustreznimi utezmi
+ $avg = 0;
+ if($crosstabs['crosstab']){
+ $tempAvg = 0;
+ foreach($crosstabs['crosstab'] as $key => $row){
+ if($row[$val] > 0)
+ $tempAvg += $row[$val] * $crosstabs['avg'][$key][$val];
+ }
+ $avg = $tempAvg / $crosstabs['sumaStolpec'][$val];
+ }
+
+ $output .= '<tr><td align="center">';
+ $output .= '<font color="blue">'.$this->formatNumber($avg, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE')).'</font>';
+ $output .= '</td></tr>';
+ }
+
+ // Delez
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['delezVar'] > 0){
+
+ // Loop cez vrstico in izracunamo skupen delez
+ $delez = 0;
+ if($crosstabs['delez']){
+ foreach($crosstabs['delez'] as $tempDelez){
+ $delez += $tempDelez[$val];
+ }
+ }
+
+ $output .= '<tr><td align="center">';
+ $output .= '<font color="red">'.$this->formatNumber($delez*100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%').'</font>';
+ $output .= '</td></tr>';
+ }
+ }
+
+ $output .= '</table>';
+ $output .= '</td>';
+ }
+
+ // Izpis celice z vrednostmi
+ function displayDataCell($crosstab, $percent, $avg, $delez){
+ global $output;
+
+ $output .= '<td>';
+ $output .= '<table>';
+
+ if($crosstab > 0){
+
+ // Numerus
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['numerus'] == 1){
+ $output .= '<tr><td align="center">';
+ $output .= $crosstab;
+ $output .= '</td></tr>';
+ }
+ // Procenti
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['percent'] == 1){
+ $output .= '<tr><td align="center">';
+ $output .= $this->formatNumber($percent, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $output .= '</td></tr>';
+ }
+ }
+ else{
+ // Numerus
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['numerus'] == 1){
+ $output .= '<tr><td align="center">';
+ $output .= '0';
+ $output .= '</td></tr>';
+ }
+ // Procenti
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['percent'] == 1){
+ $output .= '<tr><td align="center">';
+ $output .= $this->formatNumber(0, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $output .= '</td></tr>';
+ }
+ }
+
+ // Povprecje
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['avgVar'] > 0){
+ $output .= '<tr><td align="center">';
+ $output .= '<font color="blue">'.$this->formatNumber($avg, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE')).'</font>';
+ $output .= '</td></tr>';
+ }
+
+ // Delez
+ if($this->multiCrosstabClass->table_settings[$this->multiCrosstabClass->table_id]['delezVar'] > 0){
+ $output .= '<tr><td align="center">';
+ $output .= '<font color="red">'.$this->formatNumber($delez*100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%').'</font>';
+ $output .= '</td></tr>';
+ }
+
+ $output .= '</table>';
+ $output .= '</td>';
+ }
+
+
+
+
+ /*Skrajsa tekst in doda '...' na koncu*/
+ function snippet($text,$length=64,$tail="...")
+ {
+ $text = trim($text);
+ $txtl = strlen($text);
+ if($txtl > $length)
+ {
+ for($i=1;$text[$length-$i]!=" ";$i++)
+ {
+ if($i == $length)
+ {
+ return substr($text,0,$length) . $tail;
+ }
+ }
+ $text = substr($text,0,$length-$i+1) . $tail;
+ }
+ return $text;
+ }
+
+ function setUserId($usrId) {$this->anketa['uid'] = $usrId;}
+ function getUserId() {return ($this->anketa['uid'])?$this->anketa['uid']:false;}
+
+ function formatNumber($value, $digit=0, $sufix=""){
+
+ if ($value <> 0 && $value != null)
+ $result = round($value, $digit);
+ else
+ $result = "0";
+
+ # polovimo decimalna mesta in vejice za tisoÄice
+ $decimal_point = SurveyDataSettingProfiles :: getSetting('decimal_point');
+ $thousands = SurveyDataSettingProfiles :: getSetting('thousands');
+
+ //$result = number_format($result, $digit, $decimal_point, $thousands) . $sufix;
+ $result = number_format($result, $digit, ',', '') . $sufix;
+
+ // Preprecimo da bi se stevilo z decimalko pretvorilo v datum
+ //if($sufix == "")
+ //$result = '="'. $result.'"';
+
+ return $result;
+ }
+}
+
+?> \ No newline at end of file
diff --git a/admin/exportclases/class.xlsIzvozAnalizaStatistics.php b/admin/exportclases/class.xlsIzvozAnalizaStatistics.php
new file mode 100644
index 0000000..bac91ff
--- /dev/null
+++ b/admin/exportclases/class.xlsIzvozAnalizaStatistics.php
@@ -0,0 +1,394 @@
+<?php
+
+global $site_path;
+
+ include_once('../../function.php');
+ include_once('../survey/definition.php');
+ include_once('../exportclases/class.xls.php');
+
+class XlsIzvozAnalizaStatistics {
+
+ var $anketa; // trenutna anketa
+ var $pi=array('canCreate'=>false); // za shrambo parametrov in sporocil
+
+ private $headFileName = null; # pot do header fajla
+ private $dataFileName = null; # pot do data fajla
+ private $dataFileStatus = null; # status data datoteke
+
+ var $current_loop = 'undefined';
+
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null, $sprID = null, $loop = null){
+ global $site_path;
+ global $global_user_id;
+ global $output;
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) ){
+
+ $this->anketa['id'] = $anketa;
+ $this->spremenljivka = $sprID;
+
+ SurveyAnalysis::Init($this->anketa['id']);
+ SurveyAnalysis::$setUpJSAnaliza = false;
+
+ // create new XLS document
+ $this->xls = new xls();
+
+ // Poskrbimo za datoteko s podatki
+ $SDF = SurveyDataFile::get_instance();
+ $SDF->init($this->anketa['id']);
+ $SDF->prepareFiles();
+
+ $this->headFileName = $SDF->getHeaderFileName();
+ $this->dataFileName = $SDF->getDataFileName();
+ $this->dataFileStatus = $SDF->getStatus();
+
+ SurveyZankaProfiles :: Init($this->anketa['id'], $global_user_id);
+ $this->current_loop = ($loop != null) ? $loop : $this->current_loop;
+ }
+ else{
+ $this->pi['msg'] = "Anketa ni izbrana!";
+ $this->pi['canCreate'] = false;
+
+ return false;
+ }
+
+ if ( SurveyInfo::getInstance()->SurveyInit($this->anketa['id']) && $this->init()){
+ $this->anketa['uid'] = $global_user_id;
+ SurveyUserSetting::getInstance()->Init($this->anketa['id'], $this->anketa['uid']);
+ }
+ else
+ return false;
+
+ // ce smo prisli do tu je vse ok
+ $this->pi['canCreate'] = true;
+
+ return true;
+ }
+
+ function getAnketa()
+ {
+ return $this->anketa['id'];
+ }
+
+ function checkCreate()
+ {
+ return $this->pi['canCreate'];
+ }
+
+ function getFile($fileName)
+ {
+ //Close and output rtf document
+// $this->rtf->Output($fileName, 'I');
+ $output = $this->createXls();
+ $this->xls->display($fileName, $output);
+ }
+
+ function init()
+ {
+ return true;
+ }
+
+ function createXls(){
+ global $site_path;
+ global $lang;
+ global $output;
+
+ $convertTypes = array('charSet' => "windows-1250",
+ 'delimit' => ";",
+ 'newLine' => "\n",
+ 'BOMchar' => "\xEF\xBB\xBF");
+
+ $output = $convertTypes['BOMchar'];
+
+ $output .= '<table border="0"><tr><td colspan="10"><font size="3"><b>'.$lang['export_analisys_desc'].'</b></font></td></tr></table>';
+ $output .= '<table border="0"><tr><td></td></tr></table>';
+
+ if ($this->headFileName !== null ) {
+
+ // Preverimo ce imamo zanke (po skupinah)
+ SurveyAnalysis::$_LOOPS = SurveyZankaProfiles::getFiltersForLoops();
+
+ # Äe nimamo zank
+ if(count(SurveyAnalysis::$_LOOPS) == 0){
+
+ $this->displayTables();
+ }
+ else{
+ // izrisemo samo eno tabelo iz enega loopa
+ if($this->current_loop > 0){
+
+ $loop = SurveyAnalysis::$_LOOPS[(int)$this->current_loop-1];
+ $loop['cnt'] = $this->current_loop;
+ SurveyAnalysis::$_CURRENT_LOOP = $loop;
+
+ // Izpisemo naslov zanke za skupino
+ $output .= '<table border="0"><tr><td></td></tr></table>';
+ $output .= '<table border="0"><tr><td colspan="10"><font size="3"><b>'.$lang['srv_zanka_note'].$loop['text'].'</b></font></td></tr></table>';
+
+ $this->displayTables();
+ }
+ // Izrisemo vse tabele spremenljivka (iz vseh loopov)
+ else{
+ $loop_cnt = 0;
+ # Äe mamo zanke
+ foreach(SurveyAnalysis::$_LOOPS AS $loop) {
+ $loop_cnt++;
+ $loop['cnt'] = $loop_cnt;
+ SurveyAnalysis::$_CURRENT_LOOP = $loop;
+
+ // Izpisemo naslov zanke za skupino
+ $output .= '<table border="0"><tr><td></td></tr></table>';
+ $output .= '<table border="0"><tr><td colspan="10"><font size="3"><b>'.$lang['srv_zanka_note'].$loop['text'].'</b></font></td></tr></table>';
+
+ $this->displayTables();
+ }
+ }
+ }
+
+ } // end if else ($_headFileName == null)
+
+ return $output;
+ }
+
+ function displayTables(){
+ global $site_path;
+ global $lang;
+ global $global_user_id;
+ global $output;
+
+ #preberemo HEADERS iz datoteke
+ SurveyAnalysis::$_HEADERS = unserialize(file_get_contents($this->headFileName));
+
+ # odstranimo sistemske variable tipa email, ime, priimek, geslo
+ SurveyAnalysis::removeSystemVariables();
+
+ # polovimo frekvence
+ SurveyAnalysis::getDescriptives();
+
+ # izpišemo opisne statistike
+ $vars_count = count(SurveyAnalysis::$_FILTRED_VARIABLES);
+ $line_break = '';
+ $output .= '<table border="1">';
+
+ $output .= '<tr>';
+ $output .= '<td align="center">' . $lang['srv_analiza_opisne_variable'] .'<span>'.'</span></td>';
+ $output .= '<td align="center">' . $lang['srv_analiza_opisne_variable_text'] .'<span>'.'</span></td>';
+
+ $output .= '<td align="center">' . $lang['srv_analiza_opisne_m'] .'<span >'.'</span></td>';
+ $output .= '<td align="center">' . $lang['srv_analiza_num_units'] .'<span >'.'</span></td>';
+ $output .= '<td align="center">' . $lang['srv_analiza_opisne_povprecje_odstotek'] .'<span >'.'</span></td>';
+ $output .= '<td align="center">' . $lang['srv_analiza_opisne_odklon'] .'<span >'.'</span></td>';
+ $output .= '<td align="center">' . $lang['srv_analiza_opisne_min'] .'<span >'.'</span></td>';
+ $output .= '<td align="center">' . $lang['srv_analiza_opisne_max'] .'<span >'.'</span></td>';
+ $output .= '</tr>';
+
+ # dodamo Å¡e kontrolo Äe kliÄemo iz displaySingleVar
+ if (isset($_spid) && $_spid !== null) {
+ SurveyAnalysis::$_HEADERS = array($_spid => SurveyAnalysis::$_HEADERS[$_spid]);
+ }
+
+ foreach (SurveyAnalysis::$_HEADERS AS $spid => $spremenljivka) {
+ # preverjamo ali je meta
+ if ($spremenljivka['tip'] != 'm'
+ && ( count(SurveyAnalysis::$_FILTRED_VARIABLES) == 0 || (count(SurveyAnalysis::$_FILTRED_VARIABLES) > 0 && isset(SurveyAnalysis::$_FILTRED_VARIABLES[$spid]) ))
+ && in_array($spremenljivka['tip'], SurveyAnalysis::$_FILTRED_TYPES)
+ && ($this->spremenljivka == $spid || $this->spremenljivka == null) ){
+
+ $show_enota = false;
+ # preverimo ali imamo samo eno variablo in Äe iammo enoto
+ if ((int)$spremenljivka['enota'] != 0 || $spremenljivka['cnt_all'] > 1 ) {
+ $show_enota = true;
+ }
+
+ # izpišemo glavno vrstico z podatki
+ $_sequence = null;
+ # za enodimenzijske tipe izpišemo podatke kar v osnovni vrstici
+ if (!$show_enota) {
+// if ($spremenljivka['tip'] == 1 || $spremenljivka['tip'] == 3
+// || $spremenljivka['tip'] == 4 || $spremenljivka['tip'] == 7 || $spremenljivka['tip'] == 8) {
+ $variable = $spremenljivka['grids'][0]['variables'][0];
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ self::displayDescriptivesSpremenljivkaRow($spid, $spremenljivka,$show_enota,$_sequence);
+ } else {
+ if ($spremenljivka['tip'] == 1 || $spremenljivka['tip'] == 3) {
+ $variable = $spremenljivka['grids'][0]['variables'][0];
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ $show_enota = false;
+ }
+ self::displayDescriptivesSpremenljivkaRow($spid, $spremenljivka,$show_enota,$_sequence);
+ #zloopamo skozi variable
+ $_sequence = null;
+ $grd_cnt=0;
+ if (count($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+
+ if (count($spremenljivka['grids']) > 1 && $grd_cnt !== 0 && $spremenljivka['tip'] != 6) {
+ $grid['new_grid'] = true;
+ }
+ $grd_cnt++;
+ $var_cnt=0;
+ # dodamo dodatne vrstice z albelami grida
+ if (count ($grid['variables']) > 0)
+ foreach ($grid['variables'] AS $vid => $variable ){
+ # dodamo ostale vrstice
+ $do_show = ($variable['other'] !=1 && ($spremenljivka['tip'] == 1 || $spremenljivka['tip'] == 3 || $spremenljivka['tip'] == 5 || $spremenljivka['tip'] == 8 ))
+ ? false
+ : true;
+ if ($do_show) {
+ $variable['var_cnt'] = $var_cnt;
+ self::displayDescriptivesVariablaRow($spremenljivka,$grid,$variable,$_css);
+ }
+ $grid['new_grid'] = false;
+ $var_cnt++;
+ }
+ }
+ } //else: if (!$show_enota)
+ } // end if $spremenljivka['tip'] != 'm'
+ #ob_flush(); flush();
+ } // end foreach SurveyAnalysis::$_HEADERS
+ $output .= '</table >';
+ }
+
+
+ /** Izriše vrstico z opisnimi
+ *
+ * @param unknown_type $spremenljivka
+ * @param unknown_type $variable
+ */
+ function displayDescriptivesVariablaRow($spremenljivka,$grid,$variable=null) {
+ global $lang;
+ global $output;
+
+ $cssBack = $variable['other'] != 1 ? ' anl_bck_desc_2' : ' anl_bck_desc_3';
+ $cssMove = $variable['other'] != 1 ? ' anl_tin' : ' anl_tin1';
+ $cssBack .= (int)$grid['new_grid'] == 1 ? ' anl_bt ' : ' anl_bt_dot ';
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if ($_sequence != null) {
+ $_desc = SurveyAnalysis::$_DESCRIPTIVES[$_sequence];
+ }
+
+ # Äe smo na zaÄetku grida dodamo podatke podvpraÅ¡anja
+ if ($variable['var_cnt'] == 0 && in_array($spremenljivka['tip'],array(16,19,20) ) ) {
+ $output .= '<tr>';
+ $output .= '<td align="center">';
+ $output .= $grid['variable'];
+ $output .= '</td>';
+ $output .= '<td colspan="7">';
+ $output .= $grid['naslov'];
+ $output .= '</td>';
+
+ $output .= '</tr>';
+ }
+ $output .= '<tr>';
+ $output .= '<td align="center">';
+ $output .= $variable['variable'];
+ $output .= '</td>';
+ $output .= '<td align="left">';
+ //$output .= $grid['naslov'] . ' - ' .$variable['naslov'];
+ $output .= $variable['naslov'];
+ $output .= '</td>';
+
+ #veljavno
+ $output .= '<td align="center">'.(int)$_desc['validCnt'].'</td>';
+ #ustrezno
+ $output .= '<td align="center">'.(int)$_desc['allCnt'].'</td>';
+ $output .= '<td align="center">';
+ if ( isset($_desc['avg']) && (int)$spremenljivka['skala'] !== 1 ) {
+ $output .= self::formatNumber($_desc['avg'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'');
+ } else if (isset($_desc['avg']) && $spremenljivka['tip'] == 2 && (int)$spremenljivka['skala'] == 1 ) {
+ $output .= self::formatNumber($_desc['avg']*100,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'&nbsp;%');
+ }
+ $output .= '</td>';
+ $output .= '<td align="center">';
+ if (isset($_desc['div']) && (int)$spremenljivka['skala'] !== 1) {
+ $output .= self::formatNumber($_desc['div'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_DEVIATION'),'');
+ }
+ $output .= '</td>';
+ $output .= '<td align="center">'.((int)$spremenljivka['skala'] !== 1 ? $_desc['min'] : '').'</td>';
+ $output .= '<td align="center">'.((int)$spremenljivka['skala'] !== 1 ? $_desc['max'] : '').'</td>';
+
+ $output .= '</tr>';
+
+ }
+ /** Izriše vrstico z opisnimi
+ *
+ * @param unknown_type $spremenljivka
+ * @param unknown_type $variable
+ */
+ function displayDescriptivesSpremenljivkaRow($spid,$spremenljivka,$show_enota,$_sequence = null) {
+ global $lang;
+ global $output;
+
+ $cssBack = " anl_bck_desc_1";
+ if ($_sequence != null) {
+ $_desc = SurveyAnalysis::$_DESCRIPTIVES[$_sequence];
+ }
+ $output .= '<tr>';
+ $output .= '<td align="center">';
+ $output .= '<b>'.$spremenljivka['variable'].'</b></td>';
+ $output .= '<td>';
+ $output .= '<b>'.($spremenljivka['naslov']) . '</b></td>';
+
+ #veljavno
+ $output .= '<td align="center">'.(!$show_enota ? (int)$_desc['validCnt'] : '&nbsp;') .'</td>';
+ #ustrezno
+ $output .= '<td align="center">'.(!$show_enota ? (int)$_desc['allCnt'] : '&nbsp;').'</td>';
+
+ $output .= '<td align="center">';
+ if (isset($_desc['avg']) && (int)$spremenljivka['skala'] !== 1) {
+ $output .= self::formatNumber($_desc['avg'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'');
+ }
+ $output .= '</td>';
+ $output .= '<td align="center">';
+ if (isset($_desc['div']) && (int)$spremenljivka['skala'] !== 1) {
+ $output .= self::formatNumber($_desc['div'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_DEVIATION'),'');
+ }
+ $output .= '</td>';
+ $output .= '<td align="center">'.((int)$spremenljivka['skala'] !== 1 ? $_desc['min'] : '').'</td>';
+ $output .= '<td align="center">'.((int)$spremenljivka['skala'] !== 1 ? $_desc['max'] : '').'</td>';
+
+ $output .= '</tr>';
+ }
+
+
+
+
+ function encodeText($text)
+ { // popravimo sumnike ce je potrebno
+
+ $stringIn = array("&#269;","&#353;","&#273;","&#263;","&#382;","&#268;","&#352;","&#272;","&#262;","&#381;","&nbsp;");
+ $stringOut = array("Ä","Å¡","Ä‘","ć","ž","ÄŒ","Å ","Ä","Ć","Ž"," ");
+
+ //$text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace($stringIn, $stringOut, $text);
+ return $text;
+ }
+
+ function enkaEncode($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ return strip_tags($text);
+ }
+
+ function formatNumber ($value, $digit = 0, $sufix = "") {
+ if ($value <> 0 && $value != null)
+ $result = round($value, $digit);
+ else
+ $result = "0";
+ //$result = number_format($result, $digit, '.', ',') . $sufix;
+ $result = number_format($result, $digit, ',', '') . $sufix;
+
+ // Preprecimo da bi se stevilo z decimalko pretvorilo v datum
+ //$result = '="'. $result.'"';
+
+ return $result;
+ }
+
+}
+
+?> \ No newline at end of file
diff --git a/admin/exportclases/class.xlsIzvozAnalizaSums.php b/admin/exportclases/class.xlsIzvozAnalizaSums.php
new file mode 100644
index 0000000..18c70c5
--- /dev/null
+++ b/admin/exportclases/class.xlsIzvozAnalizaSums.php
@@ -0,0 +1,2319 @@
+<?php
+
+global $site_path;
+
+ include_once('../../function.php');
+ include_once('../survey/definition.php');
+ include_once('../exportclases/class.xls.php');
+
+class XlsIzvozAnalizaSums {
+
+ var $anketa; // trenutna anketa
+ var $pi=array('canCreate'=>false); // za shrambo parametrov in sporocil
+
+ private $headFileName = null; # pot do head fajla
+ private $dataFileName = null; # pot do data fajla
+ private $dataFileStatus = null; # status data datoteke
+
+ var $current_loop = 'undefined';
+
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null, $sprID = null, $loop = null){
+ global $site_path;
+ global $global_user_id;
+ global $output;
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) ){
+
+ $this->anketa['id'] = $anketa;
+ $this->spremenljivka = $sprID;
+
+ SurveyAnalysis::Init($this->anketa['id']);
+ SurveyAnalysis::$setUpJSAnaliza = false;
+
+ // create new XLS document
+ $this->xls = new xls();
+
+ // Poskrbimo za datoteko s podatki
+ $SDF = SurveyDataFile::get_instance();
+ $SDF->init($this->anketa['id']);
+ $SDF->prepareFiles();
+
+ $this->headFileName = $SDF->getHeaderFileName();
+ $this->dataFileName = $SDF->getDataFileName();
+ $this->dataFileStatus = $SDF->getStatus();
+
+ SurveyZankaProfiles :: Init($this->anketa['id'], $global_user_id);
+ $this->current_loop = ($loop != null) ? $loop : $this->current_loop;
+ }
+ else{
+ $this->pi['msg'] = "Anketa ni izbrana!";
+ $this->pi['canCreate'] = false;
+
+ return false;
+ }
+
+ if ( SurveyInfo::getInstance()->SurveyInit($this->anketa['id']) && $this->init()){
+ $this->anketa['uid'] = $global_user_id;
+ SurveyUserSetting::getInstance()->Init($this->anketa['id'], $this->anketa['uid']);
+ }
+ else
+ return false;
+
+ // ce smo prisli do tu je vse ok
+ $this->pi['canCreate'] = true;
+
+ return true;
+ }
+
+ function getAnketa()
+ {
+ return $this->anketa['id'];
+ }
+
+ function checkCreate()
+ {
+ return $this->pi['canCreate'];
+ }
+
+ function getFile($fileName)
+ {
+ //Close and output rtf document
+// $this->rtf->Output($fileName, 'I');
+ $output = $this->createXls();
+ $this->xls->display($fileName, $output);
+ }
+
+ function init()
+ {
+ return true;
+ }
+
+ function createXls(){
+ global $site_path;
+ global $lang;
+ global $output;
+
+ $convertTypes = array('charSet' => "windows-1250",
+ 'delimit' => ";",
+ 'newLine' => "\n",
+ 'BOMchar' => "\xEF\xBB\xBF");
+
+ $output = $convertTypes['BOMchar'];
+
+ $output .= '<table border="0"><tr><td colspan="10"><font size="3"><b>'.$lang['export_analisys_sums'].'</b></font></td></tr></table>';
+
+ # preberemo header
+ if ($this->headFileName !== null) {
+
+ // Preverimo ce imamo zanke (po skupinah)
+ SurveyAnalysis::$_LOOPS = SurveyZankaProfiles::getFiltersForLoops();
+
+ # Äe nimamo zank
+ if(count(SurveyAnalysis::$_LOOPS) == 0){
+
+ $this->displayTables();
+ }
+ else{
+ // izrisemo samo eno tabelo iz enega loopa
+ if($this->current_loop > 0){
+
+ $loop = SurveyAnalysis::$_LOOPS[(int)$this->current_loop-1];
+ $loop['cnt'] = $this->current_loop;
+ SurveyAnalysis::$_CURRENT_LOOP = $loop;
+
+ // Izpisemo naslov zanke za skupino
+ $output .= '<table border="0"><tr><td></td></tr></table>';
+ $output .= '<table border="0"><tr><td colspan="10"><font size="3"><b>'.$lang['srv_zanka_note'].$loop['text'].'</b></font></td></tr></table>';
+
+ $this->displayTables();
+ }
+ // Izrisemo vse tabele spremenljivka (iz vseh loopov)
+ else{
+ $loop_cnt = 0;
+ # Äe mamo zanke
+ foreach(SurveyAnalysis::$_LOOPS AS $loop) {
+ $loop_cnt++;
+ $loop['cnt'] = $loop_cnt;
+ SurveyAnalysis::$_CURRENT_LOOP = $loop;
+
+ // Izpisemo naslov zanke za skupino
+ $output .= '<table border="0"><tr><td></td></tr></table>';
+ $output .= '<table border="0"><tr><td colspan="10"><font size="3"><b>'.$lang['srv_zanka_note'].$loop['text'].'</b></font></td></tr></table>';
+
+ $this->displayTables();
+ }
+ }
+ }
+
+ } // end if else ($_headFileName == null)
+
+ return $output;
+ }
+
+ function displayTables(){
+ global $site_path;
+ global $lang;
+ global $global_user_id;
+ global $output;
+
+ SurveyAnalysis::$_HEADERS = unserialize(file_get_contents($this->headFileName));
+ # odstranimo sistemske variable tipa email, ime, priimek, geslo
+ SurveyAnalysis::removeSystemVariables();
+
+ SurveyAnalysis::$missingProfileData = SurveyMissingProfiles::getProfile(SurveyAnalysis::$currentMissingProfile);
+
+ # polovimo frekvence
+ SurveyAnalysis::getFrequencys();
+ $vars_count = count(SurveyAnalysis::$_FILTRED_VARIABLES);
+ $line_break = '';
+ foreach (SurveyAnalysis::$_HEADERS AS $spid => $spremenljivka) {
+ # preverjamo ali je meta
+ if (($spremenljivka['tip'] != 'm'
+ && in_array($spremenljivka['tip'], SurveyAnalysis::$_FILTRED_TYPES ))
+ && (!isset($_spid) || (isset($_spid) && $_spid == $spid))
+ && ($this->spremenljivka == $spid || $this->spremenljivka == null) ) {
+ # ali imamo sfiltrirano spremenljivko
+ if ($vars_count == 0 || ($vars_count > 0 && isset(SurveyAnalysis::$_FILTRED_VARIABLES[$spid]) ) ) {
+
+ $output .= '<table border="0"><tr><td></td></tr></table>';
+
+ # prikazujemo v odvisnosti od kategorije spremenljivke
+ switch ($spremenljivka['tip']) {
+ case 1:
+ # radio - prikjaže navpiÄno
+ self::sumVertical($spid,'sums');
+
+ break;
+ case 2:
+ #checkbox Äe je dihotomna:
+ self::sumVerticalCheckbox($spid,'sums');
+ break;
+ case 3:
+ # dropdown - prikjaže navpiÄno
+ self::sumVertical($spid,'sums');
+ break;
+ case 6:
+ if ($spremenljivka['enota'] != 3) {
+ # multigrid
+ self::sumHorizontal($spid,'sums');
+ } else {
+ #imamo dvojni mgrid
+ self::sumDoubleHorizontal($spid,'sums*');
+ }
+ break;
+ case 16:
+ #multicheckbox Äe je dihotomna:
+ self::sumMultiHorizontalCheckbox($spid,'sums');
+ break;
+ case 17:
+ #razvrÅ¡Äanje Äe je ordinalna
+ self::sumHorizontal($spid,'sums');
+ break;
+ case 4: # text
+ case 8: # datum
+ # varabla tipa »besedilo« je v sumarniku IDENTIČNA kot v FREKVENCAH.
+ self::sumTextVertical($spid,'sums');
+ break;
+ case 21: # besedilo*
+ # varabla tipa »besedilo« je v sumarniku IDENTIČNA kot v FREKVENCAH.
+ if ($spremenljivka['cnt_all'] == 1) {
+ // Äe je enodimenzionalna prikažemo kot frekvence
+ // predvsem zaradi vprašanj tipa: language, email...
+ self::sumTextVertical($spid,'sums');
+ } else {
+ self::sumMultiText($spid,'sums');
+ }
+ break;
+ case 19: # multitext
+ self::sumMultiText($spid,'sums');
+ break;
+ case 7:
+ case 18:
+ # variabla tipa »število« je v sumarniku identiÄna kot v DESCRIPTIVES.
+ self::sumNumberVertical($spid,'sums');
+ break;
+ case 20:
+ # ÄŒe je v gridu le ene variabla naj bo default prikazan f* in ne SUMA
+ if ($spremenljivka['grids'][0]['cnt_vars'] == 1) {
+ # variabla tipa »število« je v sumarniku identiÄna kot v DESCRIPTIVES.
+ self::sumMultiNumberVertical($spid,'sums');
+
+ } else {
+ # variabla tipa »število« je v sumarniku identiÄna kot v DESCRIPTIVES.
+ self::sumMultiNumber($spid,'sums');
+ }
+ break;
+ case 22:
+ # kalkulacija
+ self::sumNumberVertical($spid,'sums');
+ break;
+ case 5:
+ # nagovor
+ //self::sumNagovor($spid,'sums');
+ break;
+ case 26: //lokacija
+ self::sumLokacija($spid,'sums');
+ break;
+ }
+
+ }
+
+ } // end if $spremenljivka['tip'] != 'm'
+ #ob_flush(); flush();
+ } // end foreach self::$_HEADERS
+ }
+
+
+ /** Izriše sumarnik v vertikalni obliki
+ *
+ * @param unknown_type $spid
+ */
+ function sumVertical($spid,$_from) {
+ global $lang;
+ global $output;
+
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+ # dodamo opcijo kje izrisujemo legendo
+ $inline_legenda = false;
+
+ $options=array('inline_legenda' => $inline_legenda, 'isTextAnswer' => false, 'isOtherAnswer' => false, 'num_show_records' => $num_show_records);
+ # tekst vprašanja
+ $output .= '<table border="1">';
+ # naslovna vrstica
+ $output .= '<tr>';
+ #variabla
+ $output .= '<td align="center">';
+ $output .= '<b>'.$spremenljivka['variable'].'</b>';
+ $output .= '</td>';
+ #odgovori
+
+ $show_valid_percent = (SurveyAnalysis::$_HEADERS[$spid]['show_valid_percent'] == true) ? 1 : 0;
+ $output .= '<td colspan="'. (4 + $show_valid_percent) .'"><span><b>'.$spremenljivka['naslov'].'</b></span>';
+ $output .= '</td>';
+
+ $output .= '</tr>';
+ $output .= '<tr>';
+ #variabla
+ $output .= '<td>';
+ $output .= '</td>';
+ #odgovori
+
+ $output .= '<td>'.$lang['srv_analiza_frekvence_titleAnswers'] . '</td>';
+
+ $output .= '<td align="center">'. $lang['srv_analiza_frekvence_titleFrekvenca'] .'</td>';
+ $output .= '<td align="center">'. $lang['srv_analiza_frekvence_titleOdstotek'] .'</td>';
+ if (SurveyAnalysis::$_HEADERS[$spid]['show_valid_percent'] == true) {
+ $output .= '<td align="center">'. $lang['srv_analiza_frekvence_titleVeljavni'] .'</td>';
+ }
+ $output .= '<td align="center">'. $lang['srv_analiza_frekvence_titleKumulativa'] .'</td>';
+ $output .= '</tr>';
+ // konec naslovne vrstice
+
+ $_answersOther = array();
+ $sum_xi_fi=0;
+ $N = 0;
+
+ $_tmp_for_div = array();
+ # izpišemo vlejavne odgovore
+ if (count($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ # dodamo dodatne vrstice z albelami grida
+ if (count($grid['variables']) > 0 )
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if ($variable['text'] != true && $variable['other'] != true) {
+
+ $maxAnswer = (SurveyDataSettingProfiles :: getSetting('numOpenAnswers') > 0) ? SurveyDataSettingProfiles :: getSetting('numOpenAnswers') : 30;
+ $counter = 0;
+ $_kumulativa = 0;
+ //SurveyAnalysis::$_FREQUENCYS[$_sequence]
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'] AS $vkey => $vAnswer) {
+
+ // za povpreÄje
+ $xi = $vkey;
+ $fi = $vAnswer['cnt'];
+
+ $sum_xi_fi += $xi * $fi ;
+ $N += $fi;
+ //if ($counter < $maxAnswer) {
+ if ($vAnswer['cnt'] > 0 || true) { # izpisujemo samo tiste ki nisno 0
+ $counter = self::outputValidAnswerVertical($counter,$vkey,$vAnswer,$_sequence,$spid,$_kumulativa,$options);
+ }
+ //}
+ # za poznejÅ¡e raÄunannje odklona
+ $_tmp_for_div[] = array('xi'=>$xi, 'fi'=>$fi, 'sequence'=>$_sequence);
+ }
+ # izpišemo sumo veljavnih
+ $counter = self::outputSumaValidAnswerVertical($counter,$_sequence,$spid,$options);
+ }
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'] AS $ikey => $iAnswer) {
+ if ($iAnswer['cnt'] > 0 ) { # izpisujemo samo tiste ki nisno 0
+ $counter = self::outputInvalidAnswerVertical($counter,$ikey,$iAnswer,$_sequence,$spid,$options);
+ }
+ }
+ # izpišemo sumo veljavnih
+ $counter = self::outputSumaInvalidAnswerVertical($counter,$_sequence,$spid,$options);
+ }
+ #izpišemo še skupno sumo
+ $counter = self::outputSumaVertical($counter,$_sequence,$spid,$options);
+ } else {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ }
+ }
+
+ # odklon
+ $avg = ($N > 0) ? $sum_xi_fi / $N : 0;
+ #standardna diviacija
+ $div = 0;
+ $sum_pow_xi_fi_avg = 0;
+ foreach ( $_tmp_for_div as $tkey => $_tmp_div_data) {
+ $xi = $_tmp_div_data['xi'];
+ $fi = $_tmp_div_data['fi'];
+
+ $sum_pow_xi_fi_avg += pow(($xi - $avg),2) * $fi;
+ }
+ $div = (($N -1) > 0) ? sqrt($sum_pow_xi_fi_avg / ($N -1)) : 0;
+
+ # izpiÅ¡emo Å¡e odklon in povpreÄje
+ if ($show_valid_percent == 1 && SurveyAnalysis::$_HEADERS[$spid]['skala'] != 1) {
+ $output .= '<tr>';
+ $output .= '<td colspan="6"></td>';
+ $output .= '</tr>';
+ $output .= '<tr >';
+ $output .= '<td colspan="2"></td>';
+ $output .= '<td align="center">'.$lang['srv_analiza_opisne_povprecje'].'</td>';
+ $output .= '<td align="center">'. self::formatNumber($avg,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'').'</td>';
+ $output .= '<td align="center">'.$lang['srv_analiza_opisne_odklon'].'</td>';
+ $output .= '<td align="center">'.self::formatNumber($div,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'').'</td>';
+ $output .= '</tr>';
+ }
+ $output .= '</table>';
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ self::outputOtherAnswers($oAnswers);
+ }
+ }
+ }
+
+ /** Izriše sumarnik v horizontalni obliki za multi checbox
+ *
+ * @param unknown_type $spid - spremenljivka ID
+ */
+ function sumMultiHorizontalCheckbox($spid,$_from) {
+ global $lang;
+ global $output;
+
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+ $_answersOther = array();
+
+ # ugotovimo koliko imamo kolon
+ $gid=0;
+ $_clmn_cnt = SurveyAnalysis::$_HEADERS[$spid]['grids'][$gid]['cnt_vars']-SurveyAnalysis::$_HEADERS[$spid]['grids'][$gid]['cnt_other'];
+ # tekst vprašanja
+
+ $css_hide_enote = isset($_POST['navedbe']) && $_POST['navedbe'] == '1' ? ' hidden' : '';
+ $css_hide_navedbe = isset($_POST['navedbe']) && $_POST['navedbe'] == '1' ? '' : ' hidden';
+
+ # odgovori
+ $output .= '<table border="1">';
+ $output .= '<tr>';
+ $output .= '<td align="center">';
+ $output .= '<b>'.$spremenljivka['variable'].'</b>';
+ $output .= '</td>';
+ $output .= '<td colspan="'. ($_clmn_cnt + 3) .'">';
+ $output .= '<span><b>'.$spremenljivka['naslov'].'</b></span>';
+
+// $output .= '<span name="span_show_navedbe_1_'.$spid.'" class="span_navedbe"><a href="javascript:show_navedbe(\''.$spid.'\',\'3\');">&nbsp;(<span class="blue">'.$lang['srv_analiza_opisne_answers'].'&nbsp;</span>/<span class="blue">&nbsp;'.$lang['srv_analiza_opisne_arguments'].'</span>)</a></span>';
+// $output .= '<span name="span_show_navedbe_2_'.$spid.'" class="span_navedbe'.$css_hide_enote.'"><a href="javascript:show_navedbe(\''.$spid.'\',\'2\');">&nbsp;(<span class="blue">'.$lang['srv_analiza_opisne_units'].'&nbsp;</span>/<span>&nbsp;'.$lang['srv_analiza_opisne_arguments'].'</span>)</a></span>';
+// $output .= '<span name="span_show_navedbe_3_'.$spid.'" class="span_navedbe'.$css_hide_navedbe.'"><a href="javascript:show_navedbe(\''.$spid.'\',\'1\');">&nbsp;(<span>'.$lang['srv_analiza_opisne_units'].'&nbsp;</span>/<span class="blue">&nbsp;'.$lang['srv_analiza_opisne_arguments'].'</span>)</a></span>';
+ $output .= '</td>';
+ $output .= '</tr>';
+ $output .= '<tr>';
+ $output .= '<td>';
+ $output .= '</td>';
+ $output .= '<td>';
+ $output .= $lang['srv_analiza_opisne_subquestion'];
+ $output .= '</td>';
+
+ $output .= '<td align="center" colspan="'.($_clmn_cnt).'">';
+ $output .= $lang['srv_analiza_opisne_answers'];
+ $output .= '</td>';
+ $output .= '<td align="center">'.$lang['srv_analiza_opisne_valid'].'</td>';
+ $output .= '<td align="center">'.$lang['srv_analiza_num_units'].'</td>';
+ $output .= '</tr>';
+
+ $_variables = SurveyAnalysis::$_HEADERS[$spid]['grids'][$gid]['variables'];
+ $output .= '<tr>';
+ $output .= '<td></td>';
+ $output .= '<td></td>';
+
+ if (count($_variables) > 0) {
+ foreach ($_variables AS $vkey => $variable) {
+ if ($variable['other'] != true) {
+ $output .= '<td align="center">' . $variable['naslov'].' ('.$variable['gr_id']. ') </td>';
+ }
+ }
+ }
+ //$output .= '<td>' . $lang['srv_anl_suma1'] . '</td>';
+ $output .= '<td align="center">'. $_valid_cnt .'</td>';
+ $output .= '<td align="center">'.$_approp_cnt. '</td>';
+ $output .= '</tr>';
+ foreach (SurveyAnalysis::$_HEADERS[$spid]['grids'] AS $gid => $grids) {
+ $_cnt = 0;
+ # vodoravna vrstice s podatki
+ $css_back = ' anl_bck_desc_2';
+ $output .= '<tr>';
+ $output .= '<td align="center" valign="top">'.$grids['variable'].'</td>';
+ $output .= '<td valign="top">'.$grids['naslov'].'</td>';
+
+ $_arguments = 0;
+
+ $_max_appropriate = 0;
+ $_max_cnt = 0;
+ // prikaz frekvenc
+ if (count($grids['variables']) > 0)
+ foreach ($grids['variables'] AS $vkey => $variable) {
+ $_sequence = $variable['sequence'];
+ $_valid = SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'];
+ $_cnt = SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt'];
+ $_arguments += $_cnt;
+
+ $_max_appropriate = max($_max_appropriate, (int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt']);
+ $_max_cnt = max ($_max_cnt, ((int)(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt']+(int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['0']['cnt'])));
+
+ if ($variable['other'] == true) {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vkey,'sequence'=>$_sequence);
+ }
+
+ if ($variable['other'] != true) {
+ $output .= '<td>';
+ $output .= '<table>';
+ $output .= '<tr>';
+ $output .= '<td align="center">'.$_cnt.'</td>';
+ $output .= '</tr>';
+ $output .= '<tr>';
+ $output .= '<td align="center">';
+
+ $_percent = ($_valid > 0 ) ? $_cnt * 100 / $_valid : 0;
+ $output .= self::formatNumber($_percent,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%');
+ $output .= '</td>';
+ $output .= '</tr></table>';
+
+ $output .= '</td>';
+ }
+ }
+ # veljavno
+ $output .= '<td align="center" valign="top">'.$_max_cnt.'</td>';
+ #ustrezno
+ $output .= '<td align="center" valign="top">'.$_max_appropriate.'</td>';
+
+ $output .= '</tr>';
+ }
+ $output .= '</table>';
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ self::outputOtherAnswers($oAnswers);
+ }
+ }
+ }
+
+ function sumVerticalCheckbox($spid,$_from) {
+ global $lang;
+ global $output;
+
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+ $_answersOther = array();
+
+ $inline_legenda = count ($spremenljivka['grids']) > 1;
+ if ($variable['other'] != '1' && $variable['text'] != '1') {
+ $_tip = SurveyAnalysis::getSpremenljivkaLegenda($spremenljivka,'izrazanje');
+ $_oblika = SurveyAnalysis::getSpremenljivkaLegenda($spremenljivka,'skala');
+ } else {
+ $_tip = $lang['srv_analiza_vrsta_bese'];
+ $_oblika = $lang['srv_analiza_oblika_nomi'];
+ }
+ # ugotovimo koliko imamo kolon
+ if (count($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $_clmn_cnt[$gid] = $grid['cnt_vars']-$grid['cnt_other'];
+ if (count ($grid['variables']) > 0)
+ foreach ($grid['variables'] AS $vid => $variable) {
+ $_sequence = $variable['sequence'];
+ $_valid_cnt[$gid] = max($_valid_cnt[$gid], SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt']);
+ $_approp_cnt[$gid] = max($_approp_cnt[$gid], SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt']);
+ if ($variable['other'] == true) {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ $_valid[$gid][$vid] = SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'];
+ $_navedbe[$gid] += SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt'];
+ }
+ }
+
+ $output .= '<table border="1">';
+ $output .= '<tr>';
+ $output .= '<td align="center">';
+ $output .= '<b>'.$spremenljivka['variable'].'</b>';
+ $output .= '</td>';
+ $output .= '<td colspan="8"><span><b>'.$spremenljivka['naslov'].'</b></span>';
+
+ //$output .= '<span name="span_show_navedbe_2_'.$spid.'" class="span_navedbe"><a href="javascript:show_navedbe(\''.$spid.'\',\'2\');">&nbsp;(<span class="blue">'.$lang['srv_analiza_opisne_units'].'&nbsp;</span>/<span>&nbsp;'.$lang['srv_analiza_opisne_arguments'].'</span>)</a></span>';
+ //$output .= '<span name="span_show_navedbe_3_'.$spid.'" class="span_navedbe hidden"><a href="javascript:show_navedbe(\''.$spid.'\',\'1\');">&nbsp;(<span>'.$lang['srv_analiza_opisne_units'].'&nbsp;</span>/<span class="blue">&nbsp;'.$lang['srv_analiza_opisne_arguments'].'</span>)</a></span>';
+ $output .= '</td>';
+ $output .= '</tr>';
+
+
+ $output .= '<tr>';
+ $output .= '<td align="center">';
+ $output .= '</td>';
+ $output .= '<td align="center">'.$lang['srv_analiza_opisne_subquestion'].'</td>';
+
+ $output .= '<td align="center" colspan="5">'.$lang['srv_analiza_opisne_units'].'</td>';
+
+ $output .= '<td align="center" colspan="2">'.$lang['srv_analiza_opisne_arguments'].'</td>';
+ $output .= '</tr>';
+
+
+ $output .= '<tr>';
+ $output .= '<td align="center"></td>';
+ $output .= '<td align="center"></td>';
+
+ $output .= '<td align="center">'.$lang['srv_analiza_opisne_frequency'].'</td>';
+ $output .= '<td align="center">'.$lang['srv_analiza_opisne_valid'].'</td>';
+ $output .= '<td align="center">% - '.$lang['srv_analiza_opisne_valid'].'</td>';
+ $output .= '<td align="center">'.$lang['srv_analiza_num_units_valid'].'</td>';
+ $output .= '<td align="center">% - '.$lang['srv_analiza_num_units_valid'].'</td>';
+ $output .= '<td align="center">'.$lang['srv_analiza_opisne_frequency'].'</td>';
+ $output .= '<td align="center">%</td>';
+ $output .= '</tr>';
+
+
+ $_max_valid = 0;
+ $_max_appropriate = 0;
+ if (count ($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] as $gid => $grid) {
+ $_max_valid = 0;
+ $_max_appropriate = 0;
+ if (count ($grid['variables']) > 0)
+ foreach ($grid['variables'] AS $vid => $variable) {
+ if ($variable['other'] != 1) {
+ $_sequence = $variable['sequence'];
+
+ $output .= '<tr>';
+ $output .= '<td align="center">'.$variable['variable'].'</td>';
+ $output .= '<td>'.$variable['naslov'].'</td>';
+
+ // Frekvence
+ $output .= '<td align="center">';
+ $output .= (int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt'];
+ $output .= '</td>';
+
+ // Veljavni
+ $output .= '<td align="center">';
+ $output .= (int)(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt']+(int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['0']['cnt']);
+ $output .= '</td>';
+
+ // Veljavni procent
+ $output .= '<td align="center">';
+ $_percent = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] > 0 ) ? 100*SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] : 0;
+ $output .= self::formatNumber($_percent,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%');
+ $output .= '</td>';
+
+ $_max_appropriate = max($_max_appropriate, (int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt']);
+ $_max_valid = max ($_max_valid, ((int)(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt']+(int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['0']['cnt'])));
+
+ // Ustrezni
+ $output .= '<td align="center">';
+ $output .= (int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'];
+
+ // % Ustrezni
+ $output .= '<td align="center">';
+ $valid = (int)(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt']+(int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['0']['cnt']);
+ $valid = (int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt'];
+ $_percent = ($_max_appropriate > 0 ) ? 100*$valid / $_max_appropriate : 0;
+
+ $output .= self::formatNumber($_percent,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%');
+ $output .= '</td>';
+
+ // Navedbe
+ $output .= '<td align="center">';
+ $output .= SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt'];
+ $output .= '</td>';
+
+ $output .= '<td align="center">';
+ $_percent = ($_navedbe[$gid] > 0 ) ? 100*SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']['1']['cnt'] / $_navedbe[$gid] : 0;
+ $output .= self::formatNumber($_percent,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%');
+ $output .= '</td>';
+
+
+ $output .= '</tr>';
+
+ } else {
+ # drugo
+ }
+ }
+
+ $output .= '<tr>';
+
+ $output .= '<td></td>';
+ $output .= '<td colspan="1">'.$lang['srv_anl_suma_valid'].'</td>';
+
+ $output .= '<td></td>';
+ $output .= '<td align="center">'.$_max_valid.'</td>';
+ $output .= '<td></td>';
+
+ $output .= '<td align="center">'.$_max_appropriate.'</td>';
+ $output .= '<td></td>';
+
+ $output .= '<td align="center">'.$_navedbe[$gid].'</td>';
+ $output .= '<td align="center">'.SurveyAnalysis::formatNumber('100',SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%').'</td>';
+
+
+ $output .= '</tr>';
+
+ }
+ $output .= '</table>';
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ self::outputOtherAnswers($oAnswers);
+ }
+ }
+
+ }
+
+ /** Izriše sumarnik v horizontalni obliki za multigrid
+ *
+ * @param unknown_type $spid - spremenljivka ID
+ */
+ function sumHorizontal($spid,$_from) {
+ global $lang;
+ global $output;
+
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+ $_answersOther = array();
+ $_clmn_cnt = count($spremenljivka['options']);
+
+ # pri razvrÅ¡Äanju dodamo dva polja za povpreÄje in odklon
+ $additional_field = false;
+ $add_fld = 0;
+
+ if ($spremenljivka['tip'] == 17 || $spremenljivka['tip'] == 1 || $spremenljivka['tip'] == 3 || ($spremenljivka['tip'] == 6 && $spremenljivka['skala'] != 1)) {
+ $additional_field = true;
+ $add_fld = 2;
+ }
+
+ # pri radiu in dropdown ne prikazujemo podvprašanj
+ $_sub_question_col = 1;
+ if ($spremenljivka['tip'] == 1 || $spremenljivka['tip'] == 3) {
+ $_sub_question_col = 0;
+ }
+
+ $output .= '<table border="1">';
+ $output .= '<tr>';
+ $output .= '<td align="center">';
+ $output .= '<b>'.$spremenljivka['variable'].'</b>';
+ $output .= '</td>';
+ $output .= '<td colspan="'. (3 + $_sub_question_col) .'">';
+ $output .= '<span><b>'.$spremenljivka['naslov'].'</b></span>';
+
+ $output .= '</td>';
+ $output .= '</tr>';
+
+ $output .= '<tr>';
+ $output .= '<td align="center">';
+ $output .= '</td>';
+ if ($_sub_question_col) {
+ $output .= '<td align="center">'.$lang['srv_analiza_opisne_subquestion'].'</td>';
+ }
+
+ $output .= '<td align="center" colspan="'. ($_clmn_cnt + 1) .'">'.$lang['srv_analiza_opisne_answers'];
+ //$output .= '<span id="img_analysis_f_p_1_'.$spid.'" class="img_analysis_f_p"><a href="javascript:show_single_percent(\''.$spid.'\',\'2\');">&nbsp(<span class="blue">f&nbsp;</span>/<span class="blue">&nbsp;%</span>)</a></span>';
+ //$output .= '<span id="img_analysis_f_1_'.$spid.'" class="img_analysis_f hidden"><a href="javascript:show_single_percent(\''.$spid.'\',\'1\');">&nbsp(<span class="blue">f&nbsp;</span>/&nbsp;%)</a></span>';
+ //$output .= '<span id="img_analysis_p_1_'.$spid.'" class="img_analysis_p hidden"><a href="javascript:show_single_percent(\''.$spid.'\',\'0\');">&nbsp(f&nbsp;/<span class="blue">&nbsp;%</span>)</a></span>';
+ $output .= '</td>';
+ $output .= '<td align="center">'.$lang['srv_analiza_opisne_valid'].'</td>';
+ $output .= '<td align="center">'.$lang['srv_analiza_num_units'].'</td>';
+ if ($additional_field) {
+ $output .= '<td align="center">'.$lang['srv_analiza_opisne_povprecje'].'</td>';
+ $output .= '<td align="center">'.$lang['srv_analiza_opisne_odklon'].'</td>';
+ }
+ $output .= '</tr>';
+
+ $_variables = $grid['variables'];
+ $output .= '<tr>';
+ $output .= '<td></td>';
+ if ( $_sub_question_col ) {
+ $output .= '<td></td>';
+ }
+ if (count($spremenljivka['options']) > 0) {
+ foreach ( $spremenljivka['options'] as $key => $kategorija) {
+ // misinge imamo zdruzene
+ $_label = $kategorija;
+ $output .= '<td align="center">'.$_label.'</td>';
+ }
+ }
+
+ $output .= '<td align="center">'.$lang['srv_anl_suma1'].'</td>';
+ $output .= '<td></td>';
+ $output .= '<td></td>';
+ if ($additional_field) {
+
+ $output .= '<td></td>';
+ $output .= '<td></td>';
+ }
+ $output .= '</tr>';
+
+ if (count($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+
+ # zloopamo skozi variable
+ if (count($grid['variables']) > 0)
+ foreach ($grid['variables'] AS $vid => $variable ) {
+ $_sequence = $variable['sequence'];
+ if ($variable['other'] != true) {
+
+ $output .= '<tr>';
+ if ($_sub_question_col) {
+ $output .= '<td align="center" valign="top">';
+ $output .= $variable['variable'].'</td>';
+ $output .= '<td valign="top">';
+
+ $output .= $variable['naslov'].'</td>';
+ } else {
+ $output .= '<td></td>';
+ }
+
+ # za odklon in povpreÄje
+ $sum_xi_fi=0;
+ $N = 0;
+ $div=0;
+ if (count($spremenljivka['options']) > 0) {
+ foreach ( $spremenljivka['options'] as $key => $kategorija) {
+ if ($additional_field) { # za odklon in povpreÄje
+ $xi = $key;
+ $fi = SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'][$key]['cnt'];
+ $sum_xi_fi += $xi * $fi ;
+ $N += $fi;
+ }
+ $output .= '<td>';
+ $output .= '<table>';
+ $output .= '<tr>';
+ $output .= '<td align="center">'.SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'][$key]['cnt'].'</td>';
+ $output .= '</tr><tr>';
+ $output .= '<td align="center">';
+ $_percent = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] > 0 ) ? SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'][$key]['cnt'] * 100 / SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] : 0;
+ $output .= self::formatNumber($_percent,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%');
+ $output .= '</td>';
+ $output .= '</tr></table>';
+ $output .= '</td>';
+ }
+ }
+ // suma
+ $output .= '<td>';
+ $output .= '<table>';
+ $output .= '<tr>';
+ $output .= '<td align="center">'.(int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'].'</td>';
+ $output .= '</tr><tr>';
+ $output .= '<td align="center">'.self::formatNumber(100,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%').'</td>';
+ $output .= '</tr></table>';
+ $output .= '</td>';
+ // zamenjano veljavni ustrezni
+ $output .= '<td align="center" valign="top">';
+ $output .= SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'];
+ $output .= '</td>';
+ $output .= '<td align="center" valign="top">'.SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'].'</td>';
+ if ($additional_field) { # za odklon in povpreÄje
+ # povpreÄje
+ $avg = ($N > 0) ? $sum_xi_fi / $N : 0;
+ #standardna diviacija
+ $div = 0;
+ $sum_pow_xi_fi_avg = 0;
+ if (count($spremenljivka['options']) > 0) {
+ foreach ( $spremenljivka['options'] as $xi => $kategorija) {
+ $fi = SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'][$xi]['cnt'];
+ $sum_pow_xi_fi_avg += pow(($xi - $avg),2) * $fi;
+ }
+ }
+ $div = (($N -1) > 0) ? sqrt($sum_pow_xi_fi_avg / ($N -1)) : 0;
+ $output .= '<td align="center" valign="top">';
+ $output .= self::formatNumber($avg,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'');
+ $output .= '</td>';
+ $output .= '<td align="center" valign="top">';
+ $output .= self::formatNumber($div,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_DEVIATION'),'');
+ $output .= '</td>';
+ }
+ $output .= '</tr>';
+
+ } else {
+ # immamo polje drugo
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ }
+ }
+ $output .= '</table>';
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ self::outputOtherAnswers($oAnswers);
+ }
+ }
+ }
+
+ /** Izriše sumarnik v horizontalni obliki za multigrid
+ *
+ * @param unknown_type $spid - spremenljivka ID
+ */
+ function sumDoubleHorizontal($spid,$_from) {
+ global $lang;
+ global $output;
+
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+ $_answersOther = array();
+ $_clmn_cnt = count($spremenljivka['options'])*2;
+
+ # pri radiu in dropdown ne prikazujemo podvprašanj
+ $_sub_question_col = 6;
+
+
+ $output .= '<table border="1">';
+
+ $output .= '<tr>';
+ $output .= '<td>';
+ $output .= '<b>'.$spremenljivka['variable'].'</b>';
+ $output .= '</td>';
+ $output .= '<td colspan="'.(2 + (2*count($spremenljivka['options'])) + $_sub_question_col).'">';
+ $output .= '<span><b>'.$spremenljivka['naslov'].'</b></span>';
+
+ $output .= '</td>';
+ $output .= '</tr>';
+
+
+ $output .= '<tr>';
+ $output .= '<td>';
+ $output .= '</td>';
+
+ $output .= '<td>'.$lang['srv_analiza_opisne_subquestion'].'</td>';
+
+ #naslovi podskupin
+ $_variables = $grid['variables'];
+ $output .= '<td align="center" colspan="'.(count($spremenljivka['options']) + 3).'">'.($spremenljivka['double'][1]['subtitle'] == '' ? $lang['srv_grid_subtitle_def'].' 1' : $spremenljivka['double'][1]['subtitle']).'</td>';
+ $output .= '<td align="center" colspan="'.(count($spremenljivka['options']) + 3).'">'.($spremenljivka['double'][2]['subtitle'] == '' ? $lang['srv_grid_subtitle_def'].' 2' : $spremenljivka['double'][2]['subtitle']).'</td>';
+
+ #Å¡t. enot
+ $output .= '<td></td>';
+
+ $output .= '</tr>';
+
+
+ # naslovi variabel
+ $_variables = $grid['variables'];
+ $output .= '<tr>';
+ $output .= '<td></td>';
+
+ $output .= '<td></td>';
+
+ if (count($spremenljivka['options']) > 0) {
+ foreach ( $spremenljivka['options'] as $key => $kategorija) {
+ // misinge imamo zdruzene
+ $_label = $kategorija;
+ $output .= '<td>'.$_label.'</td>';
+ }
+ }
+ $output .= '<td>'.$lang['srv_anl_suma1'].'</td>';
+ $output .= '<td>'.$lang['srv_analiza_opisne_povprecje'].'</td>';
+ $output .= '<td>'.$lang['srv_analiza_opisne_odklon'].'</td>';
+
+
+ if (count($spremenljivka['options']) > 0) {
+ foreach ( $spremenljivka['options'] as $key => $kategorija) {
+ // misinge imamo zdruzene
+ $_label = $kategorija;
+ $output .= '<td>'.$_label.'</td>';
+ }
+ }
+ $output .= '<td>'.$lang['srv_anl_suma1'].'</td>';
+ $output .= '<td>'.$lang['srv_analiza_opisne_povprecje'].'</td>';
+ $output .= '<td>'.$lang['srv_analiza_opisne_odklon'].'</td>';
+
+ # Å¡t enot
+ $output .= '<td>'.$lang['srv_analiza_num_units'].'</td>';
+
+ $output .= '</tr>';
+
+
+ #zloopamo skozi gride in nardimo
+ $_tmp_table = array();
+ $_part = 1;
+ $cnt = 0;
+ if (count($spremenljivka['grids']) > 0) {
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ if ( $_part == $grid['part'] ) {
+ $cnt++;
+ } else {
+ $_part = $grid['part'];
+ $cnt = 1;
+ }
+ # zloopamo skozi variable
+ if (count($grid['variables']) > 0) {
+ foreach ($grid['variables'] AS $vid => $variable ) {
+ $_sequence = $variable['sequence'];
+ if ($variable['other'] != true) {
+ # za odklon in povpreÄje
+ $sum_xi_fi=0;
+ $N = 0;
+ $div=0;
+ if (count($spremenljivka['options']) > 0) {
+ foreach ( $spremenljivka['options'] as $key => $kategorija) {
+
+ $xi = $key;
+ $fi = SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'][$key]['cnt'];
+ $sum_xi_fi += $xi * $fi ;
+ $N += $fi;
+
+ $_percent = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] > 0 ) ? SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'][$key]['cnt'] * 100 / SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] : 0;
+ $_tmp_table[$grid['part']][$cnt]['variables'][] = array('freq'=>SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'][$key]['cnt'],'percent'=>$_percent);
+ }
+ }
+
+ $_tmp_table[$grid['part']][$cnt]['variable'] = $variable['variable'];
+ $_tmp_table[$grid['part']][$cnt]['naslov'] = $variable['naslov'];
+ $_tmp_table[$grid['part']][$cnt]['suma'] = SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'];
+ $_tmp_table[$grid['part']][$cnt]['allCnt'] = (int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'];
+
+ # odklon
+ $avg = ($N > 0) ? $sum_xi_fi / $N : 0;
+ #standardna diviacija
+ $div = 0;
+ $sum_pow_xi_fi_avg = 0;
+ if (count($spremenljivka['options']) > 0) {
+ foreach ( $spremenljivka['options'] as $xi => $kategorija) {
+ $fi = SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'][$xi]['cnt'];
+ $sum_pow_xi_fi_avg += pow(($xi - $avg),2) * $fi;
+ }
+ }
+ $div = (($N -1) > 0) ? sqrt($sum_pow_xi_fi_avg / ($N -1)) : 0;
+
+ $_tmp_table[$grid['part']][$cnt]['avg'] = $avg;
+ $_tmp_table[$grid['part']][$cnt]['div'] = $div;
+ } //end if ($variable['other'] != true)
+ } // end foreach variables
+ }
+ }
+ }
+
+
+
+ #zlopamo skozi gride
+ if (count($_tmp_table[1]) > 0) {
+ foreach ($_tmp_table[1] AS $tkey => $grid) {
+ $cssBack = "anl_bck_desc_2 ";
+
+ $output .= '<tr>';
+
+ $output .= '<td>'.$grid['variable'].'</td>';
+ $output .= '<td>'.$grid['naslov'].'</td>';
+
+ # zloopamo skozi variable
+ if (count($grid['variables']) > 0) {
+ foreach ($grid['variables'] AS $vid => $variable ) {
+ $output .= '<td>';
+ $output .= '<table>';
+ $output .= '<tr>';
+ $output .= '<td>'.$variable['freq'].'</td>';
+ $output .= '</tr><tr>';
+ $output .= '<td>';
+ $output .= self::formatNumber($variable['percent'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%');
+ $output .= '</td>';
+ $output .= '</tr></table>';
+ $output .= '</td>';
+ } // end foreach variables
+ } // end if (count($grid['variables']) > 0)
+ // suma
+ $output .= '<td>';
+ $output .= '<table>';
+ $output .= '<tr>';
+ $output .= '<td>'.(int)$grid['suma'].'</td>';
+ $output .= '</tr><tr>';
+ $output .= '<td>'.self::formatNumber(100,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%').'</td>';
+ $output .= '</tr></table>';
+ $output .= '</td>';
+
+ // povpreje
+ $output .= '<td>';
+ $output .= self::formatNumber($grid['avg'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'');
+ $output .= '</td>';
+
+ // odklon
+ $output .= '<td>';
+ $output .= self::formatNumber($grid['div'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'');
+ $output .= '</td>';
+
+ # dodamo desni del grida
+ $_right_grid = $_tmp_table[2][$tkey];
+ if (count($_right_grid['variables']) > 0) {
+ foreach ($_right_grid['variables'] AS $vid => $variable ) {
+ $output .= '<td>';
+ $output .= '<table>';
+ $output .= '<tr>';
+ $output .= '<td>'.$variable['freq'].'</td>';
+ $output .= '</tr><tr>';
+ $output .= '<td>';
+ $output .= self::formatNumber($variable['percent'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%');
+ $output .= '</td>';
+ $output .= '</tr></table>';
+ $output .= '</td>';
+ } // end foreach variables
+ } // end if (count($grid['variables']) > 0)
+ // suma
+ $output .= '<td>';
+ $output .= '<table>';
+ $output .= '<tr>';
+ $output .= '<td>'.(int)$_right_grid['suma'].'</td>';
+ $output .= '</tr><tr>';
+ $output .= '<td>'.self::formatNumber(100,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'),'%').'</td>';
+ $output .= '</tr></table>';
+ $output .= '</td>';
+
+ // povpreje
+ $output .= '<td>';
+ $output .= self::formatNumber($_right_grid['avg'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'');
+ $output .= '</td>';
+
+ # odklon
+ $output .= '<td>';
+ $output .= self::formatNumber($_right_grid['div'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'');
+ $output .= '</td>';
+
+ # Å¡t enot
+ $output .= '<td>';
+ $output .= $grid['allCnt'];
+ $output .= '</td>';
+ $output .= '</tr>';
+ } // end foreach ($_tmp_table[1] AS $tkey => $grid)
+ }
+ $output .= '</table>';
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ self::outputOtherAnswers($oAnswers);
+ }
+ }
+ }
+
+ /** IzriÅ¡e multi number odgovore. izpiÅ¡e samo povpreÄja
+ *
+ * @param unknown_type $spid
+ */
+ function sumMultiNumber($spid,$_from) {
+ global $lang;
+ global $output;
+
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ # dodamo opcijo kje izrisujemo legendo
+ # Äe je besedilo * in je samo ena kategorija je inline legenda false
+
+ $_cols = $spremenljivka['cnt_all'] / $spremenljivka['cnt_grids'];
+
+ # tekst vprašanja
+ $output .= '<table border="1">';
+ # naslovna vrstica
+ $output .= '<tr>';
+ #variabla
+ $output .= '<td align="center">';
+ $output .= '<b>'.$spremenljivka['variable'].'</b>';
+ $output .= '</td>';
+ #odgovori
+ $output .= '<td colspan="'. (1 + $_cols) .'"><span><b>'.$spremenljivka['naslov'].'</b></span>';
+
+ $output .= '</td>';
+ $output .= '</tr>';
+ $output .= '<tr>';
+ #variabla
+ $output .= '<td>';
+ $output .= '</td>';
+ #odgovori
+
+ $output .= '<td align="center">'.$lang['srv_analiza_opisne_subquestion'] . '</td>';
+
+ $output .= '<td align="center" colspan="'.($_cols).'">'. $lang['srv_analiza_sums_average'] .'</td>';
+
+ $output .= '</tr>';
+ // konec naslovne vrstice
+
+ $_answersOther = array();
+ $_grids_count = count($spremenljivka['grids']);
+ if ($_grids_count > 0) {
+ # naslovna vrstica
+ $_row = $spremenljivka['grids'][0];
+ $output .= '<tr>';
+ $output .= '<td></td>';
+ $output .= '<td></td>';
+
+ if (count($_row['variables']) > 0 )
+ foreach ($_row['variables'] AS $rid => $_col ){
+ $_sequence = $_col['sequence']; # id kolone z podatki
+ if ($_col['other'] != true) {
+ $output .= '<td align="center">';
+ // $output .= $_col['variable'];
+ $output .= $_col['naslov'];
+ $output .= '</td>';
+ } else {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ }
+ $output .= '</tr>';
+
+ $last = 0;
+ //anl_bck_desc_2 anl_bl anl_br anl_variabla_sub
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $_variables_count = count($grid['variables']);
+ $output .= '<tr>';
+ $output .= '<td align="center">';
+
+ $output .= $grid['variable'];
+ $output .= '</td>';
+ $output .= '<td>';
+ $output .= $grid['naslov'];
+ $output .= '</td>';
+
+ if ($_variables_count > 0) {
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if ($variable['other'] != true) {
+ # tabela z navedbami
+ $output .= '<td align="center">';
+ $output .= self::formatNumber(SurveyAnalysis::$_FREQUENCYS[$_sequence]['average'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'');
+ $output .= '</td>';
+ }
+ }
+
+ }
+ $output .= '</tr>';
+ }
+ }
+ $output .= '</table>';
+ }
+
+ /** IzriÅ¡e multi number odgovore. v NavpiÄni obliki (podobno kot opisne)
+ *
+ * @param unknown_type $spid
+ */
+ function sumMultiNumberVertical($spid,$_from) {
+ global $lang;
+ global $output;
+
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ # dodamo opcijo kje izrisujemo legendo
+ # Äe je besedilo * in je samo ena kategorija je inline legenda false
+ $inline_legenda = (SurveyAnalysis::$_HEADERS[$spid]['cnt_all'] == 1 || in_array($spremenljivka['tip'],array(1,8) ) ) ? false: true;
+ $options=array('inline_legenda' => $inline_legenda, 'isTextAnswer' => false, 'isOtherAnswer' => false);
+
+ # ali izpisujemo enoto:
+ $show_enota = true;
+ if ((int)$spremenljivka['enota'] == 0 && SurveyAnalysis::$_HEADERS[$spid]['cnt_all'] == 1) {
+ $show_enota = false;
+ }
+
+ # ugotovimo koliko imamo kolon
+ if (count($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $_clmn_cnt[$gid] = $grid['cnt_vars']-$grid['cnt_other'];
+ if (count($grid['variables']) > 0)
+ foreach ($grid['variables'] AS $vid => $variable) {
+ $_sequence = $variable['sequence'];
+ $_approp_cnt[$gid] = max($_approp_cnt[$gid], SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt']);
+
+ # za povpreÄje
+ $sum_xi_fi=0;
+ $N = 0;
+ $div=0;
+ $min = null;
+ $max = null;
+
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']) > 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'] AS $xi => $_validFreq) {
+
+ # popravimo morebitne . in -
+ $fnkey = (float)$xi;
+
+ if (is_numeric($xi) && is_numeric($fnkey) && trim($fnkey) != '') {
+ $fi = $_validFreq['cnt'];
+ $sum_xi_fi += $xi * $fi ;
+ $N += $fi;
+
+ $min = $min != null ? min($min,$fnkey) : $fnkey;
+ $max = $max != null ? max($max,$fnkey) : $fnkey;
+ }
+ }
+ }
+ # povprešje
+ $avg = ($N > 0) ? $sum_xi_fi / $N : 0;
+
+ SurveyAnalysis::$_FREQUENCYS[$_sequence]['validAvg'] = $avg;
+ SurveyAnalysis::$_FREQUENCYS[$_sequence]['validMin'] = $min;
+ SurveyAnalysis::$_FREQUENCYS[$_sequence]['validMax'] = $max;
+
+ #standardna diviacija
+ $div = 0;
+ $sum_pow_xi_fi_avg = 0;
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']) > 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'] AS $xi => $_validFreq) {
+ $fi = $_validFreq['cnt'];
+ $sum_pow_xi_fi_avg += pow(($xi - $avg),2) * $fi;
+ }
+ }
+ SurveyAnalysis::$_FREQUENCYS[$_sequence]['validDiv'] = (($N -1) > 0) ? sqrt($sum_pow_xi_fi_avg / ($N -1)) : 0;
+
+ #doloÄimo Å¡e polja drugo za kasnejÅ¡i prikaz
+ if ($variable['other'] == true) {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ }
+ }
+ # tekst vprašanja
+ $output .= '<table border="1">';
+ # naslovna vrstica
+ $output .= '<tr>';
+ #variabla
+ $output .= '<td>';
+ $output .= '<b>'.$spremenljivka['variable'].'</b>';
+ $output .= '</td>';
+ #odgovori
+ $output .= '<td colspan="7"><span><b>'.$spremenljivka['naslov'].'</b></span>';
+
+ $output .= '</td>';
+ $output .= '</tr>';
+
+ $output .= '<tr>';
+ #variabla
+ $output .= '<td>';
+ $output .= '</td>';
+
+
+ if ($show_enota) {
+ $output .= '<td>';
+ if ($spremenljivka['tip'] == 20 || $spremenljivka['tip'] == 7) {
+ $output .= $lang['srv_analiza_opisne_subquestion'];
+ } else {
+ $output .= $lang['srv_analiza_opisne_variable_text'];
+ }
+ $output .='</td>';
+ } else { # Äe mamo number brez labele izrisujemo drugaÄe
+ $output .= '<td>';
+ $output .='</td>';
+ }
+
+ $output .= '<td align="center">' . $lang['srv_analiza_opisne_m'] . '</td>';
+ $output .= '<td align="center">' . $lang['srv_analiza_num_units'] . '</td>';
+ $output .= '<td align="center">' . $lang['srv_analiza_opisne_povprecje'] . '</td>';
+ $output .= '<td align="center">' . $lang['srv_analiza_opisne_odklon'].'</td>';
+ $output .= '<td align="center">' . $lang['srv_analiza_opisne_min'] . '</td>';
+ $output .= '<td align="center">' . $lang['srv_analiza_opisne_max'] . '</td>';
+ $output .= '</tr>';
+
+ $_answersOther = array();
+ $_grupa_cnt = 0;
+ if (count($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ if (count($spremenljivka['grids']) > 1 && $_grupa_cnt !== 0 && $spremenljivka['tip'] != 6) {
+ $grid['new_grid'] = true;
+ }
+
+ $_grupa_cnt ++;
+ if (count($grid['variables']) > 0) {
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if ($variable['other'] != true) {
+ $_sequence = $variable['sequence'];
+
+ $cssBrdr = (int)$grid['new_grid'] == 1 ? ' anl_double_bt' : ' anl_bt_dot';
+
+ $output .= '<tr>';
+ if (!$show_enota && $spremenljivka['tip'] == 7) {
+ $output .= '<td>' ;
+ } else {
+ $output .= '<td>' ;
+ }
+ $output .= $_css_double_line;
+ # za number (7) ne prikazujemo variable
+ if ($spremenljivka['tip'] != 7 ) {
+ $output .= $variable['variable'];
+ }
+ $output .= '</td>' ;
+ if (!$show_enota && $spremenljivka['tip'] == 7) {
+ $output .= '<td>' ;
+ } else {
+ $output .= '<td>' ;
+ }
+ if ($show_enota) {
+ $output .= (count($grid['variables']) > 1 && $spremenljivka['tip'] == 20 ? $grid['naslov'] . ' - ' : '' ).$variable['naslov'];
+ }
+ $output .= '</td>' ;
+
+ $output .= '<td>';
+ $output .= (int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'];
+ $output .= '</td>';
+ $output .= '<td>';
+ $output .= (int)$_approp_cnt[$gid];
+ $output .= '</td>';
+ $output .= '<td>';
+ $output .= self::formatNumber(SurveyAnalysis::$_FREQUENCYS[$_sequence]['validAvg'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'');
+ $output .= '</td>';
+ $output .= '<td>';
+ $output .= self::formatNumber(SurveyAnalysis::$_FREQUENCYS[$_sequence]['validDiv'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_DEVIATION'),'');
+ $output .= '</td>';
+ $output .= '<td>';
+ $output .= (int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['validMin'];
+ $output .= '<td>';
+ $output .= (int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['validMax'];;
+ $output .= '</td>';
+
+ $output .= '</tr>';
+ } else {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ $grid['new_grid'] = false;
+ }
+
+ }
+ }
+ $output .= '</table>';
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ self::outputOtherAnswers($oAnswers);
+ }
+ }
+ }
+
+ /** Izriše number odgovore v vertikalni obliki
+ *
+ * @param unknown_type $spid
+ */
+ function sumNumberVertical($spid,$_from) {
+ global $lang;
+ global $output;
+
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+ # dodamo opcijo kje izrisujemo legendo
+ # Äe je besedilo * in je samo ena kategorija je inline legenda false
+ $inline_legenda = (SurveyAnalysis::$_HEADERS[$spid]['cnt_all'] == 1 || in_array($spremenljivka['tip'],array(1,8) ) ) ? false: true;
+ $options=array('inline_legenda' => $inline_legenda, 'isTextAnswer' => false, 'isOtherAnswer' => false);
+
+ # ali izpisujemo enoto:
+ $show_enota = true;
+ if (((int)$spremenljivka['enota'] == 0 && SurveyAnalysis::$_HEADERS[$spid]['cnt_all'] == 1) || $spremenljivka['tip'] == 22) {
+ $show_enota = false;
+ }
+ $sum_avg = 0;
+ # ugotovimo koliko imamo kolon
+ if (count($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $_clmn_cnt[$gid] = $grid['cnt_vars']-$grid['cnt_other'];
+ if (count($grid['variables']) > 0)
+ foreach ($grid['variables'] AS $vid => $variable) {
+ $_sequence = $variable['sequence'];
+ $_approp_cnt[$gid] = max($_approp_cnt[$gid], SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt']);
+
+ # za povpreÄje
+ $sum_xi_fi=0;
+ $N = 0;
+ $div=0;
+
+ $min = null;
+ $max = null;
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']) > 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'] AS $xi => $_validFreq) {
+
+ # popravimo morebitne . in -
+ $fnkey = (float)$xi;
+
+ if (is_numeric($xi) && is_numeric($fnkey) && trim($fnkey) != '') {
+ $fi = $_validFreq['cnt'];
+ $sum_xi_fi += $xi * $fi ;
+ $N += $fi;
+ $min = $min != null ? min($min,$fnkey) : $fnkey;
+ $max = $max != null ? max($max,$fnkey) : $fnkey;
+ }
+ }
+ }
+
+ #povpreÄje
+ $avg = ($N > 0) ? $sum_xi_fi / $N : 0;
+ $sum_avg += $avg;
+ SurveyAnalysis::$_FREQUENCYS[$_sequence]['validAvg'] = $avg;
+ SurveyAnalysis::$_FREQUENCYS[$_sequence]['validMin'] = $min;
+ SurveyAnalysis::$_FREQUENCYS[$_sequence]['validMax'] = $max;
+
+ #standardna diviacija
+ $div = 0;
+ $sum_pow_xi_fi_avg = 0;
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']) > 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'] AS $xi => $_validFreq) {
+ $fi = $_validFreq['cnt'];
+ $sum_pow_xi_fi_avg += pow(($xi - $avg),2) * $fi;
+ }
+ }
+ SurveyAnalysis::$_FREQUENCYS[$_sequence]['validDiv'] = (($N -1) > 0) ? sqrt($sum_pow_xi_fi_avg / ($N -1)) : 0;
+
+ #doloÄimo Å¡e polja drugo za kasnejÅ¡i prikaz
+ if ($variable['other'] == true) {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ }
+ }
+
+
+ # tekst vprašanja
+ $output .= '<table border="1">';
+ # naslovna vrstica
+ $output .= '<tr>';
+ #variabla
+ $output .= '<td align="center">';
+ $output .= '<b>'.$spremenljivka['variable'].'</b>';
+ $output .= '</td>';
+ $num_cols = 7 + ($spremenljivka['tip'] == 18 ? 1 : 0);
+ #odgovori
+ $output .= '<td colspan="'. $num_cols .'"><b>'.$spremenljivka['naslov'].'</b>';
+
+ $output .= '</td>';
+ $output .= '</tr>';
+
+ $output .= '<tr>';
+ #variabla
+ $output .= '<td>';
+ $output .= '</td>';
+
+ if ($show_enota == true) {
+ $output .= '<td align="center">';
+ if ($spremenljivka['tip'] == 20 || $spremenljivka['tip'] == 7) {
+ $output .= $lang['srv_analiza_opisne_subquestion'];
+ } else {
+ $output .= $lang['srv_analiza_opisne_variable_text'];
+ }
+ $output .='</td>';
+ } else { # Äe mamo number brez labele izrisujemo drugaÄe
+ $output .= '<td>';
+ $output .='</td>';
+ }
+
+ $output .= '<td align="center">' . $lang['srv_analiza_opisne_m'] . '</td>';
+ $output .= '<td align="center">' . $lang['srv_analiza_num_units'] . '</td>';
+ $output .= '<td align="center">' . $lang['srv_analiza_opisne_povprecje'] . '</td>';
+ if ($spremenljivka['tip'] == 18) {
+ $output .= '<td align="center">%</td>';
+ }
+ $output .= '<td align="center">' . $lang['srv_analiza_opisne_odklon'].'</td>';
+ $output .= '<td align="center">' . $lang['srv_analiza_opisne_min'] . '</td>';
+ $output .= '<td align="center">' . $lang['srv_analiza_opisne_max'] . '</td>';
+ $output .= '</tr>';
+
+ $_answersOther = array();
+ $_grupa_cnt = 0;
+ if (count($spremenljivka['grids']) > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ if (count($spremenljivka['grids']) > 1 && $_grupa_cnt !== 0 && $spremenljivka['tip'] != 6) {
+ $grid['new_grid'] = true;
+ }
+
+ $_grupa_cnt ++;
+ if (count($grid['variables']) > 0) {
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if ($variable['other'] != true) {
+ $_sequence = $variable['sequence'];
+
+ $cssBrdr = (int)$grid['new_grid'] == 1 ? ' anl_double_bt' : ' anl_bt_dot';
+
+ $output .= '<tr>';
+
+ $output .= '<td align="center">' ;
+
+ $output .= $_css_double_line;
+ # za number (7) ne prikazujemo variable
+ if ($spremenljivka['tip'] != 7 || ($show_enota == true && $spremenljivka['tip'] == 7 )) {
+ if ($variable['variable'] == $spremenljivka['variable']) {
+ $output .= $variable['variable'].'_1';
+ } else {
+ $output .= $variable['variable'];
+ }
+ }
+ $output .= '</td>' ;
+ $output .= '<td>' ;
+
+ if ($show_enota) {
+ $output .= (count($grid['variables']) > 1 && $spremenljivka['tip'] == 20 ? $grid['naslov'] . ' - ' : '' ).$variable['naslov'];
+ }
+ $output .= '</td>' ;
+
+ $output .= '<td align="center">';
+ $output .= (int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'];
+ $output .= '</td>';
+ $output .= '<td align="center">';
+ $output .= (int)$_approp_cnt[$gid];
+ $output .= '</td>';
+ $output .= '<td align="center">';
+ $output .= self::formatNumber(SurveyAnalysis::$_FREQUENCYS[$_sequence]['validAvg'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_AVERAGE'),'');
+ $output .= '</td>';
+ if ($spremenljivka['tip'] == 18) {
+ $_percent = ($sum_avg > 0 ) ? 100 * SurveyAnalysis::$_FREQUENCYS[$_sequence]['validAvg'] / $sum_avg : 0;
+ $output .= '<td align="center">';
+ $output .= self::formatNumber($_percent,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_DEVIATION'),'%');
+ $output .= '</td>';
+ }
+ $output .= '<td align="center">';
+ $output .= self::formatNumber(SurveyAnalysis::$_FREQUENCYS[$_sequence]['validDiv'],SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_DEVIATION'),'');
+ $output .= '</td>';
+ $output .= '<td align="center">';
+ $output .= (int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['validMin'];
+ $output .= '<td align="center">';
+ $output .= (int)SurveyAnalysis::$_FREQUENCYS[$_sequence]['validMax'];;
+ $output .= '</td>';
+
+ $output .= '</tr>';
+ } else {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ $grid['new_grid'] = false;
+ }
+
+ }
+ }
+ if ($spremenljivka['tip'] == 18) {
+ $css_back = 'anl_bck_text_1 anl_bt';
+ $output .= '<tr>';
+ $output .= '<td>';
+ $output .= $lang['srv_anl_suma1'];
+ $output .= '</td>';
+ $output .= '<td>&nbsp;</td>';
+
+ $output .= '<td >&nbsp;</td>';
+ $output .= '<td>&nbsp;</td>';
+ $output .= '<td>';
+ $output .= self::formatNumber($sum_avg,SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_DEVIATION'),'');
+ $output .= '</td>';
+ # skupna suma
+ $output .= '<td>100%</td>';
+ $output .= '<td></td>';
+ $output .= '<td></td>';
+ $output .= '<td></td>';
+ $output .= '</tr>';
+ }
+ $output .= '</table>';
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ self::outputOtherAnswers($oAnswers);
+ }
+ }
+ }
+
+ /** Izriše nagovor
+ *
+ */
+ function sumNagovor($spid,$_from) {
+ global $lang;
+ global $output;
+
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+ $_tip = SurveyAnalysis::getSpremenljivkaLegenda($spremenljivka,'izrazanje');
+ $_oblika = SurveyAnalysis::getSpremenljivkaLegenda($spremenljivka,'skala');
+
+ $output .= '<table border="1">';
+ $output .= '<tr>';
+ $output .= '<td>';
+ $output .= '<b>'.$spremenljivka['variable'].'</b>';
+ $output .= '</td>';
+ $output .= '<td><b>'.$spremenljivka['naslov'].'</b>';
+
+ $output .= '</td>';
+ $output .= '</tr>';
+ $output .= '</table>';
+
+ }
+
+ /** Izriše tekstovne odgovore kot tabelo z navedbami
+ *
+ * @param unknown_type $spid
+ */
+ function sumMultiText($spid,$_from) {
+ global $lang;
+ global $output;
+
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ # dodamo opcijo kje izrisujemo legendo
+ # Äe je besedilo * in je samo ena kategorija je inline legenda false
+
+ $_cols = $spremenljivka['cnt_all'] / $spremenljivka['cnt_grids'];
+
+ # koliko zapisov prikažemo naenkrat
+ $maxAnswer = (SurveyDataSettingProfiles :: getSetting('numOpenAnswers') > 0) ? SurveyDataSettingProfiles :: getSetting('numOpenAnswers') : 30;
+
+ $_answers = SurveyAnalysis::getAnswers($spremenljivka,$maxAnswer);
+
+ $_all_valid_answers_cnt = $_answers['validCnt'];
+ $_valid_answers = $_answers['valid'];
+
+ # tekst vprašanja
+ $output .= '<table border="1">';
+ # naslovna vrstica
+ $output .= '<tr>';
+ #variabla
+ $output .= '<td align="center">';
+ $output .= '<b>'.$spremenljivka['variable'].'</b>';
+ $output .= '</td>';
+ #odgovori
+
+ $output .= '<td colspan="'. (1 + $_cols) .'"><b>'.$spremenljivka['naslov'].'</b>';
+
+ $output .= '</td>';
+ $output .= '</tr>';
+ $output .= '<tr>';
+ #variabla
+ $output .= '<td>';
+ $output .= '</td>';
+ #odgovori
+
+ $output .= '<td align="center">'.$lang['srv_analiza_opisne_subquestion'] . '</td>';
+
+ $output .= '<td align="center" colspan="'.($_cols).'">'. $lang['srv_analiza_opisne_arguments'] .'</td>';
+
+ $output .= '</tr>';
+ // konec naslovne vrstice
+
+ $_answersOther = array();
+ $_grids_count = count($spremenljivka['grids']);
+ if ($_grids_count > 0) {
+ # naslovna vrstica
+ $_row = $spremenljivka['grids'][0];
+ $output .= '<tr>';
+ $output .= '<td></td>';
+ $output .= '<td></td>';
+
+ if (count($_row['variables'])>0)
+ foreach ($_row['variables'] AS $rid => $_col ){
+ $_sequence = $_col['sequence']; # id kolone z podatki
+ if ($_col['other'] != true) {
+ $output .= '<td align="center">';
+ // $output .= $_col['variable'];
+ $output .= $_col['naslov'];
+ $output .= '</td>';
+ } else {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ }
+ $output .= '</tr>';
+
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $_variables_count = count($grid['variables']);
+ $output .= '<tr>';
+ $output .= '<td align="center" valign="top">';
+
+ $output .= $grid['variable'];
+ $output .= '</td>';
+ $output .= '<td valign="top">';
+ $output .= $grid['naslov'];
+ $output .= '</td>';
+
+ if ($_variables_count > 0) {
+ # preštejemo max vrstic na grupo
+ $_max_i = 0;
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ $_max_i = max($_max_i,min($num_show_records,SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt']));
+ }
+
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if ($variable['other'] != true) {
+ # tabela z navedbami
+ $output .= '<td>';
+ $output .= '<table>';
+ #$_valid_cnt = count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']);
+ $index=0;
+ if (count($_valid_answers) > 0) {
+ foreach ($_valid_answers AS $answer) {
+
+ $index++;
+ $_ans = $answer[$_sequence];
+ $output .= '<tr>';
+ $output .= '<td align="center">';
+ if ($_ans != null && $_ans != '') {
+ $output .= $_ans;
+ }
+ $output .= '</td>';
+ $output .= '</tr>';
+ }
+ }
+
+ $output .= '</table>';
+
+ $output .= '</td>';
+ }
+ }
+ }
+ $output .= '</tr>';
+ }
+ }
+ $output .= '</table>';
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ self::outputOtherAnswers($oAnswers);
+ }
+ }
+ }
+
+ /** Izriše lookacijske odgovore kot tabelo z navedbami
+ *
+ * @param unknown_type $spid
+ */
+ function sumLokacija($spid,$_from) {
+ global $lang;
+ global $output;
+
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+ $enota = $spremenljivka['enota'];
+
+ # dodamo opcijo kje izrisujemo legendo
+ # Äe je besedilo * in je samo ena kategorija je inline legenda false
+
+ $_cols = $spremenljivka['cnt_all'] / $spremenljivka['cnt_grids'];
+
+ # koliko zapisov prikažemo naenkrat
+ $maxAnswer = (SurveyDataSettingProfiles :: getSetting('numOpenAnswers') > 0) ? SurveyDataSettingProfiles :: getSetting('numOpenAnswers') : 30;
+
+ $_answers = SurveyAnalysis::getAnswers($spremenljivka,$maxAnswer);
+
+ $_all_valid_answers_cnt = $_answers['validCnt'];
+ $_valid_answers = $_answers['valid'];
+
+ # tekst vprašanja
+ $output .= '<table border="1">';
+ # naslovna vrstica
+ $output .= '<tr>';
+ #variabla
+ $output .= '<td align="center">';
+ $output .= '<b>'.$spremenljivka['variable'].'</b>';
+ $output .= '</td>';
+ #odgovori
+
+ $output .= '<td colspan="'. ($_cols) .'"><b>'.$spremenljivka['naslov'].'</b>';
+
+ $output .= '</td>';
+ $output .= '</tr>';
+ // konec naslovne vrstice
+
+ $_answersOther = array();
+ $_grids_count = count($spremenljivka['grids']);
+ if ($_grids_count > 0) {
+ # naslovna vrstica
+ $_row = $spremenljivka['grids'][0];
+ $output .= '<tr>';
+ $output .= '<td></td>';
+
+ if (count($_row['variables'])>0)
+ foreach ($_row['variables'] AS $rid => $_col ){
+ $_sequence = $_col['sequence']; # id kolone z podatki
+ if ($_col['other'] != true) {
+ $output .= '<td align="center">';
+ $output .= $_col['naslov'];
+ $output .= '</td>';
+ } else {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ }
+ $output .= '</tr>';
+
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $_variables_count = count($grid['variables']);
+ $output .= '<tr>';
+ $output .= '<td>';
+ $output .= '</td>';
+
+ if ($_variables_count > 0) {
+ # preštejemo max vrstic na grupo
+ $_max_i = 0;
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ $_max_i = max($_max_i,min($num_show_records,SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt']));
+ }
+
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+ if ($variable['other'] != true) {
+ # tabela z navedbami
+ $output .= '<td>';
+ $output .= '<table '. (($enota != 3) ? 'border="1"' : '') .'>';
+ #$_valid_cnt = count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']);
+ $index=0;
+ if (count($_valid_answers) > 0) {
+ foreach ($_valid_answers AS $answer) {
+
+ $index++;
+ $_ans = $answer[$_sequence];
+ $output .= '<tr>';
+ $output .= '<td align="center">';
+ if ($_ans != null && $_ans != '') {
+ $_ans = html_entity_decode($_ans, ENT_NOQUOTES, 'UTF-8');
+ $_ans = str_replace(array("&scaron;","&#353;","&#269;"),array("Å¡","Å¡","Ä"),$_ans);
+ $output .= strip_tags($_ans, "<br>");
+ }
+ $output .= '</td>';
+ $output .= '</tr>';
+ }
+ }
+
+ $output .= '</table>';
+
+ $output .= '</td>';
+ }
+ }
+ }
+ $output .= '</tr>';
+ }
+ }
+ $output .= '</table>';
+ }
+
+ /** Izriše tekstovne odgovore v vertikalni obliki
+ *
+ * @param unknown_type $spid
+ */
+ function sumTextVertical($spid,$_from) {
+ global $lang;
+ global $output;
+
+ $spremenljivka = SurveyAnalysis::$_HEADERS[$spid];
+
+ # dodamo opcijo kje izrisujemo legendo
+ # Äe je besedilo * in je samo ena kategorija je inline legenda false
+ $inline_legenda = (SurveyAnalysis::$_HEADERS[$spid]['cnt_all'] == 1 || in_array($spremenljivka['tip'],array(1,8) ) ) ? false: true;
+
+ $options=array('inline_legenda' => $inline_legenda, 'isTextAnswer' => false, 'isOtherAnswer' => false, 'num_show_records' => $num_show_records);
+
+ # tekst vprašanja
+ $output .= '<table border="1">';
+ # naslovna vrstica
+ $output .= '<tr>';
+ #variabla
+ $output .= '<td align="center">';
+ $output .= '<b>'.$spremenljivka['variable'].'</b>';
+ $output .= '</td>';
+ #odgovori
+ $show_valid_percent = (SurveyAnalysis::$_HEADERS[$spid]['show_valid_percent'] == true) ? 1 : 0;
+ $output .= '<td colspan="'. (4 + $show_valid_percent) .'"><b>'.$spremenljivka['naslov'].'</b>';
+
+ $output .= '</td>';
+ $output .= '</tr>';
+ $output .= '<tr>';
+ #variabla
+ $output .= '<td>';
+ $output .= '</td>';
+ #odgovori
+
+ $output .= '<td align="center">'.$lang['srv_analiza_frekvence_titleAnswers'] . '</td>';
+
+ $output .= '<td align="center">'. $lang['srv_analiza_frekvence_titleFrekvenca'] .'</td>';
+ $output .= '<td align="center">'. $lang['srv_analiza_frekvence_titleOdstotek'] .'</td>';
+ if (SurveyAnalysis::$_HEADERS[$spid]['show_valid_percent'] == true) {
+ $output .= '<td align="center">'. $lang['srv_analiza_frekvence_titleVeljavni'] .'</td>';
+ }
+ $output .= '<td align="center">'. $lang['srv_analiza_frekvence_titleKumulativa'] .'</td>';
+ $output .= '</tr>';
+ // konec naslovne vrstice
+ $_answersOther = array();
+ $_grids_count = count($spremenljivka['grids']);
+
+
+ if ($_grids_count > 0)
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $_variables_count = count($grid['variables']);
+ if ($_variables_count > 0)
+ foreach ($grid['variables'] AS $vid => $variable ){
+ $_sequence = $variable['sequence']; # id kolone z podatki
+
+ if ($variable['other'] != true) {
+ # dodamo dodatne vrstice z labelami grida
+ if ($_variables_count > 1) {
+ SurveyAnalysis::outputGridLabelVertical($gid,$grid,$vid,$variable,$spid,$options);
+ }
+
+ $maxAnswer = (SurveyDataSettingProfiles :: getSetting('numOpenAnswers') > 0) ? SurveyDataSettingProfiles :: getSetting('numOpenAnswers') : 30;
+ $counter = 0;
+ $_kumulativa = 0;
+ //SurveyAnalysis::$_FREQUENCYS[$_sequence]
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'])> 0 ) {
+
+ $_valid_answers = SurveyAnalysis :: sortTextValidAnswers($spid,$variable,SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid']);
+
+ foreach ($_valid_answers AS $vkey => $vAnswer) {
+ if ($counter < $maxAnswer) {
+ if ($vAnswer['cnt'] > 0 || true) { # izpisujemo samo tiste ki nisno 0
+ $options['isTextAnswer']=true;
+ $counter = self::outputValidAnswerVertical($counter,$vkey,$vAnswer,$_sequence,$spid,$_kumulativa,$options);
+ }
+ }
+ }
+ # izpišemo sumo veljavnih
+ $counter = self::outputSumaValidAnswerVertical($counter,$_sequence,$spid,$options);
+ }
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'] AS $ikey => $iAnswer) {
+ if ($iAnswer['cnt'] > 0 ) { # izpisujemo samo tiste ki nisno 0
+ $counter = self::outputInvalidAnswerVertical($counter,$ikey,$iAnswer,$_sequence,$spid,$options);
+ }
+ }
+ # izpišemo sumo veljavnih
+ $counter = self::outputSumaInvalidAnswerVertical($counter,$_sequence,$spid,$options);
+ }
+ #izpišemo še skupno sumo
+ $counter = self::outputSumaVertical($counter,$_sequence,$spid,$options);
+ } else {
+ $_answersOther[] = array('spid'=>$spid,'gid'=>$gid,'vid'=>$vid,'sequence'=>$_sequence);
+ }
+ }
+ }
+
+ $output .= '</table>';
+
+ # izpišemo še tekstovne odgovore za polja drugo
+ if (count($_answersOther) > 0 && SurveyAnalysis::$_FILTRED_OTHER) {
+ foreach ($_answersOther AS $oAnswers) {
+ self::outputOtherAnswers($oAnswers);
+ }
+ }
+ }
+
+
+ function outputValidAnswerVertical($counter,$vkey,$vAnswer,$_sequence,$spid,&$_kumulativa,$_options=array()) {
+ global $lang;
+ global $output;
+
+ # opcije
+
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ );
+
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+
+ $_valid = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] > 0 ) ? 100*$vAnswer['cnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] : 0;
+ $_percent = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] > 0 ) ? 100*$vAnswer['cnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] : 0;
+ $_kumulativa += $_valid;
+
+ $output .= '<tr>';
+ $output .= '<td></td>';
+ $output .= '<td align="left">'.$vkey;
+ $output .= (($options['isTextAnswer'] == false && (string)$vkey != $vAnswer['text']) ? ' ('.$vAnswer['text'] .')' : '');
+ $output .= '</td>';
+
+ $output .= '<td align="center">';
+ $output .= (int)$vAnswer['cnt'];
+ $output .= '</td>';
+ $output .= '<td align="center">';
+ $output .= self::formatNumber($_percent, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $output .= '</td>';
+ if (SurveyAnalysis::$_HEADERS[$spid]['show_valid_percent']) {
+ $output .= '<td align="center">';
+ $output .= self::formatNumber($_valid, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $output .= '</td>';
+ }
+ $output .= '<td align="center">';
+ $output .= self::formatNumber($_kumulativa, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+
+ $output .= '</td align="center">';
+ $output .= '</tr>';
+ $counter++;
+ return $counter;
+ }
+
+ function outputSumaValidAnswerVertical($counter,$_sequence,$spid,$_options=array()) {
+ global $lang;
+ global $output;
+
+ # opcije
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+
+ $output .= '<tr>';
+ $output .= '<td align="center">'.$lang['srv_anl_valid'].'</td>';
+ $output .= '<td>'.$lang['srv_anl_suma1'].'</td>';
+
+ $output .= '<td align="center">';
+
+ $output .= SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] > 0 ? SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] : 0;
+ $output .= '</td>';
+ $_percent = SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] > 0
+ ? 100 * SurveyAnalysis::$_FREQUENCYS[$_sequence]['validCnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt']
+ : 0;
+ $output .= '<td align="center">' . self::formatNumber($_percent, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%') . '</td>';
+ if (SurveyAnalysis::$_HEADERS[$spid]['show_valid_percent'] == true) {
+ $output .= '<td align="center">' . self::formatNumber(100, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%') . '</td>';
+ }
+ $output .= '<td align="center"></td>';
+ $output .= '</tr>';
+// $counter++;
+ return $counter;
+
+ }
+
+ function outputInvalidAnswerVertical($counter,$vkey,$vAnswer,$_sequence,$spid,$_options=array()) {
+ global $lang;
+ global $output;
+
+ # opcije
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+
+ $_percent = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] > 0 ) ? 100*$vAnswer['cnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] : 0;
+ $_invalid = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'] > 0 ) ? 100*$vAnswer['cnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'] : 0;
+
+ $_Z_MV = ((int)SurveyAnalysis::$missingProfileData['display_mv_type'] === 2) ? TRUE : FALSE;
+ if($_Z_MV){
+ $output .= '<tr>';
+ $output .= '<td></td>';
+ $output .= '<td>';
+ $output .= $vkey . ' (' . $vAnswer['text'].')';
+ //$output .= self::formatNumber($_invalid, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ //$output .= $vAnswer['cnt'];
+ $output .= '</td>';
+
+ $output .= '<td align="center">';
+ $output .= (int)$vAnswer['cnt'];
+ $output .= '</td>';
+ $output .= '<td align="center">';
+ $output .= self::formatNumber($_percent, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $output .= '</td>';
+ if (SurveyAnalysis::$_HEADERS[$spid]['show_valid_percent']) {
+ $output .= '<td align="center">';
+ $output .= '</td>';
+ }
+ $output .= '<td align="center">';
+ $output .= '</td>';
+ $output .= '</tr>';
+ }
+
+ $counter++;
+ return $counter;
+ }
+
+ function outputSumaInvalidAnswerVertical($counter,$_sequence,$spid,$_options = array()) {
+ global $lang;
+ global $output;
+
+ # opcije
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+
+ $_percent = (SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] > 0 ) ? 100*SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'] / SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] : 0;
+
+ $_brez_MV = ((int)SurveyAnalysis::$missingProfileData['display_mv_type'] === 0) ? TRUE : FALSE;
+
+ $_sufix = (SurveyAnalysis::$podstran == M_ANALYSIS_SUMMARY_NEW ? '_NEW' : '');
+ # da deluje razpiranje manjkajoÄih tudi kadar imamo skupine
+ if (isset(SurveyAnalysis::$_CURRENT_LOOP['cnt'])) {
+ $_sufix = '_loop'.SurveyAnalysis::$_CURRENT_LOOP['cnt'].$_sufix;
+ }
+
+ if(!$_brez_MV){
+ $output .= '<tr>';
+
+ $output .= '<td align="center">'.$lang['srv_anl_missing'].'</td>';
+
+ $output .= '<td>';
+ $output .= $lang['srv_analiza_manjkajocevrednosti'];
+ //$output .= '100.0%';
+ //$output .= SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'];
+ $output .= '</td>';
+
+ $output .= '<td align="center">';
+ $answer['cnt'] = SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'] > 0 ? SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalidCnt'] : 0;
+ $output .= (int)$answer['cnt'];
+ $output .= '</td>';
+ $output .= '<td align="center">';
+ $output .= self::formatNumber($_percent, SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%');
+ $output .= '</td>';
+ if (SurveyAnalysis::$_HEADERS[$spid]['show_valid_percent']) {
+ $output .= '<td align="center">';
+ $output .= '</td>';
+ }
+ $output .= '<td align="center"></td>';
+ $output .= '</tr>';
+ }
+
+ $counter++;
+ return $counter;
+ }
+
+ function outputSumaVertical($counter,$_sequence,$spid, $_options = array()) {
+ global $lang;
+ global $output;
+
+ # opcije
+
+ $options = array( 'isTextAnswer' => false, # ali je tekstovni odgovor
+ 'isOtherAnswer' => false, # ali je odgovor Drugo
+ 'inline_legenda' => true, # ali je legenda inline ali v headerju
+ );
+ foreach ($_options as $_oKey => $_option) {
+ $options[$_oKey] = $_option;
+ }
+
+ $_brez_MV = ((int)SurveyAnalysis::$missingProfileData['display_mv_type'] === 0) ? TRUE : FALSE;
+
+ if(!$_brez_MV){
+ $output .= '<tr>';
+ //$output .= '<td>&nbsp;</td>'; // $lang['srv_anl_appropriate']
+ //$output .= '<td>'.$lang['srv_anl_suma2'].'</td>';
+ $output .= '<td align="center">'.$lang['srv_anl_suma2'].'</td>';
+ $output .= '<td></td>';
+
+ $output .= '<td align="center">' . (SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] ? SurveyAnalysis::$_FREQUENCYS[$_sequence]['allCnt'] : 0) . '</td>';
+ $output .= '<td align="center">' . SurveyAnalysis::formatNumber('100', SurveyDataSettingProfiles :: getSetting('NUM_DIGIT_PERCENT'), '%') . '</td>';
+ if (SurveyAnalysis::$_HEADERS[$spid]['show_valid_percent']) {
+ $output .= '<td align="center"></td>';
+ }
+ $output .= '<td align="center"></td>';
+ $output .= '</tr>';
+ }
+ }
+
+ /** izpišemo tabelo z tekstovnimi odgovori drugo
+ *
+ * @param $skey
+ * @param $oAnswers
+ * @param $spid
+ */
+ function outputOtherAnswers($oAnswers) {
+ global $lang;
+ global $output;
+
+ $output .= '<table border="0"><tr><td></td></tr></table>';
+
+ $spid = $oAnswers['spid'];
+ $_variable = SurveyAnalysis::$_HEADERS[$spid]['grids'][$oAnswers['gid']]['variables'][$oAnswers['vid']];
+ $_sequence = $_variable['sequence'];
+ $_frekvence = SurveyAnalysis::$_FREQUENCYS[$_variable['sequence']];
+
+ $output .= '<table border="1">';
+ $output .= '<tr>';
+ $output .= '<td><b>'. $_variable['variable'] . '</b></td>';
+ $output .= '<td colspan="5">';
+ $output .= '<span><b>'.SurveyAnalysis::$_HEADERS[$oAnswers['spid']]['variable'].' ('.$_variable['naslov'].' )</b></span>';
+
+ $output .= '</td>';
+ $output .= '</tr>';
+
+ $output .= '<tr>';
+ $output .= '<td>';
+ $output .= '</td>';
+
+ $output .= '<td>'. $lang['srv_analiza_frekvence_titleAnswers'] .'</td>';
+
+ $output .= '<td>'. $lang['srv_analiza_frekvence_titleFrekvenca'] .'</td>';
+ $output .= '<td>'. $lang['srv_analiza_frekvence_titleOdstotek'] .'</td>';
+ $output .= '<td>'. $lang['srv_analiza_frekvence_titleVeljavni'] .'</td>';
+ $output .= '<td>'. $lang['srv_analiza_frekvence_titleKumulativa'] .'</td>';
+ $output .= '</tr>';
+ // konec naslovne vrstice
+
+ $counter = 1;
+ $_kumulativa = 0;
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['valid'] AS $vkey => $vAnswer) {
+ if ($vAnswer['cnt'] > 0 ) { # izpisujemo samo tiste ki nisno 0
+ $counter = self::outputValidAnswerVertical($counter,$vkey,$vAnswer,$_sequence,$spid,$_kumulativa,array('isOtherAnswer'=>true));
+ }
+ }
+ # izpišemo sumo veljavnih
+ $counter = self::outputSumaValidAnswerVertical($counter,$_sequence,$spid,array('isOtherAnswer'=>true));
+ }
+ if (count(SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'])> 0 ) {
+ foreach (SurveyAnalysis::$_FREQUENCYS[$_sequence]['invalid'] AS $ikey => $iAnswer) {
+ if ($iAnswer['cnt'] > 0 ) { # izpisujemo samo tiste ki nisno 0
+ $counter = self::outputInvalidAnswerVertical($counter,$ikey,$iAnswer,$_sequence,$spid,array('isOtherAnswer'=>true));
+ }
+ }
+ # izpišemo sumo veljavnih
+ $counter = self::outputSumaInvalidAnswerVertical($counter,$_sequence,$spid,array('isOtherAnswer'=>true));
+ }
+ #izpišemo še skupno sumo
+ $counter = self::outputSumaVertical($counter,$_sequence,$spid,array('isOtherAnswer'=>true));
+
+ $output .= '</table>';
+ }
+
+
+ function encodeText($text)
+ { // popravimo sumnike ce je potrebno
+
+ $stringIn = array("&#269;","&#353;","&#273;","&#263;","&#382;","&#268;","&#352;","&#272;","&#262;","&#381;","&nbsp;");
+ $stringOut = array("Ä","Å¡","Ä‘","ć","ž","ÄŒ","Å ","Ä","Ć","Ž"," ");
+
+ //$text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace($stringIn, $stringOut, $text);
+ return $text;
+ }
+
+ function enkaEncode($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ return strip_tags($text);
+ }
+
+ function formatNumber ($value, $digit = 0, $sufix = "") {
+ if ($value <> 0 && $value != null)
+ $result = round($value, $digit);
+ else
+ $result = "0";
+ //$result = number_format($result, $digit, '.', ',') . $sufix;
+ $result = number_format($result, $digit, ',', '') . $sufix;
+
+ // Preprecimo da bi se stevilo z decimalko pretvorilo v datum
+ //$result = '="'. $result.'"';
+
+ return $result;
+ }
+
+}
+
+?> \ No newline at end of file
diff --git a/admin/exportclases/class.xlsIzvozAnalizaTTest.php b/admin/exportclases/class.xlsIzvozAnalizaTTest.php
new file mode 100644
index 0000000..c0c59a8
--- /dev/null
+++ b/admin/exportclases/class.xlsIzvozAnalizaTTest.php
@@ -0,0 +1,286 @@
+<?php
+
+ global $site_path;
+
+ include_once('../../function.php');
+ include_once('../survey/definition.php');
+ include_once('../exportclases/class.xls.php');
+
+
+/** Class za generacijo xls-ja
+ *
+ */
+class XlsIzvozAnalizaTTest {
+
+ var $anketa; // trenutna anketa
+
+ private $headFileName = null; // pot do header fajla
+ private $dataFileName = null; // pot do data fajla
+ private $dataFileStatus = null; // status data datoteke
+
+ public $ttestClass = null; //ttest class
+
+ var $ttestData1;
+ var $ttestData2;
+
+ var $sessionData; // podatki ki so bili prej v sessionu - za nastavitve, ki se prenasajo v izvoze...
+
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null, $podstran = 'ttest')
+ {
+ global $site_path;
+ global $global_user_id;
+ global $output;
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) ){
+
+ $this->anketa['id'] = $anketa;
+
+ SurveyAnalysis::Init($this->anketa['id']);
+ SurveyAnalysis::$setUpJSAnaliza = false;
+
+ // create new XLS document
+ $this->xls = new xls();
+
+ // Poskrbimo za datoteko s podatki
+ $SDF = SurveyDataFile::get_instance();
+ $SDF->init($this->anketa['id']);
+ $SDF->prepareFiles();
+
+ $this->headFileName = $SDF->getHeaderFileName();
+ $this->dataFileName = $SDF->getDataFileName();
+ $this->dataFileStatus = $SDF->getStatus();
+
+ $_GET['a'] = A_ANALYSIS;
+
+ // preberemo nastavitve iz baze (prej v sessionu)
+ SurveyUserSession::Init($this->anketa['id']);
+ $this->sessionData = SurveyUserSession::getData('ttest');
+
+ // ustvarimo ttest objekt
+ $this->ttestClass = new SurveyTTest($this->anketa['id']);
+
+ if ( SurveyInfo::getInstance()->SurveyInit($this->anketa['id']) && $this->init()){
+ $this->anketa['uid'] = $global_user_id;
+ SurveyUserSetting::getInstance()->Init($this->anketa['id'], $this->anketa['uid']);
+ }
+ else
+ return false;
+
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+
+ // SETTERS && GETTERS
+
+ function getFile($fileName)
+ {
+ //Close and output rtf document
+ $output = $this->createXls();
+ $this->xls->display($fileName, $output);
+ }
+
+
+ function init()
+ {
+ return true;
+ }
+
+ function encodeText($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace(array("&scaron;","&#353;","&#269;"),array("Å¡","Å¡","Ä"),$text);
+ return strip_tags($text);
+ }
+
+ function createXls()
+ {
+ global $site_path;
+ global $lang;
+ global $output;
+
+ $convertTypes = array('charSet' => "windows-1250",
+ 'delimit' => ";",
+ 'newLine' => "\n",
+ 'BOMchar' => "\xEF\xBB\xBF");
+
+ $output = $convertTypes['BOMchar'];
+
+ $output .= '<table border="0"><tr><td colspan="10"><font size="3"><b>'.$lang['export_analisys_ttest'].'</b></font></td></tr></table>';
+
+ if (count($this->sessionData['sub_conditions']) > 1 ) {
+ $variables1 = $this->ttestClass->getSelectedVariables();
+ if (count($variables1) > 0) {
+ foreach ($variables1 AS $v_first) {
+ $ttest = null;
+ $ttest = $this->ttestClass->createTTest($v_first, $this->sessionData['sub_conditions']);
+
+ $output .= '<table border="0"><tr><td></td></tr></table>';
+
+ $this->displayTTestTable($ttest);
+ }
+ }
+ }
+
+ return $output;
+ }
+
+ public function displayTTestTable($ttest) {
+ global $lang;
+ global $output;
+
+ # preverimo ali imamo izbrano odvisno spremenljivko
+ $spid1 = $this->sessionData['variabla'][0]['spr'];
+ $seq1 = $this->sessionData['variabla'][0]['seq'];
+ $grid1 = $this->sessionData['variabla'][0]['grd'];
+
+ if (is_array($ttest) && count($ttest) > 0 && (int)$seq1 > 0) {
+
+ $spr_data_1 = $this->ttestClass->_HEADERS[$spid1];
+ if ($grid1 == 'undefined') {
+
+ # imamp lahko veÄ variabel
+ $seq = $seq1;
+ foreach ($spr_data_1['grids'] as $gkey => $grid ) {
+
+ foreach ($grid['variables'] as $vkey => $variable) {
+ $sequence = $variable['sequence'];
+ if ($sequence == $seq) {
+ $sprLabel1 = '('.$variable['variable'].') '. $variable['naslov'];
+ }
+ }
+ }
+ } else {
+ # imamo subgrid
+ $sprLabel1 = '('.$spr_data_1['grids'][$grid1]['variable'].') '. $spr_data_1['grids'][$grid1]['naslov'];
+ }
+
+ # polovio labele
+ $spid2 = $this->sessionData['spr2'];
+ $sprLabel2 = trim(str_replace('&nbsp;','',$this->sessionData['label2']));
+ $label1 = $this->ttestClass->getVariableLabels($this->sessionData['sub_conditions'][0]);
+ $label2 = $this->ttestClass->getVariableLabels($this->sessionData['sub_conditions'][1]);
+ $output .= '<table border="1">';
+ $output .= '<tr>';
+ #labele
+ $output .= '<td align="center" rowspan="2">';
+ $output .= '<b>'.$sprLabel2.'</b>';
+ $output .= '</td>';
+
+ $output .= '<td align="center" colspan="9">';
+ $output .= '<b>'.$sprLabel1.'</b>';
+ $output .= '</td>';
+ $output .= '</tr>';
+ $output .= '<tr>';
+ #$output .= '<th align="center" colspan="2">&nbsp;</th>';
+ #frekvenca
+ $output .= '<th align="center" >n</th>';
+ #povpreÄje
+ $output .= '<th align="center"><span class="avg">x</span></th>';
+ #varianca
+ $output .= '<th align="center">s&#178;</th>';
+ #standardna napaka
+ $output .= '<th align="center">se(<span class="avg">x</span>)</th>';
+ #margini
+ $output .= '<th align="center">&#177;1,96&#215;se(<span class="avg">x</span>)</th>';
+ #d
+ $output .= '<th align="center">d</th>';
+ #sed
+ $output .= '<th align="center">se(d)</th>';
+ #signifikanca
+ $output .= '<th align="center">Sig.</th>';
+ #ttest
+ $output .= '<th align="center">t</th>';
+ $output .= '</tr>';
+
+ $output .= '<tr>';
+
+ #labele
+
+ $output .= '<td align="center">'.$label1.'</td>';
+ #frekvenca
+ $output .= '<td align="center">'.$this->ttestClass->formatNumber($ttest[1]['n'],0).'</td>';
+ #povpreÄje
+ $output .= '<td align="center">'.$this->ttestClass->formatNumber($ttest[1]['x'],3).'</td>';
+ #varianca
+ $output .= '<td align="center">'.$this->ttestClass->formatNumber($ttest[1]['s2'],3).'</td>';
+ #standardna napaka
+ $output .= '<td align="center">'.$this->ttestClass->formatNumber($ttest[1]['se'],3).'</td>';
+ #margini
+ $output .= '<td align="center">'.$this->ttestClass->formatNumber($ttest[1]['margin'],3).'</td>';
+ #d
+ $output .= '<td align="center" rowspan="2">'.$this->ttestClass->formatNumber($ttest['d'],3).'</td>';
+ #sed
+ $output .= '<td align="center" rowspan="2">'.$this->ttestClass->formatNumber($ttest['sed'],3).'</td>';
+ #signifikanca
+ $output .= '<td align="center" rowspan="2">'.$this->ttestClass->formatNumber($ttest['sig'],3).'</td>';
+ #ttest
+ $output .= '<td align="center" rowspan="2">'.$this->ttestClass->formatNumber($ttest['t'],3).'</td>';
+ $output .= '</tr>';
+
+ $output .= '<tr>';
+ #labele
+ $output .= '<td align="center">'.$label2.'</td>';
+ #frekvenca
+ $output .= '<td align="center">'.$this->ttestClass->formatNumber($ttest[2]['n'],0).'</td>';
+ #povpreÄje
+ $output .= '<td align="center">'.$this->ttestClass->formatNumber($ttest[2]['x'],3).'</td>';
+ #varianca
+ $output .= '<td align="center">'.$this->ttestClass->formatNumber($ttest[2]['s2'],3).'</td>';
+ #standardna napaka
+ $output .= '<td align="center">'.$this->ttestClass->formatNumber($ttest[2]['se'],3).'</td>';
+ #margini
+ $output .= '<td align="center">'.$this->ttestClass->formatNumber($ttest[2]['margin'],3).'</td>';
+ $output .= '</tr>';
+ $output .= '</table>';
+ }
+ }
+
+
+
+ /*Skrajsa tekst in doda '...' na koncu*/
+ function snippet($text,$length=64,$tail="...")
+ {
+ $text = trim($text);
+ $txtl = strlen($text);
+ if($txtl > $length)
+ {
+ for($i=1;$text[$length-$i]!=" ";$i++)
+ {
+ if($i == $length)
+ {
+ return substr($text,0,$length) . $tail;
+ }
+ }
+ $text = substr($text,0,$length-$i+1) . $tail;
+ }
+ return $text;
+ }
+
+ function setUserId($usrId) {$this->anketa['uid'] = $usrId;}
+ function getUserId() {return ($this->anketa['uid'])?$this->anketa['uid']:false;}
+
+ function formatNumber($value,$digit=0,$sufix="")
+ {
+ if ( $value <> 0 && $value != null )
+ $result = round($value,$digit);
+ else
+ $result = "0";
+ //$result = number_format($result, $digit, ',', '.').$sufix;
+ $result = number_format($result, $digit, ',', '') . $sufix;
+
+ // Preprecimo da bi se stevilo z decimalko pretvorilo v datum
+ //$result = '="'. $result.'"';
+
+ return $result;
+ }
+}
+
+?> \ No newline at end of file
diff --git a/admin/exportclases/class.xlsIzvozList.php b/admin/exportclases/class.xlsIzvozList.php
new file mode 100644
index 0000000..e3515ab
--- /dev/null
+++ b/admin/exportclases/class.xlsIzvozList.php
@@ -0,0 +1,373 @@
+<?php
+
+global $site_path;
+
+ include_once('../../function.php');
+ include_once('../survey/definition.php');
+ include_once('../exportclases/class.xls.php');
+
+class XlsIzvozList {
+
+ var $anketa; // trenutna anketa
+ var $pi=array('canCreate'=>false); // za shrambo parametrov in sporocil
+
+ private $headFileName = null; # pot do header fajla
+ private $dataFileName = null; # pot do data fajla
+ private $dataFileStatus = null; # status data datoteke
+
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null, $sprID = null){
+ global $site_path;
+ global $global_user_id;
+ global $output;
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) ){
+
+ $this->anketa['id'] = $anketa;
+ $this->spremenljivka = $sprID;
+
+ SurveyAnalysis::Init($this->anketa['id']);
+ SurveyAnalysis::$setUpJSAnaliza = false;
+
+ // create new XLS document
+ $this->xls = new xls();
+
+ // Poskrbimo za datoteko s podatki
+ $SDF = SurveyDataFile::get_instance();
+ $SDF->init($this->anketa['id']);
+ $SDF->prepareFiles();
+
+ $this->headFileName = $SDF->getHeaderFileName();
+ $this->dataFileName = $SDF->getDataFileName();
+ $this->dataFileStatus = $SDF->getStatus();
+
+ // Nastavimo da izpisujemo samo prvih 5 spremenljivk
+ $_GET['spr_limit'] = 'all';
+
+ // Nastavimo da nikoli ne izpisemo vabila
+ $_GET['email'] = 0;
+ SurveyDataDisplay::Init($this->anketa['id']);
+ }
+ else{
+ $this->pi['msg'] = "Anketa ni izbrana!";
+ $this->pi['canCreate'] = false;
+
+ return false;
+ }
+
+ if ( SurveyInfo::getInstance()->SurveyInit($this->anketa['id']) && $this->init()){
+ $this->anketa['uid'] = $global_user_id;
+ SurveyUserSetting::getInstance()->Init($this->anketa['id'], $this->anketa['uid']);
+ }
+ else
+ return false;
+
+ // ce smo prisli do tu je vse ok
+ $this->pi['canCreate'] = true;
+
+ return true;
+ }
+
+ function getAnketa()
+ {
+ return $this->anketa['id'];
+ }
+
+ function checkCreate()
+ {
+ return $this->pi['canCreate'];
+ }
+
+ function getFile($fileName)
+ {
+ //Close and output rtf document
+// $this->rtf->Output($fileName, 'I');
+ $output = $this->createXls();
+ $this->xls->display($fileName, $output);
+ }
+
+ function init()
+ {
+ return true;
+ }
+
+ function createXls(){
+ global $site_path;
+ global $lang;
+ global $output;
+
+ $convertTypes = array('charSet' => "windows-1250",
+ 'delimit' => ";",
+ 'newLine' => "\n",
+ 'BOMchar' => "\xEF\xBB\xBF");
+
+ $output = $convertTypes['BOMchar'];
+
+ $output .= '<table border="0"><tr><td colspan="10"><font size="3"><b>'.$lang['export_list'].'</b></font></td></tr></table>';
+
+
+ $this->displayTable();
+
+
+ return $output;
+ }
+
+
+ function displayTable(){
+ global $site_path;
+ global $lang;
+ global $output;
+
+
+ $folder = $site_path . EXPORT_FOLDER.'/';
+
+ //polovimo podatke o nastavitvah trenutnega profila (missingi..)
+ SurveyAnalysis::$missingProfileData = SurveyMissingProfiles::getProfile(SurveyAnalysis::$currentMissingProfile);
+
+ #preberemo HEADERS iz datoteke
+ SurveyAnalysis::$_HEADERS = unserialize(file_get_contents($this->headFileName));
+
+ #odstranimo sistemske variable
+ SurveyAnalysis::removeSystemVariables();
+
+ SurveyDataDisplay::$_VARS[VAR_DATA] = 1;
+ SurveyDataDisplay::$_VARS[VAR_SPR_LIMIT] = 5;
+ SurveyDataDisplay::$_VARS[VAR_META] = 0;
+ SurveyDataDisplay::$_VARS[VAR_EMAIL] = 0;
+ SurveyDataDisplay::$_VARS[VAR_RELEVANCE] = 0;
+ SurveyDataDisplay::$_VARS[VAR_EDIT] = 0;
+ SurveyDataDisplay::$_VARS[VAR_PRINT] = 0;
+ SurveyDataDisplay::$_VARS[VAR_MONITORING] = 0;
+
+ if(SurveyDataDisplay::$_VARS['view_date'])
+ SurveyDataDisplay::$_VARS[VAR_SPR_LIMIT]++;
+
+ # ponastavimo nastavitve- filter
+ SurveyDataDisplay::setUpFilter();
+
+ $vars_count = count(SurveyAnalysis::$_FILTRED_VARIABLES);
+
+
+ $output .= '<table border="1" cellpadding="0" cellspacing="0">';
+ $output .= '<thead>';
+ $output .= '<tr>';
+
+
+ // Vrstica z naslovi spremenljivk
+ if(SurveyDataDisplay::$_VARS['view_date']){
+ $output .= '<th>';
+ $output .= $lang['srv_data_date'];
+ $output .= '</th>';
+ }
+ $spr_cont = 0;
+ foreach (SurveyAnalysis::$_HEADERS AS $spid => $spremenljivka) {
+ # preverjamo ali je meta
+ if ($spremenljivka['tip'] != 'm' && in_array($spremenljivka['tip'], SurveyAnalysis::$_FILTRED_TYPES)){
+ # ali imamo sfiltrirano spremenljivko
+ if ($vars_count == 0 || ($vars_count > 0 && isset(SurveyAnalysis::$_FILTRED_VARIABLES[$spid]))) {
+
+ // prikazemo samo prvih 5 spremenljivk
+ if ($spr_cont < 5) {
+ $output .= '<th colspan="'.$spremenljivka['cnt_all'].'">';
+ $output .= $spremenljivka['naslov'];
+ $output .= '</th>';
+ }
+ $spr_cont++;
+ }
+ }
+ }
+
+ $output .= '</tr><tr>';
+
+ // Vrstica imeni variabel
+ if(SurveyDataDisplay::$_VARS['view_date']){
+ $output .= '<th>';
+ $output .= $lang['srv_data_date'];
+ $output .= '</th>';
+ }
+ $spr_cont = 0;
+ foreach (SurveyAnalysis::$_HEADERS AS $spid => $spremenljivka) {
+ # preverjamo ali je meta
+ if ($spremenljivka['tip'] != 'm' && in_array($spremenljivka['tip'], SurveyAnalysis::$_FILTRED_TYPES)){
+ # ali imamo sfiltrirano spremenljivko
+ if ($vars_count == 0 || ($vars_count > 0 && isset(SurveyAnalysis::$_FILTRED_VARIABLES[$spid])) && count($spremenljivka['grids']) > 0) {
+
+ // prikazemo samo prvih 5 spremenljivk
+ if ($spr_cont < 5) {
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ $output .= '<th colspan="'.$grid['cnt_vars'].'">';
+ $output .= $grid['naslov'];
+ $output .= '</th>';
+ }
+ }
+ $spr_cont++;
+ }
+ }
+ }
+ $output .= '</tr><tr>';
+
+
+ if(SurveyDataDisplay::$_VARS['view_date']){
+ $output .= '<th>';
+ $output .= $lang['srv_data_date'];
+ $output .= '</th>';
+ }
+ $spr_cont = 0;
+ foreach (SurveyAnalysis::$_HEADERS AS $spid => $spremenljivka) {
+ # preverjamo ali je meta
+ if ($spremenljivka['tip'] != 'm' && in_array($spremenljivka['tip'], SurveyAnalysis::$_FILTRED_TYPES)){
+ # ali imamo sfiltrirano spremenljivko
+ if ($vars_count == 0 || ($vars_count > 0 && isset(SurveyAnalysis::$_FILTRED_VARIABLES[$spid])) && count($spremenljivka['grids']) > 0) {
+
+ // prikazemo samo prvih 5 spremenljivk
+ if($spr_cont < 5) {
+ foreach ($spremenljivka['grids'] AS $gid => $grid) {
+ if (count ($grid['variables']) > 0) {
+ foreach ($grid['variables'] AS $vid => $variable ){
+
+ $output .= '<th>';
+
+ $output .= $variable['naslov'];
+
+ if ($variable['other'] == 1)
+ $output .= '&nbsp;(text)';
+
+ $output .= '</th>';
+ }
+ }
+ }
+ }
+ $spr_cont++;
+ }
+ }
+ }
+ $output .='</tr>';
+ $output .= '</thead>';
+
+
+ // Nastavimo stevilo izpisov - prikazemo vse
+ $_REC_LIMIT = '';
+ //$_REC_LIMIT = ' NR==1,NR==50';
+
+
+ $_command = '';
+ #preberemo podatke
+ // polovimo vrstice z statusom 5,6 in jih damo v zaÄasno datoteko
+ if (IS_WINDOWS) {
+ $_command = 'gawk -F"'.STR_DLMT.'" "BEGIN {OFS=\"\x7C\"} '.SurveyDataDisplay::$_CURRENT_STATUS_FILTER.' { print $0 }" '.$this->dataFileName;
+ }
+ else {
+ $_command = 'awk -F"'.STR_DLMT.'" \'BEGIN {OFS="\x7C"} '.SurveyDataDisplay::$_CURRENT_STATUS_FILTER.' { print $0 }\' '.$this->dataFileName;
+ }
+
+ // paginacija po stolpcih (spremenljivkah)
+ if (IS_WINDOWS) {
+ $_command .= ' | cut -d "|" -f 1,'.SurveyDataDisplay::$_VARIABLE_FILTER;
+ } else {
+ $_command .= ' | cut -d \'|\' -f 1,'.SurveyDataDisplay::$_VARIABLE_FILTER;
+ }
+
+ if ($_REC_LIMIT != '') {
+ #paginating
+ if (IS_WINDOWS) {
+ $_command .= ' | awk '.$_REC_LIMIT;
+ } else {
+ $_command .= ' | awk '.$_REC_LIMIT;
+ }
+ } else {
+ #$file_sufix = 'filtred_spr_pagination';
+ }
+
+ // zamenjamo | z </td><td> - NI POTREBNO
+ if (IS_WINDOWS) {
+ //$_command .= ' | sed "s*'.STR_DLMT.'*'.STR_LESS_THEN.'/td'.STR_GREATER_THEN.STR_LESS_THEN.'td'.STR_GREATER_THEN.'*g" >> '.$folder.'tmp_export_'.$this->anketa['id'].'_data'.TMP_EXT;
+ $_command .= ' >> '.$folder.'tmp_export_'.$this->anketa['id'].'_data'.TMP_EXT;
+ }
+ else {
+ //$_command .= ' | sed \'s*'.STR_DLMT.'*</td><td>*g\' >> '
+ //.$folder.'tmp_export_'.$this->anketa['id'].'_data'.TMP_EXT;
+ $_command .= ' >> '.$folder.'tmp_export_'.$this->anketa['id'].'_data'.TMP_EXT;
+ }
+
+ if (IS_WINDOWS) {
+ # ker so na WINsih težave z sortom, ga damo v bat fajl in izvedemo :D
+ $file_handler = fopen($folder.'cmd_'.$this->anketa['id'].'_to_run.bat',"w");
+ fwrite($file_handler,$_command);
+ fclose($file_handler);
+ $out_command = shell_exec($folder.'cmd_'.$this->anketa['id'].'_to_run.bat');
+ unlink($folder.'cmd_'.$this->anketa['id'].'_to_run.bat');
+ } else {
+ $out_command = shell_exec($_command);
+ }
+
+ $output .= '<tbody>';
+ if (file_exists($folder.'tmp_export_'.$this->anketa['id'].'_data'.TMP_EXT)) {
+ $f = fopen ($folder.'tmp_export_'.$this->anketa['id'].'_data'.TMP_EXT, 'r');
+
+ while ($line = fgets ($f)) {
+ $output .= '<tr>';
+
+ $dataArray = array();
+ $dataArray = explode('|', $line);
+
+ // Ne upostevamo prve vrednosti (ID)
+ array_shift($dataArray);
+
+ foreach($dataArray as $key => $val){
+ $output .= '<td>'.$val.'</td>';
+ }
+
+ $output .= '</tr>';
+ }
+ } else {
+ $output .= 'File does not exist (err.No.1)! :'.'tmp_export_'.$this->anketa['id'].'_data'.TMP_EXT;
+ }
+ $output .= '</tbody>';
+
+ if ($f) {
+ fclose($f);
+ }
+ if (file_exists($folder.'tmp_export_'.$this->anketa['id'].'_data'.TMP_EXT)) {
+ unlink($folder.'tmp_export_'.$this->anketa['id'].'_data'.TMP_EXT);
+ }
+
+
+ $output .= '</table>';
+ }
+
+
+ function encodeText($text)
+ {
+ // popravimo sumnike ce je potrebno
+ $stringIn = array("&#269;","&#353;","&#273;","&#263;","&#382;","&#268;","&#352;","&#272;","&#262;","&#381;","&nbsp;");
+ $stringOut = array("Ä","Å¡","Ä‘","ć","ž","ÄŒ","Å ","Ä","Ć","Ž"," ");
+
+ //$text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace($stringIn, $stringOut, $text);
+ return $text;
+ }
+
+ function enkaEncode($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ return strip_tags($text);
+ }
+
+ function formatNumber ($value, $digit = 0, $sufix = "") {
+ if ($value <> 0 && $value != null)
+ $result = round($value, $digit);
+ else
+ $result = "0";
+ //$result = number_format($result, $digit, '.', ',') . $sufix;
+ $result = number_format($result, $digit, ',', '') . $sufix;
+
+ return $result;
+ }
+
+}
+
+?> \ No newline at end of file
diff --git a/admin/exportclases/class.xlsIzvozSpeeder.php b/admin/exportclases/class.xlsIzvozSpeeder.php
new file mode 100644
index 0000000..9c06708
--- /dev/null
+++ b/admin/exportclases/class.xlsIzvozSpeeder.php
@@ -0,0 +1,187 @@
+<?php
+
+global $site_path;
+
+include_once('../../function.php');
+include_once('../survey/definition.php');
+include_once('../exportclases/class.xls.php');
+
+define("RESULTS_FOLDER", "admin/survey/modules/mod_SPEEDINDEX/results", true);
+
+class XlsIzvozSpeeder {
+
+ var $anketa; // trenutna anketa
+ var $pi=array('canCreate'=>false); // za shrambo parametrov in sporocil
+
+ private $headFileName = null; # pot do header fajla
+ private $dataFileName = null; # pot do data fajla
+ private $dataFileStatus = null; # status data datoteke
+
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null, $sprID = null){
+ global $site_path;
+ global $global_user_id;
+ global $output;
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) ){
+
+ $this->anketa['id'] = $anketa;
+ $this->spremenljivka = $sprID;
+
+ SurveyAnalysis::Init($this->anketa['id']);
+ SurveyAnalysis::$setUpJSAnaliza = false;
+
+ // create new XLS document
+ $this->xls = new xls();
+
+ // Poskrbimo za datoteko s podatki
+ $SDF = SurveyDataFile::get_instance();
+ $SDF->init($this->anketa['id']);
+ $SDF->prepareFiles();
+
+ $this->headFileName = $SDF->getHeaderFileName();
+ $this->dataFileName = $SDF->getDataFileName();
+ $this->dataFileStatus = $SDF->getStatus();
+
+ $_POST['podstran'] = 'speeder_resp';
+ }
+ else{
+ $this->pi['msg'] = "Anketa ni izbrana!";
+ $this->pi['canCreate'] = false;
+
+ return false;
+ }
+
+ if (SurveyInfo::getInstance()->SurveyInit($this->anketa['id'])){
+ $this->anketa['uid'] = $global_user_id;
+ SurveyUserSetting::getInstance()->Init($this->anketa['id'], $this->anketa['uid']);
+ }
+ else
+ return false;
+
+ // ce smo prisli do tu je vse ok
+ $this->pi['canCreate'] = true;
+
+ return true;
+ }
+
+ function getAnketa(){
+ return $this->anketa['id'];
+ }
+
+ function checkCreate(){
+ return $this->pi['canCreate'];
+ }
+
+ function getFile($fileName){
+ $output = $this->createXls();
+ $this->xls->display($fileName, $output);
+ }
+
+
+ function createXls(){
+ global $site_path;
+ global $lang;
+ global $output;
+
+ $convertTypes = array('charSet' => "windows-1250",
+ 'delimit' => ";",
+ 'newLine' => "\n",
+ 'BOMchar' => "\xEF\xBB\xBF");
+
+ $output = $convertTypes['BOMchar'];
+
+ $output .= '<table border="0"><tr><td colspan="10"><font size="3"><b>'.$lang['srv_speeder_index'].'</b></font></td></tr></table>';
+
+ $this->displayTable();
+
+ return $output;
+ }
+
+
+ function displayTable(){
+ global $site_path;
+ global $lang;
+ global $output;
+
+ $result_folder = $site_path . RESULTS_FOLDER.'/';
+
+
+ $output .= '<table border="1" cellpadding="0" cellspacing="0">';
+
+ // Izpis podatkov vsakega respondenta
+ if (($handle = fopen($result_folder."speederindex".$this->anketa['id'].".csv", "r")) !== FALSE) {
+
+ $output .= '<tbody>';
+
+ // Loop po vrsticah
+ $cnt=0;
+ while (($row = fgetcsv($handle, 1000, ';')) !== FALSE) {
+
+ $output .= '<tr>';
+
+ // Prva vrstica
+ if($cnt == 0){
+ foreach($row as $val){
+ $output .= '<th>';
+ $output .= $val;
+ $output .= '</th>';
+ }
+ }
+ // Vrstice s podatki
+ else{
+ foreach($row as $val){
+ $output .= '<td>';
+ $output .= $val;
+ $output .= '</td>';
+ }
+ }
+
+ $output .= '</tr>';
+
+ $cnt++;
+ }
+ fclose($handle);
+
+ $output .= '</tbody>';
+ }
+
+ $output .= '</table>';
+ }
+
+
+ function encodeText($text)
+ {
+ // popravimo sumnike ce je potrebno
+ $stringIn = array("&#269;","&#353;","&#273;","&#263;","&#382;","&#268;","&#352;","&#272;","&#262;","&#381;","&nbsp;");
+ $stringOut = array("Ä","Å¡","Ä‘","ć","ž","ÄŒ","Å ","Ä","Ć","Ž"," ");
+
+ //$text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace($stringIn, $stringOut, $text);
+ return $text;
+ }
+
+ function enkaEncode($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ return strip_tags($text);
+ }
+
+ function formatNumber ($value, $digit = 0, $sufix = "") {
+ if ($value <> 0 && $value != null)
+ $result = round($value, $digit);
+ else
+ $result = "0";
+ //$result = number_format($result, $digit, '.', ',') . $sufix;
+ $result = number_format($result, $digit, ',', '') . $sufix;
+
+ return $result;
+ }
+
+}
+
+?> \ No newline at end of file
diff --git a/admin/exportclases/class.xlsIzvozTextAnalysis.php b/admin/exportclases/class.xlsIzvozTextAnalysis.php
new file mode 100644
index 0000000..bf6e65c
--- /dev/null
+++ b/admin/exportclases/class.xlsIzvozTextAnalysis.php
@@ -0,0 +1,264 @@
+<?php
+
+global $site_path;
+
+ include_once('../../function.php');
+ include_once('../survey/definition.php');
+ include_once('../exportclases/class.xls.php');
+
+class XlsIzvozTextAnalysis {
+
+ var $anketa; // trenutna anketa
+ var $pi = array('canCreate'=>false); // za shrambo parametrov in sporocil
+
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null){
+ global $site_path;
+ global $global_user_id;
+ global $output;
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) ){
+
+ $this->anketa['id'] = $anketa;
+
+ // create new XLS document
+ $this->xls = new xls();
+
+ $_POST['podstran'] = 'text_analysis';
+ }
+ else{
+ $this->pi['msg'] = "Anketa ni izbrana!";
+ $this->pi['canCreate'] = false;
+ return false;
+ }
+
+ if (SurveyInfo::getInstance()->SurveyInit($this->anketa['id'])){
+ $this->anketa['uid'] = $global_user_id;
+ }
+ else
+ return false;
+ // ce smo prisli do tu je vse ok
+ $this->pi['canCreate'] = true;
+
+ return true;
+ }
+
+ function getAnketa(){
+ return $this->anketa['id'];
+ }
+
+ function checkCreate(){
+ return $this->pi['canCreate'];
+ }
+
+ function getFile($fileName){
+ $output = $this->createXls();
+ $this->xls->display($fileName, $output);
+ }
+
+
+ function createXls(){
+ global $site_path;
+ global $lang;
+ global $output;
+
+ $convertTypes = array('charSet' => "windows-1250",
+ 'delimit' => ";",
+ 'newLine' => "\n",
+ 'BOMchar' => "\xEF\xBB\xBF");
+
+ $output = $convertTypes['BOMchar'];
+
+ // Dobimo podatke
+ $STA = new SurveyTextAnalysis($this->anketa['id']);
+ $data = $STA->getData();
+
+ // Tabela vsot znakov po straneh
+ $output .= '<table border="0"><tr><td colspan="10"><font size="3"><b>'.$lang['srv_text_analysis_title1'].'</b></font></td></tr></table>';
+ $this->displayGrupaTable($data);
+
+ $output .= '<table border="0"><tr><td></td></tr></table>';
+ $output .= '<table border="0"><tr><td colspan="10"><font size="3"><b>'.$lang['srv_text_analysis_title2'].'</b></font></td></tr></table>';
+
+ // Tabela znakov po vprasanjih in vrednostih
+ $this->displaySprTable($data);
+
+ return $output;
+ }
+
+ function displayGrupaTable($data){
+ global $site_path;
+ global $lang;
+ global $output;
+
+ $output .= '<table border="1" cellpadding="0" cellspacing="0">';
+
+ // Header row
+ $output .= '<tr>';
+
+ $output .= '<th style="width:120px;">'.$lang['srv_text_analysis_page'].'</th>';
+ $output .= '<th style="width:120px;">'.$lang['srv_text_analysis_question'].'</th>';
+
+ $output .= '<th style="width:130px;">'.$lang['srv_text_analysis_charCount'].'</th>';
+ $output .= '<th style="width:130px;">'.$lang['srv_text_analysis_charCountBlank'].'</th>';
+ $output .= '<th style="width:130px;">'.$lang['srv_text_analysis_charCountHTML'].'</th>';
+ $output .= '<th style="width:130px;">'.$lang['srv_text_analysis_wordCount'].'</th>';
+
+ $output .= '</tr>';
+
+ // Loop po straneh v anketi
+ foreach($data['grupe'] as $gru_id => $grupa){
+
+ // Loop po vprasanjih na strani
+ foreach($grupa['spremenljivke'] as $spr_id => $spremenljivka){
+
+ $output .= '<tr>';
+
+ $output .= '<td align="center">'.$grupa['naslov'].'</td>';
+ $output .= '<td align="center">'.$spremenljivka['variable'].'</td>';
+
+ $output .= '<td align="center">'.$spremenljivka['sum_char_count'].'</td>';
+ $output .= '<td align="center">'.$spremenljivka['sum_char_count_noBlank'].'</td>';
+ $output .= '<td align="center">'.$spremenljivka['sum_char_count_html'].'</td>';
+ $output .= '<td align="center">'.$spremenljivka['sum_word_count'].'</td>';
+
+ $output .= '</tr>';
+ }
+
+ // Vsota znakov na strani
+ $output .= '<tr class="sum">';
+
+ $output .= '<td align="center">'.$grupa['naslov'].'</td>';
+ $output .= '<td align="center">'.$lang['srv_text_analysis_sum'].'</td>';
+
+ $output .= '<td align="center">'.$grupa['sum_char_count'].'</td>';
+ $output .= '<td align="center">'.$grupa['sum_char_count_noBlank'].'</td>';
+ $output .= '<td align="center">'.$grupa['sum_char_count_html'].'</td>';
+ $output .= '<td align="center">'.$grupa['sum_word_count'].'</td>';
+
+ $output .= '</tr>';
+ }
+
+ // Vsota znakov v anketi
+ $output .= '<tr class="sum">';
+
+ $output .= '<td align="center"></td>';
+ $output .= '<td align="center">'.$lang['srv_text_analysis_sumSurvey'].'</td>';
+
+ $output .= '<td align="center">'.$data['sum_char_count'].'</td>';
+ $output .= '<td align="center">'.$data['sum_char_count_noBlank'].'</td>';
+ $output .= '<td align="center">'.$data['sum_char_count_html'].'</td>';
+ $output .= '<td align="center">'.$data['sum_word_count'].'</td>';
+
+ $output .= '</tr>';
+
+ $output .= '</table>';
+ }
+
+ function displaySprTable($data){
+ global $site_path;
+ global $lang;
+ global $output;
+
+ $output .= '<table border="1" cellpadding="0" cellspacing="0">';
+
+ // Header row
+ $output .= '<tr>';
+
+ $output .= '<th style="width:120px;">'.$lang['srv_text_analysis_page'].'</th>';
+ $output .= '<th style="width:120px;">'.$lang['srv_text_analysis_question'].'</th>';
+ $output .= '<th style="width:120px;">'.$lang['srv_text_analysis_value'].'</th>';
+ $output .= '<th>'.$lang['srv_text_analysis_text'].'</th>';
+
+ $output .= '<th style="width:130px;">'.$lang['srv_text_analysis_charCount'].'</th>';
+ $output .= '<th style="width:130px;">'.$lang['srv_text_analysis_charCountBlank'].'</th>';
+ $output .= '<th style="width:130px;">'.$lang['srv_text_analysis_charCountHTML'].'</th>';
+ $output .= '<th style="width:130px;">'.$lang['srv_text_analysis_wordCount'].'</th>';
+
+ $output .= '</tr>';
+
+ // Loop po straneh v anketi
+ foreach($data['grupe'] as $gru_id => $grupa){
+
+ // Loop po vprasanjih na strani
+ foreach($grupa['spremenljivke'] as $spr_id => $spremenljivka){
+
+ $output .= '<tr class="colored">';
+
+ $output .= '<td align="center">'.$grupa['naslov'].'</td>';
+ $output .= '<td align="center">'.$spremenljivka['variable'].'</td>';
+ $output .= '<td></td>';
+
+ $naslov = strip_tags($spremenljivka['naslov']);
+ $naslov = ($spremenljivka['char_count'] > 50) ? substr($naslov, 0, 47).'...' : $naslov;
+ $output .= '<td>'.$naslov.'</td>';
+
+ $output .= '<td align="center">'.$spremenljivka['char_count'].'</td>';
+ $output .= '<td align="center">'.$spremenljivka['char_count_noBlank'].'</td>';
+ $output .= '<td align="center">'.$spremenljivka['char_count_html'].'</td>';
+ $output .= '<td align="center">'.$spremenljivka['word_count'].'</td>';
+
+ $output .= '</tr>';
+
+ // Loop po vrednostih v vprasanju
+ foreach($spremenljivka['vrednosti'] as $vre_id => $vrednost){
+
+ $output .= '<tr>';
+
+ $output .= '<td align="center">'.$grupa['naslov'].'</td>';
+ $output .= '<td align="center">'.$spremenljivka['variable'].'</td>';
+ $output .= '<td align="center">'.$vrednost['variable'].'</td>';
+
+ $naslov = strip_tags($vrednost['naslov']);
+ $naslov = ($vrednost['char_count'] > 50) ? substr($naslov, 0, 47).'...' : $naslov;
+ $output .= '<td>'.$naslov.'</td>';
+
+ $output .= '<td align="center">'.$vrednost['char_count'].'</td>';
+ $output .= '<td align="center">'.$vrednost['char_count_noBlank'].'</td>';
+ $output .= '<td align="center">'.$vrednost['char_count_html'].'</td>';
+ $output .= '<td align="center">'.$vrednost['word_count'].'</td>';
+
+ $output .= '</tr>';
+ }
+ }
+ }
+
+ $output .= '</table>';
+ }
+
+
+ function encodeText($text)
+ {
+ // popravimo sumnike ce je potrebno
+ $stringIn = array("&#269;","&#353;","&#273;","&#263;","&#382;","&#268;","&#352;","&#272;","&#262;","&#381;","&nbsp;");
+ $stringOut = array("Ä","Å¡","Ä‘","ć","ž","ÄŒ","Å ","Ä","Ć","Ž"," ");
+
+ //$text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace($stringIn, $stringOut, $text);
+ return $text;
+ }
+
+ function enkaEncode($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ return strip_tags($text);
+ }
+
+ function formatNumber ($value, $digit = 0, $sufix = "") {
+ if ($value <> 0 && $value != null)
+ $result = round($value, $digit);
+ else
+ $result = "0";
+ //$result = number_format($result, $digit, '.', ',') . $sufix;
+ $result = number_format($result, $digit, ',', '') . $sufix;
+
+ return $result;
+ }
+
+}
+
+?> \ No newline at end of file
diff --git a/admin/exportclases/class.xlsIzvozUsable.php b/admin/exportclases/class.xlsIzvozUsable.php
new file mode 100644
index 0000000..3334d7c
--- /dev/null
+++ b/admin/exportclases/class.xlsIzvozUsable.php
@@ -0,0 +1,322 @@
+<?php
+
+global $site_path;
+
+ include_once('../../function.php');
+ include_once('../survey/definition.php');
+ include_once('../exportclases/class.xls.php');
+
+class XlsIzvozUsable {
+
+ var $anketa; // trenutna anketa
+ var $pi=array('canCreate'=>false); // za shrambo parametrov in sporocil
+
+ private $headFileName = null; # pot do header fajla
+ private $dataFileName = null; # pot do data fajla
+ private $dataFileStatus = null; # status data datoteke
+
+
+ /**
+ * @desc konstruktor
+ */
+ function __construct ($anketa = null, $sprID = null){
+ global $site_path;
+ global $global_user_id;
+ global $output;
+
+ // preverimo ali imamo stevilko ankete
+ if ( is_numeric($anketa) ){
+
+ $this->anketa['id'] = $anketa;
+ $this->spremenljivka = $sprID;
+
+ SurveyAnalysis::Init($this->anketa['id']);
+ SurveyAnalysis::$setUpJSAnaliza = false;
+
+ // create new XLS document
+ $this->xls = new xls();
+
+ // Poskrbimo za datoteko s podatki
+ $SDF = SurveyDataFile::get_instance();
+ $SDF->init($this->anketa['id']);
+ $SDF->prepareFiles();
+
+ $this->headFileName = $SDF->getHeaderFileName();
+ $this->dataFileName = $SDF->getDataFileName();
+ $this->dataFileStatus = $SDF->getStatus();
+
+ $_POST['podstran'] = 'usable_resp';
+ }
+ else{
+ $this->pi['msg'] = "Anketa ni izbrana!";
+ $this->pi['canCreate'] = false;
+ return false;
+ }
+
+ if (SurveyInfo::getInstance()->SurveyInit($this->anketa['id'])){
+ $this->anketa['uid'] = $global_user_id;
+ SurveyUserSetting::getInstance()->Init($this->anketa['id'], $this->anketa['uid']);
+ }
+ else
+ return false;
+
+ // ce smo prisli do tu je vse ok
+ $this->pi['canCreate'] = true;
+
+ return true;
+ }
+
+ function getAnketa(){
+ return $this->anketa['id'];
+ }
+
+ function checkCreate(){
+ return $this->pi['canCreate'];
+ }
+
+ function getFile($fileName){
+ $output = $this->createXls();
+ $this->xls->display($fileName, $output);
+ }
+
+
+ function createXls(){
+ global $site_path;
+ global $lang;
+ global $output;
+
+ $convertTypes = array('charSet' => "windows-1250",
+ 'delimit' => ";",
+ 'newLine' => "\n",
+ 'BOMchar' => "\xEF\xBB\xBF");
+
+ $output = $convertTypes['BOMchar'];
+
+ $output .= '<table border="0"><tr><td colspan="10"><font size="3"><b>'.$lang['srv_usable_respondents'].'</b></font></td></tr></table>';
+
+
+ $this->displayTable();
+
+
+ return $output;
+ }
+
+
+ function displayTable(){
+ global $site_path;
+ global $lang;
+ global $output;
+
+ $SUR = new SurveyUsableResp($this->anketa['id'], $generateDataFile=false);
+ $usability = $SUR->calculateData();
+
+
+ # ali odstranimo stolpce kateri imajo same 0
+ $cols_with_value = $SUR->getColsWithValue();
+ $_missings = $SUR->getMissings();
+ $_unsets = $SUR->getUnsets();
+ if ($SUR->showWithZero() == false) {
+ # odstranimo missinge brez vrednosti
+ foreach ($SUR->getMissings() AS $_key => $_missing) {
+ if (!isset($cols_with_value[$_key]) || $cols_with_value[$_key] == false) {
+ unset($_missings[$_key]);
+ }
+ }
+ # odstranimo neveljavne brez vrednosti
+ foreach ($SUR->getUnsets() AS $_key => $_unset) {
+ if (!isset($cols_with_value[$_key]) || $cols_with_value[$_key] == false) {
+ unset($_unsets[$_key]);
+ }
+ }
+ }
+
+
+ $output .= '<table border="1" cellpadding="0" cellspacing="0">';
+
+ // Header rows
+ $output .= '<thead>';
+ $output .= '<tr>';
+
+ $output .= '<th rowspan="2">Recnum</th>';
+ $output .= '<th rowspan="2">'.$lang['srv_usableResp_qcount'].'</th>';
+
+ $output .= '<th colspan=4>'.$lang['srv_usableResp_exposed'].'</th>';
+
+ $output .= '<th rowspan="2">'.$lang['srv_usableResp_breakoff'].'</th>';
+
+ $output .= '<th colspan="2">'.$lang['srv_usableResp_usability'].'</th>';
+
+ // ali odstranimo vse stolpce s podrobnimi vrednostmi (-1, -2...)
+ if ($SUR->showDetails() == true) {
+ foreach ($_missings AS $value => $text){
+ $cnt_miss++;
+ $output .= "<th rowspan=\"2\">{$value}<br/>(".$lang['srv_usableResp_'.$text].")</th>";
+ }
+ foreach ($_unsets AS $value => $text){
+ $cnt_undefined++;
+ $output .= "<th rowspan=\"2\">{$value}<br/>(".$lang['srv_usableResp_'.$text].")</th>";
+ }
+ }
+
+ // ali prikazemo podrobne izracune
+ if ($SUR->showCalculations() == true) {
+ $output .= '<th rowspan="2">UNL</th>';
+ $output .= '<th rowspan="2">UML</th>';
+ $output .= '<th rowspan="2">UCL</th>';
+ $output .= '<th rowspan="2">UIL</th>';
+ $output .= '<th rowspan="2">UAQ</th>';
+ }
+ $output .= '</tr>';
+
+ $output .= '<tr>';
+ $output .= '<th>'.$lang['srv_anl_valid'].'</th>';
+ $output .= '<th>'.$lang['srv_usableResp_nonsubstantive'].'</th>';
+ $output .= '<th>'.$lang['srv_usableResp_nonresponse'].'</th>';
+ $output .= '<th>'.$lang['srv_anl_suma1'].'</th>';
+
+ $output .= '<th>%</th>';
+ $output .= '<th>Status</th>';
+ $output .= '</tr>';
+ $output .= '</thead>';
+
+
+ // Data rows
+ $output .= '<tbody>';
+
+ // Izpis podatkov vsakega respondenta
+ $userData = $usability['data'];
+ foreach($userData as $key => $user){
+
+ // Obarvamo vrstico glede na status (belo, rumeno, rdece)
+ if($user['status'] == 0)
+ $css_usable = 'unusable';
+ elseif($user['status'] == 1)
+ $css_usable = 'partusable';
+ else
+ $css_usable = 'usable';
+
+
+ // Prva vrstica z vrednostmi
+ $output .= '<tr>';
+
+ $output .= '<td rowspan="2">'.$user['recnum'].'</td>';
+
+ // Vsi
+ $output .= '<td rowspan="2">'.$user['all'].'</td>';
+
+ // Ustrezni
+ $output .= '<td>'.$user['valid'].'</td>';
+
+ // Non-substantive
+ $output .= '<td>'.$user['nonsubstantive'].'</td>';
+
+ // Non-response
+ $output .= '<td>'.$user['nonresponse'].'</td>';
+
+ // Skupaj
+ $output .= '<td>'.($user['valid']+$user['nonsubstantive']+$user['nonresponse']+$user['breakoff']).'</td>';
+
+ // Breakoffs
+ $output .= '<td>'.$user['breakoff'].'</td>';
+
+ // Uporabni
+ $output .= '<td>'.$user['usable'].'</td>';
+ $output .= '<td rowspan="2">'.$user['status'].'</td>';
+
+ // ali odstranimo vse stolpce s podrobnimi vrednostmi (-1, -2...)
+ if ($SUR->showDetails() == true) {
+ foreach ($_missings AS $value => $text){
+ $output .= '<td>'.$user[$value].'</td>';
+ }
+ foreach ($_unsets AS $value => $text){
+ $output .= '<td>'.$user[$value].'</td>';
+ }
+ }
+
+ // ali prikazemo podrobne izracune
+ if ($SUR->showCalculations() == true) {
+ $output .= '<td rowspan="2">'.common::formatNumber($user['UNL']*100, 0, null, '%').'</td>';
+ $output .= '<td rowspan="2">'.common::formatNumber($user['UML']*100, 0, null, '%').'</td>';
+ $output .= '<td rowspan="2">'.common::formatNumber($user['UCL']*100, 0, null, '%').'</td>';
+ $output .= '<td rowspan="2">'.common::formatNumber($user['UIL']*100, 0, null, '%').'</td>';
+ $output .= '<td rowspan="2">'.common::formatNumber($user['UAQ']*100, 0, null, '%').'</td>';
+ }
+
+ $output .= '</tr>';
+
+
+ // Druga vrstica s procenti
+ $output .= '<tr>';
+
+ // Ustrezni
+ $output .= '<td>'.common::formatNumber($user['validPercent'], 0, null, '%').'</td>';
+
+ // Non-substantive
+ $output .= '<td>'.common::formatNumber($user['nonsubstantivePercent'], 0, null, '%').'</td>';
+
+ // Non-response
+ $output .= '<td>'.common::formatNumber($user['nonresponsePercent'], 0, null, '%').'</td>';
+
+ // Skupaj
+ $output .= '<td>'.common::formatNumber(100, 0, null, '%').'</td>';
+
+ // Breakoffs
+ $output .= '<td>'.common::formatNumber($user['breakoffPercent'], 0, null, '%').'</td>';
+
+ // Uporabni
+ $output .= '<td class="usable">'.common::formatNumber($user['usablePercent'], 0, null, '%').'</td>';
+
+ // ali odstranimo vse stolpce s podrobnimi vrednostmi (-1, -2...)
+ if ($SUR->showDetails() == true) {
+ foreach ($_missings AS $value => $text){
+ $val = $user[$value];
+ $val = ($all > 0) ? ($val / $all * 100) : 0;
+ $output .= '<td>'.common::formatNumber($val, 0, null, '%').'</td>';
+ }
+ foreach ($_unsets AS $value => $text){
+ $val = $user[$value];
+ $val = ($all > 0) ? ($val / $all * 100) : 0;
+ $output .= '<td>'.common::formatNumber($val, 0, null, '%').'</td>';
+ }
+ }
+
+ $output .= '</tr>';
+ }
+
+ $output .= '</tbody>';
+
+ $output .= '</table>';
+ }
+
+
+ function encodeText($text)
+ {
+ // popravimo sumnike ce je potrebno
+ $stringIn = array("&#269;","&#353;","&#273;","&#263;","&#382;","&#268;","&#352;","&#272;","&#262;","&#381;","&nbsp;");
+ $stringOut = array("Ä","Å¡","Ä‘","ć","ž","ÄŒ","Å ","Ä","Ć","Ž"," ");
+
+ //$text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ $text = str_replace($stringIn, $stringOut, $text);
+ return $text;
+ }
+
+ function enkaEncode($text)
+ { // popravimo sumnike ce je potrebno
+ $text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
+ return strip_tags($text);
+ }
+
+ function formatNumber ($value, $digit = 0, $sufix = "") {
+ if ($value <> 0 && $value != null)
+ $result = round($value, $digit);
+ else
+ $result = "0";
+ //$result = number_format($result, $digit, '.', ',') . $sufix;
+ $result = number_format($result, $digit, ',', '') . $sufix;
+
+ return $result;
+ }
+
+}
+
+?> \ No newline at end of file
diff --git a/admin/exportclases/config/lang/eng.php b/admin/exportclases/config/lang/eng.php
new file mode 100644
index 0000000..2d21faf
--- /dev/null
+++ b/admin/exportclases/config/lang/eng.php
@@ -0,0 +1,50 @@
+<?php
+//============================================================+
+// File name : eng.php
+// Begin : 2004-03-03
+// Last Update : 2008-11-17
+//
+// Description : Language module for TCPDF
+// (contains translated texts)
+//
+// Author: Nicola Asuni
+//
+// (c) Copyright:
+// Nicola Asuni
+// Tecnick.com s.r.l.
+// Via Della Pace, 11
+// 09044 Quartucciu (CA)
+// ITALY
+// www.tecnick.com
+// info@tecnick.com
+//============================================================+
+
+/**
+ * TCPDF language file (contains translated texts).
+ * @package com.tecnick.tcpdf
+ * @abstract TCPDF language file.
+ * @author Nicola Asuni
+ * @copyright 2004-2009 Nicola Asuni - Tecnick.com S.r.l (www.tecnick.com) Via Della Pace, 11 - 09044 - Quartucciu (CA) - ITALY - www.tecnick.com - info@tecnick.com
+ * @link http://tcpdf.sourceforge.net
+ * @license http://www.gnu.org/copyleft/lesser.html LGPL
+ * @since 2004-03-03
+ */
+
+// ENGLISH
+
+global $l;
+$l = Array();
+
+// PAGE META DESCRIPTORS --------------------------------------
+
+$l['a_meta_charset'] = 'UTF-8';
+$l['a_meta_dir'] = 'ltr';
+$l['a_meta_language'] = 'sl';
+
+// TRANSLATIONS --------------------------------------
+$l['w_page'] = 'page';
+
+//============================================================+
+// END OF FILE
+//============================================================+
+?>
diff --git a/admin/exportclases/config/tcpdf_config.php b/admin/exportclases/config/tcpdf_config.php
new file mode 100644
index 0000000..3c1ae06
--- /dev/null
+++ b/admin/exportclases/config/tcpdf_config.php
@@ -0,0 +1,167 @@
+<?php
+//============================================================+
+// File name : tcpdf_config.php
+// Begin : 2004-06-11
+// Last Update : 2009-02-22
+//
+// Description : Configuration file for TCPDF.
+//
+// Author: Nicola Asuni
+//
+// (c) Copyright:
+// Nicola Asuni
+// Tecnick.com s.r.l.
+// Via Della Pace, 11
+// 09044 Quartucciu (CA)
+// ITALY
+// www.tecnick.com
+// info@tecnick.com
+//============================================================+
+
+/**
+ * Configuration file for TCPDF.
+ * @author Nicola Asuni
+ * @copyright 2004-2009 Nicola Asuni - Tecnick.com S.r.l (www.tecnick.com) Via Della Pace, 11 - 09044 - Quartucciu (CA) - ITALY - www.tecnick.com - info@tecnick.com
+ * @package com.tecnick.tcpdf
+ * @version 4.0.014
+ * @link http://tcpdf.sourceforge.net
+ * @license http://www.gnu.org/copyleft/lesser.html LGPL
+ * @since 2004-10-27
+ */
+
+// If you define the constant K_TCPDF_EXTERNAL_CONFIG, the following settings will be ignored.
+
+if (!defined('K_TCPDF_EXTERNAL_CONFIG'))
+{
+
+ // DOCUMENT_ROOT fix for IIS Webserver
+ if ((!isset($_SERVER['DOCUMENT_ROOT'])) OR (empty($_SERVER['DOCUMENT_ROOT'])))
+ {
+ if(isset($_SERVER['SCRIPT_FILENAME'])) {
+ $_SERVER['DOCUMENT_ROOT'] = str_replace( '\\', '/', substr($_SERVER['SCRIPT_FILENAME'], 0, 0-strlen($_SERVER['PHP_SELF'])));
+ } elseif(isset($_SERVER['PATH_TRANSLATED'])) {
+ $_SERVER['DOCUMENT_ROOT'] = str_replace( '\\', '/', substr(str_replace('\\\\', '\\', $_SERVER['PATH_TRANSLATED']), 0, 0-strlen($_SERVER['PHP_SELF'])));
+ } else {
+ // define here your DOCUMENT_ROOT path if the previous fails
+ $_SERVER['DOCUMENT_ROOT'] = '/var/www';
+ }
+ }
+
+ // Automatic calculation for the following K_PATH_MAIN constant
+ $k_path_main = str_replace( '\\', '/', realpath(substr(dirname(__FILE__), 0, 0-strlen('config'))));
+ if (substr($k_path_main, -1) != '/') {
+ $k_path_main .= '/';
+ }
+
+ /**
+ * Installation path (/var/www/tcpdf/).
+ * By default it is automatically calculated but you can also set it as a fixed string to improve performances.
+ */
+ define ('K_PATH_MAIN', $k_path_main);
+
+ // Automatic calculation for the following K_PATH_URL constant
+ if (isset($_SERVER['HTTP_HOST']) AND (!empty($_SERVER['HTTP_HOST'])))
+ {
+ if(isset($_SERVER['HTTPS']) AND (!empty($_SERVER['HTTPS'])) AND strtolower($_SERVER['HTTPS'])!='off') {
+ $k_path_url = 'https://';
+ } else {
+ $k_path_url = 'http://';
+ }
+ $k_path_url .= $_SERVER['HTTP_HOST'];
+ $k_path_url .= str_replace( '\\', '/', substr($_SERVER['PHP_SELF'], 0, -24));
+ }
+
+ /**
+ * URL path to tcpdf installation folder (http://localhost/tcpdf/).
+ * By default it is automatically calculated but you can also set it as a fixed string to improve performances..
+ */
+ define ('K_PATH_URL', $k_path_url);
+
+ /**
+ * path for PDF fonts
+ * use K_PATH_MAIN.'fonts/old/' for old non-UTF8 fonts
+ */
+ define ('K_PATH_FONTS', K_PATH_MAIN.'fonts/');
+
+ /**
+ * cache directory for temporary files (full path)
+ */
+ define ('K_PATH_CACHE', K_PATH_MAIN.'cache/');
+
+ /**
+ * cache directory for temporary files (url path)
+ */
+ define ('K_PATH_URL_CACHE', K_PATH_URL.'cache/');
+
+ /**
+ *images directory
+ */
+ define ('K_PATH_IMAGES', K_PATH_MAIN.'images/');
+
+ /**
+ * blank image
+ */
+ define ('K_BLANK_IMAGE', K_PATH_IMAGES.'_blank.png');
+
+ /**
+ * page format
+ */
+ define ('PDF_PAGE_FORMAT', 'A4');
+
+ /**
+ * page orientation (P=portrait, L=landscape)
+ */
+ define ('PDF_PAGE_ORIENTATION', 'P');
+
+ define ('PDF_UNIT', 'mm');
+
+
+ /**
+ * main font name
+ */
+ define ('PDF_FONT_NAME_MAIN', 'helvetica');
+ /**
+ * main font size
+ */
+ define ('PDF_FONT_SIZE_MAIN', 10);
+
+ /**
+ * data font name
+ */
+ define ('PDF_FONT_NAME_DATA', 'helvetica');
+
+ /**
+ * data font size
+ */
+ define ('PDF_FONT_SIZE_DATA', 8);
+
+ /**
+ * Ratio used to scale the images
+ */
+ define ('PDF_IMAGE_SCALE_RATIO', 4);
+
+ /**
+ * magnification factor for titles
+ */
+ define('HEAD_MAGNIFICATION', 1.1);
+
+ /**
+ * height of cell repect font height
+ */
+ define('K_CELL_HEIGHT_RATIO', 1.25);
+
+ /**
+ * title magnification respect main font size
+ */
+ define('K_TITLE_MAGNIFICATION', 1.3);
+
+ /**
+ * reduction factor for small font
+ */
+ define('K_SMALL_RATIO', 2/3);
+}
+
+//============================================================+
+// END OF FILE
+//============================================================+
+?>
diff --git a/admin/exportclases/fonts/arial1250.php b/admin/exportclases/fonts/arial1250.php
new file mode 100644
index 0000000..afe7c5b
--- /dev/null
+++ b/admin/exportclases/fonts/arial1250.php
@@ -0,0 +1,25 @@
+<?php
+$type='Type1';
+$name='ArialMT';
+$desc=array('Ascent'=>905,'Descent'=>-212,'CapHeight'=>716,'Flags'=>32,'FontBBox'=>'[-46 -283 1000 896]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>750);
+$up=-106;
+$ut=73;
+$cw=array(
+ chr(0)=>750,chr(1)=>750,chr(2)=>750,chr(3)=>750,chr(4)=>750,chr(5)=>750,chr(6)=>750,chr(7)=>750,chr(8)=>750,chr(9)=>750,chr(10)=>750,chr(11)=>750,chr(12)=>750,chr(13)=>750,chr(14)=>750,chr(15)=>750,chr(16)=>750,chr(17)=>750,chr(18)=>750,chr(19)=>750,chr(20)=>750,chr(21)=>750,
+ chr(22)=>750,chr(23)=>750,chr(24)=>750,chr(25)=>750,chr(26)=>750,chr(27)=>750,chr(28)=>750,chr(29)=>750,chr(30)=>750,chr(31)=>750,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584,
+ ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667,
+ 'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
+ 'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833,
+ 'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>750,chr(128)=>556,chr(129)=>750,chr(130)=>222,chr(131)=>750,
+ chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>750,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>667,chr(141)=>611,chr(142)=>611,chr(143)=>611,chr(144)=>750,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>750,chr(153)=>1000,
+ chr(154)=>500,chr(155)=>333,chr(156)=>500,chr(157)=>375,chr(158)=>500,chr(159)=>500,chr(160)=>278,chr(161)=>333,chr(162)=>333,chr(163)=>556,chr(164)=>556,chr(165)=>667,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>667,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>611,
+ chr(176)=>400,chr(177)=>549,chr(178)=>333,chr(179)=>222,chr(180)=>333,chr(181)=>576,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>556,chr(186)=>500,chr(187)=>556,chr(188)=>556,chr(189)=>333,chr(190)=>292,chr(191)=>500,chr(192)=>722,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>556,
+ chr(198)=>722,chr(199)=>722,chr(200)=>722,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>667,chr(205)=>278,chr(206)=>278,chr(207)=>722,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+ chr(220)=>722,chr(221)=>667,chr(222)=>611,chr(223)=>611,chr(224)=>333,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>222,chr(230)=>500,chr(231)=>500,chr(232)=>500,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>556,chr(237)=>278,chr(238)=>278,chr(239)=>615,chr(240)=>556,chr(241)=>556,
+ chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>549,chr(248)=>333,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>278,chr(255)=>333);
+$enc='cp1250';
+$diff='131 /.notdef 136 /.notdef 140 /Sacute /Tcaron 143 /Zacute 152 /.notdef 156 /sacute /tcaron 159 /zacute 161 /caron /breve /Lslash 165 /Aogonek 170 /Scedilla 175 /Zdotaccent 178 /ogonek /lslash 185 /aogonek /scedilla 188 /Lcaron /hungarumlaut /lcaron /zdotaccent /Racute 195 /Abreve 197 /Lacute /Cacute 200 /Ccaron 202 /Eogonek 204 /Ecaron 207 /Dcaron /Dcroat /Nacute /Ncaron 213 /Ohungarumlaut 216 /Rcaron /Uring 219 /Uhungarumlaut 222 /Tcommaaccent 224 /racute 227 /abreve 229 /lacute /cacute 232 /ccaron 234 /eogonek 236 /ecaron 239 /dcaron /dcroat /nacute /ncaron 245 /ohungarumlaut 248 /rcaron /uring 251 /uhungarumlaut 254 /tcommaaccent /dotaccent';
+$file='arial1250.z';
+$size1=5991;
+$size2=28273;
+?>
diff --git a/admin/exportclases/fonts/arialbd1250.php b/admin/exportclases/fonts/arialbd1250.php
new file mode 100644
index 0000000..ecd9d55
--- /dev/null
+++ b/admin/exportclases/fonts/arialbd1250.php
@@ -0,0 +1,25 @@
+<?php
+$type='Type1';
+$name='Arial-BoldMT';
+$desc=array('Ascent'=>905,'Descent'=>-212,'CapHeight'=>716,'Flags'=>32,'FontBBox'=>'[-46 -319 1000 919]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>750);
+$up=-106;
+$ut=105;
+$cw=array(
+ chr(0)=>750,chr(1)=>750,chr(2)=>750,chr(3)=>750,chr(4)=>750,chr(5)=>750,chr(6)=>750,chr(7)=>750,chr(8)=>750,chr(9)=>750,chr(10)=>750,chr(11)=>750,chr(12)=>750,chr(13)=>750,chr(14)=>750,chr(15)=>750,chr(16)=>750,chr(17)=>750,chr(18)=>750,chr(19)=>750,chr(20)=>750,chr(21)=>750,
+ chr(22)=>750,chr(23)=>750,chr(24)=>750,chr(25)=>750,chr(26)=>750,chr(27)=>750,chr(28)=>750,chr(29)=>750,chr(30)=>750,chr(31)=>750,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584,
+ ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722,
+ 'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
+ 'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889,
+ 'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>750,chr(128)=>556,chr(129)=>750,chr(130)=>278,chr(131)=>750,
+ chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>750,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>667,chr(141)=>611,chr(142)=>611,chr(143)=>611,chr(144)=>750,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>750,chr(153)=>1000,
+ chr(154)=>556,chr(155)=>333,chr(156)=>556,chr(157)=>479,chr(158)=>500,chr(159)=>500,chr(160)=>278,chr(161)=>333,chr(162)=>333,chr(163)=>611,chr(164)=>556,chr(165)=>722,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>667,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>611,
+ chr(176)=>400,chr(177)=>549,chr(178)=>333,chr(179)=>278,chr(180)=>333,chr(181)=>576,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>556,chr(186)=>556,chr(187)=>556,chr(188)=>611,chr(189)=>333,chr(190)=>385,chr(191)=>500,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>611,
+ chr(198)=>722,chr(199)=>722,chr(200)=>722,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>667,chr(205)=>278,chr(206)=>278,chr(207)=>722,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+ chr(220)=>722,chr(221)=>667,chr(222)=>611,chr(223)=>611,chr(224)=>389,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>278,chr(230)=>556,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>556,chr(237)=>278,chr(238)=>278,chr(239)=>719,chr(240)=>611,chr(241)=>611,
+ chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>549,chr(248)=>389,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>333,chr(255)=>333);
+$enc='cp1250';
+$diff='131 /.notdef 136 /.notdef 140 /Sacute /Tcaron 143 /Zacute 152 /.notdef 156 /sacute /tcaron 159 /zacute 161 /caron /breve /Lslash 165 /Aogonek 170 /Scedilla 175 /Zdotaccent 178 /ogonek /lslash 185 /aogonek /scedilla 188 /Lcaron /hungarumlaut /lcaron /zdotaccent /Racute 195 /Abreve 197 /Lacute /Cacute 200 /Ccaron 202 /Eogonek 204 /Ecaron 207 /Dcaron /Dcroat /Nacute /Ncaron 213 /Ohungarumlaut 216 /Rcaron /Uring 219 /Uhungarumlaut 222 /Tcommaaccent 224 /racute 227 /abreve 229 /lacute /cacute 232 /ccaron 234 /eogonek 236 /ecaron 239 /dcaron /dcroat /nacute /ncaron 245 /ohungarumlaut 248 /rcaron /uring 251 /uhungarumlaut 254 /tcommaaccent /dotaccent';
+$file='arialbd1250.z';
+$size1=6006;
+$size2=28906;
+?>
diff --git a/admin/exportclases/fonts/arialbi1250.php b/admin/exportclases/fonts/arialbi1250.php
new file mode 100644
index 0000000..0ce81a3
--- /dev/null
+++ b/admin/exportclases/fonts/arialbi1250.php
@@ -0,0 +1,25 @@
+<?php
+$type='Type1';
+$name='Arial-BoldItalicMT';
+$desc=array('Ascent'=>905,'Descent'=>-212,'CapHeight'=>716,'Flags'=>96,'FontBBox'=>'[-109 -298 1068 905]','ItalicAngle'=>-12,'StemV'=>120,'MissingWidth'=>750);
+$up=-106;
+$ut=105;
+$cw=array(
+ chr(0)=>750,chr(1)=>750,chr(2)=>750,chr(3)=>750,chr(4)=>750,chr(5)=>750,chr(6)=>750,chr(7)=>750,chr(8)=>750,chr(9)=>750,chr(10)=>750,chr(11)=>750,chr(12)=>750,chr(13)=>750,chr(14)=>750,chr(15)=>750,chr(16)=>750,chr(17)=>750,chr(18)=>750,chr(19)=>750,chr(20)=>750,chr(21)=>750,
+ chr(22)=>750,chr(23)=>750,chr(24)=>750,chr(25)=>750,chr(26)=>750,chr(27)=>750,chr(28)=>750,chr(29)=>750,chr(30)=>750,chr(31)=>750,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584,
+ ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722,
+ 'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
+ 'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889,
+ 'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>750,chr(128)=>556,chr(129)=>750,chr(130)=>278,chr(131)=>750,
+ chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>750,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>667,chr(141)=>611,chr(142)=>611,chr(143)=>611,chr(144)=>750,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>750,chr(153)=>1000,
+ chr(154)=>556,chr(155)=>333,chr(156)=>556,chr(157)=>479,chr(158)=>500,chr(159)=>500,chr(160)=>278,chr(161)=>333,chr(162)=>333,chr(163)=>611,chr(164)=>556,chr(165)=>722,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>667,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>611,
+ chr(176)=>400,chr(177)=>549,chr(178)=>333,chr(179)=>278,chr(180)=>333,chr(181)=>576,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>556,chr(186)=>556,chr(187)=>556,chr(188)=>611,chr(189)=>333,chr(190)=>396,chr(191)=>500,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>611,
+ chr(198)=>722,chr(199)=>722,chr(200)=>722,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>667,chr(205)=>278,chr(206)=>278,chr(207)=>722,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+ chr(220)=>722,chr(221)=>667,chr(222)=>611,chr(223)=>611,chr(224)=>389,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>278,chr(230)=>556,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>556,chr(237)=>278,chr(238)=>278,chr(239)=>740,chr(240)=>611,chr(241)=>611,
+ chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>549,chr(248)=>389,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>333,chr(255)=>333);
+$enc='cp1250';
+$diff='131 /.notdef 136 /.notdef 140 /Sacute /Tcaron 143 /Zacute 152 /.notdef 156 /sacute /tcaron 159 /zacute 161 /caron /breve /Lslash 165 /Aogonek 170 /Scedilla 175 /Zdotaccent 178 /ogonek /lslash 185 /aogonek /scedilla 188 /Lcaron /hungarumlaut /lcaron /zdotaccent /Racute 195 /Abreve 197 /Lacute /Cacute 200 /Ccaron 202 /Eogonek 204 /Ecaron 207 /Dcaron /Dcroat /Nacute /Ncaron 213 /Ohungarumlaut 216 /Rcaron /Uring 219 /Uhungarumlaut 222 /Tcommaaccent 224 /racute 227 /abreve 229 /lacute /cacute 232 /ccaron 234 /eogonek 236 /ecaron 239 /dcaron /dcroat /nacute /ncaron 245 /ohungarumlaut 248 /rcaron /uring 251 /uhungarumlaut 254 /tcommaaccent /dotaccent';
+$file='arialbi1250.z';
+$size1=6035;
+$size2=29485;
+?>
diff --git a/admin/exportclases/fonts/ariali1250.php b/admin/exportclases/fonts/ariali1250.php
new file mode 100644
index 0000000..6155ff7
--- /dev/null
+++ b/admin/exportclases/fonts/ariali1250.php
@@ -0,0 +1,25 @@
+<?php
+$type='Type1';
+$name='Arial-ItalicMT';
+$desc=array('Ascent'=>905,'Descent'=>-212,'CapHeight'=>716,'Flags'=>96,'FontBBox'=>'[-121 -275 1062 894]','ItalicAngle'=>-12,'StemV'=>70,'MissingWidth'=>750);
+$up=-106;
+$ut=73;
+$cw=array(
+ chr(0)=>750,chr(1)=>750,chr(2)=>750,chr(3)=>750,chr(4)=>750,chr(5)=>750,chr(6)=>750,chr(7)=>750,chr(8)=>750,chr(9)=>750,chr(10)=>750,chr(11)=>750,chr(12)=>750,chr(13)=>750,chr(14)=>750,chr(15)=>750,chr(16)=>750,chr(17)=>750,chr(18)=>750,chr(19)=>750,chr(20)=>750,chr(21)=>750,
+ chr(22)=>750,chr(23)=>750,chr(24)=>750,chr(25)=>750,chr(26)=>750,chr(27)=>750,chr(28)=>750,chr(29)=>750,chr(30)=>750,chr(31)=>750,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584,
+ ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667,
+ 'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
+ 'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833,
+ 'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>750,chr(128)=>556,chr(129)=>750,chr(130)=>222,chr(131)=>750,
+ chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>750,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>667,chr(141)=>611,chr(142)=>611,chr(143)=>611,chr(144)=>750,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>750,chr(153)=>1000,
+ chr(154)=>500,chr(155)=>333,chr(156)=>500,chr(157)=>354,chr(158)=>500,chr(159)=>500,chr(160)=>278,chr(161)=>333,chr(162)=>333,chr(163)=>556,chr(164)=>556,chr(165)=>667,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>667,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>611,
+ chr(176)=>400,chr(177)=>549,chr(178)=>333,chr(179)=>222,chr(180)=>333,chr(181)=>576,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>556,chr(186)=>500,chr(187)=>556,chr(188)=>556,chr(189)=>333,chr(190)=>281,chr(191)=>500,chr(192)=>722,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>556,
+ chr(198)=>722,chr(199)=>722,chr(200)=>722,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>667,chr(205)=>278,chr(206)=>278,chr(207)=>722,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+ chr(220)=>722,chr(221)=>667,chr(222)=>611,chr(223)=>611,chr(224)=>333,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>222,chr(230)=>500,chr(231)=>500,chr(232)=>500,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>556,chr(237)=>278,chr(238)=>278,chr(239)=>625,chr(240)=>556,chr(241)=>556,
+ chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>549,chr(248)=>333,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>278,chr(255)=>333);
+$enc='cp1250';
+$diff='131 /.notdef 136 /.notdef 140 /Sacute /Tcaron 143 /Zacute 152 /.notdef 156 /sacute /tcaron 159 /zacute 161 /caron /breve /Lslash 165 /Aogonek 170 /Scedilla 175 /Zdotaccent 178 /ogonek /lslash 185 /aogonek /scedilla 188 /Lcaron /hungarumlaut /lcaron /zdotaccent /Racute 195 /Abreve 197 /Lacute /Cacute 200 /Ccaron 202 /Eogonek 204 /Ecaron 207 /Dcaron /Dcroat /Nacute /Ncaron 213 /Ohungarumlaut 216 /Rcaron /Uring 219 /Uhungarumlaut 222 /Tcommaaccent 224 /racute 227 /abreve 229 /lacute /cacute 232 /ccaron 234 /eogonek 236 /ecaron 239 /dcaron /dcroat /nacute /ncaron 245 /ohungarumlaut 248 /rcaron /uring 251 /uhungarumlaut 254 /tcommaaccent /dotaccent';
+$file='ariali1250.z';
+$size1=6015;
+$size2=29224;
+?>
diff --git a/admin/exportclases/fonts/arialunicid0.php b/admin/exportclases/fonts/arialunicid0.php
new file mode 100644
index 0000000..2ee5bf1
--- /dev/null
+++ b/admin/exportclases/fonts/arialunicid0.php
@@ -0,0 +1,1768 @@
+<?php
+$type='cidfont0';
+$name='ArialUnicodeMS';
+$desc=array('Ascent'=>1069,'Descent'=>-271,'CapHeight'=>1069,'Flags'=>32,'FontBBox'=>'[-1011 -330 2260 1078]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>600);
+$up=-100;
+$ut=50;
+$dw=1000;
+$cw=array(
+ 32=>278,33=>278,34=>355,35=>556,36=>556,37=>889,38=>667,39=>191,40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,
+ 48=>556,49=>556,50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>278,59=>278,60=>584,61=>584,62=>584,63=>556,
+ 64=>1015,65=>667,66=>667,67=>722,68=>722,69=>667,70=>611,71=>778,72=>722,73=>278,74=>500,75=>667,76=>556,77=>833,78=>722,79=>778,
+ 80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>278,92=>278,93=>278,94=>469,95=>500,
+ 96=>333,97=>556,98=>556,99=>500,100=>556,101=>556,102=>278,103=>556,104=>556,105=>222,106=>222,107=>500,108=>222,109=>833,110=>556,111=>556,
+ 112=>556,113=>556,114=>333,115=>500,116=>278,117=>556,118=>500,119=>722,120=>500,121=>500,122=>500,123=>334,124=>260,125=>334,126=>584,8364=>556,
+ 1027=>567,8218=>222,402=>278,8222=>333,8230=>1000,8224=>556,8225=>556,710=>333,8240=>1000,352=>667,8249=>333,338=>1000,1036=>584,381=>611,1039=>723,8216=>222,
+ 8217=>222,8220=>333,8221=>333,8226=>350,8211=>500,8212=>1000,732=>333,8482=>1000,353=>500,8250=>333,339=>944,1116=>437,382=>500,376=>667,160=>278,161=>333,
+ 162=>556,163=>556,164=>556,165=>556,166=>260,167=>556,168=>333,169=>737,170=>370,171=>556,172=>584,173=>333,174=>737,175=>500,176=>400,177=>584,
+ 178=>333,179=>333,180=>333,181=>556,182=>537,183=>278,184=>333,185=>333,186=>365,187=>556,188=>834,189=>834,190=>834,191=>611,192=>667,193=>667,
+ 194=>667,195=>667,196=>667,197=>667,198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,208=>722,209=>722,
+ 210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722,218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,
+ 226=>556,227=>556,228=>556,229=>556,230=>889,231=>500,232=>556,233=>556,234=>556,235=>556,236=>278,237=>278,238=>278,239=>278,240=>556,241=>556,
+ 242=>556,243=>556,244=>556,245=>556,246=>556,247=>584,248=>611,249=>556,250=>556,251=>556,252=>556,253=>500,254=>556,255=>500,256=>667,257=>556,
+ 258=>667,259=>556,260=>667,261=>556,262=>722,263=>500,264=>722,265=>500,266=>722,267=>500,268=>722,269=>500,270=>722,271=>627,272=>722,273=>556,
+ 274=>667,275=>556,276=>667,277=>556,278=>667,279=>556,280=>667,281=>556,282=>667,283=>556,284=>778,285=>556,286=>778,287=>556,288=>778,289=>556,
+ 290=>778,291=>556,292=>722,293=>556,294=>722,295=>556,296=>278,297=>222,298=>278,299=>222,300=>278,301=>222,302=>278,303=>222,304=>278,305=>278,
+ 306=>751,307=>444,308=>500,309=>222,310=>667,311=>500,312=>437,313=>556,314=>222,315=>556,316=>222,317=>556,318=>222,319=>556,320=>318,321=>556,
+ 322=>222,323=>722,324=>556,325=>722,326=>556,327=>722,328=>556,329=>626,330=>723,331=>556,332=>778,333=>556,334=>778,335=>556,336=>778,337=>556,
+ 340=>722,341=>333,342=>722,343=>333,344=>722,345=>333,346=>667,347=>500,348=>667,349=>500,350=>667,351=>500,354=>611,355=>278,356=>611,357=>406,
+ 358=>611,359=>278,360=>722,361=>556,362=>722,363=>556,364=>722,365=>556,366=>722,367=>556,368=>722,369=>556,370=>722,371=>556,372=>944,373=>722,
+ 374=>667,375=>500,377=>611,378=>500,379=>611,380=>500,383=>222,384=>556,385=>740,386=>655,387=>556,388=>556,389=>556,390=>722,391=>766,392=>579,
+ 393=>722,394=>789,395=>655,396=>556,397=>557,398=>667,399=>729,400=>604,401=>611,403=>791,404=>649,405=>806,406=>245,407=>322,408=>667,409=>500,
+ 410=>322,411=>500,412=>833,413=>722,414=>556,415=>778,416=>776,417=>556,418=>1019,419=>782,420=>735,421=>556,422=>722,423=>667,424=>500,425=>602,
+ 426=>366,427=>278,428=>571,429=>278,430=>611,431=>776,432=>620,433=>748,434=>667,435=>752,436=>615,437=>611,438=>500,439=>628,440=>628,441=>526,
+ 442=>480,443=>556,444=>556,445=>526,446=>556,447=>556,448=>278,449=>464,450=>474,451=>278,452=>1333,453=>1222,454=>1056,455=>1030,456=>778,457=>444,
+ 458=>1222,459=>944,460=>778,461=>667,462=>556,463=>278,464=>278,465=>778,466=>556,467=>722,468=>556,469=>722,470=>556,471=>722,472=>556,473=>722,
+ 474=>556,475=>722,476=>556,477=>556,478=>667,479=>556,480=>667,481=>556,482=>1000,483=>889,484=>778,485=>556,486=>778,487=>556,488=>667,489=>500,
+ 490=>778,491=>556,492=>778,493=>556,494=>534,495=>534,496=>222,497=>1333,498=>1222,499=>1056,500=>778,501=>556,506=>667,507=>556,508=>1000,509=>889,
+ 510=>778,511=>611,512=>667,513=>556,514=>667,515=>556,516=>667,517=>556,518=>667,519=>556,520=>278,521=>278,522=>278,523=>278,524=>778,525=>556,
+ 526=>778,527=>556,528=>722,529=>333,530=>722,531=>333,532=>722,533=>556,534=>722,535=>556,592=>556,593=>556,594=>556,595=>556,596=>500,597=>500,
+ 598=>556,599=>556,600=>556,601=>556,602=>777,603=>485,604=>485,605=>686,606=>519,607=>260,608=>556,609=>556,610=>557,611=>500,612=>500,613=>556,
+ 614=>556,615=>556,616=>242,617=>282,618=>356,619=>356,620=>425,621=>222,622=>635,623=>833,624=>833,625=>833,626=>556,627=>556,628=>558,629=>556,
+ 630=>715,631=>674,632=>558,633=>333,634=>333,635=>333,636=>333,637=>333,638=>312,639=>312,640=>530,641=>530,642=>500,643=>216,644=>276,645=>216,
+ 646=>222,647=>278,648=>278,649=>596,650=>558,651=>556,652=>500,653=>722,654=>500,655=>500,656=>500,657=>564,658=>530,659=>530,660=>464,661=>464,
+ 662=>464,663=>500,664=>614,665=>526,666=>519,667=>557,668=>558,669=>222,670=>500,671=>416,672=>556,673=>464,674=>464,675=>966,676=>966,677=>1030,
+ 678=>689,679=>484,680=>718,688=>326,689=>326,690=>153,691=>201,692=>201,693=>201,694=>304,695=>389,696=>278,697=>222,698=>372,699=>222,700=>222,
+ 701=>222,702=>222,703=>222,704=>250,705=>250,706=>320,707=>320,708=>320,709=>320,711=>333,712=>192,713=>333,714=>333,715=>333,716=>192,717=>333,
+ 718=>333,719=>333,720=>300,721=>300,722=>222,723=>222,724=>340,725=>340,726=>280,727=>362,728=>333,729=>333,730=>333,731=>333,733=>333,734=>333,
+ 736=>278,737=>153,738=>270,739=>274,740=>325,741=>360,742=>360,743=>360,744=>360,745=>360,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,
+ 774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,
+ 790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,
+ 806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,
+ 822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,
+ 864=>0,865=>0,884=>308,885=>308,890=>278,894=>278,900=>278,901=>278,902=>667,903=>278,904=>704,905=>759,906=>315,908=>778,910=>746,911=>758,
+ 912=>222,913=>667,914=>667,915=>550,916=>682,917=>667,918=>611,919=>722,920=>778,921=>278,922=>667,923=>667,924=>833,925=>722,926=>650,927=>778,
+ 928=>722,929=>667,931=>602,932=>611,933=>667,934=>808,935=>667,936=>804,937=>758,938=>278,939=>667,940=>576,941=>434,942=>556,943=>222,944=>551,
+ 945=>576,946=>563,947=>500,948=>557,949=>434,950=>440,951=>556,952=>556,953=>222,954=>498,955=>500,956=>553,957=>500,958=>432,959=>556,960=>678,
+ 961=>571,962=>472,963=>619,964=>382,965=>551,966=>649,967=>522,968=>729,969=>766,970=>222,971=>551,972=>556,973=>551,974=>766,976=>563,977=>616,
+ 978=>631,979=>726,980=>631,981=>644,982=>781,986=>722,988=>578,990=>570,992=>692,994=>880,995=>833,996=>684,997=>558,998=>680,999=>529,1000=>557,
+ 1001=>505,1002=>623,1003=>603,1004=>610,1005=>611,1006=>568,1007=>434,1008=>600,1009=>571,1010=>500,1011=>222,1025=>667,1026=>865,1028=>717,1029=>667,1030=>278,
+ 1031=>278,1032=>500,1033=>1105,1034=>1009,1035=>867,1038=>635,1040=>667,1041=>655,1042=>667,1043=>567,1044=>677,1045=>667,1046=>923,1047=>604,1048=>722,1049=>722,
+ 1050=>584,1051=>705,1052=>833,1053=>722,1054=>778,1055=>723,1056=>667,1057=>722,1058=>611,1059=>635,1060=>760,1061=>667,1062=>740,1063=>684,1064=>920,1065=>939,
+ 1066=>793,1067=>883,1068=>655,1069=>717,1070=>1006,1071=>722,1072=>556,1073=>573,1074=>531,1075=>383,1076=>583,1077=>556,1078=>669,1079=>458,1080=>559,1081=>559,
+ 1082=>437,1083=>571,1084=>683,1085=>552,1086=>556,1087=>542,1088=>556,1089=>500,1090=>458,1091=>500,1092=>823,1093=>500,1094=>562,1095=>533,1096=>802,1097=>823,
+ 1098=>620,1099=>717,1100=>523,1101=>510,1102=>744,1103=>542,1105=>556,1106=>556,1107=>383,1108=>510,1109=>500,1110=>222,1111=>278,1112=>222,1113=>873,1114=>811,
+ 1115=>556,1118=>500,1119=>542,1120=>976,1121=>766,1122=>656,1123=>521,1124=>950,1125=>694,1126=>667,1127=>597,1128=>952,1129=>817,1130=>654,1131=>600,1132=>932,
+ 1133=>817,1134=>604,1135=>458,1136=>804,1137=>729,1138=>778,1139=>556,1140=>667,1141=>500,1142=>667,1143=>500,1144=>1279,1145=>1060,1146=>778,1147=>556,1148=>976,
+ 1149=>766,1150=>976,1151=>766,1152=>722,1153=>514,1154=>686,1155=>334,1156=>382,1157=>334,1158=>334,1168=>435,1169=>339,1170=>567,1171=>383,1172=>656,1173=>556,
+ 1174=>923,1175=>669,1176=>604,1177=>458,1178=>584,1179=>437,1180=>584,1181=>437,1182=>584,1183=>437,1184=>764,1185=>537,1186=>741,1187=>573,1188=>900,1189=>670,
+ 1190=>736,1191=>560,1192=>778,1193=>560,1194=>722,1195=>500,1196=>611,1197=>458,1198=>667,1199=>500,1200=>667,1201=>500,1202=>667,1203=>500,1204=>916,1205=>661,
+ 1206=>684,1207=>533,1208=>684,1209=>533,1210=>684,1211=>556,1212=>829,1213=>667,1214=>829,1215=>667,1216=>278,1217=>923,1218=>669,1219=>584,1220=>437,1223=>735,
+ 1224=>570,1227=>684,1228=>533,1232=>667,1233=>556,1234=>667,1235=>556,1236=>1000,1237=>889,1238=>667,1239=>556,1240=>729,1241=>556,1242=>729,1243=>556,1244=>923,
+ 1245=>669,1246=>604,1247=>458,1248=>604,1249=>492,1250=>722,1251=>559,1252=>722,1253=>559,1254=>778,1255=>556,1256=>778,1257=>556,1258=>778,1259=>556,1262=>635,
+ 1263=>500,1264=>635,1265=>500,1266=>635,1267=>500,1268=>684,1269=>533,1272=>883,1273=>717,1329=>635,1330=>531,1331=>583,1332=>583,1333=>531,1334=>531,1335=>427,
+ 1336=>531,1337=>750,1338=>635,1339=>531,1340=>375,1341=>583,1342=>698,1343=>531,1344=>427,1345=>531,1346=>583,1347=>531,1348=>635,1349=>698,1350=>635,1351=>635,
+ 1352=>531,1353=>531,1354=>698,1355=>531,1356=>635,1357=>531,1358=>698,1359=>583,1360=>479,1361=>583,1362=>531,1363=>698,1364=>698,1365=>635,1366=>750,1369=>271,
+ 1370=>271,1371=>150,1372=>300,1373=>271,1374=>271,1375=>420,1377=>583,1378=>427,1379=>427,1380=>427,1381=>427,1382=>427,1383=>427,1384=>427,1385=>459,1386=>427,
+ 1387=>427,1388=>323,1389=>531,1390=>427,1391=>427,1392=>427,1393=>427,1394=>427,1395=>427,1396=>427,1397=>271,1398=>427,1399=>375,1400=>427,1401=>375,1402=>583,
+ 1403=>427,1404=>427,1405=>427,1406=>427,1407=>583,1408=>427,1409=>427,1410=>323,1411=>583,1412=>375,1413=>375,1414=>583,1415=>527,1417=>271,1425=>360,1426=>360,
+ 1427=>360,1428=>360,1429=>360,1430=>360,1431=>360,1432=>360,1433=>360,1434=>360,1435=>360,1436=>360,1437=>360,1438=>360,1439=>360,1440=>360,1441=>360,1443=>360,
+ 1444=>360,1445=>360,1446=>360,1447=>360,1448=>360,1449=>360,1450=>360,1451=>360,1452=>360,1453=>360,1454=>360,1455=>360,1456=>360,1457=>360,1458=>360,1459=>360,
+ 1460=>360,1461=>360,1462=>360,1463=>360,1464=>360,1465=>360,1467=>360,1468=>360,1469=>360,1470=>366,1471=>360,1472=>225,1473=>360,1474=>360,1475=>238,1476=>360,
+ 1488=>577,1489=>563,1490=>411,1491=>512,1492=>594,1493=>316,1494=>326,1495=>594,1496=>594,1497=>316,1498=>507,1499=>527,1500=>484,1501=>594,1502=>594,1503=>316,
+ 1504=>338,1505=>604,1506=>550,1507=>567,1508=>569,1509=>505,1510=>514,1511=>583,1512=>507,1513=>700,1514=>633,1520=>590,1521=>590,1522=>590,1523=>216,1524=>412,
+ 1548=>278,1563=>278,1567=>556,1569=>529,1570=>243,1571=>243,1572=>470,1573=>243,1574=>731,1575=>243,1576=>771,1577=>514,1578=>771,1579=>771,1580=>544,1581=>544,
+ 1582=>544,1583=>430,1584=>430,1585=>421,1586=>421,1587=>1194,1588=>1194,1589=>1291,1590=>1291,1591=>843,1592=>843,1593=>594,1594=>594,1600=>279,1601=>957,1602=>800,
+ 1603=>757,1604=>662,1605=>589,1606=>692,1607=>514,1608=>470,1609=>731,1610=>731,1611=>0,1612=>0,1613=>0,1614=>0,1615=>0,1616=>0,1617=>0,1618=>0,
+ 1632=>480,1633=>480,1634=>480,1635=>480,1636=>480,1637=>480,1638=>480,1639=>480,1640=>480,1641=>480,1642=>547,1643=>278,1644=>278,1645=>438,1648=>0,1649=>243,
+ 1650=>243,1651=>243,1652=>0,1653=>380,1654=>470,1655=>548,1656=>772,1657=>771,1658=>771,1659=>771,1660=>771,1661=>771,1662=>771,1663=>771,1664=>771,1665=>544,
+ 1666=>544,1667=>544,1668=>544,1669=>544,1670=>544,1671=>544,1672=>430,1673=>430,1674=>430,1675=>430,1676=>430,1677=>430,1678=>430,1679=>430,1680=>430,1681=>421,
+ 1682=>421,1683=>421,1684=>421,1685=>421,1686=>419,1687=>421,1688=>421,1689=>421,1690=>1194,1691=>1194,1692=>1194,1693=>1291,1694=>1291,1695=>843,1696=>594,1697=>957,
+ 1698=>957,1699=>957,1700=>957,1701=>957,1702=>957,1703=>800,1704=>800,1705=>828,1706=>1058,1707=>828,1708=>757,1709=>757,1710=>757,1711=>828,1712=>828,1713=>828,
+ 1714=>828,1715=>828,1716=>828,1717=>662,1718=>662,1719=>662,1722=>692,1723=>692,1724=>692,1725=>692,1726=>706,1728=>514,1729=>509,1730=>509,1731=>509,1732=>470,
+ 1733=>470,1734=>470,1735=>470,1736=>470,1737=>470,1738=>470,1739=>470,1740=>731,1741=>841,1742=>731,1744=>731,1745=>731,1746=>550,1747=>550,1748=>279,1749=>514,
+ 1750=>726,1751=>558,1752=>321,1753=>318,1754=>342,1755=>373,1756=>716,1757=>688,1758=>852,1759=>288,1760=>288,1761=>388,1762=>350,1763=>716,1764=>146,1765=>282,
+ 1766=>339,1767=>339,1768=>415,1769=>514,1770=>220,1771=>220,1772=>220,1773=>350,1776=>480,1777=>480,1778=>480,1779=>480,1780=>480,1781=>480,1782=>480,1783=>480,
+ 1784=>480,1785=>480,2305=>0,2306=>0,2307=>294,2309=>693,2310=>910,2311=>533,2312=>533,2313=>590,2314=>713,2315=>920,2316=>677,2317=>611,2318=>611,2319=>611,
+ 2320=>611,2321=>910,2322=>910,2323=>910,2324=>910,2325=>667,2326=>732,2327=>593,2328=>639,2329=>624,2330=>688,2331=>713,2332=>688,2333=>712,2334=>697,2335=>502,
+ 2336=>533,2337=>583,2338=>523,2339=>693,2340=>585,2341=>638,2342=>533,2343=>640,2344=>585,2345=>585,2346=>565,2347=>699,2348=>592,2349=>689,2350=>633,2351=>600,
+ 2352=>486,2353=>486,2354=>680,2355=>730,2356=>730,2357=>592,2358=>684,2359=>608,2360=>646,2361=>546,2364=>0,2365=>373,2366=>319,2367=>319,2368=>319,2369=>0,
+ 2370=>0,2371=>0,2372=>0,2373=>0,2374=>0,2375=>0,2376=>0,2377=>319,2378=>319,2379=>319,2380=>319,2381=>0,2384=>884,2385=>0,2386=>0,2387=>0,
+ 2388=>0,2392=>667,2393=>732,2394=>593,2395=>688,2396=>583,2397=>523,2398=>699,2399=>600,2400=>920,2401=>677,2402=>0,2403=>0,2404=>331,2405=>513,2406=>639,
+ 2407=>639,2408=>639,2409=>639,2410=>639,2411=>639,2412=>639,2413=>639,2414=>639,2415=>639,2416=>362,2433=>0,2434=>430,2435=>430,2437=>786,2438=>1030,2439=>582,
+ 2440=>603,2441=>648,2442=>757,2443=>758,2444=>630,2447=>685,2448=>746,2451=>711,2452=>776,2453=>779,2454=>655,2455=>606,2456=>645,2457=>661,2458=>554,2459=>585,
+ 2460=>729,2461=>752,2462=>893,2463=>567,2464=>625,2465=>648,2466=>567,2467=>598,2468=>680,2469=>645,2470=>609,2471=>596,2472=>595,2474=>635,2475=>780,2476=>593,
+ 2477=>677,2478=>621,2479=>601,2480=>593,2482=>640,2486=>598,2487=>596,2488=>637,2489=>582,2492=>0,2494=>245,2495=>245,2496=>245,2497=>0,2498=>0,2499=>0,
+ 2500=>0,2503=>309,2504=>309,2507=>932,2508=>932,2509=>0,2519=>245,2524=>648,2525=>553,2527=>596,2528=>758,2529=>630,2530=>0,2531=>335,2534=>610,2535=>559,
+ 2536=>595,2537=>711,2538=>610,2539=>661,2540=>661,2541=>559,2542=>661,2543=>600,2544=>593,2545=>593,2546=>601,2547=>567,2548=>601,2549=>699,2550=>661,2551=>267,
+ 2552=>610,2553=>424,2554=>548,2562=>0,2565=>691,2566=>936,2567=>803,2568=>803,2569=>678,2570=>678,2575=>557,2576=>691,2579=>678,2580=>691,2581=>602,2582=>567,
+ 2583=>641,2584=>688,2585=>565,2586=>592,2587=>603,2588=>591,2589=>541,2590=>558,2591=>543,2592=>581,2593=>596,2594=>640,2595=>640,2596=>591,2597=>564,2598=>640,
+ 2599=>564,2600=>581,2602=>564,2603=>551,2604=>560,2605=>549,2606=>558,2607=>652,2608=>540,2610=>677,2611=>677,2613=>601,2614=>558,2616=>558,2617=>549,2620=>0,
+ 2622=>246,2623=>246,2624=>246,2625=>0,2626=>0,2631=>0,2632=>0,2635=>0,2636=>0,2637=>0,2649=>567,2650=>690,2651=>591,2652=>591,2654=>581,2662=>591,
+ 2663=>591,2664=>591,2665=>591,2666=>591,2667=>591,2668=>591,2669=>591,2670=>591,2671=>591,2672=>0,2673=>0,2674=>557,2675=>678,2676=>894,2689=>0,2690=>0,
+ 2691=>300,2693=>781,2694=>1044,2695=>589,2696=>589,2697=>560,2698=>758,2699=>806,2701=>781,2703=>781,2704=>781,2705=>1044,2707=>1044,2708=>1044,2709=>413,2710=>773,
+ 2711=>606,2712=>558,2713=>483,2714=>600,2715=>691,2716=>811,2717=>647,2718=>651,2719=>453,2720=>450,2721=>425,2722=>478,2723=>694,2724=>534,2725=>553,2726=>446,
+ 2727=>541,2728=>582,2730=>572,2731=>437,2732=>663,2733=>756,2734=>594,2735=>493,2736=>392,2738=>613,2739=>656,2741=>538,2742=>611,2743=>507,2744=>663,2745=>587,
+ 2748=>0,2749=>478,2750=>273,2751=>273,2752=>273,2753=>0,2754=>0,2755=>0,2756=>0,2757=>0,2759=>0,2760=>0,2761=>273,2763=>273,2764=>273,2765=>0,
+ 2768=>843,2784=>893,2790=>625,2791=>625,2792=>625,2793=>625,2794=>625,2795=>625,2796=>625,2797=>625,2798=>625,2799=>625,2817=>0,2818=>306,2819=>391,2821=>590,
+ 2822=>808,2823=>658,2824=>658,2825=>633,2826=>654,2827=>636,2828=>540,2831=>560,2832=>938,2835=>600,2836=>973,2837=>603,2838=>620,2839=>620,2840=>605,2841=>712,
+ 2842=>579,2843=>579,2844=>593,2845=>564,2846=>581,2847=>604,2848=>578,2849=>579,2850=>579,2851=>607,2852=>579,2853=>587,2854=>579,2855=>602,2856=>579,2858=>605,
+ 2859=>728,2860=>579,2861=>643,2862=>605,2863=>628,2864=>619,2866=>653,2867=>593,2870=>620,2871=>605,2872=>605,2873=>579,2876=>0,2877=>333,2878=>218,2879=>0,
+ 2880=>294,2881=>0,2882=>0,2883=>0,2887=>479,2888=>479,2891=>1026,2892=>1026,2893=>0,2902=>0,2903=>218,2908=>579,2909=>579,2911=>599,2912=>636,2913=>540,
+ 2918=>578,2919=>480,2920=>480,2921=>622,2922=>506,2923=>605,2924=>529,2925=>548,2926=>512,2927=>528,2928=>561,2946=>0,2947=>742,2949=>1002,2950=>1118,2951=>994,
+ 2952=>660,2953=>1012,2954=>1231,2958=>726,2959=>731,2960=>870,2962=>763,2963=>763,2964=>1636,2965=>667,2969=>830,2970=>584,2972=>876,2974=>986,2975=>802,2979=>1295,
+ 2980=>656,2984=>630,2985=>1012,2986=>694,2990=>727,2991=>790,2992=>545,2993=>718,2994=>821,2995=>871,2996=>724,2997=>873,2999=>1087,3000=>1098,3001=>1274,3006=>547,
+ 3007=>172,3008=>93,3009=>519,3010=>814,3014=>748,3015=>681,3016=>956,3018=>1666,3019=>1666,3020=>1994,3021=>0,3031=>871,3047=>667,3048=>1012,3049=>751,3050=>740,
+ 3051=>924,3052=>884,3053=>726,3054=>1002,3055=>825,3056=>717,3057=>719,3058=>774,3073=>365,3074=>601,3075=>346,3077=>720,3078=>786,3079=>567,3080=>1159,3081=>690,
+ 3082=>1047,3083=>1299,3084=>913,3086=>625,3087=>625,3088=>712,3090=>655,3091=>655,3092=>862,3093=>515,3094=>680,3095=>526,3096=>943,3097=>655,3098=>684,3099=>684,
+ 3100=>670,3101=>1205,3102=>732,3103=>888,3104=>597,3105=>709,3106=>709,3107=>809,3108=>715,3109=>702,3110=>702,3111=>702,3112=>607,3114=>623,3115=>623,3116=>681,
+ 3117=>681,3118=>932,3119=>1203,3120=>597,3121=>893,3122=>631,3123=>608,3125=>620,3126=>541,3127=>667,3128=>640,3129=>911,3134=>644,3135=>298,3136=>298,3137=>361,
+ 3138=>682,3139=>342,3140=>704,3142=>624,3143=>624,3144=>900,3146=>849,3147=>849,3148=>976,3149=>669,3157=>298,3158=>119,3168=>1620,3169=>1281,3174=>840,3175=>840,
+ 3176=>840,3177=>840,3178=>840,3179=>840,3180=>840,3181=>840,3182=>840,3183=>840,3202=>440,3203=>251,3205=>654,3206=>654,3207=>631,3208=>891,3209=>957,3210=>1293,
+ 3211=>1044,3212=>744,3214=>650,3215=>650,3216=>659,3218=>667,3219=>667,3220=>667,3221=>462,3222=>749,3223=>543,3224=>779,3225=>674,3226=>682,3227=>660,3228=>667,
+ 3229=>1171,3230=>926,3231=>671,3232=>557,3233=>669,3234=>669,3235=>728,3236=>544,3237=>672,3238=>672,3239=>672,3240=>560,3242=>668,3243=>668,3244=>681,3245=>687,
+ 3246=>972,3247=>1101,3248=>556,3249=>677,3250=>661,3251=>545,3253=>666,3254=>553,3255=>670,3256=>549,3257=>716,3262=>425,3263=>341,3264=>680,3265=>354,3266=>714,
+ 3267=>386,3268=>638,3270=>307,3271=>670,3272=>462,3274=>908,3275=>1251,3276=>434,3277=>336,3285=>344,3286=>404,3294=>673,3296=>1695,3297=>978,3302=>549,3303=>549,
+ 3304=>549,3305=>549,3306=>549,3307=>549,3308=>549,3309=>549,3310=>549,3311=>549,3330=>368,3331=>305,3333=>1201,3334=>1351,3335=>905,3336=>1459,3337=>635,3338=>1198,
+ 3339=>861,3340=>957,3342=>1211,3343=>1202,3344=>1839,3346=>642,3347=>1114,3348=>1195,3349=>861,3350=>982,3351=>874,3352=>1354,3353=>957,3354=>1016,3355=>1266,3356=>712,
+ 3357=>1454,3358=>1215,3359=>563,3360=>565,3361=>1192,3362=>1244,3363=>1268,3364=>878,3365=>966,3366=>545,3367=>879,3368=>879,3370=>1031,3371=>1175,3372=>1334,3373=>546,
+ 3374=>643,3375=>949,3376=>642,3377=>555,3378=>945,3379=>631,3380=>553,3381=>959,3382=>936,3383=>1122,3384=>1190,3385=>1112,3390=>475,3391=>418,3392=>442,3393=>340,
+ 3394=>340,3395=>473,3398=>640,3399=>530,3400=>1279,3402=>1368,3403=>1258,3404=>1447,3405=>0,3415=>553,3424=>861,3425=>1100,3430=>1095,3431=>929,3432=>854,3433=>1181,
+ 3434=>658,3435=>972,3436=>1210,3437=>650,3438=>959,3439=>896,3585=>595,3586=>648,3587=>665,3588=>608,3589=>608,3590=>665,3591=>471,3592=>556,3593=>652,3594=>664,
+ 3595=>681,3596=>816,3597=>849,3598=>620,3599=>620,3600=>541,3601=>785,3602=>826,3603=>887,3604=>598,3605=>605,3606=>595,3607=>650,3608=>541,3609=>652,3610=>608,
+ 3611=>608,3612=>630,3613=>630,3614=>695,3615=>695,3616=>620,3617=>581,3618=>588,3619=>501,3620=>595,3621=>569,3622=>620,3623=>519,3624=>592,3625=>659,3626=>574,
+ 3627=>654,3628=>695,3629=>566,3630=>574,3631=>517,3632=>452,3633=>0,3634=>496,3635=>496,3636=>0,3637=>0,3638=>0,3639=>0,3640=>0,3641=>0,3642=>0,
+ 3647=>687,3648=>302,3649=>571,3650=>478,3651=>515,3652=>515,3653=>496,3654=>506,3655=>0,3656=>0,3657=>0,3658=>0,3659=>0,3660=>0,3661=>0,3662=>0,
+ 3663=>555,3664=>598,3665=>640,3666=>688,3667=>690,3668=>657,3669=>657,3670=>635,3671=>839,3672=>693,3673=>769,3674=>673,3675=>994,3713=>775,3714=>707,3716=>724,
+ 3719=>524,3720=>690,3722=>678,3725=>711,3732=>719,3733=>834,3734=>776,3735=>916,3737=>744,3738=>740,3739=>740,3740=>834,3741=>834,3742=>854,3743=>854,3745=>775,
+ 3746=>724,3747=>697,3749=>700,3751=>700,3754=>708,3755=>916,3757=>700,3758=>697,3759=>658,3760=>432,3761=>534,3762=>476,3763=>476,3764=>778,3765=>778,3766=>778,
+ 3767=>778,3768=>778,3769=>778,3771=>778,3772=>778,3773=>670,3776=>420,3777=>806,3778=>430,3779=>446,3780=>346,3782=>571,3784=>778,3785=>778,3786=>778,3787=>778,
+ 3788=>778,3789=>778,3792=>721,3793=>719,3794=>601,3795=>711,3796=>686,3797=>686,3798=>834,3799=>756,3800=>724,3801=>906,3804=>1272,3805=>1272,3840=>600,3841=>600,
+ 3842=>600,3843=>600,3844=>600,3845=>600,3846=>600,3847=>600,3848=>600,3849=>600,3850=>600,3851=>600,3852=>600,3853=>600,3854=>600,3855=>600,3856=>600,3857=>600,
+ 3858=>600,3859=>600,3860=>600,3861=>600,3862=>600,3863=>600,3864=>600,3865=>600,3866=>600,3867=>600,3868=>600,3869=>600,3870=>600,3871=>600,3872=>600,3873=>600,
+ 3874=>600,3875=>600,3876=>600,3877=>600,3878=>600,3879=>600,3880=>600,3881=>600,3882=>600,3883=>600,3884=>600,3885=>600,3886=>600,3887=>600,3888=>600,3889=>600,
+ 3890=>600,3891=>600,3892=>600,3893=>600,3894=>600,3895=>600,3896=>600,3897=>600,3898=>600,3899=>600,3900=>600,3901=>600,3902=>600,3903=>600,3904=>600,3905=>600,
+ 3906=>600,3907=>600,3908=>600,3909=>600,3910=>600,3911=>600,3913=>600,3914=>600,3915=>600,3916=>600,3917=>600,3918=>600,3919=>600,3920=>600,3921=>600,3922=>600,
+ 3923=>600,3924=>600,3925=>600,3926=>600,3927=>600,3928=>600,3929=>600,3930=>600,3931=>600,3932=>600,3933=>600,3934=>600,3935=>600,3936=>600,3937=>600,3938=>600,
+ 3939=>600,3940=>600,3941=>600,3942=>600,3943=>600,3944=>600,3945=>600,3953=>600,3954=>600,3955=>600,3956=>600,3957=>600,3958=>600,3959=>600,3960=>600,3961=>600,
+ 3962=>600,3963=>600,3964=>600,3965=>600,3966=>600,3967=>600,3968=>600,3969=>600,3970=>600,3971=>600,3972=>600,3973=>600,3974=>600,3975=>600,3976=>600,3977=>600,
+ 3978=>600,3979=>600,3984=>600,3985=>600,3986=>600,3987=>600,3988=>600,3989=>600,3991=>600,3993=>600,3994=>600,3995=>600,3996=>600,3997=>600,3998=>600,3999=>600,
+ 4000=>600,4001=>600,4002=>600,4003=>600,4004=>600,4005=>600,4006=>600,4007=>600,4008=>600,4009=>600,4010=>600,4011=>600,4012=>600,4013=>600,4017=>600,4018=>600,
+ 4019=>600,4020=>600,4021=>600,4022=>600,4023=>600,4025=>600,4256=>662,4257=>677,4258=>708,4259=>696,4260=>609,4261=>790,4262=>664,4263=>785,4264=>560,4265=>634,
+ 4266=>782,4267=>701,4268=>629,4269=>682,4270=>705,4271=>692,4272=>734,4273=>615,4274=>592,4275=>680,4276=>679,4277=>705,4278=>643,4279=>623,4280=>623,4281=>629,
+ 4282=>633,4283=>770,4284=>592,4285=>662,4286=>629,4287=>672,4288=>735,4289=>576,4290=>606,4291=>605,4292=>676,4293=>792,4304=>435,4305=>556,4306=>565,4307=>872,
+ 4308=>506,4309=>544,4310=>723,4311=>868,4312=>530,4313=>532,4314=>955,4315=>552,4316=>565,4317=>712,4318=>547,4319=>574,4320=>685,4321=>554,4322=>806,4323=>810,
+ 4324=>777,4325=>502,4326=>686,4327=>512,4328=>552,4329=>496,4330=>568,4331=>552,4332=>592,4333=>565,4334=>552,4335=>741,4336=>549,4337=>659,4338=>559,4339=>524,
+ 4340=>482,4341=>565,4342=>822,4347=>506,4352=>1000,4353=>1000,4354=>1000,4355=>1000,4356=>1000,4357=>1000,4358=>1000,4359=>1000,4360=>1000,4361=>1000,4362=>1000,4363=>1000,
+ 4364=>1000,4365=>1000,4366=>1000,4367=>1000,4368=>1000,4369=>1000,4370=>1000,4371=>1000,4372=>1000,4373=>1000,4374=>1000,4375=>1000,4376=>1000,4377=>1000,4378=>1000,4379=>1000,
+ 4380=>1000,4381=>1000,4382=>1000,4383=>1000,4384=>1000,4385=>1000,4386=>1000,4387=>1000,4388=>1000,4389=>1000,4390=>1000,4391=>1000,4392=>1000,4393=>1000,4394=>1000,4395=>1000,
+ 4396=>1000,4397=>1000,4398=>1000,4399=>1000,4400=>1000,4401=>1000,4402=>1000,4403=>1000,4404=>1000,4405=>1000,4406=>1000,4407=>1000,4408=>1000,4409=>1000,4410=>1000,4411=>1000,
+ 4412=>1000,4413=>1000,4414=>1000,4415=>1000,4416=>1000,4417=>1000,4418=>1000,4419=>1000,4420=>1000,4421=>1000,4422=>1000,4423=>1000,4424=>1000,4425=>1000,4426=>1000,4427=>1000,
+ 4428=>1000,4429=>1000,4430=>1000,4431=>1000,4432=>1000,4433=>1000,4434=>1000,4435=>1000,4436=>1000,4437=>1000,4438=>1000,4439=>1000,4440=>1000,4441=>1000,4447=>1000,4448=>1000,
+ 4449=>1000,4450=>1000,4451=>1000,4452=>1000,4453=>1000,4454=>1000,4455=>1000,4456=>1000,4457=>1000,4458=>1000,4459=>1000,4460=>1000,4461=>1000,4462=>1000,4463=>1000,4464=>1000,
+ 4465=>1000,4466=>1000,4467=>1000,4468=>1000,4469=>1000,4470=>1000,4471=>1000,4472=>1000,4473=>1000,4474=>1000,4475=>1000,4476=>1000,4477=>1000,4478=>1000,4479=>1000,4480=>1000,
+ 4481=>1000,4482=>1000,4483=>1000,4484=>1000,4485=>1000,4486=>1000,4487=>1000,4488=>1000,4489=>1000,4490=>1000,4491=>1000,4492=>1000,4493=>1000,4494=>1000,4495=>1000,4496=>1000,
+ 4497=>1000,4498=>1000,4499=>1000,4500=>1000,4501=>1000,4502=>1000,4503=>1000,4504=>1000,4505=>1000,4506=>1000,4507=>1000,4508=>1000,4509=>1000,4510=>1000,4511=>1000,4512=>1000,
+ 4513=>1000,4514=>1000,4520=>1000,4521=>1000,4522=>1000,4523=>1000,4524=>1000,4525=>1000,4526=>1000,4527=>1000,4528=>1000,4529=>1000,4530=>1000,4531=>1000,4532=>1000,4533=>1000,
+ 4534=>1000,4535=>1000,4536=>1000,4537=>1000,4538=>1000,4539=>1000,4540=>1000,4541=>1000,4542=>1000,4543=>1000,4544=>1000,4545=>1000,4546=>1000,4547=>1000,4548=>1000,4549=>1000,
+ 4550=>1000,4551=>1000,4552=>1000,4553=>1000,4554=>1000,4555=>1000,4556=>1000,4557=>1000,4558=>1000,4559=>1000,4560=>1000,4561=>1000,4562=>1000,4563=>1000,4564=>1000,4565=>1000,
+ 4566=>1000,4567=>1000,4568=>1000,4569=>1000,4570=>1000,4571=>1000,4572=>1000,4573=>1000,4574=>1000,4575=>1000,4576=>1000,4577=>1000,4578=>1000,4579=>1000,4580=>1000,4581=>1000,
+ 4582=>1000,4583=>1000,4584=>1000,4585=>1000,4586=>1000,4587=>1000,4588=>1000,4589=>1000,4590=>1000,4591=>1000,4592=>1000,4593=>1000,4594=>1000,4595=>1000,4596=>1000,4597=>1000,
+ 4598=>1000,4599=>1000,4600=>1000,4601=>1000,7680=>667,7681=>556,7682=>667,7683=>556,7684=>667,7685=>556,7686=>667,7687=>556,7688=>722,7689=>500,7690=>722,7691=>556,
+ 7692=>722,7693=>556,7694=>722,7695=>556,7696=>722,7697=>556,7698=>722,7699=>556,7700=>667,7701=>556,7702=>667,7703=>556,7704=>667,7705=>556,7706=>667,7707=>556,
+ 7708=>667,7709=>556,7710=>611,7711=>278,7712=>778,7713=>556,7714=>722,7715=>556,7716=>722,7717=>556,7718=>722,7719=>556,7720=>722,7721=>556,7722=>722,7723=>556,
+ 7724=>278,7725=>222,7726=>278,7727=>278,7728=>667,7729=>500,7730=>667,7731=>500,7732=>667,7733=>500,7734=>556,7735=>222,7736=>556,7737=>222,7738=>556,7739=>222,
+ 7740=>556,7741=>222,7742=>833,7743=>833,7744=>833,7745=>833,7746=>833,7747=>833,7748=>722,7749=>556,7750=>722,7751=>556,7752=>722,7753=>556,7754=>722,7755=>556,
+ 7756=>778,7757=>556,7758=>778,7759=>556,7760=>778,7761=>556,7762=>778,7763=>556,7764=>667,7765=>556,7766=>667,7767=>556,7768=>722,7769=>333,7770=>722,7771=>333,
+ 7772=>722,7773=>333,7774=>722,7775=>333,7776=>667,7777=>500,7778=>667,7779=>500,7780=>667,7781=>500,7782=>667,7783=>500,7784=>667,7785=>500,7786=>611,7787=>278,
+ 7788=>611,7789=>278,7790=>611,7791=>278,7792=>611,7793=>278,7794=>722,7795=>556,7796=>722,7797=>556,7798=>722,7799=>556,7800=>722,7801=>556,7802=>722,7803=>556,
+ 7804=>667,7805=>500,7806=>667,7807=>500,7808=>944,7809=>722,7810=>944,7811=>722,7812=>944,7813=>722,7814=>944,7815=>722,7816=>944,7817=>722,7818=>667,7819=>500,
+ 7820=>667,7821=>500,7822=>667,7823=>500,7824=>611,7825=>500,7826=>611,7827=>500,7828=>611,7829=>500,7830=>556,7831=>278,7832=>722,7833=>500,7834=>556,7835=>278,
+ 7840=>667,7841=>556,7842=>667,7843=>556,7844=>667,7845=>556,7846=>667,7847=>556,7848=>667,7849=>556,7850=>667,7851=>556,7852=>667,7853=>556,7854=>667,7855=>556,
+ 7856=>667,7857=>556,7858=>667,7859=>556,7860=>667,7861=>556,7862=>667,7863=>556,7864=>667,7865=>556,7866=>667,7867=>556,7868=>667,7869=>556,7870=>667,7871=>556,
+ 7872=>667,7873=>556,7874=>667,7875=>556,7876=>667,7877=>556,7878=>667,7879=>556,7880=>278,7881=>278,7882=>278,7883=>222,7884=>778,7885=>556,7886=>778,7887=>556,
+ 7888=>778,7889=>556,7890=>778,7891=>556,7892=>778,7893=>556,7894=>778,7895=>556,7896=>778,7897=>556,7898=>776,7899=>556,7900=>776,7901=>556,7902=>776,7903=>556,
+ 7904=>776,7905=>556,7906=>776,7907=>556,7908=>722,7909=>556,7910=>722,7911=>556,7912=>776,7913=>620,7914=>776,7915=>620,7916=>776,7917=>620,7918=>776,7919=>620,
+ 7920=>776,7921=>620,7922=>667,7923=>500,7924=>667,7925=>500,7926=>667,7927=>500,7928=>667,7929=>500,7936=>576,7937=>576,7938=>576,7939=>576,7940=>576,7941=>576,
+ 7942=>576,7943=>576,7944=>667,7945=>667,7946=>680,7947=>680,7948=>680,7949=>680,7950=>718,7951=>718,7952=>434,7953=>434,7954=>434,7955=>434,7956=>434,7957=>434,
+ 7960=>692,7961=>692,7962=>823,7963=>823,7964=>823,7965=>823,7968=>556,7969=>556,7970=>556,7971=>556,7972=>556,7973=>556,7974=>556,7975=>556,7976=>747,7977=>747,
+ 7978=>878,7979=>878,7980=>878,7981=>878,7982=>923,7983=>923,7984=>222,7985=>222,7986=>222,7987=>222,7988=>222,7989=>222,7990=>222,7991=>222,7992=>303,7993=>303,
+ 7994=>434,7995=>434,7996=>434,7997=>434,7998=>479,7999=>479,8000=>556,8001=>556,8002=>556,8003=>556,8004=>556,8005=>556,8008=>778,8009=>778,8010=>894,8011=>894,
+ 8012=>894,8013=>894,8016=>551,8017=>551,8018=>551,8019=>551,8020=>551,8021=>551,8022=>551,8023=>551,8025=>777,8027=>893,8029=>885,8031=>940,8032=>766,8033=>766,
+ 8034=>766,8035=>766,8036=>766,8037=>766,8038=>766,8039=>766,8040=>758,8041=>758,8042=>874,8043=>874,8044=>868,8045=>867,8046=>911,8047=>911,8048=>576,8049=>576,
+ 8050=>434,8051=>434,8052=>556,8053=>556,8054=>222,8055=>222,8056=>556,8057=>556,8058=>551,8059=>551,8060=>766,8061=>766,8064=>576,8065=>576,8066=>576,8067=>576,
+ 8068=>576,8069=>576,8070=>576,8071=>576,8072=>667,8073=>667,8074=>680,8075=>680,8076=>680,8077=>680,8078=>718,8079=>718,8080=>556,8081=>556,8082=>556,8083=>556,
+ 8084=>556,8085=>556,8086=>556,8087=>556,8088=>747,8089=>747,8090=>878,8091=>878,8092=>878,8093=>878,8094=>923,8095=>923,8096=>766,8097=>766,8098=>766,8099=>766,
+ 8100=>766,8101=>766,8102=>766,8103=>766,8104=>758,8105=>758,8106=>874,8107=>874,8108=>868,8109=>867,8110=>911,8111=>911,8112=>576,8113=>576,8114=>576,8115=>576,
+ 8116=>576,8118=>576,8119=>576,8120=>667,8121=>667,8122=>667,8123=>667,8124=>667,8125=>278,8126=>278,8127=>278,8128=>278,8129=>278,8130=>556,8131=>556,8132=>556,
+ 8134=>556,8135=>556,8136=>693,8137=>704,8138=>748,8139=>759,8140=>722,8141=>278,8142=>278,8143=>278,8144=>222,8145=>222,8146=>222,8147=>222,8150=>222,8151=>222,
+ 8152=>278,8153=>278,8154=>304,8155=>304,8157=>278,8158=>278,8159=>278,8160=>551,8161=>551,8162=>551,8163=>551,8164=>571,8165=>571,8166=>551,8167=>551,8168=>667,
+ 8169=>667,8170=>742,8171=>746,8172=>693,8173=>278,8174=>278,8175=>278,8178=>766,8179=>766,8180=>766,8182=>766,8183=>766,8184=>778,8185=>778,8186=>758,8187=>758,
+ 8188=>758,8189=>278,8190=>278,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>333,8197=>250,8198=>167,8199=>556,8200=>278,8201=>100,8202=>50,8203=>0,8204=>0,
+ 8205=>0,8208=>333,8209=>333,8210=>556,8213=>564,8214=>428,8215=>500,8219=>222,8223=>333,8227=>350,8228=>278,8229=>556,8231=>278,8232=>0,8233=>0,8241=>1330,
+ 8242=>222,8243=>372,8244=>522,8245=>206,8246=>356,8247=>506,8248=>312,8251=>1000,8252=>471,8253=>556,8254=>500,8255=>945,8256=>945,8257=>312,8258=>820,8259=>333,
+ 8260=>167,8261=>278,8262=>278,8304=>333,8308=>333,8309=>333,8310=>333,8311=>333,8312=>333,8313=>333,8314=>333,8315=>333,8316=>333,8317=>210,8318=>210,8319=>333,
+ 8320=>333,8321=>333,8322=>333,8323=>333,8324=>333,8325=>333,8326=>333,8327=>333,8328=>333,8329=>333,8330=>333,8331=>333,8332=>333,8333=>210,8334=>210,8352=>556,
+ 8353=>556,8354=>556,8355=>556,8356=>556,8357=>833,8358=>556,8359=>556,8360=>1024,8361=>940,8362=>784,8363=>556,8400=>600,8401=>600,8402=>600,8403=>600,8404=>700,
+ 8405=>700,8406=>600,8407=>600,8408=>600,8409=>600,8410=>600,8411=>600,8412=>600,8413=>900,8414=>900,8415=>900,8416=>900,8417=>700,8448=>889,8449=>889,8450=>667,
+ 8451=>1022,8452=>611,8453=>889,8454=>889,8455=>501,8456=>667,8457=>921,8458=>510,8459=>906,8460=>988,8461=>722,8462=>500,8463=>500,8464=>688,8465=>553,8466=>708,
+ 8467=>291,8468=>778,8469=>722,8470=>1073,8471=>737,8472=>740,8473=>556,8474=>722,8475=>927,8476=>795,8477=>667,8478=>667,8479=>667,8480=>1000,8481=>1174,8483=>722,
+ 8484=>611,8485=>542,8486=>768,8487=>768,8488=>698,8489=>321,8490=>667,8491=>667,8492=>927,8493=>646,8494=>556,8495=>385,8496=>615,8497=>688,8498=>611,8499=>1115,
+ 8500=>406,8501=>688,8502=>688,8503=>344,8504=>688,8531=>834,8532=>834,8533=>834,8534=>834,8535=>834,8536=>834,8537=>834,8538=>834,8539=>834,8540=>834,8541=>834,
+ 8542=>834,8543=>834,8544=>278,8545=>555,8546=>832,8547=>933,8548=>667,8549=>934,8550=>1031,8551=>1268,8552=>944,8553=>667,8554=>944,8555=>1035,8556=>556,8557=>722,
+ 8558=>722,8559=>833,8560=>222,8561=>444,8562=>666,8563=>700,8564=>500,8565=>700,8566=>922,8567=>1144,8568=>712,8569=>500,8570=>712,8571=>934,8572=>222,8573=>500,
+ 8574=>556,8575=>833,8576=>983,8577=>722,8578=>983,8592=>713,8593=>713,8594=>713,8595=>713,8596=>713,8597=>713,8598=>713,8599=>713,8600=>713,8601=>713,8602=>713,
+ 8603=>713,8604=>713,8605=>713,8606=>713,8607=>713,8608=>713,8609=>713,8610=>713,8611=>713,8612=>713,8613=>713,8614=>713,8615=>713,8616=>713,8617=>713,8618=>713,
+ 8619=>713,8620=>713,8621=>813,8622=>813,8623=>713,8624=>713,8625=>713,8626=>713,8627=>713,8628=>713,8629=>713,8630=>713,8631=>713,8632=>713,8633=>713,8634=>800,
+ 8635=>800,8636=>713,8637=>713,8638=>713,8639=>713,8640=>713,8641=>713,8642=>713,8643=>713,8644=>713,8645=>713,8646=>713,8647=>713,8648=>713,8649=>713,8650=>713,
+ 8651=>713,8652=>713,8653=>713,8654=>950,8655=>713,8656=>713,8657=>713,8658=>713,8659=>713,8660=>863,8661=>713,8662=>713,8663=>713,8664=>713,8665=>713,8666=>713,
+ 8667=>713,8668=>813,8669=>813,8670=>713,8671=>713,8672=>713,8673=>713,8674=>713,8675=>713,8676=>713,8677=>713,8678=>713,8679=>713,8680=>713,8681=>713,8682=>713,
+ 8704=>600,8705=>600,8706=>494,8707=>600,8708=>600,8709=>800,8710=>612,8711=>612,8712=>549,8713=>549,8714=>549,8715=>549,8716=>549,8717=>549,8718=>549,8719=>823,
+ 8720=>823,8721=>713,8722=>584,8723=>584,8724=>584,8725=>167,8726=>278,8727=>389,8728=>400,8729=>400,8730=>600,8731=>600,8732=>600,8733=>549,8734=>549,8735=>584,
+ 8736=>584,8737=>584,8738=>584,8739=>260,8740=>444,8741=>418,8742=>602,8743=>561,8744=>561,8745=>561,8746=>561,8747=>506,8748=>806,8749=>1106,8750=>506,8751=>806,
+ 8752=>1106,8753=>506,8754=>506,8755=>506,8756=>561,8757=>561,8758=>422,8759=>561,8760=>584,8761=>584,8762=>584,8763=>584,8764=>584,8765=>584,8766=>584,8767=>584,
+ 8768=>422,8769=>584,8770=>584,8771=>584,8772=>584,8773=>584,8774=>584,8775=>584,8776=>584,8777=>584,8778=>584,8779=>584,8780=>584,8781=>584,8782=>584,8783=>584,
+ 8784=>584,8785=>584,8786=>584,8787=>584,8788=>737,8789=>737,8790=>584,8791=>584,8792=>584,8793=>584,8794=>584,8795=>584,8796=>584,8797=>584,8798=>584,8799=>584,
+ 8800=>584,8801=>584,8802=>584,8803=>584,8804=>584,8805=>584,8806=>584,8807=>584,8808=>584,8809=>584,8810=>969,8811=>969,8812=>584,8813=>584,8814=>584,8815=>584,
+ 8816=>584,8817=>584,8818=>584,8819=>584,8820=>584,8821=>584,8822=>584,8823=>584,8824=>584,8825=>584,8826=>584,8827=>584,8828=>584,8829=>584,8830=>584,8831=>584,
+ 8832=>584,8833=>584,8834=>678,8835=>678,8836=>678,8837=>678,8838=>678,8839=>678,8840=>678,8841=>678,8842=>678,8843=>678,8844=>561,8845=>561,8846=>561,8847=>678,
+ 8848=>678,8849=>673,8850=>673,8851=>561,8852=>561,8853=>800,8854=>800,8855=>800,8856=>800,8857=>800,8858=>800,8859=>800,8860=>800,8861=>800,8862=>800,8863=>800,
+ 8864=>800,8865=>800,8866=>549,8867=>549,8868=>549,8869=>549,8870=>399,8871=>399,8872=>549,8873=>549,8874=>549,8875=>672,8876=>549,8877=>549,8878=>549,8879=>672,
+ 8880=>549,8881=>549,8882=>549,8883=>549,8884=>549,8885=>549,8886=>713,8887=>713,8888=>713,8889=>549,8890=>549,8891=>584,8892=>584,8893=>584,8894=>584,8895=>584,
+ 8896=>561,8897=>561,8898=>561,8899=>561,8900=>549,8901=>250,8902=>549,8903=>649,8904=>630,8905=>630,8906=>630,8907=>630,8908=>630,8909=>584,8910=>561,8911=>561,
+ 8912=>668,8913=>668,8914=>668,8915=>668,8916=>561,8917=>602,8918=>584,8919=>584,8920=>1354,8921=>1354,8922=>584,8923=>584,8924=>584,8925=>584,8926=>584,8927=>584,
+ 8928=>584,8929=>584,8930=>673,8931=>673,8932=>673,8933=>673,8934=>584,8935=>584,8936=>584,8937=>584,8938=>584,8939=>584,8940=>584,8941=>584,8942=>278,8943=>1000,
+ 8944=>1000,8945=>1000,8960=>549,8962=>549,8963=>549,8964=>549,8965=>549,8966=>549,8967=>549,8968=>449,8969=>449,8970=>449,8971=>449,8972=>549,8973=>549,8974=>549,
+ 8975=>549,8976=>549,8977=>549,8978=>800,8979=>800,8980=>549,8981=>549,8982=>549,8983=>650,8984=>780,8985=>549,8986=>549,8987=>549,8988=>549,8989=>549,8990=>549,
+ 8991=>549,8992=>506,8993=>506,8994=>713,8995=>713,8996=>1000,8997=>1000,8998=>1000,8999=>1000,9000=>1000,9001=>329,9002=>329,9003=>1000,9004=>549,9005=>549,9006=>549,
+ 9007=>549,9008=>549,9009=>549,9010=>549,9011=>549,9012=>549,9013=>549,9014=>600,9015=>600,9016=>600,9017=>600,9018=>600,9019=>600,9020=>600,9021=>600,9022=>600,
+ 9023=>600,9024=>600,9025=>600,9026=>600,9027=>600,9028=>600,9029=>600,9030=>600,9031=>600,9032=>600,9033=>600,9034=>600,9035=>600,9036=>600,9037=>600,9038=>600,
+ 9039=>600,9040=>600,9041=>600,9042=>600,9043=>600,9044=>600,9045=>600,9046=>600,9047=>600,9048=>600,9049=>600,9050=>600,9051=>600,9052=>600,9053=>600,9054=>600,
+ 9055=>600,9056=>600,9057=>600,9058=>600,9059=>600,9060=>600,9061=>600,9062=>600,9063=>600,9064=>600,9065=>600,9066=>600,9067=>600,9068=>600,9069=>600,9070=>600,
+ 9071=>600,9072=>600,9073=>600,9074=>600,9075=>600,9076=>600,9077=>600,9078=>600,9079=>600,9080=>600,9081=>600,9082=>600,9109=>600,9216=>600,9217=>600,9218=>600,
+ 9219=>600,9220=>600,9221=>600,9222=>600,9223=>600,9224=>600,9225=>600,9226=>600,9227=>600,9228=>600,9229=>600,9230=>600,9231=>600,9232=>600,9233=>600,9234=>600,
+ 9235=>600,9236=>600,9237=>600,9238=>600,9239=>600,9240=>600,9241=>600,9242=>600,9243=>600,9244=>600,9245=>600,9246=>600,9247=>600,9248=>600,9249=>600,9250=>600,
+ 9251=>600,9252=>600,9280=>604,9281=>604,9282=>604,9283=>604,9284=>604,9285=>604,9286=>750,9287=>750,9288=>750,9289=>750,9290=>604,9312=>1000,9313=>1000,9314=>1000,
+ 9315=>1000,9316=>1000,9317=>1000,9318=>1000,9319=>1000,9320=>1000,9321=>1000,9322=>1000,9323=>1000,9324=>1000,9325=>1000,9326=>1000,9327=>1000,9328=>1000,9329=>1000,9330=>1000,
+ 9331=>1000,9332=>1000,9333=>1000,9334=>1000,9335=>1000,9336=>1000,9337=>1000,9338=>1000,9339=>1000,9340=>1000,9341=>1000,9342=>1000,9343=>1000,9344=>1000,9345=>1000,9346=>1000,
+ 9347=>1000,9348=>1000,9349=>1000,9350=>1000,9351=>1000,9352=>1000,9353=>1000,9354=>1000,9355=>1000,9356=>1000,9357=>1000,9358=>1000,9359=>1000,9360=>1000,9361=>1000,9362=>1000,
+ 9363=>1000,9364=>1000,9365=>1000,9366=>1000,9367=>1000,9368=>1000,9369=>1000,9370=>1000,9371=>1000,9372=>1000,9373=>1000,9374=>1000,9375=>1000,9376=>1000,9377=>1000,9378=>1000,
+ 9379=>1000,9380=>1000,9381=>1000,9382=>1000,9383=>1000,9384=>1000,9385=>1000,9386=>1000,9387=>1000,9388=>1000,9389=>1000,9390=>1000,9391=>1000,9392=>1000,9393=>1000,9394=>1000,
+ 9395=>1000,9396=>1000,9397=>1000,9398=>1000,9399=>1000,9400=>1000,9401=>1000,9402=>1000,9403=>1000,9404=>1000,9405=>1000,9406=>1000,9407=>1000,9408=>1000,9409=>1000,9410=>1000,
+ 9411=>1000,9412=>1000,9413=>1000,9414=>1000,9415=>1000,9416=>1000,9417=>1000,9418=>1000,9419=>1000,9420=>1000,9421=>1000,9422=>1000,9423=>1000,9424=>1000,9425=>1000,9426=>1000,
+ 9427=>1000,9428=>1000,9429=>1000,9430=>1000,9431=>1000,9432=>1000,9433=>1000,9434=>1000,9435=>1000,9436=>1000,9437=>1000,9438=>1000,9439=>1000,9440=>1000,9441=>1000,9442=>1000,
+ 9443=>1000,9444=>1000,9445=>1000,9446=>1000,9447=>1000,9448=>1000,9449=>1000,9450=>1000,9472=>600,9473=>600,9474=>600,9475=>600,9476=>600,9477=>600,9478=>600,9479=>600,
+ 9480=>600,9481=>600,9482=>600,9483=>600,9484=>600,9485=>600,9486=>600,9487=>600,9488=>600,9489=>600,9490=>600,9491=>600,9492=>600,9493=>600,9494=>600,9495=>600,
+ 9496=>600,9497=>600,9498=>600,9499=>600,9500=>600,9501=>600,9502=>600,9503=>600,9504=>600,9505=>600,9506=>600,9507=>600,9508=>600,9509=>600,9510=>600,9511=>600,
+ 9512=>600,9513=>600,9514=>600,9515=>600,9516=>600,9517=>600,9518=>600,9519=>600,9520=>600,9521=>600,9522=>600,9523=>600,9524=>600,9525=>600,9526=>600,9527=>600,
+ 9528=>600,9529=>600,9530=>600,9531=>600,9532=>600,9533=>600,9534=>600,9535=>600,9536=>600,9537=>600,9538=>600,9539=>600,9540=>600,9541=>600,9542=>600,9543=>600,
+ 9544=>600,9545=>600,9546=>600,9547=>600,9548=>600,9549=>600,9550=>600,9551=>600,9552=>600,9553=>600,9554=>600,9555=>600,9556=>600,9557=>600,9558=>600,9559=>600,
+ 9560=>600,9561=>600,9562=>600,9563=>600,9564=>600,9565=>600,9566=>600,9567=>600,9568=>600,9569=>600,9570=>600,9571=>600,9572=>600,9573=>600,9574=>600,9575=>600,
+ 9576=>600,9577=>600,9578=>600,9579=>600,9580=>600,9581=>600,9582=>600,9583=>600,9584=>600,9585=>600,9586=>600,9587=>600,9588=>600,9589=>600,9590=>600,9591=>600,
+ 9592=>600,9593=>600,9594=>600,9595=>600,9596=>600,9597=>600,9598=>600,9599=>600,9600=>600,9601=>600,9602=>600,9603=>600,9604=>600,9605=>600,9606=>600,9607=>600,
+ 9608=>600,9609=>600,9610=>600,9611=>600,9612=>600,9613=>600,9614=>600,9615=>600,9616=>600,9617=>600,9618=>600,9619=>600,9620=>600,9621=>600,9632=>600,9633=>600,
+ 9634=>600,9635=>600,9636=>600,9637=>600,9638=>600,9639=>600,9640=>600,9641=>600,9642=>600,9643=>600,9644=>600,9645=>600,9646=>600,9647=>600,9648=>600,9649=>600,
+ 9650=>600,9651=>600,9652=>600,9653=>600,9654=>600,9655=>600,9656=>600,9657=>600,9658=>600,9659=>600,9660=>600,9661=>600,9662=>600,9663=>600,9664=>600,9665=>600,
+ 9666=>600,9667=>600,9668=>600,9669=>600,9670=>600,9671=>600,9672=>600,9673=>600,9674=>600,9675=>600,9676=>600,9677=>600,9678=>600,9679=>600,9680=>600,9681=>600,
+ 9682=>600,9683=>600,9684=>600,9685=>600,9686=>600,9687=>600,9688=>600,9689=>600,9690=>600,9691=>600,9692=>600,9693=>600,9694=>600,9695=>600,9696=>600,9697=>600,
+ 9698=>600,9699=>600,9700=>600,9701=>600,9702=>600,9703=>600,9704=>600,9705=>600,9706=>600,9707=>600,9708=>600,9709=>600,9710=>600,9711=>600,9728=>750,9729=>1000,
+ 9730=>750,9731=>750,9732=>1000,9733=>816,9734=>823,9735=>500,9736=>500,9737=>800,9738=>800,9739=>800,9740=>800,9741=>800,9742=>719,9743=>719,9744=>734,9745=>734,
+ 9746=>734,9747=>762,9754=>960,9755=>960,9756=>939,9757=>939,9758=>939,9759=>939,9760=>750,9761=>600,9762=>750,9763=>750,9764=>580,9765=>460,9766=>444,9767=>650,
+ 9768=>444,9769=>768,9770=>800,9771=>850,9772=>675,9773=>800,9774=>750,9775=>750,9776=>900,9777=>900,9778=>900,9779=>900,9780=>900,9781=>900,9782=>900,9783=>900,
+ 9784=>750,9785=>750,9786=>750,9787=>750,9788=>750,9789=>750,9790=>750,9791=>740,9792=>740,9793=>740,9794=>740,9795=>653,9796=>490,9797=>632,9798=>780,9799=>560,
+ 9800=>838,9801=>780,9802=>734,9803=>887,9804=>780,9805=>1080,9806=>896,9807=>1080,9808=>804,9809=>868,9810=>922,9811=>696,9812=>1000,9813=>1000,9814=>1000,9815=>1000,
+ 9816=>1000,9817=>1000,9818=>1000,9819=>1000,9820=>1000,9821=>1000,9822=>1000,9823=>1000,9824=>722,9825=>734,9826=>674,9827=>804,9828=>722,9829=>734,9830=>674,9831=>804,
+ 9832=>860,9833=>423,9834=>592,9835=>750,9836=>750,9837=>439,9838=>439,9839=>439,9985=>974,9986=>961,9987=>974,9988=>980,9990=>789,9991=>790,9992=>791,9993=>690,
+ 9996=>549,9997=>855,9998=>911,9999=>933,10000=>911,10001=>945,10002=>974,10003=>755,10004=>846,10005=>762,10006=>761,10007=>571,10008=>677,10009=>763,10010=>760,10011=>759,
+ 10012=>754,10013=>494,10014=>552,10015=>537,10016=>577,10017=>692,10018=>786,10019=>788,10020=>788,10021=>790,10022=>793,10023=>794,10025=>823,10026=>789,10027=>841,10028=>823,
+ 10029=>833,10030=>816,10031=>831,10032=>923,10033=>744,10034=>723,10035=>749,10036=>790,10037=>792,10038=>695,10039=>776,10040=>768,10041=>792,10042=>759,10043=>707,10044=>708,
+ 10045=>682,10046=>701,10047=>826,10048=>815,10049=>789,10050=>789,10051=>707,10052=>687,10053=>696,10054=>689,10055=>786,10056=>787,10057=>713,10058=>791,10059=>785,10061=>873,
+ 10063=>762,10064=>762,10065=>759,10066=>759,10070=>784,10072=>138,10073=>277,10074=>415,10075=>392,10076=>392,10077=>668,10078=>668,10081=>732,10082=>544,10083=>544,10084=>910,
+ 10085=>667,10086=>760,10087=>760,10102=>788,10103=>788,10104=>788,10105=>788,10106=>788,10107=>788,10108=>788,10109=>788,10110=>788,10111=>788,10112=>788,10113=>788,10114=>788,
+ 10115=>788,10116=>788,10117=>788,10118=>788,10119=>788,10120=>788,10121=>788,10122=>788,10123=>788,10124=>788,10125=>788,10126=>788,10127=>788,10128=>788,10129=>788,10130=>788,
+ 10131=>788,10132=>894,10136=>748,10137=>924,10138=>748,10139=>918,10140=>927,10141=>928,10142=>928,10143=>834,10144=>873,10145=>828,10146=>924,10147=>924,10148=>917,10149=>930,
+ 10150=>931,10151=>463,10152=>883,10153=>836,10154=>836,10155=>867,10156=>867,10157=>696,10158=>696,10159=>874,10161=>874,10162=>760,10163=>946,10164=>771,10165=>865,10166=>771,
+ 10167=>888,10168=>967,10169=>888,10170=>831,10171=>873,10172=>927,10173=>970,10174=>918,12288=>1000,12289=>1000,12290=>1000,12291=>1000,12292=>1000,12293=>1000,12294=>1000,12295=>1000,
+ 12296=>1000,12297=>1000,12298=>1000,12299=>1000,12300=>1000,12301=>1000,12302=>1000,12303=>1000,12304=>1000,12305=>1000,12306=>1000,12307=>1000,12308=>1000,12309=>1000,12310=>1000,12311=>1000,
+ 12312=>1000,12313=>1000,12314=>1000,12315=>1000,12316=>1000,12317=>1000,12318=>1000,12319=>1000,12320=>1000,12321=>1000,12322=>1000,12323=>1000,12324=>1000,12325=>1000,12326=>1000,12327=>1000,
+ 12328=>1000,12329=>1000,12330=>1000,12331=>1000,12332=>1000,12333=>1000,12334=>1000,12335=>1000,12336=>1000,12337=>1000,12338=>1000,12339=>1000,12340=>1000,12341=>1000,12342=>1000,12343=>1000,
+ 12351=>1000,12353=>1000,12354=>1000,12355=>1000,12356=>1000,12357=>1000,12358=>1000,12359=>1000,12360=>1000,12361=>1000,12362=>1000,12363=>1000,12364=>1000,12365=>1000,12366=>1000,12367=>1000,
+ 12368=>1000,12369=>1000,12370=>1000,12371=>1000,12372=>1000,12373=>1000,12374=>1000,12375=>1000,12376=>1000,12377=>1000,12378=>1000,12379=>1000,12380=>1000,12381=>1000,12382=>1000,12383=>1000,
+ 12384=>1000,12385=>1000,12386=>1000,12387=>1000,12388=>1000,12389=>1000,12390=>1000,12391=>1000,12392=>1000,12393=>1000,12394=>1000,12395=>1000,12396=>1000,12397=>1000,12398=>1000,12399=>1000,
+ 12400=>1000,12401=>1000,12402=>1000,12403=>1000,12404=>1000,12405=>1000,12406=>1000,12407=>1000,12408=>1000,12409=>1000,12410=>1000,12411=>1000,12412=>1000,12413=>1000,12414=>1000,12415=>1000,
+ 12416=>1000,12417=>1000,12418=>1000,12419=>1000,12420=>1000,12421=>1000,12422=>1000,12423=>1000,12424=>1000,12425=>1000,12426=>1000,12427=>1000,12428=>1000,12429=>1000,12430=>1000,12431=>1000,
+ 12432=>1000,12433=>1000,12434=>1000,12435=>1000,12436=>1000,12441=>1000,12442=>1000,12443=>1000,12444=>1000,12445=>1000,12446=>1000,12449=>1000,12450=>1000,12451=>1000,12452=>1000,12453=>1000,
+ 12454=>1000,12455=>1000,12456=>1000,12457=>1000,12458=>1000,12459=>1000,12460=>1000,12461=>1000,12462=>1000,12463=>1000,12464=>1000,12465=>1000,12466=>1000,12467=>1000,12468=>1000,12469=>1000,
+ 12470=>1000,12471=>1000,12472=>1000,12473=>1000,12474=>1000,12475=>1000,12476=>1000,12477=>1000,12478=>1000,12479=>1000,12480=>1000,12481=>1000,12482=>1000,12483=>1000,12484=>1000,12485=>1000,
+ 12486=>1000,12487=>1000,12488=>1000,12489=>1000,12490=>1000,12491=>1000,12492=>1000,12493=>1000,12494=>1000,12495=>1000,12496=>1000,12497=>1000,12498=>1000,12499=>1000,12500=>1000,12501=>1000,
+ 12502=>1000,12503=>1000,12504=>1000,12505=>1000,12506=>1000,12507=>1000,12508=>1000,12509=>1000,12510=>1000,12511=>1000,12512=>1000,12513=>1000,12514=>1000,12515=>1000,12516=>1000,12517=>1000,
+ 12518=>1000,12519=>1000,12520=>1000,12521=>1000,12522=>1000,12523=>1000,12524=>1000,12525=>1000,12526=>1000,12527=>1000,12528=>1000,12529=>1000,12530=>1000,12531=>1000,12532=>1000,12533=>1000,
+ 12534=>1000,12535=>1000,12536=>1000,12537=>1000,12538=>1000,12539=>1000,12540=>1000,12541=>1000,12542=>1000,12549=>1000,12550=>1000,12551=>1000,12552=>1000,12553=>1000,12554=>1000,12555=>1000,
+ 12556=>1000,12557=>1000,12558=>1000,12559=>1000,12560=>1000,12561=>1000,12562=>1000,12563=>1000,12564=>1000,12565=>1000,12566=>1000,12567=>1000,12568=>1000,12569=>1000,12570=>1000,12571=>1000,
+ 12572=>1000,12573=>1000,12574=>1000,12575=>1000,12576=>1000,12577=>1000,12578=>1000,12579=>1000,12580=>1000,12581=>1000,12582=>1000,12583=>1000,12584=>1000,12585=>1000,12586=>1000,12587=>1000,
+ 12588=>1000,12593=>1000,12594=>1000,12595=>1000,12596=>1000,12597=>1000,12598=>1000,12599=>1000,12600=>1000,12601=>1000,12602=>1000,12603=>1000,12604=>1000,12605=>1000,12606=>1000,12607=>1000,
+ 12608=>1000,12609=>1000,12610=>1000,12611=>1000,12612=>1000,12613=>1000,12614=>1000,12615=>1000,12616=>1000,12617=>1000,12618=>1000,12619=>1000,12620=>1000,12621=>1000,12622=>1000,12623=>1000,
+ 12624=>1000,12625=>1000,12626=>1000,12627=>1000,12628=>1000,12629=>1000,12630=>1000,12631=>1000,12632=>1000,12633=>1000,12634=>1000,12635=>1000,12636=>1000,12637=>1000,12638=>1000,12639=>1000,
+ 12640=>1000,12641=>1000,12642=>1000,12643=>1000,12644=>1000,12645=>1000,12646=>1000,12647=>1000,12648=>1000,12649=>1000,12650=>1000,12651=>1000,12652=>1000,12653=>1000,12654=>1000,12655=>1000,
+ 12656=>1000,12657=>1000,12658=>1000,12659=>1000,12660=>1000,12661=>1000,12662=>1000,12663=>1000,12664=>1000,12665=>1000,12666=>1000,12667=>1000,12668=>1000,12669=>1000,12670=>1000,12671=>1000,
+ 12672=>1000,12673=>1000,12674=>1000,12675=>1000,12676=>1000,12677=>1000,12678=>1000,12679=>1000,12680=>1000,12681=>1000,12682=>1000,12683=>1000,12684=>1000,12685=>1000,12686=>1000,12688=>1000,
+ 12689=>1000,12690=>1000,12691=>1000,12692=>1000,12693=>1000,12694=>1000,12695=>1000,12696=>1000,12697=>1000,12698=>1000,12699=>1000,12700=>1000,12701=>1000,12702=>1000,12703=>1000,12800=>1000,
+ 12801=>1000,12802=>1000,12803=>1000,12804=>1000,12805=>1000,12806=>1000,12807=>1000,12808=>1000,12809=>1000,12810=>1000,12811=>1000,12812=>1000,12813=>1000,12814=>1000,12815=>1000,12816=>1000,
+ 12817=>1000,12818=>1000,12819=>1000,12820=>1000,12821=>1000,12822=>1000,12823=>1000,12824=>1000,12825=>1000,12826=>1000,12827=>1000,12828=>1000,12832=>1000,12833=>1000,12834=>1000,12835=>1000,
+ 12836=>1000,12837=>1000,12838=>1000,12839=>1000,12840=>1000,12841=>1000,12842=>1000,12843=>1000,12844=>1000,12845=>1000,12846=>1000,12847=>1000,12848=>1000,12849=>1000,12850=>1000,12851=>1000,
+ 12852=>1000,12853=>1000,12854=>1000,12855=>1000,12856=>1000,12857=>1000,12858=>1000,12859=>1000,12860=>1000,12861=>1000,12862=>1000,12863=>1000,12864=>1000,12865=>1000,12866=>1000,12867=>1000,
+ 12896=>1000,12897=>1000,12898=>1000,12899=>1000,12900=>1000,12901=>1000,12902=>1000,12903=>1000,12904=>1000,12905=>1000,12906=>1000,12907=>1000,12908=>1000,12909=>1000,12910=>1000,12911=>1000,
+ 12912=>1000,12913=>1000,12914=>1000,12915=>1000,12916=>1000,12917=>1000,12918=>1000,12919=>1000,12920=>1000,12921=>1000,12922=>1000,12923=>1000,12927=>1000,12928=>1000,12929=>1000,12930=>1000,
+ 12931=>1000,12932=>1000,12933=>1000,12934=>1000,12935=>1000,12936=>1000,12937=>1000,12938=>1000,12939=>1000,12940=>1000,12941=>1000,12942=>1000,12943=>1000,12944=>1000,12945=>1000,12946=>1000,
+ 12947=>1000,12948=>1000,12949=>1000,12950=>1000,12951=>1000,12952=>1000,12953=>1000,12954=>1000,12955=>1000,12956=>1000,12957=>1000,12958=>1000,12959=>1000,12960=>1000,12961=>1000,12962=>1000,
+ 12963=>1000,12964=>1000,12965=>1000,12966=>1000,12967=>1000,12968=>1000,12969=>1000,12970=>1000,12971=>1000,12972=>1000,12973=>1000,12974=>1000,12975=>1000,12976=>1000,12992=>1000,12993=>1000,
+ 12994=>1000,12995=>1000,12996=>1000,12997=>1000,12998=>1000,12999=>1000,13000=>1000,13001=>1000,13002=>1000,13003=>1000,13008=>1000,13009=>1000,13010=>1000,13011=>1000,13012=>1000,13013=>1000,
+ 13014=>1000,13015=>1000,13016=>1000,13017=>1000,13018=>1000,13019=>1000,13020=>1000,13021=>1000,13022=>1000,13023=>1000,13024=>1000,13025=>1000,13026=>1000,13027=>1000,13028=>1000,13029=>1000,
+ 13030=>1000,13031=>1000,13032=>1000,13033=>1000,13034=>1000,13035=>1000,13036=>1000,13037=>1000,13038=>1000,13039=>1000,13040=>1000,13041=>1000,13042=>1000,13043=>1000,13044=>1000,13045=>1000,
+ 13046=>1000,13047=>1000,13048=>1000,13049=>1000,13050=>1000,13051=>1000,13052=>1000,13053=>1000,13054=>1000,13056=>1000,13057=>1000,13058=>1000,13059=>1000,13060=>1000,13061=>1000,13062=>1000,
+ 13063=>1000,13064=>1000,13065=>1000,13066=>1000,13067=>1000,13068=>1000,13069=>1000,13070=>1000,13071=>1000,13072=>1000,13073=>1000,13074=>1000,13075=>1000,13076=>1000,13077=>1000,13078=>1000,
+ 13079=>1000,13080=>1000,13081=>1000,13082=>1000,13083=>1000,13084=>1000,13085=>1000,13086=>1000,13087=>1000,13088=>1000,13089=>1000,13090=>1000,13091=>1000,13092=>1000,13093=>1000,13094=>1000,
+ 13095=>1000,13096=>1000,13097=>1000,13098=>1000,13099=>1000,13100=>1000,13101=>1000,13102=>1000,13103=>1000,13104=>1000,13105=>1000,13106=>1000,13107=>1000,13108=>1000,13109=>1000,13110=>1000,
+ 13111=>1000,13112=>1000,13113=>1000,13114=>1000,13115=>1000,13116=>1000,13117=>1000,13118=>1000,13119=>1000,13120=>1000,13121=>1000,13122=>1000,13123=>1000,13124=>1000,13125=>1000,13126=>1000,
+ 13127=>1000,13128=>1000,13129=>1000,13130=>1000,13131=>1000,13132=>1000,13133=>1000,13134=>1000,13135=>1000,13136=>1000,13137=>1000,13138=>1000,13139=>1000,13140=>1000,13141=>1000,13142=>1000,
+ 13143=>1000,13144=>1000,13145=>1000,13146=>1000,13147=>1000,13148=>1000,13149=>1000,13150=>1000,13151=>1000,13152=>1000,13153=>1000,13154=>1000,13155=>1000,13156=>1000,13157=>1000,13158=>1000,
+ 13159=>1000,13160=>1000,13161=>1000,13162=>1000,13163=>1000,13164=>1000,13165=>1000,13166=>1000,13167=>1000,13168=>1000,13169=>1000,13170=>1000,13171=>1000,13172=>1000,13173=>1000,13174=>1000,
+ 13179=>1000,13180=>1000,13181=>1000,13182=>1000,13183=>1000,13184=>1000,13185=>1000,13186=>1000,13187=>1000,13188=>1000,13189=>1000,13190=>1000,13191=>1000,13192=>1000,13193=>1000,13194=>1000,
+ 13195=>1000,13196=>1000,13197=>1000,13198=>1000,13199=>1000,13200=>1000,13201=>1000,13202=>1000,13203=>1000,13204=>1000,13205=>1000,13206=>1000,13207=>1000,13208=>1000,13209=>1000,13210=>1000,
+ 13211=>1000,13212=>1000,13213=>1000,13214=>1000,13215=>1000,13216=>1000,13217=>1000,13218=>1000,13219=>1000,13220=>1000,13221=>1000,13222=>1000,13223=>1000,13224=>1000,13225=>1000,13226=>1000,
+ 13227=>1000,13228=>1000,13229=>1000,13230=>1000,13231=>1000,13232=>1000,13233=>1000,13234=>1000,13235=>1000,13236=>1000,13237=>1000,13238=>1000,13239=>1000,13240=>1000,13241=>1000,13242=>1000,
+ 13243=>1000,13244=>1000,13245=>1000,13246=>1000,13247=>1000,13248=>1000,13249=>1000,13250=>1000,13251=>1000,13252=>1000,13253=>1000,13254=>1000,13255=>1000,13256=>1000,13257=>1000,13258=>1000,
+ 13259=>1000,13260=>1000,13261=>1000,13262=>1000,13263=>1000,13264=>1000,13265=>1000,13266=>1000,13267=>1000,13268=>1000,13269=>1000,13270=>1000,13271=>1000,13272=>1000,13273=>1000,13274=>1000,
+ 13275=>1000,13276=>1000,13277=>1000,13280=>1000,13281=>1000,13282=>1000,13283=>1000,13284=>1000,13285=>1000,13286=>1000,13287=>1000,13288=>1000,13289=>1000,13290=>1000,13291=>1000,13292=>1000,
+ 13293=>1000,13294=>1000,13295=>1000,13296=>1000,13297=>1000,13298=>1000,13299=>1000,13300=>1000,13301=>1000,13302=>1000,13303=>1000,13304=>1000,13305=>1000,13306=>1000,13307=>1000,13308=>1000,
+ 13309=>1000,13310=>1000,59393=>316,59394=>507,59395=>507,59396=>484,59397=>484,59416=>0,59492=>480,59495=>480,59536=>458,59557=>466,59558=>480,59559=>903,61441=>500,61442=>500,
+ 63232=>541,63233=>0,63234=>0,63235=>0,63236=>0,63237=>0,63238=>0,63239=>0,63240=>0,63241=>0,63242=>0,63243=>0,63244=>0,63245=>0,63246=>0,63247=>849,
+ 63248=>0,63249=>0,63250=>0,63251=>0,63252=>0,63253=>0,63254=>0,63255=>0,63256=>0,63257=>0,63258=>0,63260=>333,63261=>287,63744=>1000,63745=>1000,63746=>1000,
+ 63747=>1000,63748=>1000,63749=>1000,63750=>1000,63751=>1000,63752=>1000,63753=>1000,63754=>1000,63755=>1000,63756=>1000,63757=>1000,63758=>1000,63759=>1000,63760=>1000,63761=>1000,63762=>1000,
+ 63763=>1000,63764=>1000,63765=>1000,63766=>1000,63767=>1000,63768=>1000,63769=>1000,63770=>1000,63771=>1000,63772=>1000,63773=>1000,63774=>1000,63775=>1000,63776=>1000,63777=>1000,63778=>1000,
+ 63779=>1000,63780=>1000,63781=>1000,63782=>1000,63783=>1000,63784=>1000,63785=>1000,63786=>1000,63787=>1000,63788=>1000,63789=>1000,63790=>1000,63791=>1000,63792=>1000,63793=>1000,63794=>1000,
+ 63795=>1000,63796=>1000,63797=>1000,63798=>1000,63799=>1000,63800=>1000,63801=>1000,63802=>1000,63803=>1000,63804=>1000,63805=>1000,63806=>1000,63807=>1000,63808=>1000,63809=>1000,63810=>1000,
+ 63811=>1000,63812=>1000,63813=>1000,63814=>1000,63815=>1000,63816=>1000,63817=>1000,63818=>1000,63819=>1000,63820=>1000,63821=>1000,63822=>1000,63823=>1000,63824=>1000,63825=>1000,63826=>1000,
+ 63827=>1000,63828=>1000,63829=>1000,63830=>1000,63831=>1000,63832=>1000,63833=>1000,63834=>1000,63835=>1000,63836=>1000,63837=>1000,63838=>1000,63839=>1000,63840=>1000,63841=>1000,63842=>1000,
+ 63843=>1000,63844=>1000,63845=>1000,63846=>1000,63847=>1000,63848=>1000,63849=>1000,63850=>1000,63851=>1000,63852=>1000,63853=>1000,63854=>1000,63855=>1000,63856=>1000,63857=>1000,63858=>1000,
+ 63859=>1000,63860=>1000,63861=>1000,63862=>1000,63863=>1000,63864=>1000,63865=>1000,63866=>1000,63867=>1000,63868=>1000,63869=>1000,63870=>1000,63871=>1000,63872=>1000,63873=>1000,63874=>1000,
+ 63875=>1000,63876=>1000,63877=>1000,63878=>1000,63879=>1000,63880=>1000,63881=>1000,63882=>1000,63883=>1000,63884=>1000,63885=>1000,63886=>1000,63887=>1000,63888=>1000,63889=>1000,63890=>1000,
+ 63891=>1000,63892=>1000,63893=>1000,63894=>1000,63895=>1000,63896=>1000,63897=>1000,63898=>1000,63899=>1000,63900=>1000,63901=>1000,63902=>1000,63903=>1000,63904=>1000,63905=>1000,63906=>1000,
+ 63907=>1000,63908=>1000,63909=>1000,63910=>1000,63911=>1000,63912=>1000,63913=>1000,63914=>1000,63915=>1000,63916=>1000,63917=>1000,63918=>1000,63919=>1000,63920=>1000,63921=>1000,63922=>1000,
+ 63923=>1000,63924=>1000,63925=>1000,63926=>1000,63927=>1000,63928=>1000,63929=>1000,63930=>1000,63931=>1000,63932=>1000,63933=>1000,63934=>1000,63935=>1000,63936=>1000,63937=>1000,63938=>1000,
+ 63939=>1000,63940=>1000,63941=>1000,63942=>1000,63943=>1000,63944=>1000,63945=>1000,63946=>1000,63947=>1000,63948=>1000,63949=>1000,63950=>1000,63951=>1000,63952=>1000,63953=>1000,63954=>1000,
+ 63955=>1000,63956=>1000,63957=>1000,63958=>1000,63959=>1000,63960=>1000,63961=>1000,63962=>1000,63963=>1000,63964=>1000,63965=>1000,63966=>1000,63967=>1000,63968=>1000,63969=>1000,63970=>1000,
+ 63971=>1000,63972=>1000,63973=>1000,63974=>1000,63975=>1000,63976=>1000,63977=>1000,63978=>1000,63979=>1000,63980=>1000,63981=>1000,63982=>1000,63983=>1000,63984=>1000,63985=>1000,63986=>1000,
+ 63987=>1000,63988=>1000,63989=>1000,63990=>1000,63991=>1000,63992=>1000,63993=>1000,63994=>1000,63995=>1000,63996=>1000,63997=>1000,63998=>1000,63999=>1000,64000=>1000,64001=>1000,64002=>1000,
+ 64003=>1000,64004=>1000,64005=>1000,64006=>1000,64007=>1000,64008=>1000,64009=>1000,64010=>1000,64011=>1000,64012=>1000,64013=>1000,64014=>1000,64015=>1000,64016=>1000,64017=>1000,64018=>1000,
+ 64019=>1000,64020=>1000,64021=>1000,64022=>1000,64023=>1000,64024=>1000,64025=>1000,64026=>1000,64027=>1000,64028=>1000,64029=>1000,64030=>1000,64031=>1000,64032=>1000,64033=>1000,64034=>1000,
+ 64035=>1000,64036=>1000,64037=>1000,64038=>1000,64039=>1000,64040=>1000,64041=>1000,64042=>1000,64043=>1000,64044=>1000,64045=>1000,64256=>537,64257=>500,64258=>500,64259=>778,64260=>750,
+ 64261=>532,64262=>758,64275=>784,64276=>784,64277=>784,64278=>784,64279=>893,64286=>333,64287=>590,64288=>550,64289=>709,64290=>649,64291=>730,64292=>656,64293=>605,64294=>730,
+ 64295=>633,64296=>794,64297=>584,64298=>700,64299=>700,64300=>700,64301=>700,64302=>577,64303=>577,64304=>577,64305=>563,64306=>411,64307=>512,64308=>594,64309=>316,64310=>326,
+ 64312=>594,64313=>316,64314=>507,64315=>527,64316=>484,64318=>594,64320=>338,64321=>604,64323=>567,64324=>569,64326=>514,64327=>583,64328=>507,64329=>700,64330=>633,64331=>316,
+ 64332=>563,64333=>527,64334=>569,64335=>577,64336=>243,64337=>273,64338=>771,64339=>788,64340=>276,64341=>243,64342=>771,64343=>788,64344=>276,64345=>243,64346=>771,64347=>788,
+ 64348=>276,64349=>243,64350=>771,64351=>788,64352=>276,64353=>243,64354=>771,64355=>788,64356=>276,64357=>243,64358=>771,64359=>788,64360=>276,64361=>243,64362=>957,64363=>903,
+ 64364=>466,64365=>480,64366=>957,64367=>903,64368=>466,64369=>480,64370=>544,64371=>658,64372=>646,64373=>637,64374=>544,64375=>658,64376=>646,64377=>637,64378=>544,64379=>658,
+ 64380=>646,64381=>637,64382=>544,64383=>658,64384=>646,64385=>637,64386=>430,64387=>458,64388=>430,64389=>458,64390=>430,64391=>458,64392=>430,64393=>458,64394=>421,64395=>436,
+ 64396=>421,64397=>436,64398=>828,64399=>942,64400=>432,64401=>549,64402=>828,64403=>942,64404=>432,64405=>549,64406=>828,64407=>942,64408=>432,64409=>549,64410=>828,64411=>942,
+ 64412=>432,64413=>549,64414=>692,64415=>723,64416=>692,64417=>723,64418=>276,64419=>243,64420=>514,64421=>477,64422=>514,64423=>509,64424=>273,64425=>427,64426=>706,64427=>706,
+ 64428=>686,64429=>686,64430=>550,64431=>461,64432=>550,64433=>461,64467=>757,64468=>733,64469=>432,64470=>549,64471=>470,64472=>466,64473=>470,64474=>466,64475=>470,64476=>466,
+ 64477=>470,64478=>470,64479=>466,64480=>470,64481=>466,64482=>470,64483=>466,64484=>781,64485=>933,64486=>276,64487=>243,64488=>276,64489=>243,64490=>547,64491=>517,64492=>783,
+ 64493=>753,64494=>740,64495=>710,64496=>740,64497=>710,64498=>740,64499=>710,64500=>740,64501=>710,64502=>1207,64503=>1177,64504=>517,64505=>1067,64506=>1037,64507=>517,64508=>731,
+ 64509=>793,64510=>276,64511=>243,64512=>932,64513=>932,64514=>914,64515=>1067,64516=>1077,64517=>935,64518=>935,64519=>935,64520=>917,64521=>1070,64522=>1080,64523=>932,64524=>932,
+ 64525=>932,64526=>914,64527=>1067,64528=>1077,64529=>932,64530=>914,64531=>1067,64532=>1077,64533=>1305,64534=>1287,64535=>1305,64536=>1287,64537=>1305,64538=>1305,64539=>1287,64540=>1429,
+ 64541=>1429,64542=>1429,64543=>1411,64544=>1476,64545=>1458,64546=>1476,64547=>1476,64548=>1476,64549=>1458,64550=>1392,64551=>1374,64552=>1374,64553=>1245,64554=>1227,64555=>1245,64556=>1227,
+ 64557=>1125,64558=>1125,64559=>1125,64560=>1107,64561=>1260,64562=>1270,64563=>1125,64564=>1107,64565=>1260,64566=>1270,64567=>706,64568=>1091,64569=>1091,64570=>1091,64571=>1106,64572=>1073,
+ 64573=>1226,64574=>1236,64575=>932,64576=>932,64577=>932,64578=>914,64579=>1067,64580=>1077,64581=>1140,64582=>1140,64583=>1140,64584=>1122,64585=>1275,64586=>1285,64587=>932,64588=>932,
+ 64589=>932,64590=>914,64591=>1067,64592=>1077,64593=>1345,64594=>1327,64595=>1480,64596=>1490,64597=>932,64598=>932,64599=>932,64600=>914,64601=>1067,64602=>1077,64603=>430,64604=>421,
+ 64605=>731,64606=>296,64607=>300,64608=>300,64609=>300,64610=>300,64611=>300,64612=>680,64613=>680,64614=>884,64615=>967,64616=>1037,64617=>1047,64618=>680,64619=>680,64620=>884,
+ 64621=>967,64622=>1037,64623=>1047,64624=>680,64625=>680,64626=>884,64627=>967,64628=>1037,64629=>1047,64630=>680,64631=>680,64632=>884,64633=>967,64634=>1037,64635=>1047,64636=>1274,
+ 64637=>1284,64638=>1274,64639=>1284,64640=>821,64641=>1221,64642=>1188,64643=>1341,64644=>1351,64645=>884,64646=>1037,64647=>1047,64648=>806,64649=>1173,64650=>680,64651=>680,64652=>884,
+ 64653=>967,64654=>1037,64655=>1047,64656=>793,64657=>680,64658=>680,64659=>884,64660=>967,64661=>1037,64662=>1047,64663=>911,64664=>911,64665=>911,64666=>806,64667=>679,64668=>911,
+ 64669=>911,64670=>911,64671=>806,64672=>679,64673=>911,64674=>911,64675=>911,64676=>806,64677=>679,64678=>806,64679=>1284,64680=>1179,64681=>1284,64682=>1179,64683=>1284,64684=>1179,
+ 64685=>1408,64686=>1408,64687=>1408,64688=>1303,64689=>1455,64690=>1455,64691=>1350,64692=>1455,64693=>1455,64694=>1455,64695=>1350,64696=>1371,64697=>1266,64698=>1224,64699=>1119,64700=>1224,
+ 64701=>1119,64702=>1104,64703=>1104,64704=>1104,64705=>999,64706=>1104,64707=>999,64708=>1070,64709=>1070,64710=>1070,64711=>676,64712=>965,64713=>911,64714=>911,64715=>911,64716=>806,
+ 64717=>679,64718=>1119,64719=>1119,64720=>1119,64721=>1014,64722=>911,64723=>911,64724=>911,64725=>806,64726=>679,64727=>1324,64728=>1219,64729=>686,64730=>911,64731=>911,64732=>911,
+ 64733=>806,64734=>679,64735=>776,64736=>649,64737=>776,64738=>649,64739=>776,64740=>649,64741=>776,64742=>649,64743=>1303,64744=>1176,64745=>1303,64746=>1176,64747=>793,64748=>1082,
+ 64749=>776,64750=>776,64751=>649,64752=>776,64753=>649,64754=>306,64755=>302,64756=>298,64757=>1527,64758=>1537,64759=>1380,64760=>1390,64761=>1380,64762=>1390,64763=>1564,64764=>1574,
+ 64765=>1564,64766=>1574,64767=>1440,64768=>1450,64769=>1440,64770=>1450,64771=>1440,64772=>1450,64773=>1611,64774=>1621,64775=>1611,64776=>1621,64777=>1429,64778=>1429,64779=>1429,64780=>1411,
+ 64781=>1207,64782=>1207,64783=>1254,64784=>1254,64785=>1527,64786=>1537,64787=>1348,64788=>1358,64789=>1348,64790=>1358,64791=>1564,64792=>1574,64793=>1564,64794=>1574,64795=>1431,64796=>1441,
+ 64797=>1431,64798=>1441,64799=>1431,64800=>1441,64801=>1611,64802=>1621,64803=>1611,64804=>1621,64805=>1429,64806=>1429,64807=>1429,64808=>1411,64809=>1207,64810=>1207,64811=>1254,64812=>1254,
+ 64813=>1408,64814=>1408,64815=>1408,64816=>1303,64817=>1176,64818=>1176,64819=>1266,64820=>1408,64821=>1408,64822=>1408,64823=>1408,64824=>1408,64825=>1408,64826=>1266,64827=>1266,64828=>273,
+ 64829=>243,64830=>600,64831=>600,64848=>1444,64849=>1541,64850=>1549,64851=>1444,64852=>1444,64853=>1444,64854=>1444,64855=>1444,64856=>1830,64857=>1817,64858=>1975,64859=>1964,64860=>2046,
+ 64861=>2046,64862=>2202,64863=>1962,64864=>1941,64865=>1941,64866=>1944,64867=>1836,64868=>2114,64869=>2093,64870=>1991,64871=>2049,64872=>1941,64873=>2212,64874=>1962,64875=>1941,64876=>1944,
+ 64877=>1836,64878=>2249,64879=>2096,64880=>1988,64881=>1925,64882=>1904,64883=>1799,64884=>2070,64885=>1833,64886=>1729,64887=>1652,64888=>1881,64889=>1729,64890=>1892,64891=>1881,64892=>1759,
+ 64893=>1637,64894=>1670,64895=>1654,64896=>1522,64897=>1686,64898=>1675,64899=>1549,64900=>1541,64901=>1522,64902=>1444,64903=>1436,64904=>1444,64905=>1757,64906=>1652,64907=>1975,64908=>1757,
+ 64909=>1652,64910=>1757,64911=>1652,64914=>1757,64915=>1857,64916=>1752,64917=>1444,64918=>1675,64919=>1522,64920=>1444,64921=>1675,64922=>1581,64923=>1570,64924=>1417,64925=>1362,64926=>1686,
+ 64927=>1686,64928=>1675,64929=>1686,64930=>1675,64931=>1581,64932=>1570,64933=>1975,64934=>2069,64935=>1964,64936=>2202,64937=>2259,64938=>2212,64939=>2259,64940=>1686,64941=>1581,64942=>1686,
+ 64943=>1686,64944=>1581,64945=>1870,64946=>1817,64947=>1686,64948=>1637,64949=>1444,64950=>1892,64951=>1886,64952=>1549,64953=>1975,64954=>1444,64955=>1723,64956=>1522,64957=>1541,64958=>2080,
+ 64959=>2080,64960=>1975,64961=>1817,64962=>1686,64963=>1499,64964=>1757,64965=>1883,64966=>2212,64967=>1686,65008=>1523,65009=>1172,65010=>1159,65011=>1356,65012=>2111,65013=>2258,65014=>2130,
+ 65015=>1552,65016=>2046,65017=>1856,65018=>1930,65019=>1070,65056=>450,65057=>450,65058=>450,65059=>450,65072=>1000,65073=>1000,65074=>1000,65075=>1000,65076=>1000,65077=>1000,65078=>1000,
+ 65079=>1000,65080=>1000,65081=>1000,65082=>1000,65083=>1000,65084=>1000,65085=>1000,65086=>1000,65087=>1000,65088=>1000,65089=>1000,65090=>1000,65091=>1000,65092=>1000,65097=>1000,65098=>1000,
+ 65099=>1000,65100=>1000,65101=>1000,65102=>1000,65103=>1000,65104=>167,65105=>250,65106=>167,65108=>167,65109=>167,65110=>334,65111=>167,65112=>600,65113=>200,65114=>200,65115=>200,
+ 65116=>200,65117=>200,65118=>200,65119=>334,65120=>400,65121=>233,65122=>350,65123=>200,65124=>350,65125=>350,65126=>350,65128=>167,65129=>334,65130=>533,65131=>609,65136=>300,
+ 65137=>298,65138=>296,65140=>298,65142=>300,65143=>298,65144=>300,65145=>302,65146=>298,65147=>296,65148=>306,65149=>306,65150=>154,65151=>154,65152=>529,65153=>243,65154=>273,
+ 65155=>243,65156=>273,65157=>470,65158=>466,65159=>243,65160=>273,65161=>731,65162=>793,65163=>276,65164=>243,65165=>243,65166=>273,65167=>771,65168=>788,65169=>276,65170=>243,
+ 65171=>514,65172=>477,65173=>771,65174=>788,65175=>276,65176=>243,65177=>771,65178=>788,65179=>276,65180=>243,65181=>544,65182=>658,65183=>646,65184=>637,65185=>544,65186=>658,
+ 65187=>646,65188=>637,65189=>544,65190=>658,65191=>646,65192=>637,65193=>430,65194=>458,65195=>430,65196=>458,65197=>421,65198=>436,65199=>421,65200=>436,65201=>1194,65202=>1194,
+ 65203=>770,65204=>770,65205=>1194,65206=>1194,65207=>770,65208=>770,65209=>1291,65210=>1291,65211=>817,65212=>817,65213=>1291,65214=>1291,65215=>817,65216=>817,65217=>843,65218=>843,
+ 65219=>733,65220=>733,65221=>843,65222=>843,65223=>733,65224=>733,65225=>594,65226=>556,65227=>586,65228=>554,65229=>594,65230=>556,65231=>586,65232=>554,65233=>957,65234=>903,
+ 65235=>466,65236=>480,65237=>800,65238=>823,65239=>466,65240=>480,65241=>757,65242=>733,65243=>432,65244=>549,65245=>662,65246=>673,65247=>273,65248=>243,65249=>589,65250=>640,
+ 65251=>481,65252=>532,65253=>692,65254=>723,65255=>276,65256=>243,65257=>514,65258=>477,65259=>686,65260=>405,65261=>470,65262=>466,65263=>731,65264=>793,65265=>731,65266=>803,
+ 65267=>276,65268=>243,65269=>551,65270=>603,65271=>551,65272=>603,65273=>551,65274=>603,65275=>551,65276=>603,65281=>1000,65282=>1000,65283=>1000,65284=>1000,65285=>1000,65286=>1000,
+ 65287=>1000,65288=>1000,65289=>1000,65290=>1000,65291=>1000,65292=>1000,65293=>1000,65294=>1000,65295=>1000,65296=>1000,65297=>1000,65298=>1000,65299=>1000,65300=>1000,65301=>1000,65302=>1000,
+ 65303=>1000,65304=>1000,65305=>1000,65306=>1000,65307=>1000,65308=>1000,65309=>1000,65310=>1000,65311=>1000,65312=>1000,65313=>1000,65314=>1000,65315=>1000,65316=>1000,65317=>1000,65318=>1000,
+ 65319=>1000,65320=>1000,65321=>1000,65322=>1000,65323=>1000,65324=>1000,65325=>1000,65326=>1000,65327=>1000,65328=>1000,65329=>1000,65330=>1000,65331=>1000,65332=>1000,65333=>1000,65334=>1000,
+ 65335=>1000,65336=>1000,65337=>1000,65338=>1000,65339=>1000,65340=>1000,65341=>1000,65342=>1000,65343=>1000,65344=>1000,65345=>1000,65346=>1000,65347=>1000,65348=>1000,65349=>1000,65350=>1000,
+ 65351=>1000,65352=>1000,65353=>1000,65354=>1000,65355=>1000,65356=>1000,65357=>1000,65358=>1000,65359=>1000,65360=>1000,65361=>1000,65362=>1000,65363=>1000,65364=>1000,65365=>1000,65366=>1000,
+ 65367=>1000,65368=>1000,65369=>1000,65370=>1000,65371=>1000,65372=>1000,65373=>1000,65374=>1000,65377=>500,65378=>500,65379=>500,65380=>500,65381=>500,65382=>500,65383=>500,65384=>500,
+ 65385=>500,65386=>500,65387=>500,65388=>500,65389=>500,65390=>500,65391=>500,65392=>500,65393=>500,65394=>500,65395=>500,65396=>500,65397=>500,65398=>500,65399=>500,65400=>500,
+ 65401=>500,65402=>500,65403=>500,65404=>500,65405=>500,65406=>500,65407=>500,65408=>500,65409=>500,65410=>500,65411=>500,65412=>500,65413=>500,65414=>500,65415=>500,65416=>500,
+ 65417=>500,65418=>500,65419=>500,65420=>500,65421=>500,65422=>500,65423=>500,65424=>500,65425=>500,65426=>500,65427=>500,65428=>500,65429=>500,65430=>500,65431=>500,65432=>500,
+ 65433=>500,65434=>500,65435=>500,65436=>500,65437=>500,65438=>500,65439=>500,65440=>500,65441=>500,65442=>500,65443=>500,65444=>500,65445=>500,65446=>500,65447=>500,65448=>500,
+ 65449=>500,65450=>500,65451=>500,65452=>500,65453=>500,65454=>500,65455=>500,65456=>500,65457=>500,65458=>500,65459=>500,65460=>500,65461=>500,65462=>500,65463=>500,65464=>500,
+ 65465=>500,65466=>500,65467=>500,65468=>500,65469=>500,65470=>500,65474=>500,65475=>500,65476=>500,65477=>500,65478=>500,65479=>500,65482=>500,65483=>500,65484=>500,65485=>500,
+ 65486=>500,65487=>500,65490=>500,65491=>500,65492=>500,65493=>500,65494=>500,65495=>500,65498=>500,65499=>500,65500=>500,65504=>1000,65505=>1000,65506=>1000,65507=>1000,65508=>1000,
+ 65509=>1000,65510=>1000,65512=>500,65513=>500,65514=>500,65515=>500,65516=>500,65517=>500,65518=>500,65532=>1000,65533=>1000,19968=>1000,19969=>1000,19970=>1000,19971=>1000,19972=>1000,
+ 19973=>1000,19974=>1000,19975=>1000,19976=>1000,19977=>1000,19978=>1000,19979=>1000,19980=>1000,19981=>1000,19982=>1000,19983=>1000,19984=>1000,19985=>1000,19986=>1000,19987=>1000,19988=>1000,
+ 19989=>1000,19990=>1000,19991=>1000,19992=>1000,19993=>1000,19994=>1000,19995=>1000,19996=>1000,19997=>1000,19998=>1000,19999=>1000,20000=>1000,20001=>1000,20002=>1000,20003=>1000,20004=>1000,
+ 20005=>1000,20006=>1000,20007=>1000,20008=>1000,20009=>1000,20010=>1000,20011=>1000,20012=>1000,20013=>1000,20014=>1000,20015=>1000,20016=>1000,20017=>1000,20018=>1000,20019=>1000,20020=>1000,
+ 20021=>1000,20022=>1000,20023=>1000,20024=>1000,20025=>1000,20026=>1000,20027=>1000,20028=>1000,20029=>1000,20030=>1000,20031=>1000,20032=>1000,20033=>1000,20034=>1000,20035=>1000,20036=>1000,
+ 20037=>1000,20038=>1000,20039=>1000,20040=>1000,20041=>1000,20042=>1000,20043=>1000,20044=>1000,20045=>1000,20046=>1000,20047=>1000,20048=>1000,20049=>1000,20050=>1000,20051=>1000,20052=>1000,
+ 20053=>1000,20054=>1000,20055=>1000,20056=>1000,20057=>1000,20058=>1000,20059=>1000,20060=>1000,20061=>1000,20062=>1000,20063=>1000,20064=>1000,20065=>1000,20066=>1000,20067=>1000,20068=>1000,
+ 20069=>1000,20070=>1000,20071=>1000,20072=>1000,20073=>1000,20074=>1000,20075=>1000,20076=>1000,20077=>1000,20078=>1000,20079=>1000,20080=>1000,20081=>1000,20082=>1000,20083=>1000,20084=>1000,
+ 20085=>1000,20086=>1000,20087=>1000,20088=>1000,20089=>1000,20090=>1000,20091=>1000,20092=>1000,20093=>1000,20094=>1000,20095=>1000,20096=>1000,20097=>1000,20098=>1000,20099=>1000,20100=>1000,
+ 20101=>1000,20102=>1000,20103=>1000,20104=>1000,20105=>1000,20106=>1000,20107=>1000,20108=>1000,20109=>1000,20110=>1000,20111=>1000,20112=>1000,20113=>1000,20114=>1000,20115=>1000,20116=>1000,
+ 20117=>1000,20118=>1000,20119=>1000,20120=>1000,20121=>1000,20122=>1000,20123=>1000,20124=>1000,20125=>1000,20126=>1000,20127=>1000,20128=>1000,20129=>1000,20130=>1000,20131=>1000,20132=>1000,
+ 20133=>1000,20134=>1000,20135=>1000,20136=>1000,20137=>1000,20138=>1000,20139=>1000,20140=>1000,20141=>1000,20142=>1000,20143=>1000,20144=>1000,20145=>1000,20146=>1000,20147=>1000,20148=>1000,
+ 20149=>1000,20150=>1000,20151=>1000,20152=>1000,20153=>1000,20154=>1000,20155=>1000,20156=>1000,20157=>1000,20158=>1000,20159=>1000,20160=>1000,20161=>1000,20162=>1000,20163=>1000,20164=>1000,
+ 20165=>1000,20166=>1000,20167=>1000,20168=>1000,20169=>1000,20170=>1000,20171=>1000,20172=>1000,20173=>1000,20174=>1000,20175=>1000,20176=>1000,20177=>1000,20178=>1000,20179=>1000,20180=>1000,
+ 20181=>1000,20182=>1000,20183=>1000,20184=>1000,20185=>1000,20186=>1000,20187=>1000,20188=>1000,20189=>1000,20190=>1000,20191=>1000,20192=>1000,20193=>1000,20194=>1000,20195=>1000,20196=>1000,
+ 20197=>1000,20198=>1000,20199=>1000,20200=>1000,20201=>1000,20202=>1000,20203=>1000,20204=>1000,20205=>1000,20206=>1000,20207=>1000,20208=>1000,20209=>1000,20210=>1000,20211=>1000,20212=>1000,
+ 20213=>1000,20214=>1000,20215=>1000,20216=>1000,20217=>1000,20218=>1000,20219=>1000,20220=>1000,20221=>1000,20222=>1000,20223=>1000,20224=>1000,20225=>1000,20226=>1000,20227=>1000,20228=>1000,
+ 20229=>1000,20230=>1000,20231=>1000,20232=>1000,20233=>1000,20234=>1000,20235=>1000,20236=>1000,20237=>1000,20238=>1000,20239=>1000,20240=>1000,20241=>1000,20242=>1000,20243=>1000,20244=>1000,
+ 20245=>1000,20246=>1000,20247=>1000,20248=>1000,20249=>1000,20250=>1000,20251=>1000,20252=>1000,20253=>1000,20254=>1000,20255=>1000,20256=>1000,20257=>1000,20258=>1000,20259=>1000,20260=>1000,
+ 20261=>1000,20262=>1000,20263=>1000,20264=>1000,20265=>1000,20266=>1000,20267=>1000,20268=>1000,20269=>1000,20270=>1000,20271=>1000,20272=>1000,20273=>1000,20274=>1000,20275=>1000,20276=>1000,
+ 20277=>1000,20278=>1000,20279=>1000,20280=>1000,20281=>1000,20282=>1000,20283=>1000,20284=>1000,20285=>1000,20286=>1000,20287=>1000,20288=>1000,20289=>1000,20290=>1000,20291=>1000,20292=>1000,
+ 20293=>1000,20294=>1000,20295=>1000,20296=>1000,20297=>1000,20298=>1000,20299=>1000,20300=>1000,20301=>1000,20302=>1000,20303=>1000,20304=>1000,20305=>1000,20306=>1000,20307=>1000,20308=>1000,
+ 20309=>1000,20310=>1000,20311=>1000,20312=>1000,20313=>1000,20314=>1000,20315=>1000,20316=>1000,20317=>1000,20318=>1000,20319=>1000,20320=>1000,20321=>1000,20322=>1000,20323=>1000,20324=>1000,
+ 20325=>1000,20326=>1000,20327=>1000,20328=>1000,20329=>1000,20330=>1000,20331=>1000,20332=>1000,20333=>1000,20334=>1000,20335=>1000,20336=>1000,20337=>1000,20338=>1000,20339=>1000,20340=>1000,
+ 20341=>1000,20342=>1000,20343=>1000,20344=>1000,20345=>1000,20346=>1000,20347=>1000,20348=>1000,20349=>1000,20350=>1000,20351=>1000,20352=>1000,20353=>1000,20354=>1000,20355=>1000,20356=>1000,
+ 20357=>1000,20358=>1000,20359=>1000,20360=>1000,20361=>1000,20362=>1000,20363=>1000,20364=>1000,20365=>1000,20366=>1000,20367=>1000,20368=>1000,20369=>1000,20370=>1000,20371=>1000,20372=>1000,
+ 20373=>1000,20374=>1000,20375=>1000,20376=>1000,20377=>1000,20378=>1000,20379=>1000,20380=>1000,20381=>1000,20382=>1000,20383=>1000,20384=>1000,20385=>1000,20386=>1000,20387=>1000,20388=>1000,
+ 20389=>1000,20390=>1000,20391=>1000,20392=>1000,20393=>1000,20394=>1000,20395=>1000,20396=>1000,20397=>1000,20398=>1000,20399=>1000,20400=>1000,20401=>1000,20402=>1000,20403=>1000,20404=>1000,
+ 20405=>1000,20406=>1000,20407=>1000,20408=>1000,20409=>1000,20410=>1000,20411=>1000,20412=>1000,20413=>1000,20414=>1000,20415=>1000,20416=>1000,20417=>1000,20418=>1000,20419=>1000,20420=>1000,
+ 20421=>1000,20422=>1000,20423=>1000,20424=>1000,20425=>1000,20426=>1000,20427=>1000,20428=>1000,20429=>1000,20430=>1000,20431=>1000,20432=>1000,20433=>1000,20434=>1000,20435=>1000,20436=>1000,
+ 20437=>1000,20438=>1000,20439=>1000,20440=>1000,20441=>1000,20442=>1000,20443=>1000,20444=>1000,20445=>1000,20446=>1000,20447=>1000,20448=>1000,20449=>1000,20450=>1000,20451=>1000,20452=>1000,
+ 20453=>1000,20454=>1000,20455=>1000,20456=>1000,20457=>1000,20458=>1000,20459=>1000,20460=>1000,20461=>1000,20462=>1000,20463=>1000,20464=>1000,20465=>1000,20466=>1000,20467=>1000,20468=>1000,
+ 20469=>1000,20470=>1000,20471=>1000,20472=>1000,20473=>1000,20474=>1000,20475=>1000,20476=>1000,20477=>1000,20478=>1000,20479=>1000,20480=>1000,20481=>1000,20482=>1000,20483=>1000,20484=>1000,
+ 20485=>1000,20486=>1000,20487=>1000,20488=>1000,20489=>1000,20490=>1000,20491=>1000,20492=>1000,20493=>1000,20494=>1000,20495=>1000,20496=>1000,20497=>1000,20498=>1000,20499=>1000,20500=>1000,
+ 20501=>1000,20502=>1000,20503=>1000,20504=>1000,20505=>1000,20506=>1000,20507=>1000,20508=>1000,20509=>1000,20510=>1000,20511=>1000,20512=>1000,20513=>1000,20514=>1000,20515=>1000,20516=>1000,
+ 20517=>1000,20518=>1000,20519=>1000,20520=>1000,20521=>1000,20522=>1000,20523=>1000,20524=>1000,20525=>1000,20526=>1000,20527=>1000,20528=>1000,20529=>1000,20530=>1000,20531=>1000,20532=>1000,
+ 20533=>1000,20534=>1000,20535=>1000,20536=>1000,20537=>1000,20538=>1000,20539=>1000,20540=>1000,20541=>1000,20542=>1000,20543=>1000,20544=>1000,20545=>1000,20546=>1000,20547=>1000,20548=>1000,
+ 20549=>1000,20550=>1000,20551=>1000,20552=>1000,20553=>1000,20554=>1000,20555=>1000,20556=>1000,20557=>1000,20558=>1000,20559=>1000,20560=>1000,20561=>1000,20562=>1000,20563=>1000,20564=>1000,
+ 20565=>1000,20566=>1000,20567=>1000,20568=>1000,20569=>1000,20570=>1000,20571=>1000,20572=>1000,20573=>1000,20574=>1000,20575=>1000,20576=>1000,20577=>1000,20578=>1000,20579=>1000,20580=>1000,
+ 20581=>1000,20582=>1000,20583=>1000,20584=>1000,20585=>1000,20586=>1000,20587=>1000,20588=>1000,20589=>1000,20590=>1000,20591=>1000,20592=>1000,20593=>1000,20594=>1000,20595=>1000,20596=>1000,
+ 20597=>1000,20598=>1000,20599=>1000,20600=>1000,20601=>1000,20602=>1000,20603=>1000,20604=>1000,20605=>1000,20606=>1000,20607=>1000,20608=>1000,20609=>1000,20610=>1000,20611=>1000,20612=>1000,
+ 20613=>1000,20614=>1000,20615=>1000,20616=>1000,20617=>1000,20618=>1000,20619=>1000,20620=>1000,20621=>1000,20622=>1000,20623=>1000,20624=>1000,20625=>1000,20626=>1000,20627=>1000,20628=>1000,
+ 20629=>1000,20630=>1000,20631=>1000,20632=>1000,20633=>1000,20634=>1000,20635=>1000,20636=>1000,20637=>1000,20638=>1000,20639=>1000,20640=>1000,20641=>1000,20642=>1000,20643=>1000,20644=>1000,
+ 20645=>1000,20646=>1000,20647=>1000,20648=>1000,20649=>1000,20650=>1000,20651=>1000,20652=>1000,20653=>1000,20654=>1000,20655=>1000,20656=>1000,20657=>1000,20658=>1000,20659=>1000,20660=>1000,
+ 20661=>1000,20662=>1000,20663=>1000,20664=>1000,20665=>1000,20666=>1000,20667=>1000,20668=>1000,20669=>1000,20670=>1000,20671=>1000,20672=>1000,20673=>1000,20674=>1000,20675=>1000,20676=>1000,
+ 20677=>1000,20678=>1000,20679=>1000,20680=>1000,20681=>1000,20682=>1000,20683=>1000,20684=>1000,20685=>1000,20686=>1000,20687=>1000,20688=>1000,20689=>1000,20690=>1000,20691=>1000,20692=>1000,
+ 20693=>1000,20694=>1000,20695=>1000,20696=>1000,20697=>1000,20698=>1000,20699=>1000,20700=>1000,20701=>1000,20702=>1000,20703=>1000,20704=>1000,20705=>1000,20706=>1000,20707=>1000,20708=>1000,
+ 20709=>1000,20710=>1000,20711=>1000,20712=>1000,20713=>1000,20714=>1000,20715=>1000,20716=>1000,20717=>1000,20718=>1000,20719=>1000,20720=>1000,20721=>1000,20722=>1000,20723=>1000,20724=>1000,
+ 20725=>1000,20726=>1000,20727=>1000,20728=>1000,20729=>1000,20730=>1000,20731=>1000,20732=>1000,20733=>1000,20734=>1000,20735=>1000,20736=>1000,20737=>1000,20738=>1000,20739=>1000,20740=>1000,
+ 20741=>1000,20742=>1000,20743=>1000,20744=>1000,20745=>1000,20746=>1000,20747=>1000,20748=>1000,20749=>1000,20750=>1000,20751=>1000,20752=>1000,20753=>1000,20754=>1000,20755=>1000,20756=>1000,
+ 20757=>1000,20758=>1000,20759=>1000,20760=>1000,20761=>1000,20762=>1000,20763=>1000,20764=>1000,20765=>1000,20766=>1000,20767=>1000,20768=>1000,20769=>1000,20770=>1000,20771=>1000,20772=>1000,
+ 20773=>1000,20774=>1000,20775=>1000,20776=>1000,20777=>1000,20778=>1000,20779=>1000,20780=>1000,20781=>1000,20782=>1000,20783=>1000,20784=>1000,20785=>1000,20786=>1000,20787=>1000,20788=>1000,
+ 20789=>1000,20790=>1000,20791=>1000,20792=>1000,20793=>1000,20794=>1000,20795=>1000,20796=>1000,20797=>1000,20798=>1000,20799=>1000,20800=>1000,20801=>1000,20802=>1000,20803=>1000,20804=>1000,
+ 20805=>1000,20806=>1000,20807=>1000,20808=>1000,20809=>1000,20810=>1000,20811=>1000,20812=>1000,20813=>1000,20814=>1000,20815=>1000,20816=>1000,20817=>1000,20818=>1000,20819=>1000,20820=>1000,
+ 20821=>1000,20822=>1000,20823=>1000,20824=>1000,20825=>1000,20826=>1000,20827=>1000,20828=>1000,20829=>1000,20830=>1000,20831=>1000,20832=>1000,20833=>1000,20834=>1000,20835=>1000,20836=>1000,
+ 20837=>1000,20838=>1000,20839=>1000,20840=>1000,20841=>1000,20842=>1000,20843=>1000,20844=>1000,20845=>1000,20846=>1000,20847=>1000,20848=>1000,20849=>1000,20850=>1000,20851=>1000,20852=>1000,
+ 20853=>1000,20854=>1000,20855=>1000,20856=>1000,20857=>1000,20858=>1000,20859=>1000,20860=>1000,20861=>1000,20862=>1000,20863=>1000,20864=>1000,20865=>1000,20866=>1000,20867=>1000,20868=>1000,
+ 20869=>1000,20870=>1000,20871=>1000,20872=>1000,20873=>1000,20874=>1000,20875=>1000,20876=>1000,20877=>1000,20878=>1000,20879=>1000,20880=>1000,20881=>1000,20882=>1000,20883=>1000,20884=>1000,
+ 20885=>1000,20886=>1000,20887=>1000,20888=>1000,20889=>1000,20890=>1000,20891=>1000,20892=>1000,20893=>1000,20894=>1000,20895=>1000,20896=>1000,20897=>1000,20898=>1000,20899=>1000,20900=>1000,
+ 20901=>1000,20902=>1000,20903=>1000,20904=>1000,20905=>1000,20906=>1000,20907=>1000,20908=>1000,20909=>1000,20910=>1000,20911=>1000,20912=>1000,20913=>1000,20914=>1000,20915=>1000,20916=>1000,
+ 20917=>1000,20918=>1000,20919=>1000,20920=>1000,20921=>1000,20922=>1000,20923=>1000,20924=>1000,20925=>1000,20926=>1000,20927=>1000,20928=>1000,20929=>1000,20930=>1000,20931=>1000,20932=>1000,
+ 20933=>1000,20934=>1000,20935=>1000,20936=>1000,20937=>1000,20938=>1000,20939=>1000,20940=>1000,20941=>1000,20942=>1000,20943=>1000,20944=>1000,20945=>1000,20946=>1000,20947=>1000,20948=>1000,
+ 20949=>1000,20950=>1000,20951=>1000,20952=>1000,20953=>1000,20954=>1000,20955=>1000,20956=>1000,20957=>1000,20958=>1000,20959=>1000,20960=>1000,20961=>1000,20962=>1000,20963=>1000,20964=>1000,
+ 20965=>1000,20966=>1000,20967=>1000,20968=>1000,20969=>1000,20970=>1000,20971=>1000,20972=>1000,20973=>1000,20974=>1000,20975=>1000,20976=>1000,20977=>1000,20978=>1000,20979=>1000,20980=>1000,
+ 20981=>1000,20982=>1000,20983=>1000,20984=>1000,20985=>1000,20986=>1000,20987=>1000,20988=>1000,20989=>1000,20990=>1000,20991=>1000,20992=>1000,20993=>1000,20994=>1000,20995=>1000,20996=>1000,
+ 20997=>1000,20998=>1000,20999=>1000,21000=>1000,21001=>1000,21002=>1000,21003=>1000,21004=>1000,21005=>1000,21006=>1000,21007=>1000,21008=>1000,21009=>1000,21010=>1000,21011=>1000,21012=>1000,
+ 21013=>1000,21014=>1000,21015=>1000,21016=>1000,21017=>1000,21018=>1000,21019=>1000,21020=>1000,21021=>1000,21022=>1000,21023=>1000,21024=>1000,21025=>1000,21026=>1000,21027=>1000,21028=>1000,
+ 21029=>1000,21030=>1000,21031=>1000,21032=>1000,21033=>1000,21034=>1000,21035=>1000,21036=>1000,21037=>1000,21038=>1000,21039=>1000,21040=>1000,21041=>1000,21042=>1000,21043=>1000,21044=>1000,
+ 21045=>1000,21046=>1000,21047=>1000,21048=>1000,21049=>1000,21050=>1000,21051=>1000,21052=>1000,21053=>1000,21054=>1000,21055=>1000,21056=>1000,21057=>1000,21058=>1000,21059=>1000,21060=>1000,
+ 21061=>1000,21062=>1000,21063=>1000,21064=>1000,21065=>1000,21066=>1000,21067=>1000,21068=>1000,21069=>1000,21070=>1000,21071=>1000,21072=>1000,21073=>1000,21074=>1000,21075=>1000,21076=>1000,
+ 21077=>1000,21078=>1000,21079=>1000,21080=>1000,21081=>1000,21082=>1000,21083=>1000,21084=>1000,21085=>1000,21086=>1000,21087=>1000,21088=>1000,21089=>1000,21090=>1000,21091=>1000,21092=>1000,
+ 21093=>1000,21094=>1000,21095=>1000,21096=>1000,21097=>1000,21098=>1000,21099=>1000,21100=>1000,21101=>1000,21102=>1000,21103=>1000,21104=>1000,21105=>1000,21106=>1000,21107=>1000,21108=>1000,
+ 21109=>1000,21110=>1000,21111=>1000,21112=>1000,21113=>1000,21114=>1000,21115=>1000,21116=>1000,21117=>1000,21118=>1000,21119=>1000,21120=>1000,21121=>1000,21122=>1000,21123=>1000,21124=>1000,
+ 21125=>1000,21126=>1000,21127=>1000,21128=>1000,21129=>1000,21130=>1000,21131=>1000,21132=>1000,21133=>1000,21134=>1000,21135=>1000,21136=>1000,21137=>1000,21138=>1000,21139=>1000,21140=>1000,
+ 21141=>1000,21142=>1000,21143=>1000,21144=>1000,21145=>1000,21146=>1000,21147=>1000,21148=>1000,21149=>1000,21150=>1000,21151=>1000,21152=>1000,21153=>1000,21154=>1000,21155=>1000,21156=>1000,
+ 21157=>1000,21158=>1000,21159=>1000,21160=>1000,21161=>1000,21162=>1000,21163=>1000,21164=>1000,21165=>1000,21166=>1000,21167=>1000,21168=>1000,21169=>1000,21170=>1000,21171=>1000,21172=>1000,
+ 21173=>1000,21174=>1000,21175=>1000,21176=>1000,21177=>1000,21178=>1000,21179=>1000,21180=>1000,21181=>1000,21182=>1000,21183=>1000,21184=>1000,21185=>1000,21186=>1000,21187=>1000,21188=>1000,
+ 21189=>1000,21190=>1000,21191=>1000,21192=>1000,21193=>1000,21194=>1000,21195=>1000,21196=>1000,21197=>1000,21198=>1000,21199=>1000,21200=>1000,21201=>1000,21202=>1000,21203=>1000,21204=>1000,
+ 21205=>1000,21206=>1000,21207=>1000,21208=>1000,21209=>1000,21210=>1000,21211=>1000,21212=>1000,21213=>1000,21214=>1000,21215=>1000,21216=>1000,21217=>1000,21218=>1000,21219=>1000,21220=>1000,
+ 21221=>1000,21222=>1000,21223=>1000,21224=>1000,21225=>1000,21226=>1000,21227=>1000,21228=>1000,21229=>1000,21230=>1000,21231=>1000,21232=>1000,21233=>1000,21234=>1000,21235=>1000,21236=>1000,
+ 21237=>1000,21238=>1000,21239=>1000,21240=>1000,21241=>1000,21242=>1000,21243=>1000,21244=>1000,21245=>1000,21246=>1000,21247=>1000,21248=>1000,21249=>1000,21250=>1000,21251=>1000,21252=>1000,
+ 21253=>1000,21254=>1000,21255=>1000,21256=>1000,21257=>1000,21258=>1000,21259=>1000,21260=>1000,21261=>1000,21262=>1000,21263=>1000,21264=>1000,21265=>1000,21266=>1000,21267=>1000,21268=>1000,
+ 21269=>1000,21270=>1000,21271=>1000,21272=>1000,21273=>1000,21274=>1000,21275=>1000,21276=>1000,21277=>1000,21278=>1000,21279=>1000,21280=>1000,21281=>1000,21282=>1000,21283=>1000,21284=>1000,
+ 21285=>1000,21286=>1000,21287=>1000,21288=>1000,21289=>1000,21290=>1000,21291=>1000,21292=>1000,21293=>994,21294=>1000,21295=>1000,21296=>1000,21297=>1000,21298=>1000,21299=>1000,21300=>1000,
+ 21301=>1000,21302=>1000,21303=>1000,21304=>1000,21305=>1000,21306=>1000,21307=>1000,21308=>1000,21309=>1000,21310=>1000,21311=>1000,21312=>1000,21313=>1000,21314=>1000,21315=>1000,21316=>1000,
+ 21317=>1000,21318=>1000,21319=>1000,21320=>1000,21321=>1000,21322=>1000,21323=>1000,21324=>1000,21325=>1000,21326=>1000,21327=>1000,21328=>1000,21329=>1000,21330=>1000,21331=>1000,21332=>1000,
+ 21333=>1000,21334=>1000,21335=>1000,21336=>1000,21337=>1000,21338=>1000,21339=>1000,21340=>1000,21341=>1000,21342=>1000,21343=>1000,21344=>1000,21345=>1000,21346=>1000,21347=>1000,21348=>1000,
+ 21349=>1000,21350=>1000,21351=>1000,21352=>1000,21353=>1000,21354=>1000,21355=>1000,21356=>1000,21357=>1000,21358=>1000,21359=>1000,21360=>1000,21361=>1000,21362=>1000,21363=>1000,21364=>1000,
+ 21365=>1000,21366=>1000,21367=>1000,21368=>1000,21369=>1000,21370=>1000,21371=>1000,21372=>1000,21373=>1000,21374=>1000,21375=>1000,21376=>1000,21377=>1000,21378=>1000,21379=>1000,21380=>1000,
+ 21381=>1000,21382=>1000,21383=>1000,21384=>1000,21385=>1000,21386=>1000,21387=>1000,21388=>1000,21389=>1000,21390=>1000,21391=>1000,21392=>1000,21393=>1000,21394=>1000,21395=>1000,21396=>1000,
+ 21397=>1000,21398=>1000,21399=>1000,21400=>1000,21401=>1000,21402=>1000,21403=>1000,21404=>1000,21405=>1000,21406=>1000,21407=>1000,21408=>1000,21409=>1000,21410=>1000,21411=>1000,21412=>1000,
+ 21413=>1000,21414=>1000,21415=>1000,21416=>1000,21417=>1000,21418=>1000,21419=>1000,21420=>1000,21421=>1000,21422=>1000,21423=>1000,21424=>1000,21425=>1000,21426=>1000,21427=>1000,21428=>1000,
+ 21429=>1000,21430=>1000,21431=>1000,21432=>1000,21433=>1000,21434=>1000,21435=>1000,21436=>1000,21437=>1000,21438=>1000,21439=>1000,21440=>1000,21441=>1000,21442=>1000,21443=>1000,21444=>1000,
+ 21445=>1000,21446=>1000,21447=>1000,21448=>1000,21449=>1000,21450=>1000,21451=>1000,21452=>1000,21453=>1000,21454=>1000,21455=>1000,21456=>1000,21457=>1000,21458=>1000,21459=>1000,21460=>1000,
+ 21461=>1000,21462=>1000,21463=>1000,21464=>1000,21465=>1000,21466=>1000,21467=>1000,21468=>1000,21469=>1000,21470=>1000,21471=>1000,21472=>1000,21473=>1000,21474=>1000,21475=>1000,21476=>1000,
+ 21477=>1000,21478=>1000,21479=>1000,21480=>1000,21481=>1000,21482=>1000,21483=>1000,21484=>1000,21485=>1000,21486=>1000,21487=>1000,21488=>1000,21489=>1000,21490=>1000,21491=>1000,21492=>1000,
+ 21493=>1000,21494=>1000,21495=>1000,21496=>1000,21497=>1000,21498=>1000,21499=>1000,21500=>1000,21501=>1000,21502=>1000,21503=>1000,21504=>1000,21505=>1000,21506=>1000,21507=>1000,21508=>1000,
+ 21509=>1000,21510=>1000,21511=>1000,21512=>1000,21513=>1000,21514=>1000,21515=>1000,21516=>1000,21517=>1000,21518=>1000,21519=>1000,21520=>1000,21521=>1000,21522=>1000,21523=>1000,21524=>1000,
+ 21525=>1000,21526=>1000,21527=>1000,21528=>1000,21529=>1000,21530=>1000,21531=>1000,21532=>1000,21533=>1000,21534=>1000,21535=>1000,21536=>1000,21537=>1000,21538=>1000,21539=>1000,21540=>1000,
+ 21541=>1000,21542=>1000,21543=>1000,21544=>1000,21545=>1000,21546=>1000,21547=>1000,21548=>1000,21549=>1000,21550=>1000,21551=>1000,21552=>1000,21553=>1000,21554=>1000,21555=>1000,21556=>1000,
+ 21557=>1000,21558=>1000,21559=>1000,21560=>1000,21561=>1000,21562=>1000,21563=>1000,21564=>1000,21565=>1000,21566=>1000,21567=>1000,21568=>1000,21569=>1000,21570=>1000,21571=>1000,21572=>1000,
+ 21573=>1000,21574=>1000,21575=>1000,21576=>1000,21577=>1000,21578=>1000,21579=>1000,21580=>1000,21581=>1000,21582=>1000,21583=>1000,21584=>1000,21585=>1000,21586=>1000,21587=>1000,21588=>1000,
+ 21589=>1000,21590=>1000,21591=>1000,21592=>1000,21593=>1000,21594=>1000,21595=>1000,21596=>1000,21597=>1000,21598=>1000,21599=>1000,21600=>1000,21601=>1000,21602=>1000,21603=>1000,21604=>1000,
+ 21605=>1000,21606=>1000,21607=>1000,21608=>1000,21609=>1000,21610=>1000,21611=>1000,21612=>1000,21613=>1000,21614=>1000,21615=>1000,21616=>1000,21617=>1000,21618=>1000,21619=>1000,21620=>1000,
+ 21621=>1000,21622=>1000,21623=>1000,21624=>1000,21625=>1000,21626=>1000,21627=>1000,21628=>1000,21629=>1000,21630=>1000,21631=>1000,21632=>1000,21633=>1000,21634=>1000,21635=>1000,21636=>1000,
+ 21637=>1000,21638=>1000,21639=>1000,21640=>1000,21641=>1000,21642=>1000,21643=>1000,21644=>1000,21645=>1000,21646=>1000,21647=>1000,21648=>1000,21649=>1000,21650=>1000,21651=>1000,21652=>1000,
+ 21653=>1000,21654=>1000,21655=>1000,21656=>1000,21657=>1000,21658=>1000,21659=>1000,21660=>1000,21661=>1000,21662=>1000,21663=>1000,21664=>1000,21665=>1000,21666=>1000,21667=>1000,21668=>1000,
+ 21669=>1000,21670=>1000,21671=>1000,21672=>1000,21673=>1000,21674=>1000,21675=>1000,21676=>1000,21677=>1000,21678=>1000,21679=>1000,21680=>1000,21681=>1000,21682=>1000,21683=>1000,21684=>1000,
+ 21685=>1000,21686=>1000,21687=>1000,21688=>1000,21689=>1000,21690=>1000,21691=>1000,21692=>1000,21693=>1000,21694=>1000,21695=>1000,21696=>1000,21697=>1000,21698=>1000,21699=>1000,21700=>1000,
+ 21701=>1000,21702=>1000,21703=>1000,21704=>1000,21705=>1000,21706=>1000,21707=>1000,21708=>1000,21709=>1000,21710=>1000,21711=>1000,21712=>1000,21713=>1000,21714=>1000,21715=>1000,21716=>1000,
+ 21717=>1000,21718=>1000,21719=>1000,21720=>1000,21721=>1000,21722=>1000,21723=>1000,21724=>1000,21725=>1000,21726=>1000,21727=>1000,21728=>1000,21729=>1000,21730=>1000,21731=>1000,21732=>1000,
+ 21733=>1000,21734=>1000,21735=>1000,21736=>1000,21737=>1000,21738=>1000,21739=>1000,21740=>1000,21741=>1000,21742=>1000,21743=>1000,21744=>1000,21745=>1000,21746=>1000,21747=>1000,21748=>1000,
+ 21749=>1000,21750=>1000,21751=>1000,21752=>1000,21753=>1000,21754=>1000,21755=>1000,21756=>1000,21757=>1000,21758=>1000,21759=>1000,21760=>1000,21761=>1000,21762=>1000,21763=>1000,21764=>1000,
+ 21765=>1000,21766=>1000,21767=>1000,21768=>1000,21769=>1000,21770=>1000,21771=>1000,21772=>1000,21773=>1000,21774=>1000,21775=>1000,21776=>1000,21777=>1000,21778=>1000,21779=>1000,21780=>1000,
+ 21781=>1000,21782=>1000,21783=>1000,21784=>1000,21785=>1000,21786=>1000,21787=>1000,21788=>1000,21789=>1000,21790=>1000,21791=>1000,21792=>1000,21793=>1000,21794=>1000,21795=>1000,21796=>1000,
+ 21797=>1000,21798=>1000,21799=>1000,21800=>1000,21801=>1000,21802=>1000,21803=>1000,21804=>1000,21805=>1000,21806=>1000,21807=>1000,21808=>1000,21809=>1000,21810=>1000,21811=>1000,21812=>1000,
+ 21813=>1000,21814=>1000,21815=>1000,21816=>1000,21817=>1000,21818=>1000,21819=>1000,21820=>1000,21821=>1000,21822=>1000,21823=>1000,21824=>1000,21825=>1000,21826=>1000,21827=>1000,21828=>1000,
+ 21829=>1000,21830=>1000,21831=>1000,21832=>1000,21833=>1000,21834=>1000,21835=>1000,21836=>1000,21837=>1000,21838=>1000,21839=>1000,21840=>1000,21841=>1000,21842=>1000,21843=>1000,21844=>1000,
+ 21845=>1000,21846=>1000,21847=>1000,21848=>1000,21849=>1000,21850=>1000,21851=>1000,21852=>1000,21853=>1000,21854=>1000,21855=>1000,21856=>1000,21857=>1000,21858=>1000,21859=>1000,21860=>1000,
+ 21861=>1000,21862=>1000,21863=>1000,21864=>1000,21865=>1000,21866=>1000,21867=>1000,21868=>1000,21869=>1000,21870=>1000,21871=>1000,21872=>1000,21873=>1000,21874=>1000,21875=>1000,21876=>1000,
+ 21877=>1000,21878=>1000,21879=>1000,21880=>1000,21881=>1000,21882=>1000,21883=>1000,21884=>1000,21885=>1000,21886=>1000,21887=>1000,21888=>1000,21889=>1000,21890=>1000,21891=>1000,21892=>1000,
+ 21893=>1000,21894=>1000,21895=>1000,21896=>1000,21897=>1000,21898=>1000,21899=>1000,21900=>1000,21901=>1000,21902=>1000,21903=>1000,21904=>1000,21905=>1000,21906=>1000,21907=>1000,21908=>1000,
+ 21909=>1000,21910=>1000,21911=>1000,21912=>1000,21913=>1000,21914=>1000,21915=>1000,21916=>1000,21917=>1000,21918=>1000,21919=>1000,21920=>1000,21921=>1000,21922=>1000,21923=>1000,21924=>1000,
+ 21925=>1000,21926=>1000,21927=>1000,21928=>1000,21929=>1000,21930=>1000,21931=>1000,21932=>1000,21933=>1000,21934=>1000,21935=>1000,21936=>1000,21937=>1000,21938=>1000,21939=>1000,21940=>1000,
+ 21941=>1000,21942=>1000,21943=>1000,21944=>1000,21945=>1000,21946=>1000,21947=>1000,21948=>1000,21949=>1000,21950=>1000,21951=>1000,21952=>1000,21953=>1000,21954=>1000,21955=>1000,21956=>1000,
+ 21957=>1000,21958=>1000,21959=>1000,21960=>1000,21961=>1000,21962=>1000,21963=>1000,21964=>1000,21965=>1000,21966=>1000,21967=>1000,21968=>1000,21969=>1000,21970=>1000,21971=>1000,21972=>1000,
+ 21973=>1000,21974=>1000,21975=>1000,21976=>1000,21977=>1000,21978=>1000,21979=>1000,21980=>1000,21981=>1000,21982=>1000,21983=>1000,21984=>1000,21985=>1000,21986=>1000,21987=>1000,21988=>1000,
+ 21989=>1000,21990=>1000,21991=>1000,21992=>1000,21993=>1000,21994=>1000,21995=>1000,21996=>1000,21997=>1000,21998=>1000,21999=>1000,22000=>1000,22001=>1000,22002=>1000,22003=>1000,22004=>1000,
+ 22005=>1000,22006=>1000,22007=>1000,22008=>1000,22009=>1000,22010=>1000,22011=>1000,22012=>1000,22013=>1000,22014=>1000,22015=>1000,22016=>1000,22017=>1000,22018=>1000,22019=>1000,22020=>1000,
+ 22021=>1000,22022=>1000,22023=>1000,22024=>1000,22025=>1000,22026=>1000,22027=>1000,22028=>1000,22029=>1000,22030=>1000,22031=>1000,22032=>1000,22033=>1000,22034=>1000,22035=>1000,22036=>1000,
+ 22037=>1000,22038=>1000,22039=>1000,22040=>1000,22041=>1000,22042=>1000,22043=>1000,22044=>1000,22045=>1000,22046=>1000,22047=>1000,22048=>1000,22049=>1000,22050=>1000,22051=>1000,22052=>1000,
+ 22053=>1000,22054=>1000,22055=>1000,22056=>1000,22057=>1000,22058=>1000,22059=>1000,22060=>1000,22061=>1000,22062=>1000,22063=>1000,22064=>1000,22065=>1000,22066=>1000,22067=>1000,22068=>1000,
+ 22069=>1000,22070=>1000,22071=>1000,22072=>1000,22073=>1000,22074=>1000,22075=>1000,22076=>1000,22077=>1000,22078=>1000,22079=>1000,22080=>1000,22081=>1000,22082=>1000,22083=>1000,22084=>1000,
+ 22085=>1000,22086=>1000,22087=>1000,22088=>1000,22089=>1000,22090=>1000,22091=>1000,22092=>1000,22093=>1000,22094=>1000,22095=>1000,22096=>1000,22097=>1000,22098=>1000,22099=>1000,22100=>1000,
+ 22101=>1000,22102=>1000,22103=>1000,22104=>1000,22105=>1000,22106=>1000,22107=>1000,22108=>1000,22109=>1000,22110=>1000,22111=>1000,22112=>1000,22113=>1000,22114=>1000,22115=>1000,22116=>1000,
+ 22117=>1000,22118=>1000,22119=>1000,22120=>1000,22121=>1000,22122=>1000,22123=>1000,22124=>1000,22125=>1000,22126=>1000,22127=>1000,22128=>1000,22129=>1000,22130=>1000,22131=>1000,22132=>1000,
+ 22133=>1000,22134=>1000,22135=>1000,22136=>1000,22137=>1000,22138=>1000,22139=>1000,22140=>1000,22141=>1000,22142=>1000,22143=>1000,22144=>1000,22145=>1000,22146=>1000,22147=>1000,22148=>1000,
+ 22149=>1000,22150=>1000,22151=>1000,22152=>1000,22153=>1000,22154=>1000,22155=>1000,22156=>1000,22157=>1000,22158=>1000,22159=>1000,22160=>1000,22161=>1000,22162=>1000,22163=>1000,22164=>1000,
+ 22165=>1000,22166=>1000,22167=>1000,22168=>1000,22169=>1000,22170=>1000,22171=>1000,22172=>1000,22173=>1000,22174=>1000,22175=>1000,22176=>1000,22177=>1000,22178=>1000,22179=>1000,22180=>1000,
+ 22181=>1000,22182=>1000,22183=>1000,22184=>1000,22185=>1000,22186=>1000,22187=>1000,22188=>1000,22189=>1000,22190=>1000,22191=>1000,22192=>1000,22193=>1000,22194=>1000,22195=>1000,22196=>1000,
+ 22197=>1000,22198=>1000,22199=>1000,22200=>1000,22201=>1000,22202=>1000,22203=>1000,22204=>1000,22205=>1000,22206=>1000,22207=>1000,22208=>1000,22209=>1000,22210=>1000,22211=>1000,22212=>1000,
+ 22213=>1000,22214=>1000,22215=>1000,22216=>1000,22217=>1000,22218=>1000,22219=>1000,22220=>1000,22221=>1000,22222=>1000,22223=>1000,22224=>1000,22225=>1000,22226=>1000,22227=>1000,22228=>1000,
+ 22229=>1000,22230=>1000,22231=>1000,22232=>1000,22233=>1000,22234=>1000,22235=>1000,22236=>1000,22237=>1000,22238=>1000,22239=>1000,22240=>1000,22241=>1000,22242=>1000,22243=>1000,22244=>1000,
+ 22245=>1000,22246=>1000,22247=>1000,22248=>1000,22249=>1000,22250=>1000,22251=>1000,22252=>1000,22253=>1000,22254=>1000,22255=>1000,22256=>1000,22257=>1000,22258=>1000,22259=>1000,22260=>1000,
+ 22261=>1000,22262=>1000,22263=>1000,22264=>1000,22265=>1000,22266=>1000,22267=>1000,22268=>1000,22269=>1000,22270=>1000,22271=>1000,22272=>1000,22273=>1000,22274=>1000,22275=>1000,22276=>1000,
+ 22277=>1000,22278=>1000,22279=>1000,22280=>1000,22281=>1000,22282=>1000,22283=>1000,22284=>1000,22285=>1000,22286=>1000,22287=>1000,22288=>1000,22289=>1000,22290=>1000,22291=>1000,22292=>1000,
+ 22293=>1000,22294=>1000,22295=>1000,22296=>1000,22297=>1000,22298=>1000,22299=>1000,22300=>1000,22301=>1000,22302=>1000,22303=>1000,22304=>1000,22305=>1000,22306=>1000,22307=>1000,22308=>1000,
+ 22309=>1000,22310=>1000,22311=>1000,22312=>1000,22313=>1000,22314=>1000,22315=>1000,22316=>1000,22317=>1000,22318=>1000,22319=>1000,22320=>1000,22321=>1000,22322=>1000,22323=>1000,22324=>1000,
+ 22325=>1000,22326=>1000,22327=>1000,22328=>1000,22329=>1000,22330=>1000,22331=>1000,22332=>1000,22333=>1000,22334=>1000,22335=>1000,22336=>1000,22337=>1000,22338=>1000,22339=>1000,22340=>1000,
+ 22341=>1000,22342=>1000,22343=>1000,22344=>1000,22345=>1000,22346=>1000,22347=>1000,22348=>1000,22349=>1000,22350=>1000,22351=>1000,22352=>1000,22353=>1000,22354=>1000,22355=>1000,22356=>1000,
+ 22357=>1000,22358=>1000,22359=>1000,22360=>1000,22361=>1000,22362=>1000,22363=>1000,22364=>1000,22365=>1000,22366=>1000,22367=>1000,22368=>1000,22369=>1000,22370=>1000,22371=>1000,22372=>1000,
+ 22373=>1000,22374=>1000,22375=>1000,22376=>1000,22377=>1000,22378=>1000,22379=>1000,22380=>1000,22381=>1000,22382=>1000,22383=>1000,22384=>1000,22385=>1000,22386=>1000,22387=>1000,22388=>1000,
+ 22389=>1000,22390=>1000,22391=>1000,22392=>1000,22393=>1000,22394=>1000,22395=>1000,22396=>1000,22397=>1000,22398=>1000,22399=>1000,22400=>1000,22401=>1000,22402=>1000,22403=>1000,22404=>1000,
+ 22405=>1000,22406=>1000,22407=>1000,22408=>1000,22409=>1000,22410=>1000,22411=>1000,22412=>1000,22413=>1000,22414=>1000,22415=>1000,22416=>1000,22417=>1000,22418=>1000,22419=>1000,22420=>1000,
+ 22421=>1000,22422=>1000,22423=>1000,22424=>1000,22425=>1000,22426=>1000,22427=>1000,22428=>1000,22429=>1000,22430=>1000,22431=>1000,22432=>1000,22433=>1000,22434=>1000,22435=>1000,22436=>1000,
+ 22437=>1000,22438=>1000,22439=>1000,22440=>1000,22441=>1000,22442=>1000,22443=>1000,22444=>1000,22445=>1000,22446=>1000,22447=>1000,22448=>1000,22449=>1000,22450=>1000,22451=>1000,22452=>1000,
+ 22453=>1000,22454=>1000,22455=>1000,22456=>1000,22457=>1000,22458=>1000,22459=>1000,22460=>1000,22461=>1000,22462=>1000,22463=>1000,22464=>1000,22465=>1000,22466=>1000,22467=>1000,22468=>1000,
+ 22469=>1000,22470=>1000,22471=>1000,22472=>1000,22473=>1000,22474=>1000,22475=>1000,22476=>1000,22477=>1000,22478=>1000,22479=>1000,22480=>1000,22481=>1000,22482=>1000,22483=>1000,22484=>1000,
+ 22485=>1000,22486=>1000,22487=>1000,22488=>1000,22489=>1000,22490=>1000,22491=>1000,22492=>1000,22493=>1000,22494=>1000,22495=>1000,22496=>1000,22497=>1000,22498=>1000,22499=>1000,22500=>1000,
+ 22501=>1000,22502=>1000,22503=>1000,22504=>1000,22505=>1000,22506=>1000,22507=>1000,22508=>1000,22509=>1000,22510=>1000,22511=>1000,22512=>1000,22513=>1000,22514=>1000,22515=>1000,22516=>1000,
+ 22517=>1000,22518=>1000,22519=>1000,22520=>1000,22521=>1000,22522=>1000,22523=>1000,22524=>1000,22525=>1000,22526=>1000,22527=>1000,22528=>1000,22529=>1000,22530=>1000,22531=>1000,22532=>1000,
+ 22533=>1000,22534=>1000,22535=>1000,22536=>1000,22537=>1000,22538=>1000,22539=>1000,22540=>1000,22541=>1000,22542=>1000,22543=>1000,22544=>1000,22545=>1000,22546=>1000,22547=>1000,22548=>1000,
+ 22549=>1000,22550=>1000,22551=>1000,22552=>1000,22553=>1000,22554=>1000,22555=>1000,22556=>1000,22557=>1000,22558=>1000,22559=>1000,22560=>1000,22561=>1000,22562=>1000,22563=>1000,22564=>1000,
+ 22565=>1000,22566=>1000,22567=>1000,22568=>1000,22569=>1000,22570=>1000,22571=>1000,22572=>1000,22573=>1000,22574=>1000,22575=>1000,22576=>1000,22577=>1000,22578=>1000,22579=>1000,22580=>1000,
+ 22581=>1000,22582=>1000,22583=>1000,22584=>1000,22585=>1000,22586=>1000,22587=>1000,22588=>1000,22589=>1000,22590=>1000,22591=>1000,22592=>1000,22593=>1000,22594=>1000,22595=>1000,22596=>1000,
+ 22597=>1000,22598=>1000,22599=>1000,22600=>1000,22601=>1000,22602=>1000,22603=>1000,22604=>1000,22605=>1000,22606=>1000,22607=>1000,22608=>1000,22609=>1000,22610=>1000,22611=>1000,22612=>1000,
+ 22613=>1000,22614=>1000,22615=>1000,22616=>1000,22617=>1000,22618=>1000,22619=>1000,22620=>1000,22621=>1000,22622=>1000,22623=>1000,22624=>1000,22625=>1000,22626=>1000,22627=>1000,22628=>1000,
+ 22629=>1000,22630=>1000,22631=>1000,22632=>1000,22633=>1000,22634=>1000,22635=>1000,22636=>1000,22637=>1000,22638=>1000,22639=>1000,22640=>1000,22641=>1000,22642=>1000,22643=>1000,22644=>1000,
+ 22645=>1000,22646=>1000,22647=>1000,22648=>1000,22649=>1000,22650=>1000,22651=>1000,22652=>1000,22653=>1000,22654=>1000,22655=>1000,22656=>1000,22657=>1000,22658=>1000,22659=>1000,22660=>1000,
+ 22661=>1000,22662=>1000,22663=>1000,22664=>1000,22665=>1000,22666=>1000,22667=>1000,22668=>1000,22669=>1000,22670=>1000,22671=>1000,22672=>1000,22673=>1000,22674=>1000,22675=>1000,22676=>1000,
+ 22677=>1000,22678=>1000,22679=>1000,22680=>1000,22681=>1000,22682=>1000,22683=>1000,22684=>1000,22685=>1000,22686=>1000,22687=>1000,22688=>1000,22689=>1000,22690=>1000,22691=>1000,22692=>1000,
+ 22693=>1000,22694=>1000,22695=>1000,22696=>1000,22697=>1000,22698=>1000,22699=>1000,22700=>1000,22701=>1000,22702=>1000,22703=>1000,22704=>1000,22705=>1000,22706=>1000,22707=>1000,22708=>1000,
+ 22709=>1000,22710=>1000,22711=>1000,22712=>1000,22713=>1000,22714=>1000,22715=>1000,22716=>1000,22717=>1000,22718=>1000,22719=>1000,22720=>1000,22721=>1000,22722=>1000,22723=>1000,22724=>1000,
+ 22725=>1000,22726=>1000,22727=>1000,22728=>1000,22729=>1000,22730=>1000,22731=>1000,22732=>1000,22733=>1000,22734=>1000,22735=>1000,22736=>1000,22737=>1000,22738=>1000,22739=>1000,22740=>1000,
+ 22741=>1000,22742=>1000,22743=>1000,22744=>1000,22745=>1000,22746=>1000,22747=>1000,22748=>1000,22749=>1000,22750=>1000,22751=>1000,22752=>1000,22753=>1000,22754=>1000,22755=>1000,22756=>1000,
+ 22757=>1000,22758=>1000,22759=>1000,22760=>1000,22761=>1000,22762=>1000,22763=>1000,22764=>1000,22765=>1000,22766=>1000,22767=>1000,22768=>1000,22769=>1000,22770=>1000,22771=>1000,22772=>1000,
+ 22773=>1000,22774=>1000,22775=>1000,22776=>1000,22777=>1000,22778=>1000,22779=>1000,22780=>1000,22781=>1000,22782=>1000,22783=>1000,22784=>1000,22785=>1000,22786=>1000,22787=>1000,22788=>1000,
+ 22789=>1000,22790=>1000,22791=>1000,22792=>1000,22793=>1000,22794=>1000,22795=>1000,22796=>1000,22797=>1000,22798=>1000,22799=>1000,22800=>1000,22801=>1000,22802=>1000,22803=>1000,22804=>1000,
+ 22805=>1000,22806=>1000,22807=>1000,22808=>1000,22809=>1000,22810=>1000,22811=>1000,22812=>1000,22813=>1000,22814=>1000,22815=>1000,22816=>1000,22817=>1000,22818=>1000,22819=>1000,22820=>1000,
+ 22821=>1000,22822=>1000,22823=>1000,22824=>1000,22825=>1000,22826=>1000,22827=>1000,22828=>1000,22829=>1000,22830=>1000,22831=>1000,22832=>1000,22833=>1000,22834=>1000,22835=>1000,22836=>1000,
+ 22837=>1000,22838=>1000,22839=>1000,22840=>1000,22841=>1000,22842=>1000,22843=>1000,22844=>1000,22845=>1000,22846=>1000,22847=>1000,22848=>1000,22849=>1000,22850=>1000,22851=>1000,22852=>1000,
+ 22853=>1000,22854=>1000,22855=>1000,22856=>1000,22857=>1000,22858=>1000,22859=>1000,22860=>1000,22861=>1000,22862=>1000,22863=>1000,22864=>1000,22865=>1000,22866=>1000,22867=>1000,22868=>1000,
+ 22869=>1000,22870=>1000,22871=>1000,22872=>1000,22873=>1000,22874=>1000,22875=>1000,22876=>1000,22877=>1000,22878=>1000,22879=>1000,22880=>1000,22881=>1000,22882=>1000,22883=>1000,22884=>1000,
+ 22885=>1000,22886=>1000,22887=>1000,22888=>1000,22889=>1000,22890=>1000,22891=>1000,22892=>1000,22893=>1000,22894=>1000,22895=>1000,22896=>1000,22897=>1000,22898=>1000,22899=>1000,22900=>1000,
+ 22901=>1000,22902=>1000,22903=>1000,22904=>1000,22905=>1000,22906=>1000,22907=>1000,22908=>1000,22909=>1000,22910=>1000,22911=>1000,22912=>1000,22913=>1000,22914=>1000,22915=>1000,22916=>1000,
+ 22917=>1000,22918=>1000,22919=>1000,22920=>1000,22921=>1000,22922=>1000,22923=>1000,22924=>1000,22925=>1000,22926=>1000,22927=>1000,22928=>1000,22929=>1000,22930=>1000,22931=>1000,22932=>1000,
+ 22933=>1000,22934=>1000,22935=>1000,22936=>1000,22937=>1000,22938=>1000,22939=>1000,22940=>1000,22941=>1000,22942=>1000,22943=>1000,22944=>1000,22945=>1000,22946=>1000,22947=>1000,22948=>1000,
+ 22949=>1000,22950=>1000,22951=>1000,22952=>1000,22953=>1000,22954=>1000,22955=>1000,22956=>1000,22957=>1000,22958=>1000,22959=>1000,22960=>1000,22961=>1000,22962=>1000,22963=>1000,22964=>1000,
+ 22965=>1000,22966=>1000,22967=>1000,22968=>1000,22969=>1000,22970=>1000,22971=>1000,22972=>1000,22973=>1000,22974=>1000,22975=>1000,22976=>1000,22977=>1000,22978=>1000,22979=>1000,22980=>1000,
+ 22981=>1000,22982=>1000,22983=>1000,22984=>1000,22985=>1000,22986=>1000,22987=>1000,22988=>1000,22989=>1000,22990=>1000,22991=>1000,22992=>1000,22993=>1000,22994=>1000,22995=>1000,22996=>1000,
+ 22997=>1000,22998=>1000,22999=>1000,23000=>1000,23001=>1000,23002=>1000,23003=>1000,23004=>1000,23005=>1000,23006=>1000,23007=>1000,23008=>1000,23009=>1000,23010=>1000,23011=>1000,23012=>1000,
+ 23013=>1000,23014=>1000,23015=>1000,23016=>1000,23017=>1000,23018=>1000,23019=>1000,23020=>1000,23021=>1000,23022=>1000,23023=>1000,23024=>1000,23025=>1000,23026=>1000,23027=>1000,23028=>1000,
+ 23029=>1000,23030=>1000,23031=>1000,23032=>1000,23033=>1000,23034=>1000,23035=>1000,23036=>1000,23037=>1000,23038=>1000,23039=>1000,23040=>1000,23041=>1000,23042=>1000,23043=>1000,23044=>1000,
+ 23045=>1000,23046=>1000,23047=>1000,23048=>1000,23049=>1000,23050=>1000,23051=>1000,23052=>1000,23053=>1000,23054=>1000,23055=>1000,23056=>1000,23057=>1000,23058=>1000,23059=>1000,23060=>1000,
+ 23061=>1000,23062=>1000,23063=>1000,23064=>1000,23065=>1000,23066=>1000,23067=>1000,23068=>1000,23069=>1000,23070=>1000,23071=>1000,23072=>1000,23073=>1000,23074=>1000,23075=>1000,23076=>1000,
+ 23077=>1000,23078=>1000,23079=>1000,23080=>1000,23081=>1000,23082=>1000,23083=>1000,23084=>1000,23085=>1000,23086=>1000,23087=>1000,23088=>1000,23089=>1000,23090=>1000,23091=>1000,23092=>1000,
+ 23093=>1000,23094=>1000,23095=>1000,23096=>1000,23097=>1000,23098=>1000,23099=>1000,23100=>1000,23101=>1000,23102=>1000,23103=>1000,23104=>1000,23105=>1000,23106=>1000,23107=>1000,23108=>1000,
+ 23109=>1000,23110=>1000,23111=>1000,23112=>1000,23113=>1000,23114=>1000,23115=>1000,23116=>1000,23117=>1000,23118=>1000,23119=>1000,23120=>1000,23121=>1000,23122=>1000,23123=>1000,23124=>1000,
+ 23125=>1000,23126=>1000,23127=>1000,23128=>1000,23129=>1000,23130=>1000,23131=>1000,23132=>1000,23133=>1000,23134=>1000,23135=>1000,23136=>1000,23137=>1000,23138=>1000,23139=>1000,23140=>1000,
+ 23141=>1000,23142=>1000,23143=>1000,23144=>1000,23145=>1000,23146=>1000,23147=>1000,23148=>1000,23149=>1000,23150=>1000,23151=>1000,23152=>1000,23153=>1000,23154=>1000,23155=>1000,23156=>1000,
+ 23157=>1000,23158=>1000,23159=>1000,23160=>1000,23161=>1000,23162=>1000,23163=>1000,23164=>1000,23165=>1000,23166=>1000,23167=>1000,23168=>1000,23169=>1000,23170=>1000,23171=>1000,23172=>1000,
+ 23173=>1000,23174=>1000,23175=>1000,23176=>1000,23177=>1000,23178=>1000,23179=>1000,23180=>1000,23181=>1000,23182=>1000,23183=>1000,23184=>1000,23185=>1000,23186=>1000,23187=>1000,23188=>1000,
+ 23189=>1000,23190=>1000,23191=>1000,23192=>1000,23193=>1000,23194=>1000,23195=>1000,23196=>1000,23197=>1000,23198=>1000,23199=>1000,23200=>1000,23201=>1000,23202=>1000,23203=>1000,23204=>1000,
+ 23205=>1000,23206=>1000,23207=>1000,23208=>1000,23209=>1000,23210=>1000,23211=>1000,23212=>1000,23213=>1000,23214=>1000,23215=>1000,23216=>1000,23217=>1000,23218=>1000,23219=>1000,23220=>1000,
+ 23221=>1000,23222=>1000,23223=>1000,23224=>1000,23225=>1000,23226=>1000,23227=>1000,23228=>1000,23229=>1000,23230=>1000,23231=>1000,23232=>1000,23233=>1000,23234=>1000,23235=>1000,23236=>1000,
+ 23237=>1000,23238=>1000,23239=>1000,23240=>1000,23241=>1000,23242=>1000,23243=>1000,23244=>1000,23245=>1000,23246=>1000,23247=>1000,23248=>1000,23249=>1000,23250=>1000,23251=>1000,23252=>1000,
+ 23253=>1000,23254=>1000,23255=>1000,23256=>1000,23257=>1000,23258=>1000,23259=>1000,23260=>1000,23261=>1000,23262=>1000,23263=>1000,23264=>1000,23265=>1000,23266=>1000,23267=>1000,23268=>1000,
+ 23269=>1000,23270=>1000,23271=>1000,23272=>1000,23273=>1000,23274=>1000,23275=>1000,23276=>1000,23277=>1000,23278=>1000,23279=>1000,23280=>1000,23281=>1000,23282=>1000,23283=>1000,23284=>1000,
+ 23285=>1000,23286=>1000,23287=>1000,23288=>1000,23289=>1000,23290=>1000,23291=>1000,23292=>1000,23293=>1000,23294=>1000,23295=>1000,23296=>1000,23297=>1000,23298=>1000,23299=>1000,23300=>1000,
+ 23301=>1000,23302=>1000,23303=>1000,23304=>1000,23305=>1000,23306=>1000,23307=>1000,23308=>1000,23309=>1000,23310=>1000,23311=>1000,23312=>1000,23313=>1000,23314=>1000,23315=>1000,23316=>1000,
+ 23317=>1000,23318=>1000,23319=>1000,23320=>1000,23321=>1000,23322=>1000,23323=>1000,23324=>1000,23325=>1000,23326=>1000,23327=>1000,23328=>1000,23329=>1000,23330=>1000,23331=>1000,23332=>1000,
+ 23333=>1000,23334=>1000,23335=>1000,23336=>1000,23337=>1000,23338=>1000,23339=>1000,23340=>1000,23341=>1000,23342=>1000,23343=>1000,23344=>1000,23345=>1000,23346=>1000,23347=>1000,23348=>1000,
+ 23349=>1000,23350=>1000,23351=>1000,23352=>1000,23353=>1000,23354=>1000,23355=>1000,23356=>1000,23357=>1000,23358=>1000,23359=>1000,23360=>1000,23361=>1000,23362=>1000,23363=>1000,23364=>1000,
+ 23365=>1000,23366=>1000,23367=>1000,23368=>1000,23369=>1000,23370=>1000,23371=>1000,23372=>1000,23373=>1000,23374=>1000,23375=>1000,23376=>1000,23377=>1000,23378=>1000,23379=>1000,23380=>1000,
+ 23381=>1000,23382=>1000,23383=>1000,23384=>1000,23385=>1000,23386=>1000,23387=>1000,23388=>1000,23389=>1000,23390=>1000,23391=>1000,23392=>1000,23393=>1000,23394=>1000,23395=>1000,23396=>1000,
+ 23397=>1000,23398=>1000,23399=>1000,23400=>1000,23401=>1000,23402=>1000,23403=>1000,23404=>1000,23405=>1000,23406=>1000,23407=>1000,23408=>1000,23409=>1000,23410=>1000,23411=>1000,23412=>1000,
+ 23413=>1000,23414=>1000,23415=>1000,23416=>1000,23417=>1000,23418=>1000,23419=>1000,23420=>1000,23421=>1000,23422=>1000,23423=>1000,23424=>1000,23425=>1000,23426=>1000,23427=>1000,23428=>1000,
+ 23429=>1000,23430=>1000,23431=>1000,23432=>1000,23433=>1000,23434=>1000,23435=>1000,23436=>1000,23437=>1000,23438=>1000,23439=>1000,23440=>1000,23441=>1000,23442=>1000,23443=>1000,23444=>1000,
+ 23445=>1000,23446=>1000,23447=>1000,23448=>1000,23449=>1000,23450=>1000,23451=>1000,23452=>1000,23453=>1000,23454=>1000,23455=>1000,23456=>1000,23457=>1000,23458=>1000,23459=>1000,23460=>1000,
+ 23461=>1000,23462=>1000,23463=>1000,23464=>1000,23465=>1000,23466=>1000,23467=>1000,23468=>1000,23469=>1000,23470=>1000,23471=>1000,23472=>1000,23473=>1000,23474=>1000,23475=>1000,23476=>1000,
+ 23477=>1000,23478=>1000,23479=>1000,23480=>1000,23481=>1000,23482=>1000,23483=>1000,23484=>1000,23485=>1000,23486=>1000,23487=>1000,23488=>1000,23489=>1000,23490=>1000,23491=>1000,23492=>1000,
+ 23493=>1000,23494=>1000,23495=>1000,23496=>1000,23497=>1000,23498=>1000,23499=>1000,23500=>1000,23501=>1000,23502=>1000,23503=>1000,23504=>1000,23505=>1000,23506=>1000,23507=>1000,23508=>1000,
+ 23509=>1000,23510=>1000,23511=>1000,23512=>1000,23513=>1000,23514=>1000,23515=>1000,23516=>1000,23517=>1000,23518=>1000,23519=>1000,23520=>1000,23521=>1000,23522=>1000,23523=>1000,23524=>1000,
+ 23525=>1000,23526=>1000,23527=>1000,23528=>1000,23529=>1000,23530=>1000,23531=>1000,23532=>1000,23533=>1000,23534=>1000,23535=>1000,23536=>1000,23537=>1000,23538=>1000,23539=>1000,23540=>1000,
+ 23541=>1000,23542=>1000,23543=>1000,23544=>1000,23545=>1000,23546=>1000,23547=>1000,23548=>1000,23549=>1000,23550=>1000,23551=>1000,23552=>1000,23553=>1000,23554=>1000,23555=>1000,23556=>1000,
+ 23557=>1000,23558=>1000,23559=>1000,23560=>1000,23561=>1000,23562=>1000,23563=>1000,23564=>1000,23565=>1000,23566=>1000,23567=>1000,23568=>1000,23569=>1000,23570=>1000,23571=>1000,23572=>1000,
+ 23573=>1000,23574=>1000,23575=>1000,23576=>1000,23577=>1000,23578=>1000,23579=>1000,23580=>1000,23581=>1000,23582=>1000,23583=>1000,23584=>1000,23585=>1000,23586=>1000,23587=>1000,23588=>1000,
+ 23589=>1000,23590=>1000,23591=>1000,23592=>1000,23593=>1000,23594=>1000,23595=>1000,23596=>1000,23597=>1000,23598=>1000,23599=>1000,23600=>1000,23601=>1000,23602=>1000,23603=>1000,23604=>1000,
+ 23605=>1000,23606=>1000,23607=>1000,23608=>1000,23609=>1000,23610=>1000,23611=>1000,23612=>1000,23613=>1000,23614=>1000,23615=>1000,23616=>1000,23617=>1000,23618=>1000,23619=>1000,23620=>1000,
+ 23621=>1000,23622=>1000,23623=>1000,23624=>1000,23625=>1000,23626=>1000,23627=>1000,23628=>1000,23629=>1000,23630=>1000,23631=>1000,23632=>1000,23633=>1000,23634=>1000,23635=>1000,23636=>1000,
+ 23637=>1000,23638=>1000,23639=>1000,23640=>1000,23641=>1000,23642=>1000,23643=>1000,23644=>1000,23645=>1000,23646=>1000,23647=>1000,23648=>1000,23649=>1000,23650=>1000,23651=>1000,23652=>1000,
+ 23653=>1000,23654=>1000,23655=>1000,23656=>1000,23657=>1000,23658=>1000,23659=>1000,23660=>1000,23661=>1000,23662=>1000,23663=>1000,23664=>1000,23665=>1000,23666=>1000,23667=>1000,23668=>1000,
+ 23669=>1000,23670=>1000,23671=>1000,23672=>1000,23673=>1000,23674=>1000,23675=>1000,23676=>1000,23677=>1000,23678=>1000,23679=>1000,23680=>1000,23681=>1000,23682=>1000,23683=>1000,23684=>1000,
+ 23685=>1000,23686=>1000,23687=>1000,23688=>1000,23689=>1000,23690=>1000,23691=>1000,23692=>1000,23693=>1000,23694=>1000,23695=>1000,23696=>1000,23697=>1000,23698=>1000,23699=>1000,23700=>1000,
+ 23701=>1000,23702=>1000,23703=>1000,23704=>1000,23705=>1000,23706=>1000,23707=>1000,23708=>1000,23709=>1000,23710=>1000,23711=>1000,23712=>1000,23713=>1000,23714=>1000,23715=>1000,23716=>1000,
+ 23717=>1000,23718=>1000,23719=>1000,23720=>1000,23721=>1000,23722=>1000,23723=>1000,23724=>1000,23725=>1000,23726=>1000,23727=>1000,23728=>1000,23729=>1000,23730=>1000,23731=>1000,23732=>1000,
+ 23733=>1000,23734=>1000,23735=>1000,23736=>1000,23737=>1000,23738=>1000,23739=>1000,23740=>1000,23741=>1000,23742=>1000,23743=>1000,23744=>1000,23745=>1000,23746=>1000,23747=>1000,23748=>1000,
+ 23749=>1000,23750=>1000,23751=>1000,23752=>1000,23753=>1000,23754=>1000,23755=>1000,23756=>1000,23757=>1000,23758=>1000,23759=>1000,23760=>1000,23761=>1000,23762=>1000,23763=>1000,23764=>1000,
+ 23765=>1000,23766=>1000,23767=>1000,23768=>1000,23769=>1000,23770=>1000,23771=>1000,23772=>1000,23773=>1000,23774=>1000,23775=>1000,23776=>1000,23777=>1000,23778=>1000,23779=>1000,23780=>1000,
+ 23781=>1000,23782=>1000,23783=>1000,23784=>1000,23785=>1000,23786=>1000,23787=>1000,23788=>1000,23789=>1000,23790=>1000,23791=>1000,23792=>1000,23793=>1000,23794=>1000,23795=>1000,23796=>1000,
+ 23797=>1000,23798=>1000,23799=>1000,23800=>1000,23801=>1000,23802=>1000,23803=>1000,23804=>1000,23805=>1000,23806=>1000,23807=>1000,23808=>1000,23809=>1000,23810=>1000,23811=>1000,23812=>1000,
+ 23813=>1000,23814=>1000,23815=>1000,23816=>1000,23817=>1000,23818=>1000,23819=>1000,23820=>1000,23821=>1000,23822=>1000,23823=>1000,23824=>1000,23825=>1000,23826=>1000,23827=>1000,23828=>1000,
+ 23829=>1000,23830=>1000,23831=>1000,23832=>1000,23833=>1000,23834=>1000,23835=>1000,23836=>1000,23837=>1000,23838=>1000,23839=>1000,23840=>1000,23841=>1000,23842=>1000,23843=>1000,23844=>1000,
+ 23845=>1000,23846=>1000,23847=>1000,23848=>1000,23849=>1000,23850=>1000,23851=>1000,23852=>1000,23853=>1000,23854=>1000,23855=>1000,23856=>1000,23857=>1000,23858=>1000,23859=>1000,23860=>1000,
+ 23861=>1000,23862=>1000,23863=>1000,23864=>1000,23865=>1000,23866=>1000,23867=>1000,23868=>1000,23869=>1000,23870=>1000,23871=>1000,23872=>1000,23873=>1000,23874=>1000,23875=>1000,23876=>1000,
+ 23877=>1000,23878=>1000,23879=>1000,23880=>1000,23881=>1000,23882=>1000,23883=>1000,23884=>1000,23885=>1000,23886=>1000,23887=>1000,23888=>1000,23889=>1000,23890=>1000,23891=>1000,23892=>1000,
+ 23893=>1000,23894=>1000,23895=>1000,23896=>1000,23897=>1000,23898=>1000,23899=>1000,23900=>1000,23901=>1000,23902=>1000,23903=>1000,23904=>1000,23905=>1000,23906=>1000,23907=>1000,23908=>1000,
+ 23909=>1000,23910=>1000,23911=>1000,23912=>1000,23913=>1000,23914=>1000,23915=>1000,23916=>1000,23917=>1000,23918=>1000,23919=>1000,23920=>1000,23921=>1000,23922=>1000,23923=>1000,23924=>1000,
+ 23925=>1000,23926=>1000,23927=>1000,23928=>1000,23929=>1000,23930=>1000,23931=>1000,23932=>1000,23933=>1000,23934=>1000,23935=>1000,23936=>1000,23937=>1000,23938=>1000,23939=>1000,23940=>1000,
+ 23941=>1000,23942=>1000,23943=>1000,23944=>1000,23945=>1000,23946=>1000,23947=>1000,23948=>1000,23949=>1000,23950=>1000,23951=>1000,23952=>1000,23953=>1000,23954=>1000,23955=>1000,23956=>1000,
+ 23957=>1000,23958=>1000,23959=>1000,23960=>1000,23961=>1000,23962=>1000,23963=>1000,23964=>1000,23965=>1000,23966=>1000,23967=>1000,23968=>1000,23969=>1000,23970=>1000,23971=>1000,23972=>1000,
+ 23973=>1000,23974=>1000,23975=>1000,23976=>1000,23977=>1000,23978=>1000,23979=>1000,23980=>1000,23981=>1000,23982=>1000,23983=>1000,23984=>1000,23985=>1000,23986=>1000,23987=>1000,23988=>1000,
+ 23989=>1000,23990=>1000,23991=>1000,23992=>1000,23993=>1000,23994=>1000,23995=>1000,23996=>1000,23997=>1000,23998=>1000,23999=>1000,24000=>1000,24001=>1000,24002=>1000,24003=>1000,24004=>1000,
+ 24005=>1000,24006=>1000,24007=>1000,24008=>1000,24009=>1000,24010=>1000,24011=>1000,24012=>1000,24013=>1000,24014=>1000,24015=>1000,24016=>1000,24017=>1000,24018=>1000,24019=>1000,24020=>1000,
+ 24021=>1000,24022=>1000,24023=>1000,24024=>1000,24025=>1000,24026=>1000,24027=>1000,24028=>1000,24029=>1000,24030=>1000,24031=>1000,24032=>1000,24033=>1000,24034=>1000,24035=>1000,24036=>1000,
+ 24037=>1000,24038=>1000,24039=>1000,24040=>1000,24041=>1000,24042=>1000,24043=>1000,24044=>1000,24045=>1000,24046=>1000,24047=>1000,24048=>1000,24049=>1000,24050=>1000,24051=>1000,24052=>1000,
+ 24053=>1000,24054=>1000,24055=>1000,24056=>1000,24057=>1000,24058=>1000,24059=>1000,24060=>1000,24061=>1000,24062=>1000,24063=>1000,24064=>1000,24065=>1000,24066=>1000,24067=>1000,24068=>1000,
+ 24069=>1000,24070=>1000,24071=>1000,24072=>1000,24073=>1000,24074=>1000,24075=>1000,24076=>1000,24077=>1000,24078=>1000,24079=>1000,24080=>1000,24081=>1000,24082=>1000,24083=>1000,24084=>1000,
+ 24085=>1000,24086=>1000,24087=>1000,24088=>1000,24089=>1000,24090=>1000,24091=>1000,24092=>1000,24093=>1000,24094=>1000,24095=>1000,24096=>1000,24097=>1000,24098=>1000,24099=>1000,24100=>1000,
+ 24101=>1000,24102=>1000,24103=>1000,24104=>1000,24105=>1000,24106=>1000,24107=>1000,24108=>1000,24109=>1000,24110=>1000,24111=>1000,24112=>1000,24113=>1000,24114=>1000,24115=>1000,24116=>1000,
+ 24117=>1000,24118=>1000,24119=>1000,24120=>1000,24121=>1000,24122=>1000,24123=>1000,24124=>1000,24125=>1000,24126=>1000,24127=>1000,24128=>1000,24129=>1000,24130=>1000,24131=>1000,24132=>1000,
+ 24133=>1000,24134=>1000,24135=>1000,24136=>1000,24137=>1000,24138=>1000,24139=>1000,24140=>1000,24141=>1000,24142=>1000,24143=>1000,24144=>1000,24145=>1000,24146=>1000,24147=>1000,24148=>1000,
+ 24149=>1000,24150=>1000,24151=>1000,24152=>1000,24153=>1000,24154=>1000,24155=>1000,24156=>1000,24157=>1000,24158=>1000,24159=>1000,24160=>1000,24161=>1000,24162=>1000,24163=>1000,24164=>1000,
+ 24165=>1000,24166=>1000,24167=>1000,24168=>1000,24169=>1000,24170=>1000,24171=>1000,24172=>1000,24173=>1000,24174=>1000,24175=>1000,24176=>1000,24177=>1000,24178=>1000,24179=>1000,24180=>1000,
+ 24181=>1000,24182=>1000,24183=>1000,24184=>1000,24185=>1000,24186=>1000,24187=>1000,24188=>1000,24189=>1000,24190=>1000,24191=>1000,24192=>1000,24193=>1000,24194=>1000,24195=>1000,24196=>1000,
+ 24197=>1000,24198=>1000,24199=>1000,24200=>1000,24201=>1000,24202=>1000,24203=>1000,24204=>1000,24205=>1000,24206=>1000,24207=>1000,24208=>1000,24209=>1000,24210=>1000,24211=>1000,24212=>1000,
+ 24213=>1000,24214=>1000,24215=>1000,24216=>1000,24217=>1000,24218=>1000,24219=>1000,24220=>1000,24221=>1000,24222=>1000,24223=>1000,24224=>1000,24225=>1000,24226=>1000,24227=>1000,24228=>1000,
+ 24229=>1000,24230=>1000,24231=>1000,24232=>1000,24233=>1000,24234=>1000,24235=>1000,24236=>1000,24237=>1000,24238=>1000,24239=>1000,24240=>1000,24241=>1000,24242=>1000,24243=>1000,24244=>1000,
+ 24245=>1000,24246=>1000,24247=>1000,24248=>1000,24249=>1000,24250=>1000,24251=>1000,24252=>1000,24253=>1000,24254=>1000,24255=>1000,24256=>1000,24257=>1000,24258=>1000,24259=>1000,24260=>1000,
+ 24261=>1000,24262=>1000,24263=>1000,24264=>1000,24265=>1000,24266=>1000,24267=>1000,24268=>1000,24269=>1000,24270=>1000,24271=>1000,24272=>1000,24273=>1000,24274=>1000,24275=>1000,24276=>1000,
+ 24277=>1000,24278=>1000,24279=>1000,24280=>1000,24281=>1000,24282=>1000,24283=>1000,24284=>1000,24285=>1000,24286=>1000,24287=>1000,24288=>1000,24289=>1000,24290=>1000,24291=>1000,24292=>1000,
+ 24293=>1000,24294=>1000,24295=>1000,24296=>1000,24297=>1000,24298=>1000,24299=>1000,24300=>1000,24301=>1000,24302=>1000,24303=>1000,24304=>1000,24305=>1000,24306=>1000,24307=>1000,24308=>1000,
+ 24309=>1000,24310=>1000,24311=>1000,24312=>1000,24313=>1000,24314=>1000,24315=>1000,24316=>1000,24317=>1000,24318=>1000,24319=>1000,24320=>1000,24321=>1000,24322=>1000,24323=>1000,24324=>1000,
+ 24325=>1000,24326=>1000,24327=>1000,24328=>1000,24329=>1000,24330=>1000,24331=>1000,24332=>1000,24333=>1000,24334=>1000,24335=>1000,24336=>1000,24337=>1000,24338=>1000,24339=>1000,24340=>1000,
+ 24341=>1000,24342=>1000,24343=>1000,24344=>1000,24345=>1000,24346=>1000,24347=>1000,24348=>1000,24349=>1000,24350=>1000,24351=>1000,24352=>1000,24353=>1000,24354=>1000,24355=>1000,24356=>1000,
+ 24357=>1000,24358=>1000,24359=>1000,24360=>1000,24361=>1000,24362=>1000,24363=>1000,24364=>1000,24365=>1000,24366=>1000,24367=>1000,24368=>1000,24369=>1000,24370=>1000,24371=>1000,24372=>1000,
+ 24373=>1000,24374=>1000,24375=>1000,24376=>1000,24377=>1000,24378=>1000,24379=>1000,24380=>1000,24381=>1000,24382=>1000,24383=>1000,24384=>1000,24385=>1000,24386=>1000,24387=>1000,24388=>1000,
+ 24389=>1000,24390=>1000,24391=>1000,24392=>1000,24393=>1000,24394=>1000,24395=>1000,24396=>1000,24397=>1000,24398=>1000,24399=>1000,24400=>1000,24401=>1000,24402=>1000,24403=>1000,24404=>1000,
+ 24405=>1000,24406=>1000,24407=>1000,24408=>1000,24409=>1000,24410=>1000,24411=>1000,24412=>1000,24413=>1000,24414=>1000,24415=>1000,24416=>1000,24417=>1000,24418=>1000,24419=>1000,24420=>1000,
+ 24421=>1000,24422=>1000,24423=>1000,24424=>1000,24425=>1000,24426=>1000,24427=>1000,24428=>1000,24429=>1000,24430=>1000,24431=>1000,24432=>1000,24433=>1000,24434=>1000,24435=>1000,24436=>1000,
+ 24437=>1000,24438=>1000,24439=>1000,24440=>1000,24441=>1000,24442=>1000,24443=>1000,24444=>1000,24445=>1000,24446=>1000,24447=>1000,24448=>1000,24449=>1000,24450=>1000,24451=>1000,24452=>1000,
+ 24453=>1000,24454=>1000,24455=>1000,24456=>1000,24457=>1000,24458=>1000,24459=>1000,24460=>1000,24461=>1000,24462=>1000,24463=>1000,24464=>1000,24465=>1000,24466=>1000,24467=>1000,24468=>1000,
+ 24469=>1000,24470=>1000,24471=>1000,24472=>1000,24473=>1000,24474=>1000,24475=>1000,24476=>1000,24477=>1000,24478=>1000,24479=>1000,24480=>1000,24481=>1000,24482=>1000,24483=>1000,24484=>1000,
+ 24485=>1000,24486=>1000,24487=>1000,24488=>1000,24489=>1000,24490=>1000,24491=>1000,24492=>1000,24493=>1000,24494=>1000,24495=>1000,24496=>1000,24497=>1000,24498=>1000,24499=>1000,24500=>1000,
+ 24501=>1000,24502=>1000,24503=>1000,24504=>1000,24505=>1000,24506=>1000,24507=>1000,24508=>1000,24509=>1000,24510=>1000,24511=>1000,24512=>1000,24513=>1000,24514=>1000,24515=>1000,24516=>1000,
+ 24517=>1000,24518=>1000,24519=>1000,24520=>1000,24521=>1000,24522=>1000,24523=>1000,24524=>1000,24525=>1000,24526=>1000,24527=>1000,24528=>1000,24529=>1000,24530=>1000,24531=>1000,24532=>1000,
+ 24533=>1000,24534=>1000,24535=>1000,24536=>1000,24537=>1000,24538=>1000,24539=>1000,24540=>1000,24541=>1000,24542=>1000,24543=>1000,24544=>1000,24545=>1000,24546=>1000,24547=>1000,24548=>1000,
+ 24549=>1000,24550=>1000,24551=>1000,24552=>1000,24553=>1000,24554=>1000,24555=>1000,24556=>1000,24557=>1000,24558=>1000,24559=>1000,24560=>1000,24561=>1000,24562=>1000,24563=>1000,24564=>1000,
+ 24565=>1000,24566=>1000,24567=>1000,24568=>1000,24569=>1000,24570=>1000,24571=>1000,24572=>1000,24573=>1000,24574=>1000,24575=>1000,24576=>1000,24577=>1000,24578=>1000,24579=>1000,24580=>1000,
+ 24581=>1000,24582=>1000,24583=>1000,24584=>1000,24585=>1000,24586=>1000,24587=>1000,24588=>1000,24589=>1000,24590=>1000,24591=>1000,24592=>1000,24593=>1000,24594=>1000,24595=>1000,24596=>1000,
+ 24597=>1000,24598=>1000,24599=>1000,24600=>1000,24601=>1000,24602=>1000,24603=>1000,24604=>1000,24605=>1000,24606=>1000,24607=>1000,24608=>1000,24609=>1000,24610=>1000,24611=>1000,24612=>1000,
+ 24613=>1000,24614=>1000,24615=>1000,24616=>1000,24617=>1000,24618=>1000,24619=>1000,24620=>1000,24621=>1000,24622=>1000,24623=>1000,24624=>1000,24625=>1000,24626=>1000,24627=>1000,24628=>1000,
+ 24629=>1000,24630=>1000,24631=>1000,24632=>1000,24633=>1000,24634=>1000,24635=>1000,24636=>1000,24637=>1000,24638=>1000,24639=>1000,24640=>1000,24641=>1000,24642=>1000,24643=>1000,24644=>1000,
+ 24645=>1000,24646=>1000,24647=>1000,24648=>1000,24649=>1000,24650=>1000,24651=>1000,24652=>1000,24653=>1000,24654=>1000,24655=>1000,24656=>1000,24657=>1000,24658=>1000,24659=>1000,24660=>1000,
+ 24661=>1000,24662=>1000,24663=>1000,24664=>1000,24665=>1000,24666=>1000,24667=>1000,24668=>1000,24669=>1000,24670=>1000,24671=>1000,24672=>1000,24673=>1000,24674=>1000,24675=>1000,24676=>1000,
+ 24677=>1000,24678=>1000,24679=>1000,24680=>1000,24681=>1000,24682=>1000,24683=>1000,24684=>1000,24685=>1000,24686=>1000,24687=>1000,24688=>1000,24689=>1000,24690=>1000,24691=>1000,24692=>1000,
+ 24693=>1000,24694=>1000,24695=>1000,24696=>1000,24697=>1000,24698=>1000,24699=>1000,24700=>1000,24701=>1000,24702=>1000,24703=>1000,24704=>1000,24705=>1000,24706=>1000,24707=>1000,24708=>1000,
+ 24709=>1000,24710=>1000,24711=>1000,24712=>1000,24713=>1000,24714=>1000,24715=>1000,24716=>1000,24717=>1000,24718=>1000,24719=>1000,24720=>1000,24721=>1000,24722=>1000,24723=>1000,24724=>1000,
+ 24725=>1000,24726=>1000,24727=>1000,24728=>1000,24729=>1000,24730=>1000,24731=>1000,24732=>1000,24733=>1000,24734=>1000,24735=>1000,24736=>1000,24737=>1000,24738=>1000,24739=>1000,24740=>1000,
+ 24741=>1000,24742=>1000,24743=>1000,24744=>1000,24745=>1000,24746=>1000,24747=>1000,24748=>1000,24749=>1000,24750=>1000,24751=>1000,24752=>1000,24753=>1000,24754=>1000,24755=>1000,24756=>1000,
+ 24757=>1000,24758=>1000,24759=>1000,24760=>1000,24761=>1000,24762=>1000,24763=>1000,24764=>1000,24765=>1000,24766=>1000,24767=>1000,24768=>1000,24769=>1000,24770=>1000,24771=>1000,24772=>1000,
+ 24773=>1000,24774=>1000,24775=>1000,24776=>1000,24777=>1000,24778=>1000,24779=>1000,24780=>1000,24781=>1000,24782=>1000,24783=>1000,24784=>1000,24785=>1000,24786=>1000,24787=>1000,24788=>1000,
+ 24789=>1000,24790=>1000,24791=>1000,24792=>1000,24793=>1000,24794=>1000,24795=>1000,24796=>1000,24797=>1000,24798=>1000,24799=>1000,24800=>1000,24801=>1000,24802=>1000,24803=>1000,24804=>1000,
+ 24805=>1000,24806=>1000,24807=>1000,24808=>1000,24809=>1000,24810=>1000,24811=>1000,24812=>1000,24813=>1000,24814=>1000,24815=>1000,24816=>1000,24817=>1000,24818=>1000,24819=>1000,24820=>1000,
+ 24821=>1000,24822=>1000,24823=>1000,24824=>1000,24825=>1000,24826=>1000,24827=>1000,24828=>1000,24829=>1000,24830=>1000,24831=>1000,24832=>1000,24833=>1000,24834=>1000,24835=>1000,24836=>1000,
+ 24837=>1000,24838=>1000,24839=>1000,24840=>1000,24841=>1000,24842=>1000,24843=>1000,24844=>1000,24845=>1000,24846=>1000,24847=>1000,24848=>1000,24849=>1000,24850=>1000,24851=>1000,24852=>1000,
+ 24853=>1000,24854=>1000,24855=>1000,24856=>1000,24857=>1000,24858=>1000,24859=>1000,24860=>1000,24861=>1000,24862=>1000,24863=>1000,24864=>1000,24865=>1000,24866=>1000,24867=>1000,24868=>1000,
+ 24869=>1000,24870=>1000,24871=>1000,24872=>1000,24873=>1000,24874=>1000,24875=>1000,24876=>1000,24877=>1000,24878=>1000,24879=>1000,24880=>1000,24881=>1000,24882=>1000,24883=>1000,24884=>1000,
+ 24885=>1000,24886=>1000,24887=>1000,24888=>1000,24889=>1000,24890=>1000,24891=>1000,24892=>1000,24893=>1000,24894=>1000,24895=>1000,24896=>1000,24897=>1000,24898=>1000,24899=>1000,24900=>1000,
+ 24901=>1000,24902=>1000,24903=>1000,24904=>1000,24905=>1000,24906=>1000,24907=>1000,24908=>1000,24909=>1000,24910=>1000,24911=>1000,24912=>1000,24913=>1000,24914=>1000,24915=>1000,24916=>1000,
+ 24917=>1000,24918=>1000,24919=>1000,24920=>1000,24921=>1000,24922=>1000,24923=>1000,24924=>1000,24925=>1000,24926=>1000,24927=>1000,24928=>1000,24929=>1000,24930=>1000,24931=>1000,24932=>1000,
+ 24933=>1000,24934=>1000,24935=>1000,24936=>1000,24937=>1000,24938=>1000,24939=>1000,24940=>1000,24941=>1000,24942=>1000,24943=>1000,24944=>1000,24945=>1000,24946=>1000,24947=>1000,24948=>1000,
+ 24949=>1000,24950=>1000,24951=>1000,24952=>1000,24953=>1000,24954=>1000,24955=>1000,24956=>1000,24957=>1000,24958=>1000,24959=>1000,24960=>1000,24961=>1001,24962=>1000,24963=>1000,24964=>1000,
+ 24965=>1000,24966=>1000,24967=>1000,24968=>1000,24969=>1000,24970=>1000,24971=>1000,24972=>1000,24973=>1000,24974=>1000,24975=>1000,24976=>1000,24977=>1000,24978=>1000,24979=>1000,24980=>1000,
+ 24981=>1000,24982=>1000,24983=>1000,24984=>1000,24985=>1000,24986=>1000,24987=>1000,24988=>1000,24989=>1000,24990=>1000,24991=>1000,24992=>1000,24993=>1000,24994=>1000,24995=>1000,24996=>1000,
+ 24997=>1000,24998=>1000,24999=>1000,25000=>1000,25001=>1000,25002=>1000,25003=>1000,25004=>1000,25005=>1000,25006=>1000,25007=>1000,25008=>1000,25009=>1000,25010=>1000,25011=>1000,25012=>1000,
+ 25013=>1000,25014=>1000,25015=>1000,25016=>1000,25017=>1000,25018=>1000,25019=>1000,25020=>1000,25021=>1000,25022=>1000,25023=>1000,25024=>1000,25025=>1000,25026=>1000,25027=>1000,25028=>1000,
+ 25029=>1000,25030=>1000,25031=>1000,25032=>1000,25033=>1000,25034=>1000,25035=>1000,25036=>1000,25037=>1000,25038=>1000,25039=>1000,25040=>1000,25041=>1000,25042=>1000,25043=>1000,25044=>1000,
+ 25045=>1000,25046=>1000,25047=>1000,25048=>1000,25049=>1000,25050=>1000,25051=>1000,25052=>1000,25053=>1000,25054=>1000,25055=>1000,25056=>1000,25057=>1000,25058=>1000,25059=>1000,25060=>1000,
+ 25061=>1000,25062=>1000,25063=>1000,25064=>1000,25065=>1000,25066=>1000,25067=>1000,25068=>1000,25069=>1000,25070=>1000,25071=>1000,25072=>1000,25073=>1000,25074=>1000,25075=>1000,25076=>1000,
+ 25077=>1000,25078=>1000,25079=>1000,25080=>1000,25081=>1000,25082=>1000,25083=>1000,25084=>1000,25085=>1000,25086=>1000,25087=>1000,25088=>1000,25089=>1000,25090=>1000,25091=>1000,25092=>1000,
+ 25093=>1000,25094=>1000,25095=>1000,25096=>1000,25097=>1000,25098=>1000,25099=>1000,25100=>1000,25101=>1000,25102=>1000,25103=>1000,25104=>1000,25105=>1000,25106=>1000,25107=>1000,25108=>1000,
+ 25109=>1000,25110=>1000,25111=>1000,25112=>1000,25113=>1000,25114=>1000,25115=>1000,25116=>1000,25117=>1000,25118=>1000,25119=>1000,25120=>1000,25121=>1000,25122=>1000,25123=>1000,25124=>1000,
+ 25125=>1000,25126=>1000,25127=>1000,25128=>1000,25129=>1000,25130=>1000,25131=>1000,25132=>1000,25133=>1000,25134=>1000,25135=>1000,25136=>1000,25137=>1000,25138=>1000,25139=>1000,25140=>1000,
+ 25141=>1000,25142=>1000,25143=>1000,25144=>1000,25145=>1000,25146=>1000,25147=>1000,25148=>1000,25149=>1000,25150=>1000,25151=>1000,25152=>1000,25153=>1000,25154=>1000,25155=>1000,25156=>1000,
+ 25157=>1000,25158=>1000,25159=>1000,25160=>1000,25161=>1000,25162=>1000,25163=>1000,25164=>1000,25165=>1000,25166=>1000,25167=>1000,25168=>1000,25169=>1000,25170=>1000,25171=>1000,25172=>1000,
+ 25173=>1000,25174=>1000,25175=>1000,25176=>1000,25177=>1000,25178=>1000,25179=>1000,25180=>1000,25181=>1000,25182=>1000,25183=>1000,25184=>1000,25185=>1000,25186=>1000,25187=>1000,25188=>1000,
+ 25189=>1000,25190=>1000,25191=>1000,25192=>1000,25193=>1000,25194=>1000,25195=>1000,25196=>1000,25197=>1000,25198=>1000,25199=>1000,25200=>1000,25201=>1000,25202=>1000,25203=>1000,25204=>1000,
+ 25205=>1000,25206=>1000,25207=>1000,25208=>1000,25209=>1000,25210=>1000,25211=>1000,25212=>1000,25213=>1000,25214=>1000,25215=>1000,25216=>1000,25217=>1000,25218=>1000,25219=>1000,25220=>1000,
+ 25221=>1000,25222=>1000,25223=>1000,25224=>1000,25225=>1000,25226=>1000,25227=>1000,25228=>1000,25229=>1000,25230=>1000,25231=>1000,25232=>1000,25233=>1000,25234=>1000,25235=>1000,25236=>1000,
+ 25237=>1000,25238=>1000,25239=>1000,25240=>1000,25241=>1000,25242=>1000,25243=>1000,25244=>1000,25245=>1000,25246=>1000,25247=>1000,25248=>1000,25249=>1000,25250=>1000,25251=>1000,25252=>1000,
+ 25253=>1000,25254=>1000,25255=>1000,25256=>1000,25257=>1000,25258=>1000,25259=>1000,25260=>1000,25261=>1000,25262=>1000,25263=>1000,25264=>1000,25265=>1000,25266=>1000,25267=>1000,25268=>1000,
+ 25269=>1000,25270=>1000,25271=>1000,25272=>1000,25273=>1000,25274=>1000,25275=>1000,25276=>1000,25277=>1000,25278=>1000,25279=>1000,25280=>1000,25281=>1000,25282=>1000,25283=>1000,25284=>1000,
+ 25285=>1000,25286=>1000,25287=>1000,25288=>1000,25289=>1000,25290=>1000,25291=>1000,25292=>1000,25293=>1000,25294=>1000,25295=>1000,25296=>1000,25297=>1000,25298=>1000,25299=>1000,25300=>1000,
+ 25301=>1000,25302=>1000,25303=>1000,25304=>1000,25305=>1000,25306=>1000,25307=>1000,25308=>1000,25309=>1000,25310=>1000,25311=>1000,25312=>1000,25313=>1000,25314=>1000,25315=>1000,25316=>1000,
+ 25317=>1000,25318=>1000,25319=>1000,25320=>1000,25321=>1000,25322=>1000,25323=>1000,25324=>1000,25325=>1000,25326=>1000,25327=>1000,25328=>1000,25329=>1000,25330=>1000,25331=>1000,25332=>1000,
+ 25333=>1000,25334=>1000,25335=>1000,25336=>1000,25337=>1000,25338=>1000,25339=>1000,25340=>1000,25341=>1000,25342=>1000,25343=>1000,25344=>1000,25345=>1000,25346=>1000,25347=>1000,25348=>1000,
+ 25349=>1000,25350=>1000,25351=>1000,25352=>1000,25353=>1000,25354=>1000,25355=>1000,25356=>1000,25357=>1000,25358=>1000,25359=>1000,25360=>1000,25361=>1000,25362=>1000,25363=>1000,25364=>1000,
+ 25365=>1000,25366=>1000,25367=>1000,25368=>1000,25369=>1000,25370=>1000,25371=>1000,25372=>1000,25373=>1000,25374=>1000,25375=>1000,25376=>1000,25377=>1000,25378=>1000,25379=>1000,25380=>1000,
+ 25381=>1000,25382=>1000,25383=>1000,25384=>1000,25385=>1000,25386=>1000,25387=>1000,25388=>1000,25389=>1000,25390=>1000,25391=>1000,25392=>1000,25393=>1000,25394=>1000,25395=>1000,25396=>1000,
+ 25397=>1000,25398=>1000,25399=>1000,25400=>1000,25401=>1000,25402=>1000,25403=>1000,25404=>1000,25405=>1000,25406=>1000,25407=>1000,25408=>1000,25409=>1000,25410=>1000,25411=>1000,25412=>1000,
+ 25413=>1000,25414=>1000,25415=>1000,25416=>1000,25417=>1000,25418=>1000,25419=>1000,25420=>1000,25421=>1000,25422=>1000,25423=>1000,25424=>1000,25425=>1000,25426=>1000,25427=>1000,25428=>1000,
+ 25429=>1000,25430=>1000,25431=>1000,25432=>1000,25433=>1000,25434=>1000,25435=>1000,25436=>1000,25437=>1000,25438=>1000,25439=>1000,25440=>1000,25441=>1000,25442=>1000,25443=>1000,25444=>1000,
+ 25445=>1000,25446=>1000,25447=>1000,25448=>1000,25449=>1000,25450=>1000,25451=>1000,25452=>1000,25453=>1000,25454=>1000,25455=>1000,25456=>1000,25457=>1000,25458=>1000,25459=>1000,25460=>1000,
+ 25461=>1000,25462=>1000,25463=>1000,25464=>1000,25465=>1000,25466=>1000,25467=>1000,25468=>1000,25469=>1000,25470=>1000,25471=>1000,25472=>1000,25473=>1000,25474=>1000,25475=>1000,25476=>1000,
+ 25477=>1000,25478=>1000,25479=>1000,25480=>1000,25481=>1000,25482=>1000,25483=>1000,25484=>1000,25485=>1000,25486=>1000,25487=>1000,25488=>1000,25489=>1000,25490=>1000,25491=>1000,25492=>1000,
+ 25493=>1000,25494=>1000,25495=>1000,25496=>1000,25497=>1000,25498=>1000,25499=>1000,25500=>1000,25501=>1000,25502=>1000,25503=>1000,25504=>1000,25505=>1000,25506=>1000,25507=>1000,25508=>1000,
+ 25509=>1000,25510=>1000,25511=>1000,25512=>1000,25513=>1000,25514=>1000,25515=>1000,25516=>1000,25517=>1000,25518=>1000,25519=>1000,25520=>1000,25521=>1000,25522=>1000,25523=>1000,25524=>1000,
+ 25525=>1000,25526=>1000,25527=>1000,25528=>1000,25529=>1000,25530=>1000,25531=>1000,25532=>1000,25533=>1000,25534=>1000,25535=>1000,25536=>1000,25537=>1000,25538=>1000,25539=>1000,25540=>1000,
+ 25541=>1000,25542=>1000,25543=>1000,25544=>1000,25545=>1000,25546=>1000,25547=>1000,25548=>1000,25549=>1000,25550=>1000,25551=>1000,25552=>1000,25553=>1000,25554=>1000,25555=>1000,25556=>1000,
+ 25557=>1000,25558=>1000,25559=>1000,25560=>1000,25561=>1000,25562=>1000,25563=>1000,25564=>1000,25565=>1000,25566=>1000,25567=>1000,25568=>1000,25569=>1000,25570=>1000,25571=>1000,25572=>1000,
+ 25573=>1000,25574=>1000,25575=>1000,25576=>1000,25577=>1000,25578=>1000,25579=>1000,25580=>1000,25581=>1000,25582=>1000,25583=>1000,25584=>1000,25585=>1000,25586=>1000,25587=>1000,25588=>1000,
+ 25589=>1000,25590=>1000,25591=>1000,25592=>1000,25593=>1000,25594=>1000,25595=>1000,25596=>1000,25597=>1000,25598=>1000,25599=>1000,25600=>1000,25601=>1000,25602=>1000,25603=>1000,25604=>1000,
+ 25605=>1000,25606=>1000,25607=>1000,25608=>1000,25609=>1000,25610=>1000,25611=>1000,25612=>1000,25613=>1000,25614=>1000,25615=>1000,25616=>1000,25617=>1000,25618=>1000,25619=>1000,25620=>1000,
+ 25621=>1000,25622=>1000,25623=>1000,25624=>1000,25625=>1000,25626=>1000,25627=>1000,25628=>1000,25629=>1000,25630=>1000,25631=>1000,25632=>1000,25633=>1000,25634=>1000,25635=>1000,25636=>1000,
+ 25637=>1000,25638=>1000,25639=>1000,25640=>1000,25641=>1000,25642=>1000,25643=>1000,25644=>1000,25645=>1000,25646=>1000,25647=>1000,25648=>1000,25649=>1000,25650=>1000,25651=>1000,25652=>1000,
+ 25653=>1000,25654=>1000,25655=>1000,25656=>1000,25657=>1000,25658=>1000,25659=>1000,25660=>1000,25661=>1000,25662=>1000,25663=>1000,25664=>1000,25665=>1000,25666=>1000,25667=>1000,25668=>1000,
+ 25669=>1000,25670=>1000,25671=>1000,25672=>1000,25673=>1000,25674=>1000,25675=>1000,25676=>1000,25677=>1000,25678=>1000,25679=>1000,25680=>1000,25681=>1000,25682=>1000,25683=>1000,25684=>1000,
+ 25685=>1000,25686=>1000,25687=>1000,25688=>1000,25689=>1000,25690=>1000,25691=>1000,25692=>1000,25693=>1000,25694=>1000,25695=>1000,25696=>1000,25697=>1000,25698=>1000,25699=>1000,25700=>1000,
+ 25701=>1000,25702=>1000,25703=>1000,25704=>1000,25705=>1000,25706=>1000,25707=>1000,25708=>1000,25709=>1000,25710=>1000,25711=>1000,25712=>1000,25713=>1000,25714=>1000,25715=>1000,25716=>1000,
+ 25717=>1000,25718=>1000,25719=>1000,25720=>1000,25721=>1000,25722=>1000,25723=>1000,25724=>1000,25725=>1000,25726=>1000,25727=>1000,25728=>1000,25729=>1000,25730=>1000,25731=>1000,25732=>1000,
+ 25733=>1000,25734=>1000,25735=>1000,25736=>1000,25737=>1000,25738=>1000,25739=>1000,25740=>1000,25741=>1000,25742=>1000,25743=>1000,25744=>1000,25745=>1000,25746=>1000,25747=>1000,25748=>1000,
+ 25749=>1000,25750=>1000,25751=>1000,25752=>1000,25753=>1000,25754=>1000,25755=>1000,25756=>1000,25757=>1000,25758=>1000,25759=>1000,25760=>1000,25761=>1000,25762=>1000,25763=>1000,25764=>1000,
+ 25765=>1000,25766=>1000,25767=>1000,25768=>1000,25769=>1000,25770=>1000,25771=>1000,25772=>1000,25773=>1000,25774=>1000,25775=>1000,25776=>1000,25777=>1000,25778=>1000,25779=>1000,25780=>1000,
+ 25781=>1000,25782=>1000,25783=>1000,25784=>1000,25785=>1000,25786=>1000,25787=>1000,25788=>1000,25789=>1000,25790=>1000,25791=>1000,25792=>1000,25793=>1000,25794=>1000,25795=>1000,25796=>1000,
+ 25797=>1000,25798=>1000,25799=>1000,25800=>1000,25801=>1000,25802=>1000,25803=>1000,25804=>1000,25805=>1000,25806=>1000,25807=>1000,25808=>1000,25809=>1000,25810=>1000,25811=>1000,25812=>1000,
+ 25813=>1000,25814=>1000,25815=>1000,25816=>1000,25817=>1000,25818=>1000,25819=>1000,25820=>1000,25821=>1000,25822=>1000,25823=>1000,25824=>1000,25825=>1000,25826=>1000,25827=>1000,25828=>1000,
+ 25829=>1000,25830=>1000,25831=>1000,25832=>1000,25833=>1000,25834=>1000,25835=>1000,25836=>1000,25837=>1000,25838=>1000,25839=>1000,25840=>1000,25841=>1000,25842=>1000,25843=>1000,25844=>1000,
+ 25845=>1000,25846=>1000,25847=>1000,25848=>1000,25849=>1000,25850=>1000,25851=>1000,25852=>1000,25853=>1000,25854=>1000,25855=>1000,25856=>1000,25857=>1000,25858=>1000,25859=>1000,25860=>1000,
+ 25861=>1000,25862=>1000,25863=>1000,25864=>1000,25865=>1000,25866=>1000,25867=>1000,25868=>1000,25869=>1000,25870=>1000,25871=>1000,25872=>1000,25873=>1000,25874=>1000,25875=>1000,25876=>1000,
+ 25877=>1000,25878=>1000,25879=>1000,25880=>1000,25881=>1000,25882=>1000,25883=>1000,25884=>1000,25885=>1000,25886=>1000,25887=>1000,25888=>1000,25889=>1000,25890=>1000,25891=>1000,25892=>1000,
+ 25893=>1000,25894=>1000,25895=>1000,25896=>1000,25897=>1000,25898=>1000,25899=>1000,25900=>1000,25901=>1000,25902=>1000,25903=>1000,25904=>1000,25905=>1000,25906=>1000,25907=>1000,25908=>1000,
+ 25909=>1000,25910=>1000,25911=>1000,25912=>1000,25913=>1000,25914=>1000,25915=>1000,25916=>1000,25917=>1000,25918=>1000,25919=>1000,25920=>1000,25921=>1000,25922=>1000,25923=>1000,25924=>1000,
+ 25925=>1000,25926=>1000,25927=>1000,25928=>1000,25929=>1000,25930=>1000,25931=>1000,25932=>1000,25933=>1000,25934=>1000,25935=>1000,25936=>1000,25937=>1000,25938=>1000,25939=>1000,25940=>1000,
+ 25941=>1000,25942=>1000,25943=>1000,25944=>1000,25945=>1000,25946=>1000,25947=>1000,25948=>1000,25949=>1000,25950=>1000,25951=>1000,25952=>1000,25953=>1000,25954=>1000,25955=>1000,25956=>1000,
+ 25957=>1000,25958=>1000,25959=>1000,25960=>1000,25961=>1000,25962=>1000,25963=>1000,25964=>1000,25965=>1000,25966=>1000,25967=>1000,25968=>1000,25969=>1000,25970=>1000,25971=>1000,25972=>1000,
+ 25973=>1000,25974=>1000,25975=>1000,25976=>1000,25977=>1000,25978=>1000,25979=>1000,25980=>1000,25981=>1000,25982=>1000,25983=>1000,25984=>1000,25985=>1000,25986=>1000,25987=>1000,25988=>1000,
+ 25989=>1000,25990=>1000,25991=>1000,25992=>1000,25993=>1000,25994=>1000,25995=>1000,25996=>1000,25997=>1000,25998=>1000,25999=>1000,26000=>1000,26001=>1000,26002=>1000,26003=>1000,26004=>1000,
+ 26005=>1000,26006=>1000,26007=>1000,26008=>1000,26009=>1000,26010=>1000,26011=>1000,26012=>1000,26013=>1000,26014=>1000,26015=>1000,26016=>1000,26017=>1000,26018=>1000,26019=>1000,26020=>1000,
+ 26021=>1000,26022=>1000,26023=>1000,26024=>1000,26025=>1000,26026=>1000,26027=>1000,26028=>1000,26029=>1000,26030=>1000,26031=>1000,26032=>1000,26033=>1000,26034=>1000,26035=>1000,26036=>1000,
+ 26037=>1000,26038=>1000,26039=>1000,26040=>1000,26041=>1000,26042=>1000,26043=>1000,26044=>1000,26045=>1000,26046=>1000,26047=>1000,26048=>1000,26049=>1000,26050=>1000,26051=>1000,26052=>1000,
+ 26053=>1000,26054=>1000,26055=>1000,26056=>1000,26057=>1000,26058=>1000,26059=>1000,26060=>1000,26061=>1000,26062=>1000,26063=>1000,26064=>1000,26065=>1000,26066=>1000,26067=>1000,26068=>1000,
+ 26069=>1000,26070=>1000,26071=>1000,26072=>1000,26073=>1000,26074=>1000,26075=>1000,26076=>1000,26077=>1000,26078=>1000,26079=>1000,26080=>1000,26081=>1000,26082=>1000,26083=>1000,26084=>1000,
+ 26085=>1000,26086=>1000,26087=>1000,26088=>1000,26089=>1000,26090=>1000,26091=>1000,26092=>1000,26093=>1000,26094=>1000,26095=>1000,26096=>1000,26097=>1000,26098=>1000,26099=>1000,26100=>1000,
+ 26101=>1000,26102=>1000,26103=>1000,26104=>1000,26105=>1000,26106=>1000,26107=>1000,26108=>1000,26109=>1000,26110=>1000,26111=>1000,26112=>1000,26113=>1000,26114=>1000,26115=>1000,26116=>1000,
+ 26117=>1000,26118=>1000,26119=>1000,26120=>1000,26121=>1000,26122=>1000,26123=>1000,26124=>1000,26125=>1000,26126=>1000,26127=>1000,26128=>1000,26129=>1000,26130=>1000,26131=>1000,26132=>1000,
+ 26133=>1000,26134=>1000,26135=>1000,26136=>1000,26137=>1000,26138=>1000,26139=>1000,26140=>1000,26141=>1000,26142=>1000,26143=>1000,26144=>1000,26145=>1000,26146=>1000,26147=>1000,26148=>1000,
+ 26149=>1000,26150=>1000,26151=>1000,26152=>1000,26153=>1000,26154=>1000,26155=>1000,26156=>1000,26157=>1000,26158=>1000,26159=>1000,26160=>1000,26161=>1000,26162=>1000,26163=>1000,26164=>1000,
+ 26165=>1000,26166=>1000,26167=>1000,26168=>1000,26169=>1000,26170=>1000,26171=>1000,26172=>1000,26173=>1000,26174=>1000,26175=>1000,26176=>1000,26177=>1000,26178=>1000,26179=>1000,26180=>1000,
+ 26181=>1000,26182=>1000,26183=>1000,26184=>1000,26185=>1000,26186=>1000,26187=>1000,26188=>1000,26189=>1000,26190=>1000,26191=>1000,26192=>1000,26193=>1000,26194=>1000,26195=>1000,26196=>1000,
+ 26197=>1000,26198=>1000,26199=>1000,26200=>1000,26201=>1000,26202=>1000,26203=>1000,26204=>1000,26205=>1000,26206=>1000,26207=>1000,26208=>1000,26209=>1000,26210=>1000,26211=>1000,26212=>1000,
+ 26213=>1000,26214=>1000,26215=>1000,26216=>1000,26217=>1000,26218=>1000,26219=>1000,26220=>1000,26221=>1000,26222=>1000,26223=>1000,26224=>1000,26225=>1000,26226=>1000,26227=>1000,26228=>1000,
+ 26229=>1000,26230=>1000,26231=>1000,26232=>1000,26233=>1000,26234=>1000,26235=>1000,26236=>1000,26237=>1000,26238=>1000,26239=>1000,26240=>1000,26241=>1000,26242=>1000,26243=>1000,26244=>1000,
+ 26245=>1000,26246=>1000,26247=>1000,26248=>1000,26249=>1000,26250=>1000,26251=>1000,26252=>1000,26253=>1000,26254=>1000,26255=>1000,26256=>1000,26257=>1000,26258=>1000,26259=>1000,26260=>1000,
+ 26261=>1000,26262=>1000,26263=>1000,26264=>1000,26265=>1000,26266=>1000,26267=>1000,26268=>1000,26269=>1000,26270=>1000,26271=>1000,26272=>1000,26273=>1000,26274=>1000,26275=>1000,26276=>1000,
+ 26277=>1000,26278=>1000,26279=>1000,26280=>1000,26281=>1000,26282=>1000,26283=>1000,26284=>1000,26285=>1000,26286=>1000,26287=>1000,26288=>1000,26289=>1000,26290=>1000,26291=>1000,26292=>1000,
+ 26293=>1000,26294=>1000,26295=>1000,26296=>1000,26297=>1000,26298=>1000,26299=>1000,26300=>1000,26301=>1000,26302=>1000,26303=>1000,26304=>1000,26305=>1000,26306=>1000,26307=>1000,26308=>1000,
+ 26309=>1000,26310=>1000,26311=>1000,26312=>1000,26313=>1000,26314=>1000,26315=>1000,26316=>1000,26317=>1000,26318=>1000,26319=>1000,26320=>1000,26321=>1000,26322=>1000,26323=>1000,26324=>1000,
+ 26325=>1000,26326=>1000,26327=>1000,26328=>1000,26329=>1000,26330=>1000,26331=>1000,26332=>1000,26333=>1000,26334=>1000,26335=>1000,26336=>1000,26337=>1000,26338=>1000,26339=>1000,26340=>1000,
+ 26341=>1000,26342=>1000,26343=>1000,26344=>1000,26345=>1000,26346=>1000,26347=>1000,26348=>1000,26349=>1000,26350=>1000,26351=>1000,26352=>1000,26353=>1000,26354=>1000,26355=>1000,26356=>1000,
+ 26357=>1000,26358=>1000,26359=>1000,26360=>1000,26361=>1000,26362=>1000,26363=>1000,26364=>1000,26365=>1000,26366=>1000,26367=>1000,26368=>1000,26369=>1000,26370=>1000,26371=>1000,26372=>1000,
+ 26373=>1000,26374=>1000,26375=>1000,26376=>1000,26377=>1000,26378=>1000,26379=>1000,26380=>1000,26381=>1000,26382=>1000,26383=>1000,26384=>1000,26385=>1000,26386=>1000,26387=>1000,26388=>1000,
+ 26389=>1000,26390=>1000,26391=>1000,26392=>1000,26393=>1000,26394=>1000,26395=>1000,26396=>1000,26397=>1000,26398=>1000,26399=>1000,26400=>1000,26401=>1000,26402=>1000,26403=>1000,26404=>1000,
+ 26405=>1000,26406=>1000,26407=>1000,26408=>1000,26409=>1000,26410=>1000,26411=>1000,26412=>1000,26413=>1000,26414=>1000,26415=>1000,26416=>1000,26417=>1000,26418=>1000,26419=>1000,26420=>1000,
+ 26421=>1000,26422=>1000,26423=>1000,26424=>1000,26425=>1000,26426=>1000,26427=>1000,26428=>1000,26429=>1000,26430=>1000,26431=>1000,26432=>1000,26433=>1000,26434=>1000,26435=>1000,26436=>1000,
+ 26437=>1000,26438=>1000,26439=>1000,26440=>1000,26441=>1000,26442=>1000,26443=>1000,26444=>1000,26445=>1000,26446=>1000,26447=>1000,26448=>1000,26449=>1000,26450=>1000,26451=>1000,26452=>1000,
+ 26453=>1000,26454=>1000,26455=>1000,26456=>1000,26457=>1000,26458=>1000,26459=>1000,26460=>1000,26461=>1000,26462=>1000,26463=>1000,26464=>1000,26465=>1000,26466=>1000,26467=>1000,26468=>1000,
+ 26469=>1000,26470=>1000,26471=>1000,26472=>1000,26473=>1000,26474=>1000,26475=>1000,26476=>1000,26477=>1000,26478=>1000,26479=>1000,26480=>1000,26481=>1000,26482=>1000,26483=>1000,26484=>1000,
+ 26485=>1000,26486=>1000,26487=>1000,26488=>1000,26489=>1000,26490=>1000,26491=>1000,26492=>1000,26493=>1000,26494=>1000,26495=>1000,26496=>1000,26497=>1000,26498=>1000,26499=>1000,26500=>1000,
+ 26501=>1000,26502=>1000,26503=>1000,26504=>1000,26505=>1000,26506=>1000,26507=>1000,26508=>1000,26509=>1000,26510=>1000,26511=>1000,26512=>1000,26513=>1000,26514=>1000,26515=>1000,26516=>1000,
+ 26517=>1000,26518=>1000,26519=>1000,26520=>1000,26521=>1000,26522=>1000,26523=>1000,26524=>1000,26525=>1000,26526=>1000,26527=>1000,26528=>1000,26529=>1000,26530=>1000,26531=>1000,26532=>1000,
+ 26533=>1000,26534=>1000,26535=>1000,26536=>1000,26537=>1000,26538=>1000,26539=>1000,26540=>1000,26541=>1000,26542=>1000,26543=>1000,26544=>1000,26545=>1000,26546=>1000,26547=>1000,26548=>1000,
+ 26549=>1000,26550=>1000,26551=>1000,26552=>1000,26553=>1000,26554=>1000,26555=>1000,26556=>1000,26557=>1000,26558=>1000,26559=>1000,26560=>1000,26561=>1000,26562=>1000,26563=>1000,26564=>1000,
+ 26565=>1000,26566=>1000,26567=>1000,26568=>1000,26569=>1000,26570=>1000,26571=>1000,26572=>1000,26573=>1000,26574=>1000,26575=>1000,26576=>1000,26577=>1000,26578=>1000,26579=>1000,26580=>1000,
+ 26581=>1000,26582=>1000,26583=>1000,26584=>1000,26585=>1000,26586=>1000,26587=>1000,26588=>1000,26589=>1000,26590=>1000,26591=>1000,26592=>1000,26593=>1000,26594=>1000,26595=>1000,26596=>1000,
+ 26597=>1000,26598=>1000,26599=>1000,26600=>1000,26601=>1000,26602=>1000,26603=>1000,26604=>1000,26605=>1000,26606=>1000,26607=>1000,26608=>1000,26609=>1000,26610=>1000,26611=>1000,26612=>1000,
+ 26613=>1000,26614=>1000,26615=>1000,26616=>1000,26617=>1000,26618=>1000,26619=>1000,26620=>1000,26621=>1000,26622=>1000,26623=>1000,26624=>1000,26625=>1000,26626=>1000,26627=>1000,26628=>1000,
+ 26629=>1000,26630=>1000,26631=>1000,26632=>1000,26633=>1000,26634=>1000,26635=>1000,26636=>1000,26637=>1000,26638=>1000,26639=>1000,26640=>1000,26641=>1000,26642=>1000,26643=>1000,26644=>1000,
+ 26645=>1000,26646=>1000,26647=>1000,26648=>1000,26649=>1000,26650=>1000,26651=>1000,26652=>1000,26653=>1000,26654=>1000,26655=>1000,26656=>1000,26657=>1000,26658=>1000,26659=>1000,26660=>1000,
+ 26661=>1000,26662=>1000,26663=>1000,26664=>1000,26665=>1000,26666=>1000,26667=>1000,26668=>1000,26669=>1000,26670=>1000,26671=>1000,26672=>1000,26673=>1000,26674=>1000,26675=>1000,26676=>1000,
+ 26677=>1000,26678=>1000,26679=>1000,26680=>1000,26681=>1000,26682=>1000,26683=>1000,26684=>1000,26685=>1000,26686=>1000,26687=>1000,26688=>1000,26689=>1000,26690=>1000,26691=>1000,26692=>1000,
+ 26693=>1000,26694=>1000,26695=>1000,26696=>1000,26697=>1000,26698=>1000,26699=>1000,26700=>1000,26701=>1000,26702=>1000,26703=>1000,26704=>1000,26705=>1000,26706=>1000,26707=>1000,26708=>1000,
+ 26709=>1000,26710=>1000,26711=>1000,26712=>1000,26713=>1000,26714=>1000,26715=>1000,26716=>1000,26717=>1000,26718=>1000,26719=>1000,26720=>1000,26721=>1000,26722=>1000,26723=>1000,26724=>1000,
+ 26725=>1000,26726=>1000,26727=>1000,26728=>1000,26729=>1000,26730=>1000,26731=>1000,26732=>1000,26733=>1000,26734=>1000,26735=>1000,26736=>1000,26737=>1000,26738=>1000,26739=>1000,26740=>1000,
+ 26741=>1000,26742=>1000,26743=>1000,26744=>1000,26745=>1000,26746=>1000,26747=>1000,26748=>1000,26749=>1000,26750=>1000,26751=>1000,26752=>1000,26753=>1000,26754=>1000,26755=>1000,26756=>1000,
+ 26757=>1000,26758=>1000,26759=>1000,26760=>1000,26761=>1000,26762=>1000,26763=>1000,26764=>1000,26765=>1000,26766=>1000,26767=>1000,26768=>1000,26769=>1000,26770=>1000,26771=>1000,26772=>1000,
+ 26773=>1000,26774=>1000,26775=>1000,26776=>1000,26777=>1000,26778=>1000,26779=>1000,26780=>1000,26781=>1000,26782=>1000,26783=>1000,26784=>1000,26785=>1000,26786=>1000,26787=>1000,26788=>1000,
+ 26789=>1000,26790=>1000,26791=>1000,26792=>1000,26793=>1000,26794=>1000,26795=>1000,26796=>1000,26797=>1000,26798=>1000,26799=>1000,26800=>1000,26801=>1000,26802=>1000,26803=>1000,26804=>1000,
+ 26805=>1000,26806=>1000,26807=>1000,26808=>1000,26809=>1000,26810=>1000,26811=>1000,26812=>1000,26813=>1000,26814=>1000,26815=>1000,26816=>1000,26817=>1000,26818=>1000,26819=>1000,26820=>1000,
+ 26821=>1000,26822=>1000,26823=>1000,26824=>1000,26825=>1000,26826=>1000,26827=>1000,26828=>1000,26829=>1000,26830=>1000,26831=>1000,26832=>1000,26833=>1000,26834=>1000,26835=>1000,26836=>1000,
+ 26837=>1000,26838=>1000,26839=>1000,26840=>1000,26841=>1000,26842=>1000,26843=>1000,26844=>1000,26845=>1000,26846=>1000,26847=>1000,26848=>1000,26849=>1000,26850=>1000,26851=>1000,26852=>1000,
+ 26853=>1000,26854=>1000,26855=>1000,26856=>1000,26857=>1000,26858=>1000,26859=>1000,26860=>1000,26861=>1000,26862=>1000,26863=>1000,26864=>1000,26865=>1000,26866=>1000,26867=>1000,26868=>1000,
+ 26869=>1000,26870=>1000,26871=>1000,26872=>1000,26873=>1000,26874=>1000,26875=>1000,26876=>1000,26877=>1000,26878=>1000,26879=>1000,26880=>1000,26881=>1000,26882=>1000,26883=>1000,26884=>1000,
+ 26885=>1000,26886=>1000,26887=>1000,26888=>1000,26889=>1000,26890=>1000,26891=>1000,26892=>1000,26893=>1000,26894=>1000,26895=>1000,26896=>1000,26897=>1000,26898=>1000,26899=>1000,26900=>1000,
+ 26901=>1000,26902=>1000,26903=>1000,26904=>1000,26905=>1000,26906=>1000,26907=>1000,26908=>1000,26909=>1000,26910=>1000,26911=>1000,26912=>1000,26913=>1000,26914=>1000,26915=>1000,26916=>1000,
+ 26917=>1000,26918=>1000,26919=>1000,26920=>1000,26921=>1000,26922=>1000,26923=>1000,26924=>1000,26925=>1000,26926=>1000,26927=>1000,26928=>1000,26929=>1000,26930=>1000,26931=>1000,26932=>1000,
+ 26933=>1000,26934=>1000,26935=>1000,26936=>1000,26937=>1000,26938=>1000,26939=>1000,26940=>1000,26941=>1000,26942=>1000,26943=>1000,26944=>1000,26945=>1000,26946=>1000,26947=>1000,26948=>1000,
+ 26949=>1000,26950=>1000,26951=>1000,26952=>1000,26953=>1000,26954=>1000,26955=>1000,26956=>1000,26957=>1000,26958=>1000,26959=>1000,26960=>1000,26961=>1000,26962=>1000,26963=>1000,26964=>1000,
+ 26965=>1000,26966=>1000,26967=>1000,26968=>1000,26969=>1000,26970=>1000,26971=>1000,26972=>1000,26973=>1000,26974=>1000,26975=>1000,26976=>1000,26977=>1000,26978=>1000,26979=>1000,26980=>1000,
+ 26981=>1000,26982=>1000,26983=>1000,26984=>1000,26985=>1000,26986=>1000,26987=>1000,26988=>1000,26989=>1000,26990=>1000,26991=>1000,26992=>1000,26993=>1000,26994=>1000,26995=>1000,26996=>1000,
+ 26997=>1000,26998=>1000,26999=>1000,27000=>1000,27001=>1000,27002=>1000,27003=>1000,27004=>1000,27005=>1000,27006=>1000,27007=>1000,27008=>1000,27009=>1000,27010=>1000,27011=>1000,27012=>1000,
+ 27013=>1000,27014=>1000,27015=>1000,27016=>1000,27017=>1000,27018=>1000,27019=>1000,27020=>1000,27021=>1000,27022=>1000,27023=>1000,27024=>1000,27025=>1000,27026=>1000,27027=>1000,27028=>1000,
+ 27029=>1000,27030=>1000,27031=>1000,27032=>1000,27033=>1000,27034=>1000,27035=>1000,27036=>1000,27037=>1000,27038=>1000,27039=>1000,27040=>1000,27041=>1000,27042=>1000,27043=>1000,27044=>1000,
+ 27045=>1000,27046=>1000,27047=>1000,27048=>1000,27049=>1000,27050=>1000,27051=>1000,27052=>1000,27053=>1000,27054=>1000,27055=>1000,27056=>1000,27057=>1000,27058=>1000,27059=>1000,27060=>1000,
+ 27061=>1000,27062=>1000,27063=>1000,27064=>1000,27065=>1000,27066=>1000,27067=>1000,27068=>1000,27069=>1000,27070=>1000,27071=>1000,27072=>1000,27073=>1000,27074=>1000,27075=>1000,27076=>1000,
+ 27077=>1000,27078=>1000,27079=>1000,27080=>1000,27081=>1000,27082=>1000,27083=>1000,27084=>1000,27085=>1000,27086=>1000,27087=>1000,27088=>1000,27089=>1000,27090=>1000,27091=>1000,27092=>1000,
+ 27093=>1000,27094=>1000,27095=>1000,27096=>1000,27097=>1000,27098=>1000,27099=>1000,27100=>1000,27101=>1000,27102=>1000,27103=>1000,27104=>1000,27105=>1000,27106=>1000,27107=>1000,27108=>1000,
+ 27109=>1000,27110=>1000,27111=>1000,27112=>1000,27113=>1000,27114=>1000,27115=>1000,27116=>1000,27117=>1000,27118=>1000,27119=>1000,27120=>1000,27121=>1000,27122=>1000,27123=>1000,27124=>1000,
+ 27125=>1000,27126=>1000,27127=>1000,27128=>1000,27129=>1000,27130=>1000,27131=>1000,27132=>1000,27133=>1000,27134=>1000,27135=>1000,27136=>1000,27137=>1000,27138=>1000,27139=>1000,27140=>1000,
+ 27141=>1000,27142=>1000,27143=>1000,27144=>1000,27145=>1000,27146=>1000,27147=>1000,27148=>1000,27149=>1000,27150=>1000,27151=>1000,27152=>1000,27153=>1000,27154=>1000,27155=>1000,27156=>1000,
+ 27157=>1000,27158=>1000,27159=>1000,27160=>1000,27161=>1000,27162=>1000,27163=>1000,27164=>1000,27165=>1000,27166=>1000,27167=>1000,27168=>1000,27169=>1000,27170=>1000,27171=>1000,27172=>1000,
+ 27173=>1000,27174=>1000,27175=>1000,27176=>1000,27177=>1000,27178=>1000,27179=>1000,27180=>1000,27181=>1000,27182=>1000,27183=>1000,27184=>1000,27185=>1000,27186=>1000,27187=>1000,27188=>1000,
+ 27189=>1000,27190=>1000,27191=>1000,27192=>1000,27193=>1000,27194=>1000,27195=>1000,27196=>1000,27197=>1000,27198=>1000,27199=>1000,27200=>1000,27201=>1000,27202=>1000,27203=>1000,27204=>1000,
+ 27205=>1000,27206=>1000,27207=>1000,27208=>1000,27209=>1000,27210=>1000,27211=>1000,27212=>1000,27213=>1000,27214=>1000,27215=>1000,27216=>1000,27217=>1000,27218=>1000,27219=>1000,27220=>1000,
+ 27221=>1000,27222=>1000,27223=>1000,27224=>1000,27225=>1000,27226=>1000,27227=>1000,27228=>1000,27229=>1000,27230=>1000,27231=>1000,27232=>1000,27233=>1000,27234=>1000,27235=>1000,27236=>1000,
+ 27237=>1000,27238=>1000,27239=>1000,27240=>1000,27241=>1000,27242=>1000,27243=>1000,27244=>1000,27245=>1000,27246=>1000,27247=>1000,27248=>1000,27249=>1000,27250=>1000,27251=>1000,27252=>1000,
+ 27253=>1000,27254=>1000,27255=>1000,27256=>1000,27257=>1000,27258=>1000,27259=>1000,27260=>1000,27261=>1000,27262=>1000,27263=>1000,27264=>1000,27265=>1000,27266=>1000,27267=>1000,27268=>1000,
+ 27269=>1000,27270=>1000,27271=>1000,27272=>1000,27273=>1000,27274=>1000,27275=>1000,27276=>1000,27277=>1000,27278=>1000,27279=>1000,27280=>1000,27281=>1000,27282=>1000,27283=>1000,27284=>1000,
+ 27285=>1000,27286=>1000,27287=>1000,27288=>1000,27289=>1000,27290=>1000,27291=>1000,27292=>1000,27293=>1000,27294=>1000,27295=>1000,27296=>1000,27297=>1000,27298=>1000,27299=>1000,27300=>1000,
+ 27301=>1000,27302=>1000,27303=>1000,27304=>1000,27305=>1000,27306=>1000,27307=>1000,27308=>1000,27309=>1000,27310=>1000,27311=>1000,27312=>1000,27313=>1000,27314=>1000,27315=>1000,27316=>1000,
+ 27317=>1000,27318=>1000,27319=>1000,27320=>1000,27321=>1000,27322=>1000,27323=>1000,27324=>1000,27325=>1000,27326=>1000,27327=>1000,27328=>1000,27329=>1000,27330=>1000,27331=>1000,27332=>1000,
+ 27333=>1000,27334=>1000,27335=>1000,27336=>1000,27337=>1000,27338=>1000,27339=>1000,27340=>1000,27341=>1000,27342=>1000,27343=>1000,27344=>1000,27345=>1000,27346=>1000,27347=>1000,27348=>1000,
+ 27349=>1000,27350=>1000,27351=>1000,27352=>1000,27353=>1000,27354=>1000,27355=>1000,27356=>1000,27357=>1000,27358=>1000,27359=>1000,27360=>1000,27361=>1000,27362=>1000,27363=>1000,27364=>1000,
+ 27365=>1000,27366=>1000,27367=>1000,27368=>1000,27369=>1000,27370=>1000,27371=>1000,27372=>1000,27373=>1000,27374=>1000,27375=>1000,27376=>1000,27377=>1000,27378=>1000,27379=>1000,27380=>1000,
+ 27381=>1000,27382=>1000,27383=>1000,27384=>1000,27385=>1000,27386=>1000,27387=>1000,27388=>1000,27389=>1000,27390=>1000,27391=>1000,27392=>1000,27393=>1000,27394=>1000,27395=>1000,27396=>1000,
+ 27397=>1000,27398=>1000,27399=>1000,27400=>1000,27401=>1000,27402=>1000,27403=>1000,27404=>1000,27405=>1000,27406=>1000,27407=>1000,27408=>1000,27409=>1000,27410=>1000,27411=>1000,27412=>1000,
+ 27413=>1000,27414=>1000,27415=>1000,27416=>1000,27417=>1000,27418=>1000,27419=>1000,27420=>1000,27421=>1000,27422=>1000,27423=>1000,27424=>1000,27425=>1000,27426=>1000,27427=>1000,27428=>1000,
+ 27429=>1000,27430=>1000,27431=>1000,27432=>1000,27433=>1000,27434=>1000,27435=>1000,27436=>1000,27437=>1000,27438=>1000,27439=>1000,27440=>1000,27441=>1000,27442=>1000,27443=>1000,27444=>1000,
+ 27445=>1000,27446=>1000,27447=>1000,27448=>1000,27449=>1000,27450=>1000,27451=>1000,27452=>1000,27453=>1000,27454=>1000,27455=>1000,27456=>1000,27457=>1000,27458=>1000,27459=>1000,27460=>1000,
+ 27461=>1000,27462=>1000,27463=>1000,27464=>1000,27465=>1000,27466=>1000,27467=>1000,27468=>1000,27469=>1000,27470=>1000,27471=>1000,27472=>1000,27473=>1000,27474=>1000,27475=>1000,27476=>1000,
+ 27477=>1000,27478=>1000,27479=>1000,27480=>1000,27481=>1000,27482=>1000,27483=>1000,27484=>1000,27485=>1000,27486=>1000,27487=>1000,27488=>1000,27489=>1000,27490=>1000,27491=>1000,27492=>1000,
+ 27493=>1000,27494=>1000,27495=>1000,27496=>1000,27497=>1000,27498=>1000,27499=>1000,27500=>1000,27501=>1000,27502=>1000,27503=>1000,27504=>1000,27505=>1000,27506=>1000,27507=>1000,27508=>1000,
+ 27509=>1000,27510=>1000,27511=>1000,27512=>1000,27513=>1000,27514=>1000,27515=>1000,27516=>1000,27517=>1000,27518=>1000,27519=>1000,27520=>1000,27521=>1000,27522=>1000,27523=>1000,27524=>1000,
+ 27525=>1000,27526=>1000,27527=>1000,27528=>1000,27529=>1000,27530=>1000,27531=>1000,27532=>1000,27533=>1000,27534=>1000,27535=>1000,27536=>1000,27537=>1000,27538=>1000,27539=>1000,27540=>1000,
+ 27541=>1000,27542=>1000,27543=>1000,27544=>1000,27545=>1000,27546=>1000,27547=>1000,27548=>1000,27549=>1000,27550=>1000,27551=>1000,27552=>1000,27553=>1000,27554=>1000,27555=>1000,27556=>1000,
+ 27557=>1000,27558=>1000,27559=>1000,27560=>1000,27561=>1000,27562=>1000,27563=>1000,27564=>1000,27565=>1000,27566=>1000,27567=>1000,27568=>1000,27569=>1000,27570=>1000,27571=>1000,27572=>1000,
+ 27573=>1000,27574=>1000,27575=>1000,27576=>1000,27577=>1000,27578=>1000,27579=>1000,27580=>1000,27581=>1000,27582=>1000,27583=>1000,27584=>1000,27585=>1000,27586=>1000,27587=>1000,27588=>1000,
+ 27589=>1000,27590=>1000,27591=>1000,27592=>1000,27593=>1000,27594=>1000,27595=>1000,27596=>1000,27597=>1000,27598=>1000,27599=>1000,27600=>1000,27601=>1000,27602=>1000,27603=>1000,27604=>1000,
+ 27605=>1000,27606=>1000,27607=>1000,27608=>1000,27609=>1000,27610=>1000,27611=>1000,27612=>1000,27613=>1000,27614=>1000,27615=>1000,27616=>1000,27617=>1000,27618=>1000,27619=>1000,27620=>1000,
+ 27621=>1000,27622=>1000,27623=>1000,27624=>1000,27625=>1000,27626=>1000,27627=>1000,27628=>1000,27629=>1000,27630=>1000,27631=>1000,27632=>1000,27633=>1000,27634=>1000,27635=>1000,27636=>1000,
+ 27637=>1000,27638=>1000,27639=>1000,27640=>1000,27641=>1000,27642=>1000,27643=>1000,27644=>1000,27645=>1000,27646=>1000,27647=>1000,27648=>1000,27649=>1000,27650=>1000,27651=>1000,27652=>1000,
+ 27653=>1000,27654=>1000,27655=>1000,27656=>1000,27657=>1000,27658=>1000,27659=>1000,27660=>1000,27661=>1000,27662=>1000,27663=>1000,27664=>1000,27665=>1000,27666=>1000,27667=>1000,27668=>1000,
+ 27669=>1000,27670=>1000,27671=>1000,27672=>1000,27673=>1000,27674=>1000,27675=>1000,27676=>1000,27677=>1000,27678=>1000,27679=>1000,27680=>1000,27681=>1000,27682=>1000,27683=>1000,27684=>1000,
+ 27685=>1000,27686=>1000,27687=>1000,27688=>1000,27689=>1000,27690=>1000,27691=>1000,27692=>1000,27693=>1000,27694=>1000,27695=>1000,27696=>1000,27697=>1000,27698=>1000,27699=>1000,27700=>1000,
+ 27701=>1000,27702=>1000,27703=>1000,27704=>1000,27705=>1000,27706=>1000,27707=>1000,27708=>1000,27709=>1000,27710=>1000,27711=>1000,27712=>1000,27713=>1000,27714=>1000,27715=>1000,27716=>1000,
+ 27717=>1000,27718=>1000,27719=>1000,27720=>1000,27721=>1000,27722=>1000,27723=>1000,27724=>1000,27725=>1000,27726=>1000,27727=>1000,27728=>1000,27729=>1000,27730=>1000,27731=>1000,27732=>1000,
+ 27733=>1000,27734=>1000,27735=>1000,27736=>1000,27737=>1000,27738=>1000,27739=>1000,27740=>1000,27741=>1000,27742=>1000,27743=>1000,27744=>1000,27745=>1000,27746=>1000,27747=>1000,27748=>1000,
+ 27749=>1000,27750=>1000,27751=>1000,27752=>1000,27753=>1000,27754=>1000,27755=>1000,27756=>1000,27757=>1000,27758=>1000,27759=>1000,27760=>1000,27761=>1000,27762=>1000,27763=>1000,27764=>1000,
+ 27765=>1000,27766=>1000,27767=>1000,27768=>1000,27769=>1000,27770=>1000,27771=>1000,27772=>1000,27773=>1000,27774=>1000,27775=>1000,27776=>1000,27777=>1000,27778=>1000,27779=>1000,27780=>1000,
+ 27781=>1000,27782=>1000,27783=>1000,27784=>1000,27785=>1000,27786=>1000,27787=>1000,27788=>1000,27789=>1000,27790=>1000,27791=>1000,27792=>1000,27793=>1000,27794=>1000,27795=>1000,27796=>1000,
+ 27797=>1000,27798=>1000,27799=>1000,27800=>1000,27801=>1000,27802=>1000,27803=>1000,27804=>1000,27805=>1000,27806=>1000,27807=>1000,27808=>1000,27809=>1000,27810=>1000,27811=>1000,27812=>1000,
+ 27813=>1000,27814=>1000,27815=>1000,27816=>1000,27817=>1000,27818=>1000,27819=>1000,27820=>1000,27821=>1000,27822=>1000,27823=>1000,27824=>1000,27825=>1000,27826=>1000,27827=>1000,27828=>1000,
+ 27829=>1000,27830=>1000,27831=>1000,27832=>1000,27833=>1000,27834=>1000,27835=>1000,27836=>1000,27837=>1000,27838=>1000,27839=>1000,27840=>1000,27841=>1000,27842=>1000,27843=>1000,27844=>1000,
+ 27845=>1000,27846=>1000,27847=>1000,27848=>1000,27849=>1000,27850=>1000,27851=>1000,27852=>1000,27853=>1000,27854=>1000,27855=>1000,27856=>1000,27857=>1000,27858=>1000,27859=>1000,27860=>1000,
+ 27861=>1000,27862=>1000,27863=>1000,27864=>1000,27865=>1000,27866=>1000,27867=>1000,27868=>1000,27869=>1000,27870=>1000,27871=>1000,27872=>1000,27873=>1000,27874=>1000,27875=>1000,27876=>1000,
+ 27877=>1000,27878=>1000,27879=>1000,27880=>1000,27881=>1000,27882=>1000,27883=>1000,27884=>1000,27885=>1000,27886=>1000,27887=>1000,27888=>1000,27889=>1000,27890=>1000,27891=>1000,27892=>1000,
+ 27893=>1000,27894=>1000,27895=>1000,27896=>1000,27897=>1000,27898=>1000,27899=>1000,27900=>1000,27901=>1000,27902=>1000,27903=>1000,27904=>1000,27905=>1000,27906=>1000,27907=>1000,27908=>1000,
+ 27909=>1000,27910=>1000,27911=>1000,27912=>1000,27913=>1000,27914=>1000,27915=>1000,27916=>1000,27917=>1000,27918=>1000,27919=>1000,27920=>1000,27921=>1000,27922=>1000,27923=>1000,27924=>1000,
+ 27925=>1000,27926=>1000,27927=>1000,27928=>1000,27929=>1000,27930=>1000,27931=>1000,27932=>1000,27933=>1000,27934=>1000,27935=>1000,27936=>1000,27937=>1000,27938=>1000,27939=>1000,27940=>1000,
+ 27941=>1000,27942=>1000,27943=>1000,27944=>1000,27945=>1000,27946=>1000,27947=>1000,27948=>1000,27949=>1000,27950=>1000,27951=>1000,27952=>1000,27953=>1000,27954=>1000,27955=>1000,27956=>1000,
+ 27957=>1000,27958=>1000,27959=>1000,27960=>1000,27961=>1000,27962=>1000,27963=>1000,27964=>1000,27965=>1000,27966=>1000,27967=>1000,27968=>1000,27969=>1000,27970=>1000,27971=>1000,27972=>1000,
+ 27973=>1000,27974=>1000,27975=>1000,27976=>1000,27977=>1000,27978=>1000,27979=>1000,27980=>1000,27981=>1000,27982=>1000,27983=>1000,27984=>1000,27985=>1000,27986=>1000,27987=>1000,27988=>1000,
+ 27989=>1000,27990=>1000,27991=>1000,27992=>1000,27993=>1000,27994=>1000,27995=>1000,27996=>1000,27997=>1000,27998=>1000,27999=>1000,28000=>1000,28001=>1000,28002=>1000,28003=>1000,28004=>1000,
+ 28005=>1000,28006=>1000,28007=>1000,28008=>1000,28009=>1000,28010=>1000,28011=>1000,28012=>1000,28013=>1000,28014=>1000,28015=>1000,28016=>1000,28017=>1000,28018=>1000,28019=>1000,28020=>1000,
+ 28021=>1000,28022=>1000,28023=>1000,28024=>1000,28025=>1000,28026=>1000,28027=>1000,28028=>1000,28029=>1000,28030=>1000,28031=>1000,28032=>1000,28033=>1000,28034=>1000,28035=>1000,28036=>1000,
+ 28037=>1000,28038=>1000,28039=>1000,28040=>1000,28041=>1000,28042=>1000,28043=>1000,28044=>1000,28045=>1000,28046=>1000,28047=>1000,28048=>1000,28049=>1000,28050=>1000,28051=>1000,28052=>1000,
+ 28053=>1000,28054=>1000,28055=>1000,28056=>1000,28057=>1000,28058=>1000,28059=>1000,28060=>1000,28061=>1000,28062=>1000,28063=>1000,28064=>1000,28065=>1000,28066=>1000,28067=>1000,28068=>1000,
+ 28069=>1000,28070=>1000,28071=>1000,28072=>1000,28073=>1000,28074=>1000,28075=>1000,28076=>1000,28077=>1000,28078=>1000,28079=>1000,28080=>1000,28081=>1000,28082=>1000,28083=>1000,28084=>1000,
+ 28085=>1000,28086=>1000,28087=>1000,28088=>1000,28089=>1000,28090=>1000,28091=>1000,28092=>1000,28093=>1000,28094=>1000,28095=>1000,28096=>1000,28097=>1000,28098=>1000,28099=>1000,28100=>1000,
+ 28101=>1000,28102=>1000,28103=>1000,28104=>1000,28105=>1000,28106=>1000,28107=>1000,28108=>1000,28109=>1000,28110=>1000,28111=>1000,28112=>1000,28113=>1000,28114=>1000,28115=>1000,28116=>1000,
+ 28117=>1000,28118=>1000,28119=>1000,28120=>1000,28121=>1000,28122=>1000,28123=>1000,28124=>1000,28125=>1000,28126=>1000,28127=>1000,28128=>1000,28129=>1000,28130=>1000,28131=>1000,28132=>1000,
+ 28133=>1000,28134=>1000,28135=>1000,28136=>1000,28137=>1000,28138=>1000,28139=>1000,28140=>1000,28141=>1000,28142=>1000,28143=>1000,28144=>1000,28145=>1000,28146=>1000,28147=>1000,28148=>1000,
+ 28149=>1000,28150=>1000,28151=>1000,28152=>1000,28153=>1000,28154=>1000,28155=>1000,28156=>1000,28157=>1000,28158=>1000,28159=>1000,28160=>1000,28161=>1000,28162=>1000,28163=>1000,28164=>1000,
+ 28165=>1000,28166=>1000,28167=>1000,28168=>1000,28169=>1000,28170=>1000,28171=>1000,28172=>1000,28173=>1000,28174=>1000,28175=>1000,28176=>1000,28177=>1000,28178=>1000,28179=>1000,28180=>1000,
+ 28181=>1000,28182=>1000,28183=>1000,28184=>1000,28185=>1000,28186=>1000,28187=>1000,28188=>1000,28189=>1000,28190=>1000,28191=>1000,28192=>1000,28193=>1000,28194=>1000,28195=>1000,28196=>1000,
+ 28197=>1000,28198=>1000,28199=>1000,28200=>1000,28201=>1000,28202=>1000,28203=>1000,28204=>1000,28205=>1000,28206=>1000,28207=>1000,28208=>1000,28209=>1000,28210=>1000,28211=>1000,28212=>1000,
+ 28213=>1000,28214=>1000,28215=>1000,28216=>1000,28217=>1000,28218=>1000,28219=>1000,28220=>1000,28221=>1000,28222=>1000,28223=>1000,28224=>1000,28225=>1000,28226=>1000,28227=>1000,28228=>1000,
+ 28229=>1000,28230=>1000,28231=>1000,28232=>1000,28233=>1000,28234=>1000,28235=>1000,28236=>1000,28237=>1000,28238=>1000,28239=>1000,28240=>1000,28241=>1000,28242=>1000,28243=>1000,28244=>1000,
+ 28245=>1000,28246=>1000,28247=>1000,28248=>1000,28249=>1000,28250=>1000,28251=>1000,28252=>1000,28253=>1000,28254=>1000,28255=>1000,28256=>1000,28257=>1000,28258=>1000,28259=>1000,28260=>1000,
+ 28261=>1000,28262=>1000,28263=>1000,28264=>1000,28265=>1000,28266=>1000,28267=>1000,28268=>1000,28269=>1000,28270=>1000,28271=>1000,28272=>1000,28273=>1000,28274=>1000,28275=>1000,28276=>1000,
+ 28277=>1000,28278=>1000,28279=>1000,28280=>1000,28281=>1000,28282=>1000,28283=>1000,28284=>1000,28285=>1000,28286=>1000,28287=>1000,28288=>1000,28289=>1000,28290=>1000,28291=>1000,28292=>1000,
+ 28293=>1000,28294=>1000,28295=>1000,28296=>1000,28297=>1000,28298=>1000,28299=>1000,28300=>1000,28301=>1000,28302=>1000,28303=>1000,28304=>1000,28305=>1000,28306=>1000,28307=>1000,28308=>1000,
+ 28309=>1000,28310=>1000,28311=>1000,28312=>1000,28313=>1000,28314=>1000,28315=>1000,28316=>1000,28317=>1000,28318=>1000,28319=>1000,28320=>1000,28321=>1000,28322=>1000,28323=>1000,28324=>1000,
+ 28325=>1000,28326=>1000,28327=>1000,28328=>1000,28329=>1000,28330=>1000,28331=>1000,28332=>1000,28333=>1000,28334=>1000,28335=>1000,28336=>1000,28337=>1000,28338=>1000,28339=>1000,28340=>1000,
+ 28341=>1000,28342=>1000,28343=>1000,28344=>1000,28345=>1000,28346=>1000,28347=>1000,28348=>1000,28349=>1000,28350=>1000,28351=>1000,28352=>1000,28353=>1000,28354=>1000,28355=>1000,28356=>1000,
+ 28357=>1000,28358=>1000,28359=>1000,28360=>1000,28361=>1000,28362=>1000,28363=>1000,28364=>1000,28365=>1000,28366=>1000,28367=>1000,28368=>1000,28369=>1000,28370=>1000,28371=>1000,28372=>1000,
+ 28373=>1000,28374=>1000,28375=>1000,28376=>1000,28377=>1000,28378=>1000,28379=>1000,28380=>1000,28381=>1000,28382=>1000,28383=>1000,28384=>1000,28385=>1000,28386=>1000,28387=>1000,28388=>1000,
+ 28389=>1000,28390=>1000,28391=>1000,28392=>1000,28393=>1000,28394=>1000,28395=>1000,28396=>1000,28397=>1000,28398=>1000,28399=>1000,28400=>1000,28401=>1000,28402=>1000,28403=>1000,28404=>1000,
+ 28405=>1000,28406=>1000,28407=>1000,28408=>1000,28409=>1000,28410=>1000,28411=>1000,28412=>1000,28413=>1000,28414=>1000,28415=>1000,28416=>1000,28417=>1000,28418=>1000,28419=>1000,28420=>1000,
+ 28421=>1000,28422=>1000,28423=>1000,28424=>1000,28425=>1000,28426=>1000,28427=>1000,28428=>1000,28429=>1000,28430=>1000,28431=>1000,28432=>1000,28433=>1000,28434=>1000,28435=>1000,28436=>1000,
+ 28437=>1000,28438=>1000,28439=>1000,28440=>1000,28441=>1000,28442=>1000,28443=>1000,28444=>1000,28445=>1000,28446=>1000,28447=>1000,28448=>1000,28449=>1000,28450=>1000,28451=>1000,28452=>1000,
+ 28453=>1000,28454=>1000,28455=>1000,28456=>1000,28457=>1000,28458=>1000,28459=>1000,28460=>1000,28461=>1000,28462=>1000,28463=>1000,28464=>1000,28465=>1000,28466=>1000,28467=>1000,28468=>1000,
+ 28469=>1000,28470=>1000,28471=>1000,28472=>1000,28473=>1000,28474=>1000,28475=>1000,28476=>1000,28477=>1000,28478=>1000,28479=>1000,28480=>1000,28481=>1000,28482=>1000,28483=>1000,28484=>1000,
+ 28485=>1000,28486=>1000,28487=>1000,28488=>1000,28489=>1000,28490=>1000,28491=>1000,28492=>1000,28493=>1000,28494=>1000,28495=>1000,28496=>1000,28497=>1000,28498=>1000,28499=>1000,28500=>1000,
+ 28501=>1000,28502=>1000,28503=>1000,28504=>1000,28505=>1000,28506=>1000,28507=>1000,28508=>1000,28509=>1000,28510=>1000,28511=>1000,28512=>1000,28513=>1000,28514=>1000,28515=>1000,28516=>1000,
+ 28517=>1000,28518=>1000,28519=>1000,28520=>1000,28521=>1000,28522=>1000,28523=>1000,28524=>1000,28525=>1000,28526=>1000,28527=>1000,28528=>1000,28529=>1000,28530=>1000,28531=>1000,28532=>1000,
+ 28533=>1000,28534=>1000,28535=>1000,28536=>1000,28537=>1000,28538=>1000,28539=>1000,28540=>1000,28541=>1000,28542=>1000,28543=>1000,28544=>1000,28545=>1000,28546=>1000,28547=>1000,28548=>1000,
+ 28549=>1000,28550=>1000,28551=>1000,28552=>1000,28553=>1000,28554=>1000,28555=>1000,28556=>1000,28557=>1000,28558=>1000,28559=>1000,28560=>1000,28561=>1000,28562=>1000,28563=>1000,28564=>1000,
+ 28565=>1000,28566=>1000,28567=>1000,28568=>1000,28569=>1000,28570=>1000,28571=>1000,28572=>1000,28573=>1000,28574=>1000,28575=>1000,28576=>1000,28577=>1000,28578=>1000,28579=>1000,28580=>1000,
+ 28581=>1000,28582=>1000,28583=>1000,28584=>1000,28585=>1000,28586=>1000,28587=>1000,28588=>1000,28589=>1000,28590=>1000,28591=>1000,28592=>1000,28593=>1000,28594=>1000,28595=>1000,28596=>1000,
+ 28597=>1000,28598=>1000,28599=>1000,28600=>1000,28601=>1000,28602=>1000,28603=>1000,28604=>1000,28605=>1000,28606=>1000,28607=>1000,28608=>1000,28609=>1000,28610=>1000,28611=>1000,28612=>1000,
+ 28613=>1000,28614=>1000,28615=>1000,28616=>1000,28617=>1000,28618=>1000,28619=>1000,28620=>1000,28621=>1000,28622=>1000,28623=>1000,28624=>1000,28625=>1000,28626=>1000,28627=>1000,28628=>1000,
+ 28629=>1000,28630=>1000,28631=>1000,28632=>1000,28633=>1000,28634=>1000,28635=>1000,28636=>1000,28637=>1000,28638=>1000,28639=>1000,28640=>1000,28641=>1000,28642=>1000,28643=>1000,28644=>1000,
+ 28645=>1000,28646=>1000,28647=>1000,28648=>1000,28649=>1000,28650=>1000,28651=>1000,28652=>1000,28653=>1000,28654=>1000,28655=>1000,28656=>1000,28657=>1000,28658=>1000,28659=>1000,28660=>1000,
+ 28661=>1000,28662=>1000,28663=>1000,28664=>1000,28665=>1000,28666=>1000,28667=>1000,28668=>1000,28669=>1000,28670=>1000,28671=>1000,28672=>1000,28673=>1000,28674=>1000,28675=>1000,28676=>1000,
+ 28677=>1000,28678=>1000,28679=>1000,28680=>1000,28681=>1000,28682=>1000,28683=>1000,28684=>1000,28685=>1000,28686=>1000,28687=>1000,28688=>1000,28689=>1000,28690=>1000,28691=>1000,28692=>1000,
+ 28693=>1000,28694=>1000,28695=>1000,28696=>1000,28697=>1000,28698=>1000,28699=>1000,28700=>1000,28701=>1000,28702=>1000,28703=>1000,28704=>1000,28705=>1000,28706=>1000,28707=>1000,28708=>1000,
+ 28709=>1000,28710=>1000,28711=>1000,28712=>1000,28713=>1000,28714=>1000,28715=>1000,28716=>1000,28717=>1000,28718=>1000,28719=>1000,28720=>1000,28721=>1000,28722=>1000,28723=>1000,28724=>1000,
+ 28725=>1000,28726=>1000,28727=>1000,28728=>1000,28729=>1000,28730=>1000,28731=>1000,28732=>1000,28733=>1000,28734=>1000,28735=>1000,28736=>1000,28737=>1000,28738=>1000,28739=>1000,28740=>1000,
+ 28741=>1000,28742=>1000,28743=>1000,28744=>1000,28745=>1000,28746=>1000,28747=>1000,28748=>1000,28749=>1000,28750=>1000,28751=>1000,28752=>1000,28753=>1000,28754=>1000,28755=>1000,28756=>1000,
+ 28757=>1000,28758=>1000,28759=>1000,28760=>1000,28761=>1000,28762=>1000,28763=>1000,28764=>1000,28765=>1000,28766=>1000,28767=>1000,28768=>1000,28769=>1000,28770=>1000,28771=>1000,28772=>1000,
+ 28773=>1000,28774=>1000,28775=>1000,28776=>1000,28777=>1000,28778=>1000,28779=>1000,28780=>1000,28781=>1000,28782=>1000,28783=>1000,28784=>1000,28785=>1000,28786=>1000,28787=>1000,28788=>1000,
+ 28789=>1000,28790=>1000,28791=>1000,28792=>1000,28793=>1000,28794=>1000,28795=>1000,28796=>1000,28797=>1000,28798=>1000,28799=>1000,28800=>1000,28801=>1000,28802=>1000,28803=>1000,28804=>1000,
+ 28805=>1000,28806=>1000,28807=>1000,28808=>1000,28809=>1000,28810=>1000,28811=>1000,28812=>1000,28813=>1000,28814=>1000,28815=>1000,28816=>1000,28817=>1000,28818=>1000,28819=>1000,28820=>1000,
+ 28821=>1000,28822=>1000,28823=>1000,28824=>1000,28825=>1000,28826=>1000,28827=>1000,28828=>1000,28829=>1000,28830=>1000,28831=>1000,28832=>1000,28833=>1000,28834=>1000,28835=>1000,28836=>1000,
+ 28837=>1000,28838=>1000,28839=>1000,28840=>1000,28841=>1000,28842=>1000,28843=>1000,28844=>1000,28845=>1000,28846=>1000,28847=>1000,28848=>1000,28849=>1000,28850=>1000,28851=>1000,28852=>1000,
+ 28853=>1000,28854=>1000,28855=>1000,28856=>1000,28857=>1000,28858=>1000,28859=>1000,28860=>1000,28861=>1000,28862=>1000,28863=>1000,28864=>1000,28865=>1000,28866=>1000,28867=>1000,28868=>1000,
+ 28869=>1000,28870=>1000,28871=>1000,28872=>1000,28873=>1000,28874=>1000,28875=>1000,28876=>1000,28877=>1000,28878=>1000,28879=>1000,28880=>1000,28881=>1000,28882=>1000,28883=>1000,28884=>1000,
+ 28885=>1000,28886=>1000,28887=>1000,28888=>1000,28889=>1000,28890=>1000,28891=>1000,28892=>1000,28893=>1000,28894=>1000,28895=>1000,28896=>1000,28897=>1000,28898=>1000,28899=>1000,28900=>1000,
+ 28901=>1000,28902=>1000,28903=>1000,28904=>1000,28905=>1000,28906=>1000,28907=>1000,28908=>1000,28909=>1000,28910=>1000,28911=>1000,28912=>1000,28913=>1000,28914=>1000,28915=>1000,28916=>1000,
+ 28917=>1000,28918=>1000,28919=>1000,28920=>1000,28921=>1000,28922=>1000,28923=>1000,28924=>1000,28925=>1000,28926=>1000,28927=>1000,28928=>1000,28929=>1000,28930=>1000,28931=>1000,28932=>1000,
+ 28933=>1000,28934=>1000,28935=>1000,28936=>1000,28937=>1000,28938=>1000,28939=>1000,28940=>1000,28941=>1000,28942=>1000,28943=>1000,28944=>1000,28945=>1000,28946=>1000,28947=>1000,28948=>1000,
+ 28949=>1000,28950=>1000,28951=>1000,28952=>1000,28953=>1000,28954=>1000,28955=>1000,28956=>1000,28957=>1000,28958=>1000,28959=>1000,28960=>1000,28961=>1000,28962=>1000,28963=>1000,28964=>1000,
+ 28965=>1000,28966=>1000,28967=>1000,28968=>1000,28969=>1000,28970=>1000,28971=>1000,28972=>1000,28973=>1000,28974=>1000,28975=>1000,28976=>1000,28977=>1000,28978=>1000,28979=>1000,28980=>1000,
+ 28981=>1000,28982=>1000,28983=>1000,28984=>1000,28985=>1000,28986=>1000,28987=>1000,28988=>1000,28989=>1000,28990=>1000,28991=>1000,28992=>1000,28993=>1000,28994=>1000,28995=>1000,28996=>1000,
+ 28997=>1000,28998=>1000,28999=>1000,29000=>1000,29001=>1000,29002=>1000,29003=>1000,29004=>1000,29005=>1000,29006=>1000,29007=>1000,29008=>1000,29009=>1000,29010=>1000,29011=>1000,29012=>1000,
+ 29013=>1000,29014=>1000,29015=>1000,29016=>1000,29017=>1000,29018=>1000,29019=>1000,29020=>1000,29021=>1000,29022=>1000,29023=>1000,29024=>1000,29025=>1000,29026=>1000,29027=>1000,29028=>1000,
+ 29029=>1000,29030=>1000,29031=>1000,29032=>1000,29033=>1000,29034=>1000,29035=>1000,29036=>1000,29037=>1000,29038=>1000,29039=>1000,29040=>1000,29041=>1000,29042=>1000,29043=>1000,29044=>1000,
+ 29045=>1000,29046=>1000,29047=>1000,29048=>1000,29049=>1000,29050=>1000,29051=>1000,29052=>1000,29053=>1000,29054=>1000,29055=>1000,29056=>1000,29057=>1000,29058=>1000,29059=>1000,29060=>1000,
+ 29061=>1000,29062=>1000,29063=>1000,29064=>1000,29065=>1000,29066=>1000,29067=>1000,29068=>1000,29069=>1000,29070=>1000,29071=>1000,29072=>1000,29073=>1000,29074=>1000,29075=>1000,29076=>1000,
+ 29077=>1000,29078=>1000,29079=>1000,29080=>1000,29081=>1000,29082=>1000,29083=>1000,29084=>1000,29085=>1000,29086=>1000,29087=>1000,29088=>1000,29089=>1000,29090=>1000,29091=>1000,29092=>1000,
+ 29093=>1000,29094=>1000,29095=>1000,29096=>1000,29097=>1000,29098=>1000,29099=>1000,29100=>1000,29101=>1000,29102=>1000,29103=>1000,29104=>1000,29105=>1000,29106=>1000,29107=>1000,29108=>1000,
+ 29109=>1000,29110=>1000,29111=>1000,29112=>1000,29113=>1000,29114=>1000,29115=>1000,29116=>1000,29117=>1000,29118=>1000,29119=>1000,29120=>1000,29121=>1000,29122=>1000,29123=>1000,29124=>1000,
+ 29125=>1000,29126=>1000,29127=>1000,29128=>1000,29129=>1000,29130=>1000,29131=>1000,29132=>1000,29133=>1000,29134=>1000,29135=>1000,29136=>1000,29137=>1000,29138=>1000,29139=>1000,29140=>1000,
+ 29141=>1000,29142=>1000,29143=>1000,29144=>1000,29145=>1000,29146=>1000,29147=>1000,29148=>1000,29149=>1000,29150=>1000,29151=>1000,29152=>1000,29153=>1000,29154=>1000,29155=>1000,29156=>1000,
+ 29157=>1000,29158=>1000,29159=>1000,29160=>1000,29161=>1000,29162=>1000,29163=>1000,29164=>1000,29165=>1000,29166=>1000,29167=>1000,29168=>1000,29169=>1000,29170=>1000,29171=>1000,29172=>1000,
+ 29173=>1000,29174=>1000,29175=>1000,29176=>1000,29177=>1000,29178=>1000,29179=>1000,29180=>1000,29181=>1000,29182=>1000,29183=>1000,29184=>1000,29185=>1000,29186=>1000,29187=>1000,29188=>1000,
+ 29189=>1000,29190=>1000,29191=>1000,29192=>1000,29193=>1000,29194=>1000,29195=>1000,29196=>1000,29197=>1000,29198=>1000,29199=>1000,29200=>1000,29201=>1000,29202=>1000,29203=>1000,29204=>1000,
+ 29205=>1000,29206=>1000,29207=>1000,29208=>1000,29209=>1000,29210=>1000,29211=>1000,29212=>1000,29213=>1000,29214=>1000,29215=>1000,29216=>1000,29217=>1000,29218=>1000,29219=>1000,29220=>1000,
+ 29221=>1000,29222=>1000,29223=>1000,29224=>1000,29225=>1000,29226=>1000,29227=>1000,29228=>1000,29229=>1000,29230=>1000,29231=>1000,29232=>1000,29233=>1000,29234=>1000,29235=>1000,29236=>1000,
+ 29237=>1000,29238=>1000,29239=>1000,29240=>1000,29241=>1000,29242=>1000,29243=>1000,29244=>1000,29245=>1000,29246=>1000,29247=>1000,29248=>1000,29249=>1000,29250=>1000,29251=>1000,29252=>1000,
+ 29253=>1000,29254=>1000,29255=>1000,29256=>1000,29257=>1000,29258=>1000,29259=>1000,29260=>1000,29261=>1000,29262=>1000,29263=>1000,29264=>1000,29265=>1000,29266=>1000,29267=>1000,29268=>1000,
+ 29269=>1000,29270=>1000,29271=>1000,29272=>1000,29273=>1000,29274=>1000,29275=>1000,29276=>1000,29277=>1000,29278=>1000,29279=>1000,29280=>1000,29281=>1000,29282=>1000,29283=>1000,29284=>1000,
+ 29285=>1000,29286=>1000,29287=>1000,29288=>1000,29289=>1000,29290=>1000,29291=>1000,29292=>1000,29293=>1000,29294=>1000,29295=>1000,29296=>1000,29297=>1000,29298=>1000,29299=>1000,29300=>1000,
+ 29301=>1000,29302=>1000,29303=>1000,29304=>1000,29305=>1000,29306=>1000,29307=>1000,29308=>1000,29309=>1000,29310=>1000,29311=>1000,29312=>1000,29313=>1000,29314=>1000,29315=>1000,29316=>1000,
+ 29317=>1000,29318=>1000,29319=>1000,29320=>1000,29321=>1000,29322=>1000,29323=>1000,29324=>1000,29325=>1000,29326=>1000,29327=>1000,29328=>1000,29329=>1000,29330=>1000,29331=>1000,29332=>1000,
+ 29333=>1000,29334=>1000,29335=>1000,29336=>1000,29337=>1000,29338=>1000,29339=>1000,29340=>1000,29341=>1000,29342=>1000,29343=>1000,29344=>1000,29345=>1000,29346=>1000,29347=>1000,29348=>1000,
+ 29349=>1000,29350=>1000,29351=>1000,29352=>1000,29353=>1000,29354=>1000,29355=>1000,29356=>1000,29357=>1000,29358=>1000,29359=>1000,29360=>1000,29361=>1000,29362=>1000,29363=>1000,29364=>1000,
+ 29365=>1000,29366=>1000,29367=>1000,29368=>1000,29369=>1000,29370=>1000,29371=>1000,29372=>1000,29373=>1000,29374=>1000,29375=>1000,29376=>1000,29377=>1000,29378=>1000,29379=>1000,29380=>1000,
+ 29381=>1000,29382=>1000,29383=>1000,29384=>1000,29385=>1000,29386=>1000,29387=>1000,29388=>1000,29389=>1000,29390=>1000,29391=>1000,29392=>1000,29393=>1000,29394=>1000,29395=>1000,29396=>1000,
+ 29397=>1000,29398=>1000,29399=>1000,29400=>1000,29401=>1000,29402=>1000,29403=>1000,29404=>1000,29405=>1000,29406=>1000,29407=>1000,29408=>1000,29409=>1000,29410=>1000,29411=>1000,29412=>1000,
+ 29413=>1000,29414=>1000,29415=>1000,29416=>1000,29417=>1000,29418=>1000,29419=>1000,29420=>1000,29421=>1000,29422=>1000,29423=>1000,29424=>1000,29425=>1000,29426=>1000,29427=>1000,29428=>1000,
+ 29429=>1000,29430=>1000,29431=>1000,29432=>1000,29433=>1000,29434=>1000,29435=>1000,29436=>1000,29437=>1000,29438=>1000,29439=>1000,29440=>1000,29441=>1000,29442=>1000,29443=>1000,29444=>1000,
+ 29445=>1000,29446=>1000,29447=>1000,29448=>1000,29449=>1000,29450=>1000,29451=>1000,29452=>1000,29453=>1000,29454=>1000,29455=>1000,29456=>1000,29457=>1000,29458=>1000,29459=>1000,29460=>1000,
+ 29461=>1000,29462=>1000,29463=>1000,29464=>1000,29465=>1000,29466=>1000,29467=>1000,29468=>1000,29469=>1000,29470=>1000,29471=>1000,29472=>1000,29473=>1000,29474=>1000,29475=>1000,29476=>1000,
+ 29477=>1000,29478=>1000,29479=>1000,29480=>1000,29481=>1000,29482=>1000,29483=>1000,29484=>1000,29485=>1000,29486=>1000,29487=>1000,29488=>1000,29489=>1000,29490=>1000,29491=>1000,29492=>1000,
+ 29493=>1000,29494=>1000,29495=>1000,29496=>1000,29497=>1000,29498=>1000,29499=>1000,29500=>1000,29501=>1000,29502=>1000,29503=>1000,29504=>1000,29505=>1000,29506=>1000,29507=>1000,29508=>1000,
+ 29509=>1000,29510=>1000,29511=>1000,29512=>1000,29513=>1000,29514=>1000,29515=>1000,29516=>1000,29517=>1000,29518=>1000,29519=>1000,29520=>1000,29521=>1000,29522=>1000,29523=>1000,29524=>1000,
+ 29525=>1000,29526=>1000,29527=>1000,29528=>1000,29529=>1000,29530=>1000,29531=>1000,29532=>1000,29533=>1000,29534=>1000,29535=>1000,29536=>1000,29537=>1000,29538=>1000,29539=>1000,29540=>1000,
+ 29541=>1000,29542=>1000,29543=>1000,29544=>1000,29545=>1000,29546=>1000,29547=>1000,29548=>1000,29549=>1000,29550=>1000,29551=>1000,29552=>1000,29553=>1000,29554=>1000,29555=>1000,29556=>1000,
+ 29557=>1000,29558=>1000,29559=>1000,29560=>1000,29561=>1000,29562=>1000,29563=>1000,29564=>1000,29565=>1000,29566=>1000,29567=>1000,29568=>1000,29569=>1000,29570=>1000,29571=>1000,29572=>1000,
+ 29573=>1000,29574=>1000,29575=>1000,29576=>1000,29577=>1000,29578=>1000,29579=>1000,29580=>1000,29581=>1000,29582=>1000,29583=>1000,29584=>1000,29585=>1000,29586=>1000,29587=>1000,29588=>1000,
+ 29589=>1000,29590=>1000,29591=>1000,29592=>1000,29593=>1000,29594=>1000,29595=>1000,29596=>1000,29597=>1000,29598=>1000,29599=>1000,29600=>1000,29601=>1000,29602=>1000,29603=>1000,29604=>1000,
+ 29605=>1000,29606=>1000,29607=>1000,29608=>1000,29609=>1000,29610=>1000,29611=>1000,29612=>1000,29613=>1000,29614=>1000,29615=>1000,29616=>1000,29617=>1000,29618=>1000,29619=>1000,29620=>1000,
+ 29621=>1000,29622=>1000,29623=>1000,29624=>1000,29625=>1000,29626=>1000,29627=>1000,29628=>1000,29629=>1000,29630=>1000,29631=>1000,29632=>1000,29633=>1000,29634=>1000,29635=>1000,29636=>1000,
+ 29637=>1000,29638=>1000,29639=>1000,29640=>1000,29641=>1000,29642=>1000,29643=>1000,29644=>1000,29645=>1000,29646=>1000,29647=>1000,29648=>1000,29649=>1000,29650=>1000,29651=>1000,29652=>1000,
+ 29653=>1000,29654=>1000,29655=>1000,29656=>1000,29657=>1000,29658=>1000,29659=>1000,29660=>1000,29661=>1000,29662=>1000,29663=>1000,29664=>1000,29665=>1000,29666=>1000,29667=>1000,29668=>1000,
+ 29669=>1000,29670=>1000,29671=>1000,29672=>1000,29673=>1000,29674=>1000,29675=>1000,29676=>1000,29677=>1000,29678=>1000,29679=>1000,29680=>1000,29681=>1000,29682=>1000,29683=>1000,29684=>1000,
+ 29685=>1000,29686=>1000,29687=>1000,29688=>1000,29689=>1000,29690=>1000,29691=>1000,29692=>1000,29693=>1000,29694=>1000,29695=>1000,29696=>1000,29697=>1000,29698=>1000,29699=>1000,29700=>1000,
+ 29701=>1000,29702=>1000,29703=>1000,29704=>1000,29705=>1000,29706=>1000,29707=>1000,29708=>1000,29709=>1000,29710=>1000,29711=>1000,29712=>1000,29713=>1000,29714=>1000,29715=>1000,29716=>1000,
+ 29717=>1000,29718=>1000,29719=>1000,29720=>1000,29721=>1000,29722=>1000,29723=>1000,29724=>1000,29725=>1000,29726=>1000,29727=>1000,29728=>1000,29729=>1000,29730=>1000,29731=>1000,29732=>1000,
+ 29733=>1000,29734=>1000,29735=>1000,29736=>1000,29737=>1000,29738=>1000,29739=>1000,29740=>1000,29741=>1000,29742=>1000,29743=>1000,29744=>1000,29745=>1000,29746=>1000,29747=>1000,29748=>1000,
+ 29749=>1000,29750=>1000,29751=>1000,29752=>1000,29753=>1000,29754=>1000,29755=>1000,29756=>1000,29757=>1000,29758=>1000,29759=>1000,29760=>1000,29761=>1000,29762=>1000,29763=>1000,29764=>1000,
+ 29765=>1000,29766=>1000,29767=>1000,29768=>1000,29769=>1000,29770=>1000,29771=>1000,29772=>1000,29773=>1000,29774=>1000,29775=>1000,29776=>1000,29777=>1000,29778=>1000,29779=>1000,29780=>1000,
+ 29781=>1000,29782=>1000,29783=>1000,29784=>1000,29785=>1000,29786=>1000,29787=>1000,29788=>1000,29789=>1000,29790=>1000,29791=>1000,29792=>1000,29793=>1000,29794=>1000,29795=>1000,29796=>1000,
+ 29797=>1000,29798=>1000,29799=>1000,29800=>1000,29801=>1000,29802=>1000,29803=>1000,29804=>1000,29805=>1000,29806=>1000,29807=>1000,29808=>1000,29809=>1000,29810=>1000,29811=>1000,29812=>1000,
+ 29813=>1000,29814=>1000,29815=>1000,29816=>1000,29817=>1000,29818=>1000,29819=>1000,29820=>1000,29821=>1000,29822=>1000,29823=>1000,29824=>1000,29825=>1000,29826=>1000,29827=>1000,29828=>1000,
+ 29829=>1000,29830=>1000,29831=>1000,29832=>1000,29833=>1000,29834=>1000,29835=>1000,29836=>1000,29837=>1000,29838=>1000,29839=>1000,29840=>1000,29841=>1000,29842=>1000,29843=>1000,29844=>1000,
+ 29845=>1000,29846=>1000,29847=>1000,29848=>1000,29849=>1000,29850=>1000,29851=>1000,29852=>1000,29853=>1000,29854=>1000,29855=>1000,29856=>1000,29857=>1000,29858=>1000,29859=>1000,29860=>1000,
+ 29861=>1000,29862=>1000,29863=>1000,29864=>1000,29865=>1000,29866=>1000,29867=>1000,29868=>1000,29869=>1000,29870=>1000,29871=>1000,29872=>1000,29873=>1000,29874=>1000,29875=>1000,29876=>1000,
+ 29877=>1000,29878=>1000,29879=>1000,29880=>1000,29881=>1000,29882=>1000,29883=>1000,29884=>1000,29885=>1000,29886=>1000,29887=>1000,29888=>1000,29889=>1000,29890=>1000,29891=>1000,29892=>1000,
+ 29893=>1000,29894=>1000,29895=>1000,29896=>1000,29897=>1000,29898=>1000,29899=>1000,29900=>1000,29901=>1000,29902=>1000,29903=>1000,29904=>1000,29905=>1000,29906=>1000,29907=>1000,29908=>1000,
+ 29909=>1000,29910=>1000,29911=>1000,29912=>1000,29913=>1000,29914=>1000,29915=>1000,29916=>1000,29917=>1000,29918=>1000,29919=>1000,29920=>1000,29921=>1000,29922=>1000,29923=>1000,29924=>1000,
+ 29925=>1000,29926=>1000,29927=>1000,29928=>1000,29929=>1000,29930=>1000,29931=>1000,29932=>1000,29933=>1000,29934=>1000,29935=>1000,29936=>1000,29937=>1000,29938=>1000,29939=>1000,29940=>1000,
+ 29941=>1000,29942=>1000,29943=>1000,29944=>1000,29945=>1000,29946=>1000,29947=>1000,29948=>1000,29949=>1000,29950=>1000,29951=>1000,29952=>1000,29953=>1000,29954=>1000,29955=>1000,29956=>1000,
+ 29957=>1000,29958=>1000,29959=>1000,29960=>1000,29961=>1000,29962=>1000,29963=>1000,29964=>1000,29965=>1000,29966=>1000,29967=>1000,29968=>1000,29969=>1000,29970=>1000,29971=>1000,29972=>1000,
+ 29973=>1000,29974=>1000,29975=>1000,29976=>1000,29977=>1000,29978=>1000,29979=>1000,29980=>1000,29981=>1000,29982=>1000,29983=>1000,29984=>1000,29985=>1000,29986=>1000,29987=>1000,29988=>1000,
+ 29989=>1000,29990=>1000,29991=>1000,29992=>1000,29993=>1000,29994=>1000,29995=>1000,29996=>1000,29997=>1000,29998=>1000,29999=>1000,30000=>1000,30001=>1000,30002=>1000,30003=>1000,30004=>1000,
+ 30005=>1000,30006=>1000,30007=>1000,30008=>1000,30009=>1000,30010=>1000,30011=>1000,30012=>1000,30013=>1000,30014=>1000,30015=>1000,30016=>1000,30017=>1000,30018=>1000,30019=>1000,30020=>1000,
+ 30021=>1000,30022=>1000,30023=>1000,30024=>1000,30025=>1000,30026=>1000,30027=>1000,30028=>1000,30029=>1000,30030=>1000,30031=>1000,30032=>1000,30033=>1000,30034=>1000,30035=>1000,30036=>1000,
+ 30037=>1000,30038=>1000,30039=>1000,30040=>1000,30041=>1000,30042=>1000,30043=>1000,30044=>1000,30045=>1000,30046=>1000,30047=>1000,30048=>1000,30049=>1000,30050=>1000,30051=>1000,30052=>1000,
+ 30053=>1000,30054=>1000,30055=>1000,30056=>1000,30057=>1000,30058=>1000,30059=>1000,30060=>1000,30061=>1000,30062=>1000,30063=>1000,30064=>1000,30065=>1000,30066=>1000,30067=>1000,30068=>1000,
+ 30069=>1000,30070=>1000,30071=>1000,30072=>1000,30073=>1000,30074=>1000,30075=>1000,30076=>1000,30077=>1000,30078=>1000,30079=>1000,30080=>1000,30081=>1000,30082=>1000,30083=>1000,30084=>1000,
+ 30085=>1000,30086=>1000,30087=>1000,30088=>1000,30089=>1000,30090=>1000,30091=>1000,30092=>1000,30093=>1000,30094=>1000,30095=>1000,30096=>1000,30097=>1000,30098=>1000,30099=>1000,30100=>1000,
+ 30101=>1000,30102=>1000,30103=>1000,30104=>1000,30105=>1000,30106=>1000,30107=>1000,30108=>1000,30109=>1000,30110=>1000,30111=>1000,30112=>1000,30113=>1000,30114=>1000,30115=>1000,30116=>1000,
+ 30117=>1000,30118=>1000,30119=>1000,30120=>1000,30121=>1000,30122=>1000,30123=>1000,30124=>1000,30125=>1000,30126=>1000,30127=>1000,30128=>1000,30129=>1000,30130=>1000,30131=>1000,30132=>1000,
+ 30133=>1000,30134=>1000,30135=>1000,30136=>1000,30137=>1000,30138=>1000,30139=>1000,30140=>1000,30141=>1000,30142=>1000,30143=>1000,30144=>1000,30145=>1000,30146=>1000,30147=>1000,30148=>1000,
+ 30149=>1000,30150=>1000,30151=>1000,30152=>1000,30153=>1000,30154=>1000,30155=>1000,30156=>1000,30157=>1000,30158=>1000,30159=>1000,30160=>1000,30161=>1000,30162=>1000,30163=>1000,30164=>1000,
+ 30165=>1000,30166=>1000,30167=>1000,30168=>1000,30169=>1000,30170=>1000,30171=>1000,30172=>1000,30173=>1000,30174=>1000,30175=>1000,30176=>1000,30177=>1000,30178=>1000,30179=>1000,30180=>1000,
+ 30181=>1000,30182=>1000,30183=>1000,30184=>1000,30185=>1000,30186=>1000,30187=>1000,30188=>1000,30189=>1000,30190=>1000,30191=>1000,30192=>1000,30193=>1000,30194=>1000,30195=>1000,30196=>1000,
+ 30197=>1000,30198=>1000,30199=>1000,30200=>1000,30201=>1000,30202=>1000,30203=>1000,30204=>1000,30205=>1000,30206=>1000,30207=>1000,30208=>1000,30209=>1000,30210=>1000,30211=>1000,30212=>1000,
+ 30213=>1000,30214=>1000,30215=>1000,30216=>1000,30217=>1000,30218=>1000,30219=>1000,30220=>1000,30221=>1000,30222=>1000,30223=>1000,30224=>1000,30225=>1000,30226=>1000,30227=>1000,30228=>1000,
+ 30229=>1000,30230=>1000,30231=>1000,30232=>1000,30233=>1000,30234=>1000,30235=>1000,30236=>1000,30237=>1000,30238=>1000,30239=>1000,30240=>1000,30241=>1000,30242=>1000,30243=>1000,30244=>1000,
+ 30245=>1000,30246=>1000,30247=>1000,30248=>1000,30249=>1000,30250=>1000,30251=>1000,30252=>1000,30253=>1000,30254=>1000,30255=>1000,30256=>1000,30257=>1000,30258=>1000,30259=>1000,30260=>1000,
+ 30261=>1000,30262=>1000,30263=>1000,30264=>1000,30265=>1000,30266=>1000,30267=>1000,30268=>1000,30269=>1000,30270=>1000,30271=>1000,30272=>1000,30273=>1000,30274=>1000,30275=>1000,30276=>1000,
+ 30277=>1000,30278=>1000,30279=>1000,30280=>1000,30281=>1000,30282=>1000,30283=>1000,30284=>1000,30285=>1000,30286=>1000,30287=>1000,30288=>1000,30289=>1000,30290=>1000,30291=>1000,30292=>1000,
+ 30293=>1000,30294=>1000,30295=>1000,30296=>1000,30297=>1000,30298=>1000,30299=>1000,30300=>1000,30301=>1000,30302=>1000,30303=>1000,30304=>1000,30305=>1000,30306=>1000,30307=>1000,30308=>1000,
+ 30309=>1000,30310=>1000,30311=>1000,30312=>1000,30313=>1000,30314=>1000,30315=>1000,30316=>1000,30317=>1000,30318=>1000,30319=>1000,30320=>1000,30321=>1000,30322=>1000,30323=>1000,30324=>1000,
+ 30325=>1000,30326=>1000,30327=>1000,30328=>1000,30329=>1000,30330=>1000,30331=>1000,30332=>1000,30333=>1000,30334=>1000,30335=>1000,30336=>1000,30337=>1000,30338=>1000,30339=>1000,30340=>1000,
+ 30341=>1000,30342=>1000,30343=>1000,30344=>1000,30345=>1000,30346=>1000,30347=>1000,30348=>1000,30349=>1000,30350=>1000,30351=>1000,30352=>1000,30353=>1000,30354=>1000,30355=>1000,30356=>1000,
+ 30357=>1000,30358=>1000,30359=>1000,30360=>1000,30361=>1000,30362=>1000,30363=>1000,30364=>1000,30365=>1000,30366=>1000,30367=>1000,30368=>1000,30369=>1000,30370=>1000,30371=>1000,30372=>1000,
+ 30373=>1000,30374=>1000,30375=>1000,30376=>1000,30377=>1000,30378=>1000,30379=>1000,30380=>1000,30381=>1000,30382=>1000,30383=>1000,30384=>1000,30385=>1000,30386=>1000,30387=>1000,30388=>1000,
+ 30389=>1000,30390=>1000,30391=>1000,30392=>1000,30393=>1000,30394=>1000,30395=>1000,30396=>1000,30397=>1000,30398=>1000,30399=>1000,30400=>1000,30401=>1000,30402=>1000,30403=>1000,30404=>1000,
+ 30405=>1000,30406=>1000,30407=>1000,30408=>1000,30409=>1000,30410=>1000,30411=>1000,30412=>1000,30413=>1000,30414=>1000,30415=>1000,30416=>1000,30417=>1000,30418=>1000,30419=>1000,30420=>1000,
+ 30421=>1000,30422=>1000,30423=>1000,30424=>1000,30425=>1000,30426=>1000,30427=>1000,30428=>1000,30429=>1000,30430=>1000,30431=>1000,30432=>1000,30433=>1000,30434=>1000,30435=>1000,30436=>1000,
+ 30437=>1000,30438=>1000,30439=>1000,30440=>1000,30441=>1000,30442=>1000,30443=>1000,30444=>1000,30445=>1000,30446=>1000,30447=>1000,30448=>1000,30449=>1000,30450=>1000,30451=>1000,30452=>1000,
+ 30453=>1000,30454=>1000,30455=>1000,30456=>1000,30457=>1000,30458=>1000,30459=>1000,30460=>1000,30461=>1000,30462=>1000,30463=>1000,30464=>1000,30465=>1000,30466=>1000,30467=>1000,30468=>1000,
+ 30469=>1000,30470=>1000,30471=>1000,30472=>1000,30473=>1000,30474=>1000,30475=>1000,30476=>1000,30477=>1000,30478=>1000,30479=>1000,30480=>1000,30481=>1000,30482=>1000,30483=>1000,30484=>1000,
+ 30485=>1000,30486=>1000,30487=>1000,30488=>1000,30489=>1000,30490=>1000,30491=>1000,30492=>1000,30493=>1000,30494=>1000,30495=>1000,30496=>1000,30497=>1000,30498=>1000,30499=>1000,30500=>1000,
+ 30501=>1000,30502=>1000,30503=>1000,30504=>1000,30505=>1000,30506=>1000,30507=>1000,30508=>1000,30509=>1000,30510=>1000,30511=>1000,30512=>1000,30513=>1000,30514=>1000,30515=>1000,30516=>1000,
+ 30517=>1000,30518=>1000,30519=>1000,30520=>1000,30521=>1000,30522=>1000,30523=>1000,30524=>1000,30525=>1000,30526=>1000,30527=>1000,30528=>1000,30529=>1000,30530=>1000,30531=>1000,30532=>1000,
+ 30533=>1000,30534=>1000,30535=>1000,30536=>1000,30537=>1000,30538=>1000,30539=>1000,30540=>1000,30541=>1000,30542=>1000,30543=>1000,30544=>1000,30545=>1000,30546=>1000,30547=>1000,30548=>1000,
+ 30549=>1000,30550=>1000,30551=>1000,30552=>1000,30553=>1000,30554=>1000,30555=>1000,30556=>1000,30557=>1000,30558=>1000,30559=>1000,30560=>1000,30561=>1000,30562=>1000,30563=>1000,30564=>1000,
+ 30565=>1000,30566=>1000,30567=>1000,30568=>1000,30569=>1000,30570=>1000,30571=>1000,30572=>1000,30573=>1000,30574=>1000,30575=>1000,30576=>1000,30577=>1000,30578=>1000,30579=>1000,30580=>1000,
+ 30581=>1000,30582=>1000,30583=>1000,30584=>1000,30585=>1000,30586=>1000,30587=>1000,30588=>1000,30589=>1000,30590=>1000,30591=>1000,30592=>1000,30593=>1000,30594=>1000,30595=>1000,30596=>1000,
+ 30597=>1000,30598=>1000,30599=>1000,30600=>1000,30601=>1000,30602=>1000,30603=>1000,30604=>1000,30605=>1000,30606=>1000,30607=>1000,30608=>1000,30609=>1000,30610=>1000,30611=>1000,30612=>1000,
+ 30613=>1000,30614=>1000,30615=>1000,30616=>1000,30617=>1000,30618=>1000,30619=>1000,30620=>1000,30621=>1000,30622=>1000,30623=>1000,30624=>1000,30625=>1000,30626=>1000,30627=>1000,30628=>1000,
+ 30629=>1000,30630=>1000,30631=>1000,30632=>1000,30633=>1000,30634=>1000,30635=>1000,30636=>1000,30637=>1000,30638=>1000,30639=>1000,30640=>1000,30641=>1000,30642=>1000,30643=>1000,30644=>1000,
+ 30645=>1000,30646=>1000,30647=>1000,30648=>1000,30649=>1000,30650=>1000,30651=>1000,30652=>1000,30653=>1000,30654=>1000,30655=>1000,30656=>1000,30657=>1000,30658=>1000,30659=>1000,30660=>1000,
+ 30661=>1000,30662=>1000,30663=>1000,30664=>1000,30665=>1000,30666=>1000,30667=>1000,30668=>1000,30669=>1000,30670=>1000,30671=>1000,30672=>1000,30673=>1000,30674=>1000,30675=>1000,30676=>1000,
+ 30677=>1000,30678=>1000,30679=>1000,30680=>1000,30681=>1000,30682=>1000,30683=>1000,30684=>1000,30685=>1000,30686=>1000,30687=>1000,30688=>1000,30689=>1000,30690=>1000,30691=>1000,30692=>1000,
+ 30693=>1000,30694=>1000,30695=>1000,30696=>1000,30697=>1000,30698=>1000,30699=>1000,30700=>1000,30701=>1000,30702=>1000,30703=>1000,30704=>1000,30705=>1000,30706=>1000,30707=>1000,30708=>1000,
+ 30709=>1000,30710=>1000,30711=>1000,30712=>1000,30713=>1000,30714=>1000,30715=>1000,30716=>1000,30717=>1000,30718=>1000,30719=>1000,30720=>1000,30721=>1000,30722=>1000,30723=>1000,30724=>1000,
+ 30725=>1000,30726=>1000,30727=>1000,30728=>1000,30729=>1000,30730=>1000,30731=>1000,30732=>1000,30733=>1000,30734=>1000,30735=>1000,30736=>1000,30737=>1000,30738=>1000,30739=>1000,30740=>1000,
+ 30741=>1000,30742=>1000,30743=>1000,30744=>1000,30745=>1000,30746=>1000,30747=>1000,30748=>1000,30749=>1000,30750=>1000,30751=>1000,30752=>1000,30753=>1000,30754=>1000,30755=>1000,30756=>1000,
+ 30757=>1000,30758=>1000,30759=>1000,30760=>1000,30761=>1000,30762=>1000,30763=>1000,30764=>1000,30765=>1000,30766=>1000,30767=>1000,30768=>1000,30769=>1000,30770=>1000,30771=>1000,30772=>1000,
+ 30773=>1000,30774=>1000,30775=>1000,30776=>1000,30777=>1000,30778=>1000,30779=>1000,30780=>1000,30781=>1000,30782=>1000,30783=>1000,30784=>1000,30785=>1000,30786=>1000,30787=>1000,30788=>1000,
+ 30789=>1000,30790=>1000,30791=>1000,30792=>1000,30793=>1000,30794=>1000,30795=>1000,30796=>1000,30797=>1000,30798=>1000,30799=>1000,30800=>1000,30801=>1000,30802=>1000,30803=>1000,30804=>1000,
+ 30805=>1000,30806=>1000,30807=>1000,30808=>1000,30809=>1000,30810=>1000,30811=>1000,30812=>1000,30813=>1000,30814=>1000,30815=>1000,30816=>1000,30817=>1000,30818=>1000,30819=>1000,30820=>1000,
+ 30821=>1000,30822=>1000,30823=>1000,30824=>1000,30825=>1000,30826=>1000,30827=>1000,30828=>1000,30829=>1000,30830=>1000,30831=>1000,30832=>1000,30833=>1000,30834=>1000,30835=>1000,30836=>1000,
+ 30837=>1000,30838=>1000,30839=>1000,30840=>1000,30841=>1000,30842=>1000,30843=>1000,30844=>1000,30845=>1000,30846=>1000,30847=>1000,30848=>1000,30849=>1000,30850=>1000,30851=>1000,30852=>1000,
+ 30853=>1000,30854=>1000,30855=>1000,30856=>1000,30857=>1000,30858=>1000,30859=>1000,30860=>1000,30861=>1000,30862=>1000,30863=>1000,30864=>1000,30865=>1000,30866=>1000,30867=>1000,30868=>1000,
+ 30869=>1000,30870=>1000,30871=>1000,30872=>1000,30873=>1000,30874=>1000,30875=>1000,30876=>1000,30877=>1000,30878=>1000,30879=>1000,30880=>1000,30881=>1000,30882=>1000,30883=>1000,30884=>1000,
+ 30885=>1000,30886=>1000,30887=>1000,30888=>1000,30889=>1000,30890=>1000,30891=>1000,30892=>1000,30893=>1000,30894=>1000,30895=>1000,30896=>1000,30897=>1000,30898=>1000,30899=>1000,30900=>1000,
+ 30901=>1000,30902=>1000,30903=>1000,30904=>1000,30905=>1000,30906=>1000,30907=>1000,30908=>1000,30909=>1000,30910=>1000,30911=>1000,30912=>1000,30913=>1000,30914=>1000,30915=>1000,30916=>1000,
+ 30917=>1000,30918=>1000,30919=>1000,30920=>1000,30921=>1000,30922=>1000,30923=>1000,30924=>1000,30925=>1000,30926=>1000,30927=>1000,30928=>1000,30929=>1000,30930=>1000,30931=>1000,30932=>1000,
+ 30933=>1000,30934=>1000,30935=>1000,30936=>1000,30937=>1000,30938=>1000,30939=>1000,30940=>1000,30941=>1000,30942=>1000,30943=>1000,30944=>1000,30945=>1000,30946=>1000,30947=>1000,30948=>1000,
+ 30949=>1000,30950=>1000,30951=>1000,30952=>1000,30953=>1000,30954=>1000,30955=>1000,30956=>1000,30957=>1000,30958=>1000,30959=>1000,30960=>1000,30961=>1000,30962=>1000,30963=>1000,30964=>1000,
+ 30965=>1000,30966=>1000,30967=>1000,30968=>1000,30969=>1000,30970=>1000,30971=>1000,30972=>1000,30973=>1000,30974=>1000,30975=>1000,30976=>1000,30977=>1000,30978=>1000,30979=>1000,30980=>1000,
+ 30981=>1000,30982=>1000,30983=>1000,30984=>1000,30985=>1000,30986=>1000,30987=>1000,30988=>1000,30989=>1000,30990=>1000,30991=>1000,30992=>1000,30993=>1000,30994=>1000,30995=>1000,30996=>1000,
+ 30997=>1000,30998=>1000,30999=>1000,31000=>1000,31001=>1000,31002=>1000,31003=>1000,31004=>1000,31005=>1000,31006=>1000,31007=>1000,31008=>1000,31009=>1000,31010=>1000,31011=>1000,31012=>1000,
+ 31013=>1000,31014=>1000,31015=>1000,31016=>1000,31017=>1000,31018=>1000,31019=>1000,31020=>1000,31021=>1000,31022=>1000,31023=>1000,31024=>1000,31025=>1000,31026=>1000,31027=>1000,31028=>1000,
+ 31029=>1000,31030=>1000,31031=>1000,31032=>1000,31033=>1000,31034=>1000,31035=>1000,31036=>1000,31037=>1000,31038=>1000,31039=>1000,31040=>1000,31041=>1000,31042=>1000,31043=>1000,31044=>1000,
+ 31045=>1000,31046=>1000,31047=>1000,31048=>1000,31049=>1000,31050=>1000,31051=>1000,31052=>1000,31053=>1000,31054=>1000,31055=>1000,31056=>1000,31057=>1000,31058=>1000,31059=>1000,31060=>1000,
+ 31061=>1000,31062=>1000,31063=>1000,31064=>1000,31065=>1000,31066=>1000,31067=>1000,31068=>1000,31069=>1000,31070=>1000,31071=>1000,31072=>1000,31073=>1000,31074=>1000,31075=>1000,31076=>1000,
+ 31077=>1000,31078=>1000,31079=>1000,31080=>1000,31081=>1000,31082=>1000,31083=>1000,31084=>1000,31085=>1000,31086=>1000,31087=>1000,31088=>1000,31089=>1000,31090=>1000,31091=>1000,31092=>1000,
+ 31093=>1000,31094=>1000,31095=>1000,31096=>1000,31097=>1000,31098=>1000,31099=>1000,31100=>1000,31101=>1000,31102=>1000,31103=>1000,31104=>1000,31105=>1000,31106=>1000,31107=>1000,31108=>1000,
+ 31109=>1000,31110=>1000,31111=>1000,31112=>1000,31113=>1000,31114=>1000,31115=>1000,31116=>1000,31117=>1000,31118=>1000,31119=>1000,31120=>1000,31121=>1000,31122=>1000,31123=>1000,31124=>1000,
+ 31125=>1000,31126=>1000,31127=>1000,31128=>1000,31129=>1000,31130=>1000,31131=>1000,31132=>1000,31133=>1000,31134=>1000,31135=>1000,31136=>1000,31137=>1000,31138=>1000,31139=>1000,31140=>1000,
+ 31141=>1000,31142=>1000,31143=>1000,31144=>1000,31145=>1000,31146=>1000,31147=>1000,31148=>1000,31149=>1000,31150=>1000,31151=>1000,31152=>1000,31153=>1000,31154=>1000,31155=>1000,31156=>1000,
+ 31157=>1000,31158=>1000,31159=>1000,31160=>1000,31161=>1000,31162=>1000,31163=>1000,31164=>1000,31165=>1000,31166=>1000,31167=>1000,31168=>1000,31169=>1000,31170=>1000,31171=>1000,31172=>1000,
+ 31173=>1000,31174=>1000,31175=>1000,31176=>1000,31177=>1000,31178=>1000,31179=>1000,31180=>1000,31181=>1000,31182=>1000,31183=>1000,31184=>1000,31185=>1000,31186=>1000,31187=>1000,31188=>1000,
+ 31189=>1000,31190=>1000,31191=>1000,31192=>1000,31193=>1000,31194=>1000,31195=>1000,31196=>1000,31197=>1000,31198=>1000,31199=>1000,31200=>1000,31201=>1000,31202=>1000,31203=>1000,31204=>1000,
+ 31205=>1000,31206=>1000,31207=>1000,31208=>1000,31209=>1000,31210=>1000,31211=>1000,31212=>1000,31213=>1000,31214=>1000,31215=>1000,31216=>1000,31217=>1000,31218=>1000,31219=>1000,31220=>1000,
+ 31221=>1000,31222=>1000,31223=>1000,31224=>1000,31225=>1000,31226=>1000,31227=>1000,31228=>1000,31229=>1000,31230=>1000,31231=>1000,31232=>1000,31233=>1000,31234=>1000,31235=>1000,31236=>1000,
+ 31237=>1000,31238=>1000,31239=>1000,31240=>1000,31241=>1000,31242=>1000,31243=>1000,31244=>1000,31245=>1000,31246=>1000,31247=>1000,31248=>1000,31249=>1000,31250=>1000,31251=>1000,31252=>1000,
+ 31253=>1000,31254=>1000,31255=>1000,31256=>1000,31257=>1000,31258=>1000,31259=>1000,31260=>1000,31261=>1000,31262=>1000,31263=>1000,31264=>1000,31265=>1000,31266=>1000,31267=>1000,31268=>1000,
+ 31269=>1000,31270=>1000,31271=>1000,31272=>1000,31273=>1000,31274=>1000,31275=>1000,31276=>1000,31277=>1000,31278=>1000,31279=>1000,31280=>1000,31281=>1000,31282=>1000,31283=>1000,31284=>1000,
+ 31285=>1000,31286=>1000,31287=>1000,31288=>1000,31289=>1000,31290=>1000,31291=>1000,31292=>1000,31293=>1000,31294=>1000,31295=>1000,31296=>1000,31297=>1000,31298=>1000,31299=>1000,31300=>1000,
+ 31301=>1000,31302=>1000,31303=>1000,31304=>1000,31305=>1000,31306=>1000,31307=>1000,31308=>1000,31309=>1000,31310=>1000,31311=>1000,31312=>1000,31313=>1000,31314=>1000,31315=>1000,31316=>1000,
+ 31317=>1000,31318=>1000,31319=>1000,31320=>1000,31321=>1000,31322=>1000,31323=>1000,31324=>1000,31325=>1000,31326=>1000,31327=>1000,31328=>1000,31329=>1000,31330=>1000,31331=>1000,31332=>1000,
+ 31333=>1000,31334=>1000,31335=>1000,31336=>1000,31337=>1000,31338=>1000,31339=>1000,31340=>1000,31341=>1000,31342=>1000,31343=>1000,31344=>1000,31345=>1000,31346=>1000,31347=>1000,31348=>1000,
+ 31349=>1000,31350=>1000,31351=>1000,31352=>1000,31353=>1000,31354=>1000,31355=>1000,31356=>1000,31357=>1000,31358=>1000,31359=>1000,31360=>1000,31361=>1000,31362=>1000,31363=>1000,31364=>1000,
+ 31365=>1000,31366=>1000,31367=>1000,31368=>1000,31369=>1000,31370=>1000,31371=>1000,31372=>1000,31373=>1000,31374=>1000,31375=>1000,31376=>1000,31377=>1000,31378=>1000,31379=>1000,31380=>1000,
+ 31381=>1000,31382=>1000,31383=>1000,31384=>1000,31385=>1000,31386=>1000,31387=>1000,31388=>1000,31389=>1000,31390=>1000,31391=>1000,31392=>1000,31393=>1000,31394=>1000,31395=>1000,31396=>1000,
+ 31397=>1000,31398=>1000,31399=>1000,31400=>1000,31401=>1000,31402=>1000,31403=>1000,31404=>1000,31405=>1000,31406=>1000,31407=>1000,31408=>1000,31409=>1000,31410=>1000,31411=>1000,31412=>1000,
+ 31413=>1000,31414=>1000,31415=>1000,31416=>1000,31417=>1000,31418=>1000,31419=>1000,31420=>1000,31421=>1000,31422=>1000,31423=>1000,31424=>1000,31425=>1000,31426=>1000,31427=>1000,31428=>1000,
+ 31429=>1000,31430=>1000,31431=>1000,31432=>1000,31433=>1000,31434=>1000,31435=>1000,31436=>1000,31437=>1000,31438=>1000,31439=>1000,31440=>1000,31441=>1000,31442=>1000,31443=>1000,31444=>1000,
+ 31445=>1000,31446=>1000,31447=>1000,31448=>1000,31449=>1000,31450=>1000,31451=>1000,31452=>1000,31453=>1000,31454=>1000,31455=>1000,31456=>1000,31457=>1000,31458=>1000,31459=>1000,31460=>1000,
+ 31461=>1000,31462=>1000,31463=>1000,31464=>1000,31465=>1000,31466=>1000,31467=>1000,31468=>1000,31469=>1000,31470=>1000,31471=>1000,31472=>1000,31473=>1000,31474=>1000,31475=>1000,31476=>1000,
+ 31477=>1000,31478=>1000,31479=>1000,31480=>1000,31481=>1000,31482=>1000,31483=>1000,31484=>1000,31485=>1000,31486=>1000,31487=>1000,31488=>1000,31489=>1000,31490=>1000,31491=>1000,31492=>1000,
+ 31493=>1000,31494=>1000,31495=>1000,31496=>1000,31497=>1000,31498=>1000,31499=>1000,31500=>1000,31501=>1000,31502=>1000,31503=>1000,31504=>1000,31505=>1000,31506=>1000,31507=>1000,31508=>1000,
+ 31509=>1000,31510=>1000,31511=>1000,31512=>1000,31513=>1000,31514=>1000,31515=>1000,31516=>1000,31517=>1000,31518=>1000,31519=>1000,31520=>1000,31521=>1000,31522=>1000,31523=>1000,31524=>1000,
+ 31525=>1000,31526=>1000,31527=>1000,31528=>1000,31529=>1000,31530=>1000,31531=>1000,31532=>1000,31533=>1000,31534=>1000,31535=>1000,31536=>1000,31537=>1000,31538=>1000,31539=>1000,31540=>1000,
+ 31541=>1000,31542=>1000,31543=>1000,31544=>1000,31545=>1000,31546=>1000,31547=>1000,31548=>1000,31549=>1000,31550=>1000,31551=>1000,31552=>1000,31553=>1000,31554=>1000,31555=>1000,31556=>1000,
+ 31557=>1000,31558=>1000,31559=>1000,31560=>1000,31561=>1000,31562=>1000,31563=>1000,31564=>1000,31565=>1000,31566=>1000,31567=>1000,31568=>1000,31569=>1000,31570=>1000,31571=>1000,31572=>1000,
+ 31573=>1000,31574=>1000,31575=>1000,31576=>1000,31577=>1000,31578=>1000,31579=>1000,31580=>1000,31581=>1000,31582=>1000,31583=>1000,31584=>1000,31585=>1000,31586=>1000,31587=>1000,31588=>1000,
+ 31589=>1000,31590=>1000,31591=>1000,31592=>1000,31593=>1000,31594=>1000,31595=>1000,31596=>1000,31597=>1000,31598=>1000,31599=>1000,31600=>1000,31601=>1000,31602=>1000,31603=>1000,31604=>1000,
+ 31605=>1000,31606=>1000,31607=>1000,31608=>1000,31609=>1000,31610=>1000,31611=>1000,31612=>1000,31613=>1000,31614=>1000,31615=>1000,31616=>1000,31617=>1000,31618=>1000,31619=>1000,31620=>1000,
+ 31621=>1000,31622=>1000,31623=>1000,31624=>1000,31625=>1000,31626=>1000,31627=>1000,31628=>1000,31629=>1000,31630=>1000,31631=>1000,31632=>1000,31633=>1000,31634=>1000,31635=>1000,31636=>1000,
+ 31637=>1000,31638=>1000,31639=>1000,31640=>1000,31641=>1000,31642=>1000,31643=>1000,31644=>1000,31645=>1000,31646=>1000,31647=>1000,31648=>1000,31649=>1000,31650=>1000,31651=>1000,31652=>1000,
+ 31653=>1000,31654=>1000,31655=>1000,31656=>1000,31657=>1000,31658=>1000,31659=>1000,31660=>1000,31661=>1000,31662=>1000,31663=>1000,31664=>1000,31665=>1000,31666=>1000,31667=>1000,31668=>1000,
+ 31669=>1000,31670=>1000,31671=>1000,31672=>1000,31673=>1000,31674=>1000,31675=>1000,31676=>1000,31677=>1000,31678=>1000,31679=>1000,31680=>1000,31681=>1000,31682=>1000,31683=>1000,31684=>1000,
+ 31685=>1000,31686=>1000,31687=>1000,31688=>1000,31689=>1000,31690=>1000,31691=>1000,31692=>1000,31693=>1000,31694=>1000,31695=>1000,31696=>1000,31697=>1000,31698=>1000,31699=>1000,31700=>1000,
+ 31701=>1000,31702=>1000,31703=>1000,31704=>1000,31705=>1000,31706=>1000,31707=>1000,31708=>1000,31709=>1000,31710=>1000,31711=>1000,31712=>1000,31713=>1000,31714=>1000,31715=>1000,31716=>1000,
+ 31717=>1000,31718=>1000,31719=>1000,31720=>1000,31721=>1000,31722=>1000,31723=>1000,31724=>1000,31725=>1000,31726=>1000,31727=>1000,31728=>1000,31729=>1000,31730=>1000,31731=>1000,31732=>1000,
+ 31733=>1000,31734=>1000,31735=>1000,31736=>1000,31737=>1000,31738=>1000,31739=>1000,31740=>1000,31741=>1000,31742=>1000,31743=>1000,31744=>1000,31745=>1000,31746=>1000,31747=>1000,31748=>1000,
+ 31749=>1000,31750=>1000,31751=>1000,31752=>1000,31753=>1000,31754=>1000,31755=>1000,31756=>1000,31757=>1000,31758=>1000,31759=>1000,31760=>1000,31761=>1000,31762=>1000,31763=>1000,31764=>1000,
+ 31765=>1000,31766=>1000,31767=>1000,31768=>1000,31769=>1000,31770=>1000,31771=>1000,31772=>1000,31773=>1000,31774=>1000,31775=>1000,31776=>1000,31777=>1000,31778=>1000,31779=>1000,31780=>1000,
+ 31781=>1000,31782=>1000,31783=>1000,31784=>1000,31785=>1000,31786=>1000,31787=>1000,31788=>1000,31789=>1000,31790=>1000,31791=>1000,31792=>1000,31793=>1000,31794=>1000,31795=>1000,31796=>1000,
+ 31797=>1000,31798=>1000,31799=>1000,31800=>1000,31801=>1000,31802=>1000,31803=>1000,31804=>1000,31805=>1000,31806=>1000,31807=>1000,31808=>1000,31809=>1000,31810=>1000,31811=>1000,31812=>1000,
+ 31813=>1000,31814=>1000,31815=>1000,31816=>1000,31817=>1000,31818=>1000,31819=>1000,31820=>1000,31821=>1000,31822=>1000,31823=>1000,31824=>1000,31825=>1000,31826=>1000,31827=>1000,31828=>1000,
+ 31829=>1000,31830=>1000,31831=>1000,31832=>1000,31833=>1000,31834=>1000,31835=>1000,31836=>1000,31837=>1000,31838=>1000,31839=>1000,31840=>1000,31841=>1000,31842=>1000,31843=>1000,31844=>1000,
+ 31845=>1000,31846=>1000,31847=>1000,31848=>1000,31849=>1000,31850=>1000,31851=>1000,31852=>1000,31853=>1000,31854=>1000,31855=>1000,31856=>1000,31857=>1000,31858=>1000,31859=>1000,31860=>1000,
+ 31861=>1000,31862=>1000,31863=>1000,31864=>1000,31865=>1000,31866=>1000,31867=>1000,31868=>1000,31869=>1000,31870=>1000,31871=>1000,31872=>1000,31873=>1000,31874=>1000,31875=>1000,31876=>1000,
+ 31877=>1000,31878=>1000,31879=>1000,31880=>1000,31881=>1000,31882=>1000,31883=>1000,31884=>1000,31885=>1000,31886=>1000,31887=>1000,31888=>1000,31889=>1000,31890=>1000,31891=>1000,31892=>1000,
+ 31893=>1000,31894=>1000,31895=>1000,31896=>1000,31897=>1000,31898=>1000,31899=>1000,31900=>1000,31901=>1000,31902=>1000,31903=>1000,31904=>1000,31905=>1000,31906=>1000,31907=>1000,31908=>1000,
+ 31909=>1000,31910=>1000,31911=>1000,31912=>1000,31913=>1000,31914=>1000,31915=>1000,31916=>1000,31917=>1000,31918=>1000,31919=>1000,31920=>1000,31921=>1000,31922=>1000,31923=>1000,31924=>1000,
+ 31925=>1000,31926=>1000,31927=>1000,31928=>1000,31929=>1000,31930=>1000,31931=>1000,31932=>1000,31933=>1000,31934=>1000,31935=>1000,31936=>1000,31937=>1000,31938=>1000,31939=>1000,31940=>1000,
+ 31941=>1000,31942=>1000,31943=>1000,31944=>1000,31945=>1000,31946=>1000,31947=>1000,31948=>1000,31949=>1000,31950=>1000,31951=>1000,31952=>1000,31953=>1000,31954=>1000,31955=>1000,31956=>1000,
+ 31957=>1000,31958=>1000,31959=>1000,31960=>1000,31961=>1000,31962=>1000,31963=>1000,31964=>1000,31965=>1000,31966=>1000,31967=>1000,31968=>1000,31969=>1000,31970=>1000,31971=>1000,31972=>1000,
+ 31973=>1000,31974=>1000,31975=>1000,31976=>1000,31977=>1000,31978=>1000,31979=>1000,31980=>1000,31981=>1000,31982=>1000,31983=>1000,31984=>1000,31985=>1000,31986=>1000,31987=>1000,31988=>1000,
+ 31989=>1000,31990=>1000,31991=>1000,31992=>1000,31993=>1000,31994=>1000,31995=>1000,31996=>1000,31997=>1000,31998=>1000,31999=>1000,32000=>1000,32001=>1000,32002=>1000,32003=>1000,32004=>1000,
+ 32005=>1000,32006=>1000,32007=>1000,32008=>1000,32009=>1000,32010=>1000,32011=>1000,32012=>1000,32013=>1000,32014=>1000,32015=>1000,32016=>1000,32017=>1000,32018=>1000,32019=>1000,32020=>1000,
+ 32021=>1000,32022=>1000,32023=>1000,32024=>1000,32025=>1000,32026=>1000,32027=>1000,32028=>1000,32029=>1000,32030=>1000,32031=>1000,32032=>1000,32033=>1000,32034=>1000,32035=>1000,32036=>1000,
+ 32037=>1000,32038=>1000,32039=>1000,32040=>1000,32041=>1000,32042=>1000,32043=>1000,32044=>1000,32045=>1000,32046=>1000,32047=>1000,32048=>1000,32049=>1000,32050=>1000,32051=>1000,32052=>1000,
+ 32053=>1000,32054=>1000,32055=>1000,32056=>1000,32057=>1000,32058=>1000,32059=>1000,32060=>1000,32061=>1000,32062=>1000,32063=>1000,32064=>1000,32065=>1000,32066=>1000,32067=>1000,32068=>1000,
+ 32069=>1000,32070=>1000,32071=>1000,32072=>1000,32073=>1000,32074=>1000,32075=>1000,32076=>1000,32077=>1000,32078=>1000,32079=>1000,32080=>1000,32081=>1000,32082=>1000,32083=>1000,32084=>1000,
+ 32085=>1000,32086=>1000,32087=>1000,32088=>1000,32089=>1000,32090=>1000,32091=>1000,32092=>1000,32093=>1000,32094=>1000,32095=>1000,32096=>1000,32097=>1000,32098=>1000,32099=>1000,32100=>1000,
+ 32101=>1000,32102=>1000,32103=>1000,32104=>1000,32105=>1000,32106=>1000,32107=>1000,32108=>1000,32109=>1000,32110=>1000,32111=>1000,32112=>1000,32113=>1000,32114=>1000,32115=>1000,32116=>1000,
+ 32117=>1000,32118=>1000,32119=>1000,32120=>1000,32121=>1000,32122=>1000,32123=>1000,32124=>1000,32125=>1000,32126=>1000,32127=>1000,32128=>1000,32129=>1000,32130=>1000,32131=>1000,32132=>1000,
+ 32133=>1000,32134=>1000,32135=>1000,32136=>1000,32137=>1000,32138=>1000,32139=>1000,32140=>1000,32141=>1000,32142=>1000,32143=>1000,32144=>1000,32145=>1000,32146=>1000,32147=>1000,32148=>1000,
+ 32149=>1000,32150=>1000,32151=>1000,32152=>1000,32153=>1000,32154=>1000,32155=>1000,32156=>1000,32157=>1000,32158=>1000,32159=>1000,32160=>1000,32161=>1000,32162=>1000,32163=>1000,32164=>1000,
+ 32165=>1000,32166=>1000,32167=>1000,32168=>1000,32169=>1000,32170=>1000,32171=>1000,32172=>1000,32173=>1000,32174=>1000,32175=>1000,32176=>1000,32177=>1000,32178=>1000,32179=>1000,32180=>1000,
+ 32181=>1000,32182=>1000,32183=>1000,32184=>1000,32185=>1000,32186=>1000,32187=>1000,32188=>1000,32189=>1000,32190=>1000,32191=>1000,32192=>1000,32193=>1000,32194=>1000,32195=>1000,32196=>1000,
+ 32197=>1000,32198=>1000,32199=>1000,32200=>1000,32201=>1000,32202=>1000,32203=>1000,32204=>1000,32205=>1000,32206=>1000,32207=>1000,32208=>1000,32209=>1000,32210=>1000,32211=>1000,32212=>1000,
+ 32213=>1000,32214=>1000,32215=>1000,32216=>1000,32217=>1000,32218=>1000,32219=>1000,32220=>1000,32221=>1000,32222=>1000,32223=>1000,32224=>1000,32225=>1000,32226=>1000,32227=>1000,32228=>1000,
+ 32229=>1000,32230=>1000,32231=>1000,32232=>1000,32233=>1000,32234=>1000,32235=>1000,32236=>1000,32237=>1000,32238=>1000,32239=>1000,32240=>1000,32241=>1000,32242=>1000,32243=>1000,32244=>1000,
+ 32245=>1000,32246=>1000,32247=>1000,32248=>1000,32249=>1000,32250=>1000,32251=>1000,32252=>1000,32253=>1000,32254=>1000,32255=>1000,32256=>1000,32257=>1000,32258=>1000,32259=>1000,32260=>1000,
+ 32261=>1000,32262=>1000,32263=>1000,32264=>1000,32265=>1000,32266=>1000,32267=>1000,32268=>1000,32269=>1000,32270=>1000,32271=>1000,32272=>1000,32273=>1000,32274=>1000,32275=>1000,32276=>1000,
+ 32277=>1000,32278=>1000,32279=>1000,32280=>1000,32281=>1000,32282=>1000,32283=>1000,32284=>1000,32285=>1000,32286=>1000,32287=>1000,32288=>1000,32289=>1000,32290=>1000,32291=>1000,32292=>1000,
+ 32293=>1000,32294=>1000,32295=>1000,32296=>1000,32297=>1000,32298=>1000,32299=>1000,32300=>1000,32301=>1000,32302=>1000,32303=>1000,32304=>1000,32305=>1000,32306=>1000,32307=>1000,32308=>1000,
+ 32309=>1000,32310=>1000,32311=>1000,32312=>1000,32313=>1000,32314=>1000,32315=>1000,32316=>1000,32317=>1000,32318=>1000,32319=>1000,32320=>1000,32321=>1000,32322=>1000,32323=>1000,32324=>1000,
+ 32325=>1000,32326=>1000,32327=>1000,32328=>1000,32329=>1000,32330=>1000,32331=>1000,32332=>1000,32333=>1000,32334=>1000,32335=>1000,32336=>1000,32337=>1000,32338=>1000,32339=>1000,32340=>1000,
+ 32341=>1000,32342=>1000,32343=>1000,32344=>1000,32345=>1000,32346=>1000,32347=>1000,32348=>1000,32349=>1000,32350=>1000,32351=>1000,32352=>1000,32353=>1000,32354=>1000,32355=>1000,32356=>1000,
+ 32357=>1000,32358=>1000,32359=>1000,32360=>1000,32361=>1000,32362=>1000,32363=>1000,32364=>1000,32365=>1000,32366=>1000,32367=>1000,32368=>1000,32369=>1000,32370=>1000,32371=>1000,32372=>1000,
+ 32373=>1000,32374=>1000,32375=>1000,32376=>1000,32377=>1000,32378=>1000,32379=>1000,32380=>1000,32381=>1000,32382=>1000,32383=>1000,32384=>1000,32385=>1000,32386=>1000,32387=>1000,32388=>1000,
+ 32389=>1000,32390=>1000,32391=>1000,32392=>1000,32393=>1000,32394=>1000,32395=>1000,32396=>1000,32397=>1000,32398=>1000,32399=>1000,32400=>1000,32401=>1000,32402=>1000,32403=>1000,32404=>1000,
+ 32405=>1000,32406=>1000,32407=>1000,32408=>1000,32409=>1000,32410=>1000,32411=>1000,32412=>1000,32413=>1000,32414=>1000,32415=>1000,32416=>1000,32417=>1000,32418=>1000,32419=>1000,32420=>1000,
+ 32421=>1000,32422=>1000,32423=>1000,32424=>1000,32425=>1000,32426=>1000,32427=>1000,32428=>1000,32429=>1000,32430=>1000,32431=>1000,32432=>1000,32433=>1000,32434=>1000,32435=>1000,32436=>1000,
+ 32437=>1000,32438=>1000,32439=>1000,32440=>1000,32441=>1000,32442=>1000,32443=>1000,32444=>1000,32445=>1000,32446=>1000,32447=>1000,32448=>1000,32449=>1000,32450=>1000,32451=>1000,32452=>1000,
+ 32453=>1000,32454=>1000,32455=>1000,32456=>1000,32457=>1000,32458=>1000,32459=>1000,32460=>1000,32461=>1000,32462=>1000,32463=>1000,32464=>1000,32465=>1000,32466=>1000,32467=>1000,32468=>1000,
+ 32469=>1000,32470=>1000,32471=>1000,32472=>1000,32473=>1000,32474=>1000,32475=>1000,32476=>1000,32477=>1000,32478=>1000,32479=>1000,32480=>1000,32481=>1000,32482=>1000,32483=>1000,32484=>1000,
+ 32485=>1000,32486=>1000,32487=>1000,32488=>1000,32489=>1000,32490=>1000,32491=>1000,32492=>1000,32493=>1000,32494=>1000,32495=>1000,32496=>1000,32497=>1000,32498=>1000,32499=>1000,32500=>1000,
+ 32501=>1000,32502=>1000,32503=>1000,32504=>1000,32505=>1000,32506=>1000,32507=>1000,32508=>1000,32509=>1000,32510=>1000,32511=>1000,32512=>1000,32513=>1000,32514=>1000,32515=>1000,32516=>1000,
+ 32517=>1000,32518=>1000,32519=>1000,32520=>1000,32521=>1000,32522=>1000,32523=>1000,32524=>1000,32525=>1000,32526=>1000,32527=>1000,32528=>1000,32529=>1000,32530=>1000,32531=>1000,32532=>1000,
+ 32533=>1000,32534=>1000,32535=>1000,32536=>1000,32537=>1000,32538=>1000,32539=>1000,32540=>1000,32541=>1000,32542=>1000,32543=>1000,32544=>1000,32545=>1000,32546=>1000,32547=>1000,32548=>1000,
+ 32549=>1000,32550=>1000,32551=>1000,32552=>1000,32553=>1000,32554=>1000,32555=>1000,32556=>1000,32557=>1000,32558=>1000,32559=>1000,32560=>1000,32561=>1000,32562=>1000,32563=>1000,32564=>1000,
+ 32565=>1000,32566=>1000,32567=>1000,32568=>1000,32569=>1000,32570=>1000,32571=>1000,32572=>1000,32573=>1000,32574=>1000,32575=>1000,32576=>1000,32577=>1000,32578=>1000,32579=>1000,32580=>1000,
+ 32581=>1000,32582=>1000,32583=>1000,32584=>1000,32585=>1000,32586=>1000,32587=>1000,32588=>1000,32589=>1000,32590=>1000,32591=>1000,32592=>1000,32593=>1000,32594=>1000,32595=>1000,32596=>1000,
+ 32597=>1000,32598=>1000,32599=>1000,32600=>1000,32601=>1000,32602=>1000,32603=>1000,32604=>1000,32605=>1000,32606=>1000,32607=>1000,32608=>1000,32609=>1000,32610=>1000,32611=>1000,32612=>1000,
+ 32613=>1000,32614=>1000,32615=>1000,32616=>1000,32617=>1000,32618=>1000,32619=>1000,32620=>1000,32621=>1000,32622=>1000,32623=>1000,32624=>1000,32625=>1000,32626=>1000,32627=>1000,32628=>1000,
+ 32629=>1000,32630=>1000,32631=>1000,32632=>1000,32633=>1000,32634=>1000,32635=>1000,32636=>1000,32637=>1000,32638=>1000,32639=>1000,32640=>1000,32641=>1000,32642=>1000,32643=>1000,32644=>1000,
+ 32645=>1000,32646=>1000,32647=>1000,32648=>1000,32649=>1000,32650=>1000,32651=>1000,32652=>1000,32653=>1000,32654=>1000,32655=>1000,32656=>1000,32657=>1000,32658=>1000,32659=>1000,32660=>1000,
+ 32661=>1000,32662=>1000,32663=>1000,32664=>1000,32665=>1000,32666=>1000,32667=>1000,32668=>1000,32669=>1000,32670=>1000,32671=>1000,32672=>1000,32673=>1000,32674=>1000,32675=>1000,32676=>1000,
+ 32677=>1000,32678=>1000,32679=>1000,32680=>1000,32681=>1000,32682=>1000,32683=>1000,32684=>1000,32685=>1000,32686=>1000,32687=>1000,32688=>1000,32689=>1000,32690=>1000,32691=>1000,32692=>1000,
+ 32693=>1000,32694=>1000,32695=>1000,32696=>1000,32697=>1000,32698=>1000,32699=>1000,32700=>1000,32701=>1000,32702=>1000,32703=>1000,32704=>1000,32705=>1000,32706=>1000,32707=>1000,32708=>1000,
+ 32709=>1000,32710=>1000,32711=>1000,32712=>1000,32713=>1000,32714=>1000,32715=>1000,32716=>1000,32717=>1000,32718=>1000,32719=>1000,32720=>1000,32721=>1000,32722=>1000,32723=>1000,32724=>1000,
+ 32725=>1000,32726=>1000,32727=>1000,32728=>1000,32729=>1000,32730=>1000,32731=>1000,32732=>1000,32733=>1000,32734=>1000,32735=>1000,32736=>1000,32737=>1000,32738=>1000,32739=>1000,32740=>1000,
+ 32741=>1000,32742=>1000,32743=>1000,32744=>1000,32745=>1000,32746=>1000,32747=>1000,32748=>1000,32749=>1000,32750=>1000,32751=>1000,32752=>1000,32753=>1000,32754=>1000,32755=>1000,32756=>1000,
+ 32757=>1000,32758=>1000,32759=>1000,32760=>1000,32761=>1000,32762=>1000,32763=>1000,32764=>1000,32765=>1000,32766=>1000,32767=>1000,32768=>1000,32769=>1000,32770=>1000,32771=>1000,32772=>1000,
+ 32773=>1000,32774=>1000,32775=>1000,32776=>1000,32777=>1000,32778=>1000,32779=>1000,32780=>1000,32781=>1000,32782=>1000,32783=>1000,32784=>1000,32785=>1000,32786=>1000,32787=>1000,32788=>1000,
+ 32789=>1000,32790=>1000,32791=>1000,32792=>1000,32793=>1000,32794=>1000,32795=>1000,32796=>1000,32797=>1000,32798=>1000,32799=>1000,32800=>1000,32801=>1000,32802=>1000,32803=>1000,32804=>1000,
+ 32805=>1000,32806=>1000,32807=>1000,32808=>1000,32809=>1000,32810=>1000,32811=>1000,32812=>1000,32813=>1000,32814=>1000,32815=>1000,32816=>1000,32817=>1000,32818=>1000,32819=>1000,32820=>1000,
+ 32821=>1000,32822=>1000,32823=>1000,32824=>1000,32825=>1000,32826=>1000,32827=>1000,32828=>1000,32829=>1000,32830=>1000,32831=>1000,32832=>1000,32833=>1000,32834=>1000,32835=>1000,32836=>1000,
+ 32837=>1000,32838=>1000,32839=>1000,32840=>1000,32841=>1000,32842=>1000,32843=>1000,32844=>1000,32845=>1000,32846=>1000,32847=>1000,32848=>1000,32849=>1000,32850=>1000,32851=>1000,32852=>1000,
+ 32853=>1000,32854=>1000,32855=>1000,32856=>1000,32857=>1000,32858=>1000,32859=>1000,32860=>1000,32861=>1000,32862=>1000,32863=>1000,32864=>1000,32865=>1000,32866=>1000,32867=>1000,32868=>1000,
+ 32869=>1000,32870=>1000,32871=>1000,32872=>1000,32873=>1000,32874=>1000,32875=>1000,32876=>1000,32877=>1000,32878=>1000,32879=>1000,32880=>1000,32881=>1000,32882=>1000,32883=>1000,32884=>1000,
+ 32885=>1000,32886=>1000,32887=>1000,32888=>1000,32889=>1000,32890=>1000,32891=>1000,32892=>1000,32893=>1000,32894=>1000,32895=>1000,32896=>1000,32897=>1000,32898=>1000,32899=>1000,32900=>1000,
+ 32901=>1000,32902=>1000,32903=>1000,32904=>1000,32905=>1000,32906=>1000,32907=>1000,32908=>1000,32909=>1000,32910=>1000,32911=>1000,32912=>1000,32913=>1000,32914=>1000,32915=>1000,32916=>1000,
+ 32917=>1000,32918=>1000,32919=>1000,32920=>1000,32921=>1000,32922=>1000,32923=>1000,32924=>1000,32925=>1000,32926=>1000,32927=>1000,32928=>1000,32929=>1000,32930=>1000,32931=>1000,32932=>1000,
+ 32933=>1000,32934=>1000,32935=>1000,32936=>1000,32937=>1000,32938=>1000,32939=>1000,32940=>1000,32941=>1000,32942=>1000,32943=>1000,32944=>1000,32945=>1000,32946=>1000,32947=>1000,32948=>1000,
+ 32949=>1000,32950=>1000,32951=>1000,32952=>1000,32953=>1000,32954=>1000,32955=>1000,32956=>1000,32957=>1000,32958=>1000,32959=>1000,32960=>1000,32961=>1000,32962=>1000,32963=>1000,32964=>1000,
+ 32965=>1000,32966=>1000,32967=>1000,32968=>1000,32969=>1000,32970=>1000,32971=>1000,32972=>1000,32973=>1000,32974=>1000,32975=>1000,32976=>1000,32977=>1000,32978=>1000,32979=>1000,32980=>1000,
+ 32981=>1000,32982=>1000,32983=>1000,32984=>1000,32985=>1000,32986=>1000,32987=>1000,32988=>1000,32989=>1000,32990=>1000,32991=>1000,32992=>1000,32993=>1000,32994=>1000,32995=>1000,32996=>1000,
+ 32997=>1000,32998=>1000,32999=>1000,33000=>1000,33001=>1000,33002=>1000,33003=>1000,33004=>1000,33005=>1000,33006=>1000,33007=>1000,33008=>1000,33009=>1000,33010=>1000,33011=>1000,33012=>1000,
+ 33013=>1000,33014=>1000,33015=>1000,33016=>1000,33017=>1000,33018=>1000,33019=>1000,33020=>1000,33021=>1000,33022=>1000,33023=>1000,33024=>1000,33025=>1000,33026=>1000,33027=>1000,33028=>1000,
+ 33029=>1000,33030=>1000,33031=>1000,33032=>1000,33033=>1000,33034=>1000,33035=>1000,33036=>1000,33037=>1000,33038=>1000,33039=>1000,33040=>1000,33041=>1000,33042=>1000,33043=>1000,33044=>1000,
+ 33045=>1000,33046=>1000,33047=>1000,33048=>1000,33049=>1000,33050=>1000,33051=>1000,33052=>1000,33053=>1000,33054=>1000,33055=>1000,33056=>1000,33057=>1000,33058=>1000,33059=>1000,33060=>1000,
+ 33061=>1000,33062=>1000,33063=>1000,33064=>1000,33065=>1000,33066=>1000,33067=>1000,33068=>1000,33069=>1000,33070=>1000,33071=>1000,33072=>1000,33073=>1000,33074=>1000,33075=>1000,33076=>1000,
+ 33077=>1000,33078=>1000,33079=>1000,33080=>1000,33081=>1000,33082=>1000,33083=>1000,33084=>1000,33085=>1000,33086=>1000,33087=>1000,33088=>1000,33089=>1000,33090=>1000,33091=>1000,33092=>1000,
+ 33093=>1000,33094=>1000,33095=>1000,33096=>1000,33097=>1000,33098=>1000,33099=>1000,33100=>1000,33101=>1000,33102=>1000,33103=>1000,33104=>1000,33105=>1000,33106=>1000,33107=>1000,33108=>1000,
+ 33109=>1000,33110=>1000,33111=>1000,33112=>1000,33113=>1000,33114=>1000,33115=>1000,33116=>1000,33117=>1000,33118=>1000,33119=>1000,33120=>1000,33121=>1000,33122=>1000,33123=>1000,33124=>1000,
+ 33125=>1000,33126=>1000,33127=>1000,33128=>1000,33129=>1000,33130=>1000,33131=>1000,33132=>1000,33133=>1000,33134=>1000,33135=>1000,33136=>1000,33137=>1000,33138=>1000,33139=>1000,33140=>1000,
+ 33141=>1000,33142=>1000,33143=>1000,33144=>1000,33145=>1000,33146=>1000,33147=>1000,33148=>1000,33149=>1000,33150=>1000,33151=>1000,33152=>1000,33153=>1000,33154=>1000,33155=>1000,33156=>1000,
+ 33157=>1000,33158=>1000,33159=>1000,33160=>1000,33161=>1000,33162=>1000,33163=>1000,33164=>1000,33165=>1000,33166=>1000,33167=>1000,33168=>1000,33169=>1000,33170=>1000,33171=>1000,33172=>1000,
+ 33173=>1000,33174=>1000,33175=>1000,33176=>1000,33177=>1000,33178=>1000,33179=>1000,33180=>1000,33181=>1000,33182=>1000,33183=>1000,33184=>1000,33185=>1000,33186=>1000,33187=>1000,33188=>1000,
+ 33189=>1000,33190=>1000,33191=>1000,33192=>1000,33193=>1000,33194=>1000,33195=>1000,33196=>1000,33197=>1000,33198=>1000,33199=>1000,33200=>1000,33201=>1000,33202=>1000,33203=>1000,33204=>1000,
+ 33205=>1000,33206=>1000,33207=>1000,33208=>1000,33209=>1000,33210=>1000,33211=>1000,33212=>1000,33213=>1000,33214=>1000,33215=>1000,33216=>1000,33217=>1000,33218=>1000,33219=>1000,33220=>1000,
+ 33221=>1000,33222=>1000,33223=>1000,33224=>1000,33225=>1000,33226=>1000,33227=>1000,33228=>1000,33229=>1000,33230=>1000,33231=>1000,33232=>1000,33233=>1000,33234=>1000,33235=>1000,33236=>1000,
+ 33237=>1000,33238=>1000,33239=>1000,33240=>1000,33241=>1000,33242=>1000,33243=>1000,33244=>1000,33245=>1000,33246=>1000,33247=>1000,33248=>1000,33249=>1000,33250=>1000,33251=>1000,33252=>1000,
+ 33253=>1000,33254=>1000,33255=>1000,33256=>1000,33257=>1000,33258=>1000,33259=>1000,33260=>1000,33261=>1000,33262=>1000,33263=>1000,33264=>1000,33265=>1000,33266=>1000,33267=>1000,33268=>1000,
+ 33269=>1000,33270=>1000,33271=>1000,33272=>1000,33273=>1000,33274=>1000,33275=>1000,33276=>1000,33277=>1000,33278=>1000,33279=>1000,33280=>1000,33281=>1000,33282=>1000,33283=>1000,33284=>1000,
+ 33285=>1000,33286=>1000,33287=>1000,33288=>1000,33289=>1000,33290=>1000,33291=>1000,33292=>1000,33293=>1000,33294=>1000,33295=>1000,33296=>1000,33297=>1000,33298=>1000,33299=>1000,33300=>1000,
+ 33301=>1000,33302=>1000,33303=>1000,33304=>1000,33305=>1000,33306=>1000,33307=>1000,33308=>1000,33309=>1000,33310=>1000,33311=>1000,33312=>1000,33313=>1000,33314=>1000,33315=>1000,33316=>1000,
+ 33317=>1000,33318=>1000,33319=>1000,33320=>1000,33321=>1000,33322=>1000,33323=>1000,33324=>1000,33325=>1000,33326=>1000,33327=>1000,33328=>1000,33329=>1000,33330=>1000,33331=>1000,33332=>1000,
+ 33333=>1000,33334=>1000,33335=>1000,33336=>1000,33337=>1000,33338=>1000,33339=>1000,33340=>1000,33341=>1000,33342=>1000,33343=>1000,33344=>1000,33345=>1000,33346=>1000,33347=>1000,33348=>1000,
+ 33349=>1000,33350=>1000,33351=>1000,33352=>1000,33353=>1000,33354=>1000,33355=>1000,33356=>1000,33357=>1000,33358=>1000,33359=>1000,33360=>1000,33361=>1000,33362=>1000,33363=>1000,33364=>1000,
+ 33365=>1000,33366=>1000,33367=>1000,33368=>1000,33369=>1000,33370=>1000,33371=>1000,33372=>1000,33373=>1000,33374=>1000,33375=>1000,33376=>1000,33377=>1000,33378=>1000,33379=>1000,33380=>1000,
+ 33381=>1000,33382=>1000,33383=>1000,33384=>1000,33385=>1000,33386=>1000,33387=>1000,33388=>1000,33389=>1000,33390=>1000,33391=>1000,33392=>1000,33393=>1000,33394=>1000,33395=>1000,33396=>1000,
+ 33397=>1000,33398=>1000,33399=>1000,33400=>1000,33401=>1000,33402=>1000,33403=>1000,33404=>1000,33405=>1000,33406=>1000,33407=>1000,33408=>1000,33409=>1000,33410=>1000,33411=>1000,33412=>1000,
+ 33413=>1000,33414=>1000,33415=>1000,33416=>1000,33417=>1000,33418=>1000,33419=>1000,33420=>1000,33421=>1000,33422=>1000,33423=>1000,33424=>1000,33425=>1000,33426=>1000,33427=>1000,33428=>1000,
+ 33429=>1000,33430=>1000,33431=>1000,33432=>1000,33433=>1000,33434=>1000,33435=>1000,33436=>1000,33437=>1000,33438=>1000,33439=>1000,33440=>1000,33441=>1000,33442=>1000,33443=>1000,33444=>1000,
+ 33445=>1000,33446=>1000,33447=>1000,33448=>1000,33449=>1000,33450=>1000,33451=>1000,33452=>1000,33453=>1000,33454=>1000,33455=>1000,33456=>1000,33457=>1000,33458=>1000,33459=>1000,33460=>1000,
+ 33461=>1000,33462=>1000,33463=>1000,33464=>1000,33465=>1000,33466=>1000,33467=>1000,33468=>1000,33469=>1000,33470=>1000,33471=>1000,33472=>1000,33473=>1000,33474=>1000,33475=>1000,33476=>1000,
+ 33477=>1000,33478=>1000,33479=>1000,33480=>1000,33481=>1000,33482=>1000,33483=>1000,33484=>1000,33485=>1000,33486=>1000,33487=>1000,33488=>1000,33489=>1000,33490=>1000,33491=>1000,33492=>1000,
+ 33493=>1000,33494=>1000,33495=>1000,33496=>1000,33497=>1000,33498=>1000,33499=>1000,33500=>1000,33501=>1000,33502=>1000,33503=>1000,33504=>1000,33505=>1000,33506=>1000,33507=>1000,33508=>1000,
+ 33509=>1000,33510=>1000,33511=>1000,33512=>1000,33513=>1000,33514=>1000,33515=>1000,33516=>1000,33517=>1000,33518=>1000,33519=>1000,33520=>1000,33521=>1000,33522=>1000,33523=>1000,33524=>1000,
+ 33525=>1000,33526=>1000,33527=>1000,33528=>1000,33529=>1000,33530=>1000,33531=>1000,33532=>1000,33533=>1000,33534=>1000,33535=>1000,33536=>1000,33537=>1000,33538=>1000,33539=>1000,33540=>1000,
+ 33541=>1000,33542=>1000,33543=>1000,33544=>1000,33545=>1000,33546=>1000,33547=>1000,33548=>1000,33549=>1000,33550=>1000,33551=>1000,33552=>1000,33553=>1000,33554=>1000,33555=>1000,33556=>1000,
+ 33557=>1000,33558=>1000,33559=>1000,33560=>1000,33561=>1000,33562=>1000,33563=>1000,33564=>1000,33565=>1000,33566=>1000,33567=>1000,33568=>1000,33569=>1000,33570=>1000,33571=>1000,33572=>1000,
+ 33573=>1000,33574=>1000,33575=>1000,33576=>1000,33577=>1000,33578=>1000,33579=>1000,33580=>1000,33581=>1000,33582=>1000,33583=>1000,33584=>1000,33585=>1000,33586=>1000,33587=>1000,33588=>1000,
+ 33589=>1000,33590=>1000,33591=>1000,33592=>1000,33593=>1000,33594=>1000,33595=>1000,33596=>1000,33597=>1000,33598=>1000,33599=>1000,33600=>1000,33601=>1000,33602=>1000,33603=>1000,33604=>1000,
+ 33605=>1000,33606=>1000,33607=>1000,33608=>1000,33609=>1000,33610=>1000,33611=>1000,33612=>1000,33613=>1000,33614=>1000,33615=>1000,33616=>1000,33617=>1000,33618=>1000,33619=>1000,33620=>1000,
+ 33621=>1000,33622=>1000,33623=>1000,33624=>1000,33625=>1000,33626=>1000,33627=>1000,33628=>1000,33629=>1000,33630=>1000,33631=>1000,33632=>1000,33633=>1000,33634=>1000,33635=>1000,33636=>1000,
+ 33637=>1000,33638=>1000,33639=>1000,33640=>1000,33641=>1000,33642=>1000,33643=>1000,33644=>1000,33645=>1000,33646=>1000,33647=>1000,33648=>1000,33649=>1000,33650=>1000,33651=>1000,33652=>1000,
+ 33653=>1000,33654=>1000,33655=>1000,33656=>1000,33657=>1000,33658=>1000,33659=>1000,33660=>1000,33661=>1000,33662=>1000,33663=>1000,33664=>1000,33665=>1000,33666=>1000,33667=>1000,33668=>1000,
+ 33669=>1000,33670=>1000,33671=>1000,33672=>1000,33673=>1000,33674=>1000,33675=>1000,33676=>1000,33677=>1000,33678=>1000,33679=>1000,33680=>1000,33681=>1000,33682=>1000,33683=>1000,33684=>1000,
+ 33685=>1000,33686=>1000,33687=>1000,33688=>1000,33689=>1000,33690=>1000,33691=>1000,33692=>1000,33693=>1000,33694=>1000,33695=>1000,33696=>1000,33697=>1000,33698=>1000,33699=>1000,33700=>1000,
+ 33701=>1000,33702=>1000,33703=>1000,33704=>1000,33705=>1000,33706=>1000,33707=>1000,33708=>1000,33709=>1000,33710=>1000,33711=>1000,33712=>1000,33713=>1000,33714=>1000,33715=>1000,33716=>1000,
+ 33717=>1000,33718=>1000,33719=>1000,33720=>1000,33721=>1000,33722=>1000,33723=>1000,33724=>1000,33725=>1000,33726=>1000,33727=>1000,33728=>1000,33729=>1000,33730=>1000,33731=>1000,33732=>1000,
+ 33733=>1000,33734=>1000,33735=>1000,33736=>1000,33737=>1000,33738=>1000,33739=>1000,33740=>1000,33741=>1000,33742=>1000,33743=>1000,33744=>1000,33745=>1000,33746=>1000,33747=>1000,33748=>1000,
+ 33749=>1000,33750=>1000,33751=>1000,33752=>1000,33753=>1000,33754=>1000,33755=>1000,33756=>1000,33757=>1000,33758=>1000,33759=>1000,33760=>1000,33761=>1000,33762=>1000,33763=>1000,33764=>1000,
+ 33765=>1000,33766=>1000,33767=>1000,33768=>1000,33769=>1000,33770=>1000,33771=>1000,33772=>1000,33773=>1000,33774=>1000,33775=>1000,33776=>1000,33777=>1000,33778=>1000,33779=>1000,33780=>1000,
+ 33781=>1000,33782=>1000,33783=>1000,33784=>1000,33785=>1000,33786=>1000,33787=>1000,33788=>1000,33789=>1000,33790=>1000,33791=>1000,33792=>1000,33793=>1000,33794=>1000,33795=>1000,33796=>1000,
+ 33797=>1000,33798=>1000,33799=>1000,33800=>1000,33801=>1000,33802=>1000,33803=>1000,33804=>1000,33805=>1000,33806=>1000,33807=>1000,33808=>1000,33809=>1000,33810=>1000,33811=>1000,33812=>1000,
+ 33813=>1000,33814=>1000,33815=>1000,33816=>1000,33817=>1000,33818=>1000,33819=>1000,33820=>1000,33821=>1000,33822=>1000,33823=>1000,33824=>1000,33825=>1000,33826=>1000,33827=>1000,33828=>1000,
+ 33829=>1000,33830=>1000,33831=>1000,33832=>1000,33833=>1000,33834=>1000,33835=>1000,33836=>1000,33837=>1000,33838=>1000,33839=>1000,33840=>1000,33841=>1000,33842=>1000,33843=>1000,33844=>1000,
+ 33845=>1000,33846=>1000,33847=>1000,33848=>1000,33849=>1000,33850=>1000,33851=>1000,33852=>1000,33853=>1000,33854=>1000,33855=>1000,33856=>1000,33857=>1000,33858=>1000,33859=>1000,33860=>1000,
+ 33861=>1000,33862=>1000,33863=>1000,33864=>1000,33865=>1000,33866=>1000,33867=>1000,33868=>1000,33869=>1000,33870=>1000,33871=>1000,33872=>1000,33873=>1000,33874=>1000,33875=>1000,33876=>1000,
+ 33877=>1000,33878=>1000,33879=>1000,33880=>1000,33881=>1000,33882=>1000,33883=>1000,33884=>1000,33885=>1000,33886=>1000,33887=>1000,33888=>1000,33889=>1000,33890=>1000,33891=>1000,33892=>1000,
+ 33893=>1000,33894=>1000,33895=>1000,33896=>1000,33897=>1000,33898=>1000,33899=>1000,33900=>1000,33901=>1000,33902=>1000,33903=>1000,33904=>1000,33905=>1000,33906=>1000,33907=>1000,33908=>1000,
+ 33909=>1000,33910=>1000,33911=>1000,33912=>1000,33913=>1000,33914=>1000,33915=>1000,33916=>1000,33917=>1000,33918=>1000,33919=>1000,33920=>1000,33921=>1000,33922=>1000,33923=>1000,33924=>1000,
+ 33925=>1000,33926=>1000,33927=>1000,33928=>1000,33929=>1000,33930=>1000,33931=>1000,33932=>1000,33933=>1000,33934=>1000,33935=>1000,33936=>1000,33937=>1000,33938=>1000,33939=>1000,33940=>1000,
+ 33941=>1000,33942=>1000,33943=>1000,33944=>1000,33945=>1000,33946=>1000,33947=>1000,33948=>1000,33949=>1000,33950=>1000,33951=>1000,33952=>1000,33953=>1000,33954=>1000,33955=>1000,33956=>1000,
+ 33957=>1000,33958=>1000,33959=>1000,33960=>1000,33961=>1000,33962=>1000,33963=>1000,33964=>1000,33965=>1000,33966=>1000,33967=>1000,33968=>1000,33969=>1000,33970=>1000,33971=>1000,33972=>1000,
+ 33973=>1000,33974=>1000,33975=>1000,33976=>1000,33977=>1000,33978=>1000,33979=>1000,33980=>1000,33981=>1000,33982=>1000,33983=>1000,33984=>1000,33985=>1000,33986=>1000,33987=>1000,33988=>1000,
+ 33989=>1000,33990=>1000,33991=>1000,33992=>1000,33993=>1000,33994=>1000,33995=>1000,33996=>1000,33997=>1000,33998=>1000,33999=>1000,34000=>1000,34001=>1000,34002=>1000,34003=>1000,34004=>1000,
+ 34005=>1000,34006=>1000,34007=>1000,34008=>1000,34009=>1000,34010=>1000,34011=>1000,34012=>1000,34013=>1000,34014=>1000,34015=>1000,34016=>1000,34017=>1000,34018=>1000,34019=>1000,34020=>1000,
+ 34021=>1000,34022=>1000,34023=>1000,34024=>1000,34025=>1000,34026=>1000,34027=>1000,34028=>1000,34029=>1000,34030=>1000,34031=>1000,34032=>1000,34033=>1000,34034=>1000,34035=>1000,34036=>1000,
+ 34037=>1000,34038=>1000,34039=>1000,34040=>1000,34041=>1000,34042=>1000,34043=>1000,34044=>1000,34045=>1000,34046=>1000,34047=>1000,34048=>1000,34049=>1000,34050=>1000,34051=>1000,34052=>1000,
+ 34053=>1000,34054=>1000,34055=>1000,34056=>1000,34057=>1000,34058=>1000,34059=>1000,34060=>1000,34061=>1000,34062=>1000,34063=>1000,34064=>1000,34065=>1000,34066=>1000,34067=>1000,34068=>1000,
+ 34069=>1000,34070=>1000,34071=>1000,34072=>1000,34073=>1000,34074=>1000,34075=>1000,34076=>1000,34077=>1000,34078=>1000,34079=>1000,34080=>1000,34081=>1000,34082=>1000,34083=>1000,34084=>1000,
+ 34085=>1000,34086=>1000,34087=>1000,34088=>1000,34089=>1000,34090=>1000,34091=>1000,34092=>1000,34093=>1000,34094=>1000,34095=>1000,34096=>1000,34097=>1000,34098=>1000,34099=>1000,34100=>1000,
+ 34101=>1000,34102=>1000,34103=>1000,34104=>1000,34105=>1000,34106=>1000,34107=>1000,34108=>1000,34109=>1000,34110=>1000,34111=>1000,34112=>1000,34113=>1000,34114=>1000,34115=>1000,34116=>1000,
+ 34117=>1000,34118=>1000,34119=>1000,34120=>1000,34121=>1000,34122=>1000,34123=>1000,34124=>1000,34125=>1000,34126=>1000,34127=>1000,34128=>1000,34129=>1000,34130=>1000,34131=>1000,34132=>1000,
+ 34133=>1000,34134=>1000,34135=>1000,34136=>1000,34137=>1000,34138=>1000,34139=>1000,34140=>1000,34141=>1000,34142=>1000,34143=>1000,34144=>1000,34145=>1000,34146=>1000,34147=>1000,34148=>1000,
+ 34149=>1000,34150=>1000,34151=>1000,34152=>1000,34153=>1000,34154=>1000,34155=>1000,34156=>1000,34157=>1000,34158=>1000,34159=>1000,34160=>1000,34161=>1000,34162=>1000,34163=>1000,34164=>1000,
+ 34165=>1000,34166=>1000,34167=>1000,34168=>1000,34169=>1000,34170=>1000,34171=>1000,34172=>1000,34173=>1000,34174=>1000,34175=>1000,34176=>1000,34177=>1000,34178=>1000,34179=>1000,34180=>1000,
+ 34181=>1000,34182=>1000,34183=>1000,34184=>1000,34185=>1000,34186=>1000,34187=>1000,34188=>1000,34189=>1000,34190=>1000,34191=>1000,34192=>1000,34193=>1000,34194=>1000,34195=>1000,34196=>1000,
+ 34197=>1000,34198=>1000,34199=>1000,34200=>1000,34201=>1000,34202=>1000,34203=>1000,34204=>1000,34205=>1000,34206=>1000,34207=>1000,34208=>1000,34209=>1000,34210=>1000,34211=>1000,34212=>1000,
+ 34213=>1000,34214=>1000,34215=>1000,34216=>1000,34217=>1000,34218=>1000,34219=>1000,34220=>1000,34221=>1000,34222=>1000,34223=>1000,34224=>1000,34225=>1000,34226=>1000,34227=>1000,34228=>1000,
+ 34229=>1000,34230=>1000,34231=>1000,34232=>1000,34233=>1000,34234=>1000,34235=>1000,34236=>1000,34237=>1000,34238=>1000,34239=>1000,34240=>1000,34241=>1000,34242=>1000,34243=>1000,34244=>1000,
+ 34245=>1000,34246=>1000,34247=>1000,34248=>1000,34249=>1000,34250=>1000,34251=>1000,34252=>1000,34253=>1000,34254=>1000,34255=>1000,34256=>1000,34257=>1000,34258=>1000,34259=>1000,34260=>1000,
+ 34261=>1000,34262=>1000,34263=>1000,34264=>1000,34265=>1000,34266=>1000,34267=>1000,34268=>1000,34269=>1000,34270=>1000,34271=>1000,34272=>1000,34273=>1000,34274=>1000,34275=>1000,34276=>1000,
+ 34277=>1000,34278=>1000,34279=>1000,34280=>1000,34281=>1000,34282=>1000,34283=>1000,34284=>1000,34285=>1000,34286=>1000,34287=>1000,34288=>1000,34289=>1000,34290=>1000,34291=>1000,34292=>1000,
+ 34293=>1000,34294=>1000,34295=>1000,34296=>1000,34297=>1000,34298=>1000,34299=>1000,34300=>1000,34301=>1000,34302=>1000,34303=>1000,34304=>1000,34305=>1000,34306=>1000,34307=>1000,34308=>1000,
+ 34309=>1000,34310=>1000,34311=>1000,34312=>1000,34313=>1000,34314=>1000,34315=>1000,34316=>1000,34317=>1000,34318=>1000,34319=>1000,34320=>1000,34321=>1000,34322=>1000,34323=>1000,34324=>1000,
+ 34325=>1000,34326=>1000,34327=>1000,34328=>1000,34329=>1000,34330=>1000,34331=>1000,34332=>1000,34333=>1000,34334=>1000,34335=>1000,34336=>1000,34337=>1000,34338=>1000,34339=>1000,34340=>1000,
+ 34341=>1000,34342=>1000,34343=>1000,34344=>1000,34345=>1000,34346=>1000,34347=>1000,34348=>1000,34349=>1000,34350=>1000,34351=>1000,34352=>1000,34353=>1000,34354=>1000,34355=>1000,34356=>1000,
+ 34357=>1000,34358=>1000,34359=>1000,34360=>1000,34361=>1000,34362=>1000,34363=>1000,34364=>1000,34365=>1000,34366=>1000,34367=>1000,34368=>1000,34369=>1000,34370=>1000,34371=>1000,34372=>1000,
+ 34373=>1000,34374=>1000,34375=>1000,34376=>1000,34377=>1000,34378=>1000,34379=>1000,34380=>1000,34381=>1000,34382=>1000,34383=>1000,34384=>1000,34385=>1000,34386=>1000,34387=>1000,34388=>1000,
+ 34389=>1000,34390=>1000,34391=>1000,34392=>1000,34393=>1000,34394=>1000,34395=>1000,34396=>1000,34397=>1000,34398=>1000,34399=>1000,34400=>1000,34401=>1000,34402=>1000,34403=>1000,34404=>1000,
+ 34405=>1000,34406=>1000,34407=>1000,34408=>1000,34409=>1000,34410=>1000,34411=>1000,34412=>1000,34413=>1000,34414=>1000,34415=>1000,34416=>1000,34417=>1000,34418=>1000,34419=>1000,34420=>1000,
+ 34421=>1000,34422=>1000,34423=>1000,34424=>1000,34425=>1000,34426=>1000,34427=>1000,34428=>1000,34429=>1000,34430=>1000,34431=>1000,34432=>1000,34433=>1000,34434=>1000,34435=>1000,34436=>1000,
+ 34437=>1000,34438=>1000,34439=>1000,34440=>1000,34441=>1000,34442=>1000,34443=>1000,34444=>1000,34445=>1000,34446=>1000,34447=>1000,34448=>1000,34449=>1000,34450=>1000,34451=>1000,34452=>1000,
+ 34453=>1000,34454=>1000,34455=>1000,34456=>1000,34457=>1000,34458=>1000,34459=>1000,34460=>1000,34461=>1000,34462=>1000,34463=>1000,34464=>1000,34465=>1000,34466=>1000,34467=>1000,34468=>1000,
+ 34469=>1000,34470=>1000,34471=>1000,34472=>1000,34473=>1000,34474=>1000,34475=>1000,34476=>1000,34477=>1000,34478=>1000,34479=>1000,34480=>1000,34481=>1000,34482=>1000,34483=>1000,34484=>1000,
+ 34485=>1000,34486=>1000,34487=>1000,34488=>1000,34489=>1000,34490=>1000,34491=>1000,34492=>1000,34493=>1000,34494=>1000,34495=>1000,34496=>1000,34497=>1000,34498=>1000,34499=>1000,34500=>1000,
+ 34501=>1000,34502=>1000,34503=>1000,34504=>1000,34505=>1000,34506=>1000,34507=>1000,34508=>1000,34509=>1000,34510=>1000,34511=>1000,34512=>1000,34513=>1000,34514=>1000,34515=>1000,34516=>1000,
+ 34517=>1000,34518=>1000,34519=>1000,34520=>1000,34521=>1000,34522=>1000,34523=>1000,34524=>1000,34525=>1000,34526=>1000,34527=>1000,34528=>1000,34529=>1000,34530=>1000,34531=>1000,34532=>1000,
+ 34533=>1000,34534=>1000,34535=>1000,34536=>1000,34537=>1000,34538=>1000,34539=>1000,34540=>1000,34541=>1000,34542=>1000,34543=>1000,34544=>1000,34545=>1000,34546=>1000,34547=>1000,34548=>1000,
+ 34549=>1000,34550=>1000,34551=>1000,34552=>1000,34553=>1000,34554=>1000,34555=>1000,34556=>1000,34557=>1000,34558=>1000,34559=>1000,34560=>1000,34561=>1000,34562=>1000,34563=>1000,34564=>1000,
+ 34565=>1000,34566=>1000,34567=>1000,34568=>1000,34569=>1000,34570=>1000,34571=>1000,34572=>1000,34573=>1000,34574=>1000,34575=>1000,34576=>1000,34577=>1000,34578=>1000,34579=>1000,34580=>1000,
+ 34581=>1000,34582=>1000,34583=>1000,34584=>1000,34585=>1000,34586=>1000,34587=>1000,34588=>1000,34589=>1000,34590=>1000,34591=>1000,34592=>1000,34593=>1000,34594=>1000,34595=>1000,34596=>1000,
+ 34597=>1000,34598=>1000,34599=>1000,34600=>1000,34601=>1000,34602=>1000,34603=>1000,34604=>1000,34605=>1000,34606=>1000,34607=>1000,34608=>1000,34609=>1000,34610=>1000,34611=>1000,34612=>1000,
+ 34613=>1000,34614=>1000,34615=>1000,34616=>1000,34617=>1000,34618=>1000,34619=>1000,34620=>1000,34621=>1000,34622=>1000,34623=>1000,34624=>1000,34625=>1000,34626=>1000,34627=>1000,34628=>1000,
+ 34629=>1000,34630=>1000,34631=>1000,34632=>1000,34633=>1000,34634=>1000,34635=>1000,34636=>1000,34637=>1000,34638=>1000,34639=>1000,34640=>1000,34641=>1000,34642=>1000,34643=>1000,34644=>1000,
+ 34645=>1000,34646=>1000,34647=>1000,34648=>1000,34649=>1000,34650=>1000,34651=>1000,34652=>1000,34653=>1000,34654=>1000,34655=>1000,34656=>1000,34657=>1000,34658=>1000,34659=>1000,34660=>1000,
+ 34661=>1000,34662=>1000,34663=>1000,34664=>1000,34665=>1000,34666=>1000,34667=>1000,34668=>1000,34669=>1000,34670=>1000,34671=>1000,34672=>1000,34673=>1000,34674=>1000,34675=>1000,34676=>1000,
+ 34677=>1000,34678=>1000,34679=>1000,34680=>1000,34681=>1000,34682=>1000,34683=>1000,34684=>1000,34685=>1000,34686=>1000,34687=>1000,34688=>1000,34689=>1000,34690=>1000,34691=>1000,34692=>1000,
+ 34693=>1000,34694=>1000,34695=>1000,34696=>1000,34697=>1000,34698=>1000,34699=>1000,34700=>1000,34701=>1000,34702=>1000,34703=>1000,34704=>1000,34705=>1000,34706=>1000,34707=>1000,34708=>1000,
+ 34709=>1000,34710=>1000,34711=>1000,34712=>1000,34713=>1000,34714=>1000,34715=>1000,34716=>1000,34717=>1000,34718=>1000,34719=>1000,34720=>1000,34721=>1000,34722=>1000,34723=>1000,34724=>1000,
+ 34725=>1000,34726=>1000,34727=>1000,34728=>1000,34729=>1000,34730=>1000,34731=>1000,34732=>1000,34733=>1000,34734=>1000,34735=>1000,34736=>1000,34737=>1000,34738=>1000,34739=>1000,34740=>1000,
+ 34741=>1000,34742=>1000,34743=>1000,34744=>1000,34745=>1000,34746=>1000,34747=>1000,34748=>1000,34749=>1000,34750=>1000,34751=>1000,34752=>1000,34753=>1000,34754=>1000,34755=>1000,34756=>1000,
+ 34757=>1000,34758=>1000,34759=>1000,34760=>1000,34761=>1000,34762=>1000,34763=>1000,34764=>1000,34765=>1000,34766=>1000,34767=>1000,34768=>1000,34769=>1000,34770=>1000,34771=>1000,34772=>1000,
+ 34773=>1000,34774=>1000,34775=>1000,34776=>1000,34777=>1000,34778=>1000,34779=>1000,34780=>1000,34781=>1000,34782=>1000,34783=>1000,34784=>1000,34785=>1000,34786=>1000,34787=>1000,34788=>1000,
+ 34789=>1000,34790=>1000,34791=>1000,34792=>1000,34793=>1000,34794=>1000,34795=>1000,34796=>1000,34797=>1000,34798=>1000,34799=>1000,34800=>1000,34801=>1000,34802=>1000,34803=>1000,34804=>1000,
+ 34805=>1000,34806=>1000,34807=>1000,34808=>1000,34809=>1000,34810=>1000,34811=>1000,34812=>1000,34813=>1000,34814=>1000,34815=>1000,34816=>1000,34817=>1000,34818=>1000,34819=>1000,34820=>1000,
+ 34821=>1000,34822=>1000,34823=>1000,34824=>1000,34825=>1000,34826=>1000,34827=>1000,34828=>1000,34829=>1000,34830=>1000,34831=>1000,34832=>1000,34833=>1000,34834=>1000,34835=>1000,34836=>1000,
+ 34837=>1000,34838=>1000,34839=>1000,34840=>1000,34841=>1000,34842=>1000,34843=>1000,34844=>1000,34845=>1000,34846=>1000,34847=>1000,34848=>1000,34849=>1000,34850=>1000,34851=>1000,34852=>1000,
+ 34853=>1000,34854=>1000,34855=>1000,34856=>1000,34857=>1000,34858=>1000,34859=>1000,34860=>1000,34861=>1000,34862=>1000,34863=>1000,34864=>1000,34865=>1000,34866=>1000,34867=>1000,34868=>1000,
+ 34869=>1000,34870=>1000,34871=>1000,34872=>1000,34873=>1000,34874=>1000,34875=>1000,34876=>1000,34877=>1000,34878=>1000,34879=>1000,34880=>1000,34881=>1000,34882=>1000,34883=>1000,34884=>1000,
+ 34885=>1000,34886=>1000,34887=>1000,34888=>1000,34889=>1000,34890=>1000,34891=>1000,34892=>1000,34893=>1000,34894=>1000,34895=>1000,34896=>1000,34897=>1000,34898=>1000,34899=>1000,34900=>1000,
+ 34901=>1000,34902=>1000,34903=>1000,34904=>1000,34905=>1000,34906=>1000,34907=>1000,34908=>1000,34909=>1000,34910=>1000,34911=>1000,34912=>1000,34913=>1000,34914=>1000,34915=>1000,34916=>1000,
+ 34917=>1000,34918=>1000,34919=>1000,34920=>1000,34921=>1000,34922=>1000,34923=>1000,34924=>1000,34925=>1000,34926=>1000,34927=>1000,34928=>1000,34929=>1000,34930=>1000,34931=>1000,34932=>1000,
+ 34933=>1000,34934=>1000,34935=>1000,34936=>1000,34937=>1000,34938=>1000,34939=>1000,34940=>1000,34941=>1000,34942=>1000,34943=>1000,34944=>1000,34945=>1000,34946=>1000,34947=>1000,34948=>1000,
+ 34949=>1000,34950=>1000,34951=>1000,34952=>1000,34953=>1000,34954=>1000,34955=>1000,34956=>1000,34957=>1000,34958=>1000,34959=>1000,34960=>1000,34961=>1000,34962=>1000,34963=>1000,34964=>1000,
+ 34965=>1000,34966=>1000,34967=>1000,34968=>1000,34969=>1000,34970=>1000,34971=>1000,34972=>1000,34973=>1000,34974=>1000,34975=>1000,34976=>1000,34977=>1000,34978=>1000,34979=>1000,34980=>1000,
+ 34981=>1000,34982=>1000,34983=>1000,34984=>1000,34985=>1000,34986=>1000,34987=>1000,34988=>1000,34989=>1000,34990=>1000,34991=>1000,34992=>1000,34993=>1000,34994=>1000,34995=>1000,34996=>1000,
+ 34997=>1000,34998=>1000,34999=>1000,35000=>1000,35001=>1000,35002=>1000,35003=>1000,35004=>1000,35005=>1000,35006=>1000,35007=>1000,35008=>1000,35009=>1000,35010=>1000,35011=>1000,35012=>1000,
+ 35013=>1000,35014=>1000,35015=>1000,35016=>1000,35017=>1000,35018=>1000,35019=>1000,35020=>1000,35021=>1000,35022=>1000,35023=>1000,35024=>1000,35025=>1000,35026=>1000,35027=>1000,35028=>1000,
+ 35029=>1000,35030=>1000,35031=>1000,35032=>1000,35033=>1000,35034=>1000,35035=>1000,35036=>1000,35037=>1000,35038=>1000,35039=>1000,35040=>1000,35041=>1000,35042=>1000,35043=>1000,35044=>1000,
+ 35045=>1000,35046=>1000,35047=>1000,35048=>1000,35049=>1000,35050=>1000,35051=>1000,35052=>1000,35053=>1000,35054=>1000,35055=>1000,35056=>1000,35057=>1000,35058=>1000,35059=>1000,35060=>1000,
+ 35061=>1000,35062=>1000,35063=>1000,35064=>1000,35065=>1000,35066=>1000,35067=>1000,35068=>1000,35069=>1000,35070=>1000,35071=>1000,35072=>1000,35073=>1000,35074=>1000,35075=>1000,35076=>1000,
+ 35077=>1000,35078=>1000,35079=>1000,35080=>1000,35081=>1000,35082=>1000,35083=>1000,35084=>1000,35085=>1000,35086=>1000,35087=>1000,35088=>1000,35089=>1000,35090=>1000,35091=>1000,35092=>1000,
+ 35093=>1000,35094=>1000,35095=>1000,35096=>1000,35097=>1000,35098=>1000,35099=>1000,35100=>1000,35101=>1000,35102=>1000,35103=>1000,35104=>1000,35105=>1000,35106=>1000,35107=>1000,35108=>1000,
+ 35109=>1000,35110=>1000,35111=>1000,35112=>1000,35113=>1000,35114=>1000,35115=>1000,35116=>1000,35117=>1000,35118=>1000,35119=>1000,35120=>1000,35121=>1000,35122=>1000,35123=>1000,35124=>1000,
+ 35125=>1000,35126=>1000,35127=>1000,35128=>1000,35129=>1000,35130=>1000,35131=>1000,35132=>1000,35133=>1000,35134=>1000,35135=>1000,35136=>1000,35137=>1000,35138=>1000,35139=>1000,35140=>1000,
+ 35141=>1000,35142=>1000,35143=>1000,35144=>1000,35145=>1000,35146=>1000,35147=>1000,35148=>1000,35149=>1000,35150=>1000,35151=>1000,35152=>1000,35153=>1000,35154=>1000,35155=>1000,35156=>1000,
+ 35157=>1000,35158=>1000,35159=>1000,35160=>1000,35161=>1000,35162=>1000,35163=>1000,35164=>1000,35165=>1000,35166=>1000,35167=>1000,35168=>1000,35169=>1000,35170=>1000,35171=>1000,35172=>1000,
+ 35173=>1000,35174=>1000,35175=>1000,35176=>1000,35177=>1000,35178=>1000,35179=>1000,35180=>1000,35181=>1000,35182=>1000,35183=>1000,35184=>1000,35185=>1000,35186=>1000,35187=>1000,35188=>1000,
+ 35189=>1000,35190=>1000,35191=>1000,35192=>1000,35193=>1000,35194=>1000,35195=>1000,35196=>1000,35197=>1000,35198=>1000,35199=>1000,35200=>1000,35201=>1000,35202=>1000,35203=>1000,35204=>1000,
+ 35205=>1000,35206=>1000,35207=>1000,35208=>1000,35209=>1000,35210=>1000,35211=>1000,35212=>1000,35213=>1000,35214=>1000,35215=>1000,35216=>1000,35217=>1000,35218=>1000,35219=>1000,35220=>1000,
+ 35221=>1000,35222=>1000,35223=>1000,35224=>1000,35225=>1000,35226=>1000,35227=>1000,35228=>1000,35229=>1000,35230=>1000,35231=>1000,35232=>1000,35233=>1000,35234=>1000,35235=>1000,35236=>1000,
+ 35237=>1000,35238=>1000,35239=>1000,35240=>1000,35241=>1000,35242=>1000,35243=>1000,35244=>1000,35245=>1000,35246=>1000,35247=>1000,35248=>1000,35249=>1000,35250=>1000,35251=>1000,35252=>1000,
+ 35253=>1000,35254=>1000,35255=>1000,35256=>1000,35257=>1000,35258=>1000,35259=>1000,35260=>1000,35261=>1000,35262=>1000,35263=>1000,35264=>1000,35265=>1000,35266=>1000,35267=>1000,35268=>1000,
+ 35269=>1000,35270=>1000,35271=>1000,35272=>1000,35273=>1000,35274=>1000,35275=>1000,35276=>1000,35277=>1000,35278=>1000,35279=>1000,35280=>1000,35281=>1000,35282=>1000,35283=>1000,35284=>1000,
+ 35285=>1000,35286=>1000,35287=>1000,35288=>1000,35289=>1000,35290=>1000,35291=>1000,35292=>1000,35293=>1000,35294=>1000,35295=>1000,35296=>1000,35297=>1000,35298=>1000,35299=>1000,35300=>1000,
+ 35301=>1000,35302=>1000,35303=>1000,35304=>1000,35305=>1000,35306=>1000,35307=>1000,35308=>1000,35309=>1000,35310=>1000,35311=>1000,35312=>1000,35313=>1000,35314=>1000,35315=>1000,35316=>1000,
+ 35317=>1000,35318=>1000,35319=>1000,35320=>1000,35321=>1000,35322=>1000,35323=>1000,35324=>1000,35325=>1000,35326=>1000,35327=>1000,35328=>1000,35329=>1000,35330=>1000,35331=>1000,35332=>1000,
+ 35333=>1000,35334=>1000,35335=>1000,35336=>1000,35337=>1000,35338=>1000,35339=>1000,35340=>1000,35341=>1000,35342=>1000,35343=>1000,35344=>1000,35345=>1000,35346=>1000,35347=>1000,35348=>1000,
+ 35349=>1000,35350=>1000,35351=>1000,35352=>1000,35353=>1000,35354=>1000,35355=>1000,35356=>1000,35357=>1000,35358=>1000,35359=>1000,35360=>1000,35361=>1000,35362=>1000,35363=>1000,35364=>1000,
+ 35365=>1000,35366=>1000,35367=>1000,35368=>1000,35369=>1000,35370=>1000,35371=>1000,35372=>1000,35373=>1000,35374=>1000,35375=>1000,35376=>1000,35377=>1000,35378=>1000,35379=>1000,35380=>1000,
+ 35381=>1000,35382=>1000,35383=>1000,35384=>1000,35385=>1000,35386=>1000,35387=>1000,35388=>1000,35389=>1000,35390=>1000,35391=>1000,35392=>1000,35393=>1000,35394=>1000,35395=>1000,35396=>1000,
+ 35397=>1000,35398=>1000,35399=>1000,35400=>1000,35401=>1000,35402=>1000,35403=>1000,35404=>1000,35405=>1000,35406=>1000,35407=>1000,35408=>1000,35409=>1000,35410=>1000,35411=>1000,35412=>1000,
+ 35413=>1000,35414=>1000,35415=>1000,35416=>1000,35417=>1000,35418=>1000,35419=>1000,35420=>1000,35421=>1000,35422=>1000,35423=>1000,35424=>1000,35425=>1000,35426=>1000,35427=>1000,35428=>1000,
+ 35429=>1000,35430=>1000,35431=>1000,35432=>1000,35433=>1000,35434=>1000,35435=>1000,35436=>1000,35437=>1000,35438=>1000,35439=>1000,35440=>1000,35441=>1000,35442=>1000,35443=>1000,35444=>1000,
+ 35445=>1000,35446=>1000,35447=>1000,35448=>1000,35449=>1000,35450=>1000,35451=>1000,35452=>1000,35453=>1000,35454=>1000,35455=>1000,35456=>1000,35457=>1000,35458=>1000,35459=>1000,35460=>1000,
+ 35461=>1000,35462=>1000,35463=>1000,35464=>1000,35465=>1000,35466=>1000,35467=>1000,35468=>1000,35469=>1000,35470=>1000,35471=>1000,35472=>1000,35473=>1000,35474=>1000,35475=>1000,35476=>1000,
+ 35477=>1000,35478=>1000,35479=>1000,35480=>1000,35481=>1000,35482=>1000,35483=>1000,35484=>1000,35485=>1000,35486=>1000,35487=>1000,35488=>1000,35489=>1000,35490=>1000,35491=>1000,35492=>1000,
+ 35493=>1000,35494=>1000,35495=>1000,35496=>1000,35497=>1000,35498=>1000,35499=>1000,35500=>1000,35501=>1000,35502=>1000,35503=>1000,35504=>1000,35505=>1000,35506=>1000,35507=>1000,35508=>1000,
+ 35509=>1000,35510=>1000,35511=>1000,35512=>1000,35513=>1000,35514=>1000,35515=>1000,35516=>1000,35517=>1000,35518=>1000,35519=>1000,35520=>1000,35521=>1000,35522=>1000,35523=>1000,35524=>1000,
+ 35525=>1000,35526=>1000,35527=>1000,35528=>1000,35529=>1000,35530=>1000,35531=>1000,35532=>1000,35533=>1000,35534=>1000,35535=>1000,35536=>1000,35537=>1000,35538=>1000,35539=>1000,35540=>1000,
+ 35541=>1000,35542=>1000,35543=>1000,35544=>1000,35545=>1000,35546=>1000,35547=>1000,35548=>1000,35549=>1000,35550=>1000,35551=>1000,35552=>1000,35553=>1000,35554=>1000,35555=>1000,35556=>1000,
+ 35557=>1000,35558=>1000,35559=>1000,35560=>1000,35561=>1000,35562=>1000,35563=>1000,35564=>1000,35565=>1000,35566=>1000,35567=>1000,35568=>1000,35569=>1000,35570=>1000,35571=>1000,35572=>1000,
+ 35573=>1000,35574=>1000,35575=>1000,35576=>1000,35577=>1000,35578=>1000,35579=>1000,35580=>1000,35581=>1000,35582=>1000,35583=>1000,35584=>1000,35585=>1000,35586=>1000,35587=>1000,35588=>1000,
+ 35589=>1000,35590=>1000,35591=>1000,35592=>1000,35593=>1000,35594=>1000,35595=>1000,35596=>1000,35597=>1000,35598=>1000,35599=>1000,35600=>1000,35601=>1000,35602=>1000,35603=>1000,35604=>1000,
+ 35605=>1000,35606=>1000,35607=>1000,35608=>1000,35609=>1000,35610=>1000,35611=>1000,35612=>1000,35613=>1000,35614=>1000,35615=>1000,35616=>1000,35617=>1000,35618=>1000,35619=>1000,35620=>1000,
+ 35621=>1000,35622=>1000,35623=>1000,35624=>1000,35625=>1000,35626=>1000,35627=>1000,35628=>1000,35629=>1000,35630=>1000,35631=>1000,35632=>1000,35633=>1000,35634=>1000,35635=>1000,35636=>1000,
+ 35637=>1000,35638=>1000,35639=>1000,35640=>1000,35641=>1000,35642=>1000,35643=>1000,35644=>1000,35645=>1000,35646=>1000,35647=>1000,35648=>1000,35649=>1000,35650=>1000,35651=>1000,35652=>1000,
+ 35653=>1000,35654=>1000,35655=>1000,35656=>1000,35657=>1000,35658=>1000,35659=>1000,35660=>1000,35661=>1000,35662=>1000,35663=>1000,35664=>1000,35665=>1000,35666=>1000,35667=>1000,35668=>1000,
+ 35669=>1000,35670=>1000,35671=>1000,35672=>1000,35673=>1000,35674=>1000,35675=>1000,35676=>1000,35677=>1000,35678=>1000,35679=>1000,35680=>1000,35681=>1000,35682=>1000,35683=>1000,35684=>1000,
+ 35685=>1000,35686=>1000,35687=>1000,35688=>1000,35689=>1000,35690=>1000,35691=>1000,35692=>1000,35693=>1000,35694=>1000,35695=>1000,35696=>1000,35697=>1000,35698=>1000,35699=>1000,35700=>1000,
+ 35701=>1000,35702=>1000,35703=>1000,35704=>1000,35705=>1000,35706=>1000,35707=>1000,35708=>1000,35709=>1000,35710=>1000,35711=>1000,35712=>1000,35713=>1000,35714=>1000,35715=>1000,35716=>1000,
+ 35717=>1000,35718=>1000,35719=>1000,35720=>1000,35721=>1000,35722=>1000,35723=>1000,35724=>1000,35725=>1000,35726=>1000,35727=>1000,35728=>1000,35729=>1000,35730=>1000,35731=>1000,35732=>1000,
+ 35733=>1000,35734=>1000,35735=>1000,35736=>1000,35737=>1000,35738=>1000,35739=>1000,35740=>1000,35741=>1000,35742=>1000,35743=>1000,35744=>1000,35745=>1000,35746=>1000,35747=>1000,35748=>1000,
+ 35749=>1000,35750=>1000,35751=>1000,35752=>1000,35753=>1000,35754=>1000,35755=>1000,35756=>1000,35757=>1000,35758=>1000,35759=>1000,35760=>1000,35761=>1000,35762=>1000,35763=>1000,35764=>1000,
+ 35765=>1000,35766=>1000,35767=>1000,35768=>1000,35769=>1000,35770=>1000,35771=>1000,35772=>1000,35773=>1000,35774=>1000,35775=>1000,35776=>1000,35777=>1000,35778=>1000,35779=>1000,35780=>1000,
+ 35781=>1000,35782=>1000,35783=>1000,35784=>1000,35785=>1000,35786=>1000,35787=>1000,35788=>1000,35789=>1000,35790=>1000,35791=>1000,35792=>1000,35793=>1000,35794=>1000,35795=>1000,35796=>1000,
+ 35797=>1000,35798=>1000,35799=>1000,35800=>1000,35801=>1000,35802=>1000,35803=>1000,35804=>1000,35805=>1000,35806=>1000,35807=>1000,35808=>1000,35809=>1000,35810=>1000,35811=>1000,35812=>1000,
+ 35813=>1000,35814=>1000,35815=>1000,35816=>1000,35817=>1000,35818=>1000,35819=>1000,35820=>1000,35821=>1000,35822=>1000,35823=>1000,35824=>1000,35825=>1000,35826=>1000,35827=>1000,35828=>1000,
+ 35829=>1000,35830=>1000,35831=>1000,35832=>1000,35833=>1000,35834=>1000,35835=>1000,35836=>1000,35837=>1000,35838=>1000,35839=>1000,35840=>1000,35841=>1000,35842=>1000,35843=>1000,35844=>1000,
+ 35845=>1000,35846=>1000,35847=>1000,35848=>1000,35849=>1000,35850=>1000,35851=>1000,35852=>1000,35853=>1000,35854=>1000,35855=>1000,35856=>1000,35857=>1000,35858=>1000,35859=>1000,35860=>1000,
+ 35861=>1000,35862=>1000,35863=>1000,35864=>1000,35865=>1000,35866=>1000,35867=>1000,35868=>1000,35869=>1000,35870=>1000,35871=>1000,35872=>1000,35873=>1000,35874=>1000,35875=>1000,35876=>1000,
+ 35877=>1000,35878=>1000,35879=>1000,35880=>1000,35881=>1000,35882=>1000,35883=>1000,35884=>1000,35885=>1000,35886=>1000,35887=>1000,35888=>1000,35889=>1000,35890=>1000,35891=>1000,35892=>1000,
+ 35893=>1000,35894=>1000,35895=>1000,35896=>1000,35897=>1000,35898=>1000,35899=>1000,35900=>1000,35901=>1000,35902=>1000,35903=>1000,35904=>1000,35905=>1000,35906=>1000,35907=>1000,35908=>1000,
+ 35909=>1000,35910=>1000,35911=>1000,35912=>1000,35913=>1000,35914=>1000,35915=>1000,35916=>1000,35917=>1000,35918=>1000,35919=>1000,35920=>1000,35921=>1000,35922=>1000,35923=>1000,35924=>1000,
+ 35925=>1000,35926=>1000,35927=>1000,35928=>1000,35929=>1000,35930=>1000,35931=>1000,35932=>1000,35933=>1000,35934=>1000,35935=>1000,35936=>1000,35937=>1000,35938=>1000,35939=>1000,35940=>1000,
+ 35941=>1000,35942=>1000,35943=>1000,35944=>1000,35945=>1000,35946=>1000,35947=>1000,35948=>1000,35949=>1000,35950=>1000,35951=>1000,35952=>1000,35953=>1000,35954=>1000,35955=>1000,35956=>1000,
+ 35957=>1000,35958=>1000,35959=>1000,35960=>1000,35961=>1000,35962=>1000,35963=>1000,35964=>1000,35965=>1000,35966=>1000,35967=>1000,35968=>1000,35969=>1000,35970=>1000,35971=>1000,35972=>1000,
+ 35973=>1000,35974=>1000,35975=>1000,35976=>1000,35977=>1000,35978=>1000,35979=>1000,35980=>1000,35981=>1000,35982=>1000,35983=>1000,35984=>1000,35985=>1000,35986=>1000,35987=>1000,35988=>1000,
+ 35989=>1000,35990=>1000,35991=>1000,35992=>1000,35993=>1000,35994=>1000,35995=>1000,35996=>1000,35997=>1000,35998=>1000,35999=>1000,36000=>1000,36001=>1000,36002=>1000,36003=>1000,36004=>1000,
+ 36005=>1000,36006=>1000,36007=>1000,36008=>1000,36009=>1000,36010=>1000,36011=>1000,36012=>1000,36013=>1000,36014=>1000,36015=>1000,36016=>1000,36017=>1000,36018=>1000,36019=>1000,36020=>1000,
+ 36021=>1000,36022=>1000,36023=>1000,36024=>1000,36025=>1000,36026=>1000,36027=>1000,36028=>1000,36029=>1000,36030=>1000,36031=>1000,36032=>1000,36033=>1000,36034=>1000,36035=>1000,36036=>1000,
+ 36037=>1000,36038=>1000,36039=>1000,36040=>1000,36041=>1000,36042=>1000,36043=>1000,36044=>1000,36045=>1000,36046=>1000,36047=>1000,36048=>1000,36049=>1000,36050=>1000,36051=>1000,36052=>1000,
+ 36053=>1000,36054=>1000,36055=>1000,36056=>1000,36057=>1000,36058=>1000,36059=>1000,36060=>1000,36061=>1000,36062=>1000,36063=>1000,36064=>1000,36065=>1000,36066=>1000,36067=>1000,36068=>1000,
+ 36069=>1000,36070=>1000,36071=>1000,36072=>1000,36073=>1000,36074=>1000,36075=>1000,36076=>1000,36077=>1000,36078=>1000,36079=>1000,36080=>1000,36081=>1000,36082=>1000,36083=>1000,36084=>1000,
+ 36085=>1000,36086=>1000,36087=>1000,36088=>1000,36089=>1000,36090=>1000,36091=>1000,36092=>1000,36093=>1000,36094=>1000,36095=>1000,36096=>1000,36097=>1000,36098=>1000,36099=>1000,36100=>1000,
+ 36101=>1000,36102=>1000,36103=>1000,36104=>1000,36105=>1000,36106=>1000,36107=>1000,36108=>1000,36109=>1000,36110=>1000,36111=>1000,36112=>1000,36113=>1000,36114=>1000,36115=>1000,36116=>1000,
+ 36117=>1000,36118=>1000,36119=>1000,36120=>1000,36121=>1000,36122=>1000,36123=>1000,36124=>1000,36125=>1000,36126=>1000,36127=>1000,36128=>1000,36129=>1000,36130=>1000,36131=>1000,36132=>1000,
+ 36133=>1000,36134=>1000,36135=>1000,36136=>1000,36137=>1000,36138=>1000,36139=>1000,36140=>1000,36141=>1000,36142=>1000,36143=>1000,36144=>1000,36145=>1000,36146=>1000,36147=>1000,36148=>1000,
+ 36149=>1000,36150=>1000,36151=>1000,36152=>1000,36153=>1000,36154=>1000,36155=>1000,36156=>1000,36157=>1000,36158=>1000,36159=>1000,36160=>1000,36161=>1000,36162=>1000,36163=>1000,36164=>1000,
+ 36165=>1000,36166=>1000,36167=>1000,36168=>1000,36169=>1000,36170=>1000,36171=>1000,36172=>1000,36173=>1000,36174=>1000,36175=>1000,36176=>1000,36177=>1000,36178=>1000,36179=>1000,36180=>1000,
+ 36181=>1000,36182=>1000,36183=>1000,36184=>1000,36185=>1000,36186=>1000,36187=>1000,36188=>1000,36189=>1000,36190=>1000,36191=>1000,36192=>1000,36193=>1000,36194=>1000,36195=>1000,36196=>1000,
+ 36197=>1000,36198=>1000,36199=>1000,36200=>1000,36201=>1000,36202=>1000,36203=>1000,36204=>1000,36205=>1000,36206=>1000,36207=>1000,36208=>1000,36209=>1000,36210=>1000,36211=>1000,36212=>1000,
+ 36213=>1000,36214=>1000,36215=>1000,36216=>1000,36217=>1000,36218=>1000,36219=>1000,36220=>1000,36221=>1000,36222=>1000,36223=>1000,36224=>1000,36225=>1000,36226=>1000,36227=>1000,36228=>1000,
+ 36229=>1000,36230=>1000,36231=>1000,36232=>1000,36233=>1000,36234=>1000,36235=>1000,36236=>1000,36237=>1000,36238=>1000,36239=>1000,36240=>1000,36241=>1000,36242=>1000,36243=>1000,36244=>1000,
+ 36245=>1000,36246=>1000,36247=>1000,36248=>1000,36249=>1000,36250=>1000,36251=>1000,36252=>1000,36253=>1000,36254=>1000,36255=>1000,36256=>1000,36257=>1000,36258=>1000,36259=>1000,36260=>1000,
+ 36261=>1000,36262=>1000,36263=>1000,36264=>1000,36265=>1000,36266=>1000,36267=>1000,36268=>1000,36269=>1000,36270=>1000,36271=>1000,36272=>1000,36273=>1000,36274=>1000,36275=>1000,36276=>1000,
+ 36277=>1000,36278=>1000,36279=>1000,36280=>1000,36281=>1000,36282=>1000,36283=>1000,36284=>1000,36285=>1000,36286=>1000,36287=>1000,36288=>1000,36289=>1000,36290=>1000,36291=>1000,36292=>1000,
+ 36293=>1000,36294=>1000,36295=>1000,36296=>1000,36297=>1000,36298=>1000,36299=>1000,36300=>1000,36301=>1000,36302=>1000,36303=>1000,36304=>1000,36305=>1000,36306=>1000,36307=>1000,36308=>1000,
+ 36309=>1000,36310=>1000,36311=>1000,36312=>1000,36313=>1000,36314=>1000,36315=>1000,36316=>1000,36317=>1000,36318=>1000,36319=>1000,36320=>1000,36321=>1000,36322=>1000,36323=>1000,36324=>1000,
+ 36325=>1000,36326=>1000,36327=>1000,36328=>1000,36329=>1000,36330=>1000,36331=>1000,36332=>1000,36333=>1000,36334=>1000,36335=>1000,36336=>1000,36337=>1000,36338=>1000,36339=>1000,36340=>1000,
+ 36341=>1000,36342=>1000,36343=>1000,36344=>1000,36345=>1000,36346=>1000,36347=>1000,36348=>1000,36349=>1000,36350=>1000,36351=>1000,36352=>1000,36353=>1000,36354=>1000,36355=>1000,36356=>1000,
+ 36357=>1000,36358=>1000,36359=>1000,36360=>1000,36361=>1000,36362=>1000,36363=>1000,36364=>1000,36365=>1000,36366=>1000,36367=>1000,36368=>1000,36369=>1000,36370=>1000,36371=>1000,36372=>1000,
+ 36373=>1000,36374=>1000,36375=>1000,36376=>1000,36377=>1000,36378=>1000,36379=>1000,36380=>1000,36381=>1000,36382=>1000,36383=>1000,36384=>1000,36385=>1000,36386=>1000,36387=>1000,36388=>1000,
+ 36389=>1000,36390=>1000,36391=>1000,36392=>1000,36393=>1000,36394=>1000,36395=>1000,36396=>1000,36397=>1000,36398=>1000,36399=>1000,36400=>1000,36401=>1000,36402=>1000,36403=>1000,36404=>1000,
+ 36405=>1000,36406=>1000,36407=>1000,36408=>1000,36409=>1000,36410=>1000,36411=>1000,36412=>1000,36413=>1000,36414=>1000,36415=>1000,36416=>1000,36417=>1000,36418=>1000,36419=>1000,36420=>1000,
+ 36421=>1000,36422=>1000,36423=>1000,36424=>1000,36425=>1000,36426=>1000,36427=>1000,36428=>1000,36429=>1000,36430=>1000,36431=>1000,36432=>1000,36433=>1000,36434=>1000,36435=>1000,36436=>1000,
+ 36437=>1000,36438=>1000,36439=>1000,36440=>1000,36441=>1000,36442=>1000,36443=>1000,36444=>1000,36445=>1000,36446=>1000,36447=>1000,36448=>1000,36449=>1000,36450=>1000,36451=>1000,36452=>1000,
+ 36453=>1000,36454=>1000,36455=>1000,36456=>1000,36457=>1000,36458=>1000,36459=>1000,36460=>1000,36461=>1000,36462=>1000,36463=>1000,36464=>1000,36465=>1000,36466=>1000,36467=>1000,36468=>1000,
+ 36469=>1000,36470=>1000,36471=>1000,36472=>1000,36473=>1000,36474=>1000,36475=>1000,36476=>1000,36477=>1000,36478=>1000,36479=>1000,36480=>1000,36481=>1000,36482=>1000,36483=>1000,36484=>1000,
+ 36485=>1000,36486=>1000,36487=>1000,36488=>1000,36489=>1000,36490=>1000,36491=>1000,36492=>1000,36493=>1000,36494=>1000,36495=>1000,36496=>1000,36497=>1000,36498=>1000,36499=>1000,36500=>1000,
+ 36501=>1000,36502=>1000,36503=>1000,36504=>1000,36505=>1000,36506=>1000,36507=>1000,36508=>1000,36509=>1000,36510=>1000,36511=>1000,36512=>1000,36513=>1000,36514=>1000,36515=>1000,36516=>1000,
+ 36517=>1000,36518=>1000,36519=>1000,36520=>1000,36521=>1000,36522=>1000,36523=>1000,36524=>1000,36525=>1000,36526=>1000,36527=>1000,36528=>1000,36529=>1000,36530=>1000,36531=>1000,36532=>1000,
+ 36533=>1000,36534=>1000,36535=>1000,36536=>1000,36537=>1000,36538=>1000,36539=>1000,36540=>1000,36541=>1000,36542=>1000,36543=>1000,36544=>1000,36545=>1000,36546=>1000,36547=>1000,36548=>1000,
+ 36549=>1000,36550=>1000,36551=>1000,36552=>1000,36553=>1000,36554=>1000,36555=>1000,36556=>1000,36557=>1000,36558=>1000,36559=>1000,36560=>1000,36561=>1000,36562=>1000,36563=>1000,36564=>1000,
+ 36565=>1000,36566=>1000,36567=>1000,36568=>1000,36569=>1000,36570=>1000,36571=>1000,36572=>1000,36573=>1000,36574=>1000,36575=>1000,36576=>1000,36577=>1000,36578=>1000,36579=>1000,36580=>1000,
+ 36581=>1000,36582=>1000,36583=>1000,36584=>1000,36585=>1000,36586=>1000,36587=>1000,36588=>1000,36589=>1000,36590=>1000,36591=>1000,36592=>1000,36593=>1000,36594=>1000,36595=>1000,36596=>1000,
+ 36597=>1000,36598=>1000,36599=>1000,36600=>1000,36601=>1000,36602=>1000,36603=>1000,36604=>1000,36605=>1000,36606=>1000,36607=>1000,36608=>1000,36609=>1000,36610=>1000,36611=>1000,36612=>1000,
+ 36613=>1000,36614=>1000,36615=>1000,36616=>1000,36617=>1000,36618=>1000,36619=>1000,36620=>1000,36621=>1000,36622=>1000,36623=>1000,36624=>1000,36625=>1000,36626=>1000,36627=>1000,36628=>1000,
+ 36629=>1000,36630=>1000,36631=>1000,36632=>1000,36633=>1000,36634=>1000,36635=>1000,36636=>1000,36637=>1000,36638=>1000,36639=>1000,36640=>1000,36641=>1000,36642=>1000,36643=>1000,36644=>1000,
+ 36645=>1000,36646=>1000,36647=>1000,36648=>1000,36649=>1000,36650=>1000,36651=>1000,36652=>1000,36653=>1000,36654=>1000,36655=>1000,36656=>1000,36657=>1000,36658=>1000,36659=>1000,36660=>1000,
+ 36661=>1000,36662=>1000,36663=>1000,36664=>1000,36665=>1000,36666=>1000,36667=>1000,36668=>1000,36669=>1000,36670=>1000,36671=>1000,36672=>1000,36673=>1000,36674=>1000,36675=>1000,36676=>1000,
+ 36677=>1000,36678=>1000,36679=>1000,36680=>1000,36681=>1000,36682=>1000,36683=>1000,36684=>1000,36685=>1000,36686=>1000,36687=>1000,36688=>1000,36689=>1000,36690=>1000,36691=>1000,36692=>1000,
+ 36693=>1000,36694=>1000,36695=>1000,36696=>1000,36697=>1000,36698=>1000,36699=>1000,36700=>1000,36701=>1000,36702=>1000,36703=>1000,36704=>1000,36705=>1000,36706=>1000,36707=>1000,36708=>1000,
+ 36709=>1000,36710=>1000,36711=>1000,36712=>1000,36713=>1000,36714=>1000,36715=>1000,36716=>1000,36717=>1000,36718=>1000,36719=>1000,36720=>1000,36721=>1000,36722=>1000,36723=>1000,36724=>1000,
+ 36725=>1000,36726=>1000,36727=>1000,36728=>1000,36729=>1000,36730=>1000,36731=>1000,36732=>1000,36733=>1000,36734=>1000,36735=>1000,36736=>1000,36737=>1000,36738=>1000,36739=>1000,36740=>1000,
+ 36741=>1000,36742=>1000,36743=>1000,36744=>1000,36745=>1000,36746=>1000,36747=>1000,36748=>1000,36749=>1000,36750=>1000,36751=>1000,36752=>1000,36753=>1000,36754=>1000,36755=>1000,36756=>1000,
+ 36757=>1000,36758=>1000,36759=>1000,36760=>1000,36761=>1000,36762=>1000,36763=>1000,36764=>1000,36765=>1000,36766=>1000,36767=>1000,36768=>1000,36769=>1000,36770=>1000,36771=>1000,36772=>1000,
+ 36773=>1000,36774=>1000,36775=>1000,36776=>1000,36777=>1000,36778=>1000,36779=>1000,36780=>1000,36781=>1000,36782=>1000,36783=>1000,36784=>1000,36785=>1000,36786=>1000,36787=>1000,36788=>1000,
+ 36789=>1000,36790=>1000,36791=>1000,36792=>1000,36793=>1000,36794=>1000,36795=>1000,36796=>1000,36797=>1000,36798=>1000,36799=>1000,36800=>1000,36801=>1000,36802=>1000,36803=>1000,36804=>1000,
+ 36805=>1000,36806=>1000,36807=>1000,36808=>1000,36809=>1000,36810=>1000,36811=>1000,36812=>1000,36813=>1000,36814=>1000,36815=>1000,36816=>1000,36817=>1000,36818=>1000,36819=>1000,36820=>1000,
+ 36821=>1000,36822=>1000,36823=>1000,36824=>1000,36825=>1000,36826=>1000,36827=>1000,36828=>1000,36829=>1000,36830=>1000,36831=>1000,36832=>1000,36833=>1000,36834=>1000,36835=>1000,36836=>1000,
+ 36837=>1000,36838=>1000,36839=>1000,36840=>1000,36841=>1000,36842=>1000,36843=>1000,36844=>1000,36845=>1000,36846=>1000,36847=>1000,36848=>1000,36849=>1000,36850=>1000,36851=>1000,36852=>1000,
+ 36853=>1000,36854=>1000,36855=>1000,36856=>1000,36857=>1000,36858=>1000,36859=>1000,36860=>1000,36861=>1000,36862=>1000,36863=>1000,36864=>1000,36865=>1000,36866=>1000,36867=>1000,36868=>1000,
+ 36869=>1000,36870=>1000,36871=>1000,36872=>1000,36873=>1000,36874=>1000,36875=>1000,36876=>1000,36877=>1000,36878=>1000,36879=>1000,36880=>1000,36881=>1000,36882=>1000,36883=>1000,36884=>1000,
+ 36885=>1000,36886=>1000,36887=>1000,36888=>1000,36889=>1000,36890=>1000,36891=>1000,36892=>1000,36893=>1000,36894=>1000,36895=>1000,36896=>1000,36897=>1000,36898=>1000,36899=>1000,36900=>1000,
+ 36901=>1000,36902=>1000,36903=>1000,36904=>1000,36905=>1000,36906=>1000,36907=>1000,36908=>1000,36909=>1000,36910=>1000,36911=>1000,36912=>1000,36913=>1000,36914=>1000,36915=>1000,36916=>1000,
+ 36917=>1000,36918=>1000,36919=>1000,36920=>1000,36921=>1000,36922=>1000,36923=>1000,36924=>1000,36925=>1000,36926=>1000,36927=>1000,36928=>1000,36929=>1000,36930=>1000,36931=>1000,36932=>1000,
+ 36933=>1000,36934=>1000,36935=>1000,36936=>1000,36937=>1000,36938=>1000,36939=>1000,36940=>1000,36941=>1000,36942=>1000,36943=>1000,36944=>1000,36945=>1000,36946=>1000,36947=>1000,36948=>1000,
+ 36949=>1000,36950=>1000,36951=>1000,36952=>1000,36953=>1000,36954=>1000,36955=>1000,36956=>1000,36957=>1000,36958=>1000,36959=>1000,36960=>1000,36961=>1000,36962=>1000,36963=>1000,36964=>1000,
+ 36965=>1000,36966=>1000,36967=>1000,36968=>1000,36969=>1000,36970=>1000,36971=>1000,36972=>1000,36973=>1000,36974=>1000,36975=>1000,36976=>1000,36977=>1000,36978=>1000,36979=>1000,36980=>1000,
+ 36981=>1000,36982=>1000,36983=>1000,36984=>1000,36985=>1000,36986=>1000,36987=>1000,36988=>1000,36989=>1000,36990=>1000,36991=>1000,36992=>1000,36993=>1000,36994=>1000,36995=>1000,36996=>1000,
+ 36997=>1000,36998=>1000,36999=>1000,37000=>1000,37001=>1000,37002=>1000,37003=>1000,37004=>1000,37005=>1000,37006=>1000,37007=>1000,37008=>1000,37009=>1000,37010=>1000,37011=>1000,37012=>1000,
+ 37013=>1000,37014=>1000,37015=>1000,37016=>1000,37017=>1000,37018=>1000,37019=>1000,37020=>1000,37021=>1000,37022=>1000,37023=>1000,37024=>1000,37025=>1000,37026=>1000,37027=>1000,37028=>1000,
+ 37029=>1000,37030=>1000,37031=>1000,37032=>1000,37033=>1000,37034=>1000,37035=>1000,37036=>1000,37037=>1000,37038=>1000,37039=>1000,37040=>1000,37041=>1000,37042=>1000,37043=>1000,37044=>1000,
+ 37045=>1000,37046=>1000,37047=>1000,37048=>1000,37049=>1000,37050=>1000,37051=>1000,37052=>1000,37053=>1000,37054=>1000,37055=>1000,37056=>1000,37057=>1000,37058=>1000,37059=>1000,37060=>1000,
+ 37061=>1000,37062=>1000,37063=>1000,37064=>1000,37065=>1000,37066=>1000,37067=>1000,37068=>1000,37069=>1000,37070=>1000,37071=>1000,37072=>1000,37073=>1000,37074=>1000,37075=>1000,37076=>1000,
+ 37077=>1000,37078=>1000,37079=>1000,37080=>1000,37081=>1000,37082=>1000,37083=>1000,37084=>1000,37085=>1000,37086=>1000,37087=>1000,37088=>1000,37089=>1000,37090=>1000,37091=>1000,37092=>1000,
+ 37093=>1000,37094=>1000,37095=>1000,37096=>1000,37097=>1000,37098=>1000,37099=>1000,37100=>1000,37101=>1000,37102=>1000,37103=>1000,37104=>1000,37105=>1000,37106=>1000,37107=>1000,37108=>1000,
+ 37109=>1000,37110=>1000,37111=>1000,37112=>1000,37113=>1000,37114=>1000,37115=>1000,37116=>1000,37117=>1000,37118=>1000,37119=>1000,37120=>1000,37121=>1000,37122=>1000,37123=>1000,37124=>1000,
+ 37125=>1000,37126=>1000,37127=>1000,37128=>1000,37129=>1000,37130=>1000,37131=>1000,37132=>1000,37133=>1000,37134=>1000,37135=>1000,37136=>1000,37137=>1000,37138=>1000,37139=>1000,37140=>1000,
+ 37141=>1000,37142=>1000,37143=>1000,37144=>1000,37145=>1000,37146=>1000,37147=>1000,37148=>1000,37149=>1000,37150=>1000,37151=>1000,37152=>1000,37153=>1000,37154=>1000,37155=>1000,37156=>1000,
+ 37157=>1000,37158=>1000,37159=>1000,37160=>1000,37161=>1000,37162=>1000,37163=>1000,37164=>1000,37165=>1000,37166=>1000,37167=>1000,37168=>1000,37169=>1000,37170=>1000,37171=>1000,37172=>1000,
+ 37173=>1000,37174=>1000,37175=>1000,37176=>1000,37177=>1000,37178=>1000,37179=>1000,37180=>1000,37181=>1000,37182=>1000,37183=>1000,37184=>1000,37185=>1000,37186=>1000,37187=>1000,37188=>1000,
+ 37189=>1000,37190=>1000,37191=>1000,37192=>1000,37193=>1000,37194=>1000,37195=>1000,37196=>1000,37197=>1000,37198=>1000,37199=>1000,37200=>1000,37201=>1000,37202=>1000,37203=>1000,37204=>1000,
+ 37205=>1000,37206=>1000,37207=>1000,37208=>1000,37209=>1000,37210=>1000,37211=>1000,37212=>1000,37213=>1000,37214=>1000,37215=>1000,37216=>1000,37217=>1000,37218=>1000,37219=>1000,37220=>1000,
+ 37221=>1000,37222=>1000,37223=>1000,37224=>1000,37225=>1000,37226=>1000,37227=>1000,37228=>1000,37229=>1000,37230=>1000,37231=>1000,37232=>1000,37233=>1000,37234=>1000,37235=>1000,37236=>1000,
+ 37237=>1000,37238=>1000,37239=>1000,37240=>1000,37241=>1000,37242=>1000,37243=>1000,37244=>1000,37245=>1000,37246=>1000,37247=>1000,37248=>1000,37249=>1000,37250=>1000,37251=>1000,37252=>1000,
+ 37253=>1000,37254=>1000,37255=>1000,37256=>1000,37257=>1000,37258=>1000,37259=>1000,37260=>1000,37261=>1000,37262=>1000,37263=>1000,37264=>1000,37265=>1000,37266=>1000,37267=>1000,37268=>1000,
+ 37269=>1000,37270=>1000,37271=>1000,37272=>1000,37273=>1000,37274=>1000,37275=>1000,37276=>1000,37277=>1000,37278=>1000,37279=>1000,37280=>1000,37281=>1000,37282=>1000,37283=>1000,37284=>1000,
+ 37285=>1000,37286=>1000,37287=>1000,37288=>1000,37289=>1000,37290=>1000,37291=>1000,37292=>1000,37293=>1000,37294=>1000,37295=>1000,37296=>1000,37297=>1000,37298=>1000,37299=>1000,37300=>1000,
+ 37301=>1000,37302=>1000,37303=>1000,37304=>1000,37305=>1000,37306=>1000,37307=>1000,37308=>1000,37309=>1000,37310=>1000,37311=>1000,37312=>1000,37313=>1000,37314=>1000,37315=>1000,37316=>1000,
+ 37317=>1000,37318=>1000,37319=>1000,37320=>1000,37321=>1000,37322=>1000,37323=>1000,37324=>1000,37325=>1000,37326=>1000,37327=>1000,37328=>1000,37329=>1000,37330=>1000,37331=>1000,37332=>1000,
+ 37333=>1000,37334=>1000,37335=>1000,37336=>1000,37337=>1000,37338=>1000,37339=>1000,37340=>1000,37341=>1000,37342=>1000,37343=>1000,37344=>1000,37345=>1000,37346=>1000,37347=>1000,37348=>1000,
+ 37349=>1000,37350=>1000,37351=>1000,37352=>1000,37353=>1000,37354=>1000,37355=>1000,37356=>1000,37357=>1000,37358=>1000,37359=>1000,37360=>1000,37361=>1000,37362=>1000,37363=>1000,37364=>1000,
+ 37365=>1000,37366=>1000,37367=>1000,37368=>1000,37369=>1000,37370=>1000,37371=>1000,37372=>1000,37373=>1000,37374=>1000,37375=>1000,37376=>1000,37377=>1000,37378=>1000,37379=>1000,37380=>1000,
+ 37381=>1000,37382=>1000,37383=>1000,37384=>1000,37385=>1000,37386=>1000,37387=>1000,37388=>1000,37389=>1000,37390=>1000,37391=>1000,37392=>1000,37393=>1000,37394=>1000,37395=>1000,37396=>1000,
+ 37397=>1000,37398=>1000,37399=>1000,37400=>1000,37401=>1000,37402=>1000,37403=>1000,37404=>1000,37405=>1000,37406=>1000,37407=>1000,37408=>1000,37409=>1000,37410=>1000,37411=>1000,37412=>1000,
+ 37413=>1000,37414=>1000,37415=>1000,37416=>1000,37417=>1000,37418=>1000,37419=>1000,37420=>1000,37421=>1000,37422=>1000,37423=>1000,37424=>1000,37425=>1000,37426=>1000,37427=>1000,37428=>1000,
+ 37429=>1000,37430=>1000,37431=>1000,37432=>1000,37433=>1000,37434=>1000,37435=>1000,37436=>1000,37437=>1000,37438=>1000,37439=>1000,37440=>1000,37441=>1000,37442=>1000,37443=>1000,37444=>1000,
+ 37445=>1000,37446=>1000,37447=>1000,37448=>1000,37449=>1000,37450=>1000,37451=>1000,37452=>1000,37453=>1000,37454=>1000,37455=>1000,37456=>1000,37457=>1000,37458=>1000,37459=>1000,37460=>1000,
+ 37461=>1000,37462=>1000,37463=>1000,37464=>1000,37465=>1000,37466=>1000,37467=>1000,37468=>1000,37469=>1000,37470=>1000,37471=>1000,37472=>1000,37473=>1000,37474=>1000,37475=>1000,37476=>1000,
+ 37477=>1000,37478=>1000,37479=>1000,37480=>1000,37481=>1000,37482=>1000,37483=>1000,37484=>1000,37485=>1000,37486=>1000,37487=>1000,37488=>1000,37489=>1000,37490=>1000,37491=>1000,37492=>1000,
+ 37493=>1000,37494=>1000,37495=>1000,37496=>1000,37497=>1000,37498=>1000,37499=>1000,37500=>1000,37501=>1000,37502=>1000,37503=>1000,37504=>1000,37505=>1000,37506=>1000,37507=>1000,37508=>1000,
+ 37509=>1000,37510=>1000,37511=>1000,37512=>1000,37513=>1000,37514=>1000,37515=>1000,37516=>1000,37517=>1000,37518=>1000,37519=>1000,37520=>1000,37521=>1000,37522=>1000,37523=>1000,37524=>1000,
+ 37525=>1000,37526=>1000,37527=>1000,37528=>1000,37529=>1000,37530=>1000,37531=>1000,37532=>1000,37533=>1000,37534=>1000,37535=>1000,37536=>1000,37537=>1000,37538=>1000,37539=>1000,37540=>1000,
+ 37541=>1000,37542=>1000,37543=>1000,37544=>1000,37545=>1000,37546=>1000,37547=>1000,37548=>1000,37549=>1000,37550=>1000,37551=>1000,37552=>1000,37553=>1000,37554=>1000,37555=>1000,37556=>1000,
+ 37557=>1000,37558=>1000,37559=>1000,37560=>1000,37561=>1000,37562=>1000,37563=>1000,37564=>1000,37565=>1000,37566=>1000,37567=>1000,37568=>1000,37569=>1000,37570=>1000,37571=>1000,37572=>1000,
+ 37573=>1000,37574=>1000,37575=>1000,37576=>1000,37577=>1000,37578=>1000,37579=>1000,37580=>1000,37581=>1000,37582=>1000,37583=>1000,37584=>1000,37585=>1000,37586=>1000,37587=>1000,37588=>1000,
+ 37589=>1000,37590=>1000,37591=>1000,37592=>1000,37593=>1000,37594=>1000,37595=>1000,37596=>1000,37597=>1000,37598=>1000,37599=>1000,37600=>1000,37601=>1000,37602=>1000,37603=>1000,37604=>1000,
+ 37605=>1000,37606=>1000,37607=>1000,37608=>1000,37609=>1000,37610=>1000,37611=>1000,37612=>1000,37613=>1000,37614=>1000,37615=>1000,37616=>1000,37617=>1000,37618=>1000,37619=>1000,37620=>1000,
+ 37621=>1000,37622=>1000,37623=>1000,37624=>1000,37625=>1000,37626=>1000,37627=>1000,37628=>1000,37629=>1000,37630=>1000,37631=>1000,37632=>1000,37633=>1000,37634=>1000,37635=>1000,37636=>1000,
+ 37637=>1000,37638=>1000,37639=>1000,37640=>1000,37641=>1000,37642=>1000,37643=>1000,37644=>1000,37645=>1000,37646=>1000,37647=>1000,37648=>1000,37649=>1000,37650=>1000,37651=>1000,37652=>1000,
+ 37653=>1000,37654=>1000,37655=>1000,37656=>1000,37657=>1000,37658=>1000,37659=>1000,37660=>1000,37661=>1000,37662=>1000,37663=>1000,37664=>1000,37665=>1000,37666=>1000,37667=>1000,37668=>1000,
+ 37669=>1000,37670=>1000,37671=>1000,37672=>1000,37673=>1000,37674=>1000,37675=>1000,37676=>1000,37677=>1000,37678=>1000,37679=>1000,37680=>1000,37681=>1000,37682=>1000,37683=>1000,37684=>1000,
+ 37685=>1000,37686=>1000,37687=>1000,37688=>1000,37689=>1000,37690=>1000,37691=>1000,37692=>1000,37693=>1000,37694=>1000,37695=>1000,37696=>1000,37697=>1000,37698=>1000,37699=>1000,37700=>1000,
+ 37701=>1000,37702=>1000,37703=>1000,37704=>1000,37705=>1000,37706=>1000,37707=>1000,37708=>1000,37709=>1000,37710=>1000,37711=>1000,37712=>1000,37713=>1000,37714=>1000,37715=>1000,37716=>1000,
+ 37717=>1000,37718=>1000,37719=>1000,37720=>1000,37721=>1000,37722=>1000,37723=>1000,37724=>1000,37725=>1000,37726=>1000,37727=>1000,37728=>1000,37729=>1000,37730=>1000,37731=>1000,37732=>1000,
+ 37733=>1000,37734=>1000,37735=>1000,37736=>1000,37737=>1000,37738=>1000,37739=>1000,37740=>1000,37741=>1000,37742=>1000,37743=>1000,37744=>1000,37745=>1000,37746=>1000,37747=>1000,37748=>1000,
+ 37749=>1000,37750=>1000,37751=>1000,37752=>1000,37753=>1000,37754=>1000,37755=>1000,37756=>1000,37757=>1000,37758=>1000,37759=>1000,37760=>1000,37761=>1000,37762=>1000,37763=>1000,37764=>1000,
+ 37765=>1000,37766=>1000,37767=>1000,37768=>1000,37769=>1000,37770=>1000,37771=>1000,37772=>1000,37773=>1000,37774=>1000,37775=>1000,37776=>1000,37777=>1000,37778=>1000,37779=>1000,37780=>1000,
+ 37781=>1000,37782=>1000,37783=>1000,37784=>1000,37785=>1000,37786=>1000,37787=>1000,37788=>1000,37789=>1000,37790=>1000,37791=>1000,37792=>1000,37793=>1000,37794=>1000,37795=>1000,37796=>1000,
+ 37797=>1000,37798=>1000,37799=>1000,37800=>1000,37801=>1000,37802=>1000,37803=>1000,37804=>1000,37805=>1000,37806=>1000,37807=>1000,37808=>1000,37809=>1000,37810=>1000,37811=>1000,37812=>1000,
+ 37813=>1000,37814=>1000,37815=>1000,37816=>1000,37817=>1000,37818=>1000,37819=>1000,37820=>1000,37821=>1000,37822=>1000,37823=>1000,37824=>1000,37825=>1000,37826=>1000,37827=>1000,37828=>1000,
+ 37829=>1000,37830=>1000,37831=>1000,37832=>1000,37833=>1000,37834=>1000,37835=>1000,37836=>1000,37837=>1000,37838=>1000,37839=>1000,37840=>1000,37841=>1000,37842=>1000,37843=>1000,37844=>1000,
+ 37845=>1000,37846=>1000,37847=>1000,37848=>1000,37849=>1000,37850=>1000,37851=>1000,37852=>1000,37853=>1000,37854=>1000,37855=>1000,37856=>1000,37857=>1000,37858=>1000,37859=>1000,37860=>1000,
+ 37861=>1000,37862=>1000,37863=>1000,37864=>1000,37865=>1000,37866=>1000,37867=>1000,37868=>1000,37869=>1000,37870=>1000,37871=>1000,37872=>1000,37873=>1000,37874=>1000,37875=>1000,37876=>1000,
+ 37877=>1000,37878=>1000,37879=>1000,37880=>1000,37881=>1000,37882=>1000,37883=>1000,37884=>1000,37885=>1000,37886=>1000,37887=>1000,37888=>1000,37889=>1000,37890=>1000,37891=>1000,37892=>1000,
+ 37893=>1000,37894=>1000,37895=>1000,37896=>1000,37897=>1000,37898=>1000,37899=>1000,37900=>1000,37901=>1000,37902=>1000,37903=>1000,37904=>1000,37905=>1000,37906=>1000,37907=>1000,37908=>1000,
+ 37909=>1000,37910=>1000,37911=>1000,37912=>1000,37913=>1000,37914=>1000,37915=>1000,37916=>1000,37917=>1000,37918=>1000,37919=>1000,37920=>1000,37921=>1000,37922=>1000,37923=>1000,37924=>1000,
+ 37925=>1000,37926=>1000,37927=>998,37928=>1000,37929=>1000,37930=>1000,37931=>1000,37932=>1000,37933=>1000,37934=>1000,37935=>1000,37936=>1000,37937=>1000,37938=>1000,37939=>1000,37940=>1000,
+ 37941=>1000,37942=>1000,37943=>1000,37944=>1000,37945=>1000,37946=>1000,37947=>1000,37948=>1000,37949=>1000,37950=>1000,37951=>1000,37952=>1000,37953=>1000,37954=>1000,37955=>1000,37956=>1000,
+ 37957=>1000,37958=>1000,37959=>1000,37960=>1000,37961=>1000,37962=>1000,37963=>1000,37964=>1000,37965=>1000,37966=>1000,37967=>1000,37968=>1000,37969=>1000,37970=>1000,37971=>1000,37972=>1000,
+ 37973=>1000,37974=>1000,37975=>1000,37976=>1000,37977=>1000,37978=>1000,37979=>1000,37980=>1000,37981=>1000,37982=>1000,37983=>1000,37984=>1000,37985=>1000,37986=>1000,37987=>1000,37988=>1000,
+ 37989=>1000,37990=>1000,37991=>1000,37992=>1000,37993=>1000,37994=>1000,37995=>1000,37996=>1000,37997=>1000,37998=>1000,37999=>1000,38000=>1000,38001=>1000,38002=>1000,38003=>1000,38004=>1000,
+ 38005=>1000,38006=>1000,38007=>1000,38008=>1000,38009=>1000,38010=>1000,38011=>1000,38012=>1000,38013=>1000,38014=>1000,38015=>1000,38016=>1000,38017=>1000,38018=>1000,38019=>1000,38020=>1000,
+ 38021=>1000,38022=>1000,38023=>1000,38024=>1000,38025=>1000,38026=>1000,38027=>1000,38028=>1000,38029=>1000,38030=>1000,38031=>1000,38032=>1000,38033=>1000,38034=>1000,38035=>1000,38036=>1000,
+ 38037=>1000,38038=>1000,38039=>1000,38040=>1000,38041=>1000,38042=>1000,38043=>1000,38044=>1000,38045=>1000,38046=>1000,38047=>1000,38048=>1000,38049=>1000,38050=>1000,38051=>1000,38052=>1000,
+ 38053=>1000,38054=>1000,38055=>1000,38056=>1000,38057=>1000,38058=>1000,38059=>1000,38060=>1000,38061=>1000,38062=>1000,38063=>1000,38064=>1000,38065=>1000,38066=>1000,38067=>1000,38068=>1000,
+ 38069=>1000,38070=>1000,38071=>1000,38072=>1000,38073=>1000,38074=>1000,38075=>1000,38076=>1000,38077=>1000,38078=>1000,38079=>1000,38080=>1000,38081=>1000,38082=>1000,38083=>1000,38084=>1000,
+ 38085=>1000,38086=>1000,38087=>1000,38088=>1000,38089=>1000,38090=>1000,38091=>1000,38092=>1000,38093=>1000,38094=>1000,38095=>1000,38096=>1000,38097=>1000,38098=>1000,38099=>1000,38100=>1000,
+ 38101=>1000,38102=>1000,38103=>1000,38104=>1000,38105=>1000,38106=>1000,38107=>1000,38108=>1000,38109=>1000,38110=>1000,38111=>1000,38112=>1000,38113=>1000,38114=>1000,38115=>1000,38116=>1000,
+ 38117=>1000,38118=>1000,38119=>1000,38120=>1000,38121=>1000,38122=>1000,38123=>1000,38124=>1000,38125=>1000,38126=>1000,38127=>1000,38128=>1000,38129=>1000,38130=>1000,38131=>1000,38132=>1000,
+ 38133=>1000,38134=>1000,38135=>1000,38136=>1000,38137=>1000,38138=>1000,38139=>1000,38140=>1000,38141=>1000,38142=>1000,38143=>1000,38144=>1000,38145=>1000,38146=>1000,38147=>1000,38148=>1000,
+ 38149=>1000,38150=>1000,38151=>1000,38152=>1000,38153=>1000,38154=>1000,38155=>1000,38156=>1000,38157=>1000,38158=>1000,38159=>1000,38160=>1000,38161=>1000,38162=>1000,38163=>1000,38164=>1000,
+ 38165=>1000,38166=>1000,38167=>1000,38168=>1000,38169=>1000,38170=>1000,38171=>1000,38172=>1000,38173=>1000,38174=>1000,38175=>1000,38176=>1000,38177=>1000,38178=>1000,38179=>1000,38180=>1000,
+ 38181=>1000,38182=>1000,38183=>1000,38184=>1000,38185=>1000,38186=>1000,38187=>1000,38188=>1000,38189=>1000,38190=>1000,38191=>1000,38192=>1000,38193=>1000,38194=>1000,38195=>1000,38196=>1000,
+ 38197=>1000,38198=>1000,38199=>1000,38200=>1000,38201=>1000,38202=>1000,38203=>1000,38204=>1000,38205=>1000,38206=>1000,38207=>1000,38208=>1000,38209=>1000,38210=>1000,38211=>1000,38212=>1000,
+ 38213=>1000,38214=>1000,38215=>1000,38216=>1000,38217=>1000,38218=>1000,38219=>1000,38220=>1000,38221=>1000,38222=>1000,38223=>1000,38224=>1000,38225=>1000,38226=>1000,38227=>1000,38228=>1000,
+ 38229=>1000,38230=>1000,38231=>1000,38232=>1000,38233=>1000,38234=>1000,38235=>1000,38236=>1000,38237=>1000,38238=>1000,38239=>1000,38240=>1000,38241=>1000,38242=>1000,38243=>1000,38244=>1000,
+ 38245=>1000,38246=>1000,38247=>1000,38248=>1000,38249=>1000,38250=>1000,38251=>1000,38252=>1000,38253=>1000,38254=>1000,38255=>1000,38256=>1000,38257=>1000,38258=>1000,38259=>1000,38260=>1000,
+ 38261=>1000,38262=>1000,38263=>1000,38264=>1000,38265=>1000,38266=>1000,38267=>1000,38268=>1000,38269=>1000,38270=>1000,38271=>1000,38272=>1000,38273=>1000,38274=>1000,38275=>1000,38276=>1000,
+ 38277=>1000,38278=>1000,38279=>1000,38280=>1000,38281=>1000,38282=>1000,38283=>1000,38284=>1000,38285=>1000,38286=>1000,38287=>1000,38288=>1000,38289=>1000,38290=>1000,38291=>1000,38292=>1000,
+ 38293=>1000,38294=>1000,38295=>1000,38296=>1000,38297=>1000,38298=>1000,38299=>1000,38300=>1000,38301=>1000,38302=>1000,38303=>1000,38304=>1000,38305=>1000,38306=>1000,38307=>1000,38308=>1000,
+ 38309=>1000,38310=>1000,38311=>1000,38312=>1000,38313=>1000,38314=>1000,38315=>1000,38316=>1000,38317=>1000,38318=>1000,38319=>1000,38320=>1000,38321=>1000,38322=>1000,38323=>1000,38324=>1000,
+ 38325=>1000,38326=>1000,38327=>1000,38328=>1000,38329=>1000,38330=>1000,38331=>1000,38332=>1000,38333=>1000,38334=>1000,38335=>1000,38336=>1000,38337=>1000,38338=>1000,38339=>1000,38340=>1000,
+ 38341=>1000,38342=>1000,38343=>1000,38344=>1000,38345=>1000,38346=>1000,38347=>1000,38348=>1000,38349=>1000,38350=>1000,38351=>1000,38352=>1000,38353=>1000,38354=>1000,38355=>1000,38356=>1000,
+ 38357=>1000,38358=>1000,38359=>1000,38360=>1000,38361=>1000,38362=>1000,38363=>1000,38364=>1000,38365=>1000,38366=>1000,38367=>1000,38368=>1000,38369=>1000,38370=>1000,38371=>1000,38372=>1000,
+ 38373=>1000,38374=>1000,38375=>1000,38376=>1000,38377=>1000,38378=>1000,38379=>1000,38380=>1000,38381=>1000,38382=>1000,38383=>1000,38384=>1000,38385=>1000,38386=>1000,38387=>1000,38388=>1000,
+ 38389=>1000,38390=>1000,38391=>1000,38392=>1000,38393=>1000,38394=>1000,38395=>1000,38396=>1000,38397=>1000,38398=>1000,38399=>1000,38400=>1000,38401=>1000,38402=>1000,38403=>1000,38404=>1000,
+ 38405=>1000,38406=>1000,38407=>1000,38408=>1000,38409=>1000,38410=>1000,38411=>1000,38412=>1000,38413=>1000,38414=>1000,38415=>1000,38416=>1000,38417=>1000,38418=>1000,38419=>1000,38420=>1000,
+ 38421=>1000,38422=>1000,38423=>1000,38424=>1000,38425=>1000,38426=>1000,38427=>1000,38428=>1000,38429=>1000,38430=>1000,38431=>1000,38432=>1000,38433=>1000,38434=>1000,38435=>1000,38436=>1000,
+ 38437=>1000,38438=>1000,38439=>1000,38440=>1000,38441=>1000,38442=>1000,38443=>1000,38444=>1000,38445=>1000,38446=>1000,38447=>1000,38448=>1000,38449=>1000,38450=>1000,38451=>1000,38452=>1000,
+ 38453=>1000,38454=>1000,38455=>1000,38456=>1000,38457=>1000,38458=>1000,38459=>1000,38460=>1000,38461=>1000,38462=>1000,38463=>1000,38464=>1000,38465=>1000,38466=>1000,38467=>1000,38468=>1000,
+ 38469=>1000,38470=>1000,38471=>1000,38472=>1000,38473=>1000,38474=>1000,38475=>1000,38476=>1000,38477=>1000,38478=>1000,38479=>1000,38480=>1000,38481=>1000,38482=>1000,38483=>1000,38484=>1000,
+ 38485=>1000,38486=>1000,38487=>1000,38488=>1000,38489=>1000,38490=>1000,38491=>1000,38492=>1000,38493=>1000,38494=>1000,38495=>1000,38496=>1000,38497=>1000,38498=>1000,38499=>1000,38500=>1000,
+ 38501=>1000,38502=>1000,38503=>1000,38504=>1000,38505=>1000,38506=>1000,38507=>1000,38508=>1000,38509=>1000,38510=>1000,38511=>1000,38512=>1000,38513=>1000,38514=>1000,38515=>1000,38516=>1000,
+ 38517=>1000,38518=>1000,38519=>1000,38520=>1000,38521=>1000,38522=>1000,38523=>1000,38524=>1000,38525=>1000,38526=>1000,38527=>1000,38528=>1000,38529=>1000,38530=>1000,38531=>1000,38532=>1000,
+ 38533=>1000,38534=>1000,38535=>1000,38536=>1000,38537=>1000,38538=>1000,38539=>1000,38540=>1000,38541=>1000,38542=>1000,38543=>1000,38544=>1000,38545=>1000,38546=>1000,38547=>1000,38548=>1000,
+ 38549=>1000,38550=>1000,38551=>1000,38552=>1000,38553=>1000,38554=>1000,38555=>1000,38556=>1000,38557=>1000,38558=>1000,38559=>1000,38560=>1000,38561=>1000,38562=>1000,38563=>1000,38564=>1000,
+ 38565=>1000,38566=>1000,38567=>1000,38568=>1000,38569=>1000,38570=>1000,38571=>1000,38572=>1000,38573=>1000,38574=>1000,38575=>1000,38576=>1000,38577=>1000,38578=>1000,38579=>1000,38580=>1000,
+ 38581=>1000,38582=>1000,38583=>1000,38584=>1000,38585=>1000,38586=>1000,38587=>1000,38588=>1000,38589=>1000,38590=>1000,38591=>1000,38592=>1000,38593=>1000,38594=>1000,38595=>1000,38596=>1000,
+ 38597=>1000,38598=>1000,38599=>1000,38600=>1000,38601=>1000,38602=>1000,38603=>1000,38604=>1000,38605=>1000,38606=>1000,38607=>1000,38608=>1000,38609=>1000,38610=>1000,38611=>1000,38612=>1000,
+ 38613=>1000,38614=>1000,38615=>1000,38616=>1000,38617=>1000,38618=>1000,38619=>1000,38620=>1000,38621=>1000,38622=>1000,38623=>1000,38624=>1000,38625=>1000,38626=>1000,38627=>1000,38628=>1000,
+ 38629=>1000,38630=>1000,38631=>1000,38632=>1000,38633=>1000,38634=>1000,38635=>1000,38636=>1000,38637=>1000,38638=>1000,38639=>1000,38640=>1000,38641=>1000,38642=>1000,38643=>1000,38644=>1000,
+ 38645=>1000,38646=>1000,38647=>1000,38648=>1000,38649=>1000,38650=>1000,38651=>1000,38652=>1000,38653=>1000,38654=>1000,38655=>1000,38656=>1000,38657=>1000,38658=>1000,38659=>1000,38660=>1000,
+ 38661=>1000,38662=>1000,38663=>1000,38664=>1000,38665=>1000,38666=>1000,38667=>1000,38668=>1000,38669=>1000,38670=>1000,38671=>1000,38672=>1000,38673=>1000,38674=>1000,38675=>1000,38676=>1000,
+ 38677=>1000,38678=>1000,38679=>1000,38680=>1000,38681=>1000,38682=>1000,38683=>1000,38684=>1000,38685=>1000,38686=>1000,38687=>1000,38688=>1000,38689=>1000,38690=>1000,38691=>1000,38692=>1000,
+ 38693=>1000,38694=>1000,38695=>1000,38696=>1000,38697=>1000,38698=>1000,38699=>1000,38700=>1000,38701=>1000,38702=>1000,38703=>1000,38704=>1000,38705=>1000,38706=>1000,38707=>1000,38708=>1000,
+ 38709=>1000,38710=>1000,38711=>1000,38712=>1000,38713=>1000,38714=>1000,38715=>1000,38716=>1000,38717=>1000,38718=>1000,38719=>1000,38720=>1000,38721=>1000,38722=>1000,38723=>1000,38724=>1000,
+ 38725=>1000,38726=>1000,38727=>1000,38728=>1000,38729=>1000,38730=>1000,38731=>1000,38732=>1000,38733=>1000,38734=>1000,38735=>1000,38736=>1000,38737=>1000,38738=>1000,38739=>1000,38740=>1000,
+ 38741=>1000,38742=>1000,38743=>1000,38744=>1000,38745=>1000,38746=>1000,38747=>1000,38748=>1000,38749=>1000,38750=>1000,38751=>1000,38752=>1000,38753=>1000,38754=>1000,38755=>1000,38756=>1000,
+ 38757=>1000,38758=>1000,38759=>1000,38760=>1000,38761=>1000,38762=>1000,38763=>1000,38764=>1000,38765=>1000,38766=>1000,38767=>1000,38768=>1000,38769=>1000,38770=>1000,38771=>1000,38772=>1000,
+ 38773=>1000,38774=>1000,38775=>1000,38776=>1000,38777=>1000,38778=>1000,38779=>1000,38780=>1000,38781=>1000,38782=>1000,38783=>1000,38784=>1000,38785=>1000,38786=>1000,38787=>1000,38788=>1000,
+ 38789=>1000,38790=>1000,38791=>1000,38792=>1000,38793=>1000,38794=>1000,38795=>1000,38796=>1000,38797=>1000,38798=>1000,38799=>1000,38800=>1000,38801=>1000,38802=>1000,38803=>1000,38804=>1000,
+ 38805=>1000,38806=>1000,38807=>1000,38808=>1000,38809=>1000,38810=>1000,38811=>1000,38812=>1000,38813=>1000,38814=>1000,38815=>1000,38816=>1000,38817=>1000,38818=>1000,38819=>1000,38820=>1000,
+ 38821=>1000,38822=>1000,38823=>1000,38824=>1000,38825=>1000,38826=>1000,38827=>1000,38828=>1000,38829=>1000,38830=>1000,38831=>1000,38832=>1000,38833=>1000,38834=>1000,38835=>1000,38836=>1000,
+ 38837=>1000,38838=>1000,38839=>1000,38840=>1000,38841=>1000,38842=>1000,38843=>1000,38844=>1000,38845=>1000,38846=>1000,38847=>1000,38848=>1000,38849=>1000,38850=>1000,38851=>1000,38852=>1000,
+ 38853=>1000,38854=>1000,38855=>1000,38856=>1000,38857=>1000,38858=>1000,38859=>1000,38860=>1000,38861=>1000,38862=>1000,38863=>1000,38864=>1000,38865=>1000,38866=>1000,38867=>1000,38868=>1000,
+ 38869=>1000,38870=>1000,38871=>1000,38872=>1000,38873=>1000,38874=>1000,38875=>1000,38876=>1000,38877=>1000,38878=>1000,38879=>1000,38880=>1000,38881=>1000,38882=>1000,38883=>1000,38884=>1000,
+ 38885=>1000,38886=>1000,38887=>1000,38888=>1000,38889=>1000,38890=>1000,38891=>1000,38892=>1000,38893=>1000,38894=>1000,38895=>1000,38896=>1000,38897=>1000,38898=>1000,38899=>1000,38900=>1000,
+ 38901=>1000,38902=>1000,38903=>1000,38904=>1000,38905=>1000,38906=>1000,38907=>1000,38908=>1000,38909=>1000,38910=>1000,38911=>1000,38912=>1000,38913=>1000,38914=>1000,38915=>1000,38916=>1000,
+ 38917=>1000,38918=>1000,38919=>1000,38920=>1000,38921=>1000,38922=>1000,38923=>1000,38924=>1000,38925=>1000,38926=>1000,38927=>1000,38928=>1000,38929=>1000,38930=>1000,38931=>1000,38932=>1000,
+ 38933=>1000,38934=>1000,38935=>1000,38936=>1000,38937=>1000,38938=>1000,38939=>1000,38940=>1000,38941=>1000,38942=>1000,38943=>1000,38944=>1000,38945=>1000,38946=>1000,38947=>1000,38948=>1000,
+ 38949=>1000,38950=>1000,38951=>1000,38952=>1000,38953=>1000,38954=>1000,38955=>1000,38956=>1000,38957=>1000,38958=>1000,38959=>1000,38960=>1000,38961=>1000,38962=>1000,38963=>1000,38964=>1000,
+ 38965=>1000,38966=>1000,38967=>1000,38968=>1000,38969=>1000,38970=>1000,38971=>1000,38972=>1000,38973=>1000,38974=>1000,38975=>1000,38976=>1000,38977=>1000,38978=>1000,38979=>1000,38980=>1000,
+ 38981=>1000,38982=>1000,38983=>1000,38984=>1000,38985=>1000,38986=>1000,38987=>1000,38988=>1000,38989=>1000,38990=>1000,38991=>1000,38992=>1000,38993=>1000,38994=>1000,38995=>1000,38996=>1000,
+ 38997=>1000,38998=>1000,38999=>1000,39000=>1000,39001=>1000,39002=>1000,39003=>1000,39004=>1000,39005=>1000,39006=>1000,39007=>1000,39008=>1000,39009=>1000,39010=>1000,39011=>1000,39012=>1000,
+ 39013=>1000,39014=>1000,39015=>1000,39016=>1000,39017=>1000,39018=>1000,39019=>1000,39020=>1000,39021=>1000,39022=>1000,39023=>1000,39024=>1000,39025=>1000,39026=>1000,39027=>1000,39028=>1000,
+ 39029=>1000,39030=>1000,39031=>1000,39032=>1000,39033=>1000,39034=>1000,39035=>1000,39036=>1000,39037=>1000,39038=>1000,39039=>1000,39040=>1000,39041=>1000,39042=>1000,39043=>1000,39044=>1000,
+ 39045=>1000,39046=>1000,39047=>1000,39048=>1000,39049=>1000,39050=>1000,39051=>1000,39052=>1000,39053=>1000,39054=>1000,39055=>1000,39056=>1000,39057=>1000,39058=>1000,39059=>1000,39060=>1000,
+ 39061=>1000,39062=>1000,39063=>1000,39064=>1000,39065=>1000,39066=>1000,39067=>1000,39068=>1000,39069=>1000,39070=>1000,39071=>1000,39072=>1000,39073=>1000,39074=>1000,39075=>1000,39076=>1000,
+ 39077=>1000,39078=>1000,39079=>1000,39080=>1000,39081=>1000,39082=>1000,39083=>1000,39084=>1000,39085=>1000,39086=>1000,39087=>1000,39088=>1000,39089=>1000,39090=>1000,39091=>1000,39092=>1000,
+ 39093=>1000,39094=>1000,39095=>1000,39096=>1000,39097=>1000,39098=>1000,39099=>1000,39100=>1000,39101=>1000,39102=>1000,39103=>1000,39104=>1000,39105=>1000,39106=>1000,39107=>1000,39108=>1000,
+ 39109=>1000,39110=>1000,39111=>1000,39112=>1000,39113=>1000,39114=>1000,39115=>1000,39116=>1000,39117=>1000,39118=>1000,39119=>1000,39120=>1000,39121=>1000,39122=>1000,39123=>1000,39124=>1000,
+ 39125=>1000,39126=>1000,39127=>1000,39128=>1000,39129=>1000,39130=>1000,39131=>1000,39132=>1000,39133=>1000,39134=>1000,39135=>1000,39136=>1000,39137=>1000,39138=>1000,39139=>1000,39140=>1000,
+ 39141=>1000,39142=>1000,39143=>1000,39144=>1000,39145=>1000,39146=>1000,39147=>1000,39148=>1000,39149=>1000,39150=>1000,39151=>1000,39152=>1000,39153=>1000,39154=>1000,39155=>1000,39156=>1000,
+ 39157=>1000,39158=>1000,39159=>1000,39160=>1000,39161=>1000,39162=>1000,39163=>1000,39164=>1000,39165=>1000,39166=>1000,39167=>1000,39168=>1000,39169=>1000,39170=>1000,39171=>1000,39172=>1000,
+ 39173=>1000,39174=>1000,39175=>1000,39176=>1000,39177=>1000,39178=>1000,39179=>1000,39180=>1000,39181=>1000,39182=>1000,39183=>1000,39184=>1000,39185=>1000,39186=>1000,39187=>1000,39188=>1000,
+ 39189=>1000,39190=>1000,39191=>1000,39192=>1000,39193=>1000,39194=>1000,39195=>1000,39196=>1000,39197=>1000,39198=>1000,39199=>1000,39200=>1000,39201=>1000,39202=>1000,39203=>1000,39204=>1000,
+ 39205=>1000,39206=>1000,39207=>1000,39208=>1000,39209=>1000,39210=>1000,39211=>1000,39212=>1000,39213=>1000,39214=>1000,39215=>1000,39216=>1000,39217=>1000,39218=>1000,39219=>1000,39220=>1000,
+ 39221=>1000,39222=>1000,39223=>1000,39224=>1000,39225=>1000,39226=>1000,39227=>1000,39228=>1000,39229=>1000,39230=>1000,39231=>1000,39232=>1000,39233=>1000,39234=>1000,39235=>1000,39236=>1000,
+ 39237=>1000,39238=>1000,39239=>1000,39240=>1000,39241=>1000,39242=>1000,39243=>1000,39244=>1000,39245=>1000,39246=>1000,39247=>1000,39248=>1000,39249=>1000,39250=>1000,39251=>1000,39252=>1000,
+ 39253=>1000,39254=>1000,39255=>1000,39256=>1000,39257=>1000,39258=>1000,39259=>1000,39260=>1000,39261=>1000,39262=>1000,39263=>1000,39264=>1000,39265=>1000,39266=>1000,39267=>1000,39268=>1000,
+ 39269=>1000,39270=>1000,39271=>1000,39272=>1000,39273=>1000,39274=>1000,39275=>1000,39276=>1000,39277=>1000,39278=>1000,39279=>1000,39280=>1000,39281=>1000,39282=>1000,39283=>1000,39284=>1000,
+ 39285=>1000,39286=>1000,39287=>1000,39288=>1000,39289=>1000,39290=>1000,39291=>1000,39292=>1000,39293=>1000,39294=>1000,39295=>1000,39296=>1000,39297=>1000,39298=>1000,39299=>1000,39300=>1000,
+ 39301=>1000,39302=>1000,39303=>1000,39304=>1000,39305=>1000,39306=>1000,39307=>1000,39308=>1000,39309=>1000,39310=>1000,39311=>1000,39312=>1000,39313=>1000,39314=>1000,39315=>1000,39316=>1000,
+ 39317=>1000,39318=>1000,39319=>1000,39320=>1000,39321=>1000,39322=>1000,39323=>1000,39324=>1000,39325=>1000,39326=>1000,39327=>1000,39328=>1000,39329=>1000,39330=>1000,39331=>1000,39332=>1000,
+ 39333=>1000,39334=>1000,39335=>1000,39336=>1000,39337=>1000,39338=>1000,39339=>1000,39340=>1000,39341=>1000,39342=>1000,39343=>1000,39344=>1000,39345=>1000,39346=>1000,39347=>1000,39348=>1000,
+ 39349=>1000,39350=>1000,39351=>1000,39352=>1000,39353=>1000,39354=>1000,39355=>1000,39356=>1000,39357=>1000,39358=>1000,39359=>1000,39360=>1000,39361=>1000,39362=>1000,39363=>1000,39364=>1000,
+ 39365=>1000,39366=>1000,39367=>1000,39368=>1000,39369=>1000,39370=>1000,39371=>1000,39372=>1000,39373=>1000,39374=>1000,39375=>1000,39376=>1000,39377=>1000,39378=>1000,39379=>1000,39380=>1000,
+ 39381=>1000,39382=>1000,39383=>1000,39384=>1000,39385=>1000,39386=>1000,39387=>1000,39388=>1000,39389=>1000,39390=>1000,39391=>1000,39392=>1000,39393=>1000,39394=>1000,39395=>1000,39396=>1000,
+ 39397=>1000,39398=>1000,39399=>1000,39400=>1000,39401=>1000,39402=>1000,39403=>1000,39404=>1000,39405=>1000,39406=>1000,39407=>1000,39408=>1000,39409=>1000,39410=>1000,39411=>1000,39412=>1000,
+ 39413=>1000,39414=>1000,39415=>1000,39416=>1000,39417=>1000,39418=>1000,39419=>1000,39420=>1000,39421=>1000,39422=>1000,39423=>1000,39424=>1000,39425=>1000,39426=>1000,39427=>1000,39428=>1000,
+ 39429=>1000,39430=>1000,39431=>1000,39432=>1000,39433=>1000,39434=>1000,39435=>1000,39436=>1000,39437=>1000,39438=>1000,39439=>1000,39440=>1000,39441=>1000,39442=>1000,39443=>1000,39444=>1000,
+ 39445=>1000,39446=>1000,39447=>1000,39448=>1000,39449=>1000,39450=>1000,39451=>1000,39452=>1000,39453=>1000,39454=>1000,39455=>1000,39456=>1000,39457=>1000,39458=>1000,39459=>1000,39460=>1000,
+ 39461=>1000,39462=>1000,39463=>1000,39464=>1000,39465=>1000,39466=>1000,39467=>1000,39468=>1000,39469=>1000,39470=>1000,39471=>1000,39472=>1000,39473=>1000,39474=>1000,39475=>1000,39476=>1000,
+ 39477=>1000,39478=>1000,39479=>1000,39480=>1000,39481=>1000,39482=>1000,39483=>1000,39484=>1000,39485=>1000,39486=>1000,39487=>1000,39488=>1000,39489=>1000,39490=>1000,39491=>1000,39492=>1000,
+ 39493=>1000,39494=>1000,39495=>1000,39496=>1000,39497=>1000,39498=>1000,39499=>1000,39500=>1000,39501=>1000,39502=>1000,39503=>1000,39504=>1000,39505=>1000,39506=>1000,39507=>1000,39508=>1000,
+ 39509=>1000,39510=>1000,39511=>1000,39512=>1000,39513=>1000,39514=>1000,39515=>1000,39516=>1000,39517=>1000,39518=>1000,39519=>1000,39520=>1000,39521=>1000,39522=>1000,39523=>1000,39524=>1000,
+ 39525=>1000,39526=>1000,39527=>1000,39528=>1000,39529=>1000,39530=>1000,39531=>1000,39532=>1000,39533=>1000,39534=>1000,39535=>1000,39536=>1000,39537=>1000,39538=>1000,39539=>1000,39540=>1000,
+ 39541=>1000,39542=>1000,39543=>1000,39544=>1000,39545=>1000,39546=>1000,39547=>1000,39548=>1000,39549=>1000,39550=>1000,39551=>1000,39552=>1000,39553=>1000,39554=>1000,39555=>1000,39556=>1000,
+ 39557=>1000,39558=>1000,39559=>1000,39560=>1000,39561=>1000,39562=>1000,39563=>1000,39564=>1000,39565=>1000,39566=>1000,39567=>1000,39568=>1000,39569=>1000,39570=>1000,39571=>1000,39572=>1000,
+ 39573=>1000,39574=>1000,39575=>1000,39576=>1000,39577=>1000,39578=>1000,39579=>1000,39580=>1000,39581=>1000,39582=>1000,39583=>1000,39584=>1000,39585=>1000,39586=>1000,39587=>1000,39588=>1000,
+ 39589=>1000,39590=>1000,39591=>1000,39592=>1000,39593=>1000,39594=>1000,39595=>1000,39596=>1000,39597=>1000,39598=>1000,39599=>1000,39600=>1000,39601=>1000,39602=>1000,39603=>1000,39604=>1000,
+ 39605=>1000,39606=>1000,39607=>1000,39608=>1000,39609=>1000,39610=>1000,39611=>1000,39612=>1000,39613=>1000,39614=>1000,39615=>1000,39616=>1000,39617=>1000,39618=>1000,39619=>1000,39620=>1000,
+ 39621=>1000,39622=>1000,39623=>1000,39624=>1000,39625=>1000,39626=>1000,39627=>1000,39628=>1000,39629=>1000,39630=>1000,39631=>1000,39632=>1000,39633=>1000,39634=>1000,39635=>1000,39636=>1000,
+ 39637=>1000,39638=>1000,39639=>1000,39640=>1000,39641=>1000,39642=>1000,39643=>1000,39644=>1000,39645=>1000,39646=>1000,39647=>1000,39648=>1000,39649=>1000,39650=>1000,39651=>1000,39652=>1000,
+ 39653=>1000,39654=>1000,39655=>1000,39656=>1000,39657=>1000,39658=>1000,39659=>1000,39660=>1000,39661=>1000,39662=>1000,39663=>1000,39664=>1000,39665=>1000,39666=>1000,39667=>1000,39668=>1000,
+ 39669=>1000,39670=>1000,39671=>1000,39672=>1000,39673=>1000,39674=>1000,39675=>1000,39676=>1000,39677=>1000,39678=>1000,39679=>1000,39680=>1000,39681=>1000,39682=>1000,39683=>1000,39684=>1000,
+ 39685=>1000,39686=>1000,39687=>1000,39688=>1000,39689=>1000,39690=>1000,39691=>1000,39692=>1000,39693=>1000,39694=>1000,39695=>1000,39696=>1000,39697=>1000,39698=>1000,39699=>1000,39700=>1000,
+ 39701=>1000,39702=>1000,39703=>1000,39704=>1000,39705=>1000,39706=>1000,39707=>1000,39708=>1000,39709=>1000,39710=>1000,39711=>1000,39712=>1000,39713=>1000,39714=>1000,39715=>1000,39716=>1000,
+ 39717=>1000,39718=>1000,39719=>1000,39720=>1000,39721=>1000,39722=>1000,39723=>1000,39724=>1000,39725=>1000,39726=>1000,39727=>1000,39728=>1000,39729=>1000,39730=>1000,39731=>1000,39732=>1000,
+ 39733=>1000,39734=>1000,39735=>1000,39736=>1000,39737=>1000,39738=>1000,39739=>1000,39740=>1000,39741=>1000,39742=>1000,39743=>1000,39744=>1000,39745=>1000,39746=>1000,39747=>1000,39748=>1000,
+ 39749=>1000,39750=>1000,39751=>1000,39752=>1000,39753=>1000,39754=>1000,39755=>1000,39756=>1000,39757=>1000,39758=>1000,39759=>1000,39760=>1000,39761=>1000,39762=>1000,39763=>1000,39764=>1000,
+ 39765=>1000,39766=>1000,39767=>1000,39768=>1000,39769=>1000,39770=>1000,39771=>1000,39772=>1000,39773=>1000,39774=>1000,39775=>1000,39776=>1000,39777=>1000,39778=>1000,39779=>1000,39780=>1000,
+ 39781=>1000,39782=>1000,39783=>1000,39784=>1000,39785=>1000,39786=>1000,39787=>1000,39788=>1000,39789=>1000,39790=>1000,39791=>1000,39792=>1000,39793=>1000,39794=>1000,39795=>1000,39796=>1000,
+ 39797=>1000,39798=>1000,39799=>1000,39800=>1000,39801=>1000,39802=>1000,39803=>1000,39804=>1000,39805=>1000,39806=>1000,39807=>1000,39808=>1000,39809=>1000,39810=>1000,39811=>1000,39812=>1000,
+ 39813=>1000,39814=>1000,39815=>1000,39816=>1000,39817=>1000,39818=>1000,39819=>1000,39820=>1000,39821=>1000,39822=>1000,39823=>1000,39824=>1000,39825=>1000,39826=>1000,39827=>1000,39828=>1000,
+ 39829=>1000,39830=>1000,39831=>1000,39832=>1000,39833=>1000,39834=>1000,39835=>1000,39836=>1000,39837=>1000,39838=>1000,39839=>1000,39840=>1000,39841=>1000,39842=>1000,39843=>1000,39844=>1000,
+ 39845=>1000,39846=>1000,39847=>1000,39848=>1000,39849=>1000,39850=>1000,39851=>1000,39852=>1000,39853=>1000,39854=>1000,39855=>1000,39856=>1000,39857=>1000,39858=>1000,39859=>1000,39860=>1000,
+ 39861=>1000,39862=>1000,39863=>1000,39864=>1000,39865=>1000,39866=>1000,39867=>1000,39868=>1000,39869=>1000,39870=>1000,39871=>1000,39872=>1000,39873=>1000,39874=>1000,39875=>1000,39876=>1000,
+ 39877=>1000,39878=>1000,39879=>1000,39880=>1000,39881=>1000,39882=>1000,39883=>1000,39884=>1000,39885=>1000,39886=>1000,39887=>1000,39888=>1000,39889=>1000,39890=>1000,39891=>1000,39892=>1000,
+ 39893=>1000,39894=>1000,39895=>1000,39896=>1000,39897=>1000,39898=>1000,39899=>1000,39900=>1000,39901=>1000,39902=>1000,39903=>1000,39904=>1000,39905=>1000,39906=>1000,39907=>1000,39908=>1000,
+ 39909=>1000,39910=>1000,39911=>1000,39912=>1000,39913=>1000,39914=>1000,39915=>1000,39916=>1000,39917=>1000,39918=>1000,39919=>1000,39920=>1000,39921=>1000,39922=>1000,39923=>1000,39924=>1000,
+ 39925=>1000,39926=>1000,39927=>1000,39928=>1000,39929=>1000,39930=>1000,39931=>1000,39932=>1000,39933=>1000,39934=>1000,39935=>1000,39936=>1000,39937=>1000,39938=>1000,39939=>1000,39940=>1000,
+ 39941=>1000,39942=>1000,39943=>1000,39944=>1000,39945=>1000,39946=>1000,39947=>1000,39948=>1000,39949=>1000,39950=>1000,39951=>1000,39952=>1000,39953=>1000,39954=>1000,39955=>1000,39956=>1000,
+ 39957=>1000,39958=>1000,39959=>1000,39960=>1000,39961=>1000,39962=>1000,39963=>1000,39964=>1000,39965=>1000,39966=>1000,39967=>1000,39968=>1000,39969=>1000,39970=>1000,39971=>1000,39972=>1000,
+ 39973=>1000,39974=>1000,39975=>1000,39976=>1000,39977=>1000,39978=>1000,39979=>1000,39980=>1000,39981=>1000,39982=>1000,39983=>1000,39984=>1000,39985=>1000,39986=>1000,39987=>1000,39988=>1000,
+ 39989=>1000,39990=>1000,39991=>1000,39992=>1000,39993=>1000,39994=>1000,39995=>1000,39996=>1000,39997=>1000,39998=>1000,39999=>1000,40000=>1000,40001=>1000,40002=>1000,40003=>1000,40004=>1000,
+ 40005=>1000,40006=>1000,40007=>1000,40008=>1000,40009=>1000,40010=>1000,40011=>1000,40012=>1000,40013=>1000,40014=>1000,40015=>1000,40016=>1000,40017=>1000,40018=>1000,40019=>1000,40020=>1000,
+ 40021=>1000,40022=>1000,40023=>1000,40024=>1000,40025=>1000,40026=>1000,40027=>1000,40028=>1000,40029=>1000,40030=>1000,40031=>1000,40032=>1000,40033=>1000,40034=>1000,40035=>1000,40036=>1000,
+ 40037=>1000,40038=>1000,40039=>1000,40040=>1000,40041=>1000,40042=>1000,40043=>1000,40044=>1000,40045=>1000,40046=>1000,40047=>1000,40048=>1000,40049=>1000,40050=>1000,40051=>1000,40052=>1000,
+ 40053=>1000,40054=>1000,40055=>1000,40056=>1000,40057=>1000,40058=>1000,40059=>1000,40060=>1000,40061=>1000,40062=>1000,40063=>1000,40064=>1000,40065=>1000,40066=>1000,40067=>1000,40068=>1000,
+ 40069=>1000,40070=>1000,40071=>1000,40072=>1000,40073=>1000,40074=>1000,40075=>1000,40076=>1000,40077=>1000,40078=>1000,40079=>1000,40080=>1000,40081=>1000,40082=>1000,40083=>1000,40084=>1000,
+ 40085=>1000,40086=>1000,40087=>1000,40088=>1000,40089=>1000,40090=>1000,40091=>1000,40092=>1000,40093=>1000,40094=>1000,40095=>1000,40096=>1000,40097=>1000,40098=>1000,40099=>1000,40100=>1000,
+ 40101=>1000,40102=>1000,40103=>1000,40104=>1000,40105=>1000,40106=>1000,40107=>1000,40108=>1000,40109=>1000,40110=>1000,40111=>1000,40112=>1000,40113=>1000,40114=>1000,40115=>1000,40116=>1000,
+ 40117=>1000,40118=>1000,40119=>1000,40120=>1000,40121=>1000,40122=>1000,40123=>1000,40124=>1000,40125=>1000,40126=>1000,40127=>1000,40128=>1000,40129=>1000,40130=>1000,40131=>1000,40132=>1000,
+ 40133=>1000,40134=>1000,40135=>1000,40136=>1000,40137=>1000,40138=>1000,40139=>1000,40140=>1000,40141=>1000,40142=>1000,40143=>1000,40144=>1000,40145=>1000,40146=>1000,40147=>1000,40148=>1000,
+ 40149=>1000,40150=>1000,40151=>1000,40152=>1000,40153=>1000,40154=>1000,40155=>1000,40156=>1000,40157=>1000,40158=>1000,40159=>1000,40160=>1000,40161=>1000,40162=>1000,40163=>1000,40164=>1000,
+ 40165=>1000,40166=>1000,40167=>1000,40168=>1000,40169=>1000,40170=>1000,40171=>1000,40172=>1000,40173=>1000,40174=>1000,40175=>1000,40176=>1000,40177=>1000,40178=>1000,40179=>1000,40180=>1000,
+ 40181=>1000,40182=>1000,40183=>1000,40184=>1000,40185=>1000,40186=>1000,40187=>1000,40188=>1000,40189=>1000,40190=>1000,40191=>1000,40192=>1000,40193=>1000,40194=>1000,40195=>1000,40196=>1000,
+ 40197=>1000,40198=>1000,40199=>1000,40200=>1000,40201=>1000,40202=>1000,40203=>1000,40204=>1000,40205=>1000,40206=>1000,40207=>1000,40208=>1000,40209=>1000,40210=>1000,40211=>1000,40212=>1000,
+ 40213=>1000,40214=>1000,40215=>1000,40216=>1000,40217=>1000,40218=>1000,40219=>1000,40220=>1000,40221=>1000,40222=>1000,40223=>1000,40224=>1000,40225=>1000,40226=>1000,40227=>1000,40228=>1000,
+ 40229=>1000,40230=>1000,40231=>1000,40232=>1000,40233=>1000,40234=>1000,40235=>1000,40236=>1000,40237=>1000,40238=>1000,40239=>1000,40240=>1000,40241=>1000,40242=>1000,40243=>1000,40244=>1000,
+ 40245=>1000,40246=>1000,40247=>1000,40248=>1000,40249=>1000,40250=>1000,40251=>1000,40252=>1000,40253=>1000,40254=>1000,40255=>1000,40256=>1000,40257=>1000,40258=>1000,40259=>1000,40260=>1000,
+ 40261=>1000,40262=>1000,40263=>1000,40264=>1000,40265=>1000,40266=>1000,40267=>1000,40268=>1000,40269=>1000,40270=>1000,40271=>1000,40272=>1000,40273=>1000,40274=>1000,40275=>1000,40276=>1000,
+ 40277=>1000,40278=>1000,40279=>1000,40280=>1000,40281=>1000,40282=>1000,40283=>1000,40284=>1000,40285=>1000,40286=>1000,40287=>1000,40288=>1000,40289=>1000,40290=>1000,40291=>1000,40292=>1000,
+ 40293=>1000,40294=>1000,40295=>1000,40296=>1000,40297=>1000,40298=>1000,40299=>1000,40300=>1000,40301=>1000,40302=>1000,40303=>1000,40304=>1000,40305=>1000,40306=>1000,40307=>1000,40308=>1000,
+ 40309=>1000,40310=>1000,40311=>1000,40312=>1000,40313=>1000,40314=>1000,40315=>1000,40316=>1000,40317=>1000,40318=>1000,40319=>1000,40320=>1000,40321=>1000,40322=>1000,40323=>1000,40324=>1000,
+ 40325=>1000,40326=>1000,40327=>1000,40328=>1000,40329=>1000,40330=>1000,40331=>1000,40332=>1000,40333=>1000,40334=>1000,40335=>1000,40336=>1000,40337=>1000,40338=>1000,40339=>1000,40340=>1000,
+ 40341=>1000,40342=>1000,40343=>1000,40344=>1000,40345=>1000,40346=>1000,40347=>1000,40348=>1000,40349=>1000,40350=>1000,40351=>1000,40352=>1000,40353=>1000,40354=>1000,40355=>1000,40356=>1000,
+ 40357=>1000,40358=>1000,40359=>1000,40360=>1000,40361=>1000,40362=>1000,40363=>1000,40364=>1000,40365=>1000,40366=>1000,40367=>1000,40368=>1000,40369=>1000,40370=>1000,40371=>1000,40372=>1000,
+ 40373=>1000,40374=>1000,40375=>1000,40376=>1000,40377=>1000,40378=>1000,40379=>1000,40380=>1000,40381=>1000,40382=>1000,40383=>1000,40384=>1000,40385=>1000,40386=>1000,40387=>1000,40388=>1000,
+ 40389=>1000,40390=>1000,40391=>1000,40392=>1000,40393=>1000,40394=>1000,40395=>1000,40396=>1000,40397=>1000,40398=>1000,40399=>1000,40400=>1000,40401=>1000,40402=>1000,40403=>1000,40404=>1000,
+ 40405=>1000,40406=>1000,40407=>1000,40408=>1000,40409=>1000,40410=>1000,40411=>1000,40412=>1000,40413=>1000,40414=>1000,40415=>1000,40416=>1000,40417=>1000,40418=>1000,40419=>1000,40420=>1000,
+ 40421=>1000,40422=>1000,40423=>1000,40424=>1000,40425=>1000,40426=>1000,40427=>1000,40428=>1000,40429=>1000,40430=>1000,40431=>1000,40432=>1000,40433=>1000,40434=>1000,40435=>1000,40436=>1000,
+ 40437=>1000,40438=>1000,40439=>1000,40440=>1000,40441=>1000,40442=>1000,40443=>1000,40444=>1000,40445=>1000,40446=>1000,40447=>1000,40448=>1000,40449=>1000,40450=>1000,40451=>1000,40452=>1000,
+ 40453=>1000,40454=>1000,40455=>1000,40456=>1000,40457=>1000,40458=>1000,40459=>1000,40460=>1000,40461=>1000,40462=>1000,40463=>1000,40464=>1000,40465=>1000,40466=>1000,40467=>1000,40468=>1000,
+ 40469=>1000,40470=>1000,40471=>1000,40472=>1000,40473=>1000,40474=>1000,40475=>1000,40476=>1000,40477=>1000,40478=>1000,40479=>1000,40480=>1000,40481=>1000,40482=>1000,40483=>1000,40484=>1000,
+ 40485=>1000,40486=>1000,40487=>1000,40488=>1000,40489=>1000,40490=>1000,40491=>1000,40492=>1000,40493=>1000,40494=>1000,40495=>1000,40496=>1000,40497=>1000,40498=>1000,40499=>1000,40500=>1000,
+ 40501=>1000,40502=>1000,40503=>1000,40504=>1000,40505=>1000,40506=>1000,40507=>1000,40508=>1000,40509=>1000,40510=>1000,40511=>1000,40512=>1000,40513=>1000,40514=>1000,40515=>1000,40516=>1000,
+ 40517=>1000,40518=>1000,40519=>1000,40520=>1000,40521=>1000,40522=>1000,40523=>1000,40524=>1000,40525=>1000,40526=>1000,40527=>1000,40528=>1000,40529=>1000,40530=>1000,40531=>1000,40532=>1000,
+ 40533=>1000,40534=>1000,40535=>1000,40536=>1000,40537=>1000,40538=>1000,40539=>1000,40540=>1000,40541=>1000,40542=>1000,40543=>1000,40544=>1000,40545=>1000,40546=>1000,40547=>1000,40548=>1000,
+ 40549=>1000,40550=>1000,40551=>1000,40552=>1000,40553=>1000,40554=>1000,40555=>1000,40556=>1000,40557=>1000,40558=>1000,40559=>1000,40560=>1000,40561=>1000,40562=>1000,40563=>1000,40564=>1000,
+ 40565=>1000,40566=>1000,40567=>1000,40568=>1000,40569=>1000,40570=>1000,40571=>1000,40572=>1000,40573=>1000,40574=>1000,40575=>1000,40576=>1000,40577=>1000,40578=>1000,40579=>1000,40580=>1000,
+ 40581=>1000,40582=>1000,40583=>1000,40584=>1000,40585=>1000,40586=>1000,40587=>1000,40588=>1000,40589=>1000,40590=>1000,40591=>1000,40592=>1000,40593=>1000,40594=>1000,40595=>1000,40596=>1000,
+ 40597=>1000,40598=>1000,40599=>1000,40600=>1000,40601=>1000,40602=>1000,40603=>1000,40604=>1000,40605=>1000,40606=>1000,40607=>1000,40608=>1000,40609=>1000,40610=>1000,40611=>1000,40612=>1000,
+ 40613=>1000,40614=>1000,40615=>1000,40616=>1000,40617=>1000,40618=>1000,40619=>1000,40620=>1000,40621=>1000,40622=>1000,40623=>1000,40624=>1000,40625=>1000,40626=>1000,40627=>1000,40628=>1000,
+ 40629=>1000,40630=>1000,40631=>1000,40632=>1000,40633=>1000,40634=>1000,40635=>1000,40636=>1000,40637=>1000,40638=>1000,40639=>1000,40640=>1000,40641=>1000,40642=>1000,40643=>1000,40644=>1000,
+ 40645=>1000,40646=>1000,40647=>1000,40648=>1000,40649=>1000,40650=>1000,40651=>1000,40652=>1000,40653=>1000,40654=>1000,40655=>1000,40656=>1000,40657=>1000,40658=>1000,40659=>1000,40660=>1000,
+ 40661=>1000,40662=>1000,40663=>1000,40664=>1000,40665=>1000,40666=>1000,40667=>1000,40668=>1000,40669=>1000,40670=>1000,40671=>1000,40672=>1000,40673=>1000,40674=>1000,40675=>1000,40676=>1000,
+ 40677=>1000,40678=>1000,40679=>1000,40680=>1000,40681=>1000,40682=>1000,40683=>1000,40684=>1000,40685=>1000,40686=>1000,40687=>1000,40688=>1000,40689=>1000,40690=>1000,40691=>1000,40692=>1000,
+ 40693=>1000,40694=>1000,40695=>1000,40696=>1000,40697=>1000,40698=>1000,40699=>1000,40700=>1000,40701=>1000,40702=>1000,40703=>1000,40704=>1000,40705=>1000,40706=>1000,40707=>1000,40708=>1000,
+ 40709=>1000,40710=>1000,40711=>1000,40712=>1000,40713=>1000,40714=>1000,40715=>1000,40716=>1000,40717=>1000,40718=>1000,40719=>1000,40720=>1000,40721=>1000,40722=>1000,40723=>1000,40724=>1000,
+ 40725=>1000,40726=>1000,40727=>1000,40728=>1000,40729=>1000,40730=>1000,40731=>1000,40732=>1000,40733=>1000,40734=>1000,40735=>1000,40736=>1000,40737=>1000,40738=>1000,40739=>1000,40740=>1000,
+ 40741=>1000,40742=>1000,40743=>1000,40744=>1000,40745=>1000,40746=>1000,40747=>1000,40748=>1000,40749=>1000,40750=>1000,40751=>1000,40752=>1000,40753=>1000,40754=>1000,40755=>1000,40756=>1000,
+ 40757=>1000,40758=>1000,40759=>1000,40760=>1000,40761=>1000,40762=>1000,40763=>1000,40764=>1000,40765=>1000,40766=>1000,40767=>1000,40768=>1000,40769=>1000,40770=>1000,40771=>1000,40772=>1000,
+ 40773=>1000,40774=>1000,40775=>1000,40776=>1000,40777=>1000,40778=>1000,40779=>1000,40780=>1000,40781=>1000,40782=>1000,40783=>1000,40784=>1000,40785=>1000,40786=>1000,40787=>1000,40788=>1000,
+ 40789=>1000,40790=>1000,40791=>1000,40792=>1000,40793=>1000,40794=>1000,40795=>1000,40796=>1000,40797=>1000,40798=>1000,40799=>1000,40800=>1000,40801=>1000,40802=>1000,40803=>1000,40804=>1000,
+ 40805=>1000,40806=>1000,40807=>1000,40808=>1000,40809=>1000,40810=>1000,40811=>1000,40812=>1000,40813=>1000,40814=>1000,40815=>1000,40816=>1000,40817=>1000,40818=>1000,40819=>1000,40820=>1000,
+ 40821=>1000,40822=>1000,40823=>1000,40824=>1000,40825=>1000,40826=>1000,40827=>1000,40828=>1000,40829=>1000,40830=>1000,40831=>1000,40832=>1000,40833=>1000,40834=>1000,40835=>1000,40836=>1000,
+ 40837=>1000,40838=>1000,40839=>1000,40840=>1000,40841=>1000,40842=>1000,40843=>1000,40844=>1000,40845=>1000,40846=>1000,40847=>1000,40848=>1000,40849=>1000,40850=>1000,40851=>1000,40852=>1000,
+ 40853=>1000,40854=>1000,40855=>1000,40856=>1000,40857=>1000,40858=>1000,40859=>1000,40860=>1000,40861=>1000,40862=>1000,40863=>1000,40864=>1000,40865=>1000,40866=>1000,40867=>1000,40868=>1000,
+ 40869=>1000);
+$diff='';
+$originalsize=23275812;
+
+// CID Information
+// Select your language
+// unicode to cid conversion table is from
+// ftp://ftp.oreilly.com/pub/examples/nutshell/cjkv/adobe/
+// cid2code.txt in ac16.tar.Z,ag15.tar.Z,ak12.tar.Z and aj16.tar.Z.
+
+//$enc='UniCNS-UTF16-H';
+//$cidinfo=array('Registry'=>'Adobe','Ordering'=>'CNS1','Supplement'=>0);
+//include(dirname(__FILE__).'/uni2cid_ac15.php');
+
+//$enc='UniGB-UTF16-H';
+//$cidinfo=array('Registry'=>'Adobe','Ordering'=>'GB1','Supplement'=>2);
+//include(dirname(__FILE__).'/uni2cid_ag15.php');
+
+//$enc='UniKS-UTF16-H';
+//$cidinfo=array('Registry'=>'Adobe','Ordering'=>'Korea1','Supplement'=>0);
+//include(dirname(__FILE__).'/uni2cid_ak12.php');
+
+$enc='UniJIS-UTF16-H';
+$cidinfo=array('Registry'=>'Adobe','Ordering'=>'Japan1','Supplement'=>5);
+include(dirname(__FILE__).'/uni2cid_aj16.php');
+?>
diff --git a/admin/exportclases/fonts/courier.php b/admin/exportclases/fonts/courier.php
new file mode 100644
index 0000000..293dcee
--- /dev/null
+++ b/admin/exportclases/fonts/courier.php
@@ -0,0 +1,33 @@
+<?php
+ // core font definition file for TCPDF (www.tcpdf.org)
+$type='core';
+$dw=600;
+$cw=array(0=>600,1=>600,2=>600,3=>600,4=>600,5=>600,6=>600,7=>600,8=>600,9=>600,
+10=>600,11=>600,12=>600,13=>600,14=>600,15=>600,16=>600,17=>600,18=>600,19=>600,
+20=>600,21=>600,22=>600,23=>600,24=>600,25=>600,26=>600,27=>600,28=>600,29=>600,
+30=>600,31=>600,32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,
+40=>600,41=>600,42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,
+50=>600,51=>600,52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,
+60=>600,61=>600,62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,
+70=>600,71=>600,72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,
+80=>600,81=>600,82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,
+90=>600,91=>600,92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,
+100=>600,101=>600,102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,
+109=>600,110=>600,111=>600,112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,
+118=>600,119=>600,120=>600,121=>600,122=>600,123=>600,124=>600,125=>600,126=>600,
+127=>600,128=>600,129=>600,130=>600,131=>600,132=>600,133=>600,134=>600,135=>600,
+136=>600,137=>600,138=>600,139=>600,140=>600,141=>600,142=>600,143=>600,144=>600,
+145=>600,146=>600,147=>600,148=>600,149=>600,150=>600,151=>600,152=>600,153=>600,
+154=>600,155=>600,156=>600,157=>600,158=>600,159=>600,160=>600,161=>600,162=>600,
+163=>600,164=>600,165=>600,166=>600,167=>600,168=>600,169=>600,170=>600,171=>600,
+172=>600,173=>600,174=>600,175=>600,176=>600,177=>600,178=>600,179=>600,180=>600,
+181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600,188=>600,189=>600,
+190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600,198=>600,
+199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600,
+208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,
+217=>600,218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,
+226=>600,227=>600,228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,
+235=>600,236=>600,237=>600,238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,
+244=>600,245=>600,246=>600,247=>600,248=>600,249=>600,250=>600,251=>600,252=>600,
+253=>600,254=>600,255=>600);
+?>
diff --git a/admin/exportclases/fonts/freemono.php b/admin/exportclases/fonts/freemono.php
new file mode 100644
index 0000000..156056f
--- /dev/null
+++ b/admin/exportclases/fonts/freemono.php
@@ -0,0 +1,285 @@
+<?php
+$type='TrueTypeUnicode';
+$name='FreeMono';
+$desc=array('Ascent'=>900,'Descent'=>-300,'CapHeight'=>40,'Flags'=>33,'FontBBox'=>'[-557 -343 699 956]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>600);
+$up=-125;
+$ut=50;
+$dw=600;
+$cw=array(
+32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,40=>600,41=>600,
+42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,50=>600,51=>600,
+52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,60=>600,61=>600,
+62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,70=>600,71=>600,
+72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,80=>600,81=>600,
+82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,90=>600,91=>600,
+92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,100=>600,101=>600,
+102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,109=>600,110=>600,111=>600,
+112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,118=>600,119=>600,120=>600,121=>600,
+122=>600,123=>600,124=>600,125=>600,126=>600,8364=>600,8218=>600,402=>600,8222=>600,8230=>600,
+8224=>600,8225=>600,710=>600,8240=>600,352=>600,8249=>600,338=>600,381=>600,8216=>600,8217=>600,
+8220=>600,8221=>600,8226=>600,8211=>600,8212=>600,732=>600,8482=>600,353=>600,8250=>600,339=>600,
+382=>600,376=>600,160=>600,161=>600,162=>600,163=>600,164=>600,165=>600,166=>600,167=>600,
+168=>600,169=>600,170=>600,171=>600,172=>600,173=>600,174=>600,175=>600,176=>600,177=>600,
+178=>600,179=>600,180=>600,181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600,
+188=>600,189=>600,190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600,
+198=>600,199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600,
+208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,217=>600,
+218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,226=>600,227=>600,
+228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,235=>600,236=>600,237=>600,
+238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,244=>600,245=>600,246=>600,247=>600,
+248=>600,249=>600,250=>600,251=>600,252=>600,253=>600,254=>600,255=>600,256=>600,257=>600,
+258=>600,259=>600,260=>600,261=>600,262=>600,263=>600,264=>600,265=>600,266=>600,267=>600,
+268=>600,269=>600,270=>600,271=>600,272=>600,273=>600,274=>600,275=>600,276=>600,277=>600,
+278=>600,279=>600,280=>600,281=>600,282=>600,283=>600,284=>600,285=>600,286=>600,287=>600,
+288=>600,289=>600,290=>600,291=>600,292=>600,293=>600,294=>600,295=>600,296=>600,297=>600,
+298=>600,299=>600,300=>600,301=>600,302=>600,303=>600,304=>600,305=>600,306=>600,307=>600,
+308=>600,309=>600,310=>600,311=>600,312=>600,313=>600,314=>600,315=>600,316=>600,317=>600,
+318=>600,319=>600,320=>600,321=>600,322=>600,323=>600,324=>600,325=>600,326=>600,327=>600,
+328=>600,329=>600,330=>600,331=>600,332=>600,333=>600,334=>600,335=>600,336=>600,337=>600,
+340=>600,341=>600,342=>600,343=>600,344=>600,345=>600,346=>600,347=>600,348=>600,349=>600,
+350=>600,351=>600,354=>600,355=>600,356=>600,357=>600,358=>600,359=>600,360=>600,361=>600,
+362=>600,363=>600,364=>600,365=>600,366=>600,367=>600,368=>600,369=>600,370=>600,371=>600,
+372=>600,373=>600,374=>600,375=>600,377=>600,378=>600,379=>600,380=>600,383=>600,384=>600,
+385=>600,386=>600,387=>600,388=>600,389=>600,390=>600,391=>600,392=>600,393=>600,394=>600,
+395=>600,396=>600,397=>600,398=>600,399=>600,400=>600,401=>600,403=>600,404=>600,405=>600,
+406=>600,407=>600,408=>600,409=>600,410=>600,411=>600,412=>600,413=>600,414=>600,415=>600,
+416=>600,417=>600,418=>600,419=>600,420=>600,421=>600,422=>600,423=>600,424=>600,425=>600,
+426=>600,427=>600,428=>600,429=>600,430=>600,431=>600,432=>600,433=>600,434=>600,435=>600,
+436=>600,437=>600,438=>600,439=>600,440=>600,441=>600,442=>600,443=>600,444=>600,445=>600,
+446=>600,447=>600,448=>600,449=>600,450=>600,451=>600,452=>600,453=>600,454=>600,455=>600,
+456=>600,457=>600,458=>600,459=>600,460=>600,461=>600,462=>600,463=>600,464=>600,465=>600,
+466=>600,467=>600,468=>600,469=>600,470=>600,471=>600,472=>600,473=>600,474=>600,475=>600,
+476=>600,477=>600,478=>600,479=>600,480=>600,481=>600,482=>600,483=>600,484=>600,485=>600,
+486=>600,487=>600,488=>600,489=>600,490=>600,491=>600,492=>600,493=>600,494=>600,495=>600,
+496=>600,497=>600,498=>600,499=>600,500=>600,501=>600,502=>600,503=>600,504=>600,505=>600,
+506=>600,507=>600,508=>600,509=>600,510=>600,511=>600,512=>600,513=>600,514=>600,515=>600,
+516=>600,517=>600,518=>600,519=>600,520=>600,521=>600,522=>600,523=>600,524=>600,525=>600,
+526=>600,527=>600,528=>600,529=>600,530=>600,531=>600,532=>600,533=>600,534=>600,535=>600,
+536=>600,537=>600,538=>600,539=>600,540=>600,541=>600,542=>600,543=>600,548=>600,549=>600,
+550=>600,551=>600,552=>600,553=>600,554=>600,555=>600,556=>600,557=>600,558=>600,559=>600,
+560=>600,561=>600,562=>600,563=>600,567=>600,592=>600,593=>600,594=>600,595=>600,596=>600,
+597=>600,598=>600,599=>600,600=>600,601=>600,602=>600,603=>600,604=>600,605=>600,606=>600,
+607=>600,608=>600,609=>600,610=>600,611=>600,612=>600,613=>600,614=>600,615=>600,616=>600,
+617=>600,618=>600,619=>600,620=>600,621=>600,622=>600,623=>600,624=>600,625=>600,626=>600,
+627=>600,628=>600,629=>600,630=>600,631=>600,632=>600,633=>600,634=>600,635=>600,636=>600,
+637=>600,638=>600,639=>600,640=>600,641=>600,642=>600,643=>600,644=>600,645=>600,646=>600,
+647=>600,648=>600,649=>600,651=>600,652=>600,653=>600,654=>600,655=>600,656=>600,657=>600,
+658=>600,659=>600,660=>600,661=>600,662=>600,663=>600,664=>600,665=>600,667=>600,668=>600,
+669=>600,670=>600,671=>600,672=>600,673=>600,674=>600,675=>600,676=>600,677=>600,678=>600,
+679=>600,699=>600,700=>600,701=>600,702=>600,703=>600,711=>600,712=>600,713=>600,714=>600,
+715=>600,720=>600,721=>600,722=>600,723=>600,724=>600,725=>600,726=>600,727=>600,728=>600,
+729=>600,730=>600,731=>600,733=>600,735=>600,750=>600,768=>600,769=>600,770=>600,771=>600,
+772=>600,773=>600,774=>600,775=>600,776=>600,777=>600,778=>600,779=>600,780=>600,781=>600,
+782=>600,783=>600,784=>600,785=>600,795=>600,801=>600,802=>600,807=>600,808=>600,821=>600,
+822=>600,823=>600,824=>600,834=>600,836=>600,890=>600,900=>600,901=>600,902=>600,903=>600,
+904=>600,905=>600,906=>600,908=>600,910=>600,911=>600,912=>600,913=>600,914=>600,915=>600,
+916=>600,917=>600,918=>600,919=>600,920=>600,921=>600,922=>600,923=>600,924=>600,925=>600,
+926=>600,927=>600,928=>600,929=>600,931=>600,932=>600,933=>600,934=>600,935=>600,936=>600,
+937=>600,938=>600,939=>600,940=>600,941=>600,942=>600,943=>600,944=>600,945=>600,946=>600,
+947=>600,948=>600,949=>600,950=>600,951=>600,952=>600,953=>600,954=>600,955=>600,956=>600,
+957=>600,958=>600,959=>600,960=>600,961=>600,962=>600,963=>600,964=>600,965=>600,966=>600,
+967=>600,968=>600,969=>600,970=>600,971=>600,972=>600,973=>600,974=>600,976=>600,977=>600,
+978=>600,979=>600,980=>600,981=>600,982=>600,986=>600,987=>600,988=>600,1009=>600,1013=>600,
+1024=>600,1025=>600,1026=>600,1027=>600,1028=>600,1029=>600,1030=>600,1031=>600,1032=>600,1033=>600,
+1034=>600,1035=>600,1036=>600,1037=>600,1038=>600,1039=>600,1040=>600,1041=>600,1042=>600,1043=>600,
+1044=>600,1045=>600,1046=>600,1047=>600,1048=>600,1049=>600,1050=>600,1051=>600,1052=>600,1053=>600,
+1054=>600,1055=>600,1056=>600,1057=>600,1058=>600,1059=>600,1060=>600,1061=>600,1062=>600,1063=>600,
+1064=>600,1065=>600,1066=>600,1067=>600,1068=>600,1069=>600,1070=>600,1071=>600,1072=>600,1073=>600,
+1074=>600,1075=>600,1076=>600,1077=>600,1078=>600,1079=>600,1080=>600,1081=>600,1082=>600,1083=>600,
+1084=>600,1085=>600,1086=>600,1087=>600,1088=>600,1089=>600,1090=>600,1091=>600,1092=>600,1093=>600,
+1094=>600,1095=>600,1096=>600,1097=>600,1098=>600,1099=>600,1100=>600,1101=>600,1102=>600,1103=>600,
+1104=>600,1105=>600,1106=>600,1107=>600,1108=>600,1109=>600,1110=>600,1111=>600,1112=>600,1113=>600,
+1114=>600,1115=>600,1116=>600,1117=>600,1118=>600,1119=>600,1124=>600,1130=>600,1132=>600,1136=>600,
+1137=>600,1164=>600,1165=>600,1166=>600,1167=>600,1168=>600,1169=>600,1170=>600,1171=>600,1172=>600,
+1173=>600,1174=>600,1175=>600,1176=>600,1177=>600,1178=>600,1179=>600,1180=>600,1181=>600,1182=>600,
+1183=>600,1184=>600,1185=>600,1186=>600,1187=>600,1188=>600,1189=>600,1190=>600,1191=>600,1192=>600,
+1193=>600,1194=>600,1195=>600,1196=>600,1197=>600,1198=>600,1199=>600,1200=>600,1201=>600,1202=>600,
+1203=>600,1204=>600,1205=>600,1206=>600,1207=>600,1208=>600,1209=>600,1210=>600,1211=>600,1212=>600,
+1213=>600,1214=>600,1215=>600,1216=>600,1217=>600,1218=>600,1219=>600,1220=>600,1221=>600,1222=>600,
+1223=>600,1224=>600,1225=>600,1226=>600,1227=>600,1228=>600,1229=>600,1230=>600,1232=>600,1233=>600,
+1234=>600,1235=>600,1236=>600,1237=>600,1238=>600,1239=>600,1240=>600,1241=>600,1242=>600,1243=>600,
+1244=>600,1245=>600,1246=>600,1247=>600,1248=>600,1249=>600,1250=>600,1251=>600,1252=>600,1253=>600,
+1254=>600,1255=>600,1256=>600,1257=>600,1258=>600,1259=>600,1260=>600,1261=>600,1262=>600,1263=>600,
+1264=>600,1265=>600,1266=>600,1267=>600,1268=>600,1269=>600,1272=>600,1273=>600,1329=>600,1330=>600,
+1331=>600,1332=>600,1333=>600,1334=>600,1335=>600,1336=>600,1337=>600,1338=>600,1339=>600,1340=>600,
+1341=>600,1342=>600,1343=>600,1344=>600,1345=>600,1346=>600,1347=>600,1348=>600,1349=>600,1350=>600,
+1351=>600,1352=>600,1353=>600,1354=>600,1355=>600,1356=>600,1357=>600,1358=>600,1359=>600,1360=>600,
+1361=>600,1362=>600,1363=>600,1364=>600,1365=>600,1366=>600,1377=>600,1378=>600,1379=>600,1380=>600,
+1381=>600,1382=>600,1383=>600,1384=>600,1385=>600,1386=>600,1387=>600,1388=>600,1389=>600,1390=>600,
+1391=>600,1392=>600,1393=>600,1394=>600,1395=>600,1396=>600,1397=>600,1398=>600,1399=>600,1400=>600,
+1401=>600,1402=>600,1403=>600,1404=>600,1405=>600,1406=>600,1407=>600,1408=>600,1409=>600,1410=>600,
+1411=>600,1412=>600,1413=>600,1414=>600,1417=>600,1418=>600,1456=>600,1457=>600,1458=>600,1459=>600,
+1460=>600,1461=>600,1462=>600,1463=>600,1464=>600,1465=>600,1467=>600,1468=>600,1469=>600,1470=>600,
+1471=>600,1472=>600,1473=>600,1474=>600,1475=>600,1476=>600,1488=>600,1489=>600,1490=>600,1491=>600,
+1492=>600,1493=>600,1494=>600,1495=>600,1496=>600,1497=>600,1498=>600,1499=>600,1500=>600,1501=>600,
+1502=>600,1503=>600,1504=>600,1505=>600,1506=>600,1507=>600,1508=>600,1509=>600,1510=>600,1511=>600,
+1512=>600,1513=>600,1514=>600,1520=>600,1521=>600,1522=>600,1523=>600,1524=>600,4304=>600,4305=>600,
+4306=>600,4307=>600,4308=>600,4309=>600,4310=>600,4311=>600,4312=>600,4313=>600,4314=>600,4315=>600,
+4316=>600,4317=>600,4318=>600,4319=>600,4320=>600,4321=>600,4322=>600,4323=>600,4324=>600,4325=>600,
+4326=>600,4327=>600,4328=>600,4329=>600,4330=>600,4331=>600,4332=>600,4333=>600,4334=>600,4335=>600,
+4336=>600,4337=>600,4338=>600,4339=>600,4340=>600,4341=>600,5792=>600,5793=>600,5794=>600,5795=>600,
+5796=>600,5797=>600,5798=>600,5799=>600,5800=>600,5801=>600,5802=>600,5803=>600,5804=>600,5805=>600,
+5806=>600,5807=>600,5808=>600,5809=>600,5810=>600,5811=>600,5812=>600,5813=>600,5814=>600,5815=>600,
+5816=>600,5817=>600,5818=>600,5819=>600,5820=>600,5821=>600,5822=>600,5823=>600,5824=>600,5825=>600,
+5826=>600,5827=>600,5828=>600,5829=>600,5830=>600,5831=>600,5832=>600,5833=>600,5834=>600,5835=>600,
+5836=>600,5837=>600,5838=>600,5839=>600,5840=>600,5841=>600,5842=>600,5843=>600,5844=>600,5845=>600,
+5846=>600,5847=>600,5848=>600,5849=>600,5850=>600,5851=>600,5852=>600,5853=>600,5854=>600,5855=>600,
+5856=>600,5857=>600,5858=>600,5859=>600,5860=>600,5861=>600,5862=>600,5863=>600,5864=>600,5865=>600,
+5866=>600,5867=>600,5868=>600,5869=>600,5870=>600,5871=>600,5872=>600,7680=>600,7681=>600,7682=>600,
+7683=>600,7684=>600,7685=>600,7686=>600,7687=>600,7688=>600,7689=>600,7690=>600,7691=>600,7692=>600,
+7693=>600,7694=>600,7695=>600,7696=>600,7697=>600,7698=>600,7699=>600,7700=>600,7701=>600,7702=>600,
+7703=>600,7704=>600,7705=>600,7706=>600,7707=>600,7708=>600,7709=>600,7710=>600,7711=>600,7712=>600,
+7713=>600,7714=>600,7715=>600,7716=>600,7717=>600,7718=>600,7719=>600,7720=>600,7721=>600,7722=>600,
+7723=>600,7724=>600,7725=>600,7726=>600,7727=>600,7728=>600,7729=>600,7730=>600,7731=>600,7732=>600,
+7733=>600,7734=>600,7735=>600,7736=>600,7737=>600,7738=>600,7739=>600,7740=>600,7741=>600,7742=>600,
+7743=>600,7744=>600,7745=>600,7746=>600,7747=>600,7748=>600,7749=>600,7750=>600,7751=>600,7752=>600,
+7753=>600,7754=>600,7755=>600,7756=>600,7757=>600,7758=>600,7759=>600,7760=>600,7761=>600,7762=>600,
+7763=>600,7764=>600,7765=>600,7766=>600,7767=>600,7768=>600,7769=>600,7770=>600,7771=>600,7772=>600,
+7773=>600,7774=>600,7775=>600,7776=>600,7777=>600,7778=>600,7779=>600,7780=>600,7781=>600,7782=>600,
+7783=>600,7784=>600,7785=>600,7786=>600,7787=>600,7788=>600,7789=>600,7790=>600,7791=>600,7792=>600,
+7793=>600,7794=>600,7795=>600,7796=>600,7797=>600,7798=>600,7799=>600,7800=>600,7801=>600,7802=>600,
+7803=>600,7804=>600,7805=>600,7806=>600,7807=>600,7808=>600,7809=>600,7810=>600,7811=>600,7812=>600,
+7813=>600,7814=>600,7815=>600,7816=>600,7817=>600,7818=>600,7819=>600,7820=>600,7821=>600,7822=>600,
+7823=>600,7824=>600,7825=>600,7826=>600,7827=>600,7828=>600,7829=>600,7830=>600,7831=>600,7832=>600,
+7833=>600,7834=>600,7835=>600,7840=>600,7841=>600,7842=>600,7843=>600,7844=>600,7845=>600,7846=>600,
+7847=>600,7848=>600,7849=>600,7850=>600,7851=>600,7852=>600,7853=>600,7854=>600,7855=>600,7856=>600,
+7857=>600,7858=>600,7859=>600,7860=>600,7861=>600,7862=>600,7863=>600,7864=>600,7865=>600,7866=>600,
+7867=>600,7868=>600,7869=>600,7870=>600,7871=>600,7872=>600,7873=>600,7874=>600,7875=>600,7876=>600,
+7877=>600,7878=>600,7879=>600,7880=>600,7881=>600,7882=>600,7883=>600,7884=>600,7885=>600,7886=>600,
+7887=>600,7888=>600,7889=>600,7890=>600,7891=>600,7892=>600,7893=>600,7894=>600,7895=>600,7896=>600,
+7897=>600,7898=>600,7899=>600,7900=>600,7901=>600,7902=>600,7903=>600,7904=>600,7905=>600,7906=>600,
+7907=>600,7908=>600,7909=>600,7910=>600,7911=>600,7912=>600,7913=>600,7914=>600,7915=>600,7916=>600,
+7917=>600,7918=>600,7919=>600,7920=>600,7921=>600,7922=>600,7923=>600,7924=>600,7925=>600,7926=>600,
+7927=>600,7928=>600,7929=>600,7936=>600,7937=>600,7938=>600,7939=>600,7940=>600,7941=>600,7942=>600,
+7943=>600,7944=>600,7945=>600,7946=>600,7947=>600,7948=>600,7949=>600,7950=>600,7951=>600,7952=>600,
+7953=>600,7954=>600,7955=>600,7956=>600,7957=>600,7960=>600,7961=>600,7962=>600,7963=>600,7964=>600,
+7965=>600,7968=>600,7969=>600,7970=>600,7971=>600,7972=>600,7973=>600,7974=>600,7975=>600,7976=>600,
+7977=>600,7978=>600,7979=>600,7980=>600,7981=>600,7982=>600,7983=>600,7984=>600,7985=>600,7986=>600,
+7987=>600,7988=>600,7989=>600,7990=>600,7991=>600,7992=>600,7993=>600,7994=>600,7995=>600,7996=>600,
+7997=>600,7998=>600,7999=>600,8000=>600,8001=>600,8002=>600,8003=>600,8004=>600,8005=>600,8008=>600,
+8009=>600,8010=>600,8011=>600,8012=>600,8013=>600,8016=>600,8017=>600,8018=>600,8019=>600,8020=>600,
+8021=>600,8022=>600,8023=>600,8025=>600,8027=>600,8029=>600,8031=>600,8032=>600,8033=>600,8034=>600,
+8035=>600,8036=>600,8037=>600,8038=>600,8039=>600,8040=>600,8041=>600,8042=>600,8043=>600,8044=>600,
+8045=>600,8046=>600,8047=>600,8048=>600,8049=>600,8050=>600,8051=>600,8052=>600,8053=>600,8054=>600,
+8055=>600,8056=>600,8057=>600,8058=>600,8059=>600,8060=>600,8061=>600,8064=>600,8065=>600,8066=>600,
+8067=>600,8068=>600,8069=>600,8070=>600,8071=>600,8072=>600,8073=>600,8074=>600,8075=>600,8076=>600,
+8077=>600,8078=>600,8079=>600,8080=>600,8081=>600,8082=>600,8083=>600,8084=>600,8085=>600,8086=>600,
+8087=>600,8088=>600,8089=>600,8090=>600,8091=>600,8092=>600,8093=>600,8094=>600,8095=>600,8096=>600,
+8097=>600,8098=>600,8099=>600,8100=>600,8101=>600,8102=>600,8103=>600,8104=>600,8105=>600,8106=>600,
+8107=>600,8108=>600,8109=>600,8110=>600,8111=>600,8112=>600,8113=>600,8114=>600,8115=>600,8116=>600,
+8118=>600,8119=>600,8120=>600,8121=>600,8122=>600,8123=>600,8124=>600,8126=>600,8127=>600,8128=>600,
+8129=>600,8130=>600,8131=>600,8132=>600,8134=>600,8135=>600,8136=>600,8137=>600,8138=>600,8139=>600,
+8140=>600,8141=>600,8142=>600,8143=>600,8144=>600,8145=>600,8146=>600,8147=>600,8150=>600,8151=>600,
+8152=>600,8153=>600,8154=>600,8155=>600,8157=>600,8158=>600,8159=>600,8160=>600,8161=>600,8162=>600,
+8163=>600,8164=>600,8165=>600,8166=>600,8167=>600,8168=>600,8169=>600,8170=>600,8171=>600,8172=>600,
+8173=>600,8174=>600,8175=>600,8178=>600,8179=>600,8180=>600,8182=>600,8183=>600,8184=>600,8185=>600,
+8186=>600,8187=>600,8188=>600,8189=>600,8190=>600,8192=>600,8193=>600,8194=>600,8195=>600,8201=>600,
+8208=>600,8209=>600,8210=>600,8213=>600,8215=>600,8219=>600,8223=>600,8241=>600,8242=>600,8243=>600,
+8244=>600,8245=>600,8246=>600,8247=>600,8251=>600,8252=>600,8253=>600,8254=>600,8260=>600,8261=>600,
+8262=>600,8264=>600,8265=>600,8266=>600,8267=>600,8304=>600,8305=>600,8308=>600,8309=>600,8310=>600,
+8311=>600,8312=>600,8313=>600,8314=>600,8315=>600,8316=>600,8317=>600,8318=>600,8319=>600,8320=>600,
+8321=>600,8322=>600,8323=>600,8324=>600,8325=>600,8326=>600,8327=>600,8328=>600,8329=>600,8330=>600,
+8331=>600,8332=>600,8333=>600,8334=>600,8355=>600,8356=>600,8359=>600,8362=>600,8373=>600,8448=>600,
+8449=>600,8450=>600,8451=>600,8453=>600,8454=>600,8455=>600,8461=>600,8464=>600,8465=>600,8466=>600,
+8467=>600,8468=>600,8469=>600,8470=>600,8471=>600,8472=>600,8473=>600,8474=>600,8476=>600,8477=>600,
+8478=>600,8484=>600,8486=>600,8487=>600,8489=>600,8490=>600,8491=>600,8498=>600,8501=>600,8531=>600,
+8532=>600,8533=>600,8534=>600,8535=>600,8536=>600,8537=>600,8538=>600,8539=>600,8540=>600,8541=>600,
+8542=>600,8543=>600,8544=>600,8545=>600,8546=>600,8547=>600,8548=>600,8549=>600,8550=>600,8551=>600,
+8552=>600,8553=>600,8554=>600,8555=>600,8556=>600,8557=>600,8558=>600,8559=>600,8592=>600,8593=>600,
+8594=>600,8595=>600,8596=>600,8597=>600,8598=>600,8599=>600,8600=>600,8601=>600,8602=>600,8603=>600,
+8604=>600,8605=>600,8606=>600,8607=>600,8608=>600,8609=>600,8610=>600,8611=>600,8612=>600,8613=>600,
+8614=>600,8615=>600,8616=>600,8617=>600,8618=>600,8619=>600,8620=>600,8621=>600,8622=>600,8623=>600,
+8624=>600,8625=>600,8626=>600,8627=>600,8628=>600,8629=>600,8630=>600,8631=>600,8632=>600,8633=>600,
+8634=>600,8635=>600,8636=>600,8637=>600,8638=>600,8639=>600,8640=>600,8641=>600,8642=>600,8643=>600,
+8644=>600,8645=>600,8646=>600,8647=>600,8648=>600,8649=>600,8650=>600,8651=>600,8652=>600,8653=>600,
+8654=>600,8655=>600,8656=>600,8657=>600,8658=>600,8659=>600,8660=>600,8661=>600,8669=>600,8704=>600,
+8706=>600,8707=>600,8708=>600,8709=>600,8710=>600,8711=>600,8712=>600,8713=>600,8714=>600,8715=>600,
+8716=>600,8717=>600,8719=>600,8720=>600,8721=>600,8722=>600,8723=>600,8724=>600,8725=>600,8726=>600,
+8727=>600,8728=>600,8729=>600,8730=>600,8731=>600,8732=>600,8733=>600,8734=>600,8735=>600,8736=>600,
+8739=>600,8740=>600,8741=>600,8742=>600,8743=>600,8744=>600,8745=>600,8746=>600,8747=>600,8748=>600,
+8749=>600,8750=>600,8751=>600,8752=>600,8754=>600,8755=>600,8756=>600,8757=>600,8759=>600,8764=>600,
+8765=>600,8768=>600,8769=>600,8770=>600,8771=>600,8772=>600,8773=>600,8774=>600,8776=>600,8777=>600,
+8781=>600,8784=>600,8785=>600,8786=>600,8787=>600,8788=>600,8789=>600,8793=>600,8794=>600,8800=>600,
+8801=>600,8802=>600,8804=>600,8805=>600,8806=>600,8807=>600,8808=>600,8809=>600,8810=>600,8811=>600,
+8812=>600,8813=>600,8814=>600,8815=>600,8816=>600,8817=>600,8822=>600,8823=>600,8826=>600,8827=>600,
+8828=>600,8829=>600,8832=>600,8833=>600,8834=>600,8835=>600,8836=>600,8837=>600,8838=>600,8839=>600,
+8840=>600,8841=>600,8842=>600,8843=>600,8844=>600,8845=>600,8846=>600,8847=>600,8848=>600,8849=>600,
+8850=>600,8851=>600,8852=>600,8853=>600,8854=>600,8855=>600,8856=>600,8857=>600,8858=>600,8859=>600,
+8860=>600,8861=>600,8866=>600,8867=>600,8868=>600,8869=>600,8870=>600,8871=>600,8872=>600,8873=>600,
+8874=>600,8875=>600,8876=>600,8877=>600,8878=>600,8879=>600,8882=>600,8883=>600,8884=>600,8885=>600,
+8894=>600,8896=>600,8897=>600,8898=>600,8899=>600,8900=>600,8901=>600,8902=>600,8904=>600,8928=>600,
+8929=>600,8930=>600,8931=>600,8960=>600,8963=>600,8968=>600,8969=>600,8970=>600,8971=>600,8972=>600,
+8973=>600,8974=>600,8975=>600,8976=>600,8981=>600,8988=>600,8989=>600,8990=>600,8991=>600,8992=>600,
+8993=>600,8994=>600,8995=>600,9001=>600,9002=>600,9115=>600,9116=>600,9117=>600,9118=>600,9119=>600,
+9120=>600,9121=>600,9122=>600,9123=>600,9124=>600,9125=>600,9126=>600,9127=>600,9128=>600,9129=>600,
+9130=>600,9131=>600,9132=>600,9133=>600,9134=>600,9135=>600,9136=>600,9137=>600,9138=>600,9139=>600,
+9140=>600,9143=>600,9146=>600,9147=>600,9148=>600,9149=>600,9472=>600,9473=>600,9474=>600,9475=>600,
+9476=>600,9477=>600,9478=>600,9479=>600,9480=>600,9481=>600,9482=>600,9483=>600,9484=>600,9485=>600,
+9486=>600,9487=>600,9488=>600,9489=>600,9490=>600,9491=>600,9492=>600,9493=>600,9494=>600,9495=>600,
+9496=>600,9497=>600,9498=>600,9499=>600,9500=>600,9501=>600,9502=>600,9503=>600,9504=>600,9505=>600,
+9506=>600,9507=>600,9508=>600,9509=>600,9510=>600,9511=>600,9512=>600,9513=>600,9514=>600,9515=>600,
+9516=>600,9517=>600,9518=>600,9519=>600,9520=>600,9521=>600,9522=>600,9523=>600,9524=>600,9525=>600,
+9526=>600,9527=>600,9528=>600,9529=>600,9530=>600,9531=>600,9532=>600,9533=>600,9534=>600,9535=>600,
+9536=>600,9537=>600,9538=>600,9539=>600,9540=>600,9541=>600,9542=>600,9543=>600,9544=>600,9545=>600,
+9546=>600,9547=>600,9548=>600,9549=>600,9550=>600,9551=>600,9552=>600,9553=>600,9554=>600,9555=>600,
+9556=>600,9557=>600,9558=>600,9559=>600,9560=>600,9561=>600,9562=>600,9563=>600,9564=>600,9565=>600,
+9566=>600,9567=>600,9568=>600,9569=>600,9570=>600,9571=>600,9572=>600,9573=>600,9574=>600,9575=>600,
+9576=>600,9577=>600,9578=>600,9579=>600,9580=>600,9581=>600,9582=>600,9583=>600,9584=>600,9585=>600,
+9586=>600,9587=>600,9588=>600,9589=>600,9590=>600,9591=>600,9592=>600,9593=>600,9594=>600,9595=>600,
+9596=>600,9597=>600,9598=>600,9599=>600,9600=>600,9601=>600,9602=>600,9603=>600,9604=>600,9605=>600,
+9606=>600,9607=>600,9608=>600,9609=>600,9610=>600,9611=>600,9612=>600,9613=>600,9614=>600,9615=>600,
+9616=>600,9617=>600,9618=>600,9619=>600,9620=>600,9621=>600,9622=>600,9623=>600,9624=>600,9625=>600,
+9626=>600,9627=>600,9628=>600,9629=>600,9630=>600,9631=>600,9632=>600,9633=>600,9634=>600,9635=>600,
+9636=>600,9637=>600,9638=>600,9639=>600,9640=>600,9641=>600,9642=>600,9643=>600,9644=>600,9645=>600,
+9646=>600,9647=>600,9648=>600,9649=>600,9650=>600,9651=>600,9652=>600,9653=>600,9654=>600,9655=>600,
+9656=>600,9657=>600,9658=>600,9659=>600,9660=>600,9661=>600,9662=>600,9663=>600,9664=>600,9665=>600,
+9666=>600,9667=>600,9668=>600,9669=>600,9670=>600,9671=>600,9672=>600,9673=>600,9674=>600,9675=>600,
+9676=>600,9677=>600,9678=>600,9679=>600,9680=>600,9681=>600,9682=>600,9683=>600,9684=>600,9685=>600,
+9686=>600,9687=>600,9688=>600,9689=>600,9690=>600,9691=>600,9692=>600,9693=>600,9694=>600,9695=>600,
+9696=>600,9697=>600,9698=>600,9699=>600,9700=>600,9701=>600,9702=>600,9703=>600,9704=>600,9705=>600,
+9706=>600,9707=>600,9708=>600,9709=>600,9710=>600,9711=>600,9712=>600,9713=>600,9714=>600,9715=>600,
+9716=>600,9717=>600,9718=>600,9719=>600,9720=>600,9721=>600,9722=>600,9723=>600,9724=>600,9725=>600,
+9726=>600,9727=>600,9728=>600,9729=>600,9730=>600,9733=>600,9734=>600,9735=>600,9736=>600,9737=>600,
+9744=>600,9745=>600,9746=>600,9756=>600,9758=>600,9766=>600,9768=>600,9769=>600,9774=>600,9776=>600,
+9777=>600,9778=>600,9779=>600,9780=>600,9781=>600,9782=>600,9783=>600,9785=>600,9786=>600,9787=>600,
+9788=>600,9791=>600,9792=>600,9793=>600,9794=>600,9824=>600,9825=>600,9826=>600,9827=>600,9829=>600,
+9830=>600,9833=>600,9834=>600,9835=>600,9836=>600,9837=>600,9838=>600,9839=>600,10214=>600,10215=>600,
+10216=>600,10217=>600,10218=>600,10219=>600,10229=>600,10230=>600,10231=>600,10232=>600,10233=>600,10234=>600,
+10235=>600,10236=>600,10240=>600,10241=>600,10242=>600,10243=>600,10244=>600,10245=>600,10246=>600,10247=>600,
+10248=>600,10249=>600,10250=>600,10251=>600,10252=>600,10253=>600,10254=>600,10255=>600,10256=>600,10257=>600,
+10258=>600,10259=>600,10260=>600,10261=>600,10262=>600,10263=>600,10264=>600,10265=>600,10266=>600,10267=>600,
+10268=>600,10269=>600,10270=>600,10271=>600,10272=>600,10273=>600,10274=>600,10275=>600,10276=>600,10277=>600,
+10278=>600,10279=>600,10280=>600,10281=>600,10282=>600,10283=>600,10284=>600,10285=>600,10286=>600,10287=>600,
+10288=>600,10289=>600,10290=>600,10291=>600,10292=>600,10293=>600,10294=>600,10295=>600,10296=>600,10297=>600,
+10298=>600,10299=>600,10300=>600,10301=>600,10302=>600,10303=>600,10304=>600,10305=>600,10306=>600,10307=>600,
+10308=>600,10309=>600,10310=>600,10311=>600,10312=>600,10313=>600,10314=>600,10315=>600,10316=>600,10317=>600,
+10318=>600,10319=>600,10320=>600,10321=>600,10322=>600,10323=>600,10324=>600,10325=>600,10326=>600,10327=>600,
+10328=>600,10329=>600,10330=>600,10331=>600,10332=>600,10333=>600,10334=>600,10335=>600,10336=>600,10337=>600,
+10338=>600,10339=>600,10340=>600,10341=>600,10342=>600,10343=>600,10344=>600,10345=>600,10346=>600,10347=>600,
+10348=>600,10349=>600,10350=>600,10351=>600,10352=>600,10353=>600,10354=>600,10355=>600,10356=>600,10357=>600,
+10358=>600,10359=>600,10360=>600,10361=>600,10362=>600,10363=>600,10364=>600,10365=>600,10366=>600,10367=>600,
+10368=>600,10369=>600,10370=>600,10371=>600,10372=>600,10373=>600,10374=>600,10375=>600,10376=>600,10377=>600,
+10378=>600,10379=>600,10380=>600,10381=>600,10382=>600,10383=>600,10384=>600,10385=>600,10386=>600,10387=>600,
+10388=>600,10389=>600,10390=>600,10391=>600,10392=>600,10393=>600,10394=>600,10395=>600,10396=>600,10397=>600,
+10398=>600,10399=>600,10400=>600,10401=>600,10402=>600,10403=>600,10404=>600,10405=>600,10406=>600,10407=>600,
+10408=>600,10409=>600,10410=>600,10411=>600,10412=>600,10413=>600,10414=>600,10415=>600,10416=>600,10417=>600,
+10418=>600,10419=>600,10420=>600,10421=>600,10422=>600,10423=>600,10424=>600,10425=>600,10426=>600,10427=>600,
+10428=>600,10429=>600,10430=>600,10431=>600,10432=>600,10433=>600,10434=>600,10435=>600,10436=>600,10437=>600,
+10438=>600,10439=>600,10440=>600,10441=>600,10442=>600,10443=>600,10444=>600,10445=>600,10446=>600,10447=>600,
+10448=>600,10449=>600,10450=>600,10451=>600,10452=>600,10453=>600,10454=>600,10455=>600,10456=>600,10457=>600,
+10458=>600,10459=>600,10460=>600,10461=>600,10462=>600,10463=>600,10464=>600,10465=>600,10466=>600,10467=>600,
+10468=>600,10469=>600,10470=>600,10471=>600,10472=>600,10473=>600,10474=>600,10475=>600,10476=>600,10477=>600,
+10478=>600,10479=>600,10480=>600,10481=>600,10482=>600,10483=>600,10484=>600,10485=>600,10486=>600,10487=>600,
+10488=>600,10489=>600,10490=>600,10491=>600,10492=>600,10493=>600,10494=>600,10495=>600,10752=>600,10753=>600,
+10754=>600,10755=>600,10756=>600,63166=>600,63171=>600,64256=>600,64257=>600,64258=>600,64261=>600,64285=>600,
+64286=>600,64287=>600,64288=>600,64289=>600,64290=>600,64291=>600,64292=>600,64293=>600,64294=>600,64295=>600,
+64296=>600,64297=>600,64298=>600,64299=>600,64300=>600,64301=>600,64302=>600,64303=>600,64304=>600,64305=>600,
+64306=>600,64307=>600,64308=>600,64309=>600,64310=>600,64312=>600,64313=>600,64314=>600,64315=>600,64316=>600,
+64318=>600,64320=>600,64321=>600,64323=>600,64324=>600,64326=>600,64327=>600,64328=>600,64329=>600,64330=>600,
+64331=>600,64332=>600,64333=>600,64334=>600,64335=>600,65533=>600);
+$enc='';
+$diff='';
+$file='freemono.z';
+$ctg='freemono.ctg.z';
+$originalsize=259616;
+?> \ No newline at end of file
diff --git a/admin/exportclases/fonts/freemonob.php b/admin/exportclases/fonts/freemonob.php
new file mode 100644
index 0000000..2fb0608
--- /dev/null
+++ b/admin/exportclases/fonts/freemonob.php
@@ -0,0 +1,170 @@
+<?php
+$type='TrueTypeUnicode';
+$name='FreeMonoBold';
+$desc=array('Ascent'=>900,'Descent'=>-300,'CapHeight'=>10,'Flags'=>33,'FontBBox'=>'[-547 -366 754 1111]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>600);
+$up=-125;
+$ut=50;
+$dw=600;
+$cw=array(
+32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,40=>600,41=>600,
+42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,50=>600,51=>600,
+52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,60=>600,61=>600,
+62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,70=>600,71=>600,
+72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,80=>600,81=>600,
+82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,90=>600,91=>600,
+92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,100=>600,101=>600,
+102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,109=>600,110=>600,111=>600,
+112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,118=>600,119=>600,120=>600,121=>600,
+122=>600,123=>600,124=>600,125=>600,126=>600,8364=>600,8218=>600,402=>600,8222=>600,8230=>600,
+8224=>600,8225=>600,710=>600,8240=>600,352=>600,8249=>600,338=>600,381=>600,8216=>600,8217=>600,
+8220=>600,8221=>600,8226=>600,8211=>600,8212=>600,732=>600,8482=>600,353=>600,8250=>600,339=>600,
+382=>600,376=>600,160=>600,161=>600,162=>600,163=>600,164=>600,165=>600,166=>600,167=>600,
+168=>600,169=>600,170=>600,171=>600,172=>600,173=>600,174=>600,175=>600,176=>600,177=>600,
+178=>600,179=>600,180=>600,181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600,
+188=>600,189=>600,190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600,
+198=>600,199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600,
+208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,217=>600,
+218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,226=>600,227=>600,
+228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,235=>600,236=>600,237=>600,
+238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,244=>600,245=>600,246=>600,247=>600,
+248=>600,249=>600,250=>600,251=>600,252=>600,253=>600,254=>600,255=>600,256=>600,257=>600,
+258=>600,259=>600,260=>600,261=>600,262=>600,263=>600,264=>600,265=>600,266=>600,267=>600,
+268=>600,269=>600,270=>600,271=>600,272=>600,273=>600,274=>600,275=>600,276=>600,277=>600,
+278=>600,279=>600,280=>600,281=>600,282=>600,283=>600,284=>600,285=>600,286=>600,287=>600,
+288=>600,289=>600,290=>600,291=>600,292=>600,293=>600,294=>600,295=>600,296=>600,297=>600,
+298=>600,299=>600,300=>600,301=>600,302=>600,303=>600,304=>600,305=>600,306=>600,307=>600,
+308=>600,309=>600,310=>600,311=>600,312=>600,313=>600,314=>600,315=>600,316=>600,317=>600,
+318=>600,319=>600,320=>600,321=>600,322=>600,323=>600,324=>600,325=>600,326=>600,327=>600,
+328=>600,329=>600,330=>600,331=>600,332=>600,333=>600,334=>600,335=>600,336=>600,337=>600,
+340=>600,341=>600,342=>600,343=>600,344=>600,345=>600,346=>600,347=>600,348=>600,349=>600,
+350=>600,351=>600,354=>600,355=>600,356=>600,357=>600,358=>600,359=>600,360=>600,361=>600,
+362=>600,363=>600,364=>600,365=>600,366=>600,367=>600,368=>600,369=>600,370=>600,371=>600,
+372=>600,373=>600,374=>600,375=>600,377=>600,378=>600,379=>600,380=>600,383=>600,384=>600,
+385=>600,386=>600,387=>600,390=>600,391=>600,392=>600,393=>600,394=>600,395=>600,396=>600,
+397=>600,398=>600,400=>600,401=>600,403=>600,405=>600,406=>600,407=>600,409=>600,410=>600,
+411=>600,412=>600,413=>600,414=>600,415=>600,416=>600,417=>600,418=>600,419=>600,420=>600,
+421=>600,422=>600,423=>600,424=>600,425=>600,427=>600,428=>600,429=>600,430=>600,431=>600,
+432=>600,435=>600,436=>600,437=>600,438=>600,439=>600,440=>600,443=>600,448=>600,449=>600,
+451=>600,455=>600,456=>600,457=>600,459=>600,460=>600,461=>600,462=>600,463=>600,464=>600,
+465=>600,466=>600,467=>600,468=>600,469=>600,470=>600,471=>600,472=>600,473=>600,474=>600,
+475=>600,476=>600,477=>600,478=>600,479=>600,480=>600,481=>600,482=>600,483=>600,484=>600,
+485=>600,486=>600,487=>600,488=>600,489=>600,490=>600,491=>600,492=>600,493=>600,494=>600,
+496=>600,500=>600,501=>600,502=>600,504=>600,505=>600,506=>600,507=>600,508=>600,509=>600,
+510=>600,511=>600,512=>600,513=>600,514=>600,515=>600,516=>600,517=>600,518=>600,519=>600,
+520=>600,521=>600,522=>600,523=>600,524=>600,525=>600,526=>600,527=>600,528=>600,529=>600,
+530=>600,531=>600,532=>600,533=>600,534=>600,535=>600,536=>600,537=>600,538=>600,539=>600,
+542=>600,543=>600,548=>600,549=>600,550=>600,551=>600,552=>600,553=>600,554=>600,555=>600,
+556=>600,557=>600,558=>600,559=>600,560=>600,561=>600,562=>600,563=>600,592=>600,593=>600,
+594=>600,595=>600,596=>600,598=>600,599=>600,600=>600,601=>600,603=>600,604=>600,607=>600,
+608=>600,609=>600,613=>600,614=>600,615=>600,616=>600,617=>600,618=>600,619=>600,621=>600,
+623=>600,624=>600,625=>600,626=>600,627=>600,628=>600,629=>600,633=>600,634=>600,635=>600,
+636=>600,637=>600,638=>600,639=>600,640=>600,641=>600,642=>600,643=>600,644=>600,645=>600,
+647=>600,648=>600,649=>600,652=>600,653=>600,654=>600,656=>600,660=>600,661=>600,662=>600,
+663=>600,664=>600,668=>600,670=>600,671=>600,672=>600,673=>600,674=>600,699=>600,700=>600,
+711=>600,720=>600,721=>600,728=>600,729=>600,730=>600,731=>600,733=>600,768=>600,769=>600,
+770=>600,771=>600,772=>600,773=>600,774=>600,775=>600,776=>600,777=>600,778=>600,779=>600,
+780=>600,781=>600,782=>600,783=>600,784=>600,785=>600,795=>600,801=>600,802=>600,807=>600,
+808=>600,823=>600,884=>600,885=>600,890=>600,894=>600,900=>600,901=>600,902=>600,903=>600,
+904=>600,905=>600,906=>600,908=>600,910=>600,911=>600,912=>600,913=>600,914=>600,915=>600,
+916=>600,917=>600,918=>600,919=>600,920=>600,921=>600,922=>600,923=>600,924=>600,925=>600,
+926=>600,927=>600,928=>600,929=>600,931=>600,932=>600,933=>600,934=>600,935=>600,936=>600,
+937=>600,938=>600,939=>600,940=>600,941=>600,942=>600,943=>600,944=>600,945=>600,946=>600,
+947=>600,948=>600,949=>600,950=>600,951=>600,952=>600,953=>600,954=>600,955=>600,956=>600,
+957=>600,958=>600,959=>600,960=>600,961=>600,962=>600,963=>600,964=>600,965=>600,966=>600,
+967=>600,968=>600,969=>600,970=>600,971=>600,972=>600,973=>600,974=>600,976=>600,977=>600,
+978=>600,981=>600,982=>600,1009=>600,1024=>600,1025=>600,1026=>600,1027=>600,1028=>600,1029=>600,
+1030=>600,1031=>600,1032=>600,1033=>600,1034=>600,1035=>600,1036=>600,1037=>600,1038=>600,1039=>600,
+1040=>600,1041=>600,1042=>600,1043=>600,1044=>600,1045=>600,1046=>600,1047=>600,1048=>600,1049=>600,
+1050=>600,1051=>600,1052=>600,1053=>600,1054=>600,1055=>600,1056=>600,1057=>600,1058=>600,1059=>600,
+1060=>600,1061=>600,1062=>600,1063=>600,1064=>600,1065=>600,1066=>600,1067=>600,1068=>600,1069=>600,
+1070=>600,1071=>600,1072=>600,1073=>600,1074=>600,1075=>600,1076=>600,1077=>600,1078=>600,1079=>600,
+1080=>600,1081=>600,1082=>600,1083=>600,1084=>600,1085=>600,1086=>600,1087=>600,1088=>600,1089=>600,
+1090=>600,1091=>600,1092=>600,1093=>600,1094=>600,1095=>600,1096=>600,1097=>600,1098=>600,1099=>600,
+1100=>600,1101=>600,1102=>600,1103=>600,1104=>600,1105=>600,1106=>600,1107=>600,1108=>600,1109=>600,
+1110=>600,1111=>600,1112=>600,1113=>600,1114=>600,1115=>600,1116=>600,1117=>600,1118=>600,1119=>600,
+1164=>600,1165=>600,1166=>600,1167=>600,1168=>600,1169=>600,1170=>600,1171=>600,1172=>600,1173=>600,
+1174=>600,1175=>600,1176=>600,1177=>600,1178=>600,1179=>600,1180=>600,1181=>600,1182=>600,1183=>600,
+1184=>600,1185=>600,1186=>600,1187=>600,1188=>600,1189=>600,1190=>600,1191=>600,1192=>600,1193=>600,
+1194=>600,1195=>600,1196=>600,1197=>600,1198=>600,1199=>600,1200=>600,1201=>600,1202=>600,1203=>600,
+1204=>600,1205=>600,1206=>600,1207=>600,1208=>600,1209=>600,1210=>600,1211=>600,1212=>600,1213=>600,
+1214=>600,1215=>600,1216=>600,1217=>600,1218=>600,1219=>600,1220=>600,1223=>600,1224=>600,1227=>600,
+1228=>600,1232=>600,1233=>600,1234=>600,1235=>600,1236=>600,1237=>600,1238=>600,1239=>600,1240=>600,
+1241=>600,1242=>600,1243=>600,1244=>600,1245=>600,1246=>600,1247=>600,1248=>600,1249=>600,1250=>600,
+1251=>600,1252=>600,1253=>600,1254=>600,1255=>600,1256=>600,1257=>600,1258=>600,1259=>600,1260=>600,
+1261=>600,1262=>600,1263=>600,1264=>600,1265=>600,1266=>600,1267=>600,1268=>600,1269=>600,1272=>600,
+1273=>600,1456=>600,1457=>600,1458=>600,1459=>600,1460=>600,1461=>600,1462=>600,1463=>600,1464=>600,
+1465=>600,1467=>600,1468=>600,1469=>600,1470=>600,1471=>600,1472=>600,1473=>600,1474=>600,1475=>600,
+1476=>600,1488=>600,1489=>600,1490=>600,1491=>600,1492=>600,1493=>600,1494=>600,1495=>600,1496=>600,
+1497=>600,1498=>600,1499=>600,1500=>600,1501=>600,1502=>600,1503=>600,1504=>600,1505=>600,1506=>600,
+1507=>600,1508=>600,1509=>600,1510=>600,1511=>600,1512=>600,1513=>600,1514=>600,1520=>600,1521=>600,
+1522=>600,1523=>600,1524=>600,4304=>600,4305=>600,4306=>600,4307=>600,4308=>600,4309=>600,4310=>600,
+4311=>600,4312=>600,4313=>600,4314=>600,4315=>600,4316=>600,4317=>600,4318=>600,4319=>600,4320=>600,
+4321=>600,4322=>600,4323=>600,4324=>600,4325=>600,4326=>600,4327=>600,4328=>600,4329=>600,4330=>600,
+4331=>600,4332=>600,4333=>600,4334=>600,4335=>600,4336=>600,4337=>600,4338=>600,4339=>600,4340=>600,
+4341=>600,7680=>600,7681=>600,7682=>600,7683=>600,7684=>600,7685=>600,7686=>600,7687=>600,7688=>600,
+7689=>600,7690=>600,7691=>600,7692=>600,7693=>600,7694=>600,7695=>600,7696=>600,7697=>600,7698=>600,
+7699=>600,7700=>600,7701=>600,7702=>600,7703=>600,7704=>600,7705=>600,7706=>600,7707=>600,7708=>600,
+7709=>600,7710=>600,7711=>600,7712=>600,7713=>600,7714=>600,7715=>600,7716=>600,7717=>600,7718=>600,
+7719=>600,7720=>600,7721=>600,7722=>600,7723=>600,7724=>600,7725=>600,7726=>600,7727=>600,7728=>600,
+7729=>600,7730=>600,7731=>600,7732=>600,7733=>600,7734=>600,7735=>600,7736=>600,7737=>600,7738=>600,
+7739=>600,7740=>600,7741=>600,7742=>600,7743=>600,7744=>600,7745=>600,7746=>600,7747=>600,7748=>600,
+7749=>600,7750=>600,7751=>600,7752=>600,7753=>600,7754=>600,7755=>600,7756=>600,7757=>600,7758=>600,
+7759=>600,7760=>600,7761=>600,7762=>600,7763=>600,7764=>600,7765=>600,7766=>600,7767=>600,7768=>600,
+7769=>600,7770=>600,7771=>600,7772=>600,7773=>600,7774=>600,7775=>600,7776=>600,7777=>600,7778=>600,
+7779=>600,7780=>600,7781=>600,7782=>600,7783=>600,7784=>600,7785=>600,7786=>600,7787=>600,7788=>600,
+7789=>600,7790=>600,7791=>600,7792=>600,7793=>600,7794=>600,7795=>600,7796=>600,7797=>600,7798=>600,
+7799=>600,7800=>600,7801=>600,7802=>600,7803=>600,7804=>600,7805=>600,7806=>600,7807=>600,7808=>600,
+7809=>600,7810=>600,7811=>600,7812=>600,7813=>600,7814=>600,7815=>600,7816=>600,7817=>600,7818=>600,
+7819=>600,7820=>600,7821=>600,7822=>600,7823=>600,7824=>600,7825=>600,7826=>600,7827=>600,7828=>600,
+7829=>600,7830=>600,7831=>600,7832=>600,7833=>600,7835=>600,7840=>600,7841=>600,7842=>600,7843=>600,
+7844=>600,7845=>600,7846=>600,7847=>600,7848=>600,7849=>600,7850=>600,7851=>600,7852=>600,7853=>600,
+7854=>600,7855=>600,7856=>600,7857=>600,7858=>600,7859=>600,7860=>600,7861=>600,7862=>600,7863=>600,
+7864=>600,7865=>600,7866=>600,7867=>600,7868=>600,7869=>600,7870=>600,7871=>600,7872=>600,7873=>600,
+7874=>600,7875=>600,7876=>600,7877=>600,7878=>600,7879=>600,7880=>600,7881=>600,7882=>600,7883=>600,
+7884=>600,7885=>600,7886=>600,7887=>600,7888=>600,7889=>600,7890=>600,7891=>600,7892=>600,7893=>600,
+7894=>600,7895=>600,7896=>600,7897=>600,7898=>600,7899=>600,7900=>600,7901=>600,7902=>600,7903=>600,
+7904=>600,7905=>600,7906=>600,7907=>600,7908=>600,7909=>600,7910=>600,7911=>600,7912=>600,7913=>600,
+7914=>600,7915=>600,7916=>600,7917=>600,7918=>600,7919=>600,7920=>600,7921=>600,7922=>600,7923=>600,
+7924=>600,7925=>600,7926=>600,7927=>600,7928=>600,7929=>600,8192=>600,8193=>600,8194=>600,8195=>600,
+8201=>600,8208=>600,8209=>600,8210=>600,8213=>600,8219=>600,8223=>600,8242=>600,8243=>600,8244=>600,
+8245=>600,8246=>600,8247=>600,8252=>600,8260=>600,8261=>600,8262=>600,8264=>600,8265=>600,8267=>600,
+8292=>600,8304=>600,8308=>600,8309=>600,8310=>600,8311=>600,8312=>600,8313=>600,8314=>600,8315=>600,
+8316=>600,8317=>600,8318=>600,8319=>600,8320=>600,8321=>600,8322=>600,8323=>600,8324=>600,8325=>600,
+8326=>600,8327=>600,8328=>600,8329=>600,8355=>600,8356=>600,8362=>600,8373=>600,8465=>600,8466=>600,
+8470=>600,8472=>600,8476=>600,8486=>600,8487=>600,8490=>600,8491=>600,8501=>600,8531=>600,8532=>600,
+8533=>600,8534=>600,8535=>600,8536=>600,8537=>600,8538=>600,8539=>600,8540=>600,8541=>600,8542=>600,
+8543=>600,8592=>600,8593=>600,8594=>600,8595=>600,8704=>600,8706=>600,8707=>600,8709=>600,8710=>600,
+8711=>600,8712=>600,8713=>600,8715=>600,8716=>600,8721=>600,8722=>600,8723=>600,8725=>600,8730=>600,
+8733=>600,8734=>600,8735=>600,8756=>600,8800=>600,8801=>600,8804=>600,8805=>600,8834=>600,8835=>600,
+8836=>600,8837=>600,8838=>600,8839=>600,8869=>600,8976=>600,9001=>600,9002=>600,9472=>600,9473=>600,
+9474=>600,9475=>600,9476=>600,9477=>600,9478=>600,9479=>600,9480=>600,9481=>600,9482=>600,9483=>600,
+9484=>600,9485=>600,9486=>600,9487=>600,9488=>600,9489=>600,9490=>600,9491=>600,9492=>600,9493=>600,
+9494=>600,9495=>600,9496=>600,9497=>600,9498=>600,9499=>600,9500=>600,9501=>600,9502=>600,9503=>600,
+9504=>600,9505=>600,9506=>600,9507=>600,9508=>600,9509=>600,9510=>600,9511=>600,9512=>600,9513=>600,
+9514=>600,9515=>600,9516=>600,9517=>600,9518=>600,9519=>600,9520=>600,9521=>600,9522=>600,9523=>600,
+9524=>600,9525=>600,9526=>600,9527=>600,9528=>600,9529=>600,9530=>600,9531=>600,9532=>600,9533=>600,
+9534=>600,9535=>600,9536=>600,9537=>600,9538=>600,9539=>600,9540=>600,9541=>600,9542=>600,9543=>600,
+9544=>600,9545=>600,9546=>600,9547=>600,9548=>600,9549=>600,9550=>600,9551=>600,9552=>600,9553=>600,
+9554=>600,9555=>600,9556=>600,9557=>600,9558=>600,9559=>600,9560=>600,9561=>600,9562=>600,9563=>600,
+9564=>600,9565=>600,9566=>600,9567=>600,9568=>600,9569=>600,9570=>600,9571=>600,9572=>600,9573=>600,
+9574=>600,9575=>600,9576=>600,9577=>600,9578=>600,9579=>600,9580=>600,9581=>600,9582=>600,9583=>600,
+9584=>600,9585=>600,9586=>600,9587=>600,9588=>600,9589=>600,9590=>600,9591=>600,9592=>600,9593=>600,
+9594=>600,9595=>600,9596=>600,9597=>600,9598=>600,9599=>600,9600=>600,9601=>600,9602=>600,9603=>600,
+9604=>600,9605=>600,9606=>600,9607=>600,9608=>600,9609=>600,9610=>600,9611=>600,9612=>600,9613=>600,
+9614=>600,9615=>600,9616=>600,9617=>600,9618=>600,9619=>600,9620=>600,9621=>600,9632=>600,9633=>600,
+9635=>600,9636=>600,9637=>600,9638=>600,9639=>600,9640=>600,9641=>600,9642=>600,9643=>600,9644=>600,
+9645=>600,9646=>600,9647=>600,9648=>600,9649=>600,9650=>600,9651=>600,9652=>600,9653=>600,9654=>600,
+9655=>600,9656=>600,9657=>600,9658=>600,9660=>600,9661=>600,9662=>600,9663=>600,9664=>600,9665=>600,
+9666=>600,9667=>600,9668=>600,9669=>600,9670=>600,9671=>600,9673=>600,9674=>600,9675=>600,9677=>600,
+9679=>600,9680=>600,9681=>600,9682=>600,9683=>600,9684=>600,9685=>600,9686=>600,9687=>600,9688=>600,
+9689=>600,9698=>600,9699=>600,9700=>600,9701=>600,9702=>600,9703=>600,9704=>600,9705=>600,9706=>600,
+9707=>600,9708=>600,9709=>600,9710=>600,9712=>600,9713=>600,9714=>600,9715=>600,9716=>600,9717=>600,
+9718=>600,9719=>600,9735=>600,9736=>600,9737=>600,9776=>600,9777=>600,9778=>600,9779=>600,9780=>600,
+9781=>600,9782=>600,9783=>600,9785=>600,9786=>600,9787=>600,9833=>600,9834=>600,9835=>600,9836=>600,
+63166=>600,63171=>600,64256=>600,64257=>600,64258=>600,65533=>600);
+$enc='';
+$diff='';
+$file='freemonob.z';
+$ctg='freemonob.ctg.z';
+$originalsize=139624;
+?> \ No newline at end of file
diff --git a/admin/exportclases/fonts/freemonobi.php b/admin/exportclases/fonts/freemonobi.php
new file mode 100644
index 0000000..c019a8f
--- /dev/null
+++ b/admin/exportclases/fonts/freemonobi.php
@@ -0,0 +1,115 @@
+<?php
+$type='TrueTypeUnicode';
+$name='FreeMonoBoldOblique';
+$desc=array('Ascent'=>900,'Descent'=>-300,'CapHeight'=>19,'Flags'=>97,'FontBBox'=>'[-418 -366 809 1111]','ItalicAngle'=>-12,'StemV'=>120,'MissingWidth'=>600);
+$up=-125;
+$ut=50;
+$dw=600;
+$cw=array(
+32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,40=>600,41=>600,
+42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,50=>600,51=>600,
+52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,60=>600,61=>600,
+62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,70=>600,71=>600,
+72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,80=>600,81=>600,
+82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,90=>600,91=>600,
+92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,100=>600,101=>600,
+102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,109=>600,110=>600,111=>600,
+112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,118=>600,119=>600,120=>600,121=>600,
+122=>600,123=>600,124=>600,125=>600,126=>600,8364=>600,8218=>600,402=>600,8222=>600,8230=>600,
+8224=>600,8225=>600,710=>600,8240=>600,352=>600,8249=>600,338=>600,381=>600,8216=>600,8217=>600,
+8220=>600,8221=>600,8226=>600,8211=>600,8212=>600,732=>600,8482=>600,353=>600,8250=>600,339=>600,
+382=>600,376=>600,160=>600,161=>600,162=>600,163=>600,164=>600,165=>600,166=>600,167=>600,
+168=>600,169=>600,170=>600,171=>600,172=>600,173=>600,174=>600,175=>600,176=>600,177=>600,
+178=>600,179=>600,180=>600,181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600,
+188=>600,189=>600,190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600,
+198=>600,199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600,
+208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,217=>600,
+218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,226=>600,227=>600,
+228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,235=>600,236=>600,237=>600,
+238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,244=>600,245=>600,246=>600,247=>600,
+248=>600,249=>600,250=>600,251=>600,252=>600,253=>600,254=>600,255=>600,256=>600,257=>600,
+258=>600,259=>600,260=>600,261=>600,262=>600,263=>600,264=>600,265=>600,266=>600,267=>600,
+268=>600,269=>600,270=>600,271=>600,272=>600,273=>600,274=>600,275=>600,276=>600,277=>600,
+278=>600,279=>600,280=>600,281=>600,282=>600,283=>600,284=>600,285=>600,286=>600,287=>600,
+288=>600,289=>600,290=>600,291=>600,292=>600,293=>600,294=>600,295=>600,296=>600,297=>600,
+298=>600,299=>600,300=>600,301=>600,302=>600,303=>600,304=>600,305=>600,306=>600,307=>600,
+308=>600,309=>600,310=>600,311=>600,312=>600,313=>600,314=>600,315=>600,316=>600,317=>600,
+318=>600,319=>600,320=>600,321=>600,322=>600,323=>600,324=>600,325=>600,326=>600,327=>600,
+328=>600,329=>600,330=>600,331=>600,332=>600,333=>600,334=>600,335=>600,336=>600,337=>600,
+340=>600,341=>600,342=>600,343=>600,344=>600,345=>600,346=>600,347=>600,348=>600,349=>600,
+350=>600,351=>600,354=>600,355=>600,356=>600,357=>600,358=>600,359=>600,360=>600,361=>600,
+362=>600,363=>600,364=>600,365=>600,366=>600,367=>600,368=>600,369=>600,370=>600,371=>600,
+372=>600,373=>600,374=>600,375=>600,377=>600,378=>600,379=>600,380=>600,383=>600,384=>600,
+385=>600,386=>600,387=>600,390=>600,391=>600,392=>600,393=>600,394=>600,395=>600,396=>600,
+397=>600,398=>600,400=>600,401=>600,403=>600,405=>600,406=>600,407=>600,409=>600,410=>600,
+411=>600,412=>600,413=>600,414=>600,415=>600,416=>600,417=>600,418=>600,419=>600,420=>600,
+421=>600,422=>600,423=>600,424=>600,425=>600,427=>600,428=>600,429=>600,430=>600,431=>600,
+432=>600,435=>600,436=>600,437=>600,438=>600,439=>600,440=>600,443=>600,455=>600,456=>600,
+457=>600,459=>600,460=>600,461=>600,462=>600,463=>600,464=>600,465=>600,466=>600,467=>600,
+468=>600,469=>600,470=>600,471=>600,472=>600,473=>600,474=>600,475=>600,476=>600,477=>600,
+478=>600,479=>600,482=>600,483=>600,486=>600,487=>600,488=>600,489=>600,490=>600,491=>600,
+492=>600,493=>600,494=>600,496=>600,500=>600,501=>600,504=>600,505=>600,506=>600,507=>600,
+508=>600,509=>600,510=>600,511=>600,512=>600,513=>600,514=>600,515=>600,516=>600,517=>600,
+518=>600,519=>600,520=>600,521=>600,522=>600,523=>600,524=>600,525=>600,526=>600,527=>600,
+528=>600,529=>600,530=>600,531=>600,532=>600,533=>600,534=>600,535=>600,536=>600,537=>600,
+538=>600,539=>600,542=>600,543=>600,550=>600,551=>600,552=>600,553=>600,554=>600,555=>600,
+556=>600,557=>600,558=>600,559=>600,567=>600,592=>600,593=>600,594=>600,595=>600,596=>600,
+598=>600,599=>600,600=>600,601=>600,603=>600,604=>600,607=>600,608=>600,609=>600,613=>600,
+614=>600,615=>600,616=>600,617=>600,618=>600,619=>600,621=>600,623=>600,624=>600,625=>600,
+626=>600,627=>600,628=>600,629=>600,633=>600,634=>600,635=>600,636=>600,637=>600,638=>600,
+639=>600,640=>600,641=>600,642=>600,643=>600,644=>600,645=>600,647=>600,648=>600,649=>600,
+652=>600,653=>600,654=>600,656=>600,660=>600,661=>600,662=>600,663=>600,664=>600,668=>600,
+670=>600,671=>600,672=>600,673=>600,674=>600,699=>600,700=>600,711=>600,728=>600,729=>600,
+730=>600,731=>600,733=>600,768=>600,769=>600,770=>600,771=>600,772=>600,774=>600,775=>600,
+776=>600,778=>600,779=>600,780=>600,783=>600,784=>600,785=>600,806=>600,884=>600,885=>600,
+890=>600,894=>600,900=>600,901=>600,902=>600,903=>600,904=>600,905=>600,906=>600,908=>600,
+910=>600,911=>600,912=>600,913=>600,914=>600,915=>600,916=>600,917=>600,918=>600,919=>600,
+920=>600,921=>600,922=>600,923=>600,924=>600,925=>600,926=>600,927=>600,928=>600,929=>600,
+931=>600,932=>600,933=>600,934=>600,935=>600,936=>600,937=>600,938=>600,939=>600,940=>600,
+941=>600,942=>600,943=>600,944=>600,945=>600,946=>600,947=>600,948=>600,949=>600,950=>600,
+951=>600,952=>600,953=>600,954=>600,955=>600,956=>600,957=>600,958=>600,959=>600,960=>600,
+961=>600,962=>600,963=>600,964=>600,965=>600,966=>600,967=>600,968=>600,969=>600,970=>600,
+971=>600,972=>600,973=>600,974=>600,977=>600,978=>600,981=>600,1024=>600,1025=>600,1026=>600,
+1027=>600,1028=>600,1029=>600,1030=>600,1031=>600,1032=>600,1033=>600,1034=>600,1035=>600,1036=>600,
+1037=>600,1038=>600,1039=>600,1040=>600,1041=>600,1042=>600,1043=>600,1044=>600,1045=>600,1046=>600,
+1047=>600,1048=>600,1049=>600,1050=>600,1051=>600,1052=>600,1053=>600,1054=>600,1055=>600,1056=>600,
+1057=>600,1058=>600,1059=>600,1060=>600,1061=>600,1062=>600,1063=>600,1064=>600,1065=>600,1066=>600,
+1067=>600,1068=>600,1069=>600,1070=>600,1071=>600,1072=>600,1073=>600,1074=>600,1075=>600,1076=>600,
+1077=>600,1078=>600,1079=>600,1080=>600,1081=>600,1082=>600,1083=>600,1084=>600,1085=>600,1086=>600,
+1087=>600,1088=>600,1089=>600,1090=>600,1091=>600,1092=>600,1093=>600,1094=>600,1095=>600,1096=>600,
+1097=>600,1098=>600,1099=>600,1100=>600,1101=>600,1102=>600,1103=>600,1104=>600,1105=>600,1106=>600,
+1107=>600,1108=>600,1109=>600,1110=>600,1111=>600,1112=>600,1113=>600,1114=>600,1115=>600,1116=>600,
+1117=>600,1118=>600,1119=>600,1164=>600,1165=>600,1166=>600,1167=>600,1168=>600,1169=>600,1170=>600,
+1171=>600,1172=>600,1173=>600,1174=>600,1175=>600,1176=>600,1177=>600,1178=>600,1179=>600,1180=>600,
+1181=>600,1182=>600,1183=>600,1184=>600,1185=>600,1186=>600,1187=>600,1188=>600,1189=>600,1190=>600,
+1191=>600,1192=>600,1193=>600,1194=>600,1195=>600,1196=>600,1197=>600,1198=>600,1199=>600,1200=>600,
+1201=>600,1202=>600,1203=>600,1204=>600,1205=>600,1206=>600,1207=>600,1208=>600,1209=>600,1210=>600,
+1211=>600,1212=>600,1213=>600,1214=>600,1215=>600,1216=>600,1217=>600,1218=>600,1219=>600,1220=>600,
+1223=>600,1224=>600,1227=>600,1228=>600,1232=>600,1233=>600,1234=>600,1235=>600,1236=>600,1237=>600,
+1238=>600,1239=>600,1240=>600,1241=>600,1242=>600,1243=>600,1244=>600,1245=>600,1246=>600,1247=>600,
+1248=>600,1249=>600,1250=>600,1251=>600,1252=>600,1253=>600,1254=>600,1255=>600,1256=>600,1257=>600,
+1258=>600,1259=>600,1260=>600,1261=>600,1262=>600,1263=>600,1264=>600,1265=>600,1266=>600,1267=>600,
+1268=>600,1269=>600,1272=>600,1273=>600,1456=>600,1457=>600,1458=>600,1459=>600,1460=>600,1461=>600,
+1462=>600,1463=>600,1464=>600,1465=>600,1467=>600,1468=>600,1469=>600,1470=>600,1471=>600,1472=>600,
+1473=>600,1474=>600,1475=>600,1476=>600,1488=>600,1489=>600,1490=>600,1491=>600,1492=>600,1493=>600,
+1494=>600,1495=>600,1496=>600,1497=>600,1498=>600,1499=>600,1500=>600,1501=>600,1502=>600,1503=>600,
+1504=>600,1505=>600,1506=>600,1507=>600,1508=>600,1509=>600,1510=>600,1511=>600,1512=>600,1513=>600,
+1514=>600,1520=>600,1521=>600,1522=>600,1523=>600,1524=>600,4304=>600,4305=>600,4306=>600,4307=>600,
+4308=>600,4309=>600,4310=>600,4311=>600,4312=>600,4313=>600,4314=>600,4315=>600,4316=>600,4317=>600,
+4318=>600,4319=>600,4320=>600,4321=>600,4322=>600,4323=>600,4324=>600,4325=>600,4326=>600,4327=>600,
+4328=>600,4329=>600,4330=>600,4331=>600,4332=>600,4333=>600,4334=>600,4335=>600,4336=>600,4337=>600,
+4338=>600,4339=>600,4340=>600,4341=>600,8208=>600,8209=>600,8210=>600,8213=>600,8219=>600,8223=>600,
+8260=>600,8304=>600,8306=>600,8307=>600,8308=>600,8309=>600,8310=>600,8311=>600,8312=>600,8313=>600,
+8320=>600,8321=>600,8322=>600,8323=>600,8324=>600,8325=>600,8326=>600,8327=>600,8328=>600,8329=>600,
+8362=>600,8373=>600,8465=>600,8466=>600,8470=>600,8472=>600,8476=>600,8486=>600,8487=>600,8491=>600,
+8501=>600,8531=>600,8532=>600,8533=>600,8534=>600,8535=>600,8536=>600,8537=>600,8538=>600,8539=>600,
+8540=>600,8541=>600,8542=>600,8543=>600,8592=>600,8593=>600,8594=>600,8595=>600,8704=>600,8706=>600,
+8707=>600,8710=>600,8711=>600,8712=>600,8713=>600,8715=>600,8716=>600,8721=>600,8722=>600,8723=>600,
+8725=>600,8730=>600,8733=>600,8734=>600,8756=>600,8800=>600,8801=>600,8804=>600,8805=>600,9674=>600,
+9833=>600,9834=>600,9835=>600,9836=>600,64256=>600,64257=>600,64258=>600,65533=>600);
+$enc='';
+$diff='';
+$file='freemonobi.z';
+$ctg='freemonobi.ctg.z';
+$originalsize=119824;
+?> \ No newline at end of file
diff --git a/admin/exportclases/fonts/freemonoi.php b/admin/exportclases/fonts/freemonoi.php
new file mode 100644
index 0000000..64abb00
--- /dev/null
+++ b/admin/exportclases/fonts/freemonoi.php
@@ -0,0 +1,193 @@
+<?php
+$type='TrueTypeUnicode';
+$name='FreeMonoOblique';
+$desc=array('Ascent'=>900,'Descent'=>-300,'CapHeight'=>44,'Flags'=>97,'FontBBox'=>'[-577 -343 848 1000]','ItalicAngle'=>-12,'StemV'=>70,'MissingWidth'=>600);
+$up=-125;
+$ut=50;
+$dw=600;
+$cw=array(
+0=>600,32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,40=>600,
+41=>600,42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,50=>600,
+51=>600,52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,60=>600,
+61=>600,62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,70=>600,
+71=>600,72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,80=>600,
+81=>600,82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,90=>600,
+91=>600,92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,100=>600,
+101=>600,102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,109=>600,110=>600,
+111=>600,112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,118=>600,119=>600,120=>600,
+121=>600,122=>600,123=>600,124=>600,125=>600,126=>600,8364=>600,8218=>600,402=>600,8222=>600,
+8230=>600,8224=>600,8225=>600,710=>600,8240=>600,352=>600,8249=>600,338=>600,381=>600,8216=>600,
+8217=>600,8220=>600,8221=>600,8226=>600,8211=>600,8212=>600,732=>600,8482=>600,353=>600,8250=>600,
+339=>600,382=>600,376=>600,160=>600,161=>600,162=>600,163=>600,164=>600,165=>600,166=>600,
+167=>600,168=>600,169=>600,170=>600,171=>600,172=>600,173=>600,174=>600,175=>600,176=>600,
+177=>600,178=>600,179=>600,180=>600,181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,
+187=>600,188=>600,189=>600,190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,
+197=>600,198=>600,199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,
+207=>600,208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,
+217=>600,218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,226=>600,
+227=>600,228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,235=>600,236=>600,
+237=>600,238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,244=>600,245=>600,246=>600,
+247=>600,248=>600,249=>600,250=>600,251=>600,252=>600,253=>600,254=>600,255=>600,256=>600,
+257=>600,258=>600,259=>600,260=>600,261=>600,262=>600,263=>600,264=>600,265=>600,266=>600,
+267=>600,268=>600,269=>600,270=>600,271=>600,272=>600,273=>600,274=>600,275=>600,276=>600,
+277=>600,278=>600,279=>600,280=>600,281=>600,282=>600,283=>600,284=>600,285=>600,286=>600,
+287=>600,288=>600,289=>600,290=>600,291=>600,292=>600,293=>600,294=>600,295=>600,296=>600,
+297=>600,298=>600,299=>600,300=>600,301=>600,302=>600,303=>600,304=>600,305=>600,306=>600,
+307=>600,308=>600,309=>600,310=>600,311=>600,312=>600,313=>600,314=>600,315=>600,316=>600,
+317=>600,318=>600,319=>600,320=>600,321=>600,322=>600,323=>600,324=>600,325=>600,326=>600,
+327=>600,328=>600,329=>600,330=>600,331=>600,332=>600,333=>600,334=>600,335=>600,336=>600,
+337=>600,340=>600,341=>600,342=>600,343=>600,344=>600,345=>600,346=>600,347=>600,348=>600,
+349=>600,350=>600,351=>600,354=>600,355=>600,356=>600,357=>600,358=>600,359=>600,360=>600,
+361=>600,362=>600,363=>600,364=>600,365=>600,366=>600,367=>600,368=>600,369=>600,370=>600,
+371=>600,372=>600,373=>600,374=>600,375=>600,377=>600,378=>600,379=>600,380=>600,383=>600,
+384=>600,385=>600,386=>600,387=>600,388=>600,389=>600,390=>600,391=>600,392=>600,393=>600,
+394=>600,395=>600,396=>600,397=>600,398=>600,399=>600,400=>600,401=>600,403=>600,404=>600,
+405=>600,406=>600,407=>600,408=>600,409=>600,410=>600,411=>600,412=>600,413=>600,414=>600,
+415=>600,416=>600,417=>600,418=>600,419=>600,420=>600,421=>600,422=>600,423=>600,424=>600,
+425=>600,426=>600,427=>600,428=>600,429=>600,430=>600,431=>600,432=>600,433=>600,434=>600,
+435=>600,436=>600,437=>600,438=>600,439=>600,440=>600,441=>600,442=>600,443=>600,444=>600,
+445=>600,446=>600,447=>600,448=>600,449=>600,450=>600,451=>600,452=>600,453=>600,454=>600,
+455=>600,456=>600,457=>600,458=>600,459=>600,460=>600,461=>600,462=>600,463=>600,464=>600,
+465=>600,466=>600,467=>600,468=>600,469=>600,470=>600,471=>600,472=>600,473=>600,474=>600,
+475=>600,476=>600,477=>600,478=>600,479=>600,480=>600,481=>600,482=>600,483=>600,484=>600,
+485=>600,486=>600,487=>600,488=>600,489=>600,490=>600,491=>600,492=>600,493=>600,494=>600,
+495=>600,496=>600,497=>600,498=>600,499=>600,500=>600,501=>600,502=>600,503=>600,504=>600,
+505=>600,506=>600,507=>600,508=>600,509=>600,510=>600,511=>600,512=>600,513=>600,514=>600,
+515=>600,516=>600,517=>600,518=>600,519=>600,520=>600,521=>600,522=>600,523=>600,524=>600,
+525=>600,526=>600,527=>600,528=>600,529=>600,530=>600,531=>600,532=>600,533=>600,534=>600,
+535=>600,536=>600,537=>600,538=>600,539=>600,540=>600,541=>600,542=>600,543=>600,548=>600,
+549=>600,550=>600,551=>600,552=>600,553=>600,554=>600,555=>600,556=>600,557=>600,558=>600,
+559=>600,560=>600,561=>600,562=>600,563=>600,592=>600,593=>600,594=>600,595=>600,596=>600,
+597=>600,598=>600,599=>600,600=>600,601=>600,602=>600,603=>600,604=>600,607=>600,608=>600,
+609=>600,610=>600,611=>600,612=>600,613=>600,614=>600,615=>600,616=>600,617=>600,618=>600,
+619=>600,620=>600,621=>600,622=>600,623=>600,624=>600,625=>600,626=>600,627=>600,628=>600,
+629=>600,630=>600,632=>600,633=>600,634=>600,635=>600,636=>600,637=>600,638=>600,639=>600,
+640=>600,641=>600,642=>600,643=>600,644=>600,645=>600,646=>600,647=>600,648=>600,649=>600,
+651=>600,652=>600,653=>600,654=>600,655=>600,656=>600,657=>600,658=>600,660=>600,661=>600,
+662=>600,663=>600,664=>600,665=>600,667=>600,668=>600,669=>600,670=>600,671=>600,672=>600,
+673=>600,674=>600,679=>600,699=>600,700=>600,701=>600,702=>600,703=>600,711=>600,712=>600,
+713=>600,714=>600,715=>600,728=>600,729=>600,730=>600,731=>600,733=>600,768=>600,769=>600,
+770=>600,771=>600,772=>600,773=>600,774=>600,775=>600,776=>600,777=>600,778=>600,779=>600,
+780=>600,781=>600,782=>600,783=>600,785=>600,807=>600,808=>600,821=>600,822=>600,823=>600,
+824=>600,890=>600,900=>600,901=>600,902=>600,904=>600,905=>600,906=>600,908=>600,910=>600,
+911=>600,912=>600,913=>600,914=>600,915=>600,916=>600,917=>600,918=>600,919=>600,920=>600,
+921=>600,922=>600,923=>600,924=>600,925=>600,926=>600,927=>600,928=>600,929=>600,931=>600,
+932=>600,933=>600,934=>600,935=>600,936=>600,937=>600,938=>600,939=>600,940=>600,941=>600,
+942=>600,943=>600,944=>600,945=>600,946=>600,947=>600,948=>600,949=>600,950=>600,951=>600,
+952=>600,953=>600,954=>600,955=>600,956=>600,957=>600,958=>600,959=>600,960=>600,961=>600,
+962=>600,963=>600,964=>600,965=>600,966=>600,967=>600,968=>600,969=>600,970=>600,971=>600,
+972=>600,973=>600,974=>600,977=>600,978=>600,981=>600,982=>600,1024=>600,1025=>600,1026=>600,
+1027=>600,1028=>600,1029=>600,1030=>600,1031=>600,1032=>600,1033=>600,1034=>600,1035=>600,1036=>600,
+1037=>600,1038=>600,1039=>600,1040=>600,1041=>600,1042=>600,1043=>600,1044=>600,1045=>600,1046=>600,
+1047=>600,1048=>600,1049=>600,1050=>600,1051=>600,1052=>600,1053=>600,1054=>600,1055=>600,1056=>600,
+1057=>600,1058=>600,1059=>600,1060=>600,1061=>600,1062=>600,1063=>600,1064=>600,1065=>600,1066=>600,
+1067=>600,1068=>600,1069=>600,1070=>600,1071=>600,1072=>600,1073=>600,1074=>600,1075=>600,1076=>600,
+1077=>600,1078=>600,1079=>600,1080=>600,1081=>600,1082=>600,1083=>600,1084=>600,1085=>600,1086=>600,
+1087=>600,1088=>600,1089=>600,1090=>600,1091=>600,1092=>600,1093=>600,1094=>600,1095=>600,1096=>600,
+1097=>600,1098=>600,1099=>600,1100=>600,1101=>600,1102=>600,1103=>600,1104=>600,1105=>600,1106=>600,
+1107=>600,1108=>600,1109=>600,1110=>600,1111=>600,1112=>600,1113=>600,1114=>600,1115=>600,1116=>600,
+1117=>600,1118=>600,1119=>600,1164=>600,1165=>600,1166=>600,1167=>600,1168=>600,1169=>600,1170=>600,
+1171=>600,1172=>600,1173=>600,1174=>600,1175=>600,1176=>600,1177=>600,1178=>600,1179=>600,1180=>600,
+1181=>600,1182=>600,1183=>600,1184=>600,1185=>600,1186=>600,1187=>600,1188=>600,1189=>600,1190=>600,
+1191=>600,1192=>600,1193=>600,1194=>600,1195=>600,1196=>600,1197=>600,1198=>600,1199=>600,1200=>600,
+1201=>600,1202=>600,1203=>600,1204=>600,1205=>600,1206=>600,1207=>600,1208=>600,1209=>600,1210=>600,
+1211=>600,1212=>600,1213=>600,1214=>600,1215=>600,1216=>600,1217=>600,1218=>600,1219=>600,1220=>600,
+1223=>600,1224=>600,1227=>600,1228=>600,1232=>600,1233=>600,1234=>600,1235=>600,1236=>600,1237=>600,
+1238=>600,1239=>600,1240=>600,1241=>600,1242=>600,1243=>600,1244=>600,1245=>600,1246=>600,1247=>600,
+1248=>600,1249=>600,1250=>600,1251=>600,1252=>600,1253=>600,1254=>600,1255=>600,1256=>600,1257=>600,
+1258=>600,1259=>600,1260=>600,1261=>600,1262=>600,1263=>600,1264=>600,1265=>600,1266=>600,1267=>600,
+1268=>600,1269=>600,1272=>600,1273=>600,1329=>600,1330=>600,1331=>600,1332=>600,1333=>600,1334=>600,
+1335=>600,1336=>600,1337=>600,1338=>600,1339=>600,1340=>600,1341=>600,1342=>600,1343=>600,1344=>600,
+1345=>600,1346=>600,1347=>600,1348=>600,1349=>600,1350=>600,1351=>600,1352=>600,1353=>600,1354=>600,
+1355=>600,1356=>600,1357=>600,1358=>600,1359=>600,1360=>600,1361=>600,1362=>600,1363=>600,1364=>600,
+1365=>600,1366=>600,1377=>600,1378=>600,1379=>600,1380=>600,1381=>600,1382=>600,1383=>600,1384=>600,
+1385=>600,1386=>600,1387=>600,1388=>600,1389=>600,1390=>600,1391=>600,1392=>600,1393=>600,1394=>600,
+1395=>600,1396=>600,1397=>600,1398=>600,1399=>600,1400=>600,1401=>600,1402=>600,1403=>600,1404=>600,
+1405=>600,1406=>600,1407=>600,1408=>600,1409=>600,1410=>600,1411=>600,1412=>600,1413=>600,1414=>600,
+1418=>600,1456=>600,1457=>600,1458=>600,1459=>600,1460=>600,1461=>600,1462=>600,1463=>600,1464=>600,
+1465=>600,1467=>600,1468=>600,1469=>600,1470=>600,1471=>600,1472=>600,1473=>600,1474=>600,1475=>600,
+1476=>600,1488=>600,1489=>600,1490=>600,1491=>600,1492=>600,1493=>600,1494=>600,1495=>600,1496=>600,
+1497=>600,1498=>600,1499=>600,1500=>600,1501=>600,1502=>600,1503=>600,1504=>600,1505=>600,1506=>600,
+1507=>600,1508=>600,1509=>600,1510=>600,1511=>600,1512=>600,1513=>600,1514=>600,1520=>600,1521=>600,
+1522=>600,1523=>600,1524=>600,4304=>600,4305=>600,4306=>600,4307=>600,4308=>600,4309=>600,4310=>600,
+4311=>600,4312=>600,4313=>600,4314=>600,4315=>600,4316=>600,4317=>600,4318=>600,4319=>600,4320=>600,
+4321=>600,4322=>600,4323=>600,4324=>600,4325=>600,4326=>600,4327=>600,4328=>600,4329=>600,4330=>600,
+4331=>600,4332=>600,4333=>600,4334=>600,4335=>600,4336=>600,4337=>600,4338=>600,4339=>600,4340=>600,
+4341=>600,7680=>600,7681=>600,7682=>600,7683=>600,7684=>600,7685=>600,7686=>600,7687=>600,7688=>600,
+7689=>600,7690=>600,7691=>600,7692=>600,7693=>600,7694=>600,7695=>600,7696=>600,7697=>600,7698=>600,
+7699=>600,7700=>600,7701=>600,7702=>600,7703=>600,7704=>600,7705=>600,7706=>600,7707=>600,7708=>600,
+7709=>600,7710=>600,7711=>600,7712=>600,7713=>600,7714=>600,7715=>600,7716=>600,7717=>600,7718=>600,
+7719=>600,7720=>600,7721=>600,7722=>600,7723=>600,7724=>600,7725=>600,7726=>600,7727=>600,7728=>600,
+7729=>600,7730=>600,7731=>600,7732=>600,7733=>600,7734=>600,7735=>600,7736=>600,7737=>600,7738=>600,
+7739=>600,7740=>600,7741=>600,7742=>600,7743=>600,7744=>600,7745=>600,7746=>600,7747=>600,7748=>600,
+7749=>600,7750=>600,7751=>600,7752=>600,7753=>600,7754=>600,7755=>600,7756=>600,7757=>600,7758=>600,
+7759=>600,7760=>600,7761=>600,7762=>600,7763=>600,7764=>600,7765=>600,7766=>600,7767=>600,7768=>600,
+7769=>600,7770=>600,7771=>600,7772=>600,7773=>600,7774=>600,7775=>600,7776=>600,7777=>600,7778=>600,
+7779=>600,7780=>600,7781=>600,7782=>600,7783=>600,7784=>600,7785=>600,7786=>600,7787=>600,7788=>600,
+7789=>600,7790=>600,7791=>600,7792=>600,7793=>600,7794=>600,7795=>600,7796=>600,7797=>600,7798=>600,
+7799=>600,7800=>600,7801=>600,7802=>600,7803=>600,7804=>600,7805=>600,7806=>600,7807=>600,7808=>600,
+7809=>600,7810=>600,7811=>600,7812=>600,7813=>600,7814=>600,7815=>600,7816=>600,7817=>600,7818=>600,
+7819=>600,7820=>600,7821=>600,7822=>600,7823=>600,7824=>600,7825=>600,7826=>600,7827=>600,7828=>600,
+7829=>600,7830=>600,7831=>600,7832=>600,7833=>600,7835=>600,7840=>600,7841=>600,7842=>600,7843=>600,
+7844=>600,7845=>600,7846=>600,7847=>600,7848=>600,7849=>600,7850=>600,7851=>600,7852=>600,7853=>600,
+7854=>600,7855=>600,7856=>600,7857=>600,7858=>600,7859=>600,7860=>600,7861=>600,7862=>600,7863=>600,
+7864=>600,7865=>600,7866=>600,7867=>600,7868=>600,7869=>600,7870=>600,7871=>600,7872=>600,7873=>600,
+7874=>600,7875=>600,7876=>600,7877=>600,7878=>600,7879=>600,7880=>600,7881=>600,7882=>600,7883=>600,
+7884=>600,7885=>600,7886=>600,7887=>600,7888=>600,7889=>600,7890=>600,7891=>600,7892=>600,7893=>600,
+7894=>600,7895=>600,7896=>600,7897=>600,7898=>600,7899=>600,7900=>600,7901=>600,7902=>600,7903=>600,
+7904=>600,7905=>600,7906=>600,7907=>600,7908=>600,7909=>600,7910=>600,7911=>600,7912=>600,7913=>600,
+7914=>600,7915=>600,7916=>600,7917=>600,7918=>600,7919=>600,7920=>600,7921=>600,7922=>600,7923=>600,
+7924=>600,7925=>600,7926=>600,7927=>600,7928=>600,7929=>600,7936=>600,7937=>600,7938=>600,7939=>600,
+7940=>600,7941=>600,7942=>600,7943=>600,7944=>600,7945=>600,7946=>600,7947=>600,7948=>600,7949=>600,
+7950=>600,7951=>600,7952=>600,7953=>600,7954=>600,7955=>600,7956=>600,7957=>600,7958=>600,7959=>600,
+7960=>600,7961=>600,7962=>600,7963=>600,7964=>600,7965=>600,7966=>600,7967=>600,7968=>600,7969=>600,
+7970=>600,7971=>600,7972=>600,7973=>600,7974=>600,7975=>600,7976=>600,7977=>600,7978=>600,7979=>600,
+7980=>600,7981=>600,7982=>600,7983=>600,7984=>600,7985=>600,7986=>600,7987=>600,7988=>600,7989=>600,
+7990=>600,7991=>600,7992=>600,7993=>600,7994=>600,7995=>600,7996=>600,7997=>600,7998=>600,7999=>600,
+8000=>600,8001=>600,8002=>600,8003=>600,8004=>600,8005=>600,8006=>600,8007=>600,8008=>600,8009=>600,
+8010=>600,8011=>600,8012=>600,8013=>600,8014=>600,8015=>600,8016=>600,8017=>600,8018=>600,8019=>600,
+8020=>600,8021=>600,8022=>600,8023=>600,8024=>600,8025=>600,8026=>600,8027=>600,8028=>600,8029=>600,
+8030=>600,8031=>600,8032=>600,8033=>600,8034=>600,8035=>600,8036=>600,8037=>600,8038=>600,8039=>600,
+8040=>600,8041=>600,8042=>600,8043=>600,8044=>600,8045=>600,8046=>600,8047=>600,8048=>600,8049=>600,
+8050=>600,8051=>600,8052=>600,8053=>600,8054=>600,8055=>600,8056=>600,8057=>600,8058=>600,8059=>600,
+8060=>600,8061=>600,8062=>600,8063=>600,8064=>600,8065=>600,8066=>600,8067=>600,8068=>600,8069=>600,
+8070=>600,8071=>600,8072=>600,8073=>600,8074=>600,8075=>600,8076=>600,8077=>600,8078=>600,8079=>600,
+8080=>600,8081=>600,8082=>600,8083=>600,8084=>600,8085=>600,8086=>600,8087=>600,8088=>600,8089=>600,
+8090=>600,8091=>600,8092=>600,8093=>600,8094=>600,8095=>600,8096=>600,8097=>600,8098=>600,8099=>600,
+8100=>600,8101=>600,8102=>600,8103=>600,8104=>600,8105=>600,8106=>600,8107=>600,8108=>600,8109=>600,
+8110=>600,8111=>600,8112=>600,8113=>600,8114=>600,8115=>600,8116=>600,8117=>600,8118=>600,8119=>600,
+8120=>600,8121=>600,8122=>600,8123=>600,8124=>600,8125=>600,8126=>600,8127=>600,8128=>600,8129=>600,
+8130=>600,8131=>600,8132=>600,8133=>600,8134=>600,8135=>600,8136=>600,8137=>600,8138=>600,8139=>600,
+8140=>600,8141=>600,8142=>600,8143=>600,8144=>600,8145=>600,8146=>600,8147=>600,8148=>600,8149=>600,
+8150=>600,8151=>600,8152=>600,8153=>600,8154=>600,8155=>600,8156=>600,8157=>600,8158=>600,8159=>600,
+8160=>600,8161=>600,8162=>600,8163=>600,8164=>600,8165=>600,8166=>600,8167=>600,8168=>600,8169=>600,
+8170=>600,8171=>600,8172=>600,8173=>600,8174=>600,8175=>600,8176=>600,8177=>600,8178=>600,8179=>600,
+8180=>600,8181=>600,8182=>600,8183=>600,8184=>600,8185=>600,8186=>600,8187=>600,8188=>600,8189=>600,
+8190=>600,8213=>600,8219=>600,8223=>600,8241=>600,8242=>600,8243=>600,8244=>600,8245=>600,8246=>600,
+8247=>600,8251=>600,8252=>600,8253=>600,8254=>600,8260=>600,8261=>600,8262=>600,8264=>600,8265=>600,
+8266=>600,8267=>600,8304=>600,8305=>600,8306=>600,8307=>600,8308=>600,8309=>600,8310=>600,8311=>600,
+8312=>600,8313=>600,8320=>600,8321=>600,8322=>600,8323=>600,8324=>600,8325=>600,8326=>600,8327=>600,
+8328=>600,8329=>600,8355=>600,8356=>600,8359=>600,8362=>600,8373=>600,8448=>600,8449=>600,8450=>600,
+8451=>600,8453=>600,8454=>600,8455=>600,8461=>600,8464=>600,8465=>600,8466=>600,8467=>600,8468=>600,
+8469=>600,8470=>600,8471=>600,8472=>600,8473=>600,8474=>600,8476=>600,8477=>600,8478=>600,8484=>600,
+8486=>600,8487=>600,8490=>600,8491=>600,8501=>600,8531=>600,8532=>600,8533=>600,8534=>600,8535=>600,
+8536=>600,8537=>600,8538=>600,8539=>600,8540=>600,8541=>600,8542=>600,8543=>600,8544=>600,8545=>600,
+8546=>600,8547=>600,8548=>600,8549=>600,8550=>600,8551=>600,8552=>600,8553=>600,8554=>600,8555=>600,
+8556=>600,8557=>600,8558=>600,8559=>600,8592=>600,8593=>600,8594=>600,8595=>600,8596=>600,8597=>600,
+8598=>600,8599=>600,8600=>600,8601=>600,8616=>600,8704=>600,8706=>600,8707=>600,8709=>600,8710=>600,
+8711=>600,8712=>600,8713=>600,8715=>600,8716=>600,8721=>600,8722=>600,8723=>600,8725=>600,8729=>600,
+8730=>600,8733=>600,8734=>600,8745=>600,8746=>600,8747=>600,8756=>600,8764=>600,8769=>600,8773=>600,
+8776=>600,8800=>600,8801=>600,8804=>600,8805=>600,8834=>600,8835=>600,8836=>600,8837=>600,8838=>600,
+8839=>600,9001=>600,9002=>600,9674=>600,9833=>600,9834=>600,9835=>600,9836=>600,9837=>600,9838=>600,
+9839=>600,63166=>600,63171=>600,64256=>600,64257=>600,64258=>600,64285=>600,64286=>600,64287=>600,64288=>600,
+64289=>600,64290=>600,64291=>600,64292=>600,64293=>600,64294=>600,64295=>600,64296=>600,64297=>600,64298=>600,
+64299=>600,64300=>600,64301=>600,64302=>600,64303=>600,64304=>600,64305=>600,64306=>600,64307=>600,64308=>600,
+64309=>600,64310=>600,64312=>600,64313=>600,64314=>600,64315=>600,64316=>600,64318=>600,64320=>600,64321=>600,
+64323=>600,64324=>600,64326=>600,64327=>600,64328=>600,64329=>600,64330=>600,64331=>600,64332=>600,64333=>600,
+64334=>600,64335=>600,65533=>600);
+$enc='';
+$diff='';
+$file='freemonoi.z';
+$ctg='freemonoi.ctg.z';
+$originalsize=191616;
+?> \ No newline at end of file
diff --git a/admin/exportclases/fonts/freesans.ctg.z b/admin/exportclases/fonts/freesans.ctg.z
new file mode 100644
index 0000000..fbc70ed
--- /dev/null
+++ b/admin/exportclases/fonts/freesans.ctg.z
Binary files differ
diff --git a/admin/exportclases/fonts/freesans.php b/admin/exportclases/fonts/freesans.php
new file mode 100644
index 0000000..6e61e1b
--- /dev/null
+++ b/admin/exportclases/fonts/freesans.php
@@ -0,0 +1,312 @@
+<?php
+$type='TrueTypeUnicode';
+$name='FreeSans';
+$desc=array('Ascent'=>900,'Descent'=>-300,'CapHeight'=>22,'Flags'=>32,'FontBBox'=>'[-701 -462 1632 1141]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>600);
+$up=-176;
+$ut=50;
+$dw=600;
+$cw=array(
+32=>278,33=>278,34=>355,35=>556,36=>556,37=>889,38=>667,39=>191,40=>333,41=>333,
+42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556,
+52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>278,59=>278,60=>584,61=>584,
+62=>584,63=>556,64=>1015,65=>667,66=>667,67=>722,68=>722,69=>667,70=>611,71=>778,
+72=>722,73=>278,74=>500,75=>667,76=>556,77=>833,78=>722,79=>778,80=>667,81=>778,
+82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>278,
+92=>278,93=>278,94=>469,95=>556,96=>333,97=>556,98=>556,99=>500,100=>556,101=>556,
+102=>278,103=>556,104=>556,105=>222,106=>222,107=>500,108=>222,109=>833,110=>556,111=>556,
+112=>556,113=>556,114=>333,115=>500,116=>278,117=>556,118=>500,119=>722,120=>500,121=>500,
+122=>500,123=>334,124=>260,125=>334,126=>584,8364=>556,8218=>222,402=>278,8222=>333,8230=>1000,
+8224=>556,8225=>556,710=>333,8240=>1000,352=>667,8249=>333,338=>1000,381=>611,8216=>222,8217=>221,
+8220=>333,8221=>333,8226=>350,8211=>556,8212=>1000,732=>333,8482=>1000,353=>500,8250=>333,339=>944,
+382=>500,376=>667,160=>278,161=>278,162=>556,163=>556,164=>556,165=>556,166=>260,167=>556,
+168=>333,169=>737,170=>370,171=>556,172=>584,173=>333,174=>737,175=>333,176=>606,177=>584,
+178=>351,179=>351,180=>333,181=>556,182=>537,183=>278,184=>333,185=>240,186=>365,187=>556,
+188=>869,189=>869,190=>869,191=>556,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667,
+198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,
+208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722,
+218=>722,219=>722,220=>722,221=>667,222=>666,223=>611,224=>556,225=>556,226=>556,227=>556,
+228=>556,229=>556,230=>889,231=>500,232=>556,233=>556,234=>556,235=>556,236=>278,237=>278,
+238=>278,239=>278,240=>556,241=>556,242=>556,243=>556,244=>556,245=>556,246=>556,247=>584,
+248=>611,249=>556,250=>556,251=>556,252=>556,253=>500,254=>555,255=>500,256=>667,257=>556,
+258=>667,259=>556,260=>667,261=>556,262=>722,263=>500,264=>722,265=>500,266=>722,267=>500,
+268=>722,269=>500,270=>722,271=>722,272=>722,273=>556,274=>667,275=>556,276=>667,277=>556,
+278=>667,279=>556,280=>667,281=>556,282=>667,283=>556,284=>778,285=>556,286=>778,287=>556,
+288=>778,289=>556,290=>778,291=>697,292=>722,293=>556,294=>722,295=>556,296=>278,297=>278,
+298=>278,299=>278,300=>278,301=>278,302=>278,303=>222,304=>278,305=>278,306=>700,307=>374,
+308=>500,309=>222,310=>667,311=>500,312=>500,313=>556,314=>222,315=>556,316=>222,317=>556,
+318=>387,319=>556,320=>500,321=>556,322=>222,323=>722,324=>556,325=>722,326=>556,327=>722,
+328=>556,329=>722,330=>722,331=>556,332=>778,333=>556,334=>778,335=>556,336=>778,337=>556,
+340=>722,341=>333,342=>722,343=>333,344=>722,345=>333,346=>667,347=>500,348=>667,349=>500,
+350=>667,351=>500,354=>611,355=>278,356=>611,357=>443,358=>611,359=>278,360=>722,361=>556,
+362=>722,363=>556,364=>722,365=>556,366=>722,367=>556,368=>722,369=>556,370=>722,371=>556,
+372=>944,373=>722,374=>667,375=>500,377=>611,378=>500,379=>611,380=>500,383=>278,384=>556,
+385=>854,386=>667,387=>556,388=>667,389=>556,390=>722,391=>722,392=>500,393=>722,394=>899,
+395=>667,396=>556,397=>556,398=>667,399=>722,400=>667,401=>611,403=>778,404=>667,405=>889,
+406=>278,407=>333,408=>667,409=>500,410=>333,411=>560,412=>833,413=>722,414=>556,415=>778,
+416=>778,417=>556,418=>944,419=>722,420=>842,421=>556,422=>666,423=>667,424=>500,425=>611,
+426=>333,427=>278,428=>611,429=>278,430=>611,431=>722,432=>556,433=>778,434=>722,435=>722,
+436=>556,437=>611,438=>500,439=>611,440=>611,441=>500,442=>500,443=>556,446=>556,447=>556,
+448=>260,449=>370,450=>584,451=>278,452=>1311,453=>1208,454=>1056,455=>1056,456=>778,457=>444,
+458=>1158,459=>944,460=>778,461=>667,462=>556,463=>278,464=>278,465=>778,466=>556,467=>722,
+468=>556,469=>722,470=>556,471=>722,472=>556,473=>722,474=>556,475=>722,476=>556,477=>556,
+478=>667,479=>556,480=>667,481=>556,482=>1000,483=>889,484=>778,485=>556,486=>778,487=>556,
+488=>667,489=>500,490=>778,491=>556,492=>778,493=>556,494=>611,495=>500,496=>222,497=>1333,
+498=>1222,499=>1056,500=>778,501=>556,504=>722,505=>556,506=>667,507=>556,508=>1000,509=>889,
+510=>778,511=>611,512=>667,513=>556,514=>667,515=>556,516=>667,517=>556,518=>667,519=>556,
+520=>278,521=>278,522=>278,523=>278,524=>778,525=>556,526=>778,527=>556,528=>722,529=>333,
+530=>1083,531=>333,532=>722,533=>556,534=>722,535=>556,536=>667,537=>500,538=>611,539=>278,
+542=>722,543=>556,548=>611,549=>500,550=>667,551=>556,552=>667,553=>556,554=>778,555=>556,
+556=>778,557=>556,558=>778,559=>556,560=>778,561=>556,562=>667,563=>500,567=>222,592=>556,
+593=>556,594=>556,595=>556,596=>500,597=>500,598=>556,599=>556,600=>556,601=>556,603=>500,
+604=>500,606=>500,607=>222,608=>556,609=>556,610=>546,611=>500,612=>556,613=>556,614=>556,
+615=>556,616=>222,617=>222,618=>278,621=>222,622=>611,623=>833,624=>833,625=>833,626=>556,
+627=>556,628=>567,629=>556,630=>778,631=>722,632=>741,633=>333,634=>333,635=>333,636=>333,
+637=>333,638=>384,639=>369,640=>546,641=>546,642=>500,643=>278,644=>278,645=>278,646=>444,
+647=>278,648=>278,649=>556,650=>626,651=>539,652=>500,653=>722,654=>500,655=>556,656=>500,
+657=>500,658=>500,660=>556,661=>556,662=>556,663=>722,664=>778,665=>522,666=>500,667=>546,
+668=>558,669=>444,670=>500,671=>430,672=>556,673=>556,674=>556,675=>944,676=>944,677=>944,
+702=>333,703=>333,711=>333,713=>333,714=>333,715=>333,722=>333,723=>333,728=>333,729=>333,
+730=>333,731=>333,733=>333,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,
+775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,
+785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,
+795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,
+805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,
+815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,
+825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,
+835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0,844=>0,
+845=>0,846=>0,848=>0,849=>0,850=>0,851=>0,852=>0,853=>0,854=>0,855=>0,
+856=>0,857=>0,858=>0,859=>0,860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,
+866=>0,867=>0,868=>0,869=>0,870=>0,871=>0,872=>0,873=>0,874=>0,875=>0,
+876=>0,877=>0,878=>0,879=>0,884=>199,885=>199,890=>332,894=>278,900=>333,901=>333,
+902=>667,903=>278,904=>786,905=>828,906=>369,908=>833,910=>845,911=>778,912=>286,913=>667,
+914=>667,915=>582,916=>778,917=>667,918=>628,919=>722,920=>778,921=>278,922=>667,923=>667,
+924=>833,925=>722,926=>630,927=>778,928=>722,929=>667,931=>628,932=>611,933=>667,934=>717,
+935=>667,936=>745,937=>778,938=>278,939=>667,940=>608,941=>528,942=>547,943=>307,944=>515,
+945=>596,946=>516,947=>531,948=>556,949=>510,950=>462,951=>526,952=>526,953=>286,954=>516,
+955=>560,956=>574,957=>500,958=>470,959=>556,960=>661,961=>566,962=>535,963=>616,964=>532,
+965=>515,966=>741,967=>572,968=>662,969=>740,970=>286,971=>515,972=>553,973=>518,974=>740,
+977=>580,978=>742,981=>741,982=>740,983=>556,1008=>556,1009=>566,1013=>328,1024=>667,1025=>667,
+1026=>766,1027=>611,1028=>722,1029=>667,1030=>278,1031=>278,1032=>500,1033=>1080,1034=>1014,1035=>766,
+1036=>667,1037=>728,1038=>650,1039=>722,1040=>667,1041=>667,1042=>667,1043=>611,1044=>812,1045=>667,
+1046=>1023,1047=>667,1048=>728,1049=>728,1050=>667,1051=>673,1052=>833,1053=>722,1054=>778,1055=>719,
+1056=>667,1057=>722,1058=>611,1059=>650,1060=>936,1061=>667,1062=>741,1063=>648,1064=>828,1065=>850,
+1066=>897,1067=>872,1068=>667,1069=>722,1070=>1032,1071=>702,1072=>556,1073=>556,1074=>522,1075=>430,
+1076=>602,1077=>556,1078=>837,1079=>500,1080=>567,1081=>567,1082=>510,1083=>557,1084=>618,1085=>558,
+1086=>556,1087=>557,1088=>556,1089=>500,1090=>496,1091=>500,1092=>912,1093=>500,1094=>578,1095=>520,
+1096=>692,1097=>712,1098=>734,1099=>690,1100=>552,1101=>500,1102=>758,1103=>543,1104=>556,1105=>556,
+1106=>568,1107=>430,1108=>500,1109=>500,1110=>222,1111=>278,1112=>222,1113=>840,1114=>850,1115=>568,
+1116=>510,1117=>567,1118=>500,1119=>556,1138=>778,1139=>556,1164=>667,1165=>552,1166=>667,1167=>556,
+1168=>611,1169=>430,1170=>611,1171=>430,1172=>611,1173=>490,1174=>1023,1175=>837,1176=>667,1177=>500,
+1178=>667,1179=>510,1180=>667,1181=>500,1182=>667,1183=>500,1184=>900,1185=>683,1186=>722,1187=>556,
+1188=>1000,1189=>764,1190=>1061,1191=>826,1194=>722,1195=>500,1196=>611,1197=>496,1198=>667,1199=>667,
+1200=>667,1201=>667,1202=>667,1203=>500,1204=>942,1205=>732,1206=>648,1207=>520,1208=>648,1209=>520,
+1210=>648,1211=>520,1212=>927,1213=>716,1214=>927,1215=>716,1216=>278,1217=>1023,1218=>837,1219=>667,
+1220=>500,1221=>673,1222=>557,1223=>722,1224=>556,1225=>722,1226=>558,1227=>648,1228=>520,1229=>833,
+1230=>618,1232=>667,1233=>556,1234=>667,1235=>556,1236=>1000,1237=>889,1238=>667,1239=>556,1240=>722,
+1241=>556,1242=>722,1243=>556,1244=>1023,1245=>837,1246=>667,1247=>500,1248=>611,1249=>500,1250=>728,
+1251=>567,1252=>728,1253=>567,1254=>778,1255=>556,1256=>778,1257=>556,1258=>778,1259=>556,1260=>722,
+1261=>500,1262=>650,1263=>500,1264=>650,1265=>500,1266=>650,1267=>500,1268=>648,1269=>520,1272=>872,
+1273=>690,1329=>722,1330=>705,1331=>774,1332=>754,1333=>722,1334=>751,1335=>485,1336=>722,1337=>782,
+1338=>655,1339=>699,1340=>417,1341=>853,1342=>791,1343=>711,1344=>588,1345=>663,1346=>665,1347=>665,
+1348=>756,1349=>623,1350=>773,1351=>603,1352=>722,1353=>648,1354=>722,1355=>751,1356=>750,1357=>722,
+1358=>748,1359=>667,1360=>699,1361=>623,1362=>417,1363=>785,1364=>638,1365=>778,1366=>716,1369=>333,
+1370=>222,1371=>133,1372=>333,1373=>333,1374=>333,1375=>333,1377=>833,1378=>556,1379=>572,1380=>581,
+1381=>550,1382=>588,1383=>448,1384=>556,1385=>568,1386=>582,1387=>545,1388=>301,1389=>799,1390=>556,
+1391=>554,1392=>533,1393=>548,1394=>552,1395=>552,1396=>544,1397=>222,1398=>544,1399=>456,1400=>556,
+1401=>390,1402=>833,1403=>509,1404=>547,1405=>533,1406=>610,1407=>887,1408=>556,1409=>545,1410=>352,
+1411=>853,1412=>588,1413=>579,1414=>690,1415=>545,1417=>278,1418=>333,1456=>70,1457=>335,1458=>329,
+1459=>329,1460=>70,1461=>200,1462=>200,1463=>188,1464=>188,1465=>70,1467=>329,1468=>70,1469=>70,
+1470=>488,1471=>200,1472=>212,1473=>0,1474=>0,1475=>278,1476=>70,1488=>640,1489=>591,1490=>466,
+1491=>598,1492=>622,1493=>212,1494=>351,1495=>623,1496=>608,1497=>200,1498=>526,1499=>550,1500=>600,
+1501=>623,1502=>621,1503=>212,1504=>378,1505=>607,1506=>587,1507=>575,1508=>568,1509=>540,1510=>590,
+1511=>606,1512=>547,1513=>776,1514=>687,1792=>600,1793=>201,1794=>201,1795=>201,1796=>201,1797=>500,
+1798=>500,1799=>500,1800=>370,1801=>370,1802=>574,1803=>574,1804=>645,1805=>574,1808=>452,1809=>452,
+1810=>574,1811=>645,1812=>645,1813=>509,1814=>509,1815=>682,1816=>585,1817=>404,1818=>627,1819=>718,
+1820=>718,1821=>484,1822=>682,1823=>600,1824=>660,1825=>682,1826=>538,1827=>718,1828=>718,1829=>718,
+1830=>574,1831=>574,1832=>638,1833=>585,1834=>509,1835=>682,1836=>682,1840=>0,1841=>0,1842=>0,
+1843=>0,1844=>0,1845=>0,1846=>0,1847=>0,1848=>0,1849=>0,1850=>0,1851=>0,1852=>0,
+1853=>0,1854=>0,1855=>0,1856=>0,1857=>0,1858=>0,1859=>0,1860=>0,1861=>0,1862=>0,
+1863=>0,1864=>0,1865=>0,1866=>0,2305=>6,2306=>0,2307=>305,2308=>717,2309=>717,2310=>829,
+2311=>463,2312=>463,2313=>581,2314=>803,2315=>920,2316=>639,2317=>430,2318=>430,2319=>430,2320=>430,
+2321=>856,2322=>828,2323=>837,2324=>856,2325=>749,2326=>779,2327=>522,2328=>587,2329=>650,2330=>619,
+2331=>641,2332=>703,2333=>691,2334=>677,2335=>568,2336=>529,2337=>611,2338=>536,2339=>607,2340=>564,
+2341=>659,2342=>500,2343=>591,2344=>521,2345=>568,2346=>477,2347=>728,2348=>490,2349=>577,2350=>517,
+2351=>554,2352=>433,2353=>433,2354=>656,2355=>660,2356=>660,2357=>490,2358=>645,2359=>477,2360=>666,
+2361=>484,2363=>639,2364=>6,2365=>442,2366=>211,2367=>211,2368=>211,2369=>6,2370=>3,2371=>6,
+2372=>0,2373=>6,2374=>84,2375=>6,2376=>6,2377=>224,2378=>234,2379=>211,2380=>211,2381=>6,
+2383=>6,2384=>839,2385=>15,2386=>0,2387=>9,2388=>9,2389=>12,2392=>750,2393=>779,2394=>522,
+2395=>703,2396=>613,2397=>536,2398=>728,2399=>554,2400=>899,2401=>625,2402=>625,2403=>625,2404=>674,
+2405=>674,2406=>575,2407=>575,2408=>575,2409=>575,2410=>575,2411=>575,2412=>575,2413=>575,2414=>575,
+2415=>575,2416=>365,2417=>211,2418=>211,2419=>211,2420=>211,2421=>211,2422=>211,2433=>0,2434=>300,
+2435=>264,2437=>594,2438=>790,2439=>469,2440=>513,2441=>520,2442=>549,2443=>594,2444=>481,2447=>580,
+2448=>627,2451=>540,2452=>613,2453=>570,2454=>467,2455=>471,2456=>428,2457=>483,2458=>408,2459=>509,
+2460=>591,2461=>563,2462=>771,2463=>381,2464=>404,2465=>522,2466=>408,2467=>450,2468=>543,2469=>477,
+2470=>418,2471=>433,2472=>445,2474=>499,2475=>584,2476=>377,2477=>555,2478=>448,2479=>423,2480=>390,
+2482=>498,2486=>498,2487=>425,2488=>495,2489=>440,2492=>22,2493=>440,2494=>193,2495=>189,2496=>180,
+2497=>0,2498=>0,2499=>0,2500=>0,2503=>252,2504=>243,2507=>889,2508=>865,2509=>0,2510=>356,
+2519=>219,2524=>523,2525=>408,2527=>428,2528=>594,2529=>481,2530=>0,2531=>-199,2534=>500,2535=>437,
+2536=>479,2537=>530,2538=>497,2539=>500,2540=>482,2541=>503,2542=>517,2543=>481,2544=>377,2545=>377,
+2546=>429,2547=>383,2548=>429,2549=>478,2550=>545,2551=>158,2552=>365,2553=>280,2554=>357,2561=>5,
+2562=>64,2563=>351,2565=>860,2566=>1088,2567=>869,2568=>928,2569=>723,2570=>723,2575=>665,2576=>857,
+2579=>716,2580=>858,2581=>682,2582=>634,2583=>696,2584=>744,2585=>649,2586=>674,2587=>656,2588=>653,
+2589=>629,2590=>639,2591=>641,2592=>657,2593=>650,2594=>653,2595=>651,2596=>640,2597=>634,2598=>662,
+2599=>630,2600=>625,2602=>645,2603=>653,2604=>624,2605=>613,2606=>658,2607=>734,2608=>620,2610=>676,
+2611=>719,2613=>626,2614=>666,2616=>666,2617=>614,2620=>0,2622=>286,2623=>322,2624=>301,2625=>9,
+2626=>9,2631=>9,2632=>9,2635=>9,2636=>9,2637=>0,2649=>636,2650=>762,2651=>652,2652=>653,
+2654=>656,2662=>672,2663=>543,2664=>622,2665=>622,2666=>576,2667=>595,2668=>509,2669=>645,2670=>661,
+2671=>655,2672=>9,2673=>168,2674=>666,2675=>726,2676=>1217,2689=>22,2690=>23,2691=>-51,2693=>775,
+2694=>979,2695=>588,2696=>563,2697=>525,2698=>724,2699=>942,2701=>775,2703=>775,2704=>775,2705=>979,
+2707=>979,2708=>979,2709=>610,2710=>706,2711=>623,2712=>610,2713=>601,2714=>614,2715=>642,2716=>684,
+2717=>634,2718=>644,2719=>509,2720=>541,2721=>539,2722=>524,2723=>657,2724=>547,2725=>616,2726=>494,
+2727=>601,2728=>627,2730=>524,2731=>620,2732=>691,2733=>687,2734=>468,2735=>590,2736=>509,2738=>571,
+2739=>687,2741=>526,2742=>620,2743=>575,2744=>620,2745=>549,2746=>0,2748=>53,2749=>415,2750=>241,
+2751=>186,2752=>217,2753=>32,2754=>21,2755=>38,2756=>27,2757=>45,2759=>41,2760=>46,2761=>207,
+2763=>190,2764=>182,2765=>16,2768=>962,2784=>949,2788=>222,2789=>383,2790=>479,2791=>502,2792=>484,
+2793=>471,2794=>501,2795=>527,2796=>462,2797=>524,2798=>454,2799=>495,2800=>496,2801=>752,2818=>131,
+2819=>302,2821=>560,2822=>644,2823=>632,2825=>630,2827=>553,2831=>604,2835=>520,2837=>572,2838=>570,
+2839=>580,2840=>565,2842=>580,2844=>564,2845=>575,2847=>565,2848=>565,2849=>524,2858=>572,2859=>700,
+2863=>655,2864=>620,2866=>652,2867=>560,2870=>565,2871=>565,2872=>545,2873=>524,2878=>128,2879=>1,
+2880=>190,2881=>1,2882=>1,2883=>1,2887=>396,2912=>563,2918=>508,2919=>424,2920=>440,2921=>600,
+2922=>600,2923=>600,2924=>600,2925=>600,2926=>511,2927=>483,2946=>479,2947=>893,2949=>1018,2950=>1170,
+2951=>916,2952=>676,2953=>836,2954=>1225,2958=>744,2959=>744,2960=>848,2962=>813,2963=>813,2964=>813,
+2965=>688,2969=>744,2970=>676,2972=>848,2974=>984,2975=>777,2979=>1338,2980=>664,2984=>561,2985=>1029,
+2986=>607,2990=>697,2991=>697,2992=>434,2993=>617,2994=>869,2995=>859,2996=>697,2997=>869,2999=>1145,
+3000=>1064,3001=>1316,3006=>424,3007=>125,3008=>596,3009=>539,3014=>596,3015=>650,3016=>973,3018=>1286,
+3019=>1286,3020=>1706,3021=>333,3031=>859,3034=>778,3035=>881,3036=>876,3037=>648,3041=>744,3203=>342,
+3205=>620,3206=>591,3207=>600,3208=>776,3209=>1138,3210=>1464,3214=>574,3215=>570,3216=>580,3218=>589,
+3219=>597,3220=>625,3221=>256,3222=>565,3223=>326,3224=>604,3225=>651,3226=>408,3228=>611,3230=>843,
+3231=>610,3232=>258,3233=>317,3234=>328,3235=>803,3236=>317,3237=>328,3238=>352,3239=>352,3240=>317,
+3248=>248,3249=>621,3250=>620,3251=>620,3302=>649,3303=>550,3304=>573,3305=>567,3306=>562,3307=>557,
+3308=>562,3309=>567,3310=>557,3311=>557,4256=>587,4257=>620,4258=>642,4259=>815,4260=>600,4261=>595,
+4262=>799,4263=>893,4264=>622,4265=>597,4266=>939,4267=>602,4268=>603,4269=>790,4270=>587,4271=>623,
+4272=>799,4273=>601,4274=>792,4275=>724,4276=>847,4277=>599,4278=>812,4279=>603,4280=>653,4281=>590,
+4282=>754,4283=>596,4284=>653,4285=>651,4286=>596,4287=>888,4288=>593,4304=>436,4305=>491,4306=>528,
+4307=>692,4308=>447,4309=>447,4310=>628,4311=>734,4312=>449,4313=>445,4314=>843,4315=>449,4316=>449,
+4317=>682,4318=>449,4319=>480,4320=>682,4321=>468,4322=>710,4323=>623,4324=>697,4325=>447,4326=>702,
+4327=>447,4328=>470,4329=>440,4330=>632,4331=>449,4332=>470,4333=>536,4334=>449,4335=>656,4336=>474,
+4337=>630,4338=>394,4339=>419,4340=>422,4341=>436,7680=>667,7681=>556,7682=>667,7683=>556,7684=>667,
+7685=>556,7686=>667,7687=>556,7688=>722,7689=>500,7690=>722,7691=>556,7692=>722,7693=>556,7694=>722,
+7695=>556,7696=>722,7697=>556,7698=>722,7699=>556,7700=>667,7701=>556,7702=>667,7703=>556,7704=>667,
+7705=>556,7706=>667,7707=>556,7708=>667,7709=>556,7710=>611,7711=>278,7712=>778,7713=>556,7714=>722,
+7715=>556,7716=>722,7717=>556,7718=>722,7719=>556,7720=>722,7721=>556,7722=>722,7723=>556,7724=>278,
+7725=>222,7726=>278,7727=>278,7728=>667,7729=>500,7730=>667,7731=>500,7732=>667,7733=>500,7734=>556,
+7735=>222,7736=>556,7737=>222,7738=>556,7739=>222,7740=>556,7741=>222,7742=>833,7743=>833,7744=>833,
+7745=>833,7746=>833,7747=>833,7748=>722,7749=>556,7750=>722,7751=>556,7752=>722,7753=>556,7754=>722,
+7755=>556,7756=>778,7757=>556,7758=>778,7759=>556,7760=>778,7761=>556,7762=>778,7763=>556,7764=>667,
+7765=>556,7766=>667,7767=>556,7768=>722,7769=>333,7770=>722,7771=>333,7772=>722,7773=>333,7774=>722,
+7775=>333,7776=>667,7777=>500,7778=>667,7779=>500,7780=>667,7781=>500,7782=>667,7783=>500,7784=>667,
+7785=>500,7786=>611,7787=>278,7788=>611,7789=>278,7790=>611,7791=>278,7792=>611,7793=>278,7794=>722,
+7795=>556,7796=>722,7797=>556,7798=>722,7799=>556,7800=>722,7801=>556,7802=>722,7803=>556,7804=>667,
+7805=>500,7806=>667,7807=>500,7808=>944,7809=>722,7810=>944,7811=>722,7812=>944,7813=>722,7814=>944,
+7815=>722,7816=>944,7817=>722,7818=>667,7819=>500,7820=>667,7821=>500,7822=>667,7823=>500,7824=>611,
+7825=>500,7826=>611,7827=>500,7828=>611,7829=>500,7830=>556,7831=>278,7832=>722,7833=>500,7835=>278,
+7840=>667,7841=>556,7842=>667,7843=>556,7844=>667,7845=>556,7846=>667,7847=>556,7848=>667,7849=>556,
+7850=>667,7851=>556,7852=>667,7853=>556,7854=>667,7855=>556,7856=>667,7857=>556,7858=>667,7859=>556,
+7860=>667,7861=>556,7862=>667,7863=>556,7864=>667,7865=>556,7866=>667,7867=>556,7868=>667,7869=>556,
+7870=>667,7871=>556,7872=>667,7873=>556,7874=>667,7875=>556,7876=>667,7877=>556,7878=>667,7879=>556,
+7880=>278,7881=>278,7882=>278,7883=>222,7884=>778,7885=>556,7886=>778,7887=>556,7888=>778,7889=>556,
+7890=>778,7891=>556,7892=>778,7893=>556,7894=>778,7895=>556,7896=>778,7897=>556,7898=>778,7899=>556,
+7900=>778,7901=>556,7902=>778,7903=>556,7904=>778,7905=>556,7906=>778,7907=>556,7908=>722,7909=>556,
+7910=>722,7911=>556,7912=>722,7913=>556,7914=>722,7915=>556,7916=>722,7917=>556,7918=>722,7919=>556,
+7920=>722,7921=>556,7922=>667,7923=>500,7924=>667,7925=>500,7926=>667,7927=>500,7928=>667,7929=>500,
+7936=>596,7937=>596,7938=>596,7939=>596,7940=>596,7941=>596,7942=>596,7943=>596,7944=>667,7945=>667,
+7946=>833,7947=>833,7948=>833,7949=>833,7950=>833,7951=>833,7952=>510,7953=>510,7954=>510,7955=>510,
+7956=>510,7957=>510,7960=>778,7961=>778,7962=>944,7963=>944,7964=>944,7965=>944,7968=>526,7969=>526,
+7970=>526,7971=>526,7972=>526,7973=>526,7974=>526,7975=>526,7976=>778,7977=>778,7978=>1000,7979=>1000,
+7980=>1000,7981=>1000,7982=>1000,7983=>1000,7984=>286,7985=>286,7986=>286,7987=>286,7988=>286,7989=>286,
+7990=>286,7991=>286,7992=>400,7993=>400,7994=>611,7995=>611,7996=>611,7997=>611,7998=>611,7999=>611,
+8000=>556,8001=>556,8002=>556,8003=>556,8004=>556,8005=>556,8008=>833,8009=>833,8010=>1111,8011=>1111,
+8012=>1111,8013=>1111,8016=>515,8017=>515,8018=>515,8019=>515,8020=>515,8021=>515,8022=>515,8023=>515,
+8025=>833,8027=>1000,8029=>1000,8031=>1000,8032=>740,8033=>740,8034=>740,8035=>740,8036=>740,8037=>740,
+8038=>740,8039=>740,8040=>833,8041=>833,8042=>1111,8043=>1111,8044=>1000,8045=>1000,8046=>1000,8047=>1000,
+8048=>596,8049=>596,8050=>510,8051=>510,8052=>526,8053=>526,8054=>286,8055=>286,8056=>556,8057=>556,
+8058=>515,8059=>515,8060=>740,8061=>740,8064=>596,8065=>596,8066=>596,8067=>596,8068=>596,8069=>596,
+8070=>596,8071=>596,8072=>883,8073=>883,8074=>1049,8075=>1049,8076=>1049,8077=>1049,8078=>1049,8079=>1049,
+8080=>526,8081=>526,8082=>526,8083=>526,8084=>526,8085=>526,8086=>526,8087=>526,8088=>994,8089=>994,
+8090=>1216,8091=>1216,8092=>1216,8093=>1216,8094=>1216,8095=>1216,8096=>740,8097=>740,8098=>740,8099=>740,
+8100=>740,8101=>740,8102=>740,8103=>740,8104=>1000,8105=>1000,8106=>1311,8107=>1311,8108=>1216,8109=>1216,
+8110=>1216,8111=>1216,8112=>596,8113=>596,8114=>596,8115=>596,8116=>596,8118=>596,8119=>596,8120=>667,
+8121=>667,8122=>667,8123=>667,8124=>883,8125=>278,8126=>200,8127=>333,8128=>333,8129=>333,8130=>526,
+8131=>526,8132=>536,8134=>526,8135=>526,8136=>833,8137=>833,8138=>944,8139=>944,8140=>938,8141=>400,
+8142=>400,8143=>333,8144=>286,8145=>286,8146=>286,8147=>286,8150=>286,8151=>312,8152=>278,8153=>278,
+8154=>500,8155=>500,8157=>400,8158=>400,8159=>333,8160=>515,8161=>515,8162=>515,8163=>515,8164=>566,
+8165=>566,8166=>515,8167=>515,8168=>667,8169=>667,8170=>833,8171=>833,8172=>778,8173=>333,8174=>393,
+8175=>333,8178=>740,8179=>740,8180=>740,8182=>740,8183=>740,8184=>833,8185=>833,8186=>833,8187=>833,
+8188=>939,8189=>333,8190=>333,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>333,8197=>250,8198=>167,
+8201=>200,8203=>0,8204=>0,8205=>0,8208=>333,8209=>333,8210=>556,8213=>1000,8219=>221,8223=>333,
+8227=>350,8228=>278,8241=>1360,8242=>278,8243=>469,8244=>680,8245=>278,8246=>469,8247=>680,8251=>622,
+8252=>556,8253=>556,8254=>556,8260=>167,8261=>334,8262=>334,8263=>1112,8264=>834,8265=>834,8267=>537,
+8304=>351,8305=>351,8308=>351,8309=>351,8310=>351,8311=>351,8312=>351,8313=>351,8320=>351,8321=>251,
+8322=>351,8323=>351,8324=>351,8325=>353,8326=>351,8327=>351,8328=>351,8329=>351,8359=>1445,8360=>1222,
+8362=>869,8373=>640,8459=>969,8460=>615,8464=>809,8465=>519,8466=>874,8470=>1008,8471=>737,8472=>600,
+8475=>850,8476=>644,8486=>778,8487=>778,8488=>512,8490=>667,8491=>667,8492=>908,8493=>623,8496=>562,
+8497=>611,8498=>611,8499=>1080,8501=>640,8531=>869,8532=>869,8533=>869,8534=>869,8535=>869,8536=>869,
+8537=>869,8538=>869,8539=>869,8540=>869,8541=>869,8542=>869,8543=>869,8544=>278,8545=>556,8546=>834,
+8547=>945,8548=>667,8549=>945,8550=>1223,8551=>1501,8552=>945,8553=>667,8554=>945,8555=>1223,8556=>556,
+8557=>722,8558=>722,8559=>833,8560=>222,8561=>444,8562=>666,8563=>722,8564=>500,8565=>722,8566=>944,
+8567=>1166,8568=>722,8569=>500,8570=>722,8571=>944,8572=>222,8573=>500,8574=>556,8575=>833,8592=>987,
+8593=>603,8594=>987,8595=>603,8596=>1042,8597=>1042,8598=>800,8599=>800,8600=>800,8601=>800,8614=>987,
+8617=>987,8618=>987,8629=>658,8636=>987,8637=>987,8638=>380,8639=>393,8640=>987,8641=>987,8642=>380,
+8643=>379,8652=>987,8656=>987,8657=>603,8658=>987,8659=>603,8660=>1042,8661=>603,8669=>1092,8704=>667,
+8706=>556,8707=>667,8709=>823,8710=>711,8711=>711,8712=>584,8713=>584,8714=>584,8715=>584,8716=>584,
+8717=>713,8719=>823,8720=>823,8721=>804,8722=>584,8723=>584,8724=>584,8725=>510,8726=>392,8727=>584,
+8729=>584,8730=>542,8733=>713,8734=>713,8736=>768,8739=>200,8740=>288,8741=>312,8742=>340,8743=>603,
+8744=>603,8745=>768,8746=>768,8747=>556,8748=>796,8749=>956,8750=>556,8756=>863,8764=>584,8765=>584,
+8766=>584,8768=>244,8769=>584,8770=>584,8771=>584,8772=>584,8773=>584,8774=>584,8775=>584,8776=>584,
+8777=>584,8781=>554,8784=>584,8800=>584,8801=>584,8802=>584,8804=>584,8805=>584,8810=>955,8811=>955,
+8813=>554,8814=>584,8815=>584,8816=>584,8817=>584,8818=>584,8819=>584,8826=>584,8827=>584,8828=>584,
+8829=>584,8832=>584,8833=>584,8834=>584,8835=>584,8836=>584,8837=>584,8838=>584,8839=>584,8840=>584,
+8841=>584,8844=>768,8847=>636,8848=>636,8849=>636,8850=>636,8851=>636,8852=>636,8853=>768,8854=>768,
+8855=>768,8856=>768,8857=>768,8866=>658,8867=>658,8868=>658,8869=>658,8870=>600,8871=>608,8882=>636,
+8883=>636,8884=>636,8885=>636,8896=>744,8897=>744,8898=>764,8899=>764,8901=>278,8902=>471,8904=>710,
+8928=>584,8929=>584,8930=>636,8931=>636,8960=>823,8968=>456,8969=>455,8970=>455,8971=>456,8992=>556,
+8993=>556,8994=>658,8995=>658,9001=>329,9002=>329,9134=>556,9250=>556,9472=>1000,9473=>1000,9474=>1000,
+9475=>1000,9476=>1000,9477=>1000,9478=>1000,9479=>1000,9480=>1000,9481=>1000,9482=>1000,9483=>1000,9484=>1000,
+9485=>1000,9486=>1000,9487=>1000,9488=>1000,9489=>1000,9490=>1000,9491=>1000,9492=>1000,9493=>1000,9494=>1000,
+9495=>1000,9496=>1000,9497=>1000,9498=>1000,9499=>1000,9500=>1000,9501=>1000,9502=>1000,9503=>1000,9504=>1000,
+9505=>1000,9506=>1000,9507=>1000,9508=>1000,9509=>1000,9510=>1000,9511=>1000,9512=>1000,9513=>1000,9514=>1000,
+9515=>1000,9516=>1000,9517=>1000,9518=>1000,9519=>1000,9520=>1000,9521=>1000,9522=>1000,9523=>1000,9524=>1000,
+9525=>1000,9526=>1000,9527=>1000,9528=>1000,9529=>1000,9530=>1000,9531=>1000,9532=>1000,9533=>1000,9534=>1000,
+9535=>1000,9536=>1000,9537=>1000,9538=>1000,9539=>1000,9540=>1000,9541=>1000,9542=>1000,9543=>1000,9544=>1000,
+9545=>1000,9546=>1000,9547=>1000,9552=>1000,9553=>1000,9554=>1000,9555=>1000,9556=>1000,9557=>1000,9558=>1000,
+9559=>1000,9560=>1000,9561=>1000,9562=>1000,9563=>1000,9564=>1000,9565=>1000,9566=>1000,9567=>1000,9568=>1000,
+9569=>1000,9570=>1000,9571=>1000,9572=>1000,9573=>1000,9574=>1000,9575=>1000,9576=>1000,9577=>1000,9578=>1000,
+9579=>1000,9580=>1000,9600=>1000,9601=>1000,9602=>1000,9603=>1000,9604=>1000,9605=>1000,9606=>1000,9607=>1000,
+9608=>1000,9609=>1000,9610=>1000,9611=>1000,9612=>1000,9613=>1000,9614=>1000,9615=>1000,9616=>1000,9617=>1000,
+9618=>1000,9619=>1000,9620=>1000,9621=>1000,9622=>1000,9623=>1000,9624=>1000,9625=>1000,9626=>1000,9627=>1000,
+9628=>1000,9629=>1000,9630=>1000,9631=>1000,9632=>1000,9633=>1000,9635=>1000,9636=>1000,9637=>1000,9642=>1000,
+9644=>1000,9651=>892,9661=>892,9671=>788,9674=>489,9675=>791,9711=>882,9772=>1130,9824=>626,9825=>694,
+9826=>595,9827=>776,9829=>694,9830=>595,9834=>555,10048=>1453,10049=>1454,10752=>791,10753=>791,10754=>791,
+10755=>764,10756=>764,10761=>584,11799=>333,12289=>1000,12290=>1000,12291=>1000,12293=>1000,12295=>1000,12296=>1000,
+12297=>1000,12298=>1000,12299=>1000,12300=>1000,12301=>1000,12302=>1000,12303=>1000,12304=>1000,12305=>1000,12308=>1000,
+12309=>1000,12353=>1000,12354=>1000,12355=>1000,12356=>1000,12357=>1000,12358=>1000,12359=>1000,12360=>1000,12361=>1000,
+12362=>1000,12363=>1000,12364=>1000,12365=>1000,12366=>1000,12367=>1000,12368=>1000,12369=>1000,12370=>1000,12371=>1000,
+12372=>1000,12373=>1000,12374=>1000,12375=>1000,12376=>1000,12377=>1000,12378=>1000,12379=>1000,12380=>1000,12381=>1000,
+12382=>1000,12383=>1000,12384=>1000,12385=>1000,12386=>1000,12387=>1000,12388=>1000,12389=>1000,12390=>1000,12391=>1000,
+12392=>1000,12393=>1000,12394=>1000,12395=>1000,12396=>1000,12397=>1000,12398=>1000,12399=>1000,12400=>1000,12401=>1000,
+12402=>1000,12403=>1000,12404=>1000,12405=>1000,12406=>1000,12407=>1000,12408=>1000,12409=>1000,12410=>1000,12411=>1000,
+12412=>1000,12413=>1000,12414=>1000,12415=>1000,12416=>1000,12417=>1000,12418=>1000,12419=>1000,12420=>1000,12421=>1000,
+12422=>1000,12423=>1000,12424=>1000,12425=>1000,12426=>1000,12427=>1000,12428=>1000,12429=>1000,12430=>1000,12431=>1000,
+12432=>1000,12433=>1000,12434=>1000,12435=>1000,12441=>1000,12443=>1000,12449=>1000,12450=>1000,12451=>1000,12452=>1000,
+12453=>1000,12454=>1000,12455=>1000,12456=>1000,12457=>1000,12458=>1000,12459=>1000,12460=>1000,12461=>1000,12462=>1000,
+12463=>1000,12464=>1000,12465=>1000,12466=>1000,12467=>1000,12468=>1000,12469=>1000,12470=>1000,12471=>1000,12472=>1000,
+12473=>1000,12474=>1000,12475=>1000,12476=>1000,12477=>1000,12478=>1000,12479=>1000,12480=>1000,12481=>1000,12482=>1000,
+12483=>1000,12484=>1000,12485=>1000,12486=>1000,12487=>1000,12488=>1000,12489=>1000,12490=>1000,12491=>1000,12492=>1000,
+12493=>1000,12494=>1000,12495=>1000,12496=>1000,12497=>1000,12498=>1000,12499=>1000,12500=>1000,12501=>1000,12502=>1000,
+12503=>1000,12504=>1000,12505=>1000,12506=>1000,12507=>1000,12508=>1000,12509=>1000,12510=>1000,12511=>1000,12512=>1000,
+12513=>1000,12514=>1000,12515=>1000,12516=>1000,12517=>1000,12518=>1000,12519=>1000,12520=>1000,12521=>1000,12522=>1000,
+12523=>1000,12524=>1000,12525=>1000,12526=>1000,12527=>1000,12528=>1000,12529=>1000,12530=>1000,12531=>1000,12532=>1000,
+12533=>1000,12534=>1000,12535=>1000,12536=>1000,12537=>1000,12538=>1000,12539=>1000,12540=>1000,12541=>1000,12542=>1000,
+59752=>196,59753=>6,59754=>0,63033=>556,63034=>556,63035=>556,63036=>556,63037=>556,63038=>556,63039=>556,
+63040=>556,63041=>556,63196=>556,64256=>556,64257=>500,64258=>500,64259=>778,64260=>778,64261=>556,64262=>778,
+64285=>200,64286=>305,64287=>400,64288=>587,64289=>890,64290=>848,64291=>872,64292=>800,64293=>850,64294=>873,
+64295=>797,64296=>937,64297=>584,64298=>776,64299=>776,64300=>776,64301=>776,64302=>640,64303=>640,64304=>640,
+64305=>591,64306=>466,64307=>598,64308=>622,64309=>262,64310=>351,64312=>608,64313=>270,64314=>526,64315=>550,
+64316=>600,64318=>621,64320=>378,64321=>607,64323=>575,64324=>568,64326=>590,64327=>606,64328=>547,64329=>776,
+64330=>687,64331=>212,64332=>591,64333=>550,64334=>568,64335=>640,65533=>788);
+$enc='';
+$diff='';
+$file='freesans.z';
+$ctg='freesans.ctg.z';
+$originalsize=830728;
+?> \ No newline at end of file
diff --git a/admin/exportclases/fonts/freesans.z b/admin/exportclases/fonts/freesans.z
new file mode 100644
index 0000000..897f145
--- /dev/null
+++ b/admin/exportclases/fonts/freesans.z
Binary files differ
diff --git a/admin/exportclases/fonts/freesansb.ctg.z b/admin/exportclases/fonts/freesansb.ctg.z
new file mode 100644
index 0000000..4c989e6
--- /dev/null
+++ b/admin/exportclases/fonts/freesansb.ctg.z
Binary files differ
diff --git a/admin/exportclases/fonts/freesansb.php b/admin/exportclases/fonts/freesansb.php
new file mode 100644
index 0000000..19c1e23
--- /dev/null
+++ b/admin/exportclases/fonts/freesansb.php
@@ -0,0 +1,194 @@
+<?php
+$type='TrueTypeUnicode';
+$name='FreeSansBold';
+$desc=array('Ascent'=>900,'Descent'=>-300,'CapHeight'=>22,'Flags'=>32,'FontBBox'=>'[-628 -1175 1556 1639]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>600);
+$up=-189;
+$ut=69;
+$dw=600;
+$cw=array(
+32=>278,33=>333,34=>474,35=>556,36=>556,37=>889,38=>722,39=>238,40=>333,41=>333,
+42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556,
+52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>333,59=>333,60=>584,61=>584,
+62=>584,63=>611,64=>975,65=>722,66=>722,67=>722,68=>722,69=>667,70=>611,71=>778,
+72=>722,73=>278,74=>556,75=>722,76=>611,77=>833,78=>722,79=>778,80=>667,81=>778,
+82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>333,
+92=>278,93=>333,94=>584,95=>556,96=>333,97=>556,98=>611,99=>556,100=>611,101=>556,
+102=>333,103=>611,104=>611,105=>278,106=>278,107=>556,108=>278,109=>889,110=>611,111=>611,
+112=>611,113=>611,114=>389,115=>556,116=>333,117=>611,118=>556,119=>778,120=>556,121=>556,
+122=>500,123=>389,124=>280,125=>389,126=>584,8364=>556,8218=>278,402=>333,8222=>500,8230=>1000,
+8224=>556,8225=>556,710=>333,8240=>1000,352=>667,8249=>333,338=>1000,381=>611,8216=>278,8217=>278,
+8220=>500,8221=>500,8226=>350,8211=>556,8212=>1000,732=>333,8482=>1000,353=>556,8250=>333,339=>944,
+382=>500,376=>667,160=>278,161=>333,162=>556,163=>556,164=>556,165=>556,166=>280,167=>556,
+168=>333,169=>737,170=>370,171=>556,172=>584,173=>333,174=>737,175=>333,176=>606,177=>584,
+178=>351,179=>351,180=>333,181=>611,182=>556,183=>278,184=>333,185=>300,186=>365,187=>556,
+188=>869,189=>869,190=>869,191=>611,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,
+198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,
+208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722,
+218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,226=>556,227=>556,
+228=>556,229=>556,230=>889,231=>556,232=>556,233=>556,234=>556,235=>556,236=>278,237=>278,
+238=>278,239=>278,240=>611,241=>611,242=>611,243=>611,244=>611,245=>611,246=>611,247=>584,
+248=>611,249=>611,250=>611,251=>611,252=>611,253=>556,254=>611,255=>556,256=>722,257=>556,
+258=>722,259=>556,260=>722,261=>556,262=>722,263=>556,264=>722,265=>556,266=>722,267=>556,
+268=>722,269=>556,270=>722,271=>611,272=>722,273=>611,274=>667,275=>556,276=>667,277=>556,
+278=>667,279=>556,280=>667,281=>556,282=>667,283=>556,284=>778,285=>611,286=>778,287=>611,
+288=>778,289=>611,290=>778,291=>611,292=>722,293=>611,294=>722,295=>611,296=>278,297=>278,
+298=>278,299=>278,300=>278,301=>278,302=>278,303=>278,304=>278,305=>278,306=>808,307=>492,
+308=>556,309=>278,310=>722,311=>556,312=>573,313=>611,314=>278,315=>611,316=>278,317=>611,
+318=>278,319=>611,320=>556,321=>611,322=>278,323=>722,324=>611,325=>722,326=>611,327=>722,
+328=>611,329=>611,330=>722,331=>611,332=>778,333=>611,334=>778,335=>611,336=>778,337=>611,
+340=>722,341=>389,342=>722,343=>389,344=>722,345=>389,346=>667,347=>556,348=>667,349=>556,
+350=>667,351=>556,354=>611,355=>333,356=>611,357=>333,358=>611,359=>333,360=>722,361=>611,
+362=>722,363=>611,364=>722,365=>611,366=>722,367=>611,368=>722,369=>611,370=>722,371=>611,
+372=>944,373=>778,374=>667,375=>556,377=>611,378=>500,379=>611,380=>500,383=>333,384=>611,
+385=>963,386=>722,387=>611,388=>687,389=>611,390=>722,391=>752,392=>562,393=>722,394=>968,
+395=>722,396=>611,397=>620,398=>667,399=>778,400=>672,401=>611,403=>778,404=>667,405=>889,
+407=>395,408=>778,409=>556,411=>620,412=>944,413=>722,414=>611,415=>778,416=>778,417=>611,
+418=>1111,420=>914,421=>611,422=>722,423=>667,424=>556,425=>688,427=>333,428=>742,429=>333,
+430=>611,431=>722,432=>611,433=>780,435=>667,436=>620,437=>611,438=>500,439=>556,440=>556,
+446=>611,452=>1333,453=>1222,454=>1111,455=>1167,456=>889,457=>556,458=>1278,459=>1000,460=>889,
+461=>722,462=>556,463=>278,464=>278,465=>778,466=>611,467=>722,468=>611,469=>722,470=>611,
+471=>722,472=>611,473=>722,474=>611,475=>722,476=>611,477=>556,478=>722,479=>556,480=>722,
+481=>556,482=>1000,483=>889,484=>778,485=>611,486=>778,487=>611,488=>722,489=>556,490=>778,
+491=>611,492=>778,493=>611,494=>556,495=>556,496=>278,497=>1333,498=>1222,499=>1111,500=>778,
+501=>611,504=>722,505=>611,506=>722,507=>556,508=>1000,509=>889,510=>778,511=>611,512=>722,
+513=>556,514=>722,515=>556,516=>667,517=>556,518=>667,519=>556,520=>278,521=>278,522=>278,
+523=>278,524=>778,525=>611,526=>778,527=>611,528=>722,529=>389,530=>722,531=>389,532=>722,
+533=>611,534=>722,535=>611,536=>667,537=>556,538=>611,539=>333,542=>722,543=>611,550=>722,
+551=>556,552=>667,553=>556,554=>778,555=>611,556=>778,557=>611,558=>778,559=>611,560=>778,
+561=>611,562=>667,563=>556,592=>556,593=>667,594=>667,595=>611,596=>556,598=>611,599=>611,
+600=>556,601=>556,603=>570,604=>546,606=>570,607=>278,608=>611,609=>611,610=>556,611=>556,
+613=>619,614=>611,615=>611,616=>278,617=>344,618=>278,621=>298,622=>778,623=>889,624=>889,
+625=>889,626=>611,627=>611,628=>615,629=>611,632=>778,633=>389,634=>389,635=>389,636=>389,
+637=>389,638=>455,639=>455,640=>620,641=>620,642=>556,643=>333,644=>278,645=>333,647=>328,
+648=>333,649=>623,652=>556,653=>778,654=>556,656=>500,658=>556,660=>611,661=>611,662=>611,
+664=>611,665=>572,666=>570,668=>603,670=>556,671=>454,672=>611,673=>611,674=>611,711=>333,
+713=>333,714=>333,715=>333,728=>333,729=>333,730=>333,731=>333,733=>333,768=>0,769=>0,
+770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,778=>0,779=>0,780=>0,
+783=>0,785=>0,787=>0,788=>0,807=>0,808=>0,834=>0,836=>0,837=>0,884=>379,
+885=>379,890=>333,894=>333,900=>363,901=>333,902=>761,903=>474,904=>829,905=>856,906=>416,
+908=>778,910=>991,911=>867,912=>346,913=>722,914=>722,915=>642,916=>726,917=>667,918=>611,
+919=>722,920=>810,921=>278,922=>722,923=>744,924=>860,925=>714,926=>690,927=>778,928=>781,
+929=>698,931=>688,932=>688,933=>804,934=>777,935=>783,936=>805,937=>780,938=>278,939=>804,
+940=>660,941=>559,942=>560,943=>356,944=>575,945=>656,946=>576,947=>591,948=>620,949=>570,
+950=>522,951=>586,952=>586,953=>346,954=>576,955=>620,956=>667,957=>564,958=>530,959=>611,
+960=>721,961=>626,962=>595,963=>676,964=>592,965=>575,966=>801,967=>632,968=>722,969=>800,
+970=>346,971=>575,972=>599,973=>567,974=>800,981=>778,1024=>667,1025=>667,1026=>790,1027=>611,
+1028=>722,1029=>667,1030=>278,1031=>278,1032=>556,1033=>1110,1034=>1113,1035=>790,1036=>750,1037=>757,
+1038=>718,1039=>722,1040=>722,1041=>722,1042=>722,1043=>611,1044=>900,1045=>667,1046=>1093,1047=>672,
+1048=>757,1049=>757,1050=>750,1051=>729,1052=>833,1053=>722,1054=>778,1055=>753,1056=>667,1057=>722,
+1058=>611,1059=>718,1060=>892,1061=>667,1062=>816,1063=>685,1064=>1057,1065=>1183,1066=>928,1067=>949,
+1068=>687,1069=>722,1070=>1109,1071=>698,1072=>556,1073=>606,1074=>572,1075=>454,1076=>685,1077=>556,
+1078=>809,1079=>546,1080=>615,1081=>615,1082=>573,1083=>577,1084=>666,1085=>603,1086=>611,1087=>603,
+1088=>611,1089=>556,1090=>454,1091=>556,1092=>957,1093=>556,1094=>652,1095=>578,1096=>886,1097=>968,
+1098=>693,1099=>811,1100=>562,1101=>564,1102=>908,1103=>596,1104=>556,1105=>556,1106=>606,1107=>454,
+1108=>556,1109=>556,1110=>278,1111=>278,1112=>278,1113=>900,1114=>900,1115=>606,1116=>573,1117=>615,
+1118=>556,1119=>608,1164=>687,1165=>562,1166=>667,1167=>611,1168=>611,1169=>454,1170=>611,1171=>454,
+1172=>611,1173=>584,1174=>1093,1175=>809,1176=>672,1177=>546,1178=>750,1179=>573,1180=>722,1181=>573,
+1182=>722,1183=>573,1184=>912,1185=>704,1186=>753,1187=>608,1188=>985,1189=>787,1190=>1092,1191=>925,
+1194=>722,1195=>556,1196=>611,1197=>454,1198=>667,1199=>667,1200=>667,1201=>667,1202=>667,1203=>556,
+1204=>951,1205=>738,1206=>781,1207=>627,1208=>685,1209=>578,1210=>685,1211=>578,1212=>957,1213=>716,
+1214=>957,1215=>716,1216=>278,1217=>1093,1218=>809,1219=>750,1220=>573,1221=>729,1222=>577,1223=>722,
+1224=>608,1225=>722,1226=>603,1227=>685,1228=>578,1229=>833,1230=>666,1232=>722,1233=>556,1234=>722,
+1235=>556,1236=>1000,1237=>889,1238=>667,1239=>556,1240=>722,1241=>556,1242=>722,1243=>556,1244=>1093,
+1245=>809,1246=>672,1247=>546,1248=>672,1249=>546,1250=>757,1251=>615,1252=>757,1253=>615,1254=>778,
+1255=>611,1256=>778,1257=>611,1258=>778,1259=>611,1260=>722,1261=>564,1262=>718,1263=>556,1264=>718,
+1265=>556,1266=>718,1267=>556,1268=>685,1269=>578,1272=>949,1273=>811,1329=>722,1330=>722,1331=>778,
+1332=>722,1333=>722,1336=>722,1343=>722,1346=>722,1348=>722,1350=>722,1352=>722,1356=>722,1357=>722,
+1359=>667,1360=>722,1363=>892,1365=>778,1373=>333,1377=>889,1378=>611,1379=>611,1380=>611,1381=>611,
+1382=>611,1383=>448,1384=>611,1385=>667,1386=>722,1387=>611,1388=>333,1389=>833,1390=>667,1391=>611,
+1392=>611,1393=>611,1394=>611,1395=>611,1396=>611,1397=>278,1398=>611,1399=>556,1400=>611,1401=>390,
+1402=>889,1403=>556,1404=>611,1405=>611,1406=>611,1407=>944,1408=>611,1409=>611,1410=>389,1411=>944,
+1412=>611,1413=>611,1414=>778,1415=>611,1417=>333,1456=>82,1457=>347,1458=>341,1459=>341,1460=>82,
+1461=>211,1462=>211,1463=>200,1464=>200,1465=>82,1467=>341,1468=>82,1469=>82,1470=>516,1471=>200,
+1472=>297,1473=>1038,1474=>1038,1475=>333,1476=>82,1488=>714,1489=>651,1490=>557,1491=>638,1492=>682,
+1493=>297,1494=>443,1495=>682,1496=>670,1497=>284,1498=>590,1499=>595,1500=>667,1501=>683,1502=>704,
+1503=>297,1504=>429,1505=>670,1506=>653,1507=>661,1508=>660,1509=>616,1510=>671,1511=>672,1512=>600,
+1513=>840,1514=>756,1520=>554,1521=>550,1522=>542,1523=>238,1524=>474,1569=>844,1576=>923,1578=>922,
+1579=>922,1581=>649,1582=>704,1587=>1221,2404=>467,2405=>656,2561=>0,2562=>122,2563=>313,2565=>897,
+2566=>1157,2567=>930,2568=>966,2569=>762,2570=>762,2575=>729,2576=>904,2579=>773,2580=>903,2581=>726,
+2582=>672,2583=>741,2584=>790,2585=>702,2586=>723,2587=>693,2588=>688,2589=>673,2590=>683,2591=>686,
+2592=>711,2593=>680,2594=>693,2595=>729,2596=>691,2597=>694,2598=>699,2599=>666,2600=>669,2602=>683,
+2603=>690,2604=>660,2605=>659,2606=>692,2607=>772,2608=>673,2610=>731,2611=>814,2613=>663,2614=>704,
+2616=>702,2617=>650,2620=>0,2622=>307,2623=>304,2624=>306,2625=>7,2626=>7,2631=>7,2632=>8,
+2635=>6,2636=>5,2637=>8,2649=>684,2650=>813,2651=>715,2652=>695,2654=>709,2662=>697,2663=>630,
+2664=>696,2665=>690,2666=>646,2667=>636,2668=>571,2669=>682,2670=>718,2671=>730,2672=>9,2673=>162,
+2674=>722,2675=>760,2676=>1110,4256=>616,4257=>645,4258=>664,4259=>839,4260=>627,4261=>630,4262=>827,
+4263=>928,4264=>639,4265=>630,4266=>951,4267=>606,4268=>608,4269=>835,4270=>630,4271=>610,4272=>804,
+4273=>615,4274=>823,4275=>747,4276=>870,4277=>627,4278=>840,4279=>627,4280=>665,4281=>610,4282=>799,
+4283=>598,4284=>665,4285=>664,4286=>608,4287=>886,4288=>629,4304=>463,4305=>516,4306=>564,4307=>706,
+4308=>459,4309=>476,4310=>623,4311=>711,4312=>494,4313=>476,4314=>894,4315=>500,4316=>500,4317=>712,
+4318=>493,4319=>503,4320=>712,4321=>503,4322=>710,4323=>670,4324=>707,4325=>459,4326=>691,4327=>465,
+4328=>492,4329=>480,4330=>656,4331=>500,4332=>492,4333=>524,4334=>500,4335=>688,4336=>510,4337=>739,
+4338=>450,4339=>479,4340=>502,4341=>501,7680=>722,7681=>556,7682=>722,7683=>611,7684=>722,7685=>611,
+7686=>722,7687=>611,7688=>722,7689=>556,7690=>722,7691=>611,7692=>722,7693=>611,7694=>722,7695=>611,
+7696=>722,7697=>611,7698=>722,7699=>611,7700=>667,7701=>556,7702=>667,7703=>556,7704=>667,7705=>556,
+7706=>667,7707=>556,7708=>667,7709=>556,7710=>611,7711=>333,7712=>778,7713=>611,7714=>722,7715=>611,
+7716=>722,7717=>611,7718=>722,7719=>611,7720=>722,7721=>611,7722=>722,7723=>611,7724=>278,7725=>278,
+7726=>278,7727=>278,7728=>722,7729=>556,7730=>722,7731=>556,7732=>722,7733=>556,7734=>611,7735=>278,
+7736=>611,7737=>278,7738=>611,7739=>278,7740=>611,7741=>278,7742=>833,7743=>889,7744=>833,7745=>889,
+7746=>833,7747=>889,7748=>722,7749=>611,7750=>722,7751=>611,7752=>722,7753=>611,7754=>722,7755=>611,
+7756=>778,7757=>611,7758=>778,7759=>611,7760=>778,7761=>611,7762=>778,7763=>611,7764=>667,7765=>611,
+7766=>667,7767=>611,7768=>722,7769=>389,7770=>722,7771=>389,7772=>722,7773=>389,7774=>722,7775=>389,
+7776=>667,7777=>556,7778=>667,7779=>556,7780=>667,7781=>556,7782=>667,7783=>556,7784=>667,7785=>556,
+7786=>611,7787=>333,7788=>611,7789=>333,7790=>611,7791=>333,7792=>611,7793=>333,7794=>722,7795=>611,
+7796=>722,7797=>611,7798=>722,7799=>611,7800=>722,7801=>611,7802=>722,7803=>611,7804=>667,7805=>556,
+7806=>667,7807=>556,7808=>944,7809=>778,7810=>944,7811=>778,7812=>944,7813=>778,7814=>944,7815=>778,
+7816=>944,7817=>778,7818=>667,7819=>556,7820=>667,7821=>556,7822=>667,7823=>556,7824=>611,7825=>500,
+7826=>611,7827=>500,7828=>611,7829=>500,7830=>611,7831=>333,7832=>778,7833=>556,7835=>333,7840=>722,
+7841=>556,7844=>722,7845=>556,7846=>722,7847=>556,7850=>722,7851=>556,7852=>722,7853=>556,7854=>722,
+7855=>556,7856=>722,7857=>556,7860=>722,7861=>556,7862=>722,7863=>556,7864=>667,7865=>556,7868=>667,
+7869=>556,7870=>667,7871=>556,7872=>667,7873=>556,7876=>667,7877=>556,7878=>667,7879=>556,7882=>278,
+7883=>278,7884=>778,7885=>611,7888=>778,7889=>611,7890=>778,7891=>611,7894=>778,7895=>611,7896=>778,
+7897=>611,7898=>778,7899=>611,7900=>778,7901=>611,7904=>778,7905=>611,7906=>778,7907=>611,7908=>722,
+7909=>611,7912=>722,7913=>611,7914=>722,7915=>611,7918=>722,7919=>611,7920=>722,7921=>611,7922=>667,
+7923=>556,7924=>667,7925=>556,7928=>667,7929=>556,7936=>656,7937=>656,7938=>656,7939=>656,7940=>656,
+7941=>656,7942=>656,7943=>656,7944=>722,7945=>722,7946=>722,7947=>722,7948=>722,7949=>722,7950=>722,
+7951=>722,7952=>570,7953=>570,7954=>570,7955=>570,7956=>570,7957=>570,7960=>647,7961=>667,7962=>667,
+7963=>667,7964=>667,7965=>667,7968=>586,7969=>586,7970=>586,7971=>586,7972=>586,7973=>586,7974=>586,
+7975=>586,7976=>722,7977=>722,7978=>722,7979=>722,7980=>722,7981=>722,7982=>722,7983=>722,7984=>346,
+7985=>346,7986=>346,7987=>346,7988=>346,7989=>346,7990=>346,7991=>346,7992=>278,7993=>278,7994=>278,
+7995=>278,7996=>278,7997=>278,7998=>278,7999=>278,8000=>610,8001=>610,8002=>610,8003=>610,8004=>610,
+8005=>610,8008=>778,8009=>778,8010=>778,8011=>778,8012=>778,8013=>778,8016=>575,8017=>575,8018=>575,
+8019=>575,8020=>575,8021=>575,8022=>575,8023=>575,8025=>804,8027=>804,8029=>804,8031=>804,8032=>800,
+8033=>800,8034=>800,8035=>800,8036=>800,8037=>800,8038=>800,8039=>800,8040=>780,8041=>780,8042=>780,
+8043=>780,8044=>780,8045=>780,8046=>780,8047=>780,8048=>656,8049=>656,8050=>570,8051=>570,8052=>586,
+8053=>586,8054=>346,8055=>346,8056=>610,8057=>610,8058=>575,8059=>575,8060=>800,8061=>800,8064=>656,
+8065=>656,8066=>656,8067=>656,8068=>656,8069=>656,8070=>656,8071=>656,8072=>968,8073=>968,8074=>968,
+8075=>968,8076=>968,8077=>968,8078=>968,8079=>968,8080=>586,8081=>586,8082=>586,8083=>586,8084=>586,
+8085=>586,8086=>586,8087=>586,8088=>968,8089=>968,8090=>968,8091=>968,8092=>968,8093=>968,8094=>968,
+8095=>968,8096=>800,8097=>800,8098=>800,8099=>800,8100=>800,8101=>800,8102=>800,8103=>800,8104=>1026,
+8105=>1026,8106=>1026,8107=>1026,8108=>1026,8109=>1026,8110=>1026,8111=>1026,8112=>656,8113=>656,8114=>656,
+8115=>656,8116=>660,8118=>656,8119=>656,8120=>722,8121=>722,8122=>722,8123=>722,8124=>968,8125=>278,
+8126=>346,8127=>278,8128=>278,8129=>333,8130=>586,8131=>586,8132=>560,8134=>586,8135=>586,8136=>667,
+8137=>667,8138=>722,8139=>722,8140=>968,8141=>492,8142=>489,8143=>394,8144=>346,8145=>346,8146=>346,
+8147=>346,8150=>346,8151=>346,8152=>278,8153=>278,8154=>278,8155=>278,8157=>481,8158=>589,8159=>333,
+8160=>575,8161=>575,8162=>575,8163=>575,8164=>626,8165=>626,8166=>575,8167=>575,8168=>804,8169=>804,
+8170=>804,8171=>804,8172=>698,8173=>333,8174=>333,8175=>333,8178=>800,8179=>800,8180=>1125,8182=>800,
+8183=>800,8184=>778,8185=>778,8186=>780,8187=>780,8188=>1111,8189=>333,8190=>278,8203=>0,8204=>0,
+8205=>0,8208=>333,8209=>333,8210=>556,8213=>1000,8242=>238,8252=>666,8260=>167,8263=>1222,8264=>944,
+8265=>944,8304=>351,8305=>351,8308=>351,8309=>351,8310=>351,8311=>351,8312=>351,8313=>351,8314=>351,
+8315=>351,8316=>351,8317=>351,8318=>351,8319=>351,8320=>351,8321=>301,8322=>351,8323=>351,8324=>351,
+8325=>351,8326=>351,8327=>351,8328=>351,8329=>351,8330=>351,8331=>351,8332=>351,8333=>351,8334=>351,
+8362=>1049,8373=>591,8486=>780,8531=>869,8532=>869,8533=>869,8534=>869,8535=>869,8536=>869,8537=>869,
+8538=>869,8539=>869,8540=>869,8541=>869,8542=>869,8543=>869,8544=>278,8545=>556,8546=>834,8547=>945,
+8548=>667,8549=>945,8550=>1223,8551=>1501,8552=>945,8553=>667,8554=>945,8555=>1223,8556=>611,8557=>722,
+8558=>722,8559=>833,8560=>278,8561=>556,8562=>834,8563=>834,8564=>556,8565=>834,8566=>1112,8567=>1390,
+8568=>834,8569=>556,8570=>834,8571=>1112,8572=>278,8573=>556,8574=>611,8575=>889,8592=>964,8593=>964,
+8594=>964,8595=>964,8596=>964,8597=>964,8598=>964,8599=>964,8600=>964,8601=>964,8602=>964,8603=>964,
+8606=>964,8607=>964,8608=>964,8609=>964,8610=>964,8611=>964,8612=>964,8613=>964,8614=>964,8615=>964,
+8616=>964,8644=>964,8645=>964,8646=>964,8647=>964,8648=>964,8649=>964,8650=>964,8704=>722,8706=>556,
+8707=>667,8710=>729,8711=>729,8721=>711,8722=>584,8725=>869,8730=>542,8747=>556,8800=>548,8804=>584,
+8805=>584,9674=>489,9676=>688,9772=>1143,9833=>333,9834=>556,9835=>778,9836=>778,9837=>556,9838=>556,
+9839=>556,10048=>1453,10049=>1454,63033=>556,63034=>556,63035=>556,63036=>556,63037=>556,63038=>556,63039=>556,
+63040=>556,63041=>556,63166=>278,63171=>333,63196=>556,64257=>611,64258=>611,64285=>284,64286=>305,64287=>542,
+64288=>653,64289=>964,64290=>888,64291=>932,64292=>845,64293=>917,64294=>933,64295=>850,64296=>1006,64297=>584,
+64298=>840,64299=>840,64300=>840,64301=>840,64302=>714,64303=>714,64304=>714,64305=>651,64306=>557,64307=>638,
+64308=>682,64309=>367,64310=>443,64312=>670,64313=>354,64314=>590,64315=>595,64316=>667,64318=>704,64320=>429,
+64321=>670,64323=>661,64324=>660,64326=>671,64327=>672,64328=>600,64329=>840,64330=>756,64331=>297,64332=>651,
+64333=>595,64334=>660,64335=>714,65182=>636,65533=>788);
+$enc='';
+$diff='';
+$file='freesansb.z';
+$ctg='freesansb.ctg.z';
+$originalsize=150016;
+?> \ No newline at end of file
diff --git a/admin/exportclases/fonts/freesansb.z b/admin/exportclases/fonts/freesansb.z
new file mode 100644
index 0000000..8c421a2
--- /dev/null
+++ b/admin/exportclases/fonts/freesansb.z
Binary files differ
diff --git a/admin/exportclases/fonts/freesansbi.ctg.z b/admin/exportclases/fonts/freesansbi.ctg.z
new file mode 100644
index 0000000..02c26fa
--- /dev/null
+++ b/admin/exportclases/fonts/freesansbi.ctg.z
Binary files differ
diff --git a/admin/exportclases/fonts/freesansbi.php b/admin/exportclases/fonts/freesansbi.php
new file mode 100644
index 0000000..e51528a
--- /dev/null
+++ b/admin/exportclases/fonts/freesansbi.php
@@ -0,0 +1,152 @@
+<?php
+$type='TrueTypeUnicode';
+$name='FreeSansBoldOblique';
+$desc=array('Ascent'=>900,'Descent'=>-300,'CapHeight'=>22,'Flags'=>96,'FontBBox'=>'[-380 -1175 1591 1639]','ItalicAngle'=>-12,'StemV'=>120,'MissingWidth'=>600);
+$up=-145;
+$ut=69;
+$dw=600;
+$cw=array(
+32=>278,33=>333,34=>474,35=>556,36=>556,37=>889,38=>722,39=>238,40=>333,41=>333,
+42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556,
+52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>333,59=>333,60=>584,61=>584,
+62=>584,63=>611,64=>975,65=>722,66=>722,67=>722,68=>722,69=>667,70=>611,71=>778,
+72=>722,73=>278,74=>556,75=>722,76=>611,77=>833,78=>722,79=>778,80=>667,81=>778,
+82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>333,
+92=>278,93=>333,94=>584,95=>556,96=>333,97=>556,98=>611,99=>556,100=>611,101=>556,
+102=>333,103=>611,104=>611,105=>278,106=>278,107=>556,108=>278,109=>889,110=>611,111=>611,
+112=>611,113=>611,114=>389,115=>556,116=>333,117=>611,118=>556,119=>778,120=>556,121=>556,
+122=>500,123=>389,124=>280,125=>389,126=>584,8364=>556,8218=>278,402=>556,8222=>500,8230=>1000,
+8224=>556,8225=>556,710=>333,8240=>1000,352=>667,8249=>333,338=>1000,381=>611,8216=>278,8217=>278,
+8220=>500,8221=>500,8226=>350,8211=>556,8212=>1000,732=>333,8482=>1000,353=>556,8250=>333,339=>944,
+382=>500,376=>667,160=>278,161=>333,162=>556,163=>556,164=>556,165=>556,166=>280,167=>556,
+168=>333,169=>737,170=>370,171=>556,172=>584,173=>333,174=>737,175=>333,176=>606,177=>584,
+178=>350,179=>350,180=>333,181=>611,182=>556,183=>278,184=>333,185=>248,186=>365,187=>556,
+188=>869,189=>869,190=>869,191=>611,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,
+198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,
+208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722,
+218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,226=>556,227=>556,
+228=>556,229=>556,230=>889,231=>556,232=>556,233=>556,234=>556,235=>556,236=>278,237=>278,
+238=>278,239=>278,240=>611,241=>611,242=>611,243=>611,244=>611,245=>611,246=>611,247=>584,
+248=>611,249=>611,250=>611,251=>611,252=>611,253=>556,254=>611,255=>556,256=>722,257=>556,
+258=>722,259=>556,260=>722,261=>556,262=>722,263=>556,264=>722,265=>556,266=>722,267=>556,
+268=>722,269=>556,270=>722,271=>722,272=>722,273=>611,274=>667,275=>556,276=>667,277=>556,
+278=>667,279=>556,280=>667,281=>556,282=>667,283=>556,284=>778,285=>611,286=>778,287=>611,
+288=>778,289=>611,290=>778,291=>611,292=>722,293=>611,294=>722,295=>611,296=>278,297=>278,
+298=>278,299=>278,300=>278,301=>278,302=>278,303=>268,304=>278,305=>278,306=>278,307=>278,
+308=>556,309=>278,310=>722,311=>556,312=>529,313=>611,314=>278,315=>611,316=>278,317=>611,
+318=>384,319=>611,320=>556,321=>611,322=>278,323=>722,324=>611,325=>722,326=>611,327=>722,
+328=>611,329=>611,330=>722,331=>611,332=>778,333=>611,334=>778,335=>611,336=>778,337=>611,
+340=>722,341=>389,342=>722,343=>389,344=>722,345=>389,346=>667,347=>556,348=>667,349=>556,
+350=>667,351=>556,354=>611,355=>333,356=>611,357=>404,358=>611,359=>333,360=>722,361=>611,
+362=>722,363=>611,364=>722,365=>611,366=>722,367=>611,368=>722,369=>611,370=>722,371=>611,
+372=>944,373=>778,374=>667,375=>556,377=>611,378=>500,379=>611,380=>500,383=>333,384=>611,
+385=>963,386=>722,387=>611,388=>687,389=>611,390=>722,391=>752,392=>562,393=>722,394=>968,
+395=>722,396=>611,398=>667,399=>778,400=>672,401=>611,403=>778,405=>889,407=>395,408=>778,
+409=>556,412=>889,413=>722,414=>611,415=>778,416=>778,417=>611,418=>1111,420=>914,421=>611,
+423=>667,424=>556,425=>688,427=>333,428=>742,429=>333,430=>611,431=>722,432=>611,433=>780,
+435=>667,436=>706,439=>556,440=>556,452=>1333,453=>1222,454=>1111,455=>1167,456=>889,457=>556,
+458=>1278,459=>1000,460=>889,461=>722,462=>556,463=>278,464=>278,465=>778,466=>611,467=>722,
+468=>611,477=>556,482=>1000,483=>889,486=>778,487=>611,488=>722,489=>556,490=>778,491=>611,
+492=>778,493=>611,496=>278,497=>1333,498=>1222,499=>1111,500=>778,501=>611,504=>722,505=>611,
+506=>722,507=>556,508=>1000,509=>889,510=>778,511=>611,512=>722,513=>556,514=>722,515=>556,
+516=>667,517=>556,518=>667,519=>556,520=>278,521=>278,522=>278,523=>278,524=>778,525=>611,
+526=>778,527=>611,528=>722,529=>389,530=>722,531=>389,532=>722,533=>611,534=>722,535=>611,
+536=>667,537=>556,538=>611,539=>333,542=>722,543=>611,550=>722,551=>556,552=>667,553=>556,
+558=>778,559=>611,562=>667,563=>556,592=>556,593=>611,594=>611,595=>611,596=>556,598=>611,
+599=>611,600=>556,601=>556,603=>570,604=>546,606=>570,607=>278,608=>611,609=>611,613=>619,
+614=>611,615=>611,616=>278,617=>344,618=>278,621=>298,622=>778,623=>889,624=>889,625=>889,
+626=>611,627=>611,628=>615,629=>611,632=>778,633=>389,634=>389,635=>389,636=>389,637=>389,
+638=>455,639=>455,640=>620,641=>620,642=>556,643=>333,644=>278,645=>333,647=>328,648=>333,
+649=>623,652=>556,653=>778,654=>556,656=>500,658=>556,660=>611,661=>611,662=>611,664=>611,
+665=>572,666=>570,668=>603,670=>556,671=>454,672=>611,673=>611,711=>333,713=>333,714=>333,
+715=>333,728=>333,729=>333,730=>333,731=>333,733=>333,768=>0,769=>0,770=>0,771=>0,
+772=>0,774=>0,775=>0,776=>0,778=>0,779=>0,780=>0,783=>0,785=>0,787=>0,
+788=>0,884=>208,885=>247,890=>364,894=>333,900=>239,901=>446,902=>688,903=>418,904=>903,
+905=>962,906=>448,908=>904,910=>991,911=>932,912=>346,913=>764,914=>688,915=>642,916=>744,
+917=>710,918=>688,919=>743,920=>810,921=>296,922=>744,923=>744,924=>860,925=>714,926=>690,
+927=>822,928=>781,929=>698,931=>688,932=>688,933=>744,934=>777,935=>783,936=>805,937=>780,
+938=>296,939=>744,940=>640,941=>530,942=>597,943=>339,944=>575,945=>656,946=>576,947=>591,
+948=>620,949=>570,950=>522,951=>586,952=>586,953=>346,954=>576,955=>620,956=>667,957=>564,
+958=>530,959=>610,960=>721,961=>626,962=>595,963=>676,964=>592,965=>575,966=>801,967=>632,
+968=>722,969=>800,970=>346,971=>575,972=>609,973=>604,974=>769,1024=>666,1025=>666,1026=>790,
+1027=>611,1028=>722,1029=>667,1030=>278,1031=>278,1032=>556,1033=>1110,1034=>1088,1035=>790,1036=>720,
+1037=>722,1038=>698,1039=>722,1040=>722,1041=>722,1042=>722,1043=>611,1044=>918,1045=>667,1046=>1054,
+1047=>659,1048=>722,1049=>722,1050=>722,1051=>722,1052=>833,1053=>722,1054=>778,1055=>722,1056=>667,
+1057=>722,1058=>611,1059=>698,1060=>902,1061=>664,1062=>730,1063=>671,1064=>1101,1065=>1179,1066=>816,
+1067=>939,1068=>639,1069=>737,1070=>1080,1071=>690,1072=>556,1073=>611,1074=>621,1075=>475,1076=>804,
+1077=>556,1078=>775,1079=>556,1080=>636,1081=>636,1082=>529,1083=>608,1084=>697,1085=>636,1086=>611,
+1087=>636,1088=>611,1089=>556,1090=>454,1091=>552,1092=>989,1093=>554,1094=>690,1095=>606,1096=>934,
+1097=>987,1098=>741,1099=>839,1100=>619,1101=>575,1102=>908,1103=>636,1104=>552,1105=>552,1106=>606,
+1107=>475,1108=>556,1109=>556,1110=>278,1111=>278,1112=>278,1113=>900,1114=>611,1115=>606,1116=>529,
+1117=>636,1118=>552,1119=>636,1164=>639,1165=>619,1166=>649,1167=>611,1168=>611,1169=>454,1170=>611,
+1171=>475,1172=>611,1173=>475,1174=>1054,1175=>775,1176=>659,1177=>556,1178=>720,1179=>529,1180=>720,
+1181=>529,1182=>720,1183=>529,1184=>889,1185=>650,1186=>722,1187=>636,1188=>992,1189=>807,1190=>1067,
+1191=>876,1192=>837,1193=>554,1194=>837,1195=>554,1196=>611,1197=>454,1198=>667,1199=>667,1200=>667,
+1201=>667,1202=>664,1203=>554,1204=>864,1205=>727,1206=>743,1207=>606,1208=>671,1209=>606,1210=>671,
+1211=>606,1212=>837,1213=>552,1214=>837,1215=>552,1216=>278,1217=>1054,1218=>775,1219=>720,1220=>529,
+1223=>722,1224=>636,1227=>671,1228=>606,1232=>722,1233=>554,1234=>722,1235=>554,1236=>1000,1237=>889,
+1238=>666,1239=>552,1240=>837,1241=>552,1242=>837,1243=>552,1244=>1054,1245=>775,1246=>659,1247=>556,
+1248=>659,1249=>556,1250=>722,1251=>636,1252=>722,1253=>636,1254=>778,1255=>611,1256=>778,1257=>611,
+1258=>778,1259=>611,1260=>737,1261=>575,1262=>698,1263=>552,1264=>698,1265=>552,1266=>698,1267=>552,
+1268=>671,1269=>606,1272=>939,1273=>839,1456=>82,1457=>347,1458=>341,1459=>341,1460=>82,1461=>211,
+1462=>211,1463=>200,1464=>200,1465=>82,1467=>341,1468=>82,1469=>82,1470=>516,1471=>200,1472=>297,
+1473=>1038,1474=>1038,1475=>333,1476=>82,1488=>714,1489=>651,1490=>557,1491=>638,1492=>682,1493=>297,
+1494=>443,1495=>682,1496=>670,1497=>284,1498=>590,1499=>595,1500=>667,1501=>683,1502=>704,1503=>297,
+1504=>429,1505=>670,1506=>653,1507=>661,1508=>660,1509=>616,1510=>671,1511=>672,1512=>600,1513=>840,
+1514=>756,1520=>554,1521=>550,1522=>542,1523=>238,1524=>474,4256=>616,4257=>645,4258=>664,4259=>839,
+4260=>627,4261=>630,4262=>827,4263=>928,4264=>639,4265=>630,4266=>951,4267=>606,4268=>608,4269=>835,
+4270=>630,4271=>610,4272=>804,4273=>615,4274=>823,4275=>747,4276=>870,4277=>627,4278=>840,4279=>627,
+4280=>665,4281=>610,4282=>799,4283=>598,4284=>665,4285=>664,4286=>608,4287=>886,4288=>629,4304=>463,
+4305=>516,4306=>564,4307=>706,4308=>459,4309=>476,4310=>623,4311=>711,4312=>494,4313=>476,4314=>894,
+4315=>500,4316=>500,4317=>712,4318=>493,4319=>503,4320=>712,4321=>503,4322=>710,4323=>670,4324=>707,
+4325=>459,4326=>691,4327=>465,4328=>492,4329=>480,4330=>656,4331=>500,4332=>492,4333=>524,4334=>500,
+4335=>688,4336=>510,4337=>739,4338=>450,4339=>479,4340=>502,4341=>501,7936=>656,7937=>656,7938=>656,
+7939=>656,7940=>656,7941=>656,7942=>656,7943=>656,7944=>764,7945=>764,7946=>764,7947=>764,7948=>764,
+7949=>764,7950=>764,7951=>764,7952=>570,7953=>570,7954=>570,7955=>570,7956=>570,7957=>570,7960=>710,
+7961=>710,7962=>710,7963=>710,7964=>710,7965=>710,7968=>586,7969=>586,7970=>586,7971=>586,7972=>586,
+7973=>586,7974=>586,7975=>586,7976=>743,7977=>743,7978=>743,7979=>743,7980=>743,7981=>743,7982=>743,
+7983=>743,7984=>346,7985=>346,7986=>346,7987=>346,7988=>346,7989=>346,7990=>346,7991=>346,7992=>296,
+7993=>296,7994=>296,7995=>296,7996=>296,7997=>296,7998=>296,7999=>296,8000=>610,8001=>610,8002=>610,
+8003=>610,8004=>610,8005=>610,8008=>822,8009=>822,8010=>822,8011=>822,8012=>822,8013=>822,8016=>575,
+8017=>575,8018=>575,8019=>575,8020=>575,8021=>575,8022=>575,8023=>575,8025=>744,8027=>744,8029=>744,
+8031=>744,8032=>800,8033=>800,8034=>800,8035=>800,8036=>800,8037=>800,8038=>800,8039=>800,8040=>780,
+8041=>780,8042=>780,8043=>780,8044=>780,8045=>780,8046=>780,8047=>780,8048=>656,8049=>656,8050=>570,
+8051=>570,8052=>586,8053=>586,8054=>346,8055=>346,8056=>610,8057=>610,8058=>575,8059=>575,8060=>800,
+8061=>800,8064=>656,8065=>656,8066=>656,8067=>656,8068=>656,8069=>656,8070=>656,8071=>656,8072=>1007,
+8073=>1007,8074=>1007,8075=>1007,8076=>1007,8077=>1007,8078=>1007,8079=>1007,8080=>586,8081=>586,8082=>586,
+8083=>586,8084=>586,8085=>586,8086=>586,8087=>586,8088=>986,8089=>986,8090=>986,8091=>986,8092=>986,
+8093=>986,8094=>986,8095=>986,8096=>800,8097=>800,8098=>800,8099=>800,8100=>800,8101=>800,8102=>800,
+8103=>800,8104=>1023,8105=>1023,8106=>1023,8107=>1023,8108=>1023,8109=>1023,8110=>1023,8111=>1023,8112=>656,
+8113=>656,8114=>656,8115=>656,8116=>640,8118=>656,8119=>656,8120=>764,8121=>764,8122=>764,8123=>764,
+8124=>1007,8125=>278,8126=>201,8127=>147,8128=>278,8129=>333,8130=>586,8131=>586,8132=>597,8134=>586,
+8135=>586,8136=>710,8137=>710,8138=>743,8139=>743,8140=>986,8141=>402,8142=>403,8143=>147,8144=>346,
+8145=>346,8146=>346,8147=>346,8150=>346,8151=>346,8152=>296,8153=>296,8154=>296,8155=>296,8157=>434,
+8158=>433,8159=>333,8160=>575,8161=>575,8162=>575,8163=>575,8164=>626,8165=>626,8166=>575,8167=>575,
+8168=>744,8169=>744,8173=>333,8174=>351,8175=>303,8182=>800,8183=>800,8184=>822,8185=>822,8186=>780,
+8187=>780,8188=>1023,8189=>333,8190=>159,8210=>556,8213=>1000,8260=>167,8263=>1222,8264=>944,8265=>944,
+8304=>351,8305=>351,8308=>351,8309=>351,8310=>351,8311=>351,8312=>351,8313=>351,8314=>351,8315=>351,
+8316=>351,8317=>351,8318=>351,8319=>351,8320=>351,8321=>251,8322=>351,8323=>351,8324=>351,8325=>351,
+8326=>351,8327=>351,8328=>351,8329=>351,8330=>351,8331=>351,8332=>351,8333=>351,8334=>351,8362=>1049,
+8373=>591,8486=>780,8487=>780,8531=>869,8532=>869,8533=>869,8534=>869,8535=>869,8536=>869,8537=>869,
+8538=>869,8539=>869,8540=>869,8541=>869,8542=>869,8543=>869,8544=>278,8545=>556,8546=>834,8547=>945,
+8548=>667,8549=>945,8550=>1223,8551=>1501,8552=>945,8553=>667,8554=>945,8555=>1223,8556=>611,8557=>722,
+8558=>722,8559=>833,8560=>278,8561=>556,8562=>834,8563=>834,8564=>556,8565=>834,8566=>1112,8567=>1390,
+8568=>834,8569=>556,8570=>834,8571=>1112,8572=>278,8573=>556,8574=>611,8575=>889,8592=>964,8593=>964,
+8594=>964,8595=>964,8596=>964,8597=>964,8598=>964,8599=>964,8600=>964,8601=>964,8602=>964,8603=>964,
+8606=>964,8607=>964,8608=>964,8609=>964,8610=>964,8611=>964,8612=>964,8613=>964,8614=>964,8615=>964,
+8616=>964,8644=>964,8645=>964,8646=>964,8647=>964,8648=>964,8649=>964,8650=>964,8706=>490,8710=>729,
+8721=>711,8722=>584,8723=>584,8725=>1055,8730=>542,8800=>584,8804=>584,8805=>584,9674=>489,9833=>333,
+9834=>556,9835=>778,9836=>778,9837=>556,9838=>556,9839=>556,63033=>556,63034=>556,63035=>556,63036=>556,
+63037=>556,63038=>556,63039=>556,63040=>556,63041=>556,63166=>278,63171=>333,63196=>556,64256=>666,64257=>611,
+64258=>611,64259=>944,64260=>944,64261=>666,64262=>889,64285=>284,64286=>305,64287=>542,64288=>653,64289=>964,
+64290=>888,64291=>932,64292=>845,64293=>917,64294=>933,64295=>850,64296=>1006,64297=>584,64298=>840,64299=>840,
+64300=>840,64301=>840,64302=>714,64303=>714,64304=>714,64305=>651,64306=>557,64307=>638,64308=>682,64309=>367,
+64310=>443,64312=>670,64313=>354,64314=>590,64315=>595,64316=>667,64318=>704,64320=>429,64321=>670,64323=>661,
+64324=>660,64326=>671,64327=>672,64328=>600,64329=>840,64330=>756,64331=>297,64332=>651,64333=>595,64334=>660,
+64335=>714,65533=>788);
+$enc='';
+$diff='';
+$file='freesansbi.z';
+$ctg='freesansbi.ctg.z';
+$originalsize=113516;
+?> \ No newline at end of file
diff --git a/admin/exportclases/fonts/freesansbi.z b/admin/exportclases/fonts/freesansbi.z
new file mode 100644
index 0000000..5909c39
--- /dev/null
+++ b/admin/exportclases/fonts/freesansbi.z
Binary files differ
diff --git a/admin/exportclases/fonts/freesansi.ctg.z b/admin/exportclases/fonts/freesansi.ctg.z
new file mode 100644
index 0000000..3c43ecd
--- /dev/null
+++ b/admin/exportclases/fonts/freesansi.ctg.z
Binary files differ
diff --git a/admin/exportclases/fonts/freesansi.php b/admin/exportclases/fonts/freesansi.php
new file mode 100644
index 0000000..7b9412e
--- /dev/null
+++ b/admin/exportclases/fonts/freesansi.php
@@ -0,0 +1,166 @@
+<?php
+$type='TrueTypeUnicode';
+$name='FreeSansOblique';
+$desc=array('Ascent'=>900,'Descent'=>-300,'CapHeight'=>22,'Flags'=>96,'FontBBox'=>'[-620 -431 1459 1141]','ItalicAngle'=>-12,'StemV'=>70,'MissingWidth'=>600);
+$up=-176;
+$ut=50;
+$dw=600;
+$cw=array(
+32=>278,33=>278,34=>355,35=>556,36=>556,37=>889,38=>667,39=>191,40=>333,41=>333,
+42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556,
+52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>278,59=>278,60=>584,61=>584,
+62=>584,63=>556,64=>1015,65=>667,66=>667,67=>722,68=>722,69=>667,70=>611,71=>778,
+72=>722,73=>278,74=>500,75=>667,76=>556,77=>833,78=>722,79=>778,80=>667,81=>778,
+82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>278,
+92=>278,93=>278,94=>469,95=>556,96=>333,97=>556,98=>556,99=>500,100=>556,101=>556,
+102=>278,103=>556,104=>556,105=>222,106=>222,107=>500,108=>222,109=>833,110=>556,111=>556,
+112=>556,113=>556,114=>333,115=>500,116=>278,117=>556,118=>500,119=>722,120=>500,121=>500,
+122=>500,123=>334,124=>260,125=>334,126=>584,8364=>556,8218=>222,402=>278,8222=>333,8230=>1000,
+8224=>556,8225=>556,710=>333,8240=>1000,352=>667,8249=>333,338=>1000,381=>611,8216=>222,8217=>222,
+8220=>333,8221=>333,8226=>350,8211=>556,8212=>1000,732=>333,8482=>1000,353=>500,8250=>333,339=>944,
+382=>500,376=>667,160=>278,161=>333,162=>556,163=>556,164=>556,165=>556,166=>260,167=>556,
+168=>333,169=>737,170=>370,171=>556,172=>584,173=>333,174=>737,175=>333,176=>606,177=>584,
+178=>352,179=>352,180=>333,181=>556,182=>537,183=>278,184=>333,185=>250,186=>365,187=>556,
+188=>947,189=>947,190=>947,191=>611,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667,
+198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,
+208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722,
+218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,226=>556,227=>556,
+228=>556,229=>556,230=>889,231=>500,232=>556,233=>556,234=>556,235=>556,236=>278,237=>278,
+238=>278,239=>278,240=>556,241=>556,242=>556,243=>556,244=>556,245=>556,246=>556,247=>584,
+248=>611,249=>556,250=>556,251=>556,252=>556,253=>500,254=>556,255=>500,256=>667,257=>556,
+258=>667,259=>556,260=>667,261=>556,262=>722,263=>500,264=>722,265=>500,266=>722,267=>500,
+268=>722,269=>500,270=>722,271=>722,272=>722,273=>556,274=>667,275=>556,276=>667,277=>556,
+278=>667,279=>556,280=>667,281=>556,282=>667,283=>556,284=>778,285=>556,286=>778,287=>556,
+288=>778,289=>556,290=>778,291=>527,292=>722,293=>556,294=>722,295=>556,296=>278,297=>278,
+298=>278,299=>278,300=>278,301=>278,302=>278,303=>222,304=>278,305=>278,306=>742,307=>362,
+308=>500,309=>222,310=>667,311=>500,312=>510,313=>556,314=>222,315=>556,316=>222,317=>556,
+318=>387,319=>556,320=>500,321=>556,322=>222,323=>722,324=>556,325=>722,326=>556,327=>722,
+328=>556,329=>722,330=>722,331=>556,332=>778,333=>556,334=>778,335=>556,336=>778,337=>556,
+340=>722,341=>333,342=>722,343=>333,344=>722,345=>333,346=>667,347=>500,348=>667,349=>500,
+350=>667,351=>500,354=>611,355=>278,356=>611,357=>443,358=>611,359=>278,360=>722,361=>556,
+362=>722,363=>556,364=>722,365=>556,366=>722,367=>556,368=>722,369=>556,370=>722,371=>556,
+372=>944,373=>722,374=>667,375=>500,377=>611,378=>500,379=>611,380=>500,383=>278,384=>556,
+385=>854,386=>667,387=>556,388=>667,389=>556,390=>722,391=>722,392=>500,393=>722,394=>899,
+395=>667,396=>556,397=>556,398=>667,399=>778,400=>667,401=>611,403=>778,404=>667,405=>889,
+406=>278,407=>333,408=>741,409=>500,410=>333,411=>560,412=>833,413=>722,414=>556,415=>778,
+416=>778,417=>556,420=>842,421=>556,423=>667,424=>500,425=>611,426=>333,427=>278,428=>611,
+429=>278,430=>611,431=>722,432=>556,433=>720,435=>788,436=>616,437=>611,438=>500,439=>611,
+440=>611,441=>500,448=>260,449=>520,450=>584,451=>278,452=>1311,453=>1208,454=>1056,455=>1056,
+456=>778,457=>444,458=>1158,459=>944,460=>778,461=>667,462=>556,463=>278,464=>278,465=>778,
+466=>556,467=>722,468=>556,469=>722,470=>556,471=>722,472=>556,473=>722,474=>556,475=>722,
+476=>556,477=>556,478=>667,479=>556,480=>667,481=>556,482=>1000,483=>889,486=>778,487=>556,
+488=>667,489=>500,490=>778,491=>556,492=>778,493=>556,494=>611,495=>500,496=>222,497=>1333,
+498=>1222,499=>1056,500=>778,501=>556,504=>722,505=>556,506=>667,507=>556,508=>1000,509=>889,
+510=>778,511=>611,512=>667,513=>556,514=>667,515=>556,516=>667,517=>556,518=>667,519=>556,
+520=>278,521=>278,522=>278,523=>278,524=>778,525=>556,526=>778,527=>556,528=>722,529=>333,
+530=>722,531=>333,532=>722,533=>556,534=>722,535=>556,536=>667,537=>500,538=>611,539=>278,
+542=>722,543=>556,550=>667,551=>556,552=>667,553=>556,554=>778,555=>556,556=>778,557=>556,
+558=>778,559=>556,560=>778,561=>556,562=>667,563=>500,592=>556,593=>556,594=>659,595=>556,
+596=>500,598=>556,599=>556,600=>556,601=>556,603=>500,604=>500,606=>500,607=>222,608=>556,
+609=>556,610=>546,611=>621,613=>556,614=>556,615=>556,616=>222,617=>222,618=>278,620=>1000,
+621=>222,622=>1000,623=>833,624=>833,625=>833,626=>556,627=>556,628=>560,629=>556,630=>778,
+632=>741,633=>333,634=>333,635=>333,636=>333,637=>333,638=>384,639=>369,640=>546,641=>546,
+642=>500,643=>278,644=>278,645=>278,647=>278,648=>278,649=>556,650=>626,651=>539,652=>500,
+653=>722,654=>500,656=>500,658=>500,660=>556,661=>556,662=>556,664=>556,665=>522,667=>546,
+668=>500,670=>500,671=>430,672=>556,711=>333,713=>333,714=>333,715=>333,728=>333,729=>333,
+730=>333,731=>333,733=>333,768=>0,769=>0,770=>0,771=>0,772=>0,774=>0,775=>0,
+776=>0,778=>0,779=>0,783=>0,785=>0,787=>0,788=>0,884=>199,885=>199,890=>332,
+894=>278,900=>291,901=>624,902=>659,903=>358,904=>870,905=>870,906=>315,908=>876,910=>903,
+911=>882,912=>286,913=>684,914=>628,915=>582,916=>684,917=>650,918=>628,919=>683,920=>750,
+921=>236,922=>684,923=>684,924=>800,925=>654,926=>630,927=>750,928=>721,929=>638,931=>628,
+932=>628,933=>684,934=>717,935=>723,936=>745,937=>720,938=>236,939=>684,940=>593,941=>519,
+942=>595,943=>271,944=>515,945=>596,946=>516,947=>531,948=>560,949=>510,950=>462,951=>526,
+952=>526,953=>286,954=>516,955=>560,956=>607,957=>504,958=>470,959=>550,960=>661,961=>566,
+962=>535,963=>616,964=>532,965=>515,966=>741,967=>572,968=>662,969=>740,970=>286,971=>515,
+972=>535,973=>503,974=>725,981=>741,1024=>667,1025=>667,1026=>766,1027=>611,1028=>722,1029=>667,
+1030=>278,1031=>278,1032=>500,1033=>968,1034=>1173,1035=>766,1036=>664,1037=>731,1038=>530,1039=>722,
+1040=>667,1041=>639,1042=>667,1043=>611,1044=>816,1045=>667,1046=>897,1047=>652,1048=>731,1049=>731,
+1050=>664,1051=>646,1052=>833,1053=>722,1054=>778,1055=>722,1056=>667,1057=>722,1058=>611,1059=>530,
+1060=>891,1061=>667,1062=>722,1063=>642,1064=>836,1065=>837,1066=>866,1067=>886,1068=>698,1069=>717,
+1070=>1079,1071=>691,1072=>556,1073=>556,1074=>538,1075=>430,1076=>640,1077=>556,1078=>818,1079=>495,
+1080=>560,1081=>560,1082=>510,1083=>556,1084=>621,1085=>561,1086=>556,1087=>560,1088=>556,1089=>500,
+1090=>400,1091=>500,1092=>916,1093=>500,1094=>560,1095=>497,1096=>695,1097=>695,1098=>640,1099=>734,
+1100=>523,1101=>534,1102=>788,1103=>564,1104=>556,1105=>556,1106=>568,1107=>430,1108=>500,1109=>500,
+1110=>222,1111=>278,1112=>222,1113=>840,1114=>850,1115=>568,1116=>510,1117=>560,1118=>500,1119=>560,
+1164=>698,1165=>523,1166=>667,1167=>556,1168=>611,1169=>430,1170=>611,1171=>430,1172=>611,1173=>430,
+1174=>897,1175=>818,1176=>652,1177=>495,1178=>664,1179=>510,1180=>664,1181=>510,1182=>664,1183=>510,
+1184=>704,1185=>618,1186=>722,1187=>561,1188=>1010,1189=>753,1190=>1061,1191=>803,1194=>722,1195=>500,
+1196=>611,1197=>400,1198=>667,1199=>667,1200=>667,1201=>667,1202=>665,1203=>496,1204=>879,1205=>629,
+1206=>642,1207=>497,1208=>642,1209=>497,1210=>642,1211=>497,1212=>722,1213=>605,1214=>722,1215=>605,
+1216=>278,1217=>897,1218=>818,1219=>664,1220=>510,1223=>722,1224=>561,1227=>642,1228=>497,1232=>667,
+1233=>556,1234=>667,1235=>556,1236=>1000,1237=>889,1238=>667,1239=>556,1240=>722,1241=>495,1242=>722,
+1243=>495,1244=>897,1245=>818,1246=>652,1247=>495,1248=>652,1249=>495,1250=>731,1251=>560,1252=>731,
+1253=>560,1254=>778,1255=>556,1256=>780,1257=>554,1258=>780,1259=>554,1260=>717,1261=>534,1262=>530,
+1263=>500,1264=>530,1265=>500,1266=>530,1267=>500,1268=>642,1269=>497,1272=>886,1273=>734,1329=>722,
+1330=>705,1331=>774,1332=>754,1333=>722,1334=>751,1335=>485,1336=>722,1337=>782,1338=>655,1339=>699,
+1340=>417,1341=>853,1342=>791,1343=>711,1344=>588,1345=>663,1346=>665,1347=>665,1348=>756,1349=>623,
+1350=>773,1351=>603,1352=>722,1353=>648,1354=>722,1355=>751,1356=>750,1357=>722,1358=>748,1359=>667,
+1360=>699,1361=>623,1362=>417,1363=>785,1364=>638,1365=>778,1366=>716,1370=>222,1371=>133,1372=>325,
+1373=>333,1374=>344,1377=>833,1378=>556,1379=>572,1380=>581,1381=>550,1382=>588,1383=>448,1384=>556,
+1385=>568,1386=>582,1387=>545,1388=>301,1389=>799,1390=>556,1391=>554,1392=>533,1393=>548,1394=>552,
+1395=>552,1396=>544,1397=>222,1398=>544,1399=>456,1400=>556,1401=>390,1402=>833,1403=>509,1404=>547,
+1405=>533,1406=>610,1407=>887,1408=>556,1409=>545,1410=>352,1411=>853,1412=>588,1413=>579,1414=>690,
+1415=>545,1417=>278,1418=>367,1456=>70,1457=>335,1458=>329,1459=>329,1460=>70,1461=>200,1462=>200,
+1463=>188,1464=>188,1465=>70,1467=>329,1468=>70,1469=>70,1470=>488,1471=>200,1472=>212,1473=>0,
+1474=>0,1475=>278,1476=>70,1488=>640,1489=>591,1490=>466,1491=>598,1492=>622,1493=>212,1494=>351,
+1495=>623,1496=>608,1497=>200,1498=>526,1499=>550,1500=>600,1501=>623,1502=>621,1503=>212,1504=>378,
+1505=>607,1506=>587,1507=>575,1508=>568,1509=>540,1510=>590,1511=>606,1512=>547,1513=>776,1514=>687,
+1520=>424,1521=>412,1522=>400,1523=>184,1524=>344,2433=>0,2434=>300,2435=>264,2437=>594,2438=>790,
+2439=>469,2440=>513,2441=>520,2442=>549,2443=>594,2444=>481,2447=>580,2448=>627,2451=>540,2452=>613,
+2453=>570,2454=>467,2455=>471,2456=>428,2457=>483,2458=>408,2459=>509,2460=>591,2461=>563,2462=>771,
+2463=>381,2464=>404,2465=>522,2466=>408,2467=>450,2468=>543,2469=>477,2470=>418,2471=>433,2472=>445,
+2474=>499,2475=>584,2476=>377,2477=>555,2478=>448,2479=>423,2480=>390,2482=>498,2486=>498,2487=>425,
+2488=>495,2489=>440,2492=>22,2493=>440,2494=>193,2495=>189,2496=>180,2497=>0,2498=>0,2499=>0,
+2500=>0,2503=>252,2504=>243,2507=>889,2508=>865,2509=>0,2510=>356,2519=>219,2524=>523,2525=>408,
+2527=>428,2528=>594,2529=>481,2530=>0,2531=>-199,2534=>500,2535=>437,2536=>479,2537=>530,2538=>497,
+2539=>500,2540=>482,2541=>503,2542=>517,2543=>481,2544=>377,2545=>377,2546=>429,2547=>383,2548=>429,
+2549=>478,2550=>545,2551=>158,2552=>365,2553=>280,2554=>357,4256=>587,4257=>620,4258=>642,4259=>815,
+4260=>600,4261=>595,4262=>799,4263=>893,4264=>622,4265=>597,4266=>939,4267=>602,4268=>603,4269=>790,
+4270=>587,4271=>623,4272=>799,4273=>601,4274=>792,4275=>724,4276=>847,4277=>599,4278=>812,4279=>603,
+4280=>653,4281=>590,4282=>754,4283=>596,4284=>653,4285=>651,4286=>596,4287=>888,4288=>593,4304=>436,
+4305=>491,4306=>528,4307=>692,4308=>447,4309=>447,4310=>628,4311=>734,4312=>449,4313=>445,4314=>843,
+4315=>449,4316=>449,4317=>682,4318=>449,4319=>480,4320=>682,4321=>468,4322=>710,4323=>623,4324=>697,
+4325=>447,4326=>702,4327=>447,4328=>470,4329=>440,4330=>632,4331=>449,4332=>470,4333=>536,4334=>449,
+4335=>656,4336=>474,4337=>630,4338=>394,4339=>419,4340=>422,4341=>436,7936=>596,7937=>596,7938=>596,
+7939=>596,7940=>596,7941=>596,7942=>596,7943=>596,7944=>684,7945=>684,7946=>684,7947=>684,7948=>684,
+7949=>684,7950=>684,7951=>684,7952=>510,7953=>510,7954=>510,7955=>510,7956=>510,7957=>510,7960=>650,
+7961=>650,7962=>650,7963=>650,7964=>650,7965=>650,7968=>526,7969=>526,7970=>526,7971=>526,7972=>526,
+7973=>526,7974=>526,7975=>526,7976=>683,7977=>683,7978=>683,7979=>683,7980=>683,7981=>683,7982=>683,
+7983=>683,7984=>286,7985=>286,7986=>286,7987=>286,7988=>286,7989=>286,7990=>286,7991=>286,7992=>236,
+7993=>236,7994=>236,7995=>236,7996=>236,7997=>236,7998=>236,7999=>236,8000=>550,8001=>550,8002=>550,
+8003=>550,8004=>550,8005=>550,8008=>750,8009=>750,8010=>750,8011=>750,8012=>750,8013=>750,8016=>515,
+8017=>515,8018=>515,8019=>515,8020=>515,8021=>515,8022=>515,8023=>515,8025=>684,8027=>684,8029=>684,
+8031=>684,8032=>740,8033=>740,8034=>740,8035=>740,8036=>740,8037=>740,8038=>740,8039=>740,8040=>720,
+8041=>720,8042=>720,8043=>720,8044=>720,8045=>720,8046=>720,8047=>720,8048=>596,8049=>596,8050=>510,
+8051=>510,8052=>526,8053=>526,8054=>286,8055=>286,8056=>550,8057=>550,8058=>515,8059=>515,8060=>740,
+8061=>740,8064=>596,8065=>596,8066=>596,8067=>596,8068=>596,8069=>596,8070=>596,8071=>596,8072=>900,
+8073=>900,8074=>900,8075=>900,8076=>900,8077=>900,8078=>900,8079=>900,8080=>526,8081=>526,8082=>526,
+8083=>526,8084=>526,8085=>526,8086=>526,8087=>526,8088=>899,8089=>899,8090=>899,8091=>899,8092=>899,
+8093=>899,8094=>899,8095=>899,8096=>740,8097=>740,8098=>740,8099=>740,8100=>740,8101=>740,8102=>740,
+8103=>740,8104=>936,8105=>936,8106=>936,8107=>936,8108=>936,8109=>936,8110=>936,8111=>936,8112=>596,
+8113=>596,8114=>596,8115=>596,8116=>593,8118=>596,8119=>596,8120=>684,8121=>684,8122=>684,8123=>684,
+8124=>900,8125=>278,8126=>201,8127=>147,8128=>278,8129=>333,8130=>526,8131=>526,8132=>595,8134=>526,
+8135=>526,8136=>650,8137=>650,8138=>683,8139=>683,8140=>899,8141=>602,8142=>601,8143=>333,8144=>286,
+8145=>286,8146=>286,8147=>286,8150=>286,8151=>286,8152=>236,8153=>236,8154=>236,8155=>236,8157=>434,
+8158=>433,8159=>333,8160=>515,8161=>515,8162=>515,8163=>515,8164=>566,8165=>566,8166=>515,8167=>515,
+8168=>684,8169=>684,8170=>684,8171=>684,8172=>638,8173=>333,8174=>624,8175=>303,8178=>740,8179=>740,
+8180=>725,8182=>740,8183=>740,8184=>750,8185=>750,8186=>720,8187=>720,8188=>936,8189=>333,8190=>159,
+8204=>0,8205=>0,8208=>333,8209=>333,8210=>556,8213=>1000,8260=>167,8304=>351,8305=>351,8308=>351,
+8309=>351,8310=>351,8311=>351,8312=>351,8313=>351,8320=>351,8321=>251,8322=>351,8323=>351,8324=>351,
+8325=>353,8326=>351,8327=>351,8328=>351,8329=>351,8359=>1445,8360=>1222,8362=>869,8373=>640,8486=>720,
+8531=>869,8532=>869,8533=>869,8534=>869,8535=>869,8536=>869,8537=>869,8538=>869,8539=>869,8540=>869,
+8541=>869,8542=>869,8543=>869,8592=>987,8593=>603,8594=>987,8595=>603,8596=>1042,8597=>1042,8706=>490,
+8710=>712,8721=>711,8722=>584,8725=>947,8730=>542,8800=>584,8804=>584,8805=>584,9674=>489,9834=>555,
+63033=>556,63034=>556,63035=>556,63036=>556,63037=>556,63038=>556,63039=>556,63040=>556,63041=>556,63166=>222,
+63171=>333,63196=>556,64256=>556,64257=>500,64258=>500,64259=>778,64260=>778,64261=>556,64262=>778,64285=>200,
+64286=>305,64287=>400,64288=>587,64289=>890,64290=>848,64291=>872,64292=>800,64293=>850,64294=>873,64295=>797,
+64296=>937,64297=>584,64298=>776,64299=>776,64300=>776,64301=>776,64302=>640,64303=>640,64304=>640,64305=>591,
+64306=>466,64307=>598,64308=>622,64309=>262,64310=>351,64312=>608,64313=>270,64314=>526,64315=>550,64316=>600,
+64318=>621,64320=>378,64321=>607,64323=>575,64324=>568,64326=>590,64327=>606,64328=>547,64329=>776,64330=>687,
+64331=>212,64332=>591,64333=>550,64334=>568,64335=>640,65533=>788);
+$enc='';
+$diff='';
+$file='freesansi.z';
+$ctg='freesansi.ctg.z';
+$originalsize=248072;
+?> \ No newline at end of file
diff --git a/admin/exportclases/fonts/freesansi.z b/admin/exportclases/fonts/freesansi.z
new file mode 100644
index 0000000..0f52ff6
--- /dev/null
+++ b/admin/exportclases/fonts/freesansi.z
Binary files differ
diff --git a/admin/exportclases/fonts/freeserif.ctg.z b/admin/exportclases/fonts/freeserif.ctg.z
new file mode 100644
index 0000000..2c931ba
--- /dev/null
+++ b/admin/exportclases/fonts/freeserif.ctg.z
Binary files differ
diff --git a/admin/exportclases/fonts/freeserif.php b/admin/exportclases/fonts/freeserif.php
new file mode 100644
index 0000000..6da5f4c
--- /dev/null
+++ b/admin/exportclases/fonts/freeserif.php
@@ -0,0 +1,427 @@
+<?php
+$type='TrueTypeUnicode';
+$name='FreeSerif';
+$desc=array('Ascent'=>900,'Descent'=>-300,'CapHeight'=>10,'Flags'=>32,'FontBBox'=>'[-797 -545 2010 1166]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>600);
+$up=-125;
+$ut=50;
+$dw=600;
+$cw=array(
+32=>250,33=>333,34=>408,35=>500,36=>500,37=>833,38=>778,39=>180,40=>333,41=>333,
+42=>500,43=>564,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500,50=>500,51=>500,
+52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>278,59=>278,60=>564,61=>564,
+62=>564,63=>444,64=>921,65=>722,66=>667,67=>667,68=>722,69=>611,70=>556,71=>722,
+72=>722,73=>333,74=>389,75=>722,76=>611,77=>889,78=>722,79=>722,80=>556,81=>722,
+82=>667,83=>556,84=>611,85=>722,86=>722,87=>944,88=>722,89=>722,90=>611,91=>333,
+92=>278,93=>333,94=>469,95=>500,96=>333,97=>444,98=>500,99=>444,100=>500,101=>444,
+102=>333,103=>500,104=>500,105=>278,106=>278,107=>500,108=>278,109=>778,110=>500,111=>500,
+112=>500,113=>500,114=>333,115=>389,116=>278,117=>500,118=>500,119=>722,120=>500,121=>500,
+122=>444,123=>480,124=>200,125=>480,126=>541,8364=>741,8218=>333,402=>333,8222=>444,8230=>1000,
+8224=>500,8225=>500,710=>333,8240=>1000,352=>556,8249=>333,338=>889,381=>611,8216=>333,8217=>333,
+8220=>444,8221=>444,8226=>350,8211=>500,8212=>1000,732=>333,8482=>980,353=>389,8250=>333,339=>722,
+382=>444,376=>722,160=>250,161=>333,162=>500,163=>500,164=>500,165=>500,166=>200,167=>500,
+168=>333,169=>760,170=>276,171=>500,172=>564,173=>333,174=>760,175=>333,176=>400,177=>564,
+178=>300,179=>300,180=>333,181=>500,182=>453,183=>250,184=>333,185=>300,186=>310,187=>500,
+188=>750,189=>750,190=>750,191=>444,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,
+198=>889,199=>667,200=>611,201=>611,202=>611,203=>611,204=>333,205=>333,206=>333,207=>333,
+208=>722,209=>722,210=>722,211=>722,212=>722,213=>722,214=>722,215=>564,216=>722,217=>722,
+218=>722,219=>722,220=>722,221=>722,222=>556,223=>500,224=>444,225=>444,226=>444,227=>444,
+228=>444,229=>444,230=>667,231=>444,232=>444,233=>444,234=>444,235=>444,236=>278,237=>278,
+238=>278,239=>278,240=>500,241=>500,242=>500,243=>500,244=>500,245=>500,246=>500,247=>564,
+248=>500,249=>500,250=>500,251=>500,252=>500,253=>500,254=>500,255=>500,256=>722,257=>444,
+258=>722,259=>444,260=>722,261=>444,262=>667,263=>444,264=>667,265=>444,266=>667,267=>444,
+268=>667,269=>444,270=>722,271=>600,272=>722,273=>500,274=>611,275=>444,276=>611,277=>444,
+278=>611,279=>444,280=>611,281=>444,282=>611,283=>444,284=>722,285=>500,286=>722,287=>500,
+288=>722,289=>500,290=>722,291=>500,292=>722,293=>500,294=>722,295=>548,296=>333,297=>278,
+298=>333,299=>278,300=>333,301=>278,302=>333,303=>278,304=>333,305=>278,306=>722,307=>556,
+308=>389,309=>278,310=>722,311=>500,312=>500,313=>611,314=>278,315=>611,316=>278,317=>611,
+318=>348,319=>611,320=>444,321=>611,322=>278,323=>722,324=>500,325=>722,326=>500,327=>722,
+328=>500,329=>556,330=>722,331=>500,332=>722,333=>500,334=>722,335=>500,336=>722,337=>500,
+340=>667,341=>333,342=>667,343=>333,344=>667,345=>333,346=>556,347=>389,348=>556,349=>389,
+350=>556,351=>389,354=>611,355=>278,356=>611,357=>278,358=>611,359=>278,360=>722,361=>500,
+362=>722,363=>500,364=>722,365=>500,366=>722,367=>500,368=>722,369=>500,370=>722,371=>500,
+372=>944,373=>722,374=>722,375=>500,377=>611,378=>444,379=>611,380=>444,383=>333,384=>500,
+385=>667,386=>646,387=>500,388=>646,389=>500,390=>667,391=>667,392=>444,393=>722,394=>722,
+395=>646,396=>500,397=>534,398=>611,399=>722,400=>518,401=>556,403=>722,404=>665,405=>729,
+406=>333,407=>333,408=>810,409=>500,410=>278,411=>480,412=>944,413=>722,414=>500,415=>726,
+416=>722,417=>500,418=>1043,419=>778,420=>556,421=>500,422=>667,423=>556,424=>389,425=>627,
+426=>592,427=>278,428=>611,429=>278,430=>611,431=>722,432=>500,433=>757,434=>722,435=>822,
+436=>667,437=>611,438=>444,439=>556,440=>556,441=>389,442=>500,443=>500,444=>615,445=>439,
+446=>421,447=>500,448=>200,449=>400,450=>600,451=>333,452=>1333,453=>1166,454=>944,455=>1000,
+456=>889,457=>556,458=>1111,459=>1000,460=>778,461=>722,462=>444,463=>333,464=>278,465=>722,
+466=>500,467=>722,468=>500,469=>722,470=>500,471=>722,472=>500,473=>722,474=>500,475=>722,
+476=>500,477=>444,478=>722,479=>444,480=>722,481=>444,482=>889,483=>667,484=>722,485=>500,
+486=>722,487=>500,488=>722,489=>500,490=>722,491=>500,492=>722,493=>500,494=>556,495=>389,
+496=>278,497=>1333,498=>1166,499=>944,500=>722,501=>500,502=>944,504=>722,505=>500,506=>722,
+507=>444,508=>889,509=>667,510=>722,511=>500,512=>722,513=>444,514=>722,515=>444,516=>611,
+517=>444,518=>611,519=>444,520=>333,521=>278,522=>333,523=>278,524=>722,525=>500,526=>722,
+527=>500,528=>667,529=>333,530=>667,531=>333,532=>722,533=>500,534=>722,535=>500,536=>556,
+537=>389,538=>611,539=>278,542=>722,543=>500,550=>722,551=>444,552=>611,553=>444,554=>722,
+555=>500,556=>722,557=>500,558=>722,559=>500,560=>722,561=>500,562=>722,563=>500,565=>597,
+567=>278,592=>444,593=>500,594=>507,595=>500,596=>444,597=>444,598=>500,599=>500,600=>444,
+601=>444,602=>722,603=>426,604=>426,605=>674,606=>454,607=>278,608=>500,609=>500,610=>484,
+611=>500,612=>582,613=>500,614=>500,615=>500,616=>278,617=>278,618=>278,619=>278,620=>278,
+621=>278,622=>556,623=>778,624=>778,625=>778,626=>500,627=>500,628=>500,629=>500,630=>668,
+631=>693,632=>640,633=>333,634=>333,635=>333,636=>333,637=>333,638=>333,639=>333,640=>487,
+641=>487,642=>389,643=>333,644=>500,645=>333,646=>500,647=>278,648=>278,649=>500,650=>517,
+651=>534,652=>500,653=>722,654=>500,655=>510,656=>444,657=>444,658=>389,659=>456,660=>444,
+661=>444,662=>444,663=>444,664=>500,665=>500,666=>454,667=>665,668=>565,669=>347,670=>500,
+671=>443,672=>500,673=>444,674=>444,675=>798,676=>795,677=>805,678=>554,679=>561,680=>678,
+681=>722,682=>554,683=>554,684=>500,685=>500,686=>611,687=>611,688=>300,689=>300,690=>278,
+691=>278,692=>278,693=>309,694=>306,695=>432,696=>310,697=>250,698=>408,699=>333,700=>500,
+701=>500,702=>333,703=>333,704=>258,705=>258,706=>374,707=>374,708=>383,709=>383,711=>333,
+712=>250,713=>333,714=>333,715=>333,716=>250,717=>333,718=>333,719=>333,720=>278,721=>278,
+722=>333,723=>333,724=>333,725=>333,726=>333,727=>333,728=>333,729=>333,730=>333,731=>333,
+733=>333,734=>336,735=>352,736=>311,737=>200,738=>243,739=>328,740=>300,741=>460,742=>460,
+743=>460,744=>460,745=>460,746=>477,747=>475,748=>339,749=>500,750=>444,751=>383,752=>383,
+753=>294,754=>294,755=>327,756=>261,757=>437,758=>437,759=>333,760=>278,761=>175,762=>175,
+763=>175,764=>175,765=>337,766=>337,767=>326,768=>0,769=>0,770=>0,771=>0,772=>0,
+773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,
+783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,
+793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,
+803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,
+813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,
+823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,
+833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,
+843=>0,844=>0,845=>0,846=>0,848=>0,849=>0,850=>0,851=>0,852=>0,853=>0,
+854=>0,855=>0,856=>0,857=>0,858=>0,859=>0,860=>0,861=>0,862=>0,863=>0,
+864=>0,865=>0,866=>0,867=>0,868=>0,869=>0,870=>0,871=>0,872=>0,873=>0,
+874=>0,875=>0,876=>0,877=>0,878=>0,879=>0,884=>199,885=>199,890=>332,894=>278,
+900=>267,901=>333,902=>722,903=>250,904=>800,905=>902,906=>507,908=>818,910=>861,911=>871,
+912=>267,913=>722,914=>667,915=>586,916=>660,917=>611,918=>611,919=>722,920=>726,921=>333,
+922=>722,923=>722,924=>889,925=>722,926=>628,927=>722,928=>722,929=>556,931=>627,932=>611,
+933=>696,934=>742,935=>722,936=>863,937=>757,938=>333,939=>656,940=>587,941=>426,942=>534,
+943=>267,944=>534,945=>587,946=>534,947=>480,948=>534,949=>426,950=>480,951=>534,952=>534,
+953=>267,954=>527,955=>480,956=>534,957=>480,958=>480,959=>500,960=>587,961=>534,962=>439,
+963=>534,964=>426,965=>534,966=>640,967=>480,968=>693,969=>693,970=>267,971=>534,972=>500,
+973=>534,974=>693,976=>534,977=>587,978=>620,979=>809,980=>620,981=>640,982=>684,983=>534,
+986=>510,987=>426,988=>611,989=>445,990=>613,991=>613,992=>627,993=>526,1008=>534,1009=>534,
+1010=>485,1013=>361,1024=>611,1025=>667,1026=>768,1027=>556,1028=>667,1029=>556,1030=>333,1031=>333,
+1032=>389,1033=>969,1034=>980,1035=>698,1036=>722,1037=>722,1038=>746,1039=>722,1040=>771,1041=>646,
+1042=>667,1043=>626,1044=>747,1045=>667,1046=>997,1047=>532,1048=>824,1049=>824,1050=>750,1051=>750,
+1052=>990,1053=>823,1054=>771,1055=>818,1056=>604,1057=>719,1058=>667,1059=>731,1060=>869,1061=>771,
+1062=>823,1063=>747,1064=>1122,1065=>1122,1066=>757,1067=>981,1068=>646,1069=>698,1070=>1104,1071=>749,
+1072=>500,1073=>552,1074=>500,1075=>443,1076=>531,1077=>438,1078=>716,1079=>417,1080=>527,1081=>527,
+1082=>525,1083=>530,1084=>666,1085=>565,1086=>552,1087=>565,1088=>552,1089=>438,1090=>476,1091=>500,
+1092=>667,1093=>500,1094=>497,1095=>531,1096=>810,1097=>810,1098=>556,1099=>719,1100=>491,1101=>445,
+1102=>783,1103=>487,1104=>444,1105=>438,1106=>548,1107=>418,1108=>444,1109=>389,1110=>278,1111=>278,
+1112=>278,1113=>714,1114=>706,1115=>548,1116=>525,1117=>527,1118=>500,1119=>500,1120=>1056,1121=>693,
+1122=>654,1123=>567,1124=>969,1125=>686,1126=>730,1127=>502,1128=>1059,1129=>765,1130=>997,1131=>716,
+1132=>1295,1133=>963,1134=>532,1135=>473,1136=>863,1137=>693,1138=>726,1139=>500,1140=>801,1141=>480,
+1142=>801,1143=>480,1144=>1356,1145=>969,1146=>771,1147=>500,1148=>1056,1149=>693,1150=>1056,1151=>693,
+1152=>754,1153=>497,1154=>424,1155=>369,1156=>689,1157=>445,1158=>445,1160=>1080,1161=>1076,1162=>824,
+1163=>565,1164=>556,1165=>504,1166=>556,1167=>500,1168=>556,1169=>418,1170=>556,1171=>418,1172=>573,
+1173=>468,1174=>1053,1175=>766,1176=>556,1177=>389,1178=>722,1179=>500,1180=>722,1181=>500,1182=>722,
+1183=>500,1184=>852,1185=>671,1186=>722,1187=>500,1188=>984,1189=>660,1190=>1014,1191=>714,1192=>722,
+1193=>542,1194=>667,1195=>444,1196=>611,1197=>484,1198=>722,1199=>500,1200=>722,1201=>500,1202=>722,
+1203=>500,1204=>967,1205=>723,1206=>722,1207=>500,1208=>722,1209=>500,1210=>722,1211=>500,1212=>866,
+1213=>561,1214=>866,1215=>561,1216=>333,1217=>997,1218=>716,1219=>722,1220=>500,1221=>750,1222=>530,
+1223=>722,1224=>500,1225=>823,1226=>565,1227=>722,1228=>500,1229=>990,1230=>666,1231=>500,1232=>722,
+1233=>500,1234=>722,1235=>500,1236=>889,1237=>667,1238=>611,1239=>438,1240=>722,1241=>444,1242=>722,
+1243=>444,1244=>997,1245=>716,1246=>532,1247=>417,1248=>556,1249=>389,1250=>824,1251=>527,1252=>824,
+1253=>527,1254=>771,1255=>552,1256=>722,1257=>500,1258=>722,1259=>500,1260=>698,1261=>445,1262=>731,
+1263=>500,1264=>731,1265=>500,1266=>731,1267=>500,1268=>747,1269=>531,1272=>981,1273=>719,1280=>556,
+1281=>500,1282=>900,1283=>819,1284=>605,1285=>515,1286=>841,1287=>566,1288=>974,1289=>530,1290=>1035,
+1291=>565,1292=>722,1293=>444,1294=>611,1295=>476,1457=>0,1458=>0,1460=>0,1461=>0,1462=>0,
+1463=>0,1464=>0,1465=>0,1467=>0,1468=>0,1472=>126,1475=>418,1488=>537,1489=>537,1490=>350,
+1491=>537,1492=>537,1493=>350,1494=>350,1495=>537,1496=>537,1497=>350,1498=>537,1499=>537,1500=>537,
+1501=>537,1502=>537,1503=>350,1504=>350,1505=>537,1506=>537,1507=>537,1508=>537,1509=>537,1510=>537,
+1511=>537,1512=>537,1513=>537,1514=>537,1520=>537,1521=>537,1522=>537,1523=>396,1524=>396,1548=>226,
+1563=>250,1567=>473,1569=>350,1570=>321,1571=>249,1572=>399,1573=>249,1574=>776,1575=>249,1576=>950,
+1577=>424,1578=>925,1579=>924,1580=>738,1581=>748,1582=>701,1583=>397,1584=>399,1585=>328,1586=>331,
+1587=>951,1588=>949,1589=>949,1590=>949,1591=>557,1592=>550,1593=>625,1594=>602,1601=>801,1602=>696,
+1603=>757,1604=>655,1605=>549,1606=>651,1607=>424,1608=>399,1609=>776,1610=>776,1611=>0,1613=>0,
+1614=>0,1615=>0,1616=>0,1617=>0,1618=>0,1619=>0,1620=>0,1621=>0,1632=>297,1633=>254,
+1634=>427,1635=>497,1636=>440,1637=>465,1638=>466,1639=>421,1640=>459,1641=>424,1643=>212,1652=>300,
+1662=>926,1670=>750,1688=>338,1711=>874,1740=>776,1748=>176,1920=>395,1921=>440,1922=>511,1923=>478,
+1924=>424,1925=>380,1926=>394,1927=>406,1928=>416,1929=>414,1930=>412,1931=>472,1932=>439,1933=>452,
+1934=>414,1935=>503,1936=>773,1937=>387,1938=>419,1939=>522,1940=>412,1941=>394,1942=>388,1943=>456,
+1944=>504,1945=>404,1946=>393,1947=>436,1948=>475,1949=>779,1950=>775,1951=>846,1952=>490,1953=>444,
+1954=>414,1955=>487,1956=>404,1957=>427,1958=>32,1959=>32,1960=>39,1961=>40,1962=>39,1963=>40,
+1964=>40,1965=>40,1966=>40,1967=>40,1968=>0,2305=>415,2306=>398,2307=>398,2309=>862,2310=>1042,
+2311=>553,2312=>553,2313=>597,2314=>848,2315=>967,2316=>828,2317=>654,2319=>654,2321=>1042,2323=>1042,
+2324=>1042,2325=>743,2326=>798,2327=>694,2328=>694,2329=>730,2330=>734,2331=>888,2332=>814,2333=>834,
+2334=>734,2335=>629,2336=>629,2337=>653,2338=>609,2339=>694,2340=>654,2341=>694,2342=>588,2343=>694,
+2344=>654,2345=>654,2346=>615,2347=>788,2348=>621,2349=>694,2350=>694,2351=>694,2352=>575,2353=>575,
+2354=>787,2355=>848,2356=>848,2357=>621,2359=>615,2360=>734,2361=>609,2364=>398,2365=>569,2366=>341,
+2367=>341,2368=>341,2369=>0,2370=>0,2371=>0,2372=>0,2373=>415,2375=>615,2376=>615,2377=>341,
+2379=>341,2380=>341,2381=>0,2384=>1047,2392=>743,2393=>798,2394=>694,2395=>814,2396=>653,2397=>609,
+2398=>788,2400=>967,2401=>828,2402=>0,2403=>0,2404=>398,2405=>478,2406=>455,2407=>420,2408=>569,
+2409=>509,2410=>702,2411=>629,2412=>569,2413=>702,2414=>609,2415=>609,2416=>626,2433=>0,2434=>300,
+2435=>312,2437=>594,2438=>776,2439=>469,2440=>513,2441=>535,2442=>561,2443=>604,2444=>481,2447=>580,
+2448=>604,2451=>540,2452=>620,2453=>570,2454=>485,2455=>484,2456=>471,2457=>457,2458=>408,2459=>452,
+2460=>591,2461=>551,2462=>771,2463=>414,2464=>404,2465=>522,2466=>415,2467=>450,2468=>551,2469=>477,
+2470=>478,2471=>449,2472=>448,2474=>535,2475=>611,2476=>443,2477=>534,2478=>492,2479=>474,2480=>442,
+2482=>542,2486=>507,2487=>467,2488=>523,2489=>419,2492=>0,2493=>419,2494=>202,2495=>189,2496=>202,
+2497=>0,2498=>0,2499=>0,2500=>0,2503=>294,2504=>289,2507=>774,2508=>825,2509=>0,2510=>356,
+2519=>219,2524=>523,2525=>420,2527=>469,2528=>604,2529=>481,2530=>0,2531=>0,2534=>500,2535=>437,
+2536=>479,2537=>507,2538=>497,2539=>500,2540=>482,2541=>503,2542=>517,2543=>481,2544=>443,2545=>443,
+2546=>429,2547=>383,2548=>432,2549=>478,2550=>539,2551=>158,2552=>365,2553=>280,2554=>357,2565=>744,
+2566=>914,2567=>690,2568=>670,2569=>596,2570=>596,2575=>498,2576=>744,2579=>596,2580=>744,2581=>550,
+2582=>534,2583=>618,2584=>690,2585=>546,2586=>518,2587=>592,2588=>492,2589=>574,2590=>514,2591=>526,
+2592=>556,2593=>524,2594=>528,2595=>574,2596=>484,2597=>534,2598=>504,2599=>534,2600=>538,2602=>534,
+2603=>506,2604=>562,2605=>516,2606=>546,2607=>670,2608=>538,2610=>726,2611=>726,2613=>514,2614=>546,
+2616=>546,2617=>517,2620=>286,2622=>172,2623=>190,2624=>190,2625=>1,2626=>1,2631=>1,2632=>1,
+2635=>1,2636=>1,2637=>1,2649=>534,2650=>618,2651=>492,2652=>484,2654=>506,2662=>616,2663=>480,
+2664=>560,2665=>480,2666=>468,2667=>492,2668=>514,2669=>538,2670=>572,2671=>560,2672=>1,2674=>498,
+2675=>596,2676=>900,2946=>443,2947=>791,2949=>1167,2950=>1375,2951=>1088,2952=>758,2953=>631,2954=>1441,
+2958=>773,2959=>773,2960=>887,2962=>966,2963=>966,2964=>2019,2965=>869,2969=>884,2970=>779,2972=>887,
+2974=>1117,2975=>756,2979=>1578,2980=>883,2984=>719,2985=>1168,2986=>602,2990=>802,2991=>852,2992=>580,
+2993=>703,2994=>832,2995=>1032,2996=>827,2997=>939,2999=>1109,3000=>1114,3001=>1365,3006=>580,3007=>226,
+3008=>376,3009=>518,3010=>771,3014=>885,3015=>640,3016=>1076,3018=>1482,3019=>1265,3020=>1947,3021=>234,
+3031=>1032,3074=>330,3075=>225,3077=>450,3078=>457,3079=>397,3080=>726,3081=>439,3082=>686,3083=>824,
+3084=>539,3086=>395,3087=>395,3088=>423,3090=>447,3091=>442,3092=>604,3093=>370,3094=>452,3095=>398,
+3096=>634,3097=>445,3098=>433,3099=>433,3100=>445,3101=>390,3102=>592,3103=>453,3104=>388,3105=>440,
+3106=>439,3107=>478,3108=>420,3109=>420,3110=>421,3111=>420,3112=>413,3114=>424,3115=>427,3116=>415,
+3117=>422,3120=>396,3122=>419,3330=>417,3331=>221,3333=>1055,3334=>1193,3335=>792,3336=>1467,3337=>570,
+3338=>1243,3339=>676,3340=>898,3342=>1008,3343=>1004,3344=>1538,3346=>585,3347=>981,3348=>1254,3349=>775,
+3350=>798,3351=>692,3352=>1095,3353=>809,3354=>726,3355=>963,3356=>703,3357=>1244,3358=>1104,3359=>462,
+3360=>531,3361=>983,3362=>1027,3363=>1102,3364=>780,3365=>731,3366=>485,3367=>738,3368=>747,3370=>780,
+3371=>961,3372=>1023,3373=>500,3374=>510,3375=>792,3376=>528,3377=>511,3378=>713,3379=>553,3380=>516,
+3381=>715,3382=>785,3383=>920,3384=>980,3385=>977,3390=>403,3391=>283,3392=>323,3393=>275,3394=>258,
+3395=>378,3398=>543,3399=>478,3400=>1086,3402=>1127,3403=>1038,3404=>676,3405=>89,3415=>676,3424=>676,
+3425=>1008,3430=>675,3431=>668,3432=>673,3433=>737,3434=>721,3435=>702,3436=>702,3437=>687,3438=>675,
+3439=>683,3440=>375,3458=>468,3459=>318,3461=>660,3465=>778,3466=>807,3467=>830,3473=>838,3476=>860,
+3481=>1000,3482=>973,3483=>860,3484=>997,3486=>740,3488=>838,3489=>886,3490=>886,3492=>1295,3493=>1295,
+3495=>838,3496=>860,3497=>860,3498=>860,3499=>1403,3501=>973,3502=>838,3503=>660,3504=>860,3505=>973,
+3507=>660,3508=>886,3509=>838,3510=>860,3511=>973,3512=>838,3513=>860,3514=>886,3515=>807,3517=>830,
+3520=>838,3521=>973,3522=>886,3523=>886,3524=>973,3525=>830,3526=>973,3530=>0,3535=>432,3536=>380,
+3537=>420,3538=>0,3539=>0,3540=>0,3542=>0,3544=>501,3545=>652,3551=>648,3585=>581,3586=>529,
+3587=>596,3588=>581,3589=>594,3590=>649,3591=>494,3592=>561,3593=>690,3594=>529,3595=>596,3596=>792,
+3597=>793,3598=>632,3599=>632,3600=>562,3601=>707,3602=>795,3603=>891,3604=>580,3605=>591,3606=>581,
+3607=>642,3608=>555,3609=>689,3610=>615,3611=>615,3612=>600,3613=>600,3614=>671,3615=>671,3616=>632,
+3617=>591,3618=>536,3619=>511,3620=>581,3621=>561,3622=>632,3623=>559,3624=>593,3625=>701,3626=>573,
+3627=>643,3628=>773,3629=>561,3630=>561,3631=>506,3632=>501,3633=>0,3634=>466,3635=>467,3636=>0,
+3637=>0,3638=>0,3639=>0,3640=>0,3641=>0,3642=>0,3647=>667,3648=>329,3649=>582,3650=>406,
+3651=>406,3652=>406,3653=>267,3654=>525,3655=>0,3656=>0,3657=>0,3658=>0,3659=>0,3660=>0,
+3661=>0,3662=>0,3663=>707,3664=>568,3665=>568,3666=>615,3667=>639,3668=>679,3669=>680,3670=>515,
+3671=>767,3672=>643,3673=>608,3674=>683,3675=>1485,4256=>453,4257=>448,4258=>546,4259=>619,4260=>478,
+4261=>481,4262=>459,4263=>707,4264=>467,4265=>471,4266=>842,4267=>464,4268=>443,4269=>707,4270=>460,
+4271=>465,4272=>686,4273=>440,4274=>550,4275=>561,4276=>580,4277=>467,4278=>630,4279=>466,4280=>517,
+4281=>456,4282=>502,4283=>464,4284=>534,4285=>440,4286=>443,4287=>522,4288=>460,4289=>463,4290=>536,
+4291=>455,4292=>468,4293=>449,4304=>454,4305=>452,4306=>544,4307=>629,4308=>451,4309=>452,4310=>452,
+4311=>702,4312=>451,4313=>452,4314=>820,4315=>451,4316=>453,4317=>695,4318=>449,4319=>448,4320=>694,
+4321=>501,4322=>544,4323=>517,4324=>560,4325=>450,4326=>627,4327=>452,4328=>491,4329=>452,4330=>485,
+4331=>452,4332=>485,4333=>443,4334=>500,4335=>582,4336=>455,4337=>451,4338=>480,4339=>414,4340=>453,
+4341=>418,4608=>583,4609=>770,4610=>560,4611=>525,4612=>525,4613=>583,4614=>758,4616=>598,4617=>787,
+4618=>817,4619=>583,4620=>758,4621=>612,4622=>875,4623=>817,4624=>817,4625=>1050,4626=>1050,4627=>817,
+4628=>1050,4629=>817,4630=>787,4631=>1021,4632=>933,4633=>1137,4634=>1067,4635=>980,4636=>1065,4637=>962,
+4638=>962,4639=>1097,4640=>831,4641=>1021,4642=>851,4643=>735,4644=>875,4645=>968,4646=>817,4647=>881,
+4648=>583,4649=>642,4650=>583,4651=>758,4652=>700,4653=>583,4654=>700,4655=>758,4656=>583,4657=>787,
+4658=>787,4659=>583,4660=>729,4661=>583,4662=>583,4663=>817,4664=>642,4665=>817,4666=>846,4667=>642,
+4668=>758,4669=>744,4670=>642,4671=>817,4672=>700,4673=>700,4674=>700,4675=>758,4676=>700,4677=>700,
+4678=>729,4680=>846,4682=>1079,4683=>700,4684=>700,4685=>1021,4688=>700,4689=>700,4690=>700,4691=>758,
+4692=>700,4693=>758,4694=>729,4696=>846,4698=>1079,4699=>700,4700=>700,4701=>1021,4704=>525,4705=>758,
+4706=>758,4707=>525,4708=>700,4709=>773,4710=>525,4711=>787,4712=>525,4713=>758,4714=>758,4715=>525,
+4716=>700,4717=>773,4718=>525,4719=>525,4720=>729,4721=>729,4722=>729,4723=>802,4724=>729,4725=>729,
+4726=>758,4727=>729,4728=>758,4729=>758,4730=>758,4731=>817,4732=>758,4733=>817,4734=>758,4735=>758,
+4736=>612,4737=>817,4738=>817,4739=>612,4740=>787,4741=>583,4742=>875,4744=>962,4746=>992,4747=>700,
+4748=>758,4749=>904,4752=>408,4753=>583,4754=>525,4755=>554,4756=>481,4757=>554,4758=>642,4759=>671,
+4760=>700,4761=>758,4762=>729,4763=>700,4764=>671,4765=>700,4766=>758,4767=>700,4768=>583,4769=>735,
+4770=>822,4771=>583,4772=>793,4773=>583,4774=>583,4775=>694,4776=>554,4777=>729,4778=>773,4779=>554,
+4780=>700,4781=>554,4782=>554,4784=>992,4786=>1021,4787=>671,4788=>787,4789=>904,4792=>729,4793=>904,
+4794=>948,4795=>729,4796=>875,4797=>729,4798=>729,4800=>1137,4801=>1000,4802=>1167,4803=>758,4804=>875,
+4805=>1108,4808=>758,4809=>875,4810=>700,4811=>700,4812=>700,4813=>992,4814=>758,4816=>554,4817=>787,
+4818=>758,4819=>583,4820=>758,4821=>496,4822=>612,4824=>525,4825=>700,4826=>700,4827=>525,4828=>685,
+4829=>729,4830=>510,4831=>729,4832=>962,4833=>962,4834=>962,4835=>962,4836=>962,4837=>1021,4838=>962,
+4839=>962,4840=>467,4841=>525,4842=>671,4843=>612,4844=>612,4845=>671,4846=>671,4848=>612,4849=>875,
+4850=>817,4851=>642,4852=>729,4853=>729,4854=>758,4855=>817,4856=>700,4857=>758,4858=>715,4859=>700,
+4860=>700,4861=>787,4862=>758,4863=>700,4864=>700,4865=>758,4866=>715,4867=>700,4868=>700,4869=>787,
+4870=>758,4871=>700,4872=>467,4873=>671,4874=>671,4875=>612,4876=>612,4877=>583,4878=>525,4880=>846,
+4882=>904,4883=>554,4884=>700,4885=>817,4888=>525,4889=>729,4890=>729,4891=>612,4892=>671,4893=>583,
+4894=>525,4896=>817,4897=>1021,4898=>1021,4899=>817,4900=>992,4901=>758,4902=>817,4903=>1021,4904=>1079,
+4905=>1137,4906=>1137,4907=>1050,4908=>1312,4909=>1050,4910=>1050,4911=>1123,4912=>647,4913=>793,4914=>822,
+4915=>647,4916=>793,4917=>764,4918=>583,4919=>647,4920=>583,4921=>793,4922=>822,4923=>583,4924=>793,
+4925=>764,4926=>583,4927=>793,4928=>540,4929=>758,4930=>583,4931=>467,4932=>583,4933=>481,4934=>612,
+4936=>758,4937=>700,4938=>758,4939=>700,4940=>831,4941=>671,4942=>758,4943=>700,4944=>758,4945=>758,
+4946=>758,4947=>817,4948=>758,4949=>758,4950=>817,4951=>758,4952=>642,4953=>980,4954=>758,4961=>233,
+4962=>583,4963=>408,4964=>408,4965=>525,4966=>525,4967=>233,4968=>700,4969=>671,4970=>612,4971=>642,
+4972=>642,4973=>642,4974=>583,4975=>700,4976=>758,4977=>642,4978=>583,4979=>700,4980=>729,4981=>720,
+4982=>583,4983=>758,4984=>700,4985=>904,4986=>612,4987=>583,4988=>875,7424=>484,7427=>447,7429=>484,
+7431=>425,7435=>295,7436=>542,7437=>409,7438=>616,7451=>431,7452=>509,7456=>500,7457=>722,7458=>444,
+7465=>408,7553=>500,7556=>525,7557=>278,7559=>507,7565=>500,7680=>722,7681=>444,7682=>667,7683=>500,
+7684=>667,7685=>500,7686=>667,7687=>500,7688=>667,7689=>444,7690=>722,7691=>500,7692=>722,7693=>500,
+7694=>722,7695=>500,7696=>722,7697=>500,7698=>722,7699=>500,7700=>611,7701=>444,7702=>611,7703=>444,
+7704=>611,7705=>444,7706=>611,7707=>444,7708=>611,7709=>444,7710=>556,7711=>333,7712=>722,7713=>500,
+7714=>722,7715=>500,7716=>722,7717=>500,7718=>722,7719=>500,7720=>722,7721=>500,7722=>722,7723=>500,
+7724=>333,7725=>278,7726=>333,7727=>278,7728=>722,7729=>500,7730=>722,7731=>500,7732=>722,7733=>500,
+7734=>611,7735=>278,7736=>611,7737=>278,7738=>611,7739=>278,7740=>611,7741=>278,7742=>889,7743=>778,
+7744=>889,7745=>778,7746=>889,7747=>778,7748=>722,7749=>500,7750=>722,7751=>500,7752=>722,7753=>500,
+7754=>722,7755=>500,7756=>722,7757=>500,7758=>722,7759=>500,7760=>722,7761=>500,7762=>722,7763=>500,
+7764=>556,7765=>500,7766=>556,7767=>500,7768=>667,7769=>333,7770=>667,7771=>333,7772=>667,7773=>333,
+7774=>667,7775=>333,7776=>556,7777=>389,7778=>556,7779=>389,7780=>556,7781=>389,7782=>556,7783=>389,
+7784=>556,7785=>389,7786=>611,7787=>278,7788=>611,7789=>278,7790=>611,7791=>278,7792=>611,7793=>278,
+7794=>722,7795=>500,7796=>722,7797=>500,7798=>722,7799=>500,7800=>722,7801=>500,7802=>722,7803=>500,
+7804=>722,7805=>500,7806=>722,7807=>500,7808=>944,7809=>722,7810=>944,7811=>722,7812=>944,7813=>722,
+7814=>944,7815=>722,7816=>944,7817=>722,7818=>722,7819=>500,7820=>722,7821=>500,7822=>722,7823=>500,
+7824=>611,7825=>444,7826=>611,7827=>444,7828=>611,7829=>444,7830=>500,7831=>278,7832=>722,7833=>500,
+7834=>444,7835=>333,7840=>722,7841=>444,7842=>807,7843=>529,7844=>722,7845=>444,7846=>722,7847=>444,
+7848=>807,7849=>529,7850=>722,7851=>444,7852=>722,7853=>444,7854=>722,7855=>444,7856=>722,7857=>444,
+7858=>807,7859=>529,7860=>722,7861=>444,7862=>722,7863=>444,7864=>611,7865=>444,7866=>696,7867=>529,
+7868=>611,7869=>444,7870=>611,7871=>444,7872=>611,7873=>444,7874=>696,7875=>529,7876=>611,7877=>444,
+7878=>611,7879=>444,7880=>333,7881=>278,7882=>333,7883=>278,7884=>722,7885=>500,7886=>807,7887=>585,
+7888=>722,7889=>500,7890=>722,7891=>500,7892=>807,7893=>585,7894=>722,7895=>500,7896=>722,7897=>500,
+7898=>722,7899=>500,7900=>722,7901=>500,7902=>807,7903=>585,7904=>722,7905=>500,7906=>722,7907=>500,
+7908=>722,7909=>500,7910=>807,7911=>585,7912=>722,7913=>500,7914=>722,7915=>500,7916=>807,7917=>585,
+7918=>722,7919=>500,7920=>722,7921=>500,7922=>722,7923=>500,7924=>722,7925=>500,7926=>807,7927=>585,
+7928=>722,7929=>500,7936=>587,7937=>587,7938=>587,7939=>587,7940=>587,7941=>587,7942=>587,7943=>587,
+7944=>722,7945=>722,7946=>833,7947=>833,7948=>833,7949=>833,7950=>833,7951=>833,7952=>426,7953=>426,
+7954=>426,7955=>426,7956=>426,7957=>426,7960=>889,7961=>889,7962=>944,7963=>944,7964=>944,7965=>944,
+7968=>534,7969=>534,7970=>534,7971=>534,7972=>534,7973=>534,7974=>534,7975=>534,7976=>889,7977=>889,
+7978=>1000,7979=>1000,7980=>1000,7981=>1000,7982=>1000,7983=>1000,7984=>267,7985=>267,7986=>267,7987=>267,
+7988=>267,7989=>267,7990=>267,7991=>267,7992=>556,7993=>556,7994=>696,7995=>696,7996=>696,7997=>696,
+7998=>696,7999=>696,8000=>500,8001=>500,8002=>500,8003=>500,8004=>500,8005=>500,8008=>889,8009=>889,
+8010=>944,8011=>1000,8012=>944,8013=>1000,8016=>534,8017=>534,8018=>534,8019=>534,8020=>534,8021=>534,
+8022=>534,8023=>534,8025=>889,8027=>1000,8029=>1000,8031=>1000,8032=>693,8033=>693,8034=>693,8035=>693,
+8036=>693,8037=>693,8038=>693,8039=>693,8040=>944,8041=>944,8042=>1000,8043=>1000,8044=>1000,8045=>1000,
+8046=>1000,8047=>1000,8048=>587,8049=>587,8050=>426,8051=>426,8052=>534,8053=>534,8054=>267,8055=>267,
+8056=>500,8057=>500,8058=>534,8059=>534,8060=>693,8061=>693,8064=>587,8065=>587,8066=>587,8067=>587,
+8068=>587,8069=>587,8070=>587,8071=>587,8072=>944,8073=>944,8074=>1000,8075=>1000,8076=>1000,8077=>1000,
+8078=>1000,8079=>1000,8080=>534,8081=>534,8082=>534,8083=>534,8084=>534,8085=>534,8086=>534,8087=>534,
+8088=>1116,8089=>1116,8090=>1227,8091=>1227,8092=>1227,8093=>1227,8094=>1227,8095=>1227,8096=>693,8097=>693,
+8098=>693,8099=>693,8100=>693,8101=>693,8102=>693,8103=>693,8104=>1171,8105=>1171,8106=>1227,8107=>1227,
+8108=>1227,8109=>1227,8110=>1227,8111=>1227,8112=>587,8113=>587,8114=>587,8115=>587,8116=>587,8118=>587,
+8119=>587,8120=>722,8121=>722,8122=>722,8123=>722,8124=>944,8125=>250,8126=>332,8127=>500,8128=>500,
+8129=>534,8130=>534,8131=>534,8132=>534,8134=>534,8135=>534,8136=>722,8137=>722,8138=>889,8139=>889,
+8140=>949,8141=>500,8142=>500,8143=>500,8144=>267,8145=>267,8146=>267,8147=>267,8150=>267,8151=>267,
+8152=>333,8153=>333,8154=>500,8155=>500,8157=>500,8158=>500,8159=>500,8160=>534,8161=>534,8162=>534,
+8163=>534,8164=>534,8165=>534,8166=>534,8167=>534,8168=>696,8169=>696,8170=>889,8171=>889,8172=>778,
+8173=>534,8174=>534,8175=>500,8178=>693,8179=>693,8180=>693,8182=>693,8183=>693,8184=>889,8185=>889,
+8186=>889,8187=>889,8188=>1000,8189=>500,8190=>500,8193=>1000,8194=>500,8195=>1000,8196=>333,8197=>250,
+8198=>167,8201=>200,8203=>0,8204=>0,8205=>0,8208=>333,8209=>333,8210=>500,8213=>1000,8215=>500,
+8219=>333,8223=>444,8227=>350,8241=>1363,8242=>247,8243=>411,8244=>611,8245=>220,8246=>440,8247=>660,
+8248=>469,8251=>629,8252=>666,8253=>444,8254=>500,8255=>953,8256=>953,8257=>314,8258=>931,8259=>333,
+8260=>167,8261=>383,8262=>383,8263=>888,8264=>777,8265=>777,8266=>500,8267=>453,8304=>300,8305=>300,
+8308=>300,8309=>300,8310=>300,8311=>300,8312=>300,8313=>300,8314=>300,8315=>300,8316=>300,8319=>300,
+8320=>300,8321=>300,8322=>300,8323=>300,8324=>300,8325=>300,8326=>300,8327=>300,8328=>300,8329=>300,
+8330=>300,8331=>300,8332=>300,8352=>698,8353=>667,8354=>667,8355=>556,8356=>500,8357=>778,8358=>722,
+8359=>630,8360=>1056,8361=>944,8367=>1340,8370=>611,8413=>0,8416=>0,8450=>667,8451=>954,8453=>1000,
+8457=>822,8458=>500,8459=>969,8460=>663,8461=>822,8462=>500,8463=>500,8464=>809,8465=>638,8466=>874,
+8467=>417,8469=>822,8470=>954,8471=>760,8472=>832,8473=>656,8474=>722,8475=>850,8476=>795,8477=>767,
+8478=>667,8479=>667,8480=>879,8483=>722,8484=>731,8486=>757,8487=>757,8488=>663,8490=>722,8491=>722,
+8492=>908,8493=>614,8494=>533,8496=>562,8497=>895,8498=>556,8499=>1080,8501=>558,8502=>642,8503=>315,
+8504=>532,8505=>417,8531=>750,8532=>750,8533=>750,8534=>750,8535=>750,8536=>750,8537=>750,8538=>750,
+8539=>750,8540=>750,8541=>750,8542=>750,8543=>750,8544=>333,8545=>630,8546=>927,8547=>1019,8548=>722,
+8549=>1019,8550=>1316,8551=>1629,8552=>1019,8553=>722,8554=>1019,8555=>1316,8556=>611,8557=>667,8558=>722,
+8559=>889,8560=>278,8561=>556,8562=>834,8563=>778,8564=>500,8565=>778,8566=>1056,8567=>1334,8568=>778,
+8569=>500,8570=>778,8571=>1056,8572=>278,8573=>444,8574=>500,8575=>778,8592=>964,8593=>472,8594=>964,
+8595=>500,8596=>964,8597=>499,8598=>964,8599=>964,8600=>964,8601=>964,8602=>964,8603=>964,8604=>1009,
+8605=>1009,8606=>964,8607=>500,8608=>964,8609=>499,8610=>1093,8611=>1093,8612=>1093,8613=>500,8614=>1093,
+8615=>500,8616=>500,8617=>964,8618=>964,8619=>964,8620=>964,8621=>1151,8622=>964,8624=>482,8625=>482,
+8626=>482,8627=>482,8628=>658,8629=>658,8630=>1069,8631=>1069,8634=>939,8635=>939,8636=>964,8637=>964,
+8638=>499,8639=>499,8640=>964,8641=>964,8642=>499,8643=>499,8644=>964,8645=>840,8646=>964,8647=>964,
+8648=>840,8649=>964,8650=>840,8651=>964,8652=>964,8653=>964,8654=>964,8655=>964,8656=>964,8657=>550,
+8658=>964,8659=>550,8660=>964,8661=>550,8662=>1047,8663=>1047,8664=>1047,8665=>1047,8666=>964,8667=>964,
+8668=>1092,8669=>1092,8672=>964,8674=>964,8704=>587,8705=>716,8706=>494,8707=>587,8708=>587,8709=>746,
+8710=>612,8711=>713,8712=>536,8713=>536,8714=>439,8715=>536,8716=>536,8717=>439,8719=>823,8720=>823,
+8721=>713,8722=>564,8723=>564,8724=>564,8725=>636,8726=>636,8727=>471,8728=>497,8729=>497,8730=>549,
+8731=>549,8732=>549,8733=>636,8734=>853,8735=>509,8736=>509,8737=>509,8738=>509,8739=>200,8740=>250,
+8741=>320,8742=>320,8743=>654,8744=>654,8745=>654,8746=>654,8747=>416,8748=>750,8749=>1083,8750=>722,
+8751=>750,8756=>565,8757=>568,8758=>250,8759=>629,8760=>564,8761=>758,8762=>564,8763=>636,8764=>636,
+8765=>636,8768=>264,8769=>636,8770=>636,8771=>636,8772=>636,8773=>636,8774=>636,8775=>636,8776=>636,
+8777=>636,8778=>636,8779=>636,8781=>636,8782=>636,8783=>636,8784=>564,8785=>564,8786=>564,8787=>564,
+8788=>735,8789=>755,8790=>564,8791=>564,8793=>564,8794=>564,8796=>564,8800=>564,8801=>636,8802=>636,
+8803=>636,8804=>636,8805=>636,8806=>636,8807=>636,8808=>636,8809=>636,8810=>918,8811=>918,8812=>410,
+8813=>636,8814=>636,8815=>636,8816=>636,8817=>636,8818=>636,8819=>636,8820=>636,8821=>636,8822=>636,
+8823=>636,8824=>636,8825=>636,8826=>636,8827=>636,8828=>636,8829=>636,8830=>636,8831=>636,8832=>636,
+8833=>636,8834=>636,8835=>636,8836=>636,8837=>636,8838=>636,8839=>636,8840=>636,8841=>636,8842=>636,
+8843=>636,8844=>654,8845=>654,8846=>654,8847=>636,8848=>636,8849=>636,8850=>636,8851=>654,8852=>654,
+8853=>636,8854=>636,8855=>636,8856=>636,8857=>636,8858=>636,8859=>636,8860=>636,8861=>636,8862=>636,
+8863=>636,8864=>636,8865=>636,8866=>600,8867=>600,8868=>712,8869=>712,8870=>466,8871=>466,8873=>588,
+8874=>710,8875=>588,8876=>466,8877=>466,8878=>588,8879=>588,8882=>636,8883=>636,8884=>636,8885=>636,
+8886=>1296,8887=>1296,8888=>966,8890=>626,8891=>654,8892=>654,8893=>654,8896=>744,8897=>744,8898=>764,
+8899=>764,8900=>512,8901=>250,8902=>471,8903=>629,8904=>722,8907=>816,8908=>816,8909=>636,8910=>636,
+8911=>636,8912=>636,8913=>636,8914=>654,8915=>654,8916=>654,8917=>636,8918=>636,8919=>636,8920=>1215,
+8921=>1215,8922=>636,8923=>636,8924=>636,8925=>636,8926=>636,8927=>636,8928=>636,8929=>636,8930=>636,
+8931=>636,8932=>636,8933=>636,8934=>636,8935=>636,8936=>636,8937=>636,8938=>636,8939=>636,8940=>636,
+8941=>636,8942=>250,8943=>1000,8944=>1000,8945=>1000,8960=>780,8961=>444,8968=>474,8969=>474,8970=>474,
+8971=>474,8976=>564,8986=>805,8992=>686,8993=>686,8994=>658,8995=>658,9001=>329,9002=>329,9031=>777,
+9032=>777,9040=>777,9047=>777,9054=>777,9115=>384,9116=>384,9117=>384,9118=>384,9119=>384,9120=>384,
+9121=>388,9122=>388,9123=>388,9124=>388,9125=>388,9126=>388,9127=>494,9128=>494,9129=>494,9130=>494,
+9131=>494,9132=>494,9133=>494,9134=>686,9251=>500,9312=>788,9313=>788,9314=>788,9315=>788,9316=>788,
+9317=>788,9318=>788,9319=>788,9320=>788,9321=>788,9472=>889,9473=>889,9474=>889,9475=>889,9476=>889,
+9477=>889,9478=>889,9479=>889,9480=>889,9481=>889,9482=>889,9483=>889,9484=>889,9485=>889,9486=>889,
+9487=>889,9488=>889,9489=>889,9490=>889,9491=>889,9492=>889,9493=>889,9494=>889,9495=>889,9496=>889,
+9497=>889,9498=>889,9499=>889,9500=>889,9501=>889,9502=>889,9503=>889,9504=>889,9505=>889,9506=>889,
+9507=>889,9508=>889,9509=>889,9510=>889,9511=>889,9512=>889,9513=>889,9514=>889,9515=>889,9516=>889,
+9517=>889,9518=>889,9519=>889,9520=>889,9521=>889,9522=>889,9523=>889,9524=>889,9525=>889,9526=>889,
+9527=>889,9528=>889,9529=>889,9530=>889,9531=>889,9532=>889,9533=>889,9534=>889,9535=>889,9536=>889,
+9537=>889,9538=>889,9539=>889,9540=>889,9541=>889,9542=>889,9543=>889,9544=>889,9545=>889,9546=>889,
+9547=>889,9552=>889,9553=>889,9554=>889,9555=>889,9556=>889,9557=>889,9558=>889,9559=>889,9560=>889,
+9561=>889,9562=>889,9563=>889,9564=>889,9565=>889,9566=>889,9567=>889,9568=>889,9569=>889,9570=>889,
+9571=>889,9572=>889,9573=>889,9574=>889,9575=>889,9576=>889,9577=>889,9578=>889,9579=>889,9580=>889,
+9581=>889,9600=>761,9601=>761,9602=>761,9603=>761,9604=>761,9605=>761,9606=>761,9607=>761,9608=>761,
+9609=>761,9610=>761,9611=>761,9612=>761,9613=>761,9614=>761,9615=>761,9616=>761,9620=>761,9621=>761,
+9632=>761,9633=>761,9650=>892,9651=>892,9654=>892,9660=>892,9661=>892,9664=>892,9670=>788,9671=>788,
+9674=>494,9675=>791,9676=>684,9679=>791,9680=>791,9681=>791,9682=>791,9683=>791,9684=>791,9685=>791,
+9686=>791,9687=>791,9698=>761,9699=>761,9700=>761,9701=>761,9703=>761,9704=>761,9705=>761,9706=>761,
+9711=>851,9733=>816,9734=>823,9740=>799,9741=>972,9742=>719,9744=>761,9745=>761,9746=>761,9753=>760,
+9754=>960,9755=>960,9756=>939,9757=>500,9758=>939,9759=>500,9760=>500,9762=>805,9763=>805,9766=>494,
+9768=>494,9770=>805,9772=>640,9774=>805,9775=>805,9776=>600,9777=>600,9778=>600,9779=>600,9780=>600,
+9781=>600,9782=>600,9783=>600,9784=>805,9785=>805,9786=>805,9787=>805,9788=>805,9789=>777,9790=>777,
+9791=>541,9792=>541,9793=>541,9794=>799,9795=>700,9796=>583,9797=>541,9798=>652,9799=>583,9800=>805,
+9801=>805,9802=>805,9803=>1013,9804=>833,9805=>1152,9806=>1152,9807=>1152,9808=>704,9809=>805,9810=>1152,
+9811=>805,9812=>800,9813=>800,9814=>800,9815=>800,9816=>800,9817=>800,9818=>800,9819=>800,9820=>800,
+9821=>800,9822=>800,9823=>800,9824=>626,9825=>694,9826=>595,9827=>776,9829=>694,9830=>595,9833=>333,
+9834=>555,9835=>722,9836=>722,9837=>415,9838=>377,9839=>402,9840=>776,9841=>776,9985=>974,9986=>961,
+9987=>974,9988=>980,9990=>789,9991=>790,9992=>791,9993=>690,9996=>549,9997=>855,9998=>911,9999=>933,
+10000=>911,10001=>945,10002=>974,10003=>755,10004=>846,10005=>762,10006=>761,10007=>571,10008=>677,10009=>763,
+10010=>760,10011=>759,10012=>754,10013=>494,10014=>552,10015=>537,10016=>577,10017=>692,10018=>786,10019=>788,
+10020=>788,10021=>790,10022=>793,10023=>794,10025=>823,10026=>789,10027=>841,10028=>823,10029=>833,10030=>816,
+10031=>831,10032=>923,10033=>744,10034=>723,10035=>749,10036=>790,10037=>792,10038=>695,10039=>776,10040=>768,
+10041=>792,10042=>759,10043=>707,10044=>708,10045=>682,10046=>701,10047=>826,10048=>815,10049=>789,10050=>789,
+10051=>707,10052=>687,10053=>696,10054=>689,10055=>786,10056=>787,10057=>713,10058=>791,10059=>785,10061=>873,
+10063=>762,10064=>762,10065=>759,10066=>759,10070=>784,10072=>138,10073=>277,10074=>415,10075=>392,10076=>392,
+10077=>668,10078=>668,10081=>732,10082=>544,10083=>544,10084=>910,10085=>667,10086=>760,10087=>760,10102=>788,
+10103=>788,10104=>788,10105=>788,10106=>788,10107=>788,10108=>788,10109=>788,10110=>788,10111=>788,10112=>788,
+10113=>788,10114=>788,10115=>788,10116=>788,10117=>788,10118=>788,10119=>788,10120=>788,10121=>788,10122=>788,
+10123=>788,10124=>788,10125=>788,10126=>788,10127=>788,10128=>788,10129=>788,10130=>788,10131=>788,10132=>894,
+10136=>748,10137=>924,10138=>748,10139=>918,10140=>927,10141=>928,10142=>928,10143=>834,10144=>873,10145=>828,
+10146=>924,10147=>924,10148=>917,10149=>930,10150=>931,10151=>463,10152=>883,10153=>836,10154=>836,10155=>867,
+10156=>867,10157=>696,10158=>696,10159=>874,10161=>874,10162=>760,10163=>946,10164=>771,10165=>865,10166=>771,
+10167=>888,10168=>967,10169=>888,10170=>831,10171=>873,10172=>927,10173=>970,10174=>918,10229=>1000,10230=>1000,
+10231=>1000,10232=>1000,10233=>1000,10234=>1000,10235=>1000,10236=>1000,10752=>860,10753=>860,10754=>860,10755=>766,
+10756=>766,10761=>745,11799=>333,12289=>1000,12290=>1000,12291=>1000,12293=>1000,12295=>1000,12296=>1000,12297=>998,
+12298=>1000,12299=>1000,12300=>1000,12301=>1000,12302=>1000,12303=>1000,12304=>1000,12305=>1000,12306=>1000,12308=>1000,
+12309=>1000,12353=>1000,12354=>1000,12355=>1000,12356=>1000,12357=>1000,12358=>1000,12359=>1000,12360=>1000,12361=>1000,
+12362=>1000,12363=>1000,12364=>1000,12365=>1000,12366=>1000,12367=>1000,12368=>1000,12369=>1000,12370=>1000,12371=>1000,
+12372=>1000,12373=>1000,12374=>1000,12375=>1000,12376=>1000,12377=>1000,12378=>1000,12379=>1000,12380=>1000,12381=>1000,
+12382=>1000,12383=>1000,12384=>1000,12385=>1000,12386=>1000,12387=>1000,12388=>1000,12389=>1000,12390=>1000,12391=>1000,
+12392=>1000,12393=>1000,12394=>1000,12395=>1000,12396=>1000,12397=>1000,12398=>1000,12399=>1000,12400=>1000,12401=>1000,
+12402=>1000,12403=>1000,12404=>1000,12405=>1000,12406=>1000,12407=>1000,12408=>1000,12409=>1000,12410=>1000,12411=>1000,
+12412=>1000,12413=>1000,12414=>1000,12415=>1000,12416=>1000,12417=>1000,12418=>1000,12419=>1000,12420=>1000,12421=>1000,
+12422=>1000,12423=>1000,12424=>1000,12425=>1000,12426=>1000,12427=>1000,12428=>1000,12429=>1000,12430=>1000,12431=>1000,
+12432=>1000,12433=>1000,12434=>1000,12435=>1000,12436=>1273,12441=>1000,12443=>1000,12449=>1000,12450=>1000,12451=>1000,
+12452=>1000,12453=>1000,12454=>1000,12455=>1000,12456=>1000,12457=>1000,12458=>1000,12459=>1000,12460=>1000,12461=>1000,
+12462=>1000,12463=>1000,12464=>1000,12465=>1000,12466=>1000,12467=>1000,12468=>1000,12469=>1000,12470=>1000,12471=>1000,
+12472=>1000,12473=>1000,12474=>1000,12475=>1000,12476=>1000,12477=>1000,12478=>1000,12479=>1000,12480=>1000,12481=>1000,
+12482=>1000,12483=>1000,12484=>1000,12485=>1000,12486=>1000,12487=>1000,12488=>1000,12489=>1000,12490=>1000,12491=>1000,
+12492=>1000,12493=>1000,12494=>1000,12495=>1000,12496=>1000,12497=>1000,12498=>1000,12499=>1000,12500=>1000,12501=>1000,
+12502=>1000,12503=>1000,12504=>1000,12505=>1000,12506=>1000,12507=>1000,12508=>1000,12509=>1000,12510=>1000,12511=>1000,
+12512=>1000,12513=>1000,12514=>1000,12515=>1000,12516=>1000,12517=>1000,12518=>1000,12519=>1000,12520=>1000,12521=>1000,
+12522=>1000,12523=>1000,12524=>1000,12525=>1000,12526=>1000,12527=>1000,12528=>1000,12529=>1000,12530=>1000,12531=>1000,
+12532=>1000,12533=>1000,12534=>1000,12535=>1273,12536=>1273,12537=>1273,12538=>1273,12539=>1000,12540=>1000,63033=>500,
+63034=>500,63035=>500,63036=>500,63037=>500,63038=>500,63039=>500,63040=>500,63041=>500,63196=>500,64256=>605,
+64257=>556,64258=>556,64259=>824,64260=>821,64262=>677,64298=>537,64299=>537,64300=>537,64301=>537,64302=>537,
+64303=>537,64304=>537,64305=>537,64306=>350,64307=>537,64308=>537,64309=>350,64310=>350,64312=>537,64313=>350,
+64314=>537,64315=>537,64316=>537,64318=>537,64320=>350,64321=>537,64323=>537,64324=>537,64326=>537,64327=>537,
+64328=>537,64329=>537,64330=>537,64331=>350,64332=>537,64333=>537,64334=>537,64342=>926,64343=>926,64344=>308,
+64345=>308,64378=>750,64379=>750,64380=>580,64381=>580,64394=>338,64395=>338,64402=>874,64403=>874,64404=>329,
+64405=>329,64508=>776,64509=>700,64510=>304,64511=>304,65010=>640,65020=>837,65136=>300,65140=>300,65142=>300,
+65144=>300,65146=>300,65148=>300,65152=>724,65153=>321,65154=>275,65155=>249,65156=>275,65164=>301,65165=>249,
+65166=>275,65167=>950,65168=>950,65169=>293,65170=>293,65173=>925,65174=>925,65175=>308,65176=>308,65177=>924,
+65178=>924,65179=>298,65180=>298,65181=>738,65182=>738,65183=>574,65184=>574,65185=>748,65186=>750,65187=>600,
+65188=>600,65189=>701,65190=>775,65191=>596,65192=>596,65193=>397,65194=>397,65195=>399,65196=>399,65197=>328,
+65198=>328,65199=>331,65200=>331,65201=>951,65202=>951,65203=>600,65204=>600,65205=>949,65206=>949,65207=>649,
+65208=>649,65209=>949,65210=>949,65211=>823,65212=>823,65213=>949,65214=>949,65215=>805,65216=>805,65217=>557,
+65218=>557,65219=>460,65220=>460,65221=>550,65222=>550,65223=>455,65224=>550,65225=>625,65226=>575,65227=>674,
+65228=>550,65229=>602,65230=>577,65231=>578,65232=>577,65233=>801,65234=>801,65235=>300,65236=>300,65237=>696,
+65238=>696,65239=>650,65240=>650,65241=>757,65242=>757,65243=>318,65244=>318,65245=>655,65246=>655,65247=>206,
+65248=>206,65249=>549,65250=>549,65251=>403,65252=>403,65253=>651,65254=>651,65255=>323,65256=>323,65257=>424,
+65258=>622,65259=>525,65260=>476,65261=>399,65262=>399,65265=>776,65266=>776,65267=>296,65268=>264,65269=>676,
+65270=>724,65271=>676,65272=>724,65273=>676,65274=>724,65275=>676,65276=>724,65533=>788);
+$enc='';
+$diff='';
+$file='freeserif.z';
+$ctg='freeserif.ctg.z';
+$originalsize=1829396;
+?> \ No newline at end of file
diff --git a/admin/exportclases/fonts/freeserif.z b/admin/exportclases/fonts/freeserif.z
new file mode 100644
index 0000000..978bd47
--- /dev/null
+++ b/admin/exportclases/fonts/freeserif.z
Binary files differ
diff --git a/admin/exportclases/fonts/freeserifb.ctg.z b/admin/exportclases/fonts/freeserifb.ctg.z
new file mode 100644
index 0000000..69da3f9
--- /dev/null
+++ b/admin/exportclases/fonts/freeserifb.ctg.z
Binary files differ
diff --git a/admin/exportclases/fonts/freeserifb.php b/admin/exportclases/fonts/freeserifb.php
new file mode 100644
index 0000000..6e045f4
--- /dev/null
+++ b/admin/exportclases/fonts/freeserifb.php
@@ -0,0 +1,254 @@
+<?php
+$type='TrueTypeUnicode';
+$name='FreeSerifBold';
+$desc=array('Ascent'=>900,'Descent'=>-300,'CapHeight'=>16,'Flags'=>32,'FontBBox'=>'[-560 -488 1860 1173]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>600);
+$up=-125;
+$ut=50;
+$dw=600;
+$cw=array(
+32=>250,33=>333,34=>555,35=>500,36=>500,37=>1000,38=>833,39=>278,40=>333,41=>333,
+42=>507,43=>676,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500,50=>500,51=>500,
+52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>333,59=>333,60=>676,61=>676,
+62=>676,63=>500,64=>930,65=>722,66=>667,67=>722,68=>724,69=>667,70=>611,71=>778,
+72=>774,73=>386,74=>500,75=>764,76=>664,77=>943,78=>722,79=>778,80=>611,81=>778,
+82=>712,83=>556,84=>667,85=>722,86=>722,87=>1000,88=>722,89=>722,90=>667,91=>333,
+92=>278,93=>333,94=>581,95=>500,96=>333,97=>500,98=>556,99=>444,100=>556,101=>444,
+102=>333,103=>500,104=>556,105=>278,106=>333,107=>556,108=>278,109=>833,110=>556,111=>500,
+112=>556,113=>556,114=>444,115=>389,116=>333,117=>556,118=>500,119=>722,120=>500,121=>500,
+122=>444,123=>394,124=>220,125=>394,126=>520,8364=>500,8218=>333,402=>333,8222=>500,8230=>1000,
+8224=>500,8225=>500,710=>333,8240=>1000,352=>556,8249=>333,338=>1000,381=>667,8216=>333,8217=>333,
+8220=>500,8221=>500,8226=>524,8211=>500,8212=>1000,732=>333,8482=>1000,353=>389,8250=>333,339=>722,
+382=>444,376=>722,160=>250,161=>333,162=>500,163=>500,164=>500,165=>500,166=>220,167=>500,
+168=>333,169=>747,170=>300,171=>500,172=>680,173=>333,174=>747,175=>333,176=>400,177=>676,
+178=>300,179=>300,180=>333,181=>556,182=>540,183=>250,184=>333,185=>270,186=>330,187=>500,
+188=>750,189=>750,190=>750,191=>500,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,
+198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>389,205=>389,206=>389,207=>389,
+208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>676,216=>778,217=>722,
+218=>722,219=>722,220=>722,221=>722,222=>611,223=>556,224=>500,225=>500,226=>500,227=>500,
+228=>500,229=>500,230=>722,231=>444,232=>444,233=>444,234=>444,235=>444,236=>278,237=>278,
+238=>278,239=>278,240=>500,241=>556,242=>500,243=>500,244=>500,245=>500,246=>500,247=>676,
+248=>500,249=>556,250=>556,251=>556,252=>556,253=>500,254=>556,255=>500,256=>722,257=>500,
+258=>722,259=>500,260=>722,261=>500,262=>722,263=>444,264=>722,265=>444,266=>722,267=>444,
+268=>722,269=>444,270=>722,271=>556,272=>722,273=>556,274=>667,275=>444,276=>667,277=>444,
+278=>667,279=>444,280=>667,281=>444,282=>667,283=>444,284=>778,285=>500,286=>778,287=>500,
+288=>778,289=>500,290=>778,291=>500,292=>778,293=>556,294=>778,295=>556,296=>389,297=>278,
+298=>389,299=>278,300=>389,301=>278,302=>389,303=>278,304=>389,305=>278,306=>882,307=>486,
+308=>500,309=>333,310=>778,311=>556,312=>534,313=>667,314=>278,315=>667,316=>278,317=>667,
+318=>278,319=>667,320=>528,321=>667,322=>278,323=>722,324=>556,325=>722,326=>556,327=>722,
+328=>556,329=>704,330=>722,331=>556,332=>778,333=>500,334=>778,335=>500,336=>778,337=>500,
+340=>722,341=>444,342=>722,343=>444,344=>722,345=>444,346=>556,347=>389,348=>556,349=>389,
+350=>556,351=>389,354=>667,355=>333,356=>667,357=>333,358=>667,359=>333,360=>722,361=>556,
+362=>722,363=>556,364=>722,365=>556,366=>722,367=>556,368=>722,369=>556,370=>722,371=>556,
+372=>1000,373=>722,374=>722,375=>500,377=>667,378=>444,379=>667,380=>444,383=>333,384=>556,
+385=>667,386=>667,387=>556,388=>667,389=>556,390=>722,391=>722,392=>444,393=>722,394=>724,
+395=>667,396=>556,397=>550,398=>667,399=>778,400=>631,401=>611,403=>778,404=>776,405=>807,
+406=>327,407=>389,408=>887,409=>556,410=>278,411=>495,412=>1000,413=>722,414=>556,415=>778,
+416=>778,417=>500,418=>1192,419=>795,420=>611,421=>556,422=>748,423=>556,424=>389,425=>650,
+426=>391,427=>333,428=>667,429=>333,430=>667,431=>722,432=>556,433=>811,434=>685,435=>853,
+436=>705,437=>667,438=>444,439=>654,440=>654,441=>508,442=>500,443=>500,444=>654,445=>520,
+446=>444,447=>611,448=>220,449=>444,450=>570,451=>333,452=>1391,453=>1168,454=>1000,455=>1164,
+456=>997,457=>611,458=>1222,459=>1055,460=>889,461=>722,462=>500,463=>386,464=>278,465=>778,
+466=>500,467=>722,468=>556,469=>722,470=>556,471=>722,472=>556,473=>722,474=>556,475=>722,
+476=>556,477=>444,478=>722,479=>500,480=>1112,481=>890,482=>1000,483=>722,484=>778,485=>500,
+486=>778,487=>500,488=>764,489=>556,490=>778,491=>500,492=>778,493=>500,494=>654,495=>508,
+496=>333,497=>1391,498=>1168,499=>1000,500=>778,501=>500,504=>722,505=>556,506=>722,507=>500,
+508=>1000,509=>722,510=>778,511=>500,512=>1038,513=>816,514=>1085,515=>863,516=>983,517=>760,
+518=>1030,519=>807,520=>702,521=>278,522=>749,523=>278,524=>1094,525=>816,526=>1141,527=>863,
+528=>712,529=>444,530=>712,531=>444,532=>1038,533=>872,534=>1085,535=>919,536=>556,537=>389,
+538=>667,539=>333,542=>774,543=>556,548=>667,549=>444,550=>722,551=>500,552=>667,553=>444,
+554=>778,555=>500,556=>778,557=>500,558=>778,559=>500,560=>778,561=>500,562=>722,563=>500,
+592=>500,593=>523,594=>523,595=>556,596=>444,598=>556,599=>556,600=>444,601=>444,602=>611,
+603=>440,604=>440,605=>611,607=>333,608=>500,609=>500,610=>556,613=>556,614=>556,615=>556,
+616=>278,617=>333,618=>278,619=>278,621=>278,622=>667,623=>833,624=>833,625=>833,626=>556,
+627=>556,628=>556,629=>500,631=>715,632=>667,633=>444,634=>444,635=>444,636=>444,637=>444,
+638=>394,639=>394,640=>556,641=>556,642=>389,643=>333,644=>333,645=>333,647=>333,648=>333,
+649=>500,650=>557,651=>529,652=>500,653=>722,654=>500,655=>500,656=>444,658=>508,660=>500,
+661=>500,662=>500,664=>778,665=>502,667=>722,668=>556,670=>556,671=>444,672=>556,673=>500,
+674=>500,686=>611,687=>722,711=>333,728=>333,729=>333,730=>333,731=>333,733=>333,734=>333,
+768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,
+778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,
+788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,
+798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,
+808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,
+818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,
+828=>0,829=>0,830=>0,831=>0,864=>0,865=>0,884=>199,885=>199,890=>0,894=>333,
+900=>330,901=>333,902=>722,903=>250,904=>811,905=>958,906=>569,908=>859,910=>902,911=>895,
+912=>330,913=>722,914=>667,915=>611,916=>759,917=>667,918=>667,919=>774,920=>778,921=>386,
+922=>777,923=>722,924=>943,925=>722,926=>650,927=>778,928=>812,929=>611,931=>650,932=>667,
+933=>722,934=>868,935=>722,936=>868,937=>811,938=>0,939=>722,940=>605,941=>440,942=>605,
+943=>330,944=>550,945=>605,946=>550,947=>550,948=>550,949=>440,950=>495,951=>605,952=>550,
+953=>330,954=>608,955=>495,956=>605,957=>495,958=>495,959=>550,960=>605,961=>550,962=>440,
+963=>550,964=>440,965=>550,966=>660,967=>495,968=>715,969=>715,970=>330,971=>550,972=>550,
+973=>550,974=>715,976=>550,977=>605,978=>722,979=>782,980=>722,981=>660,982=>715,986=>650,
+987=>550,988=>611,989=>513,991=>495,992=>722,993=>802,1008=>550,1009=>550,1010=>477,1024=>667,
+1025=>667,1026=>932,1027=>611,1028=>722,1029=>556,1030=>389,1031=>389,1032=>500,1033=>1032,1034=>1032,
+1035=>932,1036=>778,1037=>778,1038=>722,1039=>778,1040=>722,1041=>667,1042=>667,1043=>591,1044=>778,
+1045=>667,1046=>1107,1047=>564,1048=>773,1049=>773,1050=>764,1051=>778,1052=>944,1053=>778,1054=>778,
+1055=>774,1056=>611,1057=>722,1058=>667,1059=>722,1060=>800,1061=>722,1062=>773,1063=>778,1064=>1113,
+1065=>1112,1066=>867,1067=>970,1068=>630,1069=>722,1070=>1114,1071=>735,1072=>500,1073=>500,1074=>502,
+1075=>443,1076=>556,1077=>444,1078=>750,1079=>408,1080=>574,1081=>574,1082=>534,1083=>544,1084=>676,
+1085=>556,1086=>500,1087=>556,1088=>556,1089=>444,1090=>494,1091=>500,1092=>825,1093=>500,1094=>556,
+1095=>556,1096=>818,1097=>818,1098=>612,1099=>762,1100=>512,1101=>444,1102=>790,1103=>512,1104=>444,
+1105=>444,1106=>556,1107=>458,1108=>444,1109=>389,1110=>278,1111=>278,1112=>333,1113=>792,1114=>786,
+1115=>556,1116=>534,1117=>556,1118=>500,1119=>556,1164=>611,1165=>512,1166=>611,1167=>556,1168=>611,
+1169=>458,1170=>611,1171=>458,1172=>611,1173=>458,1174=>1107,1175=>750,1176=>580,1177=>389,1178=>778,
+1179=>534,1180=>778,1181=>534,1182=>778,1183=>534,1184=>967,1185=>633,1186=>778,1187=>556,1188=>1014,
+1189=>735,1190=>778,1191=>830,1192=>722,1193=>444,1194=>722,1195=>444,1196=>667,1197=>494,1198=>722,
+1199=>500,1200=>722,1201=>500,1202=>722,1203=>500,1204=>1046,1205=>778,1206=>778,1207=>556,1208=>778,
+1209=>556,1210=>778,1211=>556,1212=>778,1213=>444,1214=>778,1215=>444,1216=>389,1217=>1107,1218=>750,
+1219=>778,1220=>534,1223=>778,1224=>556,1227=>778,1228=>556,1232=>722,1233=>500,1234=>722,1235=>500,
+1236=>1000,1237=>722,1238=>667,1239=>444,1240=>778,1241=>444,1242=>778,1243=>444,1244=>1107,1245=>750,
+1246=>564,1247=>408,1248=>654,1249=>389,1250=>773,1251=>574,1252=>773,1253=>574,1254=>778,1255=>500,
+1256=>778,1257=>500,1258=>778,1259=>500,1260=>722,1261=>444,1262=>722,1263=>890,1264=>722,1265=>500,
+1266=>722,1267=>500,1268=>778,1269=>556,1272=>970,1273=>762,1425=>0,1426=>0,1427=>0,1428=>0,
+1429=>0,1430=>0,1431=>0,1432=>0,1433=>0,1434=>0,1435=>0,1436=>0,1437=>0,1438=>0,
+1439=>0,1440=>0,1441=>0,1443=>0,1444=>0,1445=>0,1446=>0,1447=>0,1448=>0,1449=>0,
+1450=>0,1451=>0,1452=>0,1453=>0,1454=>0,1455=>0,1456=>0,1457=>0,1458=>0,1459=>0,
+1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1467=>0,1468=>0,1469=>0,1470=>433,
+1471=>0,1472=>155,1473=>0,1474=>0,1475=>400,1476=>0,1488=>593,1489=>498,1490=>339,1491=>523,
+1492=>561,1493=>266,1494=>291,1495=>559,1496=>576,1497=>266,1498=>496,1499=>501,1500=>510,1501=>542,
+1502=>581,1503=>273,1504=>347,1505=>512,1506=>552,1507=>493,1508=>491,1509=>537,1510=>561,1511=>544,
+1512=>502,1513=>716,1514=>571,1520=>532,1521=>532,1522=>532,1548=>250,4256=>475,4257=>469,4258=>573,
+4259=>650,4260=>502,4261=>506,4262=>481,4263=>746,4264=>491,4265=>495,4266=>888,4267=>488,4268=>464,
+4269=>745,4270=>483,4271=>489,4272=>721,4273=>464,4274=>578,4275=>590,4276=>611,4277=>491,4278=>663,
+4279=>489,4280=>544,4281=>479,4282=>527,4283=>488,4284=>560,4285=>461,4286=>467,4287=>546,4288=>483,
+4289=>487,4290=>562,4291=>477,4292=>491,4293=>471,4304=>522,4305=>518,4306=>621,4307=>716,4308=>517,
+4309=>519,4310=>518,4311=>796,4312=>518,4313=>518,4314=>934,4315=>517,4316=>519,4317=>787,4318=>515,
+4319=>514,4320=>788,4321=>573,4322=>620,4323=>593,4324=>639,4325=>516,4326=>714,4327=>518,4328=>572,
+4329=>518,4330=>555,4331=>518,4332=>562,4333=>509,4334=>572,4335=>677,4336=>523,4337=>517,4338=>595,
+4339=>480,4340=>519,4341=>484,7680=>722,7681=>500,7682=>667,7683=>556,7684=>667,7685=>556,7686=>667,
+7687=>556,7688=>722,7689=>444,7690=>724,7691=>556,7692=>724,7693=>556,7694=>724,7695=>556,7696=>724,
+7697=>556,7698=>724,7699=>556,7700=>667,7701=>444,7702=>667,7703=>444,7704=>667,7705=>444,7706=>667,
+7707=>444,7708=>667,7709=>444,7710=>611,7711=>333,7712=>778,7713=>500,7714=>774,7715=>556,7716=>774,
+7717=>556,7718=>774,7719=>556,7720=>774,7721=>556,7722=>774,7723=>556,7724=>386,7725=>278,7726=>389,
+7727=>278,7728=>764,7729=>556,7730=>764,7731=>556,7732=>764,7733=>556,7734=>664,7735=>278,7736=>664,
+7737=>278,7738=>664,7739=>278,7740=>664,7741=>278,7742=>943,7743=>833,7744=>943,7745=>833,7746=>943,
+7747=>833,7748=>722,7749=>556,7750=>722,7751=>556,7752=>722,7753=>556,7754=>722,7755=>556,7756=>778,
+7757=>500,7758=>778,7759=>500,7760=>778,7761=>500,7762=>778,7763=>500,7764=>611,7765=>556,7766=>611,
+7767=>556,7768=>712,7769=>444,7770=>712,7771=>444,7772=>712,7773=>444,7774=>712,7775=>444,7776=>556,
+7777=>389,7778=>556,7779=>389,7780=>556,7781=>389,7782=>556,7783=>389,7784=>556,7785=>389,7786=>667,
+7787=>333,7788=>667,7789=>333,7790=>667,7791=>333,7792=>667,7793=>333,7794=>722,7795=>556,7796=>722,
+7797=>556,7798=>722,7799=>556,7800=>722,7801=>556,7802=>722,7803=>556,7804=>722,7805=>500,7806=>722,
+7807=>500,7808=>1000,7809=>722,7810=>1000,7811=>722,7812=>1000,7813=>722,7814=>1000,7815=>722,7816=>1000,
+7817=>722,7818=>722,7819=>500,7820=>722,7821=>500,7822=>722,7823=>500,7824=>667,7825=>444,7826=>667,
+7827=>444,7828=>667,7829=>444,7830=>556,7831=>333,7832=>722,7833=>500,7835=>333,7840=>722,7841=>500,
+7842=>825,7843=>603,7844=>722,7845=>500,7846=>722,7847=>500,7848=>722,7849=>500,7850=>722,7851=>500,
+7852=>722,7853=>500,7854=>722,7855=>500,7856=>722,7857=>500,7858=>825,7859=>603,7860=>722,7861=>500,
+7862=>722,7863=>500,7864=>667,7865=>444,7866=>770,7867=>547,7868=>667,7869=>444,7870=>667,7871=>444,
+7872=>667,7873=>444,7874=>667,7875=>444,7876=>667,7877=>444,7878=>667,7879=>444,7880=>386,7881=>278,
+7882=>386,7883=>278,7884=>778,7885=>500,7886=>881,7887=>603,7888=>778,7889=>500,7890=>778,7891=>500,
+7892=>881,7893=>603,7894=>778,7895=>500,7896=>778,7897=>500,7898=>894,7899=>616,7900=>894,7901=>616,
+7902=>881,7903=>603,7904=>778,7905=>500,7906=>778,7907=>500,7908=>722,7909=>556,7910=>722,7911=>556,
+7912=>838,7913=>672,7914=>838,7915=>672,7916=>825,7917=>659,7918=>722,7919=>556,7920=>722,7921=>556,
+7922=>722,7923=>500,7924=>722,7925=>500,7926=>825,7927=>603,7928=>722,7929=>500,7936=>605,7937=>605,
+7938=>605,7939=>605,7940=>605,7941=>605,7942=>605,7943=>605,7944=>722,7945=>722,7946=>722,7947=>722,
+7948=>722,7949=>722,7950=>722,7951=>722,7952=>440,7953=>440,7954=>440,7955=>440,7956=>440,7957=>440,
+7960=>667,7961=>667,7962=>667,7963=>667,7964=>667,7965=>667,7968=>605,7969=>605,7970=>605,7971=>605,
+7972=>605,7973=>605,7974=>605,7975=>605,7976=>774,7977=>774,7978=>774,7979=>774,7980=>774,7981=>774,
+7982=>774,7983=>774,7984=>330,7985=>330,7986=>330,7987=>330,7988=>330,7989=>330,7990=>330,7991=>330,
+7992=>386,7993=>386,7994=>386,7995=>386,7996=>386,7997=>386,7998=>386,7999=>386,8000=>550,8001=>550,
+8002=>550,8003=>550,8004=>550,8005=>550,8008=>778,8009=>778,8010=>778,8011=>778,8012=>778,8013=>778,
+8016=>550,8017=>550,8018=>550,8019=>550,8020=>550,8021=>550,8022=>550,8023=>550,8025=>722,8027=>722,
+8029=>722,8031=>722,8032=>715,8033=>715,8034=>715,8035=>715,8036=>715,8037=>715,8038=>715,8039=>715,
+8040=>811,8041=>811,8042=>811,8043=>811,8044=>811,8045=>811,8046=>811,8047=>811,8048=>605,8049=>605,
+8050=>440,8051=>440,8052=>605,8053=>605,8054=>330,8055=>330,8056=>550,8057=>550,8058=>550,8059=>550,
+8060=>715,8061=>715,8064=>605,8065=>605,8066=>605,8067=>605,8068=>605,8069=>605,8070=>605,8071=>605,
+8072=>722,8073=>722,8074=>722,8075=>722,8076=>722,8077=>722,8078=>722,8079=>722,8080=>605,8081=>605,
+8082=>605,8083=>605,8084=>605,8085=>605,8086=>605,8087=>605,8088=>774,8089=>774,8090=>774,8091=>774,
+8092=>774,8093=>774,8094=>774,8095=>774,8096=>715,8097=>715,8098=>715,8099=>715,8100=>715,8101=>715,
+8102=>715,8103=>715,8104=>811,8105=>811,8106=>811,8107=>811,8108=>811,8109=>811,8110=>811,8111=>811,
+8112=>605,8113=>605,8114=>605,8115=>605,8116=>605,8118=>605,8119=>605,8120=>722,8121=>722,8122=>722,
+8123=>722,8124=>952,8125=>500,8126=>0,8127=>500,8128=>500,8129=>550,8130=>605,8131=>605,8132=>605,
+8134=>605,8135=>605,8136=>667,8137=>667,8138=>774,8139=>774,8140=>774,8141=>500,8142=>500,8143=>500,
+8144=>330,8145=>330,8146=>330,8147=>330,8150=>330,8151=>330,8152=>386,8153=>386,8154=>386,8155=>386,
+8157=>500,8158=>500,8159=>500,8160=>550,8161=>550,8162=>550,8163=>550,8164=>550,8165=>550,8166=>550,
+8167=>550,8168=>722,8169=>722,8170=>722,8171=>722,8172=>611,8173=>550,8174=>550,8175=>500,8178=>715,
+8179=>715,8180=>715,8182=>715,8183=>715,8184=>778,8185=>778,8186=>811,8187=>811,8188=>811,8189=>500,
+8190=>500,8204=>0,8205=>0,8206=>0,8207=>0,8208=>333,8209=>333,8210=>500,8213=>1000,8214=>333,
+8219=>333,8223=>500,8227=>560,8228=>250,8229=>500,8241=>1820,8242=>373,8248=>469,8251=>727,8252=>666,
+8253=>695,8255=>953,8256=>953,8257=>338,8258=>931,8259=>333,8260=>167,8261=>332,8262=>332,8263=>1000,
+8264=>833,8265=>833,8267=>540,8304=>300,8308=>300,8309=>300,8310=>300,8311=>300,8312=>300,8313=>300,
+8320=>300,8321=>274,8322=>300,8323=>300,8324=>300,8325=>300,8326=>300,8327=>300,8328=>300,8329=>300,
+8352=>710,8353=>722,8354=>783,8355=>611,8356=>500,8357=>833,8358=>722,8359=>700,8360=>1101,8361=>1000,
+8363=>513,8373=>500,8451=>1122,8457=>1011,8458=>500,8459=>960,8463=>556,8464=>792,8465=>737,8466=>800,
+8467=>427,8470=>954,8471=>1048,8472=>666,8475=>747,8476=>955,8478=>722,8479=>722,8480=>891,8483=>722,
+8486=>811,8487=>811,8489=>333,8490=>764,8491=>722,8492=>806,8494=>551,8497=>723,8498=>611,8499=>1203,
+8501=>666,8502=>651,8503=>329,8504=>549,8531=>750,8532=>750,8533=>750,8534=>750,8535=>750,8536=>750,
+8537=>750,8538=>750,8539=>750,8540=>750,8541=>750,8542=>750,8543=>750,8544=>386,8545=>772,8546=>1158,
+8547=>1108,8548=>722,8549=>1108,8550=>1494,8551=>1880,8552=>1108,8553=>722,8554=>1108,8555=>1494,8556=>664,
+8557=>722,8558=>724,8559=>943,8560=>278,8561=>556,8562=>834,8563=>778,8564=>500,8565=>778,8566=>1056,
+8567=>1334,8568=>778,8569=>500,8570=>778,8571=>1056,8572=>278,8573=>444,8574=>556,8575=>833,8592=>964,
+8593=>523,8594=>964,8595=>523,8596=>964,8597=>964,8598=>964,8599=>964,8600=>964,8601=>964,8602=>964,
+8603=>964,8604=>1152,8605=>1152,8606=>964,8607=>964,8608=>964,8609=>964,8610=>1078,8611=>1078,8612=>964,
+8613=>964,8614=>964,8615=>964,8616=>964,8617=>964,8618=>964,8619=>964,8620=>964,8621=>1168,8622=>964,
+8624=>622,8625=>622,8630=>1069,8631=>1069,8632=>964,8633=>964,8634=>980,8635=>980,8636=>964,8637=>964,
+8638=>557,8639=>556,8640=>964,8641=>964,8642=>557,8643=>556,8644=>964,8645=>964,8646=>964,8647=>964,
+8648=>964,8649=>964,8650=>964,8651=>964,8652=>964,8653=>964,8654=>964,8655=>964,8656=>964,8657=>630,
+8658=>964,8659=>630,8660=>964,8661=>630,8662=>1063,8663=>1063,8664=>1063,8665=>1063,8666=>964,8667=>964,
+8668=>1100,8669=>1100,8672=>964,8674=>964,8676=>964,8677=>964,8704=>627,8705=>716,8706=>558,8707=>627,
+8708=>627,8709=>500,8710=>612,8711=>719,8713=>576,8714=>576,8716=>576,8717=>576,8720=>733,8721=>713,
+8722=>676,8723=>676,8724=>676,8725=>750,8727=>570,8729=>570,8730=>549,8733=>676,8734=>752,8736=>555,
+8737=>555,8738=>555,8739=>240,8740=>531,8741=>478,8742=>705,8743=>694,8744=>694,8745=>694,8746=>694,
+8747=>323,8756=>629,8757=>629,8761=>947,8764=>676,8765=>676,8766=>763,8768=>305,8769=>676,8770=>676,
+8771=>676,8773=>676,8776=>676,8777=>676,8778=>676,8781=>676,8782=>676,8783=>676,8784=>676,8785=>676,
+8786=>676,8787=>676,8788=>947,8789=>947,8790=>676,8791=>676,8796=>676,8800=>570,8801=>676,8802=>676,
+8804=>570,8805=>570,8806=>676,8807=>676,8808=>676,8809=>676,8810=>1047,8811=>1047,8812=>450,8813=>676,
+8814=>676,8815=>676,8816=>676,8817=>676,8818=>676,8819=>676,8820=>676,8821=>676,8822=>676,8823=>676,
+8824=>676,8825=>676,8826=>676,8827=>676,8828=>676,8829=>676,8830=>676,8831=>676,8832=>676,8833=>676,
+8834=>676,8835=>676,8836=>676,8837=>676,8838=>676,8839=>676,8840=>676,8841=>676,8842=>676,8843=>676,
+8846=>694,8847=>676,8848=>676,8849=>676,8850=>676,8851=>694,8852=>694,8853=>738,8854=>738,8855=>738,
+8856=>738,8857=>738,8858=>738,8859=>738,8861=>738,8862=>678,8863=>678,8864=>678,8865=>678,8866=>487,
+8867=>487,8868=>752,8869=>752,8871=>487,8873=>659,8874=>831,8876=>487,8877=>487,8878=>659,8879=>659,
+8882=>676,8883=>676,8884=>676,8885=>676,8886=>1380,8887=>1380,8888=>1027,8890=>626,8891=>694,8892=>694,
+8893=>694,8900=>512,8903=>676,8904=>759,8905=>632,8906=>632,8907=>1000,8908=>1000,8909=>676,8910=>694,
+8911=>694,8912=>676,8913=>676,8914=>694,8915=>694,8916=>694,8918=>676,8919=>676,8920=>1441,8921=>1441,
+8922=>676,8923=>676,8924=>676,8925=>676,8926=>676,8927=>676,8928=>676,8929=>676,8930=>676,8931=>676,
+8934=>676,8935=>676,8936=>676,8937=>676,8938=>676,8939=>676,8940=>676,8941=>676,8960=>737,8968=>411,
+8969=>411,8970=>411,8971=>411,8976=>680,8994=>951,8995=>951,9001=>398,9002=>398,9251=>500,9472=>1000,
+9473=>1000,9474=>1000,9475=>1000,9476=>1000,9477=>1000,9478=>1000,9479=>1000,9480=>1000,9481=>1000,9482=>1000,
+9483=>1000,9484=>1000,9485=>1000,9486=>1000,9487=>1000,9488=>1000,9489=>1000,9490=>1000,9491=>1000,9492=>1000,
+9493=>1000,9494=>1000,9495=>1000,9496=>1000,9497=>1000,9498=>1000,9499=>1000,9500=>1000,9501=>1000,9502=>1000,
+9503=>1000,9504=>1000,9505=>1000,9506=>1000,9507=>1000,9508=>1000,9509=>1000,9510=>1000,9511=>1000,9512=>1000,
+9513=>1000,9514=>1000,9515=>1000,9516=>1000,9517=>1000,9518=>1000,9519=>1000,9520=>1000,9521=>1000,9522=>1000,
+9523=>1000,9524=>1000,9525=>1000,9526=>1000,9527=>1000,9528=>1000,9529=>1000,9530=>1000,9531=>1000,9532=>1000,
+9533=>1000,9534=>1000,9535=>1000,9536=>1000,9537=>1000,9538=>1000,9539=>1000,9540=>1000,9541=>1000,9542=>1000,
+9543=>1000,9544=>1000,9545=>1000,9546=>1000,9547=>1000,9552=>1000,9553=>1000,9554=>1000,9555=>1000,9556=>1000,
+9557=>1000,9558=>1000,9559=>1000,9560=>1000,9561=>1000,9562=>1000,9563=>1000,9564=>1000,9565=>1000,9566=>1000,
+9567=>1000,9568=>1000,9569=>1000,9570=>1000,9571=>1000,9572=>1000,9573=>1000,9574=>1000,9575=>1000,9576=>1000,
+9577=>1000,9578=>1000,9579=>1000,9580=>1000,9600=>1000,9601=>1000,9602=>1000,9603=>1000,9604=>1000,9605=>1000,
+9606=>1000,9607=>1000,9608=>1000,9609=>1000,9610=>1000,9611=>1000,9612=>1000,9613=>1000,9614=>1000,9615=>1000,
+9616=>1000,9617=>1000,9618=>1000,9619=>1000,9620=>1000,9621=>1000,9622=>1000,9623=>1000,9624=>1000,9625=>1000,
+9626=>1000,9627=>1000,9628=>1000,9629=>1000,9630=>1000,9631=>1000,9632=>678,9633=>678,9642=>309,9650=>681,
+9651=>681,9654=>681,9660=>681,9661=>681,9664=>681,9670=>580,9671=>580,9674=>494,9675=>738,9676=>604,
+9679=>738,9702=>524,9733=>1003,9824=>618,9825=>645,9826=>587,9827=>582,9828=>582,9829=>645,9830=>587,
+9831=>618,9833=>333,9834=>556,9835=>778,9836=>778,9837=>556,9838=>556,9839=>556,10214=>561,10215=>561,
+11799=>333,12353=>1000,12354=>1000,12355=>1000,12356=>1000,12357=>1000,12358=>1000,12359=>1000,12360=>1000,12361=>1000,
+12362=>1000,12363=>1000,12364=>1000,12365=>1000,12366=>1000,12367=>1000,12368=>1000,12369=>1000,12370=>1000,12371=>1000,
+12372=>1000,12373=>1000,12374=>1000,12375=>1000,12376=>1000,12377=>1000,12378=>1000,12379=>1000,12380=>1000,12381=>1000,
+12382=>1000,12383=>1000,12384=>1000,12385=>1000,12386=>1000,12387=>1000,12388=>1000,12389=>1000,12390=>1000,12391=>1000,
+12392=>1000,12393=>1000,12394=>1000,12395=>1000,12396=>1000,12397=>1000,12398=>1000,12399=>1000,12400=>1000,12401=>1000,
+12402=>1000,12403=>1000,12404=>1000,12405=>1000,12406=>1000,12407=>1000,12408=>1000,12409=>1000,12410=>1000,12411=>1000,
+12412=>1000,12413=>1000,12414=>1000,12415=>1000,12416=>1000,12417=>1000,12418=>1000,12419=>1000,12420=>1000,12421=>1000,
+12422=>1000,12423=>1000,12424=>1000,12425=>1000,12426=>1000,12427=>1000,12428=>1000,12429=>1000,12430=>1000,12431=>1000,
+12432=>1000,12433=>1000,12434=>1000,12435=>1000,12449=>1000,12450=>1000,12451=>1000,12452=>1000,12453=>1000,12454=>1000,
+12455=>1000,12456=>1000,12457=>1000,12458=>1000,12459=>1000,12460=>1000,12461=>1000,12462=>1000,12463=>1000,12464=>1000,
+12465=>1000,12466=>1000,12467=>1000,12468=>1000,12469=>1000,12470=>1000,12471=>1000,12472=>1000,12473=>1000,12474=>1000,
+12475=>1000,12476=>1000,12477=>1000,12478=>1000,12479=>1000,12480=>1000,12481=>1000,12482=>1000,12483=>1000,12484=>1000,
+12485=>1000,12486=>1000,12487=>1000,12488=>1000,12489=>1000,12490=>1000,12491=>1000,12492=>1000,12493=>1000,12494=>1000,
+12495=>1000,12496=>1000,12497=>1000,12498=>1000,12499=>1000,12500=>1000,12501=>1000,12502=>1000,12503=>1000,12504=>1000,
+12505=>1000,12506=>1000,12507=>1000,12508=>1000,12509=>1000,12510=>1000,12511=>1000,12512=>1000,12513=>1000,12514=>1000,
+12515=>1000,12516=>1000,12517=>1000,12518=>1000,12519=>1000,12520=>1000,12521=>1000,12522=>1000,12523=>1000,12524=>1000,
+12525=>1000,12526=>1000,12527=>1000,12528=>1000,12529=>1000,12530=>1000,12531=>1000,12532=>1000,12533=>1000,12534=>1000,
+59393=>266,59394=>496,59395=>496,63033=>500,63034=>500,63035=>500,63036=>500,63037=>500,63038=>500,63039=>500,
+63040=>500,63041=>500,63166=>333,63171=>333,63196=>500,64256=>556,64257=>556,64258=>556,64259=>834,64260=>834,
+64262=>723,64285=>266,64286=>0,64287=>532,64288=>552,64297=>570,64298=>716,64299=>716,64300=>716,64301=>716,
+64302=>593,64303=>593,64304=>593,64305=>498,64306=>339,64307=>523,64308=>561,64309=>266,64310=>291,64311=>559,
+64312=>576,64313=>266,64314=>496,64315=>501,64316=>510,64317=>542,64318=>581,64319=>273,64320=>347,64321=>512,
+64322=>552,64323=>493,64324=>491,64325=>537,64326=>561,64327=>544,64328=>502,64329=>716,64330=>571,64331=>266,
+64332=>498,64333=>501,64334=>491,64335=>593,65533=>788);
+$enc='';
+$diff='';
+$file='freeserifb.z';
+$ctg='freeserifb.ctg.z';
+$originalsize=397068;
+?> \ No newline at end of file
diff --git a/admin/exportclases/fonts/freeserifb.z b/admin/exportclases/fonts/freeserifb.z
new file mode 100644
index 0000000..132807c
--- /dev/null
+++ b/admin/exportclases/fonts/freeserifb.z
Binary files differ
diff --git a/admin/exportclases/fonts/freeserifbi.ctg.z b/admin/exportclases/fonts/freeserifbi.ctg.z
new file mode 100644
index 0000000..678161e
--- /dev/null
+++ b/admin/exportclases/fonts/freeserifbi.ctg.z
Binary files differ
diff --git a/admin/exportclases/fonts/freeserifbi.php b/admin/exportclases/fonts/freeserifbi.php
new file mode 100644
index 0000000..2ff55fa
--- /dev/null
+++ b/admin/exportclases/fonts/freeserifbi.php
@@ -0,0 +1,182 @@
+<?php
+$type='TrueTypeUnicode';
+$name='FreeSerifBoldItalic';
+$desc=array('Ascent'=>900,'Descent'=>-300,'CapHeight'=>-24,'Flags'=>96,'FontBBox'=>'[-575 -1120 1867 1571]','ItalicAngle'=>-16.3,'StemV'=>120,'MissingWidth'=>600);
+$up=-125;
+$ut=50;
+$dw=600;
+$cw=array(
+32=>250,33=>389,34=>555,35=>500,36=>500,37=>833,38=>778,39=>278,40=>333,41=>333,
+42=>500,43=>570,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500,50=>500,51=>500,
+52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>333,59=>333,60=>570,61=>570,
+62=>570,63=>500,64=>832,65=>667,66=>667,67=>667,68=>744,69=>670,70=>656,71=>722,
+72=>778,73=>393,74=>500,75=>664,76=>609,77=>896,78=>722,79=>722,80=>614,81=>722,
+82=>672,83=>556,84=>611,85=>722,86=>667,87=>889,88=>667,89=>611,90=>611,91=>333,
+92=>278,93=>333,94=>570,95=>500,96=>333,97=>500,98=>500,99=>444,100=>500,101=>444,
+102=>333,103=>500,104=>556,105=>278,106=>278,107=>500,108=>278,109=>778,110=>556,111=>500,
+112=>500,113=>500,114=>389,115=>389,116=>278,117=>556,118=>444,119=>667,120=>500,121=>444,
+122=>389,123=>348,124=>220,125=>348,126=>570,8364=>500,8218=>333,402=>333,8222=>500,8230=>1000,
+8224=>500,8225=>500,710=>333,8240=>1000,352=>556,8249=>333,338=>944,381=>611,8216=>333,8217=>333,
+8220=>500,8221=>500,8226=>350,8211=>500,8212=>1000,732=>333,8482=>1000,353=>389,8250=>333,339=>722,
+382=>389,376=>611,160=>250,161=>389,162=>500,163=>500,164=>500,165=>500,166=>220,167=>500,
+168=>333,169=>747,170=>266,171=>500,172=>606,173=>333,174=>747,175=>333,176=>400,177=>570,
+178=>300,179=>300,180=>333,181=>576,182=>500,183=>250,184=>333,185=>272,186=>300,187=>500,
+188=>750,189=>750,190=>750,191=>500,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667,
+198=>944,199=>667,200=>667,201=>667,202=>667,203=>667,204=>389,205=>389,206=>389,207=>389,
+208=>722,209=>722,210=>722,211=>722,212=>722,213=>722,214=>722,215=>570,216=>722,217=>722,
+218=>722,219=>722,220=>722,221=>611,222=>611,223=>500,224=>500,225=>500,226=>500,227=>500,
+228=>500,229=>500,230=>722,231=>444,232=>444,233=>444,234=>444,235=>444,236=>278,237=>278,
+238=>278,239=>278,240=>500,241=>556,242=>500,243=>500,244=>500,245=>500,246=>500,247=>570,
+248=>500,249=>556,250=>556,251=>556,252=>556,253=>444,254=>500,255=>444,256=>667,257=>500,
+258=>667,259=>500,260=>667,261=>500,262=>667,263=>444,264=>667,265=>444,266=>667,267=>444,
+268=>667,269=>444,270=>722,271=>644,272=>722,273=>500,274=>667,275=>444,276=>667,277=>444,
+278=>667,279=>444,280=>667,281=>444,282=>667,283=>444,284=>722,285=>500,286=>722,287=>500,
+288=>722,289=>500,290=>722,291=>500,292=>778,293=>556,294=>778,295=>556,296=>389,297=>278,
+298=>389,299=>278,300=>389,301=>278,302=>389,303=>278,304=>389,305=>278,306=>826,307=>547,
+308=>500,309=>278,310=>667,311=>500,312=>534,313=>611,314=>278,315=>611,316=>278,317=>638,
+318=>424,319=>611,320=>528,321=>611,322=>278,323=>722,324=>556,325=>722,326=>556,327=>722,
+328=>556,329=>556,330=>722,331=>547,332=>722,333=>500,334=>722,335=>500,336=>722,337=>500,
+340=>667,341=>389,342=>667,343=>389,344=>667,345=>389,346=>556,347=>389,348=>556,349=>389,
+350=>556,351=>389,354=>611,355=>278,356=>611,357=>278,358=>611,359=>278,360=>722,361=>556,
+362=>722,363=>556,364=>722,365=>556,366=>722,367=>556,368=>722,369=>556,370=>722,371=>556,
+372=>889,373=>667,374=>611,375=>444,377=>611,378=>389,379=>611,380=>389,383=>333,384=>500,
+385=>809,386=>733,387=>500,388=>591,389=>500,390=>722,391=>962,392=>681,393=>722,394=>864,
+395=>733,396=>500,397=>550,398=>670,399=>722,400=>631,401=>769,403=>962,404=>716,405=>745,
+406=>278,407=>389,408=>829,409=>500,410=>278,411=>495,412=>853,413=>919,414=>556,415=>722,
+416=>908,417=>640,418=>1014,419=>778,420=>757,421=>500,422=>611,423=>556,424=>389,425=>730,
+426=>333,427=>278,428=>611,429=>298,430=>611,431=>920,432=>730,433=>811,434=>678,435=>611,
+436=>581,437=>611,438=>389,439=>614,440=>614,441=>461,442=>445,443=>500,444=>614,445=>500,
+446=>389,447=>500,448=>220,452=>1355,453=>1133,454=>889,455=>1109,456=>887,457=>556,458=>1222,
+459=>1000,460=>834,461=>667,462=>500,463=>393,464=>278,465=>722,466=>500,467=>722,468=>556,
+469=>722,470=>556,471=>722,472=>556,473=>722,474=>556,475=>722,476=>556,477=>444,478=>667,
+479=>500,480=>667,481=>500,482=>944,483=>722,484=>722,485=>500,486=>722,487=>500,488=>664,
+489=>500,490=>722,491=>500,492=>722,493=>500,494=>614,495=>461,496=>278,497=>1355,498=>1133,
+499=>889,500=>722,501=>500,504=>722,505=>556,506=>667,507=>500,508=>944,509=>722,510=>722,
+511=>500,512=>667,513=>500,514=>667,515=>500,516=>670,517=>444,518=>670,519=>444,520=>393,
+521=>278,522=>393,523=>278,524=>722,525=>500,526=>722,527=>500,528=>672,529=>389,530=>672,
+531=>389,532=>722,533=>556,534=>722,535=>556,536=>556,537=>389,538=>611,539=>278,542=>778,
+543=>556,550=>667,551=>500,552=>670,553=>444,554=>722,555=>500,556=>722,557=>500,558=>722,
+559=>500,560=>722,561=>500,562=>611,563=>444,592=>500,593=>605,594=>605,595=>500,596=>444,
+599=>668,600=>444,601=>444,603=>440,608=>569,609=>500,613=>556,616=>278,617=>330,618=>278,
+623=>778,629=>500,633=>389,643=>333,648=>278,649=>500,650=>557,651=>492,652=>444,653=>667,
+654=>444,658=>461,670=>500,711=>333,714=>333,715=>333,728=>333,729=>333,730=>333,731=>333,
+733=>333,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,
+777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,
+787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,
+797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,
+807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,
+817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,
+827=>0,828=>0,829=>0,830=>0,831=>0,864=>0,865=>0,884=>199,885=>199,890=>0,
+894=>333,900=>330,901=>333,902=>667,903=>250,904=>775,905=>913,906=>497,908=>792,910=>920,
+911=>849,912=>330,913=>667,914=>667,915=>637,916=>740,917=>667,918=>611,919=>778,920=>722,
+921=>389,922=>677,923=>667,924=>889,925=>722,926=>650,927=>722,928=>778,929=>611,931=>730,
+932=>621,933=>722,934=>748,935=>667,936=>868,937=>741,938=>389,939=>722,940=>605,941=>440,
+942=>605,943=>330,944=>550,945=>605,946=>550,947=>550,948=>550,949=>440,950=>495,951=>605,
+952=>550,953=>330,954=>608,955=>495,956=>605,957=>495,958=>495,959=>550,960=>605,961=>550,
+962=>440,963=>550,964=>440,965=>550,966=>660,967=>495,968=>715,969=>715,970=>330,971=>550,
+972=>550,973=>550,974=>715,976=>550,977=>605,978=>722,979=>854,980=>722,981=>660,982=>715,
+985=>550,986=>650,987=>550,988=>667,989=>513,990=>611,991=>495,992=>671,993=>662,1008=>550,
+1009=>550,1010=>477,1013=>411,1024=>667,1025=>667,1026=>728,1027=>667,1028=>722,1029=>556,1030=>389,
+1031=>389,1032=>500,1033=>987,1034=>913,1035=>788,1036=>778,1037=>870,1038=>722,1039=>869,1040=>667,
+1041=>733,1042=>667,1043=>656,1044=>864,1045=>667,1046=>1107,1047=>564,1048=>870,1049=>870,1050=>775,
+1051=>855,1052=>889,1053=>778,1054=>722,1055=>869,1056=>611,1057=>667,1058=>611,1059=>766,1060=>833,
+1061=>667,1062=>869,1063=>823,1064=>1208,1065=>1209,1066=>796,1067=>1060,1068=>712,1069=>732,1070=>1195,
+1071=>821,1072=>500,1073=>500,1074=>444,1075=>389,1076=>534,1077=>444,1078=>1051,1079=>408,1080=>556,
+1081=>556,1082=>534,1083=>637,1084=>859,1085=>560,1086=>500,1087=>556,1088=>500,1089=>444,1090=>778,
+1091=>444,1092=>764,1093=>500,1094=>556,1095=>556,1096=>806,1097=>806,1098=>591,1099=>744,1100=>444,
+1101=>451,1102=>765,1103=>594,1104=>444,1105=>444,1106=>451,1107=>458,1108=>444,1109=>389,1110=>278,
+1111=>278,1112=>278,1113=>731,1114=>658,1115=>556,1116=>558,1117=>556,1118=>444,1119=>556,1164=>712,
+1165=>444,1166=>611,1167=>500,1168=>611,1169=>458,1170=>667,1171=>458,1172=>667,1173=>458,1174=>1107,
+1175=>1051,1176=>657,1177=>439,1178=>772,1179=>534,1180=>772,1181=>534,1182=>772,1183=>534,1184=>772,
+1185=>534,1186=>778,1187=>560,1188=>778,1189=>560,1190=>1085,1191=>556,1192=>667,1193=>444,1194=>667,
+1195=>444,1196=>611,1197=>494,1198=>611,1199=>611,1200=>611,1201=>611,1202=>667,1203=>500,1204=>869,
+1205=>556,1206=>823,1207=>556,1208=>823,1209=>556,1210=>823,1211=>556,1212=>620,1213=>444,1214=>620,
+1215=>444,1216=>389,1217=>1107,1218=>1051,1219=>772,1220=>534,1223=>778,1224=>560,1227=>823,1228=>556,
+1232=>667,1233=>500,1234=>667,1235=>500,1236=>944,1237=>722,1238=>667,1239=>444,1240=>722,1241=>444,
+1242=>722,1243=>444,1244=>1107,1245=>1051,1246=>564,1247=>408,1248=>614,1249=>461,1250=>870,1251=>556,
+1252=>870,1253=>556,1254=>722,1255=>500,1256=>722,1257=>500,1258=>722,1259=>500,1260=>732,1261=>451,
+1262=>766,1263=>444,1264=>766,1265=>444,1266=>766,1267=>444,1268=>823,1269=>556,1272=>1060,1273=>744,
+1488=>504,1489=>504,1490=>313,1491=>504,1492=>504,1493=>285,1494=>285,1495=>504,1496=>504,1497=>285,
+1498=>517,1499=>504,1500=>504,1501=>504,1502=>504,1503=>281,1504=>285,1505=>504,1506=>504,1507=>526,
+1508=>504,1509=>491,1510=>504,1511=>549,1512=>513,1513=>538,1514=>504,4256=>475,4257=>469,4258=>573,
+4259=>650,4260=>502,4261=>506,4262=>481,4263=>746,4264=>491,4265=>495,4266=>888,4267=>488,4268=>464,
+4269=>745,4270=>483,4271=>489,4272=>721,4273=>464,4274=>578,4275=>590,4276=>611,4277=>491,4278=>663,
+4279=>489,4280=>544,4281=>479,4282=>527,4283=>488,4284=>560,4285=>461,4286=>467,4287=>546,4288=>483,
+4289=>487,4290=>562,4291=>477,4292=>491,4293=>471,4304=>522,4305=>518,4306=>621,4307=>716,4308=>517,
+4309=>519,4310=>518,4311=>796,4312=>518,4313=>518,4314=>934,4315=>517,4316=>519,4317=>787,4318=>515,
+4319=>514,4320=>788,4321=>573,4322=>620,4323=>593,4324=>639,4325=>516,4326=>714,4327=>518,4328=>572,
+4329=>518,4330=>555,4331=>518,4332=>562,4333=>509,4334=>572,4335=>677,4336=>523,4337=>517,4338=>595,
+4339=>480,4340=>519,4341=>484,7680=>667,7681=>500,7682=>667,7683=>500,7684=>667,7685=>500,7686=>667,
+7687=>500,7688=>667,7689=>444,7690=>744,7691=>500,7692=>744,7693=>500,7694=>744,7695=>500,7696=>744,
+7697=>500,7698=>744,7699=>500,7700=>667,7701=>444,7702=>667,7703=>444,7704=>670,7705=>444,7706=>670,
+7707=>444,7708=>670,7709=>444,7710=>656,7711=>333,7712=>722,7713=>500,7714=>778,7715=>556,7716=>778,
+7717=>556,7718=>778,7719=>556,7720=>778,7721=>556,7722=>778,7723=>556,7724=>393,7725=>278,7726=>389,
+7727=>278,7728=>664,7729=>500,7730=>664,7731=>500,7732=>664,7733=>500,7734=>609,7735=>278,7736=>609,
+7737=>278,7738=>609,7739=>278,7740=>609,7741=>278,7742=>896,7743=>778,7744=>896,7745=>778,7746=>896,
+7747=>778,7748=>722,7749=>556,7750=>722,7751=>556,7752=>722,7753=>556,7754=>722,7755=>556,7756=>722,
+7757=>500,7758=>722,7759=>500,7760=>722,7761=>500,7762=>722,7763=>500,7764=>614,7765=>500,7766=>614,
+7767=>500,7768=>672,7769=>389,7770=>672,7771=>389,7772=>672,7773=>389,7774=>672,7775=>389,7776=>556,
+7777=>389,7778=>556,7779=>389,7780=>556,7781=>389,7782=>556,7783=>389,7784=>556,7785=>389,7786=>611,
+7787=>278,7788=>611,7789=>278,7790=>611,7791=>278,7792=>611,7793=>278,7794=>722,7795=>556,7796=>722,
+7797=>556,7798=>722,7799=>556,7800=>722,7801=>556,7802=>722,7803=>556,7804=>667,7805=>444,7806=>667,
+7807=>444,7808=>889,7809=>667,7810=>889,7811=>667,7812=>889,7813=>667,7814=>889,7815=>667,7816=>889,
+7817=>667,7818=>667,7819=>500,7820=>667,7821=>500,7822=>611,7823=>444,7824=>611,7825=>389,7826=>611,
+7827=>389,7828=>611,7829=>389,7830=>556,7831=>278,7832=>667,7833=>444,7835=>333,7840=>667,7841=>500,
+7842=>667,7843=>500,7844=>667,7845=>500,7846=>667,7847=>500,7848=>667,7849=>500,7850=>667,7851=>500,
+7852=>667,7853=>500,7854=>667,7855=>500,7856=>667,7857=>500,7858=>667,7859=>500,7860=>667,7861=>500,
+7862=>667,7863=>500,7864=>670,7865=>444,7866=>670,7867=>444,7868=>670,7869=>444,7870=>667,7871=>444,
+7872=>667,7873=>444,7874=>667,7875=>444,7876=>667,7877=>444,7878=>670,7879=>444,7880=>393,7881=>278,
+7882=>393,7883=>278,7884=>722,7885=>500,7886=>722,7887=>500,7888=>722,7889=>500,7890=>722,7891=>500,
+7892=>722,7893=>500,7894=>722,7895=>500,7896=>722,7897=>500,7898=>908,7899=>640,7900=>908,7901=>640,
+7902=>908,7903=>640,7904=>908,7905=>640,7906=>908,7907=>640,7908=>722,7909=>556,7910=>722,7911=>556,
+7912=>920,7913=>730,7914=>920,7915=>730,7916=>920,7917=>730,7918=>920,7919=>730,7920=>920,7921=>730,
+7922=>611,7923=>444,7924=>611,7925=>444,7926=>611,7927=>444,7928=>611,7929=>444,7936=>605,7937=>605,
+7938=>605,7939=>605,7940=>605,7941=>605,7942=>605,7943=>605,7944=>667,7945=>667,7946=>667,7947=>667,
+7948=>667,7949=>667,7950=>667,7951=>667,7952=>440,7953=>440,7954=>440,7955=>440,7956=>440,7957=>440,
+7960=>667,7961=>667,7962=>667,7963=>667,7964=>667,7965=>667,7968=>605,7969=>605,7970=>605,7971=>605,
+7972=>605,7973=>605,7974=>605,7975=>605,7976=>778,7977=>778,7978=>778,7979=>778,7980=>778,7981=>778,
+7982=>778,7983=>778,7984=>330,7985=>330,7986=>330,7987=>330,7988=>330,7989=>330,7990=>330,7991=>330,
+7992=>389,7993=>389,7994=>389,7995=>389,7996=>389,7997=>389,7998=>389,7999=>389,8000=>550,8001=>550,
+8002=>550,8003=>550,8004=>550,8005=>550,8008=>722,8009=>722,8010=>722,8011=>722,8012=>722,8013=>722,
+8016=>550,8017=>550,8018=>550,8019=>550,8020=>550,8021=>550,8022=>550,8023=>550,8025=>722,8027=>722,
+8029=>722,8031=>722,8032=>715,8033=>715,8034=>715,8035=>715,8036=>715,8037=>715,8038=>715,8039=>715,
+8040=>741,8041=>741,8042=>741,8043=>741,8044=>741,8045=>741,8046=>741,8047=>741,8048=>605,8049=>605,
+8050=>440,8051=>440,8052=>605,8053=>605,8054=>330,8055=>330,8056=>550,8057=>550,8058=>550,8059=>550,
+8060=>715,8061=>715,8064=>605,8065=>605,8066=>605,8067=>605,8068=>605,8069=>605,8070=>605,8071=>605,
+8072=>667,8073=>667,8074=>667,8075=>667,8076=>667,8077=>667,8078=>667,8079=>667,8080=>605,8081=>605,
+8082=>605,8083=>605,8084=>605,8085=>605,8086=>605,8087=>605,8088=>778,8089=>778,8090=>778,8091=>778,
+8092=>778,8093=>778,8094=>778,8095=>778,8096=>715,8097=>715,8098=>715,8099=>715,8100=>715,8101=>715,
+8102=>715,8103=>715,8104=>741,8105=>741,8106=>741,8107=>741,8108=>741,8109=>741,8110=>741,8111=>741,
+8112=>605,8113=>605,8114=>605,8115=>605,8116=>605,8118=>605,8119=>605,8120=>667,8121=>667,8122=>667,
+8123=>667,8124=>667,8125=>250,8126=>0,8127=>500,8128=>500,8129=>550,8130=>605,8131=>605,8132=>605,
+8134=>605,8135=>605,8136=>667,8137=>667,8138=>778,8139=>778,8140=>778,8141=>500,8142=>500,8143=>500,
+8144=>330,8145=>330,8146=>330,8147=>330,8150=>330,8151=>330,8152=>389,8153=>389,8154=>389,8155=>389,
+8157=>500,8158=>500,8159=>500,8160=>550,8161=>550,8162=>550,8163=>550,8164=>550,8165=>550,8166=>550,
+8167=>550,8168=>722,8169=>722,8170=>722,8171=>722,8172=>611,8173=>550,8174=>550,8175=>500,8178=>715,
+8179=>715,8180=>715,8182=>715,8183=>715,8184=>722,8185=>722,8186=>741,8187=>741,8188=>741,8189=>500,
+8190=>500,8208=>333,8209=>333,8210=>500,8213=>1000,8219=>333,8223=>500,8227=>560,8241=>1618,8242=>278,
+8243=>556,8244=>834,8251=>727,8252=>778,8253=>733,8255=>953,8256=>953,8257=>338,8258=>931,8259=>333,
+8260=>167,8261=>332,8262=>332,8263=>1000,8264=>889,8265=>889,8266=>500,8304=>300,8308=>300,8309=>300,
+8310=>300,8311=>300,8312=>300,8313=>300,8319=>300,8320=>300,8321=>274,8322=>300,8323=>300,8324=>300,
+8325=>300,8326=>300,8327=>300,8328=>300,8329=>300,8352=>667,8353=>667,8354=>667,8355=>667,8356=>500,
+8357=>778,8358=>722,8359=>705,8361=>889,8373=>500,8451=>1067,8455=>631,8457=>1056,8462=>556,8463=>556,
+8470=>981,8471=>747,8483=>667,8486=>741,8487=>741,8489=>330,8490=>664,8491=>667,8494=>551,8495=>444,
+8498=>667,8500=>500,8501=>504,8502=>504,8503=>313,8504=>504,8531=>750,8532=>750,8533=>750,8534=>750,
+8535=>750,8536=>750,8537=>750,8538=>750,8539=>750,8540=>750,8541=>750,8542=>750,8543=>750,8544=>393,
+8545=>786,8546=>1179,8547=>1060,8548=>667,8549=>1060,8550=>1453,8551=>1846,8552=>1060,8553=>667,8554=>1060,
+8555=>1453,8556=>609,8557=>667,8558=>744,8559=>896,8560=>278,8561=>556,8562=>834,8563=>722,8564=>444,
+8565=>722,8566=>1000,8567=>1278,8568=>778,8569=>500,8570=>778,8571=>1056,8572=>278,8573=>444,8574=>500,
+8575=>778,8592=>964,8593=>964,8594=>964,8595=>964,8596=>964,8597=>964,8598=>964,8599=>964,8600=>964,
+8601=>964,8602=>964,8603=>964,8606=>964,8607=>964,8608=>964,8609=>964,8610=>964,8611=>964,8612=>964,
+8613=>964,8614=>964,8615=>964,8616=>964,8633=>964,8634=>964,8644=>964,8645=>964,8646=>964,8647=>964,
+8648=>964,8649=>964,8650=>964,8676=>964,8677=>964,8706=>494,8710=>612,8721=>713,8722=>606,8725=>750,
+8730=>549,8734=>752,8800=>570,8804=>570,8805=>570,9674=>494,9833=>333,9834=>556,9835=>778,9836=>778,
+9837=>556,9838=>556,9839=>556,11799=>333,63033=>500,63034=>500,63035=>500,63036=>500,63037=>500,63038=>500,
+63039=>500,63040=>500,63041=>500,63166=>278,63171=>333,63196=>500,64256=>583,64257=>556,64258=>556,64259=>824,
+64260=>821,64262=>662,65533=>788);
+$enc='';
+$diff='';
+$file='freeserifbi.z';
+$ctg='freeserifbi.ctg.z';
+$originalsize=245112;
+?> \ No newline at end of file
diff --git a/admin/exportclases/fonts/freeserifbi.z b/admin/exportclases/fonts/freeserifbi.z
new file mode 100644
index 0000000..290a818
--- /dev/null
+++ b/admin/exportclases/fonts/freeserifbi.z
Binary files differ
diff --git a/admin/exportclases/fonts/freeserifi.ctg.z b/admin/exportclases/fonts/freeserifi.ctg.z
new file mode 100644
index 0000000..36388c3
--- /dev/null
+++ b/admin/exportclases/fonts/freeserifi.ctg.z
Binary files differ
diff --git a/admin/exportclases/fonts/freeserifi.php b/admin/exportclases/fonts/freeserifi.php
new file mode 100644
index 0000000..c0e6590
--- /dev/null
+++ b/admin/exportclases/fonts/freeserifi.php
@@ -0,0 +1,196 @@
+<?php
+$type='TrueTypeUnicode';
+$name='FreeSerifItalic';
+$desc=array('Ascent'=>900,'Descent'=>-300,'CapHeight'=>-29,'Flags'=>96,'FontBBox'=>'[-674 -438 1673 1114]','ItalicAngle'=>-16.5,'StemV'=>70,'MissingWidth'=>600);
+$up=-125;
+$ut=50;
+$dw=600;
+$cw=array(
+32=>250,33=>333,34=>420,35=>500,36=>500,37=>833,38=>778,39=>214,40=>333,41=>333,
+42=>500,43=>675,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500,50=>500,51=>500,
+52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>333,59=>333,60=>675,61=>675,
+62=>675,63=>500,64=>920,65=>611,66=>611,67=>667,68=>722,69=>604,70=>611,71=>722,
+72=>722,73=>339,74=>444,75=>652,76=>556,77=>828,78=>657,79=>722,80=>603,81=>722,
+82=>616,83=>500,84=>556,85=>722,86=>611,87=>833,88=>611,89=>556,90=>556,91=>389,
+92=>278,93=>389,94=>422,95=>500,96=>333,97=>500,98=>500,99=>444,100=>500,101=>444,
+102=>278,103=>500,104=>500,105=>278,106=>278,107=>444,108=>278,109=>722,110=>500,111=>500,
+112=>500,113=>500,114=>389,115=>389,116=>278,117=>500,118=>444,119=>667,120=>444,121=>444,
+122=>389,123=>400,124=>275,125=>400,126=>541,8364=>500,8218=>333,402=>278,8222=>556,8230=>889,
+8224=>500,8225=>500,710=>333,8240=>1000,352=>500,8249=>333,338=>944,381=>556,8216=>333,8217=>333,
+8220=>556,8221=>556,8226=>350,8211=>500,8212=>889,732=>333,8482=>980,353=>389,8250=>333,339=>667,
+382=>389,376=>556,160=>250,161=>389,162=>500,163=>500,164=>500,165=>500,166=>275,167=>500,
+168=>333,169=>760,170=>276,171=>500,172=>675,173=>333,174=>760,175=>333,176=>400,177=>675,
+178=>300,179=>300,180=>333,181=>500,182=>523,183=>250,184=>333,185=>250,186=>310,187=>500,
+188=>750,189=>750,190=>750,191=>500,192=>611,193=>611,194=>611,195=>611,196=>611,197=>611,
+198=>889,199=>667,200=>611,201=>611,202=>611,203=>611,204=>333,205=>333,206=>333,207=>333,
+208=>722,209=>667,210=>722,211=>722,212=>722,213=>722,214=>722,215=>675,216=>722,217=>722,
+218=>722,219=>722,220=>722,221=>556,222=>611,223=>500,224=>500,225=>500,226=>500,227=>500,
+228=>500,229=>500,230=>667,231=>444,232=>444,233=>444,234=>444,235=>444,236=>278,237=>278,
+238=>278,239=>278,240=>500,241=>500,242=>500,243=>500,244=>500,245=>500,246=>500,247=>675,
+248=>500,249=>500,250=>500,251=>500,252=>500,253=>444,254=>500,255=>444,256=>611,257=>500,
+258=>611,259=>500,260=>611,261=>500,262=>667,263=>444,264=>667,265=>444,266=>667,267=>444,
+268=>667,269=>444,270=>722,271=>500,272=>722,273=>500,274=>611,275=>444,276=>611,277=>444,
+278=>611,279=>444,280=>611,281=>444,282=>611,283=>444,284=>722,285=>500,286=>722,287=>500,
+288=>722,289=>500,290=>722,291=>500,292=>722,293=>500,294=>722,295=>500,296=>333,297=>278,
+298=>333,299=>278,300=>333,301=>278,302=>333,303=>278,304=>333,305=>278,306=>707,307=>553,
+308=>444,309=>278,310=>667,311=>444,312=>444,313=>556,314=>278,315=>556,316=>278,317=>556,
+318=>278,319=>556,320=>528,321=>556,322=>278,323=>667,324=>500,325=>667,326=>500,327=>667,
+328=>500,329=>500,330=>667,331=>500,332=>722,333=>500,334=>722,335=>500,336=>722,337=>500,
+340=>611,341=>389,342=>611,343=>389,344=>611,345=>389,346=>500,347=>389,348=>500,349=>389,
+350=>500,351=>389,354=>556,355=>278,356=>556,357=>278,358=>556,359=>278,360=>722,361=>500,
+362=>722,363=>500,364=>722,365=>500,366=>722,367=>500,368=>722,369=>500,370=>722,371=>500,
+372=>833,373=>667,374=>556,375=>444,377=>556,378=>389,379=>556,380=>389,383=>278,384=>500,
+385=>781,386=>682,387=>500,388=>611,389=>500,390=>667,391=>866,392=>703,393=>722,394=>892,
+395=>682,396=>500,397=>534,398=>611,399=>722,400=>518,401=>611,403=>863,404=>611,405=>728,
+406=>278,407=>333,408=>792,409=>444,410=>278,411=>480,412=>900,413=>779,414=>500,415=>722,
+416=>932,417=>500,418=>908,419=>722,420=>772,421=>500,422=>611,423=>500,424=>389,425=>657,
+426=>428,427=>278,428=>556,429=>278,430=>556,431=>948,432=>721,433=>747,434=>755,435=>636,
+436=>549,437=>556,438=>389,439=>556,440=>556,441=>389,442=>389,443=>500,444=>615,445=>439,
+446=>389,447=>500,448=>275,449=>500,450=>600,451=>333,452=>1278,453=>1111,454=>889,455=>1000,
+456=>834,457=>556,458=>1101,459=>935,460=>778,461=>611,462=>500,463=>339,464=>278,465=>722,
+466=>500,467=>722,468=>500,469=>722,470=>500,471=>722,472=>500,473=>722,474=>500,475=>722,
+476=>500,477=>444,478=>611,479=>500,480=>611,481=>500,482=>889,483=>667,484=>722,485=>500,
+486=>722,487=>500,488=>652,489=>444,490=>722,491=>500,492=>722,493=>500,494=>556,495=>389,
+496=>278,497=>1278,498=>1111,499=>889,500=>817,501=>595,504=>657,505=>500,506=>611,507=>500,
+508=>889,509=>667,510=>722,511=>500,512=>611,513=>500,514=>611,515=>500,516=>604,517=>444,
+518=>604,519=>444,520=>339,521=>278,522=>339,523=>278,524=>722,525=>500,526=>722,527=>500,
+528=>616,529=>389,530=>616,531=>389,532=>722,533=>500,534=>722,535=>500,536=>500,537=>389,
+538=>556,539=>278,542=>722,543=>500,550=>611,551=>500,552=>604,553=>444,554=>722,555=>500,
+556=>722,557=>500,558=>722,559=>500,560=>722,561=>500,562=>556,563=>444,592=>500,593=>587,
+594=>587,595=>500,596=>444,599=>697,600=>444,601=>444,603=>426,604=>426,608=>640,609=>500,
+613=>500,616=>278,618=>278,623=>722,629=>500,633=>389,643=>278,647=>278,648=>278,649=>500,
+650=>517,651=>500,652=>444,653=>667,654=>444,658=>389,670=>444,711=>333,728=>333,729=>333,
+730=>333,731=>333,733=>333,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,
+775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,
+785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,
+795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,
+805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,
+815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,
+825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,864=>0,
+865=>0,884=>199,885=>199,890=>332,894=>333,900=>257,901=>333,902=>641,903=>250,904=>797,
+905=>874,906=>486,908=>720,910=>802,911=>825,912=>267,913=>641,914=>581,915=>611,916=>660,
+917=>611,918=>606,919=>742,920=>672,921=>333,922=>667,923=>641,924=>833,925=>657,926=>678,
+927=>682,928=>749,929=>611,931=>657,932=>596,933=>676,934=>722,935=>611,936=>863,937=>744,
+938=>333,939=>696,940=>587,941=>426,942=>534,943=>267,944=>534,945=>587,946=>534,947=>480,
+948=>534,949=>426,950=>480,951=>534,952=>534,953=>267,954=>527,955=>480,956=>534,957=>480,
+958=>480,959=>534,960=>587,961=>534,962=>426,963=>534,964=>426,965=>534,966=>640,967=>480,
+968=>693,969=>693,970=>267,971=>534,972=>534,973=>534,974=>693,976=>534,977=>587,978=>620,
+979=>707,980=>620,981=>640,982=>684,983=>534,985=>534,986=>426,987=>426,988=>611,989=>445,
+991=>480,993=>616,1008=>534,1009=>534,1010=>485,1013=>280,1024=>611,1025=>611,1026=>669,1027=>556,
+1028=>667,1029=>500,1030=>333,1031=>333,1032=>444,1033=>896,1034=>922,1035=>758,1036=>743,1037=>814,
+1038=>730,1039=>814,1040=>611,1041=>682,1042=>611,1043=>640,1044=>747,1045=>611,1046=>1073,1047=>508,
+1048=>814,1049=>814,1050=>729,1051=>755,1052=>833,1053=>722,1054=>722,1055=>805,1056=>611,1057=>667,
+1058=>556,1059=>730,1060=>801,1061=>611,1062=>807,1063=>772,1064=>1063,1065=>1065,1066=>731,1067=>961,
+1068=>645,1069=>671,1070=>1191,1071=>746,1072=>500,1073=>500,1074=>429,1075=>354,1076=>552,1077=>444,
+1078=>1058,1079=>363,1080=>500,1081=>500,1082=>491,1083=>538,1084=>731,1085=>500,1086=>500,1087=>500,
+1088=>500,1089=>444,1090=>722,1091=>444,1092=>771,1093=>444,1094=>500,1095=>500,1096=>750,1097=>750,
+1098=>492,1099=>684,1100=>420,1101=>457,1102=>700,1103=>560,1104=>444,1105=>444,1106=>500,1107=>454,
+1108=>444,1109=>389,1110=>278,1111=>278,1112=>278,1113=>694,1114=>646,1115=>500,1116=>491,1117=>500,
+1118=>444,1119=>500,1164=>645,1165=>420,1166=>611,1167=>500,1168=>556,1169=>418,1170=>556,1171=>354,
+1172=>598,1173=>452,1174=>1073,1175=>1058,1176=>575,1177=>391,1178=>743,1179=>491,1180=>743,1181=>491,
+1182=>743,1183=>491,1184=>743,1185=>491,1186=>722,1187=>500,1188=>722,1189=>500,1190=>1000,1191=>500,
+1192=>667,1193=>444,1194=>667,1195=>444,1196=>556,1197=>484,1198=>556,1199=>556,1200=>556,1201=>556,
+1202=>611,1203=>444,1204=>807,1205=>500,1206=>772,1207=>500,1208=>772,1209=>500,1210=>722,1211=>500,
+1212=>722,1213=>444,1214=>722,1215=>444,1216=>333,1217=>1073,1218=>1058,1219=>743,1220=>491,1223=>722,
+1224=>500,1227=>772,1228=>500,1232=>611,1233=>500,1234=>611,1235=>500,1236=>889,1237=>667,1238=>611,
+1239=>444,1240=>722,1241=>444,1242=>444,1243=>444,1244=>1073,1245=>1058,1246=>575,1247=>391,1248=>575,
+1249=>391,1250=>814,1251=>500,1252=>814,1253=>500,1254=>722,1255=>500,1256=>722,1257=>500,1258=>722,
+1259=>500,1260=>671,1261=>457,1262=>730,1263=>444,1264=>730,1265=>444,1266=>730,1267=>444,1268=>772,
+1269=>500,1272=>1021,1273=>684,1457=>0,1458=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,
+1465=>0,1467=>0,1472=>126,1475=>418,1488=>537,1489=>537,1490=>350,1491=>537,1492=>537,1493=>350,
+1494=>350,1495=>537,1496=>537,1497=>350,1498=>537,1499=>537,1500=>537,1501=>537,1502=>537,1503=>350,
+1504=>350,1505=>537,1506=>537,1507=>537,1508=>537,1509=>537,1510=>537,1511=>537,1512=>537,1513=>537,
+1514=>537,1520=>537,1521=>537,1522=>537,1523=>396,1524=>396,2404=>318,2405=>446,2433=>0,2434=>300,
+2435=>312,2437=>594,2438=>776,2439=>469,2440=>513,2441=>535,2442=>561,2443=>604,2444=>481,2447=>580,
+2448=>604,2451=>540,2452=>620,2453=>570,2454=>485,2455=>484,2456=>471,2457=>457,2458=>408,2459=>452,
+2460=>591,2461=>551,2462=>771,2463=>414,2464=>404,2465=>522,2466=>415,2467=>450,2468=>551,2469=>477,
+2470=>478,2471=>449,2472=>448,2474=>535,2475=>611,2476=>443,2477=>534,2478=>492,2479=>474,2480=>442,
+2482=>542,2486=>507,2487=>467,2488=>523,2489=>419,2492=>0,2493=>419,2494=>202,2495=>189,2496=>202,
+2497=>0,2498=>0,2499=>0,2500=>0,2503=>294,2504=>289,2507=>774,2508=>825,2509=>0,2510=>356,
+2519=>219,2524=>523,2525=>420,2527=>469,2528=>604,2529=>481,2530=>0,2531=>0,2534=>500,2535=>437,
+2536=>479,2537=>507,2538=>497,2539=>500,2540=>482,2541=>503,2542=>517,2543=>481,2544=>443,2545=>443,
+2546=>429,2547=>383,2548=>432,2549=>478,2550=>539,2551=>158,2552=>365,2553=>280,2554=>357,3585=>606,
+3586=>550,3587=>622,3588=>604,3589=>619,3590=>674,3591=>461,3592=>499,3593=>613,3594=>550,3595=>622,
+3596=>817,3597=>817,3598=>656,3599=>656,3600=>463,3601=>717,3602=>820,3603=>826,3604=>604,3605=>616,
+3606=>602,3607=>650,3608=>514,3609=>626,3610=>626,3611=>626,3612=>647,3613=>647,3614=>676,3615=>676,
+3616=>643,3617=>616,3618=>574,3619=>480,3620=>602,3621=>579,3622=>643,3623=>483,3624=>606,3625=>654,
+3626=>579,3627=>654,3628=>676,3629=>584,3630=>584,3631=>524,3632=>444,3633=>0,3634=>408,3635=>408,
+3636=>0,3637=>0,3638=>0,3639=>0,3640=>0,3641=>0,3642=>0,3647=>712,3648=>320,3649=>586,
+3650=>321,3651=>317,3652=>321,3653=>290,3654=>599,3655=>0,3656=>0,3657=>0,3658=>0,3659=>0,
+3660=>0,3661=>0,3662=>0,3663=>780,3664=>672,3665=>672,3666=>672,3667=>672,3668=>672,3669=>672,
+3670=>672,3671=>672,3672=>672,3673=>672,3674=>694,3675=>938,4256=>453,4257=>448,4258=>546,4259=>619,
+4260=>478,4261=>481,4262=>459,4263=>707,4264=>467,4265=>471,4266=>842,4267=>464,4268=>443,4269=>707,
+4270=>460,4271=>465,4272=>686,4273=>440,4274=>550,4275=>561,4276=>580,4277=>467,4278=>630,4279=>466,
+4280=>517,4281=>456,4282=>502,4283=>464,4284=>534,4285=>440,4286=>443,4287=>522,4288=>460,4289=>463,
+4290=>536,4291=>455,4292=>468,4293=>449,4304=>454,4305=>452,4306=>544,4307=>629,4308=>451,4309=>452,
+4310=>452,4311=>702,4312=>451,4313=>452,4314=>820,4315=>451,4316=>453,4317=>695,4318=>449,4319=>448,
+4320=>694,4321=>501,4322=>544,4323=>517,4324=>560,4325=>450,4326=>627,4327=>452,4328=>491,4329=>452,
+4330=>485,4331=>452,4332=>485,4333=>443,4334=>500,4335=>582,4336=>455,4337=>451,4338=>480,4339=>414,
+4340=>453,4341=>418,7680=>611,7681=>500,7682=>611,7683=>500,7684=>611,7685=>500,7686=>611,7687=>500,
+7688=>667,7689=>444,7690=>722,7691=>500,7692=>722,7693=>500,7694=>722,7695=>500,7696=>722,7697=>500,
+7698=>722,7699=>500,7700=>611,7701=>444,7702=>611,7703=>444,7704=>604,7705=>444,7706=>604,7707=>444,
+7708=>604,7709=>444,7710=>611,7711=>278,7712=>722,7713=>500,7714=>722,7715=>500,7716=>722,7717=>500,
+7718=>722,7719=>500,7720=>722,7721=>500,7722=>722,7723=>500,7724=>339,7725=>278,7726=>333,7727=>278,
+7728=>652,7729=>444,7730=>652,7731=>444,7732=>652,7733=>444,7734=>556,7735=>278,7736=>556,7737=>278,
+7738=>556,7739=>278,7740=>556,7741=>278,7742=>828,7743=>722,7744=>828,7745=>722,7746=>828,7747=>722,
+7748=>657,7749=>500,7750=>657,7751=>500,7752=>657,7753=>500,7754=>657,7755=>500,7756=>722,7757=>500,
+7758=>722,7759=>500,7760=>722,7761=>500,7762=>722,7763=>500,7764=>603,7765=>500,7766=>603,7767=>500,
+7768=>616,7769=>389,7770=>616,7771=>389,7772=>616,7773=>389,7774=>616,7775=>389,7776=>500,7777=>389,
+7778=>500,7779=>389,7780=>500,7781=>389,7782=>500,7783=>389,7784=>500,7785=>389,7786=>556,7787=>278,
+7788=>556,7789=>278,7790=>556,7791=>278,7792=>556,7793=>278,7794=>722,7795=>500,7796=>722,7797=>500,
+7798=>722,7799=>500,7800=>722,7801=>500,7802=>722,7803=>500,7804=>611,7805=>444,7806=>611,7807=>444,
+7808=>833,7809=>667,7810=>833,7811=>667,7812=>833,7813=>667,7814=>833,7815=>667,7816=>833,7817=>667,
+7818=>611,7819=>444,7820=>611,7821=>444,7822=>556,7823=>444,7824=>556,7825=>389,7826=>556,7827=>389,
+7828=>556,7829=>389,7830=>500,7831=>278,7832=>667,7833=>444,7835=>278,7840=>611,7841=>500,7842=>611,
+7843=>500,7844=>611,7845=>500,7846=>611,7847=>500,7848=>611,7849=>500,7850=>611,7851=>500,7852=>611,
+7853=>500,7854=>611,7855=>500,7856=>611,7857=>500,7858=>611,7859=>500,7860=>611,7861=>500,7862=>611,
+7863=>500,7864=>604,7865=>444,7866=>604,7867=>444,7868=>604,7869=>444,7870=>611,7871=>444,7872=>611,
+7873=>444,7874=>611,7875=>444,7876=>611,7877=>444,7878=>604,7879=>444,7880=>339,7881=>278,7882=>339,
+7883=>278,7884=>722,7885=>500,7886=>722,7887=>500,7888=>722,7889=>500,7890=>722,7891=>500,7892=>722,
+7893=>500,7894=>722,7895=>500,7896=>722,7897=>500,7908=>722,7909=>500,7910=>722,7911=>500,7922=>556,
+7923=>444,7924=>556,7925=>444,7926=>556,7927=>444,7928=>556,7929=>444,7936=>587,7937=>587,7938=>587,
+7939=>587,7940=>587,7941=>587,7942=>587,7943=>587,7944=>641,7945=>641,7946=>641,7947=>641,7948=>641,
+7949=>641,7950=>641,7951=>641,7952=>426,7953=>426,7954=>426,7955=>426,7956=>426,7957=>426,7960=>611,
+7961=>611,7962=>611,7963=>611,7964=>611,7965=>611,7968=>534,7969=>534,7970=>534,7971=>534,7972=>534,
+7973=>534,7974=>534,7975=>534,7976=>742,7977=>742,7978=>742,7979=>742,7980=>742,7981=>742,7982=>742,
+7983=>742,7984=>267,7985=>267,7986=>267,7987=>267,7988=>267,7989=>267,7990=>267,7991=>267,7992=>333,
+7993=>333,7994=>333,7995=>333,7996=>333,7997=>333,7998=>333,7999=>333,8000=>534,8001=>534,8002=>534,
+8003=>534,8004=>534,8005=>534,8008=>682,8009=>682,8010=>682,8011=>682,8012=>682,8013=>682,8016=>534,
+8017=>534,8018=>534,8019=>534,8020=>534,8021=>534,8022=>534,8023=>534,8025=>620,8027=>620,8029=>620,
+8031=>620,8032=>693,8033=>693,8034=>693,8035=>693,8036=>693,8037=>693,8038=>693,8039=>693,8040=>744,
+8041=>744,8042=>744,8043=>744,8044=>744,8045=>744,8046=>744,8047=>744,8048=>587,8049=>587,8050=>426,
+8051=>426,8052=>534,8053=>534,8054=>267,8055=>267,8056=>534,8057=>534,8058=>534,8059=>534,8060=>693,
+8061=>693,8064=>587,8065=>587,8066=>587,8067=>587,8068=>587,8069=>587,8070=>587,8071=>587,8072=>641,
+8073=>641,8074=>641,8075=>641,8076=>641,8077=>641,8078=>641,8079=>641,8080=>534,8081=>534,8082=>534,
+8083=>534,8084=>534,8085=>534,8086=>534,8087=>534,8088=>742,8089=>742,8090=>742,8091=>742,8092=>742,
+8093=>742,8094=>742,8095=>742,8096=>693,8097=>693,8098=>693,8099=>693,8100=>693,8101=>693,8102=>693,
+8103=>693,8104=>744,8105=>744,8106=>744,8107=>744,8108=>744,8109=>744,8110=>744,8111=>744,8112=>587,
+8113=>587,8114=>587,8115=>587,8116=>587,8118=>587,8119=>587,8120=>641,8121=>641,8122=>641,8123=>641,
+8124=>641,8125=>250,8126=>332,8127=>500,8128=>500,8129=>534,8130=>534,8131=>534,8132=>534,8134=>534,
+8135=>534,8136=>611,8137=>611,8138=>742,8139=>742,8140=>742,8141=>500,8142=>500,8143=>500,8144=>267,
+8145=>267,8146=>267,8147=>267,8150=>267,8151=>267,8152=>333,8153=>333,8154=>333,8155=>333,8157=>500,
+8158=>500,8159=>500,8160=>534,8161=>534,8162=>534,8163=>534,8164=>534,8165=>534,8166=>534,8167=>534,
+8168=>676,8169=>676,8170=>676,8171=>676,8172=>611,8173=>534,8174=>534,8175=>500,8178=>693,8179=>693,
+8180=>693,8182=>693,8183=>693,8184=>682,8185=>682,8186=>744,8187=>744,8188=>744,8189=>500,8190=>500,
+8204=>0,8205=>0,8208=>333,8209=>333,8210=>500,8213=>889,8219=>333,8223=>556,8227=>350,8228=>250,
+8229=>500,8241=>1601,8248=>469,8251=>629,8252=>666,8253=>500,8255=>953,8256=>1000,8257=>314,8258=>931,
+8259=>333,8260=>167,8261=>480,8262=>480,8263=>1000,8264=>833,8265=>833,8304=>300,8308=>300,8309=>300,
+8310=>300,8311=>300,8312=>300,8313=>300,8320=>300,8321=>250,8322=>300,8323=>300,8324=>300,8325=>300,
+8326=>300,8327=>300,8328=>300,8329=>300,8352=>698,8353=>667,8354=>667,8355=>611,8356=>500,8357=>722,
+8358=>667,8359=>611,8361=>833,8373=>611,8462=>500,8470=>1023,8471=>760,8479=>610,8483=>611,8486=>744,
+8487=>744,8494=>533,8498=>611,8531=>750,8532=>750,8533=>750,8534=>750,8535=>750,8536=>750,8537=>750,
+8538=>750,8539=>750,8540=>750,8541=>750,8542=>750,8543=>750,8544=>339,8545=>678,8546=>1017,8547=>950,
+8548=>611,8549=>950,8550=>1289,8551=>1628,8552=>950,8553=>611,8554=>950,8555=>1289,8556=>556,8557=>667,
+8558=>722,8559=>828,8560=>278,8561=>556,8562=>834,8563=>722,8564=>444,8565=>722,8566=>1000,8567=>1278,
+8568=>722,8569=>444,8570=>722,8571=>1000,8572=>278,8573=>444,8574=>500,8575=>722,8592=>964,8593=>499,
+8594=>964,8595=>499,8706=>494,8710=>612,8721=>713,8722=>675,8723=>675,8725=>750,8730=>549,8734=>677,
+8747=>416,8748=>750,8749=>1083,8750=>722,8751=>750,8800=>564,8804=>675,8805=>675,8992=>686,8993=>686,
+9674=>494,9833=>333,9834=>555,9835=>722,9836=>722,9837=>415,9838=>377,9839=>402,11799=>333,63033=>500,
+63034=>500,63035=>500,63036=>500,63037=>500,63038=>500,63039=>500,63040=>500,63041=>500,63166=>278,63171=>333,
+63196=>500,64256=>526,64257=>500,64258=>500,64259=>747,64260=>748,64262=>665,65533=>788);
+$enc='';
+$diff='';
+$file='freeserifi.z';
+$ctg='freeserifi.ctg.z';
+$originalsize=535848;
+?> \ No newline at end of file
diff --git a/admin/exportclases/fonts/freeserifi.z b/admin/exportclases/fonts/freeserifi.z
new file mode 100644
index 0000000..66fbfa4
--- /dev/null
+++ b/admin/exportclases/fonts/freeserifi.z
Binary files differ
diff --git a/admin/exportclases/fonts/helvetica.php b/admin/exportclases/fonts/helvetica.php
new file mode 100644
index 0000000..afdac14
--- /dev/null
+++ b/admin/exportclases/fonts/helvetica.php
@@ -0,0 +1,33 @@
+<?php
+ // core font definition file for TCPDF (www.tcpdf.org)
+$type='core';
+$dw=556;
+$cw=array(0=>278,1=>278,2=>278,3=>278,4=>278,5=>278,6=>278,7=>278,8=>278,9=>278,
+10=>278,11=>278,12=>278,13=>278,14=>278,15=>278,16=>278,17=>278,18=>278,19=>278,
+20=>278,21=>278,22=>278,23=>278,24=>278,25=>278,26=>278,27=>278,28=>278,29=>278,
+30=>278,31=>278,32=>278,33=>278,34=>355,35=>556,36=>556,37=>889,38=>667,39=>191,
+40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,
+50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>278,59=>278,
+60=>584,61=>584,62=>584,63=>556,64=>1015,65=>667,66=>667,67=>722,68=>722,69=>667,
+70=>611,71=>778,72=>722,73=>278,74=>500,75=>667,76=>556,77=>833,78=>722,79=>778,
+80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,
+90=>611,91=>278,92=>278,93=>278,94=>469,95=>556,96=>333,97=>556,98=>556,99=>500,
+100=>556,101=>556,102=>278,103=>556,104=>556,105=>222,106=>222,107=>500,108=>222,
+109=>833,110=>556,111=>556,112=>556,113=>556,114=>333,115=>500,116=>278,117=>556,
+118=>500,119=>722,120=>500,121=>500,122=>500,123=>334,124=>260,125=>334,126=>584,
+127=>350,128=>556,129=>350,130=>222,131=>556,132=>333,133=>1000,134=>556,135=>556,
+136=>333,137=>1000,138=>667,139=>333,140=>1000,141=>350,142=>611,143=>350,144=>350,
+145=>222,146=>222,147=>333,148=>333,149=>350,150=>556,151=>1000,152=>333,153=>1000,
+154=>500,155=>333,156=>944,157=>350,158=>500,159=>667,160=>278,161=>333,162=>556,
+163=>556,164=>556,165=>556,166=>260,167=>556,168=>333,169=>737,170=>370,171=>556,
+172=>584,173=>333,174=>737,175=>333,176=>400,177=>584,178=>333,179=>333,180=>333,
+181=>556,182=>537,183=>278,184=>333,185=>333,186=>365,187=>556,188=>834,189=>834,
+190=>834,191=>611,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667,198=>1000,
+199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,
+208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,
+217=>722,218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,
+226=>556,227=>556,228=>556,229=>556,230=>889,231=>500,232=>556,233=>556,234=>556,
+235=>556,236=>278,237=>278,238=>278,239=>278,240=>556,241=>556,242=>556,243=>556,
+244=>556,245=>556,246=>556,247=>584,248=>611,249=>556,250=>556,251=>556,252=>556,
+253=>500,254=>556,255=>500);
+?>
diff --git a/admin/exportclases/fonts/helveticab.php b/admin/exportclases/fonts/helveticab.php
new file mode 100644
index 0000000..7ca4edb
--- /dev/null
+++ b/admin/exportclases/fonts/helveticab.php
@@ -0,0 +1,33 @@
+<?php
+ // core font definition file for TCPDF (www.tcpdf.org)
+$type='core';
+$dw=556;
+$cw=array(0=>278,1=>278,2=>278,3=>278,4=>278,5=>278,6=>278,7=>278,8=>278,9=>278,
+10=>278,11=>278,12=>278,13=>278,14=>278,15=>278,16=>278,17=>278,18=>278,19=>278,
+20=>278,21=>278,22=>278,23=>278,24=>278,25=>278,26=>278,27=>278,28=>278,29=>278,
+30=>278,31=>278,32=>278,33=>333,34=>474,35=>556,36=>556,37=>889,38=>722,39=>238,
+40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,
+50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>333,59=>333,
+60=>584,61=>584,62=>584,63=>611,64=>975,65=>722,66=>722,67=>722,68=>722,69=>667,
+70=>611,71=>778,72=>722,73=>278,74=>556,75=>722,76=>611,77=>833,78=>722,79=>778,
+80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,
+90=>611,91=>333,92=>278,93=>333,94=>584,95=>556,96=>333,97=>556,98=>611,99=>556,
+100=>611,101=>556,102=>333,103=>611,104=>611,105=>278,106=>278,107=>556,108=>278,
+109=>889,110=>611,111=>611,112=>611,113=>611,114=>389,115=>556,116=>333,117=>611,
+118=>556,119=>778,120=>556,121=>556,122=>500,123=>389,124=>280,125=>389,126=>584,
+127=>350,128=>556,129=>350,130=>278,131=>556,132=>500,133=>1000,134=>556,135=>556,
+136=>333,137=>1000,138=>667,139=>333,140=>1000,141=>350,142=>611,143=>350,144=>350,
+145=>278,146=>278,147=>500,148=>500,149=>350,150=>556,151=>1000,152=>333,153=>1000,
+154=>556,155=>333,156=>944,157=>350,158=>500,159=>667,160=>278,161=>333,162=>556,
+163=>556,164=>556,165=>556,166=>280,167=>556,168=>333,169=>737,170=>370,171=>556,
+172=>584,173=>333,174=>737,175=>333,176=>400,177=>584,178=>333,179=>333,180=>333,
+181=>611,182=>556,183=>278,184=>333,185=>333,186=>365,187=>556,188=>834,189=>834,
+190=>834,191=>611,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,198=>1000,
+199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,
+208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,
+217=>722,218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,
+226=>556,227=>556,228=>556,229=>556,230=>889,231=>556,232=>556,233=>556,234=>556,
+235=>556,236=>278,237=>278,238=>278,239=>278,240=>611,241=>611,242=>611,243=>611,
+244=>611,245=>611,246=>611,247=>584,248=>611,249=>611,250=>611,251=>611,252=>611,
+253=>556,254=>611,255=>556);
+?>
diff --git a/admin/exportclases/fonts/helveticabi.php b/admin/exportclases/fonts/helveticabi.php
new file mode 100644
index 0000000..7ca4edb
--- /dev/null
+++ b/admin/exportclases/fonts/helveticabi.php
@@ -0,0 +1,33 @@
+<?php
+ // core font definition file for TCPDF (www.tcpdf.org)
+$type='core';
+$dw=556;
+$cw=array(0=>278,1=>278,2=>278,3=>278,4=>278,5=>278,6=>278,7=>278,8=>278,9=>278,
+10=>278,11=>278,12=>278,13=>278,14=>278,15=>278,16=>278,17=>278,18=>278,19=>278,
+20=>278,21=>278,22=>278,23=>278,24=>278,25=>278,26=>278,27=>278,28=>278,29=>278,
+30=>278,31=>278,32=>278,33=>333,34=>474,35=>556,36=>556,37=>889,38=>722,39=>238,
+40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,
+50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>333,59=>333,
+60=>584,61=>584,62=>584,63=>611,64=>975,65=>722,66=>722,67=>722,68=>722,69=>667,
+70=>611,71=>778,72=>722,73=>278,74=>556,75=>722,76=>611,77=>833,78=>722,79=>778,
+80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,
+90=>611,91=>333,92=>278,93=>333,94=>584,95=>556,96=>333,97=>556,98=>611,99=>556,
+100=>611,101=>556,102=>333,103=>611,104=>611,105=>278,106=>278,107=>556,108=>278,
+109=>889,110=>611,111=>611,112=>611,113=>611,114=>389,115=>556,116=>333,117=>611,
+118=>556,119=>778,120=>556,121=>556,122=>500,123=>389,124=>280,125=>389,126=>584,
+127=>350,128=>556,129=>350,130=>278,131=>556,132=>500,133=>1000,134=>556,135=>556,
+136=>333,137=>1000,138=>667,139=>333,140=>1000,141=>350,142=>611,143=>350,144=>350,
+145=>278,146=>278,147=>500,148=>500,149=>350,150=>556,151=>1000,152=>333,153=>1000,
+154=>556,155=>333,156=>944,157=>350,158=>500,159=>667,160=>278,161=>333,162=>556,
+163=>556,164=>556,165=>556,166=>280,167=>556,168=>333,169=>737,170=>370,171=>556,
+172=>584,173=>333,174=>737,175=>333,176=>400,177=>584,178=>333,179=>333,180=>333,
+181=>611,182=>556,183=>278,184=>333,185=>333,186=>365,187=>556,188=>834,189=>834,
+190=>834,191=>611,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,198=>1000,
+199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,
+208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,
+217=>722,218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,
+226=>556,227=>556,228=>556,229=>556,230=>889,231=>556,232=>556,233=>556,234=>556,
+235=>556,236=>278,237=>278,238=>278,239=>278,240=>611,241=>611,242=>611,243=>611,
+244=>611,245=>611,246=>611,247=>584,248=>611,249=>611,250=>611,251=>611,252=>611,
+253=>556,254=>611,255=>556);
+?>
diff --git a/admin/exportclases/fonts/helveticai.php b/admin/exportclases/fonts/helveticai.php
new file mode 100644
index 0000000..afdac14
--- /dev/null
+++ b/admin/exportclases/fonts/helveticai.php
@@ -0,0 +1,33 @@
+<?php
+ // core font definition file for TCPDF (www.tcpdf.org)
+$type='core';
+$dw=556;
+$cw=array(0=>278,1=>278,2=>278,3=>278,4=>278,5=>278,6=>278,7=>278,8=>278,9=>278,
+10=>278,11=>278,12=>278,13=>278,14=>278,15=>278,16=>278,17=>278,18=>278,19=>278,
+20=>278,21=>278,22=>278,23=>278,24=>278,25=>278,26=>278,27=>278,28=>278,29=>278,
+30=>278,31=>278,32=>278,33=>278,34=>355,35=>556,36=>556,37=>889,38=>667,39=>191,
+40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,
+50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>278,59=>278,
+60=>584,61=>584,62=>584,63=>556,64=>1015,65=>667,66=>667,67=>722,68=>722,69=>667,
+70=>611,71=>778,72=>722,73=>278,74=>500,75=>667,76=>556,77=>833,78=>722,79=>778,
+80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,
+90=>611,91=>278,92=>278,93=>278,94=>469,95=>556,96=>333,97=>556,98=>556,99=>500,
+100=>556,101=>556,102=>278,103=>556,104=>556,105=>222,106=>222,107=>500,108=>222,
+109=>833,110=>556,111=>556,112=>556,113=>556,114=>333,115=>500,116=>278,117=>556,
+118=>500,119=>722,120=>500,121=>500,122=>500,123=>334,124=>260,125=>334,126=>584,
+127=>350,128=>556,129=>350,130=>222,131=>556,132=>333,133=>1000,134=>556,135=>556,
+136=>333,137=>1000,138=>667,139=>333,140=>1000,141=>350,142=>611,143=>350,144=>350,
+145=>222,146=>222,147=>333,148=>333,149=>350,150=>556,151=>1000,152=>333,153=>1000,
+154=>500,155=>333,156=>944,157=>350,158=>500,159=>667,160=>278,161=>333,162=>556,
+163=>556,164=>556,165=>556,166=>260,167=>556,168=>333,169=>737,170=>370,171=>556,
+172=>584,173=>333,174=>737,175=>333,176=>400,177=>584,178=>333,179=>333,180=>333,
+181=>556,182=>537,183=>278,184=>333,185=>333,186=>365,187=>556,188=>834,189=>834,
+190=>834,191=>611,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667,198=>1000,
+199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,
+208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,
+217=>722,218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,
+226=>556,227=>556,228=>556,229=>556,230=>889,231=>500,232=>556,233=>556,234=>556,
+235=>556,236=>278,237=>278,238=>278,239=>278,240=>556,241=>556,242=>556,243=>556,
+244=>556,245=>556,246=>556,247=>584,248=>611,249=>556,250=>556,251=>556,252=>556,
+253=>500,254=>556,255=>500);
+?>
diff --git a/admin/exportclases/fonts/symbol.php b/admin/exportclases/fonts/symbol.php
new file mode 100644
index 0000000..16cfb73
--- /dev/null
+++ b/admin/exportclases/fonts/symbol.php
@@ -0,0 +1,32 @@
+<?php
+ // core font definition file for TCPDF (www.tcpdf.org)
+$type='core';
+$dw=500;
+$cw=array(0=>250,1=>250,2=>250,3=>250,4=>250,5=>250,6=>250,7=>250,8=>250,9=>250,
+10=>250,11=>250,12=>250,13=>250,14=>250,15=>250,16=>250,17=>250,18=>250,19=>250,
+20=>250,21=>250,22=>250,23=>250,24=>250,25=>250,26=>250,27=>250,28=>250,29=>250,
+30=>250,31=>250,32=>250,33=>333,34=>713,35=>500,36=>549,37=>833,38=>778,39=>439,
+40=>333,41=>333,42=>500,43=>549,44=>250,45=>549,46=>250,47=>278,48=>500,49=>500,
+50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>278,59=>278,
+60=>549,61=>549,62=>549,63=>444,64=>549,65=>722,66=>667,67=>722,68=>612,69=>611,
+70=>763,71=>603,72=>722,73=>333,74=>631,75=>722,76=>686,77=>889,78=>722,79=>722,
+80=>768,81=>741,82=>556,83=>592,84=>611,85=>690,86=>439,87=>768,88=>645,89=>795,
+90=>611,91=>333,92=>863,93=>333,94=>658,95=>500,96=>500,97=>631,98=>549,99=>549,
+100=>494,101=>439,102=>521,103=>411,104=>603,105=>329,106=>603,107=>549,108=>549,
+109=>576,110=>521,111=>549,112=>549,113=>521,114=>549,115=>603,116=>439,117=>576,
+118=>713,119=>686,120=>493,121=>686,122=>494,123=>480,124=>200,125=>480,126=>549,
+127=>0,128=>0,129=>0,130=>0,131=>0,132=>0,133=>0,134=>0,135=>0,136=>0,137=>0,
+138=>0,139=>0,140=>0,141=>0,142=>0,143=>0,144=>0,145=>0,146=>0,147=>0,148=>0,
+149=>0,150=>0,151=>0,152=>0,153=>0,154=>0,155=>0,156=>0,157=>0,158=>0,159=>0,
+160=>750,161=>620,162=>247,163=>549,164=>167,165=>713,166=>500,167=>753,168=>753,
+169=>753,170=>753,171=>1042,172=>987,173=>603,174=>987,175=>603,176=>400,177=>549,
+178=>411,179=>549,180=>549,181=>713,182=>494,183=>460,184=>549,185=>549,186=>549,
+187=>549,188=>1000,189=>603,190=>1000,191=>658,192=>823,193=>686,194=>795,195=>987,
+196=>768,197=>768,198=>823,199=>768,200=>768,201=>713,202=>713,203=>713,204=>713,
+205=>713,206=>713,207=>713,208=>768,209=>713,210=>790,211=>790,212=>890,213=>823,
+214=>549,215=>250,216=>713,217=>603,218=>603,219=>1042,220=>987,221=>603,222=>987,
+223=>603,224=>494,225=>329,226=>790,227=>790,228=>786,229=>713,230=>384,231=>384,
+232=>384,233=>384,234=>384,235=>384,236=>494,237=>494,238=>494,239=>494,240=>0,
+241=>329,242=>274,243=>686,244=>686,245=>686,246=>384,247=>384,248=>384,249=>384,
+250=>384,251=>384,252=>494,253=>494,254=>494,255=>0);
+?>
diff --git a/admin/exportclases/fonts/times.php b/admin/exportclases/fonts/times.php
new file mode 100644
index 0000000..1e71e5e
--- /dev/null
+++ b/admin/exportclases/fonts/times.php
@@ -0,0 +1,33 @@
+<?php
+ // core font definition file for TCPDF (www.tcpdf.org)
+$type='core';
+$dw=500;
+$cw=array(0=>250,1=>250,2=>250,3=>250,4=>250,5=>250,6=>250,7=>250,8=>250,9=>250,
+10=>250,11=>250,12=>250,13=>250,14=>250,15=>250,16=>250,17=>250,18=>250,19=>250,
+20=>250,21=>250,22=>250,23=>250,24=>250,25=>250,26=>250,27=>250,28=>250,29=>250,
+30=>250,31=>250,32=>250,33=>333,34=>408,35=>500,36=>500,37=>833,38=>778,39=>180,
+40=>333,41=>333,42=>500,43=>564,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500,
+50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>278,59=>278,
+60=>564,61=>564,62=>564,63=>444,64=>921,65=>722,66=>667,67=>667,68=>722,69=>611,
+70=>556,71=>722,72=>722,73=>333,74=>389,75=>722,76=>611,77=>889,78=>722,79=>722,
+80=>556,81=>722,82=>667,83=>556,84=>611,85=>722,86=>722,87=>944,88=>722,89=>722,
+90=>611,91=>333,92=>278,93=>333,94=>469,95=>500,96=>333,97=>444,98=>500,99=>444,
+100=>500,101=>444,102=>333,103=>500,104=>500,105=>278,106=>278,107=>500,108=>278,
+109=>778,110=>500,111=>500,112=>500,113=>500,114=>333,115=>389,116=>278,117=>500,
+118=>500,119=>722,120=>500,121=>500,122=>444,123=>480,124=>200,125=>480,126=>541,
+127=>350,128=>500,129=>350,130=>333,131=>500,132=>444,133=>1000,134=>500,135=>500,
+136=>333,137=>1000,138=>556,139=>333,140=>889,141=>350,142=>611,143=>350,144=>350,
+145=>333,146=>333,147=>444,148=>444,149=>350,150=>500,151=>1000,152=>333,153=>980,
+154=>389,155=>333,156=>722,157=>350,158=>444,159=>722,160=>250,161=>333,162=>500,
+163=>500,164=>500,165=>500,166=>200,167=>500,168=>333,169=>760,170=>276,171=>500,
+172=>564,173=>333,174=>760,175=>333,176=>400,177=>564,178=>300,179=>300,180=>333,
+181=>500,182=>453,183=>250,184=>333,185=>300,186=>310,187=>500,188=>750,189=>750,
+190=>750,191=>444,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,198=>889,
+199=>667,200=>611,201=>611,202=>611,203=>611,204=>333,205=>333,206=>333,207=>333,
+208=>722,209=>722,210=>722,211=>722,212=>722,213=>722,214=>722,215=>564,216=>722,
+217=>722,218=>722,219=>722,220=>722,221=>722,222=>556,223=>500,224=>444,225=>444,
+226=>444,227=>444,228=>444,229=>444,230=>667,231=>444,232=>444,233=>444,234=>444,
+235=>444,236=>278,237=>278,238=>278,239=>278,240=>500,241=>500,242=>500,243=>500,
+244=>500,245=>500,246=>500,247=>564,248=>500,249=>500,250=>500,251=>500,252=>500,
+253=>500,254=>500,255=>500);
+?>
diff --git a/admin/exportclases/fonts/timesb.php b/admin/exportclases/fonts/timesb.php
new file mode 100644
index 0000000..866a48c
--- /dev/null
+++ b/admin/exportclases/fonts/timesb.php
@@ -0,0 +1,33 @@
+<?php
+ // core font definition file for TCPDF (www.tcpdf.org)
+$type='core';
+$dw=500;
+$cw=array(0=>250,1=>250,2=>250,3=>250,4=>250,5=>250,6=>250,7=>250,8=>250,9=>250,
+10=>250,11=>250,12=>250,13=>250,14=>250,15=>250,16=>250,17=>250,18=>250,19=>250,
+20=>250,21=>250,22=>250,23=>250,24=>250,25=>250,26=>250,27=>250,28=>250,29=>250,
+30=>250,31=>250,32=>250,33=>333,34=>555,35=>500,36=>500,37=>1000,38=>833,39=>278,
+40=>333,41=>333,42=>500,43=>570,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500,
+50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>333,59=>333,
+60=>570,61=>570,62=>570,63=>500,64=>930,65=>722,66=>667,67=>722,68=>722,69=>667,
+70=>611,71=>778,72=>778,73=>389,74=>500,75=>778,76=>667,77=>944,78=>722,79=>778,
+80=>611,81=>778,82=>722,83=>556,84=>667,85=>722,86=>722,87=>1000,88=>722,89=>722,
+90=>667,91=>333,92=>278,93=>333,94=>581,95=>500,96=>333,97=>500,98=>556,99=>444,
+100=>556,101=>444,102=>333,103=>500,104=>556,105=>278,106=>333,107=>556,108=>278,
+109=>833,110=>556,111=>500,112=>556,113=>556,114=>444,115=>389,116=>333,117=>556,
+118=>500,119=>722,120=>500,121=>500,122=>444,123=>394,124=>220,125=>394,126=>520,
+127=>350,128=>500,129=>350,130=>333,131=>500,132=>500,133=>1000,134=>500,135=>500,
+136=>333,137=>1000,138=>556,139=>333,140=>1000,141=>350,142=>667,143=>350,144=>350,
+145=>333,146=>333,147=>500,148=>500,149=>350,150=>500,151=>1000,152=>333,153=>1000,
+154=>389,155=>333,156=>722,157=>350,158=>444,159=>722,160=>250,161=>333,162=>500,
+163=>500,164=>500,165=>500,166=>220,167=>500,168=>333,169=>747,170=>300,171=>500,
+172=>570,173=>333,174=>747,175=>333,176=>400,177=>570,178=>300,179=>300,180=>333,
+181=>556,182=>540,183=>250,184=>333,185=>300,186=>330,187=>500,188=>750,189=>750,
+190=>750,191=>500,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,198=>1000,
+199=>722,200=>667,201=>667,202=>667,203=>667,204=>389,205=>389,206=>389,207=>389,
+208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>570,216=>778,
+217=>722,218=>722,219=>722,220=>722,221=>722,222=>611,223=>556,224=>500,225=>500,
+226=>500,227=>500,228=>500,229=>500,230=>722,231=>444,232=>444,233=>444,234=>444,
+235=>444,236=>278,237=>278,238=>278,239=>278,240=>500,241=>556,242=>500,243=>500,
+244=>500,245=>500,246=>500,247=>570,248=>500,249=>556,250=>556,251=>556,252=>556,
+253=>500,254=>556,255=>500);
+?>
diff --git a/admin/exportclases/fonts/timesbi.php b/admin/exportclases/fonts/timesbi.php
new file mode 100644
index 0000000..e3ac79a
--- /dev/null
+++ b/admin/exportclases/fonts/timesbi.php
@@ -0,0 +1,33 @@
+<?php
+ // core font definition file for TCPDF (www.tcpdf.org)
+$type='core';
+$dw=500;
+$cw=array(0=>250,1=>250,2=>250,3=>250,4=>250,5=>250,6=>250,7=>250,8=>250,9=>250,
+10=>250,11=>250,12=>250,13=>250,14=>250,15=>250,16=>250,17=>250,18=>250,19=>250,
+20=>250,21=>250,22=>250,23=>250,24=>250,25=>250,26=>250,27=>250,28=>250,29=>250,
+30=>250,31=>250,32=>250,33=>389,34=>555,35=>500,36=>500,37=>833,38=>778,39=>278,
+40=>333,41=>333,42=>500,43=>570,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500,
+50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>333,59=>333,
+60=>570,61=>570,62=>570,63=>500,64=>832,65=>667,66=>667,67=>667,68=>722,69=>667,
+70=>667,71=>722,72=>778,73=>389,74=>500,75=>667,76=>611,77=>889,78=>722,79=>722,
+80=>611,81=>722,82=>667,83=>556,84=>611,85=>722,86=>667,87=>889,88=>667,89=>611,
+90=>611,91=>333,92=>278,93=>333,94=>570,95=>500,96=>333,97=>500,98=>500,99=>444,
+100=>500,101=>444,102=>333,103=>500,104=>556,105=>278,106=>278,107=>500,108=>278,
+109=>778,110=>556,111=>500,112=>500,113=>500,114=>389,115=>389,116=>278,117=>556,
+118=>444,119=>667,120=>500,121=>444,122=>389,123=>348,124=>220,125=>348,126=>570,
+127=>350,128=>500,129=>350,130=>333,131=>500,132=>500,133=>1000,134=>500,135=>500,
+136=>333,137=>1000,138=>556,139=>333,140=>944,141=>350,142=>611,143=>350,144=>350,
+145=>333,146=>333,147=>500,148=>500,149=>350,150=>500,151=>1000,152=>333,153=>1000,
+154=>389,155=>333,156=>722,157=>350,158=>389,159=>611,160=>250,161=>389,162=>500,
+163=>500,164=>500,165=>500,166=>220,167=>500,168=>333,169=>747,170=>266,171=>500,
+172=>606,173=>333,174=>747,175=>333,176=>400,177=>570,178=>300,179=>300,180=>333,
+181=>576,182=>500,183=>250,184=>333,185=>300,186=>300,187=>500,188=>750,189=>750,
+190=>750,191=>500,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667,198=>944,
+199=>667,200=>667,201=>667,202=>667,203=>667,204=>389,205=>389,206=>389,207=>389,
+208=>722,209=>722,210=>722,211=>722,212=>722,213=>722,214=>722,215=>570,216=>722,
+217=>722,218=>722,219=>722,220=>722,221=>611,222=>611,223=>500,224=>500,225=>500,
+226=>500,227=>500,228=>500,229=>500,230=>722,231=>444,232=>444,233=>444,234=>444,
+235=>444,236=>278,237=>278,238=>278,239=>278,240=>500,241=>556,242=>500,243=>500,
+244=>500,245=>500,246=>500,247=>570,248=>500,249=>556,250=>556,251=>556,252=>556,
+253=>444,254=>500,255=>444);
+?>
diff --git a/admin/exportclases/fonts/timesi.php b/admin/exportclases/fonts/timesi.php
new file mode 100644
index 0000000..472a273
--- /dev/null
+++ b/admin/exportclases/fonts/timesi.php
@@ -0,0 +1,33 @@
+<?php
+ // core font definition file for TCPDF (www.tcpdf.org)
+$type='core';
+$dw=500;
+$cw=array(0=>250,1=>250,2=>250,3=>250,4=>250,5=>250,6=>250,7=>250,8=>250,9=>250,
+10=>250,11=>250,12=>250,13=>250,14=>250,15=>250,16=>250,17=>250,18=>250,19=>250,
+20=>250,21=>250,22=>250,23=>250,24=>250,25=>250,26=>250,27=>250,28=>250,29=>250,
+30=>250,31=>250,32=>250,33=>333,34=>420,35=>500,36=>500,37=>833,38=>778,39=>214,
+40=>333,41=>333,42=>500,43=>675,44=>250,45=>333,46=>250,47=>278,48=>500,49=>500,
+50=>500,51=>500,52=>500,53=>500,54=>500,55=>500,56=>500,57=>500,58=>333,59=>333,
+60=>675,61=>675,62=>675,63=>500,64=>920,65=>611,66=>611,67=>667,68=>722,69=>611,
+70=>611,71=>722,72=>722,73=>333,74=>444,75=>667,76=>556,77=>833,78=>667,79=>722,
+80=>611,81=>722,82=>611,83=>500,84=>556,85=>722,86=>611,87=>833,88=>611,89=>556,
+90=>556,91=>389,92=>278,93=>389,94=>422,95=>500,96=>333,97=>500,98=>500,99=>444,
+100=>500,101=>444,102=>278,103=>500,104=>500,105=>278,106=>278,107=>444,108=>278,
+109=>722,110=>500,111=>500,112=>500,113=>500,114=>389,115=>389,116=>278,117=>500,
+118=>444,119=>667,120=>444,121=>444,122=>389,123=>400,124=>275,125=>400,126=>541,
+127=>350,128=>500,129=>350,130=>333,131=>500,132=>556,133=>889,134=>500,135=>500,
+136=>333,137=>1000,138=>500,139=>333,140=>944,141=>350,142=>556,143=>350,144=>350,
+145=>333,146=>333,147=>556,148=>556,149=>350,150=>500,151=>889,152=>333,153=>980,
+154=>389,155=>333,156=>667,157=>350,158=>389,159=>556,160=>250,161=>389,162=>500,
+163=>500,164=>500,165=>500,166=>275,167=>500,168=>333,169=>760,170=>276,171=>500,
+172=>675,173=>333,174=>760,175=>333,176=>400,177=>675,178=>300,179=>300,180=>333,
+181=>500,182=>523,183=>250,184=>333,185=>300,186=>310,187=>500,188=>750,189=>750,
+190=>750,191=>500,192=>611,193=>611,194=>611,195=>611,196=>611,197=>611,198=>889,
+199=>667,200=>611,201=>611,202=>611,203=>611,204=>333,205=>333,206=>333,207=>333,
+208=>722,209=>667,210=>722,211=>722,212=>722,213=>722,214=>722,215=>675,216=>722,
+217=>722,218=>722,219=>722,220=>722,221=>556,222=>611,223=>500,224=>500,225=>500,
+226=>500,227=>500,228=>500,229=>500,230=>667,231=>444,232=>444,233=>444,234=>444,
+235=>444,236=>278,237=>278,238=>278,239=>278,240=>500,241=>500,242=>500,243=>500,
+244=>500,245=>500,246=>500,247=>675,248=>500,249=>500,250=>500,251=>500,252=>500,
+253=>444,254=>500,255=>444);
+?>
diff --git a/admin/exportclases/fonts/uni2cid_ac15.php b/admin/exportclases/fonts/uni2cid_ac15.php
new file mode 100644
index 0000000..c86231d
--- /dev/null
+++ b/admin/exportclases/fonts/uni2cid_ac15.php
@@ -0,0 +1,23613 @@
+<?php
+// unicode to cid conversion table is from
+// ftp://ftp.oreilly.com/pub/examples/nutshell/cjkv/adobe/
+// cid2code.txt in ag15.tar.Z
+$cidinfo['uni2cid'] = array(
+32=>1,
+33=>2,
+34=>3,
+35=>4,
+36=>5,
+37=>6,
+38=>7,
+39=>8,
+40=>9,
+41=>10,
+42=>11,
+43=>12,
+44=>13,
+45=>14,
+46=>15,
+47=>16,
+48=>17,
+49=>18,
+50=>19,
+51=>20,
+52=>21,
+53=>22,
+54=>23,
+55=>24,
+56=>25,
+57=>26,
+58=>27,
+59=>28,
+60=>29,
+61=>30,
+62=>31,
+63=>32,
+64=>33,
+65=>34,
+66=>35,
+67=>36,
+68=>37,
+69=>38,
+70=>39,
+71=>40,
+72=>41,
+73=>42,
+74=>43,
+75=>44,
+76=>45,
+77=>46,
+78=>47,
+79=>48,
+80=>49,
+81=>50,
+82=>51,
+83=>52,
+84=>53,
+85=>54,
+86=>55,
+87=>56,
+88=>57,
+89=>58,
+90=>59,
+91=>60,
+92=>61,
+93=>62,
+94=>63,
+95=>64,
+96=>65,
+97=>66,
+98=>67,
+99=>68,
+100=>69,
+101=>70,
+102=>71,
+103=>72,
+104=>73,
+105=>74,
+106=>75,
+107=>76,
+108=>77,
+109=>78,
+110=>79,
+111=>80,
+112=>81,
+113=>82,
+114=>83,
+115=>84,
+116=>85,
+117=>86,
+118=>87,
+119=>88,
+120=>89,
+121=>90,
+122=>91,
+123=>92,
+124=>93,
+125=>94,
+126=>95,
+12288=>99,
+65292=>100,
+12289=>101,
+12290=>102,
+65294=>103,
+8226=>104,
+8231=>104,
+65307=>105,
+65306=>106,
+65311=>107,
+65281=>108,
+65072=>109,
+8230=>110,
+8943=>110,
+8229=>111,
+65104=>112,
+65380=>113,
+65105=>113,
+65106=>114,
+183=>115,
+65108=>116,
+65109=>117,
+65110=>118,
+65111=>119,
+65372=>120,
+8211=>121,
+65073=>122,
+8212=>123,
+65288=>128,
+65289=>129,
+65077=>130,
+65078=>131,
+65371=>132,
+65373=>133,
+65079=>134,
+65080=>135,
+12308=>136,
+12309=>137,
+65081=>138,
+65082=>139,
+12304=>140,
+12305=>141,
+65083=>142,
+65084=>143,
+12298=>144,
+12299=>145,
+65085=>146,
+65086=>147,
+12296=>148,
+12297=>149,
+65087=>150,
+65088=>151,
+12300=>152,
+12301=>153,
+65089=>154,
+65090=>155,
+12302=>156,
+12303=>157,
+65091=>158,
+65092=>159,
+65113=>160,
+65114=>161,
+65115=>162,
+65116=>163,
+65117=>164,
+65118=>165,
+8216=>166,
+8217=>167,
+8220=>168,
+8221=>169,
+12317=>170,
+12318=>171,
+8245=>172,
+8242=>173,
+65283=>174,
+65286=>175,
+65290=>176,
+8251=>177,
+167=>178,
+12291=>179,
+9675=>180,
+9679=>181,
+9651=>182,
+9650=>183,
+9678=>184,
+9734=>185,
+9733=>186,
+9671=>187,
+9670=>188,
+9633=>189,
+9632=>190,
+9661=>191,
+9660=>192,
+12963=>193,
+8453=>194,
+175=>195,
+772=>195,
+8254=>195,
+65507=>196,
+65343=>197,
+717=>198,
+65097=>199,
+65098=>200,
+65101=>201,
+65102=>202,
+65099=>203,
+65100=>204,
+65119=>205,
+65120=>206,
+65121=>207,
+65291=>208,
+65293=>209,
+215=>210,
+247=>211,
+177=>212,
+8730=>213,
+65308=>214,
+65310=>215,
+65309=>216,
+8806=>217,
+8807=>218,
+8800=>219,
+8734=>220,
+8786=>221,
+8801=>222,
+65122=>223,
+65123=>224,
+65124=>225,
+65125=>226,
+65126=>227,
+8764=>228,
+65374=>228,
+8745=>229,
+8746=>230,
+8869=>231,
+8736=>232,
+8735=>233,
+8895=>234,
+13266=>235,
+13265=>236,
+8747=>237,
+8750=>238,
+8757=>239,
+8756=>240,
+9792=>241,
+9794=>242,
+8853=>243,
+9793=>243,
+8857=>244,
+9737=>244,
+8593=>245,
+8595=>246,
+8594=>247,
+8592=>248,
+8598=>249,
+8599=>250,
+8601=>251,
+8600=>252,
+8741=>253,
+8739=>254,
+8725=>257,
+65295=>257,
+65128=>258,
+65340=>258,
+65284=>259,
+165=>260,
+65509=>260,
+12306=>261,
+162=>262,
+65504=>262,
+163=>263,
+65505=>263,
+65285=>264,
+65312=>265,
+8451=>266,
+8457=>267,
+65129=>268,
+65130=>269,
+65131=>270,
+13269=>271,
+13212=>272,
+13213=>273,
+13214=>274,
+13262=>275,
+13217=>276,
+13198=>277,
+13199=>278,
+13252=>279,
+176=>280,
+20825=>281,
+58834=>281,
+20827=>282,
+58835=>282,
+20830=>283,
+58837=>283,
+20829=>284,
+58836=>284,
+20833=>285,
+20835=>286,
+21991=>287,
+29929=>288,
+58044=>288,
+31950=>289,
+58191=>289,
+9601=>290,
+9602=>291,
+9603=>292,
+9604=>293,
+9605=>294,
+9606=>295,
+9607=>296,
+9608=>297,
+9615=>298,
+9614=>299,
+9613=>300,
+9612=>301,
+9611=>302,
+9610=>303,
+9609=>304,
+9532=>305,
+9524=>306,
+9516=>307,
+9508=>308,
+9500=>309,
+9620=>310,
+9472=>311,
+9474=>312,
+9621=>313,
+9484=>314,
+9488=>315,
+9492=>316,
+9496=>317,
+9581=>318,
+9582=>319,
+9584=>320,
+9583=>321,
+9552=>322,
+9566=>323,
+9578=>324,
+9569=>325,
+9698=>326,
+9699=>327,
+9701=>328,
+9700=>329,
+9585=>330,
+9586=>331,
+9587=>332,
+65296=>333,
+65297=>334,
+65298=>335,
+65299=>336,
+65300=>337,
+65301=>338,
+65302=>339,
+65303=>340,
+65304=>341,
+65305=>342,
+8544=>343,
+8545=>344,
+8546=>345,
+8547=>346,
+8548=>347,
+8549=>348,
+8550=>349,
+8551=>350,
+8552=>351,
+8553=>352,
+12321=>353,
+12322=>354,
+12323=>355,
+12324=>356,
+12325=>357,
+12326=>358,
+12327=>359,
+12328=>360,
+12329=>361,
+12344=>362,
+21316=>363,
+57443=>363,
+12345=>363,
+12346=>364,
+65313=>365,
+65314=>366,
+65315=>367,
+65316=>368,
+65317=>369,
+65318=>370,
+65319=>371,
+65320=>372,
+65321=>373,
+65322=>374,
+65323=>375,
+65324=>376,
+65325=>377,
+65326=>378,
+65327=>379,
+65328=>380,
+65329=>381,
+65330=>382,
+65331=>383,
+65332=>384,
+65333=>385,
+65334=>386,
+65335=>387,
+65336=>388,
+65337=>389,
+65338=>390,
+65345=>391,
+65346=>392,
+65347=>393,
+65348=>394,
+65349=>395,
+65350=>396,
+65351=>397,
+65352=>398,
+65353=>399,
+65354=>400,
+65355=>401,
+65356=>402,
+65357=>403,
+65358=>404,
+65359=>405,
+65360=>406,
+65361=>407,
+65362=>408,
+65363=>409,
+65364=>410,
+65365=>411,
+65366=>412,
+65367=>413,
+65368=>414,
+65369=>415,
+65370=>416,
+913=>417,
+914=>418,
+915=>419,
+916=>420,
+917=>421,
+918=>422,
+919=>423,
+920=>424,
+921=>425,
+922=>426,
+923=>427,
+924=>428,
+925=>429,
+926=>430,
+927=>431,
+928=>432,
+929=>433,
+931=>434,
+932=>435,
+933=>436,
+934=>437,
+935=>438,
+936=>439,
+937=>440,
+945=>441,
+946=>442,
+947=>443,
+948=>444,
+949=>445,
+950=>446,
+951=>447,
+952=>448,
+953=>449,
+954=>450,
+955=>451,
+956=>452,
+957=>453,
+958=>454,
+959=>455,
+960=>456,
+961=>457,
+963=>458,
+964=>459,
+965=>460,
+966=>461,
+967=>462,
+968=>463,
+969=>464,
+12549=>465,
+12550=>466,
+12551=>467,
+12552=>468,
+12553=>469,
+12554=>470,
+12555=>471,
+12556=>472,
+12557=>473,
+12558=>474,
+12559=>475,
+12560=>476,
+12561=>477,
+12562=>478,
+12563=>479,
+12564=>480,
+12565=>481,
+12566=>482,
+12567=>483,
+12568=>484,
+12569=>485,
+12570=>486,
+12571=>487,
+12572=>488,
+12573=>489,
+12574=>490,
+12575=>491,
+12576=>492,
+12577=>493,
+12578=>494,
+12579=>495,
+12580=>496,
+12581=>497,
+12582=>498,
+12583=>499,
+12584=>500,
+12585=>501,
+729=>502,
+714=>503,
+711=>504,
+780=>504,
+715=>505,
+9312=>506,
+63153=>506,
+9313=>507,
+63154=>507,
+9314=>508,
+63155=>508,
+9315=>509,
+63156=>509,
+9316=>510,
+63157=>510,
+9317=>511,
+63158=>511,
+9318=>512,
+63159=>512,
+9319=>513,
+63160=>513,
+9320=>514,
+63161=>514,
+9321=>515,
+63162=>515,
+9332=>516,
+63163=>516,
+9333=>517,
+63164=>517,
+9334=>518,
+63165=>518,
+9335=>519,
+63166=>519,
+9336=>520,
+63167=>520,
+9337=>521,
+63168=>521,
+9338=>522,
+63169=>522,
+9339=>523,
+63170=>523,
+9340=>524,
+63171=>524,
+9341=>525,
+63172=>525,
+8560=>526,
+63173=>526,
+8561=>527,
+63174=>527,
+8562=>528,
+63175=>528,
+8563=>529,
+63176=>529,
+8564=>530,
+63177=>530,
+8565=>531,
+63178=>531,
+8566=>532,
+63179=>532,
+8567=>533,
+63180=>533,
+8568=>534,
+63181=>534,
+8569=>535,
+63182=>535,
+20008=>536,
+12033=>536,
+20022=>537,
+12034=>537,
+63183=>537,
+20031=>538,
+12035=>538,
+63184=>538,
+12037=>539,
+20101=>539,
+63185=>539,
+12039=>540,
+20128=>540,
+63186=>540,
+20866=>541,
+12044=>541,
+63187=>541,
+20886=>542,
+12045=>542,
+63188=>542,
+20907=>543,
+12046=>543,
+63189=>543,
+12051=>544,
+21241=>544,
+63190=>544,
+12054=>545,
+21304=>545,
+63191=>545,
+12057=>546,
+21353=>546,
+63192=>546,
+12059=>547,
+21430=>547,
+63193=>547,
+12065=>548,
+12066=>548,
+22786=>548,
+22794=>548,
+63194=>548,
+12071=>549,
+23424=>549,
+63195=>549,
+12078=>550,
+24027=>550,
+63196=>550,
+24186=>551,
+12083=>551,
+63197=>551,
+24191=>552,
+12084=>552,
+63198=>552,
+24308=>553,
+12085=>553,
+24400=>554,
+12089=>554,
+63200=>554,
+24417=>555,
+12090=>555,
+63201=>555,
+12097=>556,
+25908=>556,
+63202=>556,
+12102=>557,
+26080=>557,
+30098=>558,
+63204=>558,
+12135=>558,
+30326=>559,
+12136=>559,
+12193=>560,
+36789=>560,
+63206=>560,
+12202=>561,
+38582=>561,
+9216=>562,
+9217=>563,
+9218=>564,
+9219=>565,
+9220=>566,
+9221=>567,
+9222=>568,
+9223=>569,
+9224=>570,
+9225=>571,
+9226=>572,
+9227=>573,
+9228=>574,
+9229=>575,
+9230=>576,
+9231=>577,
+9232=>578,
+9233=>579,
+9234=>580,
+9235=>581,
+9236=>582,
+9237=>583,
+9238=>584,
+9239=>585,
+9240=>586,
+9241=>587,
+9242=>588,
+9243=>589,
+9244=>590,
+9245=>591,
+9246=>592,
+9247=>593,
+9249=>594,
+12032=>595,
+19968=>595,
+12036=>596,
+20057=>596,
+19969=>597,
+19971=>598,
+20035=>599,
+20061=>600,
+20102=>601,
+12038=>602,
+20108=>602,
+20154=>603,
+12040=>603,
+20799=>604,
+12041=>604,
+20837=>605,
+12042=>605,
+20843=>606,
+12043=>606,
+12047=>607,
+20960=>607,
+12049=>608,
+20992=>608,
+20993=>609,
+12050=>610,
+21147=>610,
+12052=>611,
+21269=>611,
+21313=>612,
+12055=>612,
+21340=>613,
+12056=>613,
+12060=>614,
+21448=>614,
+19977=>615,
+19979=>616,
+19976=>617,
+19978=>618,
+20011=>619,
+20024=>620,
+20961=>621,
+20037=>622,
+20040=>623,
+20063=>624,
+20062=>625,
+20110=>626,
+20129=>627,
+20800=>628,
+64012=>628,
+20995=>629,
+21242=>630,
+21315=>631,
+21449=>632,
+12061=>633,
+21475=>633,
+22303=>634,
+12063=>634,
+22763=>635,
+12064=>635,
+22805=>636,
+12067=>636,
+22823=>637,
+12068=>637,
+22899=>638,
+12069=>638,
+12070=>639,
+23376=>639,
+23377=>640,
+23379=>641,
+23544=>642,
+12072=>642,
+23567=>643,
+12073=>643,
+23586=>644,
+12074=>644,
+23608=>645,
+12075=>645,
+12077=>646,
+23665=>646,
+24029=>647,
+24037=>648,
+12079=>648,
+12080=>649,
+24049=>649,
+24050=>650,
+24051=>651,
+24062=>652,
+12081=>652,
+24178=>653,
+12082=>653,
+24318=>654,
+12086=>654,
+24331=>655,
+12087=>655,
+24339=>656,
+12088=>656,
+25165=>657,
+19985=>658,
+19984=>659,
+19981=>660,
+20013=>661,
+20016=>662,
+20025=>663,
+20043=>664,
+23609=>665,
+20104=>666,
+20113=>667,
+20117=>668,
+20114=>669,
+20116=>670,
+20130=>671,
+20161=>672,
+20160=>673,
+20163=>674,
+20166=>675,
+20167=>676,
+20173=>677,
+20170=>678,
+20171=>679,
+20164=>680,
+20803=>681,
+20801=>682,
+20839=>683,
+20845=>684,
+20846=>685,
+20844=>686,
+20887=>687,
+20982=>688,
+20998=>689,
+20999=>690,
+21000=>691,
+21243=>692,
+21246=>693,
+21247=>694,
+21270=>695,
+21305=>696,
+21320=>697,
+21319=>698,
+21317=>699,
+21342=>700,
+21380=>701,
+21451=>702,
+21450=>703,
+21453=>704,
+22764=>705,
+22825=>706,
+22827=>707,
+22826=>708,
+22829=>709,
+23380=>710,
+23569=>711,
+23588=>712,
+23610=>713,
+23663=>714,
+24052=>715,
+24187=>716,
+24319=>717,
+24340=>718,
+24341=>719,
+24515=>720,
+12092=>720,
+25096=>721,
+12093=>721,
+25142=>722,
+12094=>722,
+25163=>723,
+12095=>723,
+25166=>724,
+12096=>725,
+25903=>725,
+25991=>726,
+12098=>726,
+26007=>727,
+12099=>727,
+26020=>728,
+12100=>728,
+26041=>729,
+12101=>729,
+26085=>730,
+12103=>730,
+26352=>731,
+12104=>731,
+26376=>732,
+12105=>732,
+26408=>733,
+12106=>733,
+27424=>734,
+12107=>734,
+27490=>735,
+12108=>735,
+27513=>736,
+12109=>736,
+27595=>737,
+12111=>737,
+27604=>738,
+12112=>738,
+27611=>739,
+12113=>739,
+27663=>740,
+12114=>740,
+27700=>741,
+12116=>741,
+28779=>742,
+12117=>742,
+29226=>743,
+12118=>743,
+29238=>744,
+12119=>744,
+29243=>745,
+12120=>745,
+29255=>746,
+12122=>746,
+29273=>747,
+12123=>747,
+29275=>748,
+12124=>748,
+29356=>749,
+12125=>749,
+29579=>750,
+19993=>751,
+19990=>752,
+19989=>753,
+19988=>754,
+19992=>755,
+20027=>756,
+20045=>757,
+20047=>758,
+20046=>759,
+20197=>760,
+20184=>761,
+20180=>762,
+20181=>763,
+20182=>764,
+20183=>765,
+20195=>766,
+20196=>767,
+20185=>768,
+20190=>769,
+20805=>770,
+20804=>771,
+20873=>772,
+20874=>773,
+20908=>774,
+20985=>775,
+20986=>776,
+20984=>777,
+21002=>778,
+21152=>779,
+21151=>780,
+57435=>781,
+21253=>781,
+21254=>782,
+21271=>783,
+21277=>784,
+20191=>785,
+21322=>786,
+21321=>787,
+21345=>788,
+21344=>789,
+21359=>790,
+21358=>791,
+21435=>792,
+21487=>793,
+21476=>794,
+21491=>795,
+21484=>796,
+21486=>797,
+21481=>798,
+21480=>799,
+21500=>800,
+21496=>801,
+21493=>802,
+21483=>803,
+21478=>804,
+21482=>805,
+21490=>806,
+21489=>807,
+21488=>808,
+21477=>809,
+21485=>810,
+21499=>811,
+22235=>812,
+22234=>813,
+22806=>814,
+22830=>815,
+22833=>816,
+22900=>817,
+22902=>818,
+23381=>819,
+23427=>820,
+23612=>821,
+24040=>822,
+24039=>823,
+24038=>824,
+24066=>825,
+24067=>826,
+24179=>827,
+24188=>828,
+24321=>829,
+24344=>830,
+24343=>831,
+24517=>832,
+25098=>833,
+25171=>834,
+25172=>835,
+25170=>836,
+25169=>837,
+26021=>838,
+26086=>839,
+26414=>840,
+26412=>841,
+26410=>842,
+26411=>843,
+26413=>844,
+27491=>845,
+27597=>846,
+27665=>847,
+27664=>848,
+27704=>849,
+27713=>850,
+27712=>851,
+27710=>852,
+29359=>853,
+29572=>854,
+12126=>854,
+29577=>855,
+12127=>855,
+29916=>856,
+12128=>856,
+29926=>857,
+12129=>857,
+29976=>858,
+12130=>858,
+29983=>859,
+12131=>859,
+12132=>860,
+29992=>860,
+29993=>861,
+12133=>862,
+30000=>862,
+30001=>863,
+30002=>864,
+30003=>865,
+12134=>866,
+30091=>866,
+30333=>867,
+12137=>867,
+30382=>868,
+12138=>868,
+30399=>869,
+12139=>869,
+30446=>870,
+12140=>870,
+30683=>871,
+12141=>871,
+30690=>872,
+12142=>872,
+30707=>873,
+12143=>873,
+31034=>874,
+12144=>874,
+31166=>875,
+12146=>875,
+31348=>876,
+12147=>876,
+31435=>877,
+12148=>877,
+19998=>878,
+19999=>879,
+20050=>880,
+20051=>881,
+20073=>882,
+20121=>883,
+20132=>884,
+20134=>885,
+20133=>886,
+20223=>887,
+20233=>888,
+20249=>889,
+20234=>890,
+20245=>891,
+20237=>892,
+20240=>893,
+20241=>894,
+20239=>895,
+20210=>896,
+20214=>897,
+20219=>898,
+20208=>899,
+20211=>900,
+20221=>901,
+20225=>902,
+20235=>903,
+20809=>904,
+20807=>905,
+20806=>906,
+20808=>907,
+20840=>908,
+20849=>909,
+20877=>910,
+20912=>911,
+21015=>912,
+21009=>913,
+21010=>914,
+21006=>915,
+21014=>916,
+21155=>917,
+21256=>918,
+21281=>919,
+21280=>920,
+21360=>921,
+21361=>922,
+21513=>923,
+21519=>924,
+21516=>925,
+21514=>926,
+21520=>927,
+21505=>928,
+21515=>929,
+21508=>930,
+21521=>931,
+21517=>932,
+21512=>933,
+21507=>934,
+21518=>935,
+21510=>936,
+21522=>937,
+22240=>938,
+22238=>939,
+22237=>940,
+22323=>941,
+22320=>942,
+22312=>943,
+22317=>944,
+22316=>945,
+22319=>946,
+22313=>947,
+22809=>948,
+22810=>949,
+22839=>950,
+22840=>951,
+22916=>952,
+22904=>953,
+22915=>954,
+22909=>955,
+22905=>956,
+22914=>957,
+22913=>958,
+23383=>959,
+23384=>960,
+23431=>961,
+23432=>962,
+23429=>963,
+23433=>964,
+23546=>965,
+23574=>966,
+23673=>967,
+24030=>968,
+24070=>969,
+24182=>970,
+24180=>971,
+24335=>972,
+24347=>973,
+24537=>974,
+24534=>975,
+25102=>976,
+25100=>977,
+25101=>978,
+25104=>979,
+25187=>980,
+25179=>981,
+25176=>982,
+25910=>983,
+26089=>984,
+26088=>985,
+26092=>986,
+26093=>987,
+26354=>988,
+26355=>989,
+26377=>990,
+26429=>991,
+26420=>992,
+26417=>993,
+26421=>994,
+27425=>995,
+27492=>996,
+27515=>997,
+27670=>998,
+27741=>999,
+27735=>1000,
+27737=>1001,
+27743=>1002,
+27744=>1003,
+27728=>1004,
+27733=>1005,
+27745=>1006,
+27739=>1007,
+27725=>1008,
+27726=>1009,
+28784=>1010,
+29279=>1011,
+29277=>1012,
+30334=>1013,
+31481=>1014,
+12149=>1014,
+31859=>1015,
+12150=>1015,
+31992=>1016,
+12151=>1016,
+32566=>1017,
+12152=>1017,
+32650=>1018,
+12154=>1018,
+32701=>1019,
+12155=>1019,
+32769=>1020,
+12156=>1020,
+32771=>1021,
+32780=>1022,
+12157=>1022,
+32786=>1023,
+12158=>1023,
+32819=>1024,
+12159=>1024,
+32895=>1025,
+12160=>1025,
+32905=>1026,
+12161=>1026,
+32907=>1027,
+32908=>1028,
+33251=>1029,
+12162=>1029,
+33258=>1030,
+12163=>1030,
+33267=>1031,
+12164=>1031,
+33276=>1032,
+12165=>1032,
+33292=>1033,
+12166=>1033,
+33307=>1034,
+12167=>1034,
+33311=>1035,
+12168=>1035,
+33390=>1036,
+12169=>1036,
+33394=>1037,
+12170=>1037,
+33406=>1038,
+34411=>1039,
+12173=>1039,
+34880=>1040,
+12174=>1040,
+34892=>1041,
+12175=>1041,
+34915=>1042,
+12176=>1042,
+35199=>1043,
+38433=>1044,
+20018=>1045,
+20136=>1046,
+20301=>1047,
+20303=>1048,
+20295=>1049,
+20311=>1050,
+20318=>1051,
+20276=>1052,
+20315=>1053,
+20309=>1054,
+20272=>1055,
+20304=>1056,
+20305=>1057,
+20285=>1058,
+20282=>1059,
+20280=>1060,
+20291=>1061,
+20308=>1062,
+20284=>1063,
+20294=>1064,
+20323=>1065,
+20316=>1066,
+20320=>1067,
+20271=>1068,
+20302=>1069,
+20278=>1070,
+20313=>1071,
+20317=>1072,
+20296=>1073,
+20314=>1074,
+20812=>1075,
+20811=>1076,
+20813=>1077,
+20853=>1078,
+20918=>1079,
+20919=>1080,
+21029=>1081,
+21028=>1082,
+21033=>1083,
+21034=>1084,
+21032=>1085,
+21163=>1086,
+21161=>1087,
+21162=>1088,
+21164=>1089,
+21283=>1090,
+21363=>1091,
+21365=>1092,
+21533=>1093,
+21549=>1094,
+21534=>1095,
+21566=>1096,
+21542=>1097,
+21582=>1098,
+21543=>1099,
+21574=>1100,
+21571=>1101,
+21555=>1102,
+21576=>1103,
+21570=>1104,
+21531=>1105,
+21545=>1106,
+21578=>1107,
+21561=>1108,
+21563=>1109,
+21560=>1110,
+21550=>1111,
+21557=>1112,
+21558=>1113,
+21536=>1114,
+21564=>1115,
+21568=>1116,
+21553=>1117,
+21547=>1118,
+21535=>1119,
+21548=>1120,
+22250=>1121,
+22256=>1122,
+22244=>1123,
+22251=>1124,
+22346=>1125,
+22353=>1126,
+22336=>1127,
+22349=>1128,
+22343=>1129,
+22350=>1130,
+22334=>1131,
+22352=>1132,
+22351=>1133,
+22331=>1134,
+22767=>1135,
+22846=>1136,
+22941=>1137,
+22930=>1138,
+22952=>1139,
+22942=>1140,
+22947=>1141,
+22937=>1142,
+22934=>1143,
+22925=>1144,
+22948=>1145,
+22931=>1146,
+22922=>1147,
+22949=>1148,
+23389=>1149,
+23388=>1150,
+23386=>1151,
+23387=>1152,
+23436=>1153,
+23435=>1154,
+23439=>1155,
+23596=>1156,
+23616=>1157,
+23617=>1158,
+23615=>1159,
+23614=>1160,
+23696=>1161,
+23697=>1162,
+23700=>1163,
+23692=>1164,
+24043=>1165,
+24076=>1166,
+24207=>1167,
+24199=>1168,
+24202=>1169,
+24311=>1170,
+24324=>1171,
+24351=>1172,
+24420=>1173,
+24418=>1174,
+24439=>1175,
+24441=>1176,
+24536=>1177,
+24524=>1178,
+24535=>1179,
+24525=>1180,
+24561=>1181,
+24555=>1182,
+24568=>1183,
+24554=>1184,
+25106=>1185,
+25105=>1186,
+25220=>1187,
+25239=>1188,
+25238=>1189,
+25216=>1190,
+25206=>1191,
+25225=>1192,
+25197=>1193,
+25226=>1194,
+25212=>1195,
+25214=>1196,
+25209=>1197,
+25203=>1198,
+25234=>1199,
+25199=>1200,
+25240=>1201,
+25198=>1202,
+25237=>1203,
+25235=>1204,
+25233=>1205,
+25222=>1206,
+25913=>1207,
+25915=>1208,
+25912=>1209,
+26097=>1210,
+26356=>1211,
+26463=>1212,
+26446=>1213,
+26447=>1214,
+26448=>1215,
+26449=>1216,
+26460=>1217,
+26454=>1218,
+26462=>1219,
+57801=>1219,
+26441=>1220,
+26438=>1221,
+26464=>1222,
+26451=>1223,
+26455=>1224,
+27493=>1225,
+27599=>1226,
+27714=>1227,
+27742=>1228,
+27801=>1229,
+27777=>1230,
+27784=>1231,
+27785=>1232,
+27781=>1233,
+27803=>1234,
+27754=>1235,
+27770=>1236,
+27792=>1237,
+27760=>1238,
+27788=>1239,
+27752=>1240,
+27798=>1241,
+27794=>1242,
+27773=>1243,
+27779=>1244,
+27762=>1245,
+27774=>1246,
+27764=>1247,
+27782=>1248,
+27766=>1249,
+27789=>1250,
+27796=>1251,
+27800=>1252,
+27778=>1253,
+28790=>1254,
+28796=>1255,
+28797=>1256,
+28792=>1257,
+29282=>1258,
+29281=>1259,
+29280=>1260,
+29380=>1261,
+29378=>1262,
+29590=>1263,
+29996=>1264,
+29995=>1265,
+30007=>1266,
+30008=>1267,
+30338=>1268,
+30447=>1269,
+30691=>1270,
+31169=>1271,
+31168=>1272,
+31167=>1273,
+31350=>1274,
+31995=>1275,
+32597=>1276,
+32918=>1277,
+32915=>1278,
+32925=>1279,
+32920=>1280,
+32923=>1281,
+32922=>1282,
+32946=>1283,
+33391=>1284,
+33426=>1285,
+33419=>1286,
+33421=>1287,
+35211=>1288,
+12178=>1288,
+35282=>1289,
+12179=>1289,
+35328=>1290,
+12180=>1290,
+35895=>1291,
+12181=>1291,
+35910=>1292,
+12182=>1292,
+35925=>1293,
+12183=>1293,
+35997=>1294,
+12185=>1294,
+36196=>1295,
+12186=>1295,
+36208=>1296,
+12187=>1296,
+36275=>1297,
+12188=>1297,
+36523=>1298,
+12189=>1298,
+36554=>1299,
+12190=>1299,
+36763=>1300,
+12191=>1300,
+36784=>1301,
+12192=>1301,
+36802=>1302,
+36806=>1303,
+36805=>1304,
+36804=>1305,
+24033=>1306,
+12194=>1307,
+37009=>1307,
+37026=>1308,
+37034=>1309,
+37030=>1310,
+37027=>1311,
+37193=>1312,
+12195=>1312,
+37318=>1313,
+12196=>1313,
+37324=>1314,
+12197=>1314,
+38450=>1315,
+38446=>1316,
+38449=>1317,
+38442=>1318,
+38444=>1319,
+20006=>1320,
+20054=>1321,
+20083=>1322,
+20107=>1323,
+20123=>1324,
+20126=>1325,
+20139=>1326,
+20140=>1327,
+20335=>1328,
+20381=>1329,
+20365=>1330,
+20339=>1331,
+20351=>1332,
+20332=>1333,
+20379=>1334,
+20363=>1335,
+20358=>1336,
+20355=>1337,
+20336=>1338,
+20341=>1339,
+20360=>1340,
+20329=>1341,
+20347=>1342,
+20374=>1343,
+20350=>1344,
+20367=>1345,
+20369=>1346,
+20346=>1347,
+20820=>1348,
+20818=>1349,
+20821=>1350,
+20841=>1351,
+20855=>1352,
+20854=>1353,
+20856=>1354,
+20925=>1355,
+20989=>1356,
+21051=>1357,
+21048=>1358,
+21047=>1359,
+21050=>1360,
+21040=>1361,
+21038=>1362,
+21046=>1363,
+21057=>1364,
+21182=>1365,
+21179=>1366,
+21330=>1367,
+21332=>1368,
+21331=>1369,
+21329=>1370,
+21350=>1371,
+21367=>1372,
+21368=>1373,
+21369=>1374,
+21462=>1375,
+21460=>1376,
+21463=>1377,
+21619=>1378,
+21621=>1379,
+21654=>1380,
+21624=>1381,
+21653=>1382,
+21632=>1383,
+21627=>1384,
+21623=>1385,
+21636=>1386,
+21650=>1387,
+21638=>1388,
+21628=>1389,
+21648=>1390,
+21617=>1391,
+21622=>1392,
+21644=>1393,
+21658=>1394,
+21602=>1395,
+21608=>1396,
+21643=>1397,
+21629=>1398,
+21646=>1399,
+22266=>1400,
+22403=>1401,
+22391=>1402,
+22378=>1403,
+22377=>1404,
+22369=>1405,
+22374=>1406,
+22372=>1407,
+22396=>1408,
+22812=>1409,
+22857=>1410,
+22855=>1411,
+22856=>1412,
+22852=>1413,
+22868=>1414,
+22974=>1415,
+22971=>1416,
+22996=>1417,
+22969=>1418,
+22958=>1419,
+22993=>1420,
+22982=>1421,
+22992=>1422,
+22989=>1423,
+22987=>1424,
+22995=>1425,
+22986=>1426,
+22959=>1427,
+22963=>1428,
+22994=>1429,
+22981=>1430,
+23391=>1431,
+23396=>1432,
+23395=>1433,
+23447=>1434,
+23450=>1435,
+23448=>1436,
+23452=>1437,
+23449=>1438,
+23451=>1439,
+23578=>1440,
+23624=>1441,
+23621=>1442,
+23622=>1443,
+23735=>1444,
+23713=>1445,
+23736=>1446,
+23721=>1447,
+23723=>1448,
+23729=>1449,
+23731=>1450,
+24088=>1451,
+24090=>1452,
+24086=>1453,
+24085=>1454,
+24091=>1455,
+24081=>1456,
+24184=>1457,
+24218=>1458,
+24215=>1459,
+24220=>1460,
+24213=>1461,
+24214=>1462,
+24310=>1463,
+24358=>1464,
+24359=>1465,
+24361=>1466,
+24448=>1467,
+24449=>1468,
+24447=>1469,
+24444=>1470,
+24541=>1471,
+24544=>1472,
+24573=>1473,
+24565=>1474,
+24575=>1475,
+24591=>1476,
+24596=>1477,
+24623=>1478,
+24629=>1479,
+24598=>1480,
+24618=>1481,
+24597=>1482,
+24609=>1483,
+24615=>1484,
+24617=>1485,
+24619=>1486,
+24603=>1487,
+25110=>1488,
+25109=>1489,
+25151=>1490,
+25150=>1491,
+25152=>1492,
+25215=>1493,
+25289=>1494,
+25292=>1495,
+25284=>1496,
+25279=>1497,
+25282=>1498,
+25273=>1499,
+25298=>1500,
+25307=>1501,
+25259=>1502,
+25299=>1503,
+25300=>1504,
+25291=>1505,
+25288=>1506,
+25256=>1507,
+25277=>1508,
+25276=>1509,
+25296=>1510,
+60582=>1510,
+25305=>1511,
+25287=>1512,
+25293=>1513,
+25269=>1514,
+25306=>1515,
+25265=>1516,
+25304=>1517,
+25302=>1518,
+25303=>1519,
+25286=>1520,
+25260=>1521,
+25294=>1522,
+61010=>1522,
+25918=>1523,
+26023=>1524,
+26044=>1525,
+26106=>1526,
+26132=>1527,
+26131=>1528,
+26124=>1529,
+26118=>1530,
+26114=>1531,
+26126=>1532,
+26112=>1533,
+26127=>1534,
+26133=>1535,
+26122=>1536,
+26119=>1537,
+26381=>1538,
+26379=>1539,
+26477=>1540,
+26507=>1541,
+26517=>1542,
+26481=>1543,
+26524=>1544,
+26483=>1545,
+26487=>1546,
+26503=>1547,
+26525=>1548,
+26519=>1549,
+26479=>1550,
+26480=>1551,
+26495=>1552,
+26505=>1553,
+26494=>1554,
+26512=>1555,
+26485=>1556,
+26522=>1557,
+26515=>1558,
+26492=>1559,
+26474=>1560,
+26482=>1561,
+27427=>1562,
+27494=>1563,
+27495=>1564,
+27519=>1565,
+27667=>1566,
+27675=>1567,
+27875=>1568,
+27880=>1569,
+27891=>1570,
+27825=>1571,
+27852=>1572,
+27877=>1573,
+27827=>1574,
+27837=>1575,
+27838=>1576,
+27836=>1577,
+27874=>1578,
+27819=>1579,
+27861=>1580,
+27859=>1581,
+27832=>1582,
+27844=>1583,
+27833=>1584,
+27841=>1585,
+27822=>1586,
+27863=>1587,
+27845=>1588,
+27889=>1589,
+27839=>1590,
+27835=>1591,
+27873=>1592,
+27867=>1593,
+27850=>1594,
+27820=>1595,
+27887=>1596,
+27868=>1597,
+27862=>1598,
+27872=>1599,
+28821=>1600,
+28814=>1601,
+28818=>1602,
+28810=>1603,
+28825=>1604,
+29228=>1605,
+29229=>1606,
+29240=>1607,
+29256=>1608,
+29287=>1609,
+29289=>1610,
+29376=>1611,
+29390=>1612,
+29401=>1613,
+29399=>1614,
+29392=>1615,
+29609=>1616,
+29608=>1617,
+29599=>1618,
+29611=>1619,
+29605=>1620,
+30013=>1621,
+30109=>1622,
+30105=>1623,
+30106=>1624,
+30340=>1625,
+30402=>1626,
+30450=>1627,
+30452=>1628,
+30693=>1629,
+30717=>1630,
+31038=>1631,
+31040=>1632,
+31041=>1633,
+31177=>1634,
+31176=>1635,
+31354=>1636,
+31353=>1637,
+31482=>1638,
+31998=>1639,
+32596=>1640,
+32652=>1641,
+32651=>1642,
+32773=>1643,
+58236=>1643,
+32954=>1644,
+32933=>1645,
+32930=>1646,
+32945=>1647,
+32929=>1648,
+32939=>1649,
+32937=>1650,
+32948=>1651,
+32938=>1652,
+32943=>1653,
+33253=>1654,
+33278=>1655,
+33293=>1656,
+33459=>1657,
+33437=>1658,
+33433=>1659,
+33453=>1660,
+33469=>1661,
+33439=>1662,
+33465=>1663,
+33457=>1664,
+33452=>1665,
+33445=>1666,
+33455=>1667,
+33464=>1668,
+33443=>1669,
+33456=>1670,
+33470=>1671,
+33463=>1672,
+34382=>1673,
+34417=>1674,
+21021=>1675,
+34920=>1676,
+36555=>1677,
+36814=>1678,
+36820=>1679,
+36817=>1680,
+37045=>1681,
+37048=>1682,
+37041=>1683,
+37046=>1684,
+37319=>1685,
+37329=>1686,
+12198=>1686,
+38263=>1687,
+12199=>1687,
+38272=>1688,
+12200=>1688,
+38428=>1689,
+12201=>1689,
+38464=>1690,
+38463=>1691,
+38459=>1692,
+38468=>1693,
+38466=>1694,
+38585=>1695,
+12203=>1695,
+38632=>1696,
+12204=>1696,
+38738=>1697,
+12206=>1698,
+38750=>1698,
+20127=>1699,
+20141=>1700,
+20142=>1701,
+20449=>1702,
+20405=>1703,
+20399=>1704,
+20415=>1705,
+20448=>1706,
+20433=>1707,
+20431=>1708,
+20445=>1709,
+20419=>1710,
+20406=>1711,
+20440=>1712,
+20447=>1713,
+20426=>1714,
+20439=>1715,
+20398=>1716,
+20432=>1717,
+20420=>1718,
+20418=>1719,
+20442=>1720,
+20430=>1721,
+20446=>1722,
+20407=>1723,
+20823=>1724,
+20882=>1725,
+20881=>1726,
+20896=>1727,
+21070=>1728,
+21059=>1729,
+21066=>1730,
+21069=>1731,
+21068=>1732,
+21067=>1733,
+21063=>1734,
+21191=>1735,
+21193=>1736,
+21187=>1737,
+21185=>1738,
+21261=>1739,
+21335=>1740,
+21371=>1741,
+21402=>1742,
+21467=>1743,
+21676=>1744,
+21696=>1745,
+21672=>1746,
+21710=>1747,
+21705=>1748,
+21688=>1749,
+21670=>1750,
+21683=>1751,
+21703=>1752,
+21698=>1753,
+21693=>1754,
+21674=>1755,
+21697=>1756,
+21700=>1757,
+21704=>1758,
+21679=>1759,
+21675=>1760,
+21681=>1761,
+21691=>1762,
+21673=>1763,
+21671=>1764,
+21695=>1765,
+22271=>1766,
+22402=>1767,
+22411=>1768,
+22432=>1769,
+22435=>1770,
+22434=>1771,
+22478=>1772,
+22446=>1773,
+22419=>1774,
+22869=>1775,
+22865=>1776,
+22863=>1777,
+22862=>1778,
+22864=>1779,
+23004=>1780,
+23000=>1781,
+23039=>1782,
+23011=>1783,
+23016=>1784,
+23043=>1785,
+23013=>1786,
+23018=>1787,
+23002=>1788,
+23014=>1789,
+23041=>1790,
+23035=>1791,
+23401=>1792,
+23459=>1793,
+23462=>1794,
+23460=>1795,
+23458=>1796,
+23461=>1797,
+23553=>1798,
+23630=>1799,
+23631=>1800,
+23629=>1801,
+23627=>1802,
+23769=>1803,
+23762=>1804,
+24055=>1805,
+24093=>1806,
+24101=>1807,
+24095=>1808,
+24189=>1809,
+24224=>1810,
+24230=>1811,
+24314=>1812,
+24328=>1813,
+24365=>1814,
+24421=>1815,
+24456=>1816,
+24453=>1817,
+24458=>1818,
+24459=>1819,
+24455=>1820,
+24460=>1821,
+24457=>1822,
+24594=>1823,
+24605=>1824,
+24608=>1825,
+24613=>1826,
+24590=>1827,
+24616=>1828,
+24653=>1829,
+24688=>1830,
+24680=>1831,
+24674=>1832,
+60712=>1832,
+24646=>1833,
+24643=>1834,
+24684=>1835,
+24683=>1836,
+24682=>1837,
+24676=>1838,
+25153=>1839,
+25308=>1840,
+25366=>1841,
+25353=>1842,
+25340=>1843,
+25325=>1844,
+25345=>1845,
+25326=>1846,
+25341=>1847,
+25351=>1848,
+25329=>1849,
+25335=>1850,
+25327=>1851,
+25324=>1852,
+25342=>1853,
+25332=>1854,
+25361=>1855,
+25346=>1856,
+25919=>1857,
+25925=>1858,
+26027=>1859,
+26045=>1860,
+26082=>1861,
+26149=>1862,
+26157=>1863,
+26144=>1864,
+26151=>1865,
+26159=>1866,
+26143=>1867,
+26152=>1868,
+26161=>1869,
+26148=>1870,
+26359=>1871,
+26623=>1872,
+26579=>1873,
+26609=>1874,
+26580=>1875,
+26576=>1876,
+26604=>1877,
+26550=>1878,
+26543=>1879,
+26613=>1880,
+26601=>1881,
+26607=>1882,
+26564=>1883,
+26577=>1884,
+26548=>1885,
+26586=>1886,
+26597=>1887,
+26552=>1888,
+26575=>1889,
+26590=>1890,
+26611=>1891,
+26544=>1892,
+26585=>1893,
+26594=>1894,
+26589=>1895,
+26578=>1896,
+27498=>1897,
+27523=>1898,
+27526=>1899,
+27573=>1900,
+27602=>1901,
+27607=>1902,
+27679=>1903,
+27849=>1904,
+27915=>1905,
+27954=>1906,
+27946=>1907,
+27969=>1908,
+27941=>1909,
+27916=>1910,
+27953=>1911,
+27934=>1912,
+27927=>1913,
+27963=>1914,
+27965=>1915,
+27966=>1916,
+27958=>1917,
+27931=>1918,
+27893=>1919,
+27961=>1920,
+27943=>1921,
+27960=>1922,
+27945=>1923,
+27950=>1924,
+27957=>1925,
+27918=>1926,
+27947=>1927,
+28843=>1928,
+28858=>1929,
+28851=>1930,
+28844=>1931,
+28847=>1932,
+28845=>1933,
+28856=>1934,
+28846=>1935,
+28836=>1936,
+29232=>1937,
+29298=>1938,
+29295=>1939,
+29300=>1940,
+29417=>1941,
+29408=>1942,
+29409=>1943,
+29623=>1944,
+29642=>1945,
+29627=>1946,
+29618=>1947,
+29645=>1948,
+29632=>1949,
+29619=>1950,
+29978=>1951,
+29997=>1952,
+30031=>1953,
+30028=>1954,
+30030=>1955,
+30027=>1956,
+30123=>1957,
+30116=>1958,
+30117=>1959,
+30114=>1960,
+30115=>1961,
+30328=>1962,
+30342=>1963,
+30343=>1964,
+30344=>1965,
+30408=>1966,
+30406=>1967,
+30403=>1968,
+30405=>1969,
+30465=>1970,
+30457=>1971,
+30456=>1972,
+30473=>1973,
+30475=>1974,
+30462=>1975,
+30460=>1976,
+30471=>1977,
+30684=>1978,
+30722=>1979,
+30740=>1980,
+30732=>1981,
+30733=>1982,
+31046=>1983,
+31049=>1984,
+31048=>1985,
+31047=>1986,
+31161=>1987,
+31162=>1988,
+31185=>1989,
+31186=>1990,
+31179=>1991,
+31359=>1992,
+31361=>1993,
+31487=>1994,
+31485=>1995,
+31869=>1996,
+32002=>1997,
+32005=>1998,
+32000=>1999,
+32009=>2000,
+32007=>2001,
+32004=>2002,
+32006=>2003,
+32568=>2004,
+32654=>2005,
+32703=>2006,
+32784=>2007,
+32781=>2008,
+32785=>2009,
+32822=>2010,
+32982=>2011,
+32997=>2012,
+32986=>2013,
+32963=>2014,
+32964=>2015,
+32972=>2016,
+32993=>2017,
+32987=>2018,
+32974=>2019,
+32990=>2020,
+32996=>2021,
+32989=>2022,
+33268=>2023,
+33314=>2024,
+33511=>2025,
+33539=>2026,
+33541=>2027,
+33507=>2028,
+33499=>2029,
+33510=>2030,
+33540=>2031,
+33509=>2032,
+33538=>2033,
+33545=>2034,
+33490=>2035,
+33495=>2036,
+33521=>2037,
+33537=>2038,
+33500=>2039,
+33492=>2040,
+33489=>2041,
+33502=>2042,
+33491=>2043,
+33503=>2044,
+33519=>2045,
+33542=>2046,
+34384=>2047,
+34425=>2048,
+34427=>2049,
+34426=>2050,
+34893=>2051,
+34923=>2052,
+35201=>2053,
+35284=>2054,
+35336=>2055,
+35330=>2056,
+35331=>2057,
+35998=>2058,
+36000=>2059,
+36212=>2060,
+36211=>2061,
+36276=>2062,
+36557=>2063,
+36556=>2064,
+36848=>2065,
+36838=>2066,
+36834=>2067,
+36842=>2068,
+36837=>2069,
+36845=>2070,
+36843=>2071,
+36836=>2072,
+36840=>2073,
+37066=>2074,
+37070=>2075,
+37057=>2076,
+37059=>2077,
+37195=>2078,
+37194=>2079,
+37325=>2080,
+38274=>2081,
+38480=>2082,
+38475=>2083,
+38476=>2084,
+38477=>2085,
+38754=>2086,
+12207=>2086,
+38761=>2087,
+12208=>2087,
+38859=>2088,
+12209=>2088,
+38893=>2089,
+12210=>2089,
+38899=>2090,
+12211=>2090,
+38913=>2091,
+12212=>2091,
+39080=>2092,
+12213=>2092,
+39131=>2093,
+12214=>2093,
+39135=>2094,
+12215=>2094,
+39318=>2095,
+12216=>2095,
+39321=>2096,
+12217=>2096,
+20056=>2097,
+20147=>2098,
+20492=>2099,
+20493=>2100,
+20515=>2101,
+20463=>2102,
+20518=>2103,
+20517=>2104,
+20472=>2105,
+20521=>2106,
+57375=>2106,
+20502=>2107,
+20486=>2108,
+20540=>2109,
+20511=>2110,
+20506=>2111,
+20498=>2112,
+20497=>2113,
+20474=>2114,
+20480=>2115,
+20500=>2116,
+20520=>2117,
+20465=>2118,
+20513=>2119,
+20491=>2120,
+20505=>2121,
+20504=>2122,
+20467=>2123,
+20462=>2124,
+20525=>2125,
+20522=>2126,
+20478=>2127,
+20523=>2128,
+20489=>2129,
+20860=>2130,
+20900=>2131,
+20901=>2132,
+20898=>2133,
+20941=>2134,
+20940=>2135,
+20934=>2136,
+20939=>2137,
+21078=>2138,
+21084=>2139,
+21076=>2140,
+21083=>2141,
+21085=>2142,
+21290=>2143,
+21375=>2144,
+57459=>2144,
+21407=>2145,
+21405=>2146,
+21471=>2147,
+21736=>2148,
+21776=>2149,
+21761=>2150,
+21815=>2151,
+21756=>2152,
+21733=>2153,
+21746=>2154,
+21766=>2155,
+21754=>2156,
+21780=>2157,
+21737=>2158,
+21741=>2159,
+21729=>2160,
+21769=>2161,
+21742=>2162,
+21738=>2163,
+21734=>2164,
+21799=>2165,
+21767=>2166,
+21757=>2167,
+21775=>2168,
+22275=>2169,
+22276=>2170,
+22466=>2171,
+22484=>2172,
+22475=>2173,
+22467=>2174,
+22537=>2175,
+22799=>2176,
+22871=>2177,
+22872=>2178,
+22874=>2179,
+23057=>2180,
+23064=>2181,
+23068=>2182,
+23071=>2183,
+23067=>2184,
+23059=>2185,
+23020=>2186,
+23072=>2187,
+23075=>2188,
+23081=>2189,
+23077=>2190,
+23052=>2191,
+23049=>2192,
+23403=>2193,
+23640=>2194,
+23472=>2195,
+23475=>2196,
+23478=>2197,
+23476=>2198,
+23470=>2199,
+23477=>2200,
+23481=>2201,
+23480=>2202,
+23556=>2203,
+23633=>2204,
+23637=>2205,
+23632=>2206,
+23789=>2207,
+23805=>2208,
+23803=>2209,
+23786=>2210,
+23784=>2211,
+23792=>2212,
+23798=>2213,
+23809=>2214,
+23796=>2215,
+24046=>2216,
+24109=>2217,
+24107=>2218,
+24235=>2219,
+24237=>2220,
+24231=>2221,
+24369=>2222,
+24466=>2223,
+24465=>2224,
+24464=>2225,
+24665=>2226,
+24675=>2227,
+24677=>2228,
+24656=>2229,
+24661=>2230,
+24685=>2231,
+24681=>2232,
+24687=>2233,
+24708=>2234,
+24735=>2235,
+24730=>2236,
+24717=>2237,
+24724=>2238,
+24716=>2239,
+24709=>2240,
+24726=>2241,
+25159=>2242,
+25331=>2243,
+25352=>2244,
+25343=>2245,
+25422=>2246,
+25406=>2247,
+25391=>2248,
+25429=>2249,
+25410=>2250,
+25414=>2251,
+25423=>2252,
+25417=>2253,
+25402=>2254,
+25424=>2255,
+25405=>2256,
+25386=>2257,
+25387=>2258,
+25384=>2259,
+25421=>2260,
+25420=>2261,
+25928=>2262,
+25929=>2263,
+26009=>2264,
+26049=>2265,
+26053=>2266,
+26178=>2267,
+26185=>2268,
+26191=>2269,
+26179=>2270,
+26194=>2271,
+26188=>2272,
+26181=>2273,
+26177=>2274,
+26360=>2275,
+26388=>2276,
+26389=>2277,
+26391=>2278,
+26657=>2279,
+26680=>2280,
+26696=>2281,
+26694=>2282,
+26707=>2283,
+26681=>2284,
+26690=>2285,
+26708=>2286,
+26665=>2287,
+26803=>2288,
+26647=>2289,
+26700=>2290,
+26705=>2291,
+26685=>2292,
+26612=>2293,
+26704=>2294,
+26688=>2295,
+26684=>2296,
+26691=>2297,
+26666=>2298,
+26693=>2299,
+26643=>2300,
+26648=>2301,
+26689=>2302,
+27530=>2303,
+27529=>2304,
+27575=>2305,
+27683=>2306,
+27687=>2307,
+27688=>2308,
+27686=>2309,
+27684=>2310,
+27888=>2311,
+28010=>2312,
+28053=>2313,
+28040=>2314,
+28039=>2315,
+28006=>2316,
+28024=>2317,
+28023=>2318,
+27993=>2319,
+28051=>2320,
+28012=>2321,
+28041=>2322,
+28014=>2323,
+27994=>2324,
+28020=>2325,
+28009=>2326,
+28044=>2327,
+28042=>2328,
+28025=>2329,
+28037=>2330,
+28005=>2331,
+28052=>2332,
+28874=>2333,
+28888=>2334,
+28900=>2335,
+28889=>2336,
+28872=>2337,
+28879=>2338,
+29241=>2339,
+29305=>2340,
+29436=>2341,
+29433=>2342,
+29437=>2343,
+29432=>2344,
+29431=>2345,
+29574=>2346,
+29677=>2347,
+29705=>2348,
+29678=>2349,
+29664=>2350,
+29674=>2351,
+29662=>2352,
+30036=>2353,
+30045=>2354,
+30044=>2355,
+30042=>2356,
+30041=>2357,
+30142=>2358,
+30149=>2359,
+30151=>2360,
+30130=>2361,
+30131=>2362,
+30141=>2363,
+30140=>2364,
+30137=>2365,
+30146=>2366,
+30136=>2367,
+30347=>2368,
+30384=>2369,
+30410=>2370,
+30413=>2371,
+30414=>2372,
+30505=>2373,
+30495=>2374,
+30496=>2375,
+30504=>2376,
+30697=>2377,
+30768=>2378,
+30759=>2379,
+30776=>2380,
+30749=>2381,
+30772=>2382,
+30775=>2383,
+30757=>2384,
+30765=>2385,
+30752=>2386,
+30751=>2387,
+30770=>2388,
+31061=>2389,
+31056=>2390,
+31072=>2391,
+31071=>2392,
+31062=>2393,
+31070=>2394,
+31069=>2395,
+31063=>2396,
+31066=>2397,
+31204=>2398,
+31203=>2399,
+60418=>2399,
+31207=>2400,
+31199=>2401,
+31206=>2402,
+31209=>2403,
+31192=>2404,
+31364=>2405,
+31368=>2406,
+31449=>2407,
+31494=>2408,
+31505=>2409,
+31881=>2410,
+32033=>2411,
+32023=>2412,
+32011=>2413,
+32010=>2414,
+32032=>2415,
+32034=>2416,
+32020=>2417,
+32016=>2418,
+32021=>2419,
+32026=>2420,
+32028=>2421,
+32013=>2422,
+32025=>2423,
+32027=>2424,
+32570=>2425,
+32607=>2426,
+32660=>2427,
+32709=>2428,
+32705=>2429,
+32774=>2430,
+32772=>2431,
+32792=>2432,
+32789=>2433,
+32793=>2434,
+32791=>2435,
+32829=>2436,
+32831=>2437,
+33009=>2438,
+33026=>2439,
+33008=>2440,
+33029=>2441,
+33005=>2442,
+33012=>2443,
+33030=>2444,
+33016=>2445,
+33011=>2446,
+33032=>2447,
+33021=>2448,
+33034=>2449,
+33020=>2450,
+33007=>2451,
+33261=>2452,
+33260=>2453,
+33280=>2454,
+33296=>2455,
+33322=>2456,
+33323=>2457,
+33320=>2458,
+33324=>2459,
+33467=>2460,
+33579=>2461,
+33618=>2462,
+33620=>2463,
+33610=>2464,
+33592=>2465,
+33616=>2466,
+33609=>2467,
+33589=>2468,
+33588=>2469,
+33615=>2470,
+33586=>2471,
+33593=>2472,
+33590=>2473,
+33559=>2474,
+33600=>2475,
+33585=>2476,
+33576=>2477,
+33603=>2478,
+34388=>2479,
+34442=>2480,
+34474=>2481,
+34451=>2482,
+34468=>2483,
+34473=>2484,
+34444=>2485,
+34467=>2486,
+34460=>2487,
+34928=>2488,
+34935=>2489,
+34945=>2490,
+34946=>2491,
+34941=>2492,
+34937=>2493,
+35352=>2494,
+35344=>2495,
+35342=>2496,
+35340=>2497,
+35349=>2498,
+35338=>2499,
+35351=>2500,
+35347=>2501,
+35350=>2502,
+35343=>2503,
+35345=>2504,
+35912=>2505,
+35962=>2506,
+35961=>2507,
+36001=>2508,
+36002=>2509,
+36215=>2510,
+58442=>2510,
+36524=>2511,
+36562=>2512,
+36564=>2513,
+36559=>2514,
+36785=>2515,
+36865=>2516,
+36870=>2517,
+36855=>2518,
+36864=>2519,
+36858=>2520,
+36852=>2521,
+36867=>2522,
+36861=>2523,
+36869=>2524,
+36856=>2525,
+37013=>2526,
+37089=>2527,
+37085=>2528,
+37090=>2529,
+37202=>2530,
+37197=>2531,
+37196=>2532,
+37336=>2533,
+37341=>2534,
+37335=>2535,
+37340=>2536,
+37337=>2537,
+38275=>2538,
+38498=>2539,
+38499=>2540,
+38497=>2541,
+38491=>2542,
+38493=>2543,
+38500=>2544,
+38488=>2545,
+38494=>2546,
+38587=>2547,
+39138=>2548,
+39340=>2549,
+12218=>2549,
+39592=>2550,
+12219=>2550,
+39640=>2551,
+12220=>2551,
+12222=>2552,
+39717=>2552,
+39730=>2553,
+12224=>2553,
+39740=>2554,
+12225=>2554,
+20094=>2555,
+20602=>2556,
+20605=>2557,
+57382=>2557,
+20572=>2558,
+20551=>2559,
+20547=>2560,
+20556=>2561,
+20570=>2562,
+20553=>2563,
+20581=>2564,
+20598=>2565,
+20558=>2566,
+20565=>2567,
+20597=>2568,
+20596=>2569,
+20599=>2570,
+20559=>2571,
+20495=>2572,
+20591=>2573,
+20589=>2574,
+20828=>2575,
+20885=>2576,
+20976=>2577,
+21098=>2578,
+21103=>2579,
+21202=>2580,
+21209=>2581,
+21208=>2582,
+21205=>2583,
+21264=>2584,
+21263=>2585,
+21273=>2586,
+21311=>2587,
+21312=>2588,
+21310=>2589,
+21443=>2590,
+26364=>2591,
+21830=>2592,
+21866=>2593,
+21862=>2594,
+21828=>2595,
+21854=>2596,
+21857=>2597,
+21827=>2598,
+21834=>2599,
+21809=>2600,
+21846=>2601,
+21839=>2602,
+21845=>2603,
+21807=>2604,
+21860=>2605,
+21816=>2606,
+21806=>2607,
+21852=>2608,
+21804=>2609,
+21859=>2610,
+21811=>2611,
+21825=>2612,
+21847=>2613,
+22280=>2614,
+22283=>2615,
+22281=>2616,
+22495=>2617,
+22533=>2618,
+22538=>2619,
+22534=>2620,
+22496=>2621,
+22500=>2622,
+22522=>2623,
+22530=>2624,
+22581=>2625,
+22519=>2626,
+22521=>2627,
+22816=>2628,
+22882=>2629,
+23094=>2630,
+23105=>2631,
+23113=>2632,
+23142=>2633,
+23146=>2634,
+23104=>2635,
+23100=>2636,
+23138=>2637,
+23130=>2638,
+23110=>2639,
+23114=>2640,
+23408=>2641,
+23495=>2642,
+23493=>2643,
+23492=>2644,
+23490=>2645,
+23487=>2646,
+23494=>2647,
+23561=>2648,
+23560=>2649,
+23559=>2650,
+23648=>2651,
+23644=>2652,
+23645=>2653,
+23815=>2654,
+23814=>2655,
+23822=>2656,
+23835=>2657,
+23830=>2658,
+23842=>2659,
+23825=>2660,
+23849=>2661,
+23828=>2662,
+23833=>2663,
+23844=>2664,
+23847=>2665,
+23831=>2666,
+24034=>2667,
+24120=>2668,
+24118=>2669,
+24115=>2670,
+24119=>2671,
+24247=>2672,
+24248=>2673,
+24246=>2674,
+24245=>2675,
+24254=>2676,
+24373=>2677,
+24375=>2678,
+24407=>2679,
+24428=>2680,
+24425=>2681,
+24427=>2682,
+24471=>2683,
+24473=>2684,
+24478=>2685,
+24472=>2686,
+24481=>2687,
+24480=>2688,
+24476=>2689,
+24703=>2690,
+24739=>2691,
+24713=>2692,
+24736=>2693,
+24744=>2694,
+24779=>2695,
+24756=>2696,
+24806=>2697,
+24765=>2698,
+24773=>2699,
+24763=>2700,
+24757=>2701,
+24796=>2702,
+24764=>2703,
+24792=>2704,
+24789=>2705,
+24774=>2706,
+24799=>2707,
+24760=>2708,
+24794=>2709,
+24775=>2710,
+25114=>2711,
+25115=>2712,
+25160=>2713,
+25504=>2714,
+25511=>2715,
+25458=>2716,
+25494=>2717,
+25506=>2718,
+25509=>2719,
+25463=>2720,
+25447=>2721,
+25496=>2722,
+25514=>2723,
+25457=>2724,
+25513=>2725,
+25481=>2726,
+25475=>2727,
+25499=>2728,
+25451=>2729,
+25512=>2730,
+25476=>2731,
+25480=>2732,
+25497=>2733,
+25505=>2734,
+25516=>2735,
+25490=>2736,
+25487=>2737,
+25472=>2738,
+25467=>2739,
+25449=>2740,
+25448=>2741,
+25466=>2742,
+25949=>2743,
+25942=>2744,
+25937=>2745,
+25945=>2746,
+25943=>2747,
+21855=>2748,
+25935=>2749,
+25944=>2750,
+25941=>2751,
+25940=>2752,
+26012=>2753,
+26011=>2754,
+26028=>2755,
+26063=>2756,
+26059=>2757,
+26060=>2758,
+26062=>2759,
+26205=>2760,
+26202=>2761,
+26212=>2762,
+26216=>2763,
+26214=>2764,
+26206=>2765,
+26361=>2766,
+21207=>2767,
+26395=>2768,
+26753=>2769,
+26799=>2770,
+26786=>2771,
+26771=>2772,
+26805=>2773,
+26751=>2774,
+26742=>2775,
+26801=>2776,
+26791=>2777,
+26775=>2778,
+26800=>2779,
+26755=>2780,
+26820=>2781,
+26797=>2782,
+26758=>2783,
+26757=>2784,
+26772=>2785,
+26781=>2786,
+26792=>2787,
+26783=>2788,
+26785=>2789,
+26754=>2790,
+27442=>2791,
+27578=>2792,
+27627=>2793,
+27628=>2794,
+27691=>2795,
+28046=>2796,
+28092=>2797,
+28147=>2798,
+28121=>2799,
+28082=>2800,
+28129=>2801,
+28108=>2802,
+28132=>2803,
+28155=>2804,
+28154=>2805,
+28165=>2806,
+28103=>2807,
+28107=>2808,
+28079=>2809,
+28113=>2810,
+28078=>2811,
+28126=>2812,
+28153=>2813,
+28088=>2814,
+28151=>2815,
+28149=>2816,
+28101=>2817,
+28114=>2818,
+28186=>2819,
+28085=>2820,
+28122=>2821,
+28139=>2822,
+28120=>2823,
+28138=>2824,
+28145=>2825,
+28142=>2826,
+28136=>2827,
+28102=>2828,
+28100=>2829,
+28074=>2830,
+28140=>2831,
+28095=>2832,
+28134=>2833,
+28921=>2834,
+28937=>2835,
+28938=>2836,
+28925=>2837,
+28911=>2838,
+29245=>2839,
+29309=>2840,
+29313=>2841,
+29468=>2842,
+29467=>2843,
+29462=>2844,
+29459=>2845,
+29465=>2846,
+29575=>2847,
+29701=>2848,
+29706=>2849,
+29699=>2850,
+29702=>2851,
+29694=>2852,
+29709=>2853,
+29920=>2854,
+29942=>2855,
+29943=>2856,
+29980=>2857,
+29986=>2858,
+30053=>2859,
+30054=>2860,
+30050=>2861,
+30064=>2862,
+30095=>2863,
+30164=>2864,
+30165=>2865,
+30133=>2866,
+30154=>2867,
+30157=>2868,
+30350=>2869,
+30420=>2870,
+30418=>2871,
+30427=>2872,
+30519=>2873,
+30526=>2874,
+30524=>2875,
+30518=>2876,
+30520=>2877,
+30522=>2878,
+30827=>2879,
+30787=>2880,
+30798=>2881,
+31077=>2882,
+31080=>2883,
+31085=>2884,
+31227=>2885,
+31378=>2886,
+31381=>2887,
+31520=>2888,
+31528=>2889,
+31515=>2890,
+31532=>2891,
+31526=>2892,
+31513=>2893,
+31518=>2894,
+31534=>2895,
+31890=>2896,
+31895=>2897,
+31893=>2898,
+32070=>2899,
+32067=>2900,
+32113=>2901,
+32046=>2902,
+32057=>2903,
+32060=>2904,
+32064=>2905,
+32048=>2906,
+32051=>2907,
+32068=>2908,
+32047=>2909,
+32066=>2910,
+32050=>2911,
+32049=>2912,
+32573=>2913,
+32670=>2914,
+32666=>2915,
+32716=>2916,
+32718=>2917,
+32722=>2918,
+32796=>2919,
+32842=>2920,
+32838=>2921,
+33071=>2922,
+33046=>2923,
+33059=>2924,
+33067=>2925,
+33065=>2926,
+33072=>2927,
+33060=>2928,
+33282=>2929,
+33333=>2930,
+33335=>2931,
+33334=>2932,
+33337=>2933,
+33678=>2934,
+33694=>2935,
+33688=>2936,
+33656=>2937,
+33698=>2938,
+33686=>2939,
+33725=>2940,
+33707=>2941,
+33682=>2942,
+33674=>2943,
+33683=>2944,
+33673=>2945,
+33696=>2946,
+33655=>2947,
+33659=>2948,
+33660=>2949,
+33670=>2950,
+33703=>2951,
+34389=>2952,
+24426=>2953,
+34503=>2954,
+34496=>2955,
+34486=>2956,
+34500=>2957,
+34485=>2958,
+34502=>2959,
+34507=>2960,
+34481=>2961,
+34479=>2962,
+34505=>2963,
+34899=>2964,
+34974=>2965,
+34952=>2966,
+34987=>2967,
+34962=>2968,
+34966=>2969,
+34957=>2970,
+34955=>2971,
+35219=>2972,
+35215=>2973,
+35370=>2974,
+35357=>2975,
+35363=>2976,
+35365=>2977,
+35377=>2978,
+35373=>2979,
+35359=>2980,
+35355=>2981,
+35362=>2982,
+35913=>2983,
+35930=>2984,
+36009=>2985,
+36012=>2986,
+36011=>2987,
+36008=>2988,
+36010=>2989,
+36007=>2990,
+36199=>2991,
+36198=>2992,
+36286=>2993,
+36282=>2994,
+36571=>2995,
+36575=>2996,
+36889=>2997,
+36877=>2998,
+36890=>2999,
+36887=>3000,
+36899=>3001,
+36895=>3002,
+36893=>3003,
+36880=>3004,
+36885=>3005,
+36894=>3006,
+36896=>3007,
+36879=>3008,
+36898=>3009,
+36886=>3010,
+36891=>3011,
+36884=>3012,
+37096=>3013,
+37101=>3014,
+37117=>3015,
+58488=>3015,
+37207=>3016,
+37326=>3017,
+37365=>3018,
+37350=>3019,
+37347=>3020,
+37351=>3021,
+37357=>3022,
+37353=>3023,
+38281=>3024,
+38506=>3025,
+38517=>3026,
+38515=>3027,
+38520=>3028,
+38512=>3029,
+38516=>3030,
+38518=>3031,
+38519=>3032,
+38508=>3033,
+38592=>3034,
+38634=>3035,
+38633=>3036,
+31456=>3037,
+31455=>3038,
+38914=>3039,
+38915=>3040,
+39770=>3041,
+12226=>3041,
+40165=>3042,
+12227=>3042,
+40565=>3043,
+12228=>3043,
+40575=>3044,
+12229=>3044,
+40613=>3045,
+12230=>3045,
+40635=>3046,
+12231=>3046,
+20642=>3047,
+20621=>3048,
+20613=>3049,
+20633=>3050,
+20625=>3051,
+20608=>3052,
+20630=>3053,
+20632=>3054,
+20634=>3055,
+26368=>3056,
+20977=>3057,
+21106=>3058,
+21108=>3059,
+21109=>3060,
+21097=>3061,
+21214=>3062,
+21213=>3063,
+21211=>3064,
+21338=>3065,
+21413=>3066,
+21883=>3067,
+21888=>3068,
+21927=>3069,
+21884=>3070,
+21898=>3071,
+21917=>3072,
+21912=>3073,
+21890=>3074,
+21916=>3075,
+21930=>3076,
+21908=>3077,
+21895=>3078,
+21899=>3079,
+21891=>3080,
+21939=>3081,
+21934=>3082,
+21919=>3083,
+21822=>3084,
+21938=>3085,
+21914=>3086,
+21947=>3087,
+21932=>3088,
+21937=>3089,
+21886=>3090,
+21897=>3091,
+21931=>3092,
+21913=>3093,
+22285=>3094,
+22575=>3095,
+22570=>3096,
+22580=>3097,
+22564=>3098,
+22576=>3099,
+22577=>3100,
+22561=>3101,
+22557=>3102,
+22560=>3103,
+22777=>3104,
+22778=>3105,
+22880=>3106,
+23159=>3107,
+57587=>3107,
+23194=>3108,
+23167=>3109,
+23186=>3110,
+23195=>3111,
+23207=>3112,
+23411=>3113,
+23409=>3114,
+23506=>3115,
+23500=>3116,
+23507=>3117,
+23504=>3118,
+23562=>3119,
+23563=>3120,
+23601=>3121,
+23884=>3122,
+23888=>3123,
+23860=>3124,
+23879=>3125,
+24061=>3126,
+24133=>3127,
+24125=>3128,
+24128=>3129,
+24131=>3130,
+24190=>3131,
+24266=>3132,
+24257=>3133,
+24258=>3134,
+24260=>3135,
+24380=>3136,
+24429=>3137,
+24489=>3138,
+24490=>3139,
+24488=>3140,
+24785=>3141,
+24801=>3142,
+24754=>3143,
+24758=>3144,
+24800=>3145,
+24860=>3146,
+24867=>3147,
+24826=>3148,
+24853=>3149,
+24816=>3150,
+24827=>3151,
+24820=>3152,
+24936=>3153,
+24817=>3154,
+24846=>3155,
+24822=>3156,
+24841=>3157,
+24832=>3158,
+24850=>3159,
+25119=>3160,
+25161=>3161,
+25507=>3162,
+25484=>3163,
+25551=>3164,
+25536=>3165,
+25577=>3166,
+25545=>3167,
+25542=>3168,
+25549=>3169,
+25554=>3170,
+25571=>3171,
+25552=>3172,
+25569=>3173,
+25558=>3174,
+25581=>3175,
+25582=>3176,
+25462=>3177,
+25588=>3178,
+25578=>3179,
+25563=>3180,
+25682=>3181,
+25562=>3182,
+25593=>3183,
+25950=>3184,
+25958=>3185,
+25954=>3186,
+25955=>3187,
+26001=>3188,
+26000=>3189,
+26031=>3190,
+26222=>3191,
+26224=>3192,
+26228=>3193,
+57786=>3193,
+26230=>3194,
+26223=>3195,
+26257=>3196,
+26234=>3197,
+26238=>3198,
+26231=>3199,
+26366=>3200,
+26367=>3201,
+26399=>3202,
+26397=>3203,
+26874=>3204,
+26837=>3205,
+26848=>3206,
+26840=>3207,
+26839=>3208,
+26885=>3209,
+26847=>3210,
+26869=>3211,
+26862=>3212,
+26855=>3213,
+26873=>3214,
+26834=>3215,
+26866=>3216,
+26851=>3217,
+26827=>3218,
+26829=>3219,
+26893=>3220,
+26898=>3221,
+26894=>3222,
+26825=>3223,
+26842=>3224,
+26990=>3225,
+26875=>3226,
+27454=>3227,
+27450=>3228,
+27453=>3229,
+27544=>3230,
+27542=>3231,
+27580=>3232,
+27631=>3233,
+27694=>3234,
+27695=>3235,
+27692=>3236,
+28207=>3237,
+57904=>3237,
+28216=>3238,
+28244=>3239,
+28193=>3240,
+28210=>3241,
+28263=>3242,
+28234=>3243,
+28192=>3244,
+28197=>3245,
+28195=>3246,
+28187=>3247,
+28251=>3248,
+28248=>3249,
+28196=>3250,
+28246=>3251,
+28270=>3252,
+28205=>3253,
+28198=>3254,
+28271=>3255,
+28212=>3256,
+28237=>3257,
+28218=>3258,
+28204=>3259,
+28227=>3260,
+28189=>3261,
+57901=>3261,
+28222=>3262,
+28363=>3263,
+28297=>3264,
+28185=>3265,
+28238=>3266,
+28259=>3267,
+28228=>3268,
+28274=>3269,
+28265=>3270,
+28255=>3271,
+28953=>3272,
+28954=>3273,
+28966=>3274,
+28976=>3275,
+28961=>3276,
+28982=>3277,
+29038=>3278,
+57958=>3278,
+28956=>3279,
+29260=>3280,
+29316=>3281,
+29312=>3282,
+29494=>3283,
+29477=>3284,
+29492=>3285,
+29481=>3286,
+29754=>3287,
+29738=>3288,
+29747=>3289,
+29730=>3290,
+29733=>3291,
+29749=>3292,
+29750=>3293,
+29748=>3294,
+29743=>3295,
+29723=>3296,
+29734=>3297,
+29736=>3298,
+29989=>3299,
+29990=>3300,
+30059=>3301,
+30058=>3302,
+30178=>3303,
+30171=>3304,
+30179=>3305,
+30169=>3306,
+30168=>3307,
+30174=>3308,
+30176=>3309,
+30331=>3310,
+30332=>3311,
+30358=>3312,
+30355=>3313,
+30388=>3314,
+30428=>3315,
+30543=>3316,
+30701=>3317,
+30813=>3318,
+30828=>3319,
+30831=>3320,
+31245=>3321,
+31240=>3322,
+31243=>3323,
+31237=>3324,
+31232=>3325,
+31384=>3326,
+31383=>3327,
+31382=>3328,
+31461=>3329,
+31459=>3330,
+31561=>3331,
+31574=>3332,
+31558=>3333,
+31568=>3334,
+31570=>3335,
+31572=>3336,
+31565=>3337,
+31563=>3338,
+31567=>3339,
+31569=>3340,
+60510=>3340,
+31903=>3341,
+31909=>3342,
+32094=>3343,
+32080=>3344,
+32104=>3345,
+32085=>3346,
+32043=>3347,
+32110=>3348,
+32114=>3349,
+32097=>3350,
+32102=>3351,
+32098=>3352,
+32112=>3353,
+32115=>3354,
+21892=>3355,
+32724=>3356,
+32725=>3357,
+32779=>3358,
+32850=>3359,
+32901=>3360,
+33109=>3361,
+33108=>3362,
+33099=>3363,
+33105=>3364,
+33102=>3365,
+33081=>3366,
+33094=>3367,
+33086=>3368,
+33100=>3369,
+33107=>3370,
+33140=>3371,
+33298=>3372,
+33308=>3373,
+33769=>3374,
+33795=>3375,
+33784=>3376,
+33805=>3377,
+33760=>3378,
+33733=>3379,
+33803=>3380,
+33729=>3381,
+58309=>3381,
+33775=>3382,
+33777=>3383,
+33780=>3384,
+33879=>3385,
+33802=>3386,
+33776=>3387,
+33804=>3388,
+33740=>3389,
+33789=>3390,
+33778=>3391,
+33738=>3392,
+33848=>3393,
+33806=>3394,
+33796=>3395,
+33756=>3396,
+33799=>3397,
+33748=>3398,
+33759=>3399,
+34395=>3400,
+34527=>3401,
+34521=>3402,
+34541=>3403,
+34516=>3404,
+34523=>3405,
+34532=>3406,
+34512=>3407,
+34526=>3408,
+34903=>3409,
+35009=>3410,
+35010=>3411,
+34993=>3412,
+35203=>3413,
+35222=>3414,
+35387=>3415,
+35424=>3416,
+35413=>3417,
+35422=>3418,
+35388=>3419,
+35393=>3420,
+35412=>3421,
+35419=>3422,
+35408=>3423,
+35398=>3424,
+35380=>3425,
+35386=>3426,
+35382=>3427,
+35414=>3428,
+35937=>3429,
+35970=>3430,
+36015=>3431,
+36028=>3432,
+36019=>3433,
+36029=>3434,
+36033=>3435,
+36027=>3436,
+36032=>3437,
+36020=>3438,
+36023=>3439,
+36022=>3440,
+36031=>3441,
+36024=>3442,
+36234=>3443,
+36229=>3444,
+36225=>3445,
+36302=>3446,
+36317=>3447,
+36299=>3448,
+36314=>3449,
+36305=>3450,
+36300=>3451,
+36315=>3452,
+36294=>3453,
+36603=>3454,
+36600=>3455,
+36604=>3456,
+36764=>3457,
+36910=>3458,
+36917=>3459,
+36913=>3460,
+36920=>3461,
+36914=>3462,
+36918=>3463,
+37122=>3464,
+37109=>3465,
+37129=>3466,
+37118=>3467,
+37219=>3468,
+37221=>3469,
+37327=>3470,
+37396=>3471,
+37397=>3472,
+37411=>3473,
+37385=>3474,
+37406=>3475,
+37389=>3476,
+37392=>3477,
+37383=>3478,
+37393=>3479,
+38292=>3480,
+38287=>3481,
+38283=>3482,
+38289=>3483,
+38291=>3484,
+38290=>3485,
+38286=>3486,
+38538=>3487,
+38542=>3488,
+38539=>3489,
+38525=>3490,
+38533=>3491,
+38534=>3492,
+38541=>3493,
+38514=>3494,
+38532=>3495,
+38593=>3496,
+38597=>3497,
+38596=>3498,
+38598=>3499,
+38599=>3500,
+38639=>3501,
+38642=>3502,
+38860=>3503,
+38917=>3504,
+38918=>3505,
+38920=>3506,
+39143=>3507,
+39146=>3508,
+39151=>3509,
+39145=>3510,
+39154=>3511,
+39149=>3512,
+39342=>3513,
+39341=>3514,
+40643=>3515,
+12232=>3515,
+40653=>3516,
+12233=>3516,
+40657=>3517,
+12234=>3517,
+20098=>3518,
+20653=>3519,
+20661=>3520,
+20658=>3521,
+20659=>3522,
+20677=>3523,
+20670=>3524,
+20652=>3525,
+20663=>3526,
+20667=>3527,
+20655=>3528,
+20679=>3529,
+21119=>3530,
+21111=>3531,
+21117=>3532,
+21215=>3533,
+21222=>3534,
+21220=>3535,
+21218=>3536,
+21219=>3537,
+21295=>3538,
+21983=>3539,
+21992=>3540,
+21971=>3541,
+21990=>3542,
+21966=>3543,
+21980=>3544,
+21959=>3545,
+21969=>3546,
+21987=>3547,
+21988=>3548,
+21999=>3549,
+21978=>3550,
+21985=>3551,
+21957=>3552,
+21958=>3553,
+21989=>3554,
+21961=>3555,
+22290=>3556,
+22291=>3557,
+22622=>3558,
+22609=>3559,
+22616=>3560,
+22615=>3561,
+22618=>3562,
+22612=>3563,
+22635=>3564,
+22604=>3565,
+22637=>3566,
+22602=>3567,
+22626=>3568,
+22610=>3569,
+22603=>3570,
+22887=>3571,
+23233=>3572,
+23241=>3573,
+23244=>3574,
+23230=>3575,
+23229=>3576,
+23228=>3577,
+23219=>3578,
+23234=>3579,
+23218=>3580,
+23913=>3581,
+23919=>3582,
+24140=>3583,
+24185=>3584,
+24265=>3585,
+24264=>3586,
+24338=>3587,
+24409=>3588,
+24492=>3589,
+24494=>3590,
+24858=>3591,
+24847=>3592,
+24904=>3593,
+24863=>3594,
+24819=>3595,
+24859=>3596,
+24825=>3597,
+24833=>3598,
+24840=>3599,
+24910=>3600,
+24908=>3601,
+24900=>3602,
+24909=>3603,
+24894=>3604,
+24884=>3605,
+24871=>3606,
+24845=>3607,
+24838=>3608,
+24887=>3609,
+25121=>3610,
+25122=>3611,
+25619=>3612,
+25662=>3613,
+25630=>3614,
+25642=>3615,
+25645=>3616,
+25661=>3617,
+25644=>3618,
+25615=>3619,
+25628=>3620,
+25620=>3621,
+25613=>3622,
+25654=>3623,
+25622=>3624,
+25623=>3625,
+25606=>3626,
+25964=>3627,
+26015=>3628,
+26032=>3629,
+26263=>3630,
+26249=>3631,
+26247=>3632,
+26248=>3633,
+26262=>3634,
+26244=>3635,
+26264=>3636,
+26253=>3637,
+26371=>3638,
+27028=>3639,
+26989=>3640,
+26970=>3641,
+26999=>3642,
+26976=>3643,
+26964=>3644,
+26997=>3645,
+26928=>3646,
+27010=>3647,
+26954=>3648,
+26984=>3649,
+26987=>3650,
+26974=>3651,
+26963=>3652,
+27001=>3653,
+27014=>3654,
+26973=>3655,
+26979=>3656,
+26971=>3657,
+27463=>3658,
+27506=>3659,
+27584=>3660,
+27583=>3661,
+27603=>3662,
+27645=>3663,
+28322=>3664,
+28335=>3665,
+28371=>3666,
+28342=>3667,
+28354=>3668,
+28304=>3669,
+28317=>3670,
+28359=>3671,
+28357=>3672,
+28325=>3673,
+28312=>3674,
+28348=>3675,
+28346=>3676,
+28331=>3677,
+28369=>3678,
+28310=>3679,
+28316=>3680,
+28356=>3681,
+28372=>3682,
+28330=>3683,
+28327=>3684,
+28340=>3685,
+29006=>3686,
+29017=>3687,
+29033=>3688,
+29028=>3689,
+29001=>3690,
+29031=>3691,
+29020=>3692,
+29036=>3693,
+29030=>3694,
+29004=>3695,
+29029=>3696,
+29022=>3697,
+28998=>3698,
+29032=>3699,
+29014=>3700,
+29242=>3701,
+29266=>3702,
+29495=>3703,
+29509=>3704,
+29503=>3705,
+29502=>3706,
+29807=>3707,
+29786=>3708,
+29781=>3709,
+29791=>3710,
+29790=>3711,
+29761=>3712,
+29759=>3713,
+29785=>3714,
+29787=>3715,
+58019=>3716,
+29788=>3716,
+30070=>3717,
+30072=>3718,
+30208=>3719,
+30192=>3720,
+30209=>3721,
+30194=>3722,
+30193=>3723,
+30202=>3724,
+30207=>3725,
+30196=>3726,
+30195=>3727,
+30430=>3728,
+30431=>3729,
+30555=>3730,
+30571=>3731,
+30566=>3732,
+30558=>3733,
+30563=>3734,
+30585=>3735,
+30570=>3736,
+30572=>3737,
+30556=>3738,
+30565=>3739,
+30568=>3740,
+30562=>3741,
+30702=>3742,
+30862=>3743,
+30896=>3744,
+30871=>3745,
+30872=>3746,
+30860=>3747,
+30857=>3748,
+30844=>3749,
+30865=>3750,
+30867=>3751,
+30847=>3752,
+31098=>3753,
+31103=>3754,
+31105=>3755,
+33836=>3756,
+31165=>3757,
+31260=>3758,
+31258=>3759,
+31264=>3760,
+31252=>3761,
+31263=>3762,
+31262=>3763,
+31391=>3764,
+31392=>3765,
+31607=>3766,
+31680=>3767,
+31584=>3768,
+31598=>3769,
+31591=>3770,
+31921=>3771,
+31923=>3772,
+31925=>3773,
+32147=>3774,
+32121=>3775,
+32145=>3776,
+32129=>3777,
+32143=>3778,
+32091=>3779,
+32622=>3780,
+32617=>3781,
+32618=>3782,
+32626=>3783,
+32681=>3784,
+32680=>3785,
+32676=>3786,
+32854=>3787,
+32856=>3788,
+32902=>3789,
+32900=>3790,
+33137=>3791,
+33136=>3792,
+33144=>3793,
+33125=>3794,
+33134=>3795,
+33139=>3796,
+33131=>3797,
+33145=>3798,
+33146=>3799,
+33126=>3800,
+33285=>3801,
+33351=>3802,
+33922=>3803,
+33911=>3804,
+33853=>3805,
+33841=>3806,
+33909=>3807,
+33894=>3808,
+33899=>3809,
+33865=>3810,
+33900=>3811,
+33883=>3812,
+33852=>3813,
+33845=>3814,
+33889=>3815,
+33891=>3816,
+33897=>3817,
+33901=>3818,
+33862=>3819,
+34398=>3820,
+34396=>3821,
+34399=>3822,
+34553=>3823,
+34579=>3824,
+34568=>3825,
+34567=>3826,
+34560=>3827,
+34558=>3828,
+34555=>3829,
+34562=>3830,
+34563=>3831,
+34566=>3832,
+34570=>3833,
+34905=>3834,
+35039=>3835,
+35028=>3836,
+35033=>3837,
+35036=>3838,
+35032=>3839,
+35037=>3840,
+35041=>3841,
+35018=>3842,
+35029=>3843,
+35026=>3844,
+35228=>3845,
+35299=>3846,
+35435=>3847,
+35442=>3848,
+35443=>3849,
+35430=>3850,
+35433=>3851,
+35440=>3852,
+35463=>3853,
+35452=>3854,
+35427=>3855,
+35488=>3856,
+35441=>3857,
+35461=>3858,
+35437=>3859,
+35426=>3860,
+35438=>3861,
+35436=>3862,
+35449=>3863,
+35451=>3864,
+35390=>3865,
+35432=>3866,
+35938=>3867,
+35978=>3868,
+35977=>3869,
+36042=>3870,
+36039=>3871,
+36040=>3872,
+36036=>3873,
+36018=>3874,
+36035=>3875,
+36034=>3876,
+36037=>3877,
+36321=>3878,
+36319=>3879,
+36328=>3880,
+36335=>3881,
+36339=>3882,
+36346=>3883,
+36330=>3884,
+36324=>3885,
+36326=>3886,
+36530=>3887,
+36611=>3888,
+36617=>3889,
+36606=>3890,
+36618=>3891,
+36767=>3892,
+36786=>3893,
+36939=>3894,
+36938=>3895,
+36947=>3896,
+36930=>3897,
+36948=>3898,
+36924=>3899,
+36949=>3900,
+36944=>3901,
+36935=>3902,
+36943=>3903,
+36942=>3904,
+36941=>3905,
+36945=>3906,
+36926=>3907,
+36929=>3908,
+37138=>3909,
+37143=>3910,
+37228=>3911,
+37226=>3912,
+37225=>3913,
+37321=>3914,
+37431=>3915,
+37463=>3916,
+37432=>3917,
+37437=>3918,
+37440=>3919,
+37438=>3920,
+37467=>3921,
+37451=>3922,
+37476=>3923,
+37457=>3924,
+37428=>3925,
+37449=>3926,
+37453=>3927,
+37445=>3928,
+37433=>3929,
+37439=>3930,
+37466=>3931,
+38296=>3932,
+38552=>3933,
+38548=>3934,
+38549=>3935,
+38605=>3936,
+38603=>3937,
+38601=>3938,
+38602=>3939,
+38647=>3940,
+38651=>3941,
+38649=>3942,
+38646=>3943,
+38742=>3944,
+38772=>3945,
+38774=>3946,
+38928=>3947,
+38929=>3948,
+38931=>3949,
+38922=>3950,
+38930=>3951,
+38924=>3952,
+39164=>3953,
+39156=>3954,
+39165=>3955,
+39166=>3956,
+39347=>3957,
+39345=>3958,
+39348=>3959,
+39649=>3960,
+40169=>3961,
+40578=>3962,
+40718=>3963,
+12237=>3963,
+40723=>3964,
+12238=>3964,
+40736=>3965,
+12239=>3965,
+20711=>3966,
+20718=>3967,
+20709=>3968,
+20694=>3969,
+20717=>3970,
+60903=>3970,
+20698=>3971,
+20693=>3972,
+20687=>3973,
+20689=>3974,
+20721=>3975,
+20686=>3976,
+20713=>3977,
+20834=>3978,
+20979=>3979,
+21123=>3980,
+21122=>3981,
+21297=>3982,
+21421=>3983,
+22014=>3984,
+22016=>3985,
+22043=>3986,
+22039=>3987,
+22013=>3988,
+22036=>3989,
+22022=>3990,
+22025=>3991,
+22029=>3992,
+22030=>3993,
+22007=>3994,
+22038=>3995,
+22047=>3996,
+22024=>3997,
+22032=>3998,
+22006=>3999,
+22296=>4000,
+22294=>4001,
+22645=>4002,
+22654=>4003,
+22659=>4004,
+22675=>4005,
+22666=>4006,
+22649=>4007,
+22661=>4008,
+22653=>4009,
+22781=>4010,
+22821=>4011,
+22818=>4012,
+22820=>4013,
+22890=>4014,
+22889=>4015,
+23265=>4016,
+23270=>4017,
+23273=>4018,
+23255=>4019,
+23254=>4020,
+23256=>4021,
+23267=>4022,
+23413=>4023,
+23518=>4024,
+23527=>4025,
+23521=>4026,
+23525=>4027,
+23526=>4028,
+23528=>4029,
+23522=>4030,
+23524=>4031,
+23519=>4032,
+23565=>4033,
+23650=>4034,
+23940=>4035,
+23943=>4036,
+24155=>4037,
+24163=>4038,
+24149=>4039,
+24151=>4040,
+24148=>4041,
+24275=>4042,
+24278=>4043,
+24330=>4044,
+24390=>4045,
+24432=>4046,
+24505=>4047,
+24903=>4048,
+24895=>4049,
+24907=>4050,
+24951=>4051,
+24930=>4052,
+24931=>4053,
+24927=>4054,
+24922=>4055,
+24920=>4056,
+24949=>4057,
+25130=>4058,
+25735=>4059,
+25688=>4060,
+25684=>4061,
+25764=>4062,
+25720=>4063,
+25695=>4064,
+25722=>4065,
+25681=>4066,
+25703=>4067,
+25652=>4068,
+25709=>4069,
+25723=>4070,
+25970=>4071,
+26017=>4072,
+26071=>4073,
+26070=>4074,
+26274=>4075,
+26280=>4076,
+26269=>4077,
+27036=>4078,
+27048=>4079,
+27029=>4080,
+27073=>4081,
+27054=>4082,
+27091=>4083,
+27083=>4084,
+27035=>4085,
+27063=>4086,
+27067=>4087,
+27051=>4088,
+27060=>4089,
+27088=>4090,
+27085=>4091,
+27053=>4092,
+27084=>4093,
+27046=>4094,
+27075=>4095,
+27043=>4096,
+27465=>4097,
+27468=>4098,
+27699=>4099,
+28467=>4100,
+28436=>4101,
+28414=>4102,
+28435=>4103,
+28404=>4104,
+28457=>4105,
+28478=>4106,
+28448=>4107,
+28460=>4108,
+28431=>4109,
+28418=>4110,
+28450=>4111,
+28415=>4112,
+28399=>4113,
+28422=>4114,
+28465=>4115,
+28472=>4116,
+28466=>4117,
+28451=>4118,
+28437=>4119,
+28459=>4120,
+28463=>4121,
+28552=>4122,
+28458=>4123,
+28396=>4124,
+28417=>4125,
+28402=>4126,
+28364=>4127,
+28407=>4128,
+29076=>4129,
+29081=>4130,
+29053=>4131,
+29066=>4132,
+29060=>4133,
+29074=>4134,
+29246=>4135,
+29330=>4136,
+29334=>4137,
+29508=>4138,
+29520=>4139,
+29796=>4140,
+29795=>4141,
+29802=>4142,
+29808=>4143,
+29805=>4144,
+29956=>4145,
+30097=>4146,
+30247=>4147,
+30221=>4148,
+30219=>4149,
+30217=>4150,
+30227=>4151,
+30433=>4152,
+30435=>4153,
+30596=>4154,
+30589=>4155,
+30591=>4156,
+30561=>4157,
+30913=>4158,
+30879=>4159,
+30887=>4160,
+30899=>4161,
+30889=>4162,
+30883=>4163,
+31118=>4164,
+31119=>4165,
+31117=>4166,
+31278=>4167,
+31281=>4168,
+31402=>4169,
+31401=>4170,
+31469=>4171,
+31471=>4172,
+31649=>4173,
+31637=>4174,
+31627=>4175,
+31605=>4176,
+31639=>4177,
+31645=>4178,
+31636=>4179,
+31631=>4180,
+31672=>4181,
+58170=>4181,
+31623=>4182,
+31620=>4183,
+31929=>4184,
+31933=>4185,
+31934=>4186,
+32187=>4187,
+32176=>4188,
+32156=>4189,
+32189=>4190,
+32190=>4191,
+32160=>4192,
+32202=>4193,
+32180=>4194,
+32178=>4195,
+32177=>4196,
+32186=>4197,
+32162=>4198,
+32191=>4199,
+32181=>4200,
+32184=>4201,
+32173=>4202,
+32210=>4203,
+58202=>4203,
+32199=>4204,
+32172=>4205,
+32624=>4206,
+32736=>4207,
+32737=>4208,
+32735=>4209,
+32862=>4210,
+32858=>4211,
+32903=>4212,
+33104=>4213,
+33152=>4214,
+33167=>4215,
+33160=>4216,
+33162=>4217,
+33151=>4218,
+33154=>4219,
+33255=>4220,
+33274=>4221,
+33287=>4222,
+33300=>4223,
+33310=>4224,
+33355=>4225,
+33993=>4226,
+33983=>4227,
+33990=>4228,
+33988=>4229,
+33945=>4230,
+33950=>4231,
+33970=>4232,
+33948=>4233,
+33995=>4234,
+33976=>4235,
+33984=>4236,
+34003=>4237,
+33936=>4238,
+33980=>4239,
+34001=>4240,
+33994=>4241,
+34623=>4242,
+34588=>4243,
+34619=>4244,
+34594=>4245,
+34597=>4246,
+34612=>4247,
+34584=>4248,
+34645=>4249,
+34615=>4250,
+34601=>4251,
+35059=>4252,
+35074=>4253,
+35060=>4254,
+35065=>4255,
+35064=>4256,
+35069=>4257,
+35048=>4258,
+35098=>4259,
+35055=>4260,
+35494=>4261,
+35468=>4262,
+35486=>4263,
+35491=>4264,
+35469=>4265,
+35489=>4266,
+35475=>4267,
+35492=>4268,
+35498=>4269,
+35493=>4270,
+35496=>4271,
+35480=>4272,
+35473=>4273,
+35482=>4274,
+35495=>4275,
+35946=>4276,
+35981=>4277,
+35980=>4278,
+36051=>4279,
+36049=>4280,
+36050=>4281,
+36203=>4282,
+36249=>4283,
+36245=>4284,
+36348=>4285,
+36628=>4286,
+36626=>4287,
+36629=>4288,
+36627=>4289,
+36771=>4290,
+36960=>4291,
+36952=>4292,
+36956=>4293,
+36963=>4294,
+36953=>4295,
+36958=>4296,
+36962=>4297,
+36957=>4298,
+36955=>4299,
+37145=>4300,
+37144=>4301,
+37150=>4302,
+37237=>4303,
+37240=>4304,
+37239=>4305,
+37236=>4306,
+37496=>4307,
+37548=>4308,
+37504=>4309,
+37509=>4310,
+37528=>4311,
+37526=>4312,
+37499=>4313,
+37523=>4314,
+37532=>4315,
+37544=>4316,
+37500=>4317,
+37521=>4318,
+38305=>4319,
+38312=>4320,
+38313=>4321,
+38307=>4322,
+38309=>4323,
+38308=>4324,
+38553=>4325,
+38556=>4326,
+38555=>4327,
+38604=>4328,
+38610=>4329,
+38656=>4330,
+38780=>4331,
+38789=>4332,
+38902=>4333,
+38935=>4334,
+38936=>4335,
+39087=>4336,
+39089=>4337,
+39171=>4338,
+39173=>4339,
+39180=>4340,
+39177=>4341,
+39361=>4342,
+39599=>4343,
+39600=>4344,
+39654=>4345,
+39745=>4346,
+39746=>4347,
+40180=>4348,
+40182=>4349,
+40179=>4350,
+40636=>4351,
+40763=>4352,
+12240=>4352,
+40778=>4353,
+12241=>4353,
+20740=>4354,
+20736=>4355,
+20731=>4356,
+20725=>4357,
+20729=>4358,
+20738=>4359,
+20744=>4360,
+20745=>4361,
+20741=>4362,
+20956=>4363,
+21127=>4364,
+21128=>4365,
+21129=>4366,
+21133=>4367,
+21130=>4368,
+21232=>4369,
+21426=>4370,
+22062=>4371,
+22075=>4372,
+22073=>4373,
+22066=>4374,
+22079=>4375,
+22068=>4376,
+22057=>4377,
+22099=>4378,
+22094=>4379,
+22103=>4380,
+22132=>4381,
+22070=>4382,
+22063=>4383,
+22064=>4384,
+22656=>4385,
+22687=>4386,
+22686=>4387,
+22707=>4388,
+22684=>4389,
+22702=>4390,
+22697=>4391,
+22694=>4392,
+22893=>4393,
+23305=>4394,
+23291=>4395,
+23307=>4396,
+23285=>4397,
+23308=>4398,
+23304=>4399,
+23534=>4400,
+23532=>4401,
+23529=>4402,
+23531=>4403,
+23652=>4404,
+23653=>4405,
+23965=>4406,
+23956=>4407,
+24162=>4408,
+24159=>4409,
+24161=>4410,
+24290=>4411,
+24282=>4412,
+24287=>4413,
+24285=>4414,
+24291=>4415,
+24288=>4416,
+24392=>4417,
+24433=>4418,
+24503=>4419,
+24501=>4420,
+24950=>4421,
+24935=>4422,
+24942=>4423,
+24925=>4424,
+24917=>4425,
+24962=>4426,
+24956=>4427,
+24944=>4428,
+24939=>4429,
+24958=>4430,
+24999=>4431,
+24976=>4432,
+25003=>4433,
+24974=>4434,
+25004=>4435,
+24986=>4436,
+24996=>4437,
+24980=>4438,
+25006=>4439,
+25134=>4440,
+25705=>4441,
+25711=>4442,
+25721=>4443,
+25758=>4444,
+25778=>4445,
+25736=>4446,
+25744=>4447,
+57745=>4447,
+25776=>4448,
+25765=>4449,
+25747=>4450,
+25749=>4451,
+25769=>4452,
+25746=>4453,
+25774=>4454,
+25773=>4455,
+25771=>4456,
+25754=>4457,
+25772=>4458,
+25753=>4459,
+25762=>4460,
+25779=>4461,
+25973=>4462,
+25975=>4463,
+25976=>4464,
+26286=>4465,
+26283=>4466,
+26292=>4467,
+26289=>4468,
+27171=>4469,
+27167=>4470,
+27112=>4471,
+27137=>4472,
+27166=>4473,
+27161=>4474,
+27133=>4475,
+27169=>4476,
+27155=>4477,
+27146=>4478,
+27123=>4479,
+27138=>4480,
+27141=>4481,
+27117=>4482,
+27153=>4483,
+27472=>4484,
+27470=>4485,
+27556=>4486,
+27589=>4487,
+27590=>4488,
+28479=>4489,
+28540=>4490,
+28548=>4491,
+28497=>4492,
+28518=>4493,
+28500=>4494,
+28550=>4495,
+28525=>4496,
+28507=>4497,
+28536=>4498,
+28526=>4499,
+28558=>4500,
+28538=>4501,
+28528=>4502,
+28516=>4503,
+28567=>4504,
+28504=>4505,
+28373=>4506,
+28527=>4507,
+28512=>4508,
+28511=>4509,
+29087=>4510,
+29100=>4511,
+29105=>4512,
+29096=>4513,
+29270=>4514,
+29339=>4515,
+29518=>4516,
+29527=>4517,
+29801=>4518,
+29835=>4519,
+29827=>4520,
+29822=>4521,
+29824=>4522,
+30079=>4523,
+30240=>4524,
+30249=>4525,
+30239=>4526,
+30244=>4527,
+30246=>4528,
+30241=>4529,
+30242=>4530,
+30362=>4531,
+30394=>4532,
+30436=>4533,
+30606=>4534,
+30599=>4535,
+30604=>4536,
+30609=>4537,
+30603=>4538,
+30923=>4539,
+30917=>4540,
+30906=>4541,
+30922=>4542,
+30910=>4543,
+30933=>4544,
+30908=>4545,
+30928=>4546,
+31295=>4547,
+31292=>4548,
+31296=>4549,
+31293=>4550,
+31287=>4551,
+31291=>4552,
+31407=>4553,
+31406=>4554,
+31661=>4555,
+31665=>4556,
+31684=>4557,
+31668=>4558,
+31686=>4559,
+31687=>4560,
+31681=>4561,
+31648=>4562,
+31692=>4563,
+31946=>4564,
+32224=>4565,
+32244=>4566,
+32239=>4567,
+32251=>4568,
+32216=>4569,
+32236=>4570,
+32221=>4571,
+32232=>4572,
+32227=>4573,
+32218=>4574,
+32222=>4575,
+32233=>4576,
+32158=>4577,
+32217=>4578,
+32242=>4579,
+32249=>4580,
+32629=>4581,
+32631=>4582,
+32687=>4583,
+32745=>4584,
+32806=>4585,
+33179=>4586,
+33180=>4587,
+33181=>4588,
+33184=>4589,
+33178=>4590,
+33176=>4591,
+34071=>4592,
+34109=>4593,
+34074=>4594,
+34030=>4595,
+34092=>4596,
+34093=>4597,
+34067=>4598,
+34065=>4599,
+34083=>4600,
+34081=>4601,
+34068=>4602,
+34028=>4603,
+34085=>4604,
+34047=>4605,
+34054=>4606,
+34690=>4607,
+34676=>4608,
+34678=>4609,
+34656=>4610,
+34662=>4611,
+34680=>4612,
+34664=>4613,
+34649=>4614,
+34647=>4615,
+34636=>4616,
+34643=>4617,
+34907=>4618,
+34909=>4619,
+35088=>4620,
+35079=>4621,
+35090=>4622,
+35091=>4623,
+35093=>4624,
+35082=>4625,
+35516=>4626,
+35538=>4627,
+35527=>4628,
+35524=>4629,
+35477=>4630,
+35531=>4631,
+35576=>4632,
+35506=>4633,
+35529=>4634,
+35522=>4635,
+35519=>4636,
+35504=>4637,
+35542=>4638,
+35533=>4639,
+35510=>4640,
+35513=>4641,
+35547=>4642,
+35916=>4643,
+35918=>4644,
+35948=>4645,
+36064=>4646,
+36062=>4647,
+36070=>4648,
+36068=>4649,
+36076=>4650,
+36077=>4651,
+36066=>4652,
+36067=>4653,
+36060=>4654,
+36074=>4655,
+36065=>4656,
+36205=>4657,
+36255=>4658,
+36259=>4659,
+36395=>4660,
+36368=>4661,
+36381=>4662,
+36386=>4663,
+36367=>4664,
+36393=>4665,
+36383=>4666,
+36385=>4667,
+36382=>4668,
+36538=>4669,
+36637=>4670,
+36635=>4671,
+36639=>4672,
+36649=>4673,
+36646=>4674,
+36650=>4675,
+36636=>4676,
+36638=>4677,
+36645=>4678,
+36969=>4679,
+36974=>4680,
+36968=>4681,
+36973=>4682,
+36983=>4683,
+37168=>4684,
+37165=>4685,
+37159=>4686,
+37169=>4687,
+37255=>4688,
+37257=>4689,
+37259=>4690,
+37251=>4691,
+37573=>4692,
+37563=>4693,
+37559=>4694,
+37610=>4695,
+37604=>4696,
+37569=>4697,
+37555=>4698,
+37564=>4699,
+37586=>4700,
+37575=>4701,
+37616=>4702,
+37554=>4703,
+38317=>4704,
+38321=>4705,
+38660=>4706,
+38662=>4707,
+38663=>4708,
+38665=>4709,
+38752=>4710,
+38797=>4711,
+38795=>4712,
+38799=>4713,
+38945=>4714,
+38955=>4715,
+38940=>4716,
+39091=>4717,
+39178=>4718,
+39187=>4719,
+39186=>4720,
+39192=>4721,
+39389=>4722,
+39376=>4723,
+39391=>4724,
+39387=>4725,
+39377=>4726,
+39381=>4727,
+39378=>4728,
+39385=>4729,
+39607=>4730,
+39662=>4731,
+39663=>4732,
+39719=>4733,
+39749=>4734,
+39748=>4735,
+39799=>4736,
+39791=>4737,
+40198=>4738,
+40201=>4739,
+40195=>4740,
+40617=>4741,
+40638=>4742,
+40654=>4743,
+22696=>4744,
+12242=>4745,
+40786=>4745,
+20754=>4746,
+20760=>4747,
+20756=>4748,
+20752=>4749,
+20757=>4750,
+20864=>4751,
+20906=>4752,
+20957=>4753,
+21137=>4754,
+21139=>4755,
+21235=>4756,
+22105=>4757,
+22123=>4758,
+22137=>4759,
+22121=>4760,
+22116=>4761,
+22136=>4762,
+22122=>4763,
+22120=>4764,
+22117=>4765,
+22129=>4766,
+22127=>4767,
+22124=>4768,
+22114=>4769,
+22134=>4770,
+22721=>4771,
+22718=>4772,
+22727=>4773,
+22725=>4774,
+22894=>4775,
+23325=>4776,
+23348=>4777,
+23416=>4778,
+23536=>4779,
+23566=>4780,
+24394=>4781,
+25010=>4782,
+24977=>4783,
+25001=>4784,
+24970=>4785,
+25037=>4786,
+25014=>4787,
+25022=>4788,
+25034=>4789,
+25032=>4790,
+25136=>4791,
+25797=>4792,
+25793=>4793,
+25803=>4794,
+25787=>4795,
+25788=>4796,
+25818=>4797,
+25796=>4798,
+25799=>4799,
+25794=>4800,
+25805=>4801,
+25791=>4802,
+25810=>4803,
+25812=>4804,
+25790=>4805,
+25972=>4806,
+26310=>4807,
+26313=>4808,
+26297=>4809,
+26308=>4810,
+26311=>4811,
+26296=>4812,
+27197=>4813,
+27192=>4814,
+27194=>4815,
+27225=>4816,
+27243=>4817,
+27224=>4818,
+27193=>4819,
+27204=>4820,
+27234=>4821,
+27233=>4822,
+27211=>4823,
+27207=>4824,
+27189=>4825,
+27231=>4826,
+27208=>4827,
+27481=>4828,
+27511=>4829,
+27653=>4830,
+28610=>4831,
+28593=>4832,
+28577=>4833,
+28611=>4834,
+28580=>4835,
+28609=>4836,
+28583=>4837,
+28595=>4838,
+28608=>4839,
+28601=>4840,
+28598=>4841,
+60318=>4841,
+28582=>4842,
+28576=>4843,
+28596=>4844,
+29118=>4845,
+29129=>4846,
+29136=>4847,
+29138=>4848,
+29128=>4849,
+29141=>4850,
+29113=>4851,
+29134=>4852,
+29145=>4853,
+29148=>4854,
+29123=>4855,
+29124=>4856,
+29544=>4857,
+29852=>4858,
+29859=>4859,
+29848=>4860,
+29855=>4861,
+29854=>4862,
+29922=>4863,
+29964=>4864,
+29965=>4865,
+30260=>4866,
+30264=>4867,
+30266=>4868,
+30439=>4869,
+30437=>4870,
+30624=>4871,
+30622=>4872,
+30623=>4873,
+30629=>4874,
+30952=>4875,
+30938=>4876,
+30956=>4877,
+30951=>4878,
+31142=>4879,
+31309=>4880,
+31310=>4881,
+31302=>4882,
+31308=>4883,
+31307=>4884,
+31418=>4885,
+31705=>4886,
+31761=>4887,
+31689=>4888,
+31716=>4889,
+31707=>4890,
+31713=>4891,
+31721=>4892,
+31718=>4893,
+31957=>4894,
+31958=>4895,
+32266=>4896,
+32273=>4897,
+32264=>4898,
+32283=>4899,
+32291=>4900,
+32286=>4901,
+32285=>4902,
+58211=>4902,
+32265=>4903,
+32272=>4904,
+32633=>4905,
+32690=>4906,
+32752=>4907,
+32753=>4908,
+32750=>4909,
+32808=>4910,
+58239=>4910,
+33203=>4911,
+33193=>4912,
+33192=>4913,
+33275=>4914,
+33288=>4915,
+33368=>4916,
+33369=>4917,
+34122=>4918,
+34137=>4919,
+34120=>4920,
+34152=>4921,
+34153=>4922,
+34115=>4923,
+34121=>4924,
+34157=>4925,
+34154=>4926,
+34142=>4927,
+34691=>4928,
+34719=>4929,
+34718=>4930,
+34722=>4931,
+34701=>4932,
+34913=>4933,
+35114=>4934,
+35122=>4935,
+35109=>4936,
+35115=>4937,
+35105=>4938,
+35242=>4939,
+35238=>4940,
+58391=>4940,
+35558=>4941,
+35578=>4942,
+35563=>4943,
+35569=>4944,
+35584=>4945,
+35548=>4946,
+35559=>4947,
+35566=>4948,
+35582=>4949,
+35585=>4950,
+35586=>4951,
+35575=>4952,
+35565=>4953,
+35571=>4954,
+35574=>4955,
+35580=>4956,
+35947=>4957,
+35949=>4958,
+35987=>4959,
+36084=>4960,
+36420=>4961,
+36401=>4962,
+36404=>4963,
+36418=>4964,
+36409=>4965,
+36405=>4966,
+36667=>4967,
+36655=>4968,
+36664=>4969,
+36659=>4970,
+36776=>4971,
+36774=>4972,
+36981=>4973,
+36980=>4974,
+36984=>4975,
+36978=>4976,
+36988=>4977,
+36986=>4978,
+37172=>4979,
+37266=>4980,
+37664=>4981,
+37686=>4982,
+37624=>4983,
+37683=>4984,
+37679=>4985,
+37666=>4986,
+37628=>4987,
+37675=>4988,
+37636=>4989,
+37658=>4990,
+37648=>4991,
+37670=>4992,
+37665=>4993,
+37653=>4994,
+37678=>4995,
+37657=>4996,
+38331=>4997,
+38567=>4998,
+38568=>4999,
+38570=>5000,
+38613=>5001,
+38670=>5002,
+38673=>5003,
+38678=>5004,
+38669=>5005,
+38675=>5006,
+38671=>5007,
+38747=>5008,
+58565=>5009,
+38748=>5009,
+38758=>5010,
+38808=>5011,
+38960=>5012,
+38968=>5013,
+38971=>5014,
+38967=>5015,
+38957=>5016,
+38969=>5017,
+38948=>5018,
+39184=>5019,
+39208=>5020,
+39198=>5021,
+39195=>5022,
+39201=>5023,
+39194=>5024,
+39405=>5025,
+39394=>5026,
+39409=>5027,
+39608=>5028,
+39612=>5029,
+39675=>5030,
+39661=>5031,
+39720=>5032,
+39825=>5033,
+40213=>5034,
+40227=>5035,
+40230=>5036,
+40232=>5037,
+40210=>5038,
+40219=>5039,
+40664=>5040,
+40660=>5041,
+40845=>5042,
+12243=>5042,
+40860=>5043,
+12244=>5043,
+20778=>5044,
+20767=>5045,
+20769=>5046,
+20786=>5047,
+21237=>5048,
+22158=>5049,
+22144=>5050,
+22160=>5051,
+22149=>5052,
+22151=>5053,
+22159=>5054,
+22741=>5055,
+22739=>5056,
+22737=>5057,
+22734=>5058,
+23344=>5059,
+23338=>5060,
+23332=>5061,
+23418=>5062,
+23607=>5063,
+23656=>5064,
+23996=>5065,
+23994=>5066,
+23997=>5067,
+23992=>5068,
+24171=>5069,
+24396=>5070,
+24509=>5071,
+25033=>5072,
+25026=>5073,
+25031=>5074,
+25062=>5075,
+25035=>5076,
+25138=>5077,
+25140=>5078,
+25806=>5079,
+25802=>5080,
+25816=>5081,
+25824=>5082,
+25840=>5083,
+25830=>5084,
+25836=>5085,
+25841=>5086,
+25826=>5087,
+25837=>5088,
+25986=>5089,
+25987=>5090,
+26329=>5091,
+26326=>5092,
+27264=>5093,
+27284=>5094,
+27268=>5095,
+27298=>5096,
+27292=>5097,
+27355=>5098,
+27299=>5099,
+27262=>5100,
+27287=>5101,
+27280=>5102,
+27296=>5103,
+27484=>5104,
+27566=>5105,
+27610=>5106,
+27656=>5107,
+28632=>5108,
+28657=>5109,
+28639=>5110,
+28640=>5111,
+28635=>5112,
+28644=>5113,
+28651=>5114,
+28655=>5115,
+28544=>5116,
+28652=>5117,
+28641=>5118,
+28649=>5119,
+28629=>5120,
+28654=>5121,
+28656=>5122,
+29159=>5123,
+29151=>5124,
+60361=>5124,
+29166=>5125,
+29158=>5126,
+29157=>5127,
+29165=>5128,
+29164=>5129,
+29172=>5130,
+29152=>5131,
+29237=>5132,
+29254=>5133,
+29552=>5134,
+29554=>5135,
+29865=>5136,
+29872=>5137,
+29862=>5138,
+29864=>5139,
+30278=>5140,
+30274=>5141,
+30284=>5142,
+30442=>5143,
+30643=>5144,
+30634=>5145,
+30640=>5146,
+30636=>5147,
+30631=>5148,
+30637=>5149,
+30703=>5150,
+30967=>5151,
+30970=>5152,
+30964=>5153,
+30959=>5154,
+30977=>5155,
+31143=>5156,
+31146=>5157,
+31319=>5158,
+31423=>5159,
+31751=>5160,
+31757=>5161,
+31742=>5162,
+31735=>5163,
+31756=>5164,
+31712=>5165,
+31968=>5166,
+31964=>5167,
+31966=>5168,
+31970=>5169,
+31967=>5170,
+31961=>5171,
+31965=>5172,
+32302=>5173,
+32318=>5174,
+32326=>5175,
+32311=>5176,
+32306=>5177,
+32323=>5178,
+32299=>5179,
+32317=>5180,
+32305=>5181,
+32325=>5182,
+32321=>5183,
+32308=>5184,
+32313=>5185,
+32328=>5186,
+32309=>5187,
+32319=>5188,
+32303=>5189,
+32580=>5190,
+32755=>5191,
+32764=>5192,
+32881=>5193,
+32882=>5194,
+32880=>5195,
+32879=>5196,
+32883=>5197,
+33222=>5198,
+33219=>5199,
+33210=>5200,
+33218=>5201,
+33216=>5202,
+33215=>5203,
+33213=>5204,
+33225=>5205,
+33214=>5206,
+33256=>5207,
+33289=>5208,
+33393=>5209,
+34218=>5210,
+34180=>5211,
+34174=>5212,
+34204=>5213,
+34193=>5214,
+34196=>5215,
+34223=>5216,
+34203=>5217,
+34183=>5218,
+34216=>5219,
+34186=>5220,
+34214=>5221,
+34407=>5222,
+34752=>5223,
+34769=>5224,
+34739=>5225,
+34770=>5226,
+34758=>5227,
+34731=>5228,
+34747=>5229,
+34746=>5230,
+34760=>5231,
+34763=>5232,
+35131=>5233,
+35126=>5234,
+35140=>5235,
+35128=>5236,
+35133=>5237,
+35244=>5238,
+35598=>5239,
+35607=>5240,
+35609=>5241,
+35611=>5242,
+35594=>5243,
+35616=>5244,
+35613=>5245,
+35588=>5246,
+35600=>5247,
+35905=>5248,
+35903=>5249,
+35955=>5250,
+36090=>5251,
+36093=>5252,
+36092=>5253,
+36088=>5254,
+36091=>5255,
+36264=>5256,
+36425=>5257,
+36427=>5258,
+36424=>5259,
+36426=>5260,
+36676=>5261,
+36670=>5262,
+36674=>5263,
+36677=>5264,
+36671=>5265,
+36991=>5266,
+36989=>5267,
+36996=>5268,
+36993=>5269,
+36994=>5270,
+36992=>5271,
+37177=>5272,
+37283=>5273,
+37278=>5274,
+37276=>5275,
+37709=>5276,
+37762=>5277,
+37672=>5278,
+37749=>5279,
+37706=>5280,
+37733=>5281,
+37707=>5282,
+37656=>5283,
+37758=>5284,
+37740=>5285,
+37723=>5286,
+37744=>5287,
+37722=>5288,
+37716=>5289,
+38346=>5290,
+38347=>5291,
+38348=>5292,
+38344=>5293,
+38342=>5294,
+38577=>5295,
+38584=>5296,
+38614=>5297,
+38684=>5298,
+38686=>5299,
+38816=>5300,
+38867=>5301,
+38982=>5302,
+39094=>5303,
+39221=>5304,
+39425=>5305,
+39423=>5306,
+39854=>5307,
+39851=>5308,
+39850=>5309,
+39853=>5310,
+40251=>5311,
+40255=>5312,
+40587=>5313,
+40655=>5314,
+40670=>5315,
+40668=>5316,
+40669=>5317,
+40667=>5318,
+40766=>5319,
+40779=>5320,
+21474=>5321,
+22165=>5322,
+22190=>5323,
+22745=>5324,
+22744=>5325,
+23352=>5326,
+24413=>5327,
+25059=>5328,
+25139=>5329,
+25844=>5330,
+25842=>5331,
+25854=>5332,
+25862=>5333,
+25850=>5334,
+25851=>5335,
+25847=>5336,
+26039=>5337,
+26332=>5338,
+26406=>5339,
+27315=>5340,
+27308=>5341,
+27331=>5342,
+27323=>5343,
+27320=>5344,
+27330=>5345,
+27310=>5346,
+27311=>5347,
+27487=>5348,
+27512=>5349,
+27567=>5350,
+28681=>5351,
+28683=>5352,
+28670=>5353,
+28678=>5354,
+28666=>5355,
+28689=>5356,
+28687=>5357,
+29179=>5358,
+29180=>5359,
+29182=>5360,
+29176=>5361,
+29559=>5362,
+29557=>5363,
+29863=>5364,
+29887=>5365,
+29973=>5366,
+30294=>5367,
+30296=>5368,
+30290=>5369,
+30653=>5370,
+30655=>5371,
+30651=>5372,
+30652=>5373,
+30990=>5374,
+31150=>5375,
+31329=>5376,
+31330=>5377,
+31328=>5378,
+31428=>5379,
+31429=>5380,
+31787=>5381,
+31783=>5382,
+31786=>5383,
+31774=>5384,
+31779=>5385,
+31777=>5386,
+31975=>5387,
+32340=>5388,
+32341=>5389,
+32350=>5390,
+32346=>5391,
+32353=>5392,
+32338=>5393,
+32345=>5394,
+32584=>5395,
+32761=>5396,
+32763=>5397,
+32887=>5398,
+32886=>5399,
+33229=>5400,
+33231=>5401,
+33290=>5402,
+34255=>5403,
+34217=>5404,
+34253=>5405,
+34256=>5406,
+34249=>5407,
+34224=>5408,
+34234=>5409,
+34233=>5410,
+34799=>5411,
+34796=>5412,
+34802=>5413,
+34784=>5414,
+35206=>5415,
+35250=>5416,
+35316=>5417,
+35624=>5418,
+35641=>5419,
+35628=>5420,
+35627=>5421,
+35920=>5422,
+36101=>5423,
+36441=>5424,
+36451=>5425,
+36454=>5426,
+36452=>5427,
+36447=>5428,
+36437=>5429,
+36544=>5430,
+36681=>5431,
+36685=>5432,
+36999=>5433,
+36995=>5434,
+37000=>5435,
+37291=>5436,
+37292=>5437,
+37328=>5438,
+37780=>5439,
+37770=>5440,
+37782=>5441,
+37794=>5442,
+37811=>5443,
+37806=>5444,
+37804=>5445,
+37808=>5446,
+37784=>5447,
+37786=>5448,
+37783=>5449,
+38356=>5450,
+38358=>5451,
+38352=>5452,
+38357=>5453,
+38626=>5454,
+38620=>5455,
+38617=>5456,
+38619=>5457,
+38622=>5458,
+38692=>5459,
+38819=>5460,
+38822=>5461,
+38829=>5462,
+38905=>5463,
+38989=>5464,
+38991=>5465,
+38988=>5466,
+38990=>5467,
+38995=>5468,
+39098=>5469,
+39230=>5470,
+39231=>5471,
+39229=>5472,
+39214=>5473,
+39333=>5474,
+39438=>5475,
+39617=>5476,
+39683=>5477,
+39686=>5478,
+39759=>5479,
+39758=>5480,
+39757=>5481,
+39882=>5482,
+39881=>5483,
+39933=>5484,
+39880=>5485,
+39872=>5486,
+40273=>5487,
+40285=>5488,
+40288=>5489,
+40672=>5490,
+40725=>5491,
+40748=>5492,
+20787=>5493,
+22181=>5494,
+22184=>5495,
+22750=>5496,
+22751=>5497,
+22754=>5498,
+23541=>5499,
+40848=>5500,
+24300=>5501,
+25074=>5502,
+25079=>5503,
+25078=>5504,
+25077=>5505,
+25856=>5506,
+25871=>5507,
+26336=>5508,
+26333=>5509,
+27365=>5510,
+27357=>5511,
+27354=>5512,
+27347=>5513,
+28699=>5514,
+28703=>5515,
+28712=>5516,
+28698=>5517,
+28701=>5518,
+28693=>5519,
+28696=>5520,
+29190=>5521,
+29197=>5522,
+29272=>5523,
+29346=>5524,
+29560=>5525,
+29562=>5526,
+29885=>5527,
+29898=>5528,
+29923=>5529,
+30087=>5530,
+30086=>5531,
+30303=>5532,
+30305=>5533,
+30663=>5534,
+31001=>5535,
+31153=>5536,
+31339=>5537,
+31337=>5538,
+31806=>5539,
+31807=>5540,
+31800=>5541,
+31805=>5542,
+31799=>5543,
+31808=>5544,
+32363=>5545,
+32365=>5546,
+32377=>5547,
+32361=>5548,
+32362=>5549,
+32371=>5550,
+32645=>5551,
+32694=>5552,
+32697=>5553,
+32696=>5554,
+33240=>5555,
+34281=>5556,
+34269=>5557,
+34282=>5558,
+34261=>5559,
+34276=>5560,
+34277=>5561,
+34295=>5562,
+34811=>5563,
+34821=>5564,
+34829=>5565,
+34809=>5566,
+34814=>5567,
+35168=>5568,
+35167=>5569,
+35158=>5570,
+35166=>5571,
+35649=>5572,
+35676=>5573,
+35672=>5574,
+35657=>5575,
+35674=>5576,
+35662=>5577,
+35663=>5578,
+35654=>5579,
+35673=>5580,
+36104=>5581,
+36106=>5582,
+36476=>5583,
+36466=>5584,
+36487=>5585,
+36470=>5586,
+36460=>5587,
+36474=>5588,
+36468=>5589,
+36692=>5590,
+36686=>5591,
+36781=>5592,
+37002=>5593,
+37003=>5594,
+37297=>5595,
+37294=>5596,
+37857=>5597,
+37841=>5598,
+37855=>5599,
+37827=>5600,
+37832=>5601,
+37852=>5602,
+37853=>5603,
+37846=>5604,
+37858=>5605,
+37837=>5606,
+37848=>5607,
+37860=>5608,
+37847=>5609,
+37864=>5610,
+38364=>5611,
+38580=>5612,
+38627=>5613,
+38698=>5614,
+38695=>5615,
+38753=>5616,
+38876=>5617,
+38907=>5618,
+39006=>5619,
+39000=>5620,
+39003=>5621,
+39100=>5622,
+39237=>5623,
+39241=>5624,
+39446=>5625,
+39449=>5626,
+39693=>5627,
+39912=>5628,
+39911=>5629,
+39894=>5630,
+39899=>5631,
+40329=>5632,
+40289=>5633,
+40306=>5634,
+40298=>5635,
+40300=>5636,
+40594=>5637,
+40599=>5638,
+40595=>5639,
+40628=>5640,
+21240=>5641,
+22199=>5642,
+22198=>5643,
+22196=>5644,
+22204=>5645,
+22756=>5646,
+23360=>5647,
+23363=>5648,
+23421=>5649,
+23542=>5650,
+24009=>5651,
+25080=>5652,
+25082=>5653,
+25880=>5654,
+25876=>5655,
+25881=>5656,
+26342=>5657,
+26407=>5658,
+27372=>5659,
+28734=>5660,
+28720=>5661,
+28722=>5662,
+29200=>5663,
+29563=>5664,
+29903=>5665,
+30306=>5666,
+30309=>5667,
+31014=>5668,
+31018=>5669,
+31020=>5670,
+31019=>5671,
+31431=>5672,
+31478=>5673,
+31820=>5674,
+31811=>5675,
+31821=>5676,
+31983=>5677,
+31984=>5678,
+36782=>5679,
+32381=>5680,
+32380=>5681,
+32386=>5682,
+32588=>5683,
+32768=>5684,
+33242=>5685,
+33382=>5686,
+34299=>5687,
+34297=>5688,
+34321=>5689,
+34298=>5690,
+34310=>5691,
+34315=>5692,
+34311=>5693,
+34314=>5694,
+34836=>5695,
+34837=>5696,
+35172=>5697,
+35258=>5698,
+35320=>5699,
+35696=>5700,
+35692=>5701,
+35686=>5702,
+35695=>5703,
+35679=>5704,
+35691=>5705,
+36111=>5706,
+36109=>5707,
+36489=>5708,
+36481=>5709,
+36485=>5710,
+36482=>5711,
+37300=>5712,
+37323=>5713,
+37912=>5714,
+37891=>5715,
+37885=>5716,
+38369=>5717,
+38704=>5718,
+39108=>5719,
+39250=>5720,
+39249=>5721,
+39336=>5722,
+39467=>5723,
+39472=>5724,
+39479=>5725,
+39477=>5726,
+39955=>5727,
+39949=>5728,
+40569=>5729,
+40629=>5730,
+40680=>5731,
+40751=>5732,
+40799=>5733,
+40803=>5734,
+40801=>5735,
+20791=>5736,
+20792=>5737,
+22209=>5738,
+22208=>5739,
+22210=>5740,
+22804=>5741,
+23660=>5742,
+24013=>5743,
+25084=>5744,
+25086=>5745,
+25885=>5746,
+25884=>5747,
+26005=>5748,
+26345=>5749,
+27387=>5750,
+27396=>5751,
+27386=>5752,
+27570=>5753,
+28748=>5754,
+29211=>5755,
+29351=>5756,
+29910=>5757,
+29908=>5758,
+30313=>5759,
+30675=>5760,
+31824=>5761,
+32399=>5762,
+32396=>5763,
+32700=>5764,
+34327=>5765,
+34349=>5766,
+34330=>5767,
+34851=>5768,
+34850=>5769,
+34849=>5770,
+34847=>5771,
+35178=>5772,
+35180=>5773,
+35261=>5774,
+35700=>5775,
+35703=>5776,
+35709=>5777,
+36115=>5778,
+36490=>5779,
+36493=>5780,
+36491=>5781,
+36703=>5782,
+36783=>5783,
+37306=>5784,
+37934=>5785,
+37939=>5786,
+37941=>5787,
+37946=>5788,
+37944=>5789,
+37938=>5790,
+37931=>5791,
+38370=>5792,
+38712=>5793,
+38713=>5794,
+38706=>5795,
+38911=>5796,
+58586=>5796,
+39015=>5797,
+39013=>5798,
+39255=>5799,
+39493=>5800,
+39491=>5801,
+39488=>5802,
+39486=>5803,
+39631=>5804,
+39764=>5805,
+39761=>5806,
+39981=>5807,
+39973=>5808,
+40367=>5809,
+40372=>5810,
+40386=>5811,
+40376=>5812,
+40605=>5813,
+40687=>5814,
+40729=>5815,
+40796=>5816,
+40806=>5817,
+40807=>5818,
+20796=>5819,
+20795=>5820,
+22216=>5821,
+22218=>5822,
+22217=>5823,
+23423=>5824,
+24020=>5825,
+24018=>5826,
+24398=>5827,
+25087=>5828,
+25892=>5829,
+27402=>5830,
+27489=>5831,
+28753=>5832,
+28760=>5833,
+29568=>5834,
+29924=>5835,
+30090=>5836,
+30318=>5837,
+30316=>5838,
+31155=>5839,
+31840=>5840,
+31839=>5841,
+32894=>5842,
+32893=>5843,
+33247=>5844,
+35186=>5845,
+35183=>5846,
+35324=>5847,
+35712=>5848,
+36118=>5849,
+36119=>5850,
+36497=>5851,
+36499=>5852,
+36705=>5853,
+37192=>5854,
+37956=>5855,
+37969=>5856,
+37970=>5857,
+38717=>5858,
+38718=>5859,
+38851=>5860,
+38849=>5861,
+39019=>5862,
+39253=>5863,
+39509=>5864,
+39501=>5865,
+39634=>5866,
+39706=>5867,
+40009=>5868,
+39985=>5869,
+39998=>5870,
+39995=>5871,
+40403=>5872,
+40407=>5873,
+40756=>5874,
+40812=>5875,
+40810=>5876,
+40852=>5877,
+22220=>5878,
+24022=>5879,
+25088=>5880,
+25891=>5881,
+25899=>5882,
+25898=>5883,
+26348=>5884,
+27408=>5885,
+29914=>5886,
+31434=>5887,
+31844=>5888,
+31843=>5889,
+31845=>5890,
+32403=>5891,
+32406=>5892,
+32404=>5893,
+33250=>5894,
+34360=>5895,
+34367=>5896,
+34865=>5897,
+35722=>5898,
+37008=>5899,
+37007=>5900,
+37987=>5901,
+37984=>5902,
+37988=>5903,
+38760=>5904,
+39023=>5905,
+39260=>5906,
+39514=>5907,
+39515=>5908,
+39511=>5909,
+39635=>5910,
+39636=>5911,
+39633=>5912,
+40020=>5913,
+40023=>5914,
+40022=>5915,
+40421=>5916,
+40607=>5917,
+40692=>5918,
+22225=>5919,
+22761=>5920,
+25900=>5921,
+28766=>5922,
+30321=>5923,
+30322=>5924,
+30679=>5925,
+60226=>5925,
+32592=>5926,
+32648=>5927,
+34870=>5928,
+34873=>5929,
+34914=>5930,
+35731=>5931,
+35730=>5932,
+35734=>5933,
+33399=>5934,
+36123=>5935,
+37312=>5936,
+37994=>5937,
+38722=>5938,
+38728=>5939,
+38724=>5940,
+38854=>5941,
+39024=>5942,
+39519=>5943,
+39714=>5944,
+39768=>5945,
+40031=>5946,
+40441=>5947,
+40442=>5948,
+40572=>5949,
+40573=>5950,
+40711=>5951,
+40823=>5952,
+40818=>5953,
+24307=>5954,
+27414=>5955,
+28771=>5956,
+31852=>5957,
+31854=>5958,
+34875=>5959,
+35264=>5960,
+36513=>5961,
+37313=>5962,
+38002=>5963,
+38000=>5964,
+39025=>5965,
+39262=>5966,
+39638=>5967,
+39715=>5968,
+40652=>5969,
+28772=>5970,
+30682=>5971,
+35738=>5972,
+38007=>5973,
+38857=>5974,
+39522=>5975,
+39525=>5976,
+32412=>5977,
+35740=>5978,
+36522=>5979,
+37317=>5980,
+38013=>5981,
+38014=>5982,
+38012=>5983,
+40055=>5984,
+40056=>5985,
+40695=>5986,
+35924=>5987,
+38015=>5988,
+40474=>5989,
+29224=>5990,
+39530=>5991,
+39729=>5992,
+40475=>5993,
+40478=>5994,
+31858=>5995,
+20034=>5996,
+20060=>5997,
+12048=>5998,
+20981=>5998,
+12053=>5999,
+21274=>5999,
+12058=>6000,
+21378=>6000,
+19975=>6001,
+19980=>6002,
+20039=>6003,
+20109=>6004,
+12062=>6005,
+22231=>6005,
+12076=>6006,
+23662=>6006,
+12091=>6007,
+24435=>6007,
+19983=>6008,
+20871=>6009,
+19982=>6010,
+20014=>6011,
+20115=>6012,
+20162=>6013,
+20169=>6014,
+20168=>6015,
+20888=>6016,
+21244=>6017,
+21356=>6018,
+21433=>6019,
+22304=>6020,
+22787=>6021,
+22828=>6022,
+23568=>6023,
+60417=>6023,
+24063=>6024,
+26081=>6025,
+12110=>6026,
+27571=>6026,
+27596=>6027,
+12115=>6028,
+27668=>6028,
+12121=>6029,
+29247=>6029,
+20017=>6030,
+20028=>6031,
+20200=>6032,
+20188=>6033,
+20201=>6034,
+20193=>6035,
+20189=>6036,
+20186=>6037,
+21004=>6038,
+21001=>6039,
+21276=>6040,
+21324=>6041,
+22306=>6042,
+22307=>6043,
+22807=>6044,
+22831=>6045,
+23425=>6046,
+23428=>6047,
+23570=>6048,
+23611=>6049,
+23668=>6050,
+23667=>6051,
+24068=>6052,
+24192=>6053,
+24194=>6054,
+24521=>6055,
+25097=>6056,
+25168=>6057,
+27669=>6058,
+27702=>6059,
+27715=>6060,
+27711=>6061,
+27707=>6062,
+29358=>6063,
+29360=>6064,
+29578=>6065,
+12145=>6066,
+31160=>6066,
+32906=>6067,
+38430=>6068,
+20238=>6069,
+20248=>6070,
+20268=>6071,
+20213=>6072,
+20244=>6073,
+20209=>6074,
+20224=>6075,
+20215=>6076,
+20232=>6077,
+20253=>6078,
+20226=>6079,
+20229=>6080,
+20258=>6081,
+20243=>6082,
+20228=>6083,
+20212=>6084,
+20242=>6085,
+20913=>6086,
+21011=>6087,
+21008=>6088,
+21158=>6089,
+21282=>6090,
+21279=>6091,
+21325=>6092,
+21386=>6093,
+21511=>6094,
+22241=>6095,
+22239=>6096,
+22318=>6097,
+22314=>6098,
+22324=>6099,
+22844=>6100,
+22912=>6101,
+22908=>6102,
+22917=>6103,
+22907=>6104,
+22910=>6105,
+22903=>6106,
+22911=>6107,
+23382=>6108,
+23573=>6109,
+23589=>6110,
+23676=>6111,
+23674=>6112,
+23675=>6113,
+23678=>6114,
+24031=>6115,
+24181=>6116,
+57646=>6116,
+24196=>6117,
+24322=>6118,
+24346=>6119,
+24436=>6120,
+24533=>6121,
+24532=>6122,
+24527=>6123,
+25180=>6124,
+25182=>6125,
+25188=>6126,
+25185=>6127,
+25190=>6128,
+25186=>6129,
+25177=>6130,
+25184=>6131,
+25178=>6132,
+25189=>6133,
+25911=>6134,
+26095=>6135,
+26094=>6136,
+26430=>6137,
+26425=>6138,
+26424=>6139,
+26427=>6140,
+26426=>6141,
+26431=>6142,
+26428=>6143,
+26419=>6144,
+27672=>6145,
+27718=>6146,
+27730=>6147,
+27740=>6148,
+27727=>6149,
+27722=>6150,
+60796=>6150,
+27732=>6151,
+27723=>6152,
+27724=>6153,
+28785=>6154,
+29278=>6155,
+29364=>6156,
+29365=>6157,
+29582=>6158,
+29994=>6159,
+30335=>6160,
+31349=>6161,
+12153=>6162,
+32593=>6162,
+12171=>6163,
+33400=>6163,
+33404=>6164,
+33408=>6165,
+33405=>6166,
+33407=>6167,
+12172=>6168,
+34381=>6168,
+12177=>6169,
+35198=>6169,
+37017=>6170,
+59347=>6171,
+37015=>6171,
+37016=>6172,
+37019=>6173,
+37012=>6174,
+38434=>6175,
+38436=>6176,
+38432=>6177,
+38435=>6178,
+20310=>6179,
+20283=>6180,
+20322=>6181,
+20297=>6182,
+20307=>6183,
+20324=>6184,
+20286=>6185,
+20327=>6186,
+20306=>6187,
+20319=>6188,
+20289=>6189,
+20312=>6190,
+20269=>6191,
+20275=>6192,
+20287=>6193,
+20321=>6194,
+20879=>6195,
+20921=>6196,
+21020=>6197,
+21022=>6198,
+21025=>6199,
+21165=>6200,
+21166=>6201,
+21257=>6202,
+21347=>6203,
+21362=>6204,
+21390=>6205,
+21391=>6206,
+21552=>6207,
+21559=>6208,
+21546=>6209,
+21588=>6210,
+21573=>6211,
+21529=>6212,
+21532=>6213,
+21541=>6214,
+21528=>6215,
+21565=>6216,
+21583=>6217,
+21569=>6218,
+21544=>6219,
+21540=>6220,
+21575=>6221,
+22254=>6222,
+22247=>6223,
+22245=>6224,
+22337=>6225,
+22341=>6226,
+22348=>6227,
+22345=>6228,
+22347=>6229,
+22354=>6230,
+22790=>6231,
+22848=>6232,
+22950=>6233,
+22936=>6234,
+22944=>6235,
+22935=>6236,
+22926=>6237,
+22946=>6238,
+22928=>6239,
+22927=>6240,
+22951=>6241,
+22945=>6242,
+23438=>6243,
+23442=>6244,
+23592=>6245,
+23594=>6246,
+23693=>6247,
+23695=>6248,
+23688=>6249,
+23691=>6250,
+23689=>6251,
+23698=>6252,
+23690=>6253,
+23686=>6254,
+23699=>6255,
+23701=>6256,
+24032=>6257,
+24074=>6258,
+24078=>6259,
+24203=>6260,
+24201=>6261,
+24204=>6262,
+24200=>6263,
+24205=>6264,
+24325=>6265,
+24349=>6266,
+24440=>6267,
+24438=>6268,
+24530=>6269,
+24529=>6270,
+24528=>6271,
+24557=>6272,
+24552=>6273,
+24558=>6274,
+24563=>6275,
+24545=>6276,
+24548=>6277,
+24547=>6278,
+24570=>6279,
+24559=>6280,
+24567=>6281,
+24571=>6282,
+24576=>6283,
+24564=>6284,
+25146=>6285,
+25219=>6286,
+25228=>6287,
+25230=>6288,
+25231=>6289,
+25236=>6290,
+25223=>6291,
+25201=>6292,
+25211=>6293,
+25210=>6294,
+25200=>6295,
+25217=>6296,
+25224=>6297,
+25207=>6298,
+25213=>6299,
+25202=>6300,
+25204=>6301,
+26096=>6302,
+26100=>6303,
+26099=>6304,
+26098=>6305,
+26101=>6306,
+26437=>6307,
+26439=>6308,
+26457=>6309,
+26453=>6310,
+26444=>6311,
+26440=>6312,
+26461=>6313,
+26445=>6314,
+26458=>6315,
+26443=>6316,
+27600=>6317,
+27673=>6318,
+27674=>6319,
+27768=>6320,
+27751=>6321,
+27755=>6322,
+27780=>6323,
+27787=>6324,
+27791=>6325,
+27761=>6326,
+27759=>6327,
+27753=>6328,
+27802=>6329,
+27757=>6330,
+27783=>6331,
+27797=>6332,
+27804=>6333,
+57900=>6333,
+27750=>6334,
+27763=>6335,
+27749=>6336,
+27771=>6337,
+27790=>6338,
+28788=>6339,
+28794=>6340,
+29283=>6341,
+29375=>6342,
+29373=>6343,
+29379=>6344,
+29382=>6345,
+29377=>6346,
+29370=>6347,
+29381=>6348,
+29589=>6349,
+29591=>6350,
+29587=>6351,
+29588=>6352,
+29586=>6353,
+30010=>6354,
+30009=>6355,
+30100=>6356,
+30101=>6357,
+30337=>6358,
+31037=>6359,
+32820=>6360,
+32917=>6361,
+32921=>6362,
+32912=>6363,
+32914=>6364,
+32924=>6365,
+33424=>6366,
+33423=>6367,
+33413=>6368,
+33422=>6369,
+33425=>6370,
+33427=>6371,
+33418=>6372,
+33411=>6373,
+33412=>6374,
+12184=>6375,
+35960=>6375,
+36809=>6376,
+36799=>6377,
+37023=>6378,
+37025=>6379,
+37029=>6380,
+37022=>6381,
+37031=>6382,
+37024=>6383,
+38448=>6384,
+38440=>6385,
+38447=>6386,
+38445=>6387,
+20019=>6388,
+20376=>6389,
+20348=>6390,
+20357=>6391,
+20349=>6392,
+20352=>6393,
+20359=>6394,
+20342=>6395,
+20340=>6396,
+20361=>6397,
+20356=>6398,
+20343=>6399,
+20300=>6400,
+20375=>6401,
+20330=>6402,
+20378=>6403,
+20345=>6404,
+20353=>6405,
+20344=>6406,
+20368=>6407,
+20380=>6408,
+20372=>6409,
+20382=>6410,
+20370=>6411,
+20354=>6412,
+20373=>6413,
+20331=>6414,
+20334=>6415,
+20894=>6416,
+20924=>6417,
+20926=>6418,
+21045=>6419,
+21042=>6420,
+21043=>6421,
+21062=>6422,
+21041=>6423,
+21180=>6424,
+21258=>6425,
+21259=>6426,
+21308=>6427,
+21394=>6428,
+21396=>6429,
+21639=>6430,
+21631=>6431,
+21633=>6432,
+21649=>6433,
+21634=>6434,
+21640=>6435,
+21611=>6436,
+21626=>6437,
+21630=>6438,
+21605=>6439,
+21612=>6440,
+21620=>6441,
+21606=>6442,
+21645=>6443,
+21615=>6444,
+21601=>6445,
+21600=>6446,
+21656=>6447,
+21603=>6448,
+21607=>6449,
+21604=>6450,
+22263=>6451,
+22265=>6452,
+22383=>6453,
+22386=>6454,
+22381=>6455,
+22379=>6456,
+22385=>6457,
+22384=>6458,
+22390=>6459,
+22400=>6460,
+22389=>6461,
+22395=>6462,
+22387=>6463,
+22388=>6464,
+22370=>6465,
+22376=>6466,
+22397=>6467,
+22796=>6468,
+22853=>6469,
+22965=>6470,
+22970=>6471,
+22991=>6472,
+22990=>6473,
+22962=>6474,
+22988=>6475,
+22977=>6476,
+22966=>6477,
+22972=>6478,
+22979=>6479,
+22998=>6480,
+22961=>6481,
+22973=>6482,
+22976=>6483,
+22984=>6484,
+22964=>6485,
+22983=>6486,
+23394=>6487,
+23397=>6488,
+23443=>6489,
+23445=>6490,
+23620=>6491,
+23623=>6492,
+23726=>6493,
+23716=>6494,
+23712=>6495,
+23733=>6496,
+23727=>6497,
+23720=>6498,
+23724=>6499,
+23711=>6500,
+23715=>6501,
+23725=>6502,
+23714=>6503,
+23722=>6504,
+23719=>6505,
+23709=>6506,
+23717=>6507,
+23734=>6508,
+23728=>6509,
+23718=>6510,
+24087=>6511,
+24084=>6512,
+24089=>6513,
+24360=>6514,
+24354=>6515,
+24355=>6516,
+24356=>6517,
+24404=>6518,
+24450=>6519,
+24446=>6520,
+24445=>6521,
+24542=>6522,
+24549=>6523,
+24621=>6524,
+24614=>6525,
+24601=>6526,
+24626=>6527,
+24587=>6528,
+24628=>6529,
+24586=>6530,
+24599=>6531,
+24627=>6532,
+24602=>6533,
+24606=>6534,
+24620=>6535,
+24610=>6536,
+24589=>6537,
+24592=>6538,
+24622=>6539,
+24595=>6540,
+24593=>6541,
+24588=>6542,
+24585=>6543,
+24604=>6544,
+25108=>6545,
+25149=>6546,
+25261=>6547,
+25268=>6548,
+25297=>6549,
+25278=>6550,
+25258=>6551,
+25270=>6552,
+25290=>6553,
+25262=>6554,
+25267=>6555,
+25263=>6556,
+25275=>6557,
+25257=>6558,
+25264=>6559,
+25272=>6560,
+25917=>6561,
+26024=>6562,
+26043=>6563,
+26121=>6564,
+26108=>6565,
+26116=>6566,
+26130=>6567,
+26120=>6568,
+26107=>6569,
+26115=>6570,
+26123=>6571,
+26125=>6572,
+26117=>6573,
+26109=>6574,
+26129=>6575,
+26128=>6576,
+26358=>6577,
+26378=>6578,
+26501=>6579,
+26476=>6580,
+26510=>6581,
+26514=>6582,
+26486=>6583,
+26491=>6584,
+26520=>6585,
+26502=>6586,
+26500=>6587,
+26484=>6588,
+26509=>6589,
+26508=>6590,
+26490=>6591,
+26527=>6592,
+26513=>6593,
+26521=>6594,
+26499=>6595,
+26493=>6596,
+26497=>6597,
+26488=>6598,
+26489=>6599,
+26516=>6600,
+27429=>6601,
+27520=>6602,
+27518=>6603,
+27614=>6604,
+27677=>6605,
+27795=>6606,
+27884=>6607,
+27883=>6608,
+27886=>6609,
+27865=>6610,
+27830=>6611,
+27860=>6612,
+27821=>6613,
+27879=>6614,
+27831=>6615,
+27856=>6616,
+27842=>6617,
+27834=>6618,
+27843=>6619,
+27846=>6620,
+27885=>6621,
+27890=>6622,
+27858=>6623,
+27869=>6624,
+27828=>6625,
+27786=>6626,
+27805=>6627,
+27776=>6628,
+27870=>6629,
+27840=>6630,
+27952=>6631,
+27853=>6632,
+27847=>6633,
+27824=>6634,
+27897=>6635,
+27855=>6636,
+27881=>6637,
+27857=>6638,
+28820=>6639,
+28824=>6640,
+28805=>6641,
+28819=>6642,
+28806=>6643,
+28804=>6644,
+28817=>6645,
+28822=>6646,
+28802=>6647,
+28826=>6648,
+28803=>6649,
+29290=>6650,
+29398=>6651,
+29387=>6652,
+29400=>6653,
+29385=>6654,
+29404=>6655,
+29394=>6656,
+29396=>6657,
+29402=>6658,
+29388=>6659,
+29393=>6660,
+29604=>6661,
+29601=>6662,
+29613=>6663,
+29606=>6664,
+29602=>6665,
+29600=>6666,
+29612=>6667,
+29597=>6668,
+29917=>6669,
+29928=>6670,
+30015=>6671,
+30016=>6672,
+30014=>6673,
+30092=>6674,
+30104=>6675,
+30383=>6676,
+30451=>6677,
+30449=>6678,
+30448=>6679,
+30453=>6680,
+30712=>6681,
+30716=>6682,
+30713=>6683,
+30715=>6684,
+30714=>6685,
+30711=>6686,
+31042=>6687,
+31039=>6688,
+31173=>6689,
+31352=>6690,
+31355=>6691,
+31483=>6692,
+31861=>6693,
+31997=>6694,
+32821=>6695,
+32911=>6696,
+32942=>6697,
+32931=>6698,
+32952=>6699,
+32949=>6700,
+32941=>6701,
+33312=>6702,
+33440=>6703,
+33472=>6704,
+33451=>6705,
+33434=>6706,
+33432=>6707,
+33435=>6708,
+33461=>6709,
+33447=>6710,
+33454=>6711,
+33468=>6712,
+33438=>6713,
+33466=>6714,
+33460=>6715,
+33448=>6716,
+33441=>6717,
+33449=>6718,
+33474=>6719,
+33444=>6720,
+33475=>6721,
+33462=>6722,
+33442=>6723,
+34416=>6724,
+34415=>6725,
+34413=>6726,
+34414=>6727,
+35926=>6728,
+36818=>6729,
+36811=>6730,
+36819=>6731,
+36813=>6732,
+36822=>6733,
+36821=>6734,
+36823=>6735,
+37042=>6736,
+37044=>6737,
+37039=>6738,
+37043=>6739,
+37040=>6740,
+38457=>6741,
+38461=>6742,
+38460=>6743,
+38458=>6744,
+38467=>6745,
+20429=>6746,
+20421=>6747,
+20435=>6748,
+20402=>6749,
+20425=>6750,
+20427=>6751,
+20417=>6752,
+20436=>6753,
+20444=>6754,
+20441=>6755,
+20411=>6756,
+60346=>6756,
+20403=>6757,
+20443=>6758,
+20423=>6759,
+20438=>6760,
+20410=>6761,
+20416=>6762,
+20409=>6763,
+20460=>6764,
+21060=>6765,
+21065=>6766,
+21184=>6767,
+21186=>6768,
+21309=>6769,
+21372=>6770,
+21399=>6771,
+21398=>6772,
+21401=>6773,
+21400=>6774,
+21690=>6775,
+21665=>6776,
+21677=>6777,
+21669=>6778,
+21711=>6779,
+21699=>6780,
+33549=>6781,
+21687=>6782,
+21678=>6783,
+21718=>6784,
+21686=>6785,
+21701=>6786,
+21702=>6787,
+21664=>6788,
+21616=>6789,
+21692=>6790,
+21666=>6791,
+21694=>6792,
+21618=>6793,
+21726=>6794,
+21680=>6795,
+22453=>6796,
+22430=>6797,
+22431=>6798,
+22436=>6799,
+22412=>6800,
+22423=>6801,
+22429=>6802,
+22427=>6803,
+22420=>6804,
+22424=>6805,
+22415=>6806,
+22425=>6807,
+22437=>6808,
+22426=>6809,
+22421=>6810,
+22772=>6811,
+22797=>6812,
+22867=>6813,
+23009=>6814,
+23006=>6815,
+23022=>6816,
+23040=>6817,
+23025=>6818,
+23005=>6819,
+23034=>6820,
+23037=>6821,
+23036=>6822,
+23030=>6823,
+23012=>6824,
+23026=>6825,
+23031=>6826,
+23003=>6827,
+23017=>6828,
+23027=>6829,
+23029=>6830,
+23008=>6831,
+23038=>6832,
+23028=>6833,
+23021=>6834,
+23464=>6835,
+23628=>6836,
+23760=>6837,
+23768=>6838,
+23756=>6839,
+23767=>6840,
+23755=>6841,
+23771=>6842,
+23774=>6843,
+23770=>6844,
+23753=>6845,
+23751=>6846,
+23754=>6847,
+23766=>6848,
+23763=>6849,
+23764=>6850,
+23759=>6851,
+23752=>6852,
+23750=>6853,
+23758=>6854,
+23775=>6855,
+23800=>6856,
+24057=>6857,
+24097=>6858,
+24098=>6859,
+24099=>6860,
+24096=>6861,
+24100=>6862,
+24240=>6863,
+24228=>6864,
+24226=>6865,
+24219=>6866,
+24227=>6867,
+24229=>6868,
+24327=>6869,
+24366=>6870,
+24406=>6871,
+24454=>6872,
+24631=>6873,
+24633=>6874,
+24660=>6875,
+24690=>6876,
+24670=>6877,
+24645=>6878,
+24659=>6879,
+24647=>6880,
+24649=>6881,
+24667=>6882,
+24652=>6883,
+24640=>6884,
+24642=>6885,
+24671=>6886,
+24612=>6887,
+24644=>6888,
+24664=>6889,
+24678=>6890,
+24686=>6891,
+25154=>6892,
+25155=>6893,
+25295=>6894,
+25357=>6895,
+25355=>6896,
+25333=>6897,
+25358=>6898,
+25347=>6899,
+25323=>6900,
+25337=>6901,
+25359=>6902,
+25356=>6903,
+25336=>6904,
+25334=>6905,
+25344=>6906,
+25363=>6907,
+25364=>6908,
+25338=>6909,
+25365=>6910,
+25339=>6911,
+25328=>6912,
+25921=>6913,
+25923=>6914,
+26026=>6915,
+26047=>6916,
+26166=>6917,
+26145=>6918,
+26162=>6919,
+26165=>6920,
+26140=>6921,
+26150=>6922,
+26146=>6923,
+26163=>6924,
+26155=>6925,
+26170=>6926,
+26141=>6927,
+26164=>6928,
+26169=>6929,
+26158=>6930,
+26383=>6931,
+26384=>6932,
+26561=>6933,
+26610=>6934,
+26568=>6935,
+26554=>6936,
+26588=>6937,
+26555=>6938,
+26616=>6939,
+26584=>6940,
+26560=>6941,
+26551=>6942,
+26565=>6943,
+26603=>6944,
+26596=>6945,
+26591=>6946,
+26549=>6947,
+26573=>6948,
+26547=>6949,
+26615=>6950,
+26614=>6951,
+26606=>6952,
+26595=>6953,
+26562=>6954,
+26553=>6955,
+26574=>6956,
+26599=>6957,
+26608=>6958,
+26546=>6959,
+26620=>6960,
+26566=>6961,
+26605=>6962,
+26572=>6963,
+26542=>6964,
+26598=>6965,
+26587=>6966,
+26618=>6967,
+26569=>6968,
+26570=>6969,
+26563=>6970,
+26602=>6971,
+26571=>6972,
+27432=>6973,
+27522=>6974,
+27524=>6975,
+27574=>6976,
+27606=>6977,
+27608=>6978,
+27616=>6979,
+27680=>6980,
+27681=>6981,
+27944=>6982,
+27956=>6983,
+27949=>6984,
+27935=>6985,
+27964=>6986,
+27967=>6987,
+27922=>6988,
+27914=>6989,
+27866=>6990,
+27955=>6991,
+27908=>6992,
+27929=>6993,
+27962=>6994,
+27930=>6995,
+27921=>6996,
+27904=>6997,
+27933=>6998,
+27970=>6999,
+27905=>7000,
+27928=>7001,
+27959=>7002,
+27907=>7003,
+27919=>7004,
+27968=>7005,
+27911=>7006,
+27936=>7007,
+27948=>7008,
+27912=>7009,
+27938=>7010,
+27913=>7011,
+27920=>7012,
+28855=>7013,
+28831=>7014,
+28862=>7015,
+28849=>7016,
+28848=>7017,
+28833=>7018,
+28852=>7019,
+28853=>7020,
+28841=>7021,
+29249=>7022,
+29257=>7023,
+29258=>7024,
+29292=>7025,
+29296=>7026,
+29299=>7027,
+29294=>7028,
+29386=>7029,
+29412=>7030,
+29416=>7031,
+29419=>7032,
+29407=>7033,
+29418=>7034,
+29414=>7035,
+29411=>7036,
+29573=>7037,
+29644=>7038,
+29634=>7039,
+29640=>7040,
+29637=>7041,
+29625=>7042,
+29622=>7043,
+29621=>7044,
+29620=>7045,
+29675=>7046,
+29631=>7047,
+29639=>7048,
+29630=>7049,
+29635=>7050,
+29638=>7051,
+29624=>7052,
+29643=>7053,
+29932=>7054,
+29934=>7055,
+29998=>7056,
+30023=>7057,
+30024=>7058,
+30119=>7059,
+30122=>7060,
+30329=>7061,
+30404=>7062,
+30472=>7063,
+30467=>7064,
+30468=>7065,
+30469=>7066,
+30474=>7067,
+30455=>7068,
+30459=>7069,
+30458=>7070,
+30695=>7071,
+30696=>7072,
+30726=>7073,
+30737=>7074,
+30738=>7075,
+30725=>7076,
+30736=>7077,
+30735=>7078,
+30734=>7079,
+30729=>7080,
+58095=>7080,
+30723=>7081,
+30739=>7082,
+31050=>7083,
+31052=>7084,
+31051=>7085,
+31045=>7086,
+31044=>7087,
+31189=>7088,
+31181=>7089,
+31183=>7090,
+31190=>7091,
+31182=>7092,
+31360=>7093,
+31358=>7094,
+31441=>7095,
+31488=>7096,
+31489=>7097,
+31866=>7098,
+31864=>7099,
+31865=>7100,
+31871=>7101,
+31872=>7102,
+31873=>7103,
+32003=>7104,
+32008=>7105,
+32001=>7106,
+32600=>7107,
+32657=>7108,
+32653=>7109,
+32702=>7110,
+32775=>7111,
+32782=>7112,
+32783=>7113,
+32788=>7114,
+32823=>7115,
+32984=>7116,
+32967=>7117,
+32992=>7118,
+32977=>7119,
+32968=>7120,
+32962=>7121,
+32976=>7122,
+32965=>7123,
+32995=>7124,
+32985=>7125,
+32988=>7126,
+32970=>7127,
+32981=>7128,
+32969=>7129,
+32975=>7130,
+32983=>7131,
+32998=>7132,
+32973=>7133,
+33279=>7134,
+33313=>7135,
+33428=>7136,
+33497=>7137,
+33534=>7138,
+33529=>7139,
+33543=>7140,
+33512=>7141,
+33536=>7142,
+33493=>7143,
+33594=>7144,
+33515=>7145,
+33494=>7146,
+33524=>7147,
+33516=>7148,
+33505=>7149,
+33522=>7150,
+33525=>7151,
+33548=>7152,
+33531=>7153,
+33526=>7154,
+33520=>7155,
+33514=>7156,
+33508=>7157,
+33504=>7158,
+33530=>7159,
+33523=>7160,
+33517=>7161,
+34423=>7162,
+34420=>7163,
+34428=>7164,
+34419=>7165,
+34881=>7166,
+34894=>7167,
+34919=>7168,
+34922=>7169,
+34921=>7170,
+35283=>7171,
+35332=>7172,
+35335=>7173,
+36210=>7174,
+36835=>7175,
+36833=>7176,
+36846=>7177,
+36832=>7178,
+37105=>7179,
+37053=>7180,
+37055=>7181,
+37077=>7182,
+37061=>7183,
+37054=>7184,
+37063=>7185,
+37067=>7186,
+37064=>7187,
+37332=>7188,
+60294=>7188,
+37331=>7189,
+38484=>7190,
+38479=>7191,
+38481=>7192,
+38483=>7193,
+38474=>7194,
+38478=>7195,
+20510=>7196,
+20485=>7197,
+20487=>7198,
+20499=>7199,
+20514=>7200,
+20528=>7201,
+20507=>7202,
+20469=>7203,
+20468=>7204,
+20531=>7205,
+20535=>7206,
+20524=>7207,
+20470=>7208,
+20471=>7209,
+20503=>7210,
+20508=>7211,
+20512=>7212,
+20519=>7213,
+20533=>7214,
+20527=>7215,
+20529=>7216,
+20494=>7217,
+20826=>7218,
+20884=>7219,
+20883=>7220,
+20938=>7221,
+20932=>7222,
+20933=>7223,
+20936=>7224,
+20942=>7225,
+21089=>7226,
+21082=>7227,
+21074=>7228,
+21086=>7229,
+21087=>7230,
+21077=>7231,
+21090=>7232,
+21197=>7233,
+21262=>7234,
+21406=>7235,
+21798=>7236,
+21730=>7237,
+21783=>7238,
+21778=>7239,
+21735=>7240,
+21747=>7241,
+21732=>7242,
+21786=>7243,
+21759=>7244,
+21764=>7245,
+21768=>7246,
+21739=>7247,
+21777=>7248,
+21765=>7249,
+21745=>7250,
+21770=>7251,
+21755=>7252,
+21751=>7253,
+21752=>7254,
+21728=>7255,
+21774=>7256,
+21763=>7257,
+21771=>7258,
+22273=>7259,
+22274=>7260,
+22476=>7261,
+22578=>7262,
+22485=>7263,
+22482=>7264,
+22458=>7265,
+22470=>7266,
+22461=>7267,
+22460=>7268,
+22456=>7269,
+22454=>7270,
+22463=>7271,
+22471=>7272,
+22480=>7273,
+22457=>7274,
+22465=>7275,
+22798=>7276,
+22858=>7277,
+23065=>7278,
+23062=>7279,
+23085=>7280,
+23086=>7281,
+23061=>7282,
+23055=>7283,
+23063=>7284,
+23050=>7285,
+23070=>7286,
+23091=>7287,
+23404=>7288,
+23463=>7289,
+23469=>7290,
+23468=>7291,
+23555=>7292,
+23638=>7293,
+23636=>7294,
+23788=>7295,
+23807=>7296,
+23790=>7297,
+23793=>7298,
+23799=>7299,
+23808=>7300,
+23801=>7301,
+24105=>7302,
+24104=>7303,
+24232=>7304,
+24238=>7305,
+24234=>7306,
+24236=>7307,
+24371=>7308,
+24368=>7309,
+24423=>7310,
+24669=>7311,
+24666=>7312,
+24679=>7313,
+24641=>7314,
+24738=>7315,
+24712=>7316,
+24704=>7317,
+24722=>7318,
+24705=>7319,
+24733=>7320,
+24707=>7321,
+24725=>7322,
+24731=>7323,
+24727=>7324,
+24711=>7325,
+24732=>7326,
+24718=>7327,
+25113=>7328,
+25158=>7329,
+25330=>7330,
+25360=>7331,
+25430=>7332,
+25388=>7333,
+25412=>7334,
+25413=>7335,
+25398=>7336,
+25411=>7337,
+25572=>7338,
+25401=>7339,
+25419=>7340,
+25418=>7341,
+25404=>7342,
+25385=>7343,
+25409=>7344,
+25396=>7345,
+25432=>7346,
+25428=>7347,
+25433=>7348,
+25389=>7349,
+25415=>7350,
+25395=>7351,
+25434=>7352,
+25425=>7353,
+25400=>7354,
+25431=>7355,
+25408=>7356,
+25416=>7357,
+25930=>7358,
+25926=>7359,
+26054=>7360,
+26051=>7361,
+26052=>7362,
+26050=>7363,
+26186=>7364,
+26207=>7365,
+26183=>7366,
+26193=>7367,
+26386=>7368,
+26387=>7369,
+26655=>7370,
+26650=>7371,
+26697=>7372,
+26674=>7373,
+26675=>7374,
+26683=>7375,
+26699=>7376,
+26703=>7377,
+26646=>7378,
+26673=>7379,
+26652=>7380,
+26677=>7381,
+26667=>7382,
+26669=>7383,
+26671=>7384,
+26702=>7385,
+26692=>7386,
+26676=>7387,
+26653=>7388,
+26642=>7389,
+26644=>7390,
+26662=>7391,
+26664=>7392,
+26670=>7393,
+26701=>7394,
+26682=>7395,
+26661=>7396,
+26656=>7397,
+27436=>7398,
+27439=>7399,
+27437=>7400,
+27441=>7401,
+27444=>7402,
+27501=>7403,
+32898=>7404,
+27528=>7405,
+27622=>7406,
+27620=>7407,
+27624=>7408,
+27619=>7409,
+27618=>7410,
+27623=>7411,
+27685=>7412,
+28026=>7413,
+28003=>7414,
+28004=>7415,
+28022=>7416,
+27917=>7417,
+28001=>7418,
+28050=>7419,
+27992=>7420,
+28002=>7421,
+28013=>7422,
+28015=>7423,
+28049=>7424,
+28045=>7425,
+28143=>7426,
+28031=>7427,
+28038=>7428,
+27998=>7429,
+28007=>7430,
+59078=>7430,
+28000=>7431,
+28055=>7432,
+28016=>7433,
+28028=>7434,
+27999=>7435,
+28034=>7436,
+28056=>7437,
+27951=>7438,
+28008=>7439,
+28043=>7440,
+28030=>7441,
+28032=>7442,
+28036=>7443,
+27926=>7444,
+28035=>7445,
+28027=>7446,
+28029=>7447,
+28021=>7448,
+28048=>7449,
+28892=>7450,
+28883=>7451,
+28881=>7452,
+28893=>7453,
+28875=>7454,
+32569=>7455,
+28898=>7456,
+28887=>7457,
+28882=>7458,
+28894=>7459,
+28896=>7460,
+28884=>7461,
+28877=>7462,
+28869=>7463,
+28870=>7464,
+28871=>7465,
+28890=>7466,
+28878=>7467,
+28897=>7468,
+29250=>7469,
+29304=>7470,
+29303=>7471,
+29302=>7472,
+29440=>7473,
+29434=>7474,
+29428=>7475,
+29438=>7476,
+29430=>7477,
+29427=>7478,
+29435=>7479,
+29441=>7480,
+29651=>7481,
+29657=>7482,
+29669=>7483,
+29654=>7484,
+29628=>7485,
+29671=>7486,
+29667=>7487,
+29673=>7488,
+29660=>7489,
+29650=>7490,
+29659=>7491,
+29652=>7492,
+29661=>7493,
+29658=>7494,
+29655=>7495,
+29656=>7496,
+29672=>7497,
+29918=>7498,
+29919=>7499,
+29940=>7500,
+29941=>7501,
+29985=>7502,
+30043=>7503,
+30047=>7504,
+30128=>7505,
+30145=>7506,
+30139=>7507,
+30148=>7508,
+30144=>7509,
+30143=>7510,
+30134=>7511,
+30138=>7512,
+30346=>7513,
+30409=>7514,
+30493=>7515,
+30491=>7516,
+30480=>7517,
+30483=>7518,
+30482=>7519,
+30499=>7520,
+30481=>7521,
+30485=>7522,
+30489=>7523,
+30490=>7524,
+30498=>7525,
+30503=>7526,
+30755=>7527,
+30764=>7528,
+30754=>7529,
+30773=>7530,
+30767=>7531,
+30760=>7532,
+30766=>7533,
+30763=>7534,
+30753=>7535,
+30761=>7536,
+30771=>7537,
+30762=>7538,
+30769=>7539,
+31060=>7540,
+31067=>7541,
+31055=>7542,
+31068=>7543,
+31059=>7544,
+31058=>7545,
+31057=>7546,
+31211=>7547,
+31212=>7548,
+31200=>7549,
+31214=>7550,
+31213=>7551,
+31210=>7552,
+31196=>7553,
+31198=>7554,
+31197=>7555,
+31366=>7556,
+31369=>7557,
+31365=>7558,
+31371=>7559,
+31372=>7560,
+31370=>7561,
+31367=>7562,
+31448=>7563,
+31504=>7564,
+31492=>7565,
+31507=>7566,
+31493=>7567,
+31503=>7568,
+31496=>7569,
+31498=>7570,
+31502=>7571,
+31497=>7572,
+31506=>7573,
+31876=>7574,
+31889=>7575,
+31882=>7576,
+31884=>7577,
+31880=>7578,
+31885=>7579,
+31877=>7580,
+32030=>7581,
+32029=>7582,
+32017=>7583,
+32014=>7584,
+32024=>7585,
+32022=>7586,
+32019=>7587,
+32031=>7588,
+32018=>7589,
+32015=>7590,
+32012=>7591,
+32604=>7592,
+32609=>7593,
+32606=>7594,
+32608=>7595,
+32605=>7596,
+32603=>7597,
+32662=>7598,
+32658=>7599,
+32707=>7600,
+32706=>7601,
+32704=>7602,
+32790=>7603,
+32830=>7604,
+32825=>7605,
+33018=>7606,
+33010=>7607,
+33017=>7608,
+33013=>7609,
+33025=>7610,
+33019=>7611,
+33024=>7612,
+33281=>7613,
+33327=>7614,
+33317=>7615,
+33587=>7616,
+33581=>7617,
+33604=>7618,
+33561=>7619,
+33617=>7620,
+33573=>7621,
+33622=>7622,
+33599=>7623,
+33601=>7624,
+33574=>7625,
+33564=>7626,
+33570=>7627,
+33602=>7628,
+33614=>7629,
+33563=>7630,
+33578=>7631,
+33544=>7632,
+33596=>7633,
+33613=>7634,
+33558=>7635,
+33572=>7636,
+33568=>7637,
+33591=>7638,
+33583=>7639,
+33577=>7640,
+33607=>7641,
+33605=>7642,
+33612=>7643,
+33619=>7644,
+33566=>7645,
+33580=>7646,
+33611=>7647,
+33575=>7648,
+33608=>7649,
+34387=>7650,
+34386=>7651,
+34466=>7652,
+34472=>7653,
+34454=>7654,
+34445=>7655,
+34449=>7656,
+34462=>7657,
+34439=>7658,
+34455=>7659,
+34438=>7660,
+34443=>7661,
+34458=>7662,
+34437=>7663,
+34469=>7664,
+34457=>7665,
+34465=>7666,
+34471=>7667,
+34453=>7668,
+34456=>7669,
+34446=>7670,
+34461=>7671,
+34448=>7672,
+34452=>7673,
+34883=>7674,
+34884=>7675,
+34925=>7676,
+34933=>7677,
+34934=>7678,
+34930=>7679,
+34944=>7680,
+34929=>7681,
+34943=>7682,
+34927=>7683,
+34947=>7684,
+34942=>7685,
+34932=>7686,
+34940=>7687,
+35346=>7688,
+35911=>7689,
+35927=>7690,
+35963=>7691,
+36004=>7692,
+36003=>7693,
+36214=>7694,
+36216=>7695,
+36277=>7696,
+36279=>7697,
+36278=>7698,
+36561=>7699,
+36563=>7700,
+36862=>7701,
+36853=>7702,
+36866=>7703,
+36863=>7704,
+36859=>7705,
+36868=>7706,
+36860=>7707,
+36854=>7708,
+37078=>7709,
+37088=>7710,
+37081=>7711,
+37082=>7712,
+37091=>7713,
+37087=>7714,
+37093=>7715,
+37080=>7716,
+37083=>7717,
+37079=>7718,
+37084=>7719,
+37092=>7720,
+37200=>7721,
+37198=>7722,
+37199=>7723,
+37333=>7724,
+37346=>7725,
+37338=>7726,
+38492=>7727,
+38495=>7728,
+38588=>7729,
+39139=>7730,
+12221=>7731,
+39647=>7731,
+12223=>7732,
+39727=>7732,
+20095=>7733,
+20592=>7734,
+20586=>7735,
+20577=>7736,
+20574=>7737,
+20576=>7738,
+20563=>7739,
+20555=>7740,
+20573=>7741,
+20594=>7742,
+20552=>7743,
+20557=>7744,
+20545=>7745,
+20571=>7746,
+20554=>7747,
+20578=>7748,
+20501=>7749,
+20549=>7750,
+20575=>7751,
+20585=>7752,
+20587=>7753,
+20579=>7754,
+20580=>7755,
+20550=>7756,
+20544=>7757,
+20590=>7758,
+20595=>7759,
+20567=>7760,
+20561=>7761,
+20944=>7762,
+21099=>7763,
+21101=>7764,
+21100=>7765,
+21102=>7766,
+21206=>7767,
+21203=>7768,
+21293=>7769,
+21404=>7770,
+21877=>7771,
+21878=>7772,
+21820=>7773,
+21837=>7774,
+21840=>7775,
+21812=>7776,
+21802=>7777,
+21841=>7778,
+21858=>7779,
+21814=>7780,
+21813=>7781,
+21808=>7782,
+21842=>7783,
+21829=>7784,
+21772=>7785,
+21810=>7786,
+21861=>7787,
+21838=>7788,
+21817=>7789,
+21832=>7790,
+21805=>7791,
+21819=>7792,
+21824=>7793,
+21835=>7794,
+22282=>7795,
+22279=>7796,
+22523=>7797,
+22548=>7798,
+22498=>7799,
+22518=>7800,
+22492=>7801,
+22516=>7802,
+22528=>7803,
+22509=>7804,
+22525=>7805,
+22536=>7806,
+22520=>7807,
+22539=>7808,
+22515=>7809,
+22479=>7810,
+22535=>7811,
+22510=>7812,
+22499=>7813,
+22514=>7814,
+22501=>7815,
+22508=>7816,
+22497=>7817,
+22542=>7818,
+22524=>7819,
+22544=>7820,
+22503=>7821,
+22529=>7822,
+22540=>7823,
+22513=>7824,
+22505=>7825,
+22512=>7826,
+22541=>7827,
+22532=>7828,
+22876=>7829,
+23136=>7830,
+23128=>7831,
+23125=>7832,
+23143=>7833,
+60437=>7833,
+23134=>7834,
+23096=>7835,
+23093=>7836,
+23149=>7837,
+23120=>7838,
+23135=>7839,
+23141=>7840,
+23148=>7841,
+23123=>7842,
+23140=>7843,
+23127=>7844,
+23107=>7845,
+23133=>7846,
+23122=>7847,
+23108=>7848,
+23131=>7849,
+23112=>7850,
+23182=>7851,
+23102=>7852,
+23117=>7853,
+23097=>7854,
+23116=>7855,
+23152=>7856,
+23145=>7857,
+23111=>7858,
+23121=>7859,
+23126=>7860,
+23106=>7861,
+23132=>7862,
+23410=>7863,
+23406=>7864,
+23489=>7865,
+23488=>7866,
+23641=>7867,
+23838=>7868,
+23819=>7869,
+23837=>7870,
+23834=>7871,
+23840=>7872,
+23820=>7873,
+23848=>7874,
+23821=>7875,
+23846=>7876,
+23845=>7877,
+23823=>7878,
+23856=>7879,
+23826=>7880,
+23843=>7881,
+23839=>7882,
+23854=>7883,
+24126=>7884,
+24116=>7885,
+24241=>7886,
+24244=>7887,
+24249=>7888,
+24242=>7889,
+24243=>7890,
+24374=>7891,
+24376=>7892,
+24475=>7893,
+24470=>7894,
+24479=>7895,
+24714=>7896,
+24720=>7897,
+24710=>7898,
+24766=>7899,
+24752=>7900,
+24762=>7901,
+24787=>7902,
+24788=>7903,
+24783=>7904,
+24804=>7905,
+24793=>7906,
+24797=>7907,
+24776=>7908,
+24753=>7909,
+24795=>7910,
+24759=>7911,
+24778=>7912,
+24767=>7913,
+24771=>7914,
+24781=>7915,
+24768=>7916,
+25394=>7917,
+25445=>7918,
+25482=>7919,
+25474=>7920,
+25469=>7921,
+25533=>7922,
+25502=>7923,
+25517=>7924,
+25501=>7925,
+25495=>7926,
+25515=>7927,
+25486=>7928,
+25455=>7929,
+25479=>7930,
+25488=>7931,
+25454=>7932,
+25519=>7933,
+25461=>7934,
+25500=>7935,
+25453=>7936,
+25518=>7937,
+25468=>7938,
+25508=>7939,
+25403=>7940,
+25503=>7941,
+25464=>7942,
+25477=>7943,
+25473=>7944,
+25489=>7945,
+25485=>7946,
+25456=>7947,
+25939=>7948,
+26061=>7949,
+26213=>7950,
+26209=>7951,
+26203=>7952,
+26201=>7953,
+26204=>7954,
+26210=>7955,
+26392=>7956,
+26745=>7957,
+26759=>7958,
+26768=>7959,
+26780=>7960,
+26733=>7961,
+26734=>7962,
+26798=>7963,
+26795=>7964,
+26966=>7965,
+26735=>7966,
+26787=>7967,
+26796=>7968,
+26793=>7969,
+26741=>7970,
+26740=>7971,
+26802=>7972,
+26767=>7973,
+26743=>7974,
+26770=>7975,
+26748=>7976,
+26731=>7977,
+26738=>7978,
+26794=>7979,
+26752=>7980,
+26737=>7981,
+26750=>7982,
+26779=>7983,
+26774=>7984,
+26763=>7985,
+26784=>7986,
+26761=>7987,
+26788=>7988,
+26744=>7989,
+26747=>7990,
+26769=>7991,
+26764=>7992,
+26762=>7993,
+26749=>7994,
+27446=>7995,
+27443=>7996,
+27447=>7997,
+27448=>7998,
+27537=>7999,
+27535=>8000,
+27533=>8001,
+27534=>8002,
+27532=>8003,
+27690=>8004,
+28096=>8005,
+28075=>8006,
+28084=>8007,
+28083=>8008,
+28276=>8009,
+28076=>8010,
+28137=>8011,
+28130=>8012,
+28087=>8013,
+28150=>8014,
+28116=>8015,
+28160=>8016,
+28104=>8017,
+28128=>8018,
+28127=>8019,
+28118=>8020,
+28094=>8021,
+28133=>8022,
+28124=>8023,
+28125=>8024,
+28123=>8025,
+28148=>8026,
+28106=>8027,
+28093=>8028,
+28141=>8029,
+28144=>8030,
+28090=>8031,
+28117=>8032,
+28098=>8033,
+28111=>8034,
+28105=>8035,
+28112=>8036,
+28146=>8037,
+28115=>8038,
+28157=>8039,
+28119=>8040,
+28109=>8041,
+28131=>8042,
+28091=>8043,
+28922=>8044,
+28941=>8045,
+28919=>8046,
+28951=>8047,
+28916=>8048,
+28940=>8049,
+28912=>8050,
+28932=>8051,
+28915=>8052,
+28944=>8053,
+28924=>8054,
+28927=>8055,
+28934=>8056,
+28947=>8057,
+28928=>8058,
+28920=>8059,
+28918=>8060,
+28939=>8061,
+28930=>8062,
+28942=>8063,
+29310=>8064,
+29307=>8065,
+29308=>8066,
+29311=>8067,
+29469=>8068,
+29463=>8069,
+29447=>8070,
+29457=>8071,
+29464=>8072,
+29450=>8073,
+29448=>8074,
+29439=>8075,
+29455=>8076,
+29470=>8077,
+29576=>8078,
+29686=>8079,
+29688=>8080,
+29685=>8081,
+29700=>8082,
+29697=>8083,
+29693=>8084,
+29703=>8085,
+29696=>8086,
+29690=>8087,
+29692=>8088,
+29695=>8089,
+29708=>8090,
+29707=>8091,
+29684=>8092,
+29704=>8093,
+30052=>8094,
+30051=>8095,
+30158=>8096,
+30162=>8097,
+30159=>8098,
+30155=>8099,
+30156=>8100,
+30161=>8101,
+30160=>8102,
+30351=>8103,
+30345=>8104,
+30419=>8105,
+30521=>8106,
+30511=>8107,
+30509=>8108,
+30513=>8109,
+30514=>8110,
+30516=>8111,
+30515=>8112,
+30525=>8113,
+30501=>8114,
+30523=>8115,
+30517=>8116,
+30792=>8117,
+30802=>8118,
+30793=>8119,
+30797=>8120,
+30794=>8121,
+30796=>8122,
+30758=>8123,
+30789=>8124,
+30800=>8125,
+31076=>8126,
+31079=>8127,
+31081=>8128,
+31082=>8129,
+31075=>8130,
+31083=>8131,
+31073=>8132,
+31163=>8133,
+31226=>8134,
+31224=>8135,
+31222=>8136,
+31223=>8137,
+31375=>8138,
+31380=>8139,
+31376=>8140,
+31541=>8141,
+31547=>8142,
+31540=>8143,
+31525=>8144,
+31536=>8145,
+31522=>8146,
+31524=>8147,
+31539=>8148,
+31512=>8149,
+31530=>8150,
+31517=>8151,
+31537=>8152,
+31531=>8153,
+31533=>8154,
+31535=>8155,
+31538=>8156,
+31544=>8157,
+31514=>8158,
+31523=>8159,
+31892=>8160,
+31896=>8161,
+31894=>8162,
+31907=>8163,
+32053=>8164,
+32061=>8165,
+32056=>8166,
+32054=>8167,
+32058=>8168,
+32069=>8169,
+32044=>8170,
+32041=>8171,
+32065=>8172,
+32071=>8173,
+32062=>8174,
+32063=>8175,
+32074=>8176,
+32059=>8177,
+32040=>8178,
+32611=>8179,
+32661=>8180,
+32668=>8181,
+32669=>8182,
+32667=>8183,
+32714=>8184,
+32715=>8185,
+32717=>8186,
+32720=>8187,
+32721=>8188,
+32711=>8189,
+32719=>8190,
+32713=>8191,
+32799=>8192,
+32798=>8193,
+32795=>8194,
+32839=>8195,
+32835=>8196,
+32840=>8197,
+33048=>8198,
+33061=>8199,
+33049=>8200,
+33051=>8201,
+33069=>8202,
+33055=>8203,
+33068=>8204,
+33054=>8205,
+33057=>8206,
+33045=>8207,
+33063=>8208,
+33053=>8209,
+33058=>8210,
+33297=>8211,
+33336=>8212,
+33331=>8213,
+33338=>8214,
+33332=>8215,
+33330=>8216,
+33396=>8217,
+33680=>8218,
+33699=>8219,
+33704=>8220,
+33677=>8221,
+33658=>8222,
+33651=>8223,
+33700=>8224,
+33652=>8225,
+33679=>8226,
+33665=>8227,
+33685=>8228,
+33689=>8229,
+33653=>8230,
+33684=>8231,
+33705=>8232,
+33661=>8233,
+33667=>8234,
+33676=>8235,
+33693=>8236,
+33691=>8237,
+33706=>8238,
+33675=>8239,
+33662=>8240,
+33701=>8241,
+33711=>8242,
+33672=>8243,
+33687=>8244,
+33712=>8245,
+33663=>8246,
+33702=>8247,
+33671=>8248,
+33710=>8249,
+33654=>8250,
+34393=>8251,
+34390=>8252,
+34495=>8253,
+34487=>8254,
+34498=>8255,
+34497=>8256,
+34501=>8257,
+34490=>8258,
+34480=>8259,
+34504=>8260,
+34489=>8261,
+34483=>8262,
+34488=>8263,
+34508=>8264,
+34484=>8265,
+34491=>8266,
+34492=>8267,
+34499=>8268,
+34493=>8269,
+34494=>8270,
+34898=>8271,
+34953=>8272,
+34965=>8273,
+34984=>8274,
+34978=>8275,
+34986=>8276,
+34970=>8277,
+34961=>8278,
+34977=>8279,
+34975=>8280,
+34968=>8281,
+34983=>8282,
+34969=>8283,
+34971=>8284,
+34967=>8285,
+34980=>8286,
+34988=>8287,
+34956=>8288,
+34963=>8289,
+34958=>8290,
+35202=>8291,
+35286=>8292,
+35289=>8293,
+35285=>8294,
+35376=>8295,
+35367=>8296,
+35372=>8297,
+35358=>8298,
+35897=>8299,
+35899=>8300,
+35932=>8301,
+35933=>8302,
+35965=>8303,
+36005=>8304,
+36221=>8305,
+36219=>8306,
+36217=>8307,
+36284=>8308,
+36290=>8309,
+36281=>8310,
+36287=>8311,
+36289=>8312,
+36568=>8313,
+36574=>8314,
+36573=>8315,
+36572=>8316,
+36567=>8317,
+36576=>8318,
+36577=>8319,
+36900=>8320,
+36875=>8321,
+36881=>8322,
+36892=>8323,
+36876=>8324,
+36897=>8325,
+37103=>8326,
+37098=>8327,
+37104=>8328,
+37108=>8329,
+37106=>8330,
+37107=>8331,
+37076=>8332,
+37099=>8333,
+37100=>8334,
+37097=>8335,
+37206=>8336,
+37208=>8337,
+37210=>8338,
+37203=>8339,
+37205=>8340,
+37356=>8341,
+37364=>8342,
+37361=>8343,
+37363=>8344,
+37368=>8345,
+37348=>8346,
+37369=>8347,
+37354=>8348,
+37355=>8349,
+37367=>8350,
+37352=>8351,
+37358=>8352,
+38266=>8353,
+38278=>8354,
+38280=>8355,
+38524=>8356,
+38509=>8357,
+38507=>8358,
+38513=>8359,
+38511=>8360,
+38591=>8361,
+38762=>8362,
+38916=>8363,
+39141=>8364,
+39319=>8365,
+20635=>8366,
+20629=>8367,
+20628=>8368,
+20638=>8369,
+20619=>8370,
+20643=>8371,
+20611=>8372,
+20620=>8373,
+20622=>8374,
+20637=>8375,
+20584=>8376,
+20636=>8377,
+20626=>8378,
+20610=>8379,
+20615=>8380,
+20831=>8381,
+20948=>8382,
+21266=>8383,
+21265=>8384,
+21412=>8385,
+21415=>8386,
+21905=>8387,
+21928=>8388,
+21925=>8389,
+21933=>8390,
+21879=>8391,
+22085=>8392,
+21922=>8393,
+21907=>8394,
+21896=>8395,
+21903=>8396,
+21941=>8397,
+21889=>8398,
+21923=>8399,
+21906=>8400,
+21924=>8401,
+21885=>8402,
+21900=>8403,
+21926=>8404,
+21887=>8405,
+21909=>8406,
+21921=>8407,
+21902=>8408,
+22284=>8409,
+22569=>8410,
+22583=>8411,
+22553=>8412,
+22558=>8413,
+22567=>8414,
+22563=>8415,
+22568=>8416,
+22517=>8417,
+22600=>8418,
+22565=>8419,
+22556=>8420,
+22555=>8421,
+22579=>8422,
+22591=>8423,
+22582=>8424,
+22574=>8425,
+22585=>8426,
+22584=>8427,
+22573=>8428,
+22572=>8429,
+22587=>8430,
+22881=>8431,
+23215=>8432,
+23188=>8433,
+23199=>8434,
+23162=>8435,
+23202=>8436,
+23198=>8437,
+23160=>8438,
+23206=>8439,
+23164=>8440,
+23205=>8441,
+23212=>8442,
+23189=>8443,
+23214=>8444,
+23095=>8445,
+23172=>8446,
+23178=>8447,
+23191=>8448,
+23171=>8449,
+23179=>8450,
+23209=>8451,
+23163=>8452,
+23165=>8453,
+23180=>8454,
+23196=>8455,
+23183=>8456,
+23187=>8457,
+23197=>8458,
+23530=>8459,
+23501=>8460,
+23499=>8461,
+23508=>8462,
+23505=>8463,
+23498=>8464,
+23502=>8465,
+23564=>8466,
+23600=>8467,
+23863=>8468,
+23875=>8469,
+23915=>8470,
+23873=>8471,
+23883=>8472,
+23871=>8473,
+23861=>8474,
+23889=>8475,
+23886=>8476,
+23893=>8477,
+23859=>8478,
+23866=>8479,
+23890=>8480,
+23869=>8481,
+23857=>8482,
+23897=>8483,
+23874=>8484,
+23865=>8485,
+23881=>8486,
+23864=>8487,
+23868=>8488,
+23858=>8489,
+23862=>8490,
+23872=>8491,
+23877=>8492,
+24132=>8493,
+24129=>8494,
+24408=>8495,
+57673=>8495,
+24486=>8496,
+24485=>8497,
+24491=>8498,
+24777=>8499,
+24761=>8500,
+24780=>8501,
+24802=>8502,
+24782=>8503,
+24772=>8504,
+24852=>8505,
+24818=>8506,
+24842=>8507,
+24854=>8508,
+24837=>8509,
+24821=>8510,
+24851=>8511,
+24824=>8512,
+24828=>8513,
+24830=>8514,
+24769=>8515,
+24835=>8516,
+24856=>8517,
+24861=>8518,
+24848=>8519,
+24831=>8520,
+24836=>8521,
+24843=>8522,
+25162=>8523,
+25492=>8524,
+25521=>8525,
+25520=>8526,
+25550=>8527,
+25573=>8528,
+25576=>8529,
+25583=>8530,
+25539=>8531,
+25757=>8532,
+25587=>8533,
+25546=>8534,
+25568=>8535,
+25590=>8536,
+25557=>8537,
+25586=>8538,
+25589=>8539,
+25697=>8540,
+25567=>8541,
+25534=>8542,
+25565=>8543,
+25564=>8544,
+25540=>8545,
+25560=>8546,
+25555=>8547,
+25538=>8548,
+25543=>8549,
+25548=>8550,
+25547=>8551,
+25544=>8552,
+25584=>8553,
+25559=>8554,
+25561=>8555,
+25906=>8556,
+25959=>8557,
+25962=>8558,
+25956=>8559,
+25948=>8560,
+25960=>8561,
+25957=>8562,
+25996=>8563,
+26013=>8564,
+26014=>8565,
+26030=>8566,
+26064=>8567,
+26066=>8568,
+26236=>8569,
+26220=>8570,
+26235=>8571,
+26240=>8572,
+26225=>8573,
+26233=>8574,
+26218=>8575,
+26226=>8576,
+26369=>8577,
+26892=>8578,
+26835=>8579,
+26884=>8580,
+26844=>8581,
+26922=>8582,
+26860=>8583,
+26858=>8584,
+26865=>8585,
+26895=>8586,
+26838=>8587,
+26871=>8588,
+26859=>8589,
+26852=>8590,
+26870=>8591,
+26899=>8592,
+26896=>8593,
+26867=>8594,
+26849=>8595,
+26887=>8596,
+26828=>8597,
+26888=>8598,
+26992=>8599,
+26804=>8600,
+26897=>8601,
+26863=>8602,
+26822=>8603,
+26900=>8604,
+26872=>8605,
+26832=>8606,
+26877=>8607,
+26876=>8608,
+26856=>8609,
+26891=>8610,
+26890=>8611,
+26903=>8612,
+26830=>8613,
+26824=>8614,
+26845=>8615,
+26846=>8616,
+26854=>8617,
+26868=>8618,
+26833=>8619,
+26886=>8620,
+26836=>8621,
+26857=>8622,
+26901=>8623,
+26917=>8624,
+26823=>8625,
+27449=>8626,
+27451=>8627,
+27455=>8628,
+27452=>8629,
+27540=>8630,
+27543=>8631,
+27545=>8632,
+27541=>8633,
+27581=>8634,
+27632=>8635,
+27634=>8636,
+27635=>8637,
+27696=>8638,
+28156=>8639,
+28230=>8640,
+28231=>8641,
+28191=>8642,
+28233=>8643,
+28296=>8644,
+28220=>8645,
+28221=>8646,
+28229=>8647,
+28258=>8648,
+28203=>8649,
+28223=>8650,
+28225=>8651,
+28253=>8652,
+28275=>8653,
+28188=>8654,
+28211=>8655,
+28235=>8656,
+28224=>8657,
+28241=>8658,
+28219=>8659,
+28163=>8660,
+28206=>8661,
+28254=>8662,
+28264=>8663,
+28252=>8664,
+28257=>8665,
+28209=>8666,
+28200=>8667,
+28256=>8668,
+28273=>8669,
+28267=>8670,
+28217=>8671,
+28194=>8672,
+28208=>8673,
+28243=>8674,
+28261=>8675,
+28199=>8676,
+28280=>8677,
+28260=>8678,
+28279=>8679,
+28245=>8680,
+28281=>8681,
+28242=>8682,
+28262=>8683,
+28213=>8684,
+28214=>8685,
+28250=>8686,
+28960=>8687,
+28958=>8688,
+28975=>8689,
+28923=>8690,
+28974=>8691,
+28977=>8692,
+28963=>8693,
+28965=>8694,
+28962=>8695,
+28978=>8696,
+28959=>8697,
+28968=>8698,
+28986=>8699,
+28955=>8700,
+29259=>8701,
+29274=>8702,
+29320=>8703,
+29321=>8704,
+29318=>8705,
+29317=>8706,
+29323=>8707,
+29458=>8708,
+29451=>8709,
+29488=>8710,
+29474=>8711,
+29489=>8712,
+29491=>8713,
+29479=>8714,
+29490=>8715,
+29485=>8716,
+29478=>8717,
+29475=>8718,
+29493=>8719,
+29452=>8720,
+29742=>8721,
+29740=>8722,
+29744=>8723,
+29739=>8724,
+29718=>8725,
+29722=>8726,
+29729=>8727,
+29741=>8728,
+29745=>8729,
+29732=>8730,
+29731=>8731,
+29725=>8732,
+29737=>8733,
+29728=>8734,
+29746=>8735,
+29947=>8736,
+29999=>8737,
+30063=>8738,
+30060=>8739,
+30183=>8740,
+30170=>8741,
+30177=>8742,
+30182=>8743,
+30173=>8744,
+30175=>8745,
+30180=>8746,
+30167=>8747,
+30357=>8748,
+30354=>8749,
+30426=>8750,
+30534=>8751,
+30535=>8752,
+30532=>8753,
+30541=>8754,
+30533=>8755,
+30538=>8756,
+30542=>8757,
+30539=>8758,
+30540=>8759,
+30686=>8760,
+30700=>8761,
+30816=>8762,
+30820=>8763,
+30821=>8764,
+30812=>8765,
+30829=>8766,
+30833=>8767,
+30826=>8768,
+30830=>8769,
+30832=>8770,
+30825=>8771,
+30824=>8772,
+30814=>8773,
+30818=>8774,
+31092=>8775,
+31091=>8776,
+31090=>8777,
+31088=>8778,
+31234=>8779,
+31242=>8780,
+31235=>8781,
+31244=>8782,
+31236=>8783,
+31385=>8784,
+31462=>8785,
+31460=>8786,
+31562=>8787,
+31559=>8788,
+31556=>8789,
+31560=>8790,
+31564=>8791,
+31566=>8792,
+31552=>8793,
+31576=>8794,
+31557=>8795,
+31906=>8796,
+31902=>8797,
+31912=>8798,
+31905=>8799,
+32088=>8800,
+32111=>8801,
+32099=>8802,
+32083=>8803,
+32086=>8804,
+32103=>8805,
+32106=>8806,
+32079=>8807,
+32109=>8808,
+32092=>8809,
+32107=>8810,
+32082=>8811,
+32084=>8812,
+32105=>8813,
+32081=>8814,
+32095=>8815,
+32078=>8816,
+32574=>8817,
+32575=>8818,
+32613=>8819,
+32614=>8820,
+32674=>8821,
+32672=>8822,
+32673=>8823,
+32727=>8824,
+32849=>8825,
+32847=>8826,
+32848=>8827,
+33022=>8828,
+32980=>8829,
+33091=>8830,
+33098=>8831,
+33106=>8832,
+33103=>8833,
+33095=>8834,
+33085=>8835,
+33101=>8836,
+33082=>8837,
+33254=>8838,
+33262=>8839,
+33271=>8840,
+33272=>8841,
+33273=>8842,
+33284=>8843,
+33340=>8844,
+33341=>8845,
+33343=>8846,
+33397=>8847,
+33595=>8848,
+33743=>8849,
+60382=>8849,
+33785=>8850,
+33827=>8851,
+33728=>8852,
+33768=>8853,
+33810=>8854,
+33767=>8855,
+33764=>8856,
+33788=>8857,
+33782=>8858,
+33808=>8859,
+33734=>8860,
+33736=>8861,
+33771=>8862,
+33763=>8863,
+33727=>8864,
+33793=>8865,
+33757=>8866,
+33765=>8867,
+33752=>8868,
+33791=>8869,
+33761=>8870,
+33739=>8871,
+33742=>8872,
+33750=>8873,
+33781=>8874,
+33737=>8875,
+33801=>8876,
+33807=>8877,
+58332=>8877,
+33758=>8878,
+33809=>8879,
+33798=>8880,
+33730=>8881,
+33779=>8882,
+33749=>8883,
+33786=>8884,
+33735=>8885,
+33745=>8886,
+33770=>8887,
+33811=>8888,
+33690=>8889,
+33731=>8890,
+33772=>8891,
+33774=>8892,
+33732=>8893,
+33787=>8894,
+33751=>8895,
+33762=>8896,
+33819=>8897,
+33755=>8898,
+33790=>8899,
+34520=>8900,
+34530=>8901,
+34534=>8902,
+34515=>8903,
+34531=>8904,
+34522=>8905,
+34538=>8906,
+34525=>8907,
+34539=>8908,
+34524=>8909,
+34540=>8910,
+34537=>8911,
+34519=>8912,
+34536=>8913,
+34513=>8914,
+34888=>8915,
+34902=>8916,
+34901=>8917,
+35002=>8918,
+35031=>8919,
+35001=>8920,
+35000=>8921,
+35008=>8922,
+35006=>8923,
+34998=>8924,
+35004=>8925,
+34999=>8926,
+35005=>8927,
+34994=>8928,
+35073=>8929,
+35017=>8930,
+35221=>8931,
+35224=>8932,
+35223=>8933,
+35293=>8934,
+35290=>8935,
+35291=>8936,
+35406=>8937,
+35405=>8938,
+35385=>8939,
+35417=>8940,
+35392=>8941,
+35415=>8942,
+35416=>8943,
+35396=>8944,
+35397=>8945,
+35410=>8946,
+35400=>8947,
+35409=>8948,
+35402=>8949,
+35404=>8950,
+35407=>8951,
+35935=>8952,
+35969=>8953,
+35968=>8954,
+36026=>8955,
+36030=>8956,
+36016=>8957,
+36025=>8958,
+36021=>8959,
+36228=>8960,
+36224=>8961,
+36233=>8962,
+36312=>8963,
+36307=>8964,
+36301=>8965,
+36295=>8966,
+36310=>8967,
+36316=>8968,
+36303=>8969,
+36309=>8970,
+36313=>8971,
+36296=>8972,
+36311=>8973,
+36293=>8974,
+36591=>8975,
+36599=>8976,
+36602=>8977,
+36601=>8978,
+36582=>8979,
+36590=>8980,
+36581=>8981,
+36597=>8982,
+36583=>8983,
+36584=>8984,
+36598=>8985,
+36587=>8986,
+36593=>8987,
+36588=>8988,
+36596=>8989,
+36585=>8990,
+36909=>8991,
+36916=>8992,
+36911=>8993,
+37126=>8994,
+37164=>8995,
+37124=>8996,
+60367=>8996,
+37119=>8997,
+37116=>8998,
+37128=>8999,
+37113=>9000,
+37115=>9001,
+37121=>9002,
+37120=>9003,
+37127=>9004,
+37125=>9005,
+37123=>9006,
+37217=>9007,
+37220=>9008,
+37215=>9009,
+37218=>9010,
+37216=>9011,
+37377=>9012,
+37386=>9013,
+37413=>9014,
+37379=>9015,
+37402=>9016,
+37414=>9017,
+37391=>9018,
+37388=>9019,
+37376=>9020,
+37394=>9021,
+37375=>9022,
+37373=>9023,
+37382=>9024,
+37380=>9025,
+37415=>9026,
+37378=>9027,
+37404=>9028,
+37412=>9029,
+37401=>9030,
+37399=>9031,
+37381=>9032,
+37398=>9033,
+38267=>9034,
+38285=>9035,
+38284=>9036,
+38288=>9037,
+38535=>9038,
+38526=>9039,
+38536=>9040,
+38537=>9041,
+38531=>9042,
+38528=>9043,
+38594=>9044,
+38600=>9045,
+38595=>9046,
+38641=>9047,
+38640=>9048,
+38764=>9049,
+38768=>9050,
+38766=>9051,
+38919=>9052,
+39081=>9053,
+39147=>9054,
+40166=>9055,
+12235=>9056,
+40697=>9056,
+20099=>9057,
+20100=>9058,
+20150=>9059,
+20669=>9060,
+20671=>9061,
+20678=>9062,
+20654=>9063,
+20676=>9064,
+20682=>9065,
+20660=>9066,
+20680=>9067,
+20674=>9068,
+20656=>9069,
+20673=>9070,
+20666=>9071,
+20657=>9072,
+20683=>9073,
+20681=>9074,
+20662=>9075,
+20664=>9076,
+20951=>9077,
+21114=>9078,
+21112=>9079,
+21115=>9080,
+21116=>9081,
+21955=>9082,
+21979=>9083,
+21964=>9084,
+21968=>9085,
+21963=>9086,
+21962=>9087,
+21981=>9088,
+21952=>9089,
+64013=>9089,
+21972=>9090,
+21956=>9091,
+21993=>9092,
+21951=>9093,
+21970=>9094,
+21901=>9095,
+21967=>9096,
+21973=>9097,
+21986=>9098,
+21974=>9099,
+21960=>9100,
+22002=>9101,
+21965=>9102,
+21977=>9103,
+21954=>9104,
+22292=>9105,
+22611=>9106,
+22632=>9107,
+22628=>9108,
+22607=>9109,
+22605=>9110,
+22601=>9111,
+22639=>9112,
+22613=>9113,
+22606=>9114,
+22621=>9115,
+22617=>9116,
+22629=>9117,
+22619=>9118,
+22589=>9119,
+22627=>9120,
+22641=>9121,
+22780=>9122,
+23239=>9123,
+23236=>9124,
+23243=>9125,
+23226=>9126,
+23224=>9127,
+23217=>9128,
+23221=>9129,
+23216=>9130,
+23231=>9131,
+23240=>9132,
+23227=>9133,
+23238=>9134,
+23223=>9135,
+23232=>9136,
+23242=>9137,
+23220=>9138,
+23222=>9139,
+23245=>9140,
+23225=>9141,
+23184=>9142,
+23510=>9143,
+23512=>9144,
+23513=>9145,
+23583=>9146,
+23603=>9147,
+23921=>9148,
+23907=>9149,
+23882=>9150,
+23909=>9151,
+23922=>9152,
+23916=>9153,
+23902=>9154,
+23912=>9155,
+23911=>9156,
+23906=>9157,
+24048=>9158,
+24143=>9159,
+24142=>9160,
+24138=>9161,
+24141=>9162,
+24139=>9163,
+24261=>9164,
+24268=>9165,
+24262=>9166,
+24267=>9167,
+24263=>9168,
+24384=>9169,
+24495=>9170,
+24493=>9171,
+24823=>9172,
+24905=>9173,
+24906=>9174,
+24875=>9175,
+24901=>9176,
+24886=>9177,
+24882=>9178,
+24878=>9179,
+24902=>9180,
+24879=>9181,
+24911=>9182,
+24873=>9183,
+24896=>9184,
+25120=>9185,
+37224=>9186,
+25123=>9187,
+25125=>9188,
+25124=>9189,
+25541=>9190,
+25585=>9191,
+25579=>9192,
+25616=>9193,
+25618=>9194,
+25609=>9195,
+25632=>9196,
+25636=>9197,
+25651=>9198,
+25667=>9199,
+25631=>9200,
+25621=>9201,
+25624=>9202,
+25657=>9203,
+25655=>9204,
+25634=>9205,
+25635=>9206,
+25612=>9207,
+25638=>9208,
+25648=>9209,
+25640=>9210,
+25665=>9211,
+25653=>9212,
+25647=>9213,
+25610=>9214,
+25626=>9215,
+25664=>9216,
+25637=>9217,
+25639=>9218,
+25611=>9219,
+25575=>9220,
+25627=>9221,
+25646=>9222,
+25633=>9223,
+25614=>9224,
+25967=>9225,
+26002=>9226,
+26067=>9227,
+26246=>9228,
+26252=>9229,
+26261=>9230,
+26256=>9231,
+26251=>9232,
+26250=>9233,
+26265=>9234,
+26260=>9235,
+26232=>9236,
+26400=>9237,
+26982=>9238,
+26975=>9239,
+26936=>9240,
+26958=>9241,
+26978=>9242,
+26993=>9243,
+26943=>9244,
+26949=>9245,
+26986=>9246,
+26937=>9247,
+26946=>9248,
+26967=>9249,
+26969=>9250,
+27002=>9251,
+26952=>9252,
+26953=>9253,
+26933=>9254,
+26988=>9255,
+26931=>9256,
+26941=>9257,
+26981=>9258,
+26864=>9259,
+27000=>9260,
+26932=>9261,
+26985=>9262,
+26944=>9263,
+26991=>9264,
+26948=>9265,
+26998=>9266,
+26968=>9267,
+26945=>9268,
+26996=>9269,
+26956=>9270,
+26939=>9271,
+26955=>9272,
+26935=>9273,
+26972=>9274,
+26959=>9275,
+26961=>9276,
+26930=>9277,
+26962=>9278,
+26927=>9279,
+27003=>9280,
+26940=>9281,
+27462=>9282,
+27461=>9283,
+27459=>9284,
+27458=>9285,
+27464=>9286,
+27457=>9287,
+27547=>9288,
+27643=>9289,
+27644=>9290,
+27641=>9291,
+27639=>9292,
+27640=>9293,
+28315=>9294,
+28374=>9295,
+28360=>9296,
+28303=>9297,
+28352=>9298,
+28319=>9299,
+28307=>9300,
+28308=>9301,
+28320=>9302,
+28337=>9303,
+28345=>9304,
+28358=>9305,
+28370=>9306,
+28349=>9307,
+28353=>9308,
+28318=>9309,
+28361=>9310,
+28343=>9311,
+28336=>9312,
+28365=>9313,
+28326=>9314,
+28367=>9315,
+28338=>9316,
+28350=>9317,
+28355=>9318,
+28380=>9319,
+28376=>9320,
+28313=>9321,
+28306=>9322,
+28302=>9323,
+28301=>9324,
+28324=>9325,
+28321=>9326,
+28351=>9327,
+28339=>9328,
+28368=>9329,
+28362=>9330,
+28311=>9331,
+28334=>9332,
+28323=>9333,
+28999=>9334,
+29012=>9335,
+29010=>9336,
+29027=>9337,
+29024=>9338,
+28993=>9339,
+29021=>9340,
+29026=>9341,
+61080=>9341,
+29042=>9342,
+29048=>9343,
+29034=>9344,
+29025=>9345,
+28994=>9346,
+29016=>9347,
+28995=>9348,
+29003=>9349,
+29040=>9350,
+29023=>9351,
+29008=>9352,
+29011=>9353,
+28996=>9354,
+29005=>9355,
+29018=>9356,
+29263=>9357,
+29325=>9358,
+29324=>9359,
+29329=>9360,
+29328=>9361,
+29326=>9362,
+29500=>9363,
+29506=>9364,
+29499=>9365,
+29498=>9366,
+29504=>9367,
+29514=>9368,
+29513=>9369,
+29764=>9370,
+29770=>9371,
+29771=>9372,
+29778=>9373,
+29777=>9374,
+29783=>9375,
+29760=>9376,
+29775=>9377,
+29776=>9378,
+29774=>9379,
+29762=>9380,
+29766=>9381,
+29773=>9382,
+29780=>9383,
+29921=>9384,
+29951=>9385,
+29950=>9386,
+29949=>9387,
+29981=>9388,
+30073=>9389,
+30071=>9390,
+27011=>9391,
+30191=>9392,
+30223=>9393,
+30211=>9394,
+30199=>9395,
+30206=>9396,
+30204=>9397,
+30201=>9398,
+60782=>9398,
+30200=>9399,
+30224=>9400,
+30203=>9401,
+30198=>9402,
+30189=>9403,
+30197=>9404,
+30205=>9405,
+30361=>9406,
+30389=>9407,
+30429=>9408,
+30549=>9409,
+30559=>9410,
+30560=>9411,
+30546=>9412,
+30550=>9413,
+30554=>9414,
+30569=>9415,
+30567=>9416,
+30548=>9417,
+30553=>9418,
+30573=>9419,
+30688=>9420,
+30855=>9421,
+30874=>9422,
+30868=>9423,
+30863=>9424,
+30852=>9425,
+30869=>9426,
+30853=>9427,
+30854=>9428,
+30881=>9429,
+30851=>9430,
+30841=>9431,
+30873=>9432,
+30848=>9433,
+30870=>9434,
+30843=>9435,
+31100=>9436,
+31106=>9437,
+31101=>9438,
+31097=>9439,
+31249=>9440,
+31256=>9441,
+31257=>9442,
+31250=>9443,
+31255=>9444,
+31253=>9445,
+31266=>9446,
+31251=>9447,
+31259=>9448,
+31248=>9449,
+31395=>9450,
+31394=>9451,
+31390=>9452,
+31467=>9453,
+31590=>9454,
+31588=>9455,
+31597=>9456,
+31604=>9457,
+31593=>9458,
+31602=>9459,
+31589=>9460,
+31603=>9461,
+31601=>9462,
+31600=>9463,
+31585=>9464,
+31608=>9465,
+31606=>9466,
+31587=>9467,
+31922=>9468,
+31924=>9469,
+31919=>9470,
+32136=>9471,
+32134=>9472,
+32128=>9473,
+32141=>9474,
+32127=>9475,
+32133=>9476,
+32122=>9477,
+32142=>9478,
+32123=>9479,
+32131=>9480,
+32124=>9481,
+32140=>9482,
+32148=>9483,
+32132=>9484,
+32125=>9485,
+32146=>9486,
+32621=>9487,
+32619=>9488,
+32615=>9489,
+32616=>9490,
+32620=>9491,
+32678=>9492,
+32677=>9493,
+32679=>9494,
+32731=>9495,
+32732=>9496,
+32801=>9497,
+33124=>9498,
+33120=>9499,
+33143=>9500,
+33116=>9501,
+33129=>9502,
+33115=>9503,
+33122=>9504,
+33138=>9505,
+26401=>9506,
+33118=>9507,
+33142=>9508,
+33127=>9509,
+33135=>9510,
+33092=>9511,
+33121=>9512,
+33309=>9513,
+33353=>9514,
+33348=>9515,
+33344=>9516,
+33346=>9517,
+33349=>9518,
+34033=>9519,
+33855=>9520,
+33878=>9521,
+33910=>9522,
+33913=>9523,
+33935=>9524,
+33933=>9525,
+33893=>9526,
+33873=>9527,
+33856=>9528,
+33926=>9529,
+33895=>9530,
+33840=>9531,
+33869=>9532,
+33917=>9533,
+33882=>9534,
+33881=>9535,
+33908=>9536,
+33907=>9537,
+33885=>9538,
+34055=>9539,
+33886=>9540,
+33847=>9541,
+33850=>9542,
+33844=>9543,
+33914=>9544,
+33859=>9545,
+33912=>9546,
+33842=>9547,
+33861=>9548,
+33833=>9549,
+33753=>9550,
+33867=>9551,
+33839=>9552,
+33858=>9553,
+33837=>9554,
+33887=>9555,
+33904=>9556,
+33849=>9557,
+33870=>9558,
+33868=>9559,
+33874=>9560,
+33903=>9561,
+33989=>9562,
+33934=>9563,
+33851=>9564,
+33863=>9565,
+33846=>9566,
+33843=>9567,
+33896=>9568,
+33918=>9569,
+33860=>9570,
+33835=>9571,
+33888=>9572,
+33876=>9573,
+33902=>9574,
+33872=>9575,
+34571=>9576,
+34564=>9577,
+34551=>9578,
+34572=>9579,
+34554=>9580,
+34518=>9581,
+34549=>9582,
+34637=>9583,
+34552=>9584,
+34574=>9585,
+34569=>9586,
+34561=>9587,
+34550=>9588,
+34573=>9589,
+34565=>9590,
+35030=>9591,
+35019=>9592,
+35021=>9593,
+35022=>9594,
+35038=>9595,
+35035=>9596,
+35034=>9597,
+35020=>9598,
+35024=>9599,
+35205=>9600,
+35227=>9601,
+35295=>9602,
+35301=>9603,
+35300=>9604,
+35297=>9605,
+35296=>9606,
+35298=>9607,
+35292=>9608,
+35302=>9609,
+35446=>9610,
+35462=>9611,
+35455=>9612,
+35425=>9613,
+35391=>9614,
+35447=>9615,
+35458=>9616,
+35460=>9617,
+35445=>9618,
+35459=>9619,
+35457=>9620,
+35444=>9621,
+35450=>9622,
+35900=>9623,
+35915=>9624,
+35914=>9625,
+35941=>9626,
+35940=>9627,
+35942=>9628,
+35974=>9629,
+35972=>9630,
+35973=>9631,
+36044=>9632,
+36200=>9633,
+36201=>9634,
+36241=>9635,
+36236=>9636,
+36238=>9637,
+36239=>9638,
+36237=>9639,
+36243=>9640,
+36244=>9641,
+36240=>9642,
+36242=>9643,
+36336=>9644,
+36320=>9645,
+36332=>9646,
+36337=>9647,
+36334=>9648,
+36304=>9649,
+36329=>9650,
+36323=>9651,
+36322=>9652,
+36327=>9653,
+36338=>9654,
+36331=>9655,
+36340=>9656,
+36614=>9657,
+36607=>9658,
+36609=>9659,
+36608=>9660,
+36613=>9661,
+36615=>9662,
+36616=>9663,
+36610=>9664,
+36619=>9665,
+60507=>9665,
+36946=>9666,
+36927=>9667,
+36932=>9668,
+36937=>9669,
+36925=>9670,
+37136=>9671,
+37133=>9672,
+37135=>9673,
+37137=>9674,
+37142=>9675,
+37140=>9676,
+37131=>9677,
+37134=>9678,
+37230=>9679,
+37231=>9680,
+37448=>9681,
+37458=>9682,
+37424=>9683,
+37434=>9684,
+37478=>9685,
+37427=>9686,
+37477=>9687,
+37470=>9688,
+37507=>9689,
+37422=>9690,
+37450=>9691,
+37446=>9692,
+37485=>9693,
+37484=>9694,
+37455=>9695,
+37472=>9696,
+37479=>9697,
+37487=>9698,
+37430=>9699,
+37473=>9700,
+37488=>9701,
+37425=>9702,
+37460=>9703,
+37475=>9704,
+37456=>9705,
+37490=>9706,
+37454=>9707,
+37459=>9708,
+37452=>9709,
+37462=>9710,
+37426=>9711,
+38303=>9712,
+38300=>9713,
+38302=>9714,
+38299=>9715,
+38546=>9716,
+38547=>9717,
+38545=>9718,
+38551=>9719,
+38606=>9720,
+38650=>9721,
+38653=>9722,
+38648=>9723,
+38645=>9724,
+38771=>9725,
+38775=>9726,
+38776=>9727,
+38770=>9728,
+38927=>9729,
+38925=>9730,
+38926=>9731,
+39084=>9732,
+39158=>9733,
+39161=>9734,
+39343=>9735,
+39346=>9736,
+39344=>9737,
+39349=>9738,
+39597=>9739,
+39595=>9740,
+39771=>9741,
+40170=>9742,
+40173=>9743,
+40167=>9744,
+40576=>9745,
+12236=>9746,
+40701=>9746,
+20710=>9747,
+20692=>9748,
+20695=>9749,
+20712=>9750,
+20723=>9751,
+20699=>9752,
+20714=>9753,
+20701=>9754,
+20708=>9755,
+20691=>9756,
+20716=>9757,
+20720=>9758,
+20719=>9759,
+20707=>9760,
+20704=>9761,
+20952=>9762,
+21120=>9763,
+21121=>9764,
+21225=>9765,
+21227=>9766,
+21296=>9767,
+21420=>9768,
+22055=>9769,
+22037=>9770,
+22028=>9771,
+22034=>9772,
+22012=>9773,
+22031=>9774,
+22044=>9775,
+22017=>9776,
+22035=>9777,
+22018=>9778,
+22010=>9779,
+22045=>9780,
+22020=>9781,
+22015=>9782,
+22009=>9783,
+22665=>9784,
+22652=>9785,
+22672=>9786,
+22680=>9787,
+22662=>9788,
+22657=>9789,
+22655=>9790,
+22644=>9791,
+22667=>9792,
+22650=>9793,
+22663=>9794,
+22673=>9795,
+22670=>9796,
+22646=>9797,
+22658=>9798,
+22664=>9799,
+22651=>9800,
+22676=>9801,
+22671=>9802,
+22782=>9803,
+22891=>9804,
+23260=>9805,
+23278=>9806,
+23269=>9807,
+23253=>9808,
+23274=>9809,
+23258=>9810,
+23277=>9811,
+23275=>9812,
+23283=>9813,
+23266=>9814,
+23264=>9815,
+23259=>9816,
+23276=>9817,
+23262=>9818,
+23261=>9819,
+23257=>9820,
+23272=>9821,
+23263=>9822,
+23415=>9823,
+23520=>9824,
+23523=>9825,
+23651=>9826,
+23938=>9827,
+23936=>9828,
+23933=>9829,
+23942=>9830,
+23930=>9831,
+23937=>9832,
+23927=>9833,
+23946=>9834,
+23945=>9835,
+23944=>9836,
+23934=>9837,
+23932=>9838,
+23949=>9839,
+23929=>9840,
+23935=>9841,
+24152=>9842,
+24153=>9843,
+24147=>9844,
+24280=>9845,
+24273=>9846,
+24279=>9847,
+24270=>9848,
+24284=>9849,
+24277=>9850,
+24281=>9851,
+24274=>9852,
+24276=>9853,
+24388=>9854,
+24387=>9855,
+24431=>9856,
+24502=>9857,
+24876=>9858,
+24872=>9859,
+24897=>9860,
+24926=>9861,
+24945=>9862,
+24947=>9863,
+24914=>9864,
+24915=>9865,
+24946=>9866,
+24940=>9867,
+24960=>9868,
+24948=>9869,
+24916=>9870,
+24954=>9871,
+24923=>9872,
+24933=>9873,
+24891=>9874,
+24938=>9875,
+24929=>9876,
+24918=>9877,
+25129=>9878,
+25127=>9879,
+25131=>9880,
+25643=>9881,
+25677=>9882,
+25691=>9883,
+25693=>9884,
+25716=>9885,
+25718=>9886,
+25714=>9887,
+25715=>9888,
+25725=>9889,
+25717=>9890,
+25702=>9891,
+25766=>9892,
+25678=>9893,
+25730=>9894,
+25694=>9895,
+25692=>9896,
+25675=>9897,
+25683=>9898,
+25696=>9899,
+25680=>9900,
+25727=>9901,
+25663=>9902,
+25708=>9903,
+25707=>9904,
+25689=>9905,
+25701=>9906,
+25719=>9907,
+25971=>9908,
+26016=>9909,
+26273=>9910,
+26272=>9911,
+26271=>9912,
+26373=>9913,
+26372=>9914,
+26402=>9915,
+27057=>9916,
+27062=>9917,
+27081=>9918,
+27040=>9919,
+27086=>9920,
+27030=>9921,
+27056=>9922,
+27052=>9923,
+27068=>9924,
+27025=>9925,
+27033=>9926,
+27022=>9927,
+27047=>9928,
+27021=>9929,
+27049=>9930,
+27070=>9931,
+27055=>9932,
+27071=>9933,
+27076=>9934,
+27069=>9935,
+27044=>9936,
+27092=>9937,
+27065=>9938,
+27082=>9939,
+27034=>9940,
+27087=>9941,
+27059=>9942,
+27027=>9943,
+27050=>9944,
+27041=>9945,
+27038=>9946,
+27097=>9947,
+27031=>9948,
+27024=>9949,
+27074=>9950,
+27061=>9951,
+27045=>9952,
+27078=>9953,
+27466=>9954,
+27469=>9955,
+27467=>9956,
+27550=>9957,
+27551=>9958,
+27552=>9959,
+27587=>9960,
+27588=>9961,
+27646=>9962,
+28366=>9963,
+28405=>9964,
+28401=>9965,
+28419=>9966,
+28453=>9967,
+28408=>9968,
+28471=>9969,
+28411=>9970,
+28462=>9971,
+28425=>9972,
+28494=>9973,
+28441=>9974,
+28442=>9975,
+28455=>9976,
+28440=>9977,
+28475=>9978,
+28434=>9979,
+28397=>9980,
+28426=>9981,
+28470=>9982,
+28531=>9983,
+28409=>9984,
+28398=>9985,
+28461=>9986,
+28480=>9987,
+28464=>9988,
+28476=>9989,
+28469=>9990,
+28395=>9991,
+28423=>9992,
+28430=>9993,
+28483=>9994,
+28421=>9995,
+28413=>9996,
+28406=>9997,
+28473=>9998,
+28444=>9999,
+28412=>10000,
+28474=>10001,
+28447=>10002,
+28429=>10003,
+28446=>10004,
+28424=>10005,
+28449=>10006,
+29063=>10007,
+29072=>10008,
+29065=>10009,
+29056=>10010,
+29061=>10011,
+29058=>10012,
+29071=>10013,
+29051=>10014,
+29062=>10015,
+29057=>10016,
+29079=>10017,
+29252=>10018,
+29267=>10019,
+29335=>10020,
+29333=>10021,
+29331=>10022,
+29507=>10023,
+29517=>10024,
+29521=>10025,
+29516=>10026,
+29794=>10027,
+29811=>10028,
+29809=>10029,
+29813=>10030,
+29810=>10031,
+29799=>10032,
+29806=>10033,
+29952=>10034,
+29954=>10035,
+29955=>10036,
+30077=>10037,
+30096=>10038,
+30230=>10039,
+30216=>10040,
+30220=>10041,
+30229=>10042,
+30225=>10043,
+30218=>10044,
+30228=>10045,
+30392=>10046,
+30593=>10047,
+30588=>10048,
+30597=>10049,
+30594=>10050,
+30574=>10051,
+30592=>10052,
+30575=>10053,
+30590=>10054,
+30595=>10055,
+30898=>10056,
+30890=>10057,
+30900=>10058,
+30893=>10059,
+30888=>10060,
+30846=>10061,
+30891=>10062,
+30878=>10063,
+30885=>10064,
+30880=>10065,
+30892=>10066,
+30882=>10067,
+30884=>10068,
+31128=>10069,
+31114=>10070,
+31115=>10071,
+31126=>10072,
+31125=>10073,
+31124=>10074,
+31123=>10075,
+31127=>10076,
+31112=>10077,
+31122=>10078,
+31120=>10079,
+31275=>10080,
+31306=>10081,
+31280=>10082,
+31279=>10083,
+31272=>10084,
+31270=>10085,
+31400=>10086,
+31403=>10087,
+31404=>10088,
+31470=>10089,
+31624=>10090,
+31644=>10091,
+31626=>10092,
+31633=>10093,
+31632=>10094,
+31638=>10095,
+31629=>10096,
+31628=>10097,
+31643=>10098,
+31630=>10099,
+31621=>10100,
+31640=>10101,
+21124=>10102,
+31641=>10103,
+31652=>10104,
+31618=>10105,
+31931=>10106,
+31935=>10107,
+31932=>10108,
+31930=>10109,
+32167=>10110,
+32183=>10111,
+32194=>10112,
+32163=>10113,
+32170=>10114,
+32193=>10115,
+32192=>10116,
+32197=>10117,
+32157=>10118,
+32206=>10119,
+32196=>10120,
+32198=>10121,
+32203=>10122,
+32204=>10123,
+32175=>10124,
+32185=>10125,
+32150=>10126,
+32188=>10127,
+32159=>10128,
+32166=>10129,
+32174=>10130,
+32169=>10131,
+32161=>10132,
+32201=>10133,
+32627=>10134,
+32738=>10135,
+32739=>10136,
+32741=>10137,
+32734=>10138,
+32804=>10139,
+32861=>10140,
+32860=>10141,
+33161=>10142,
+33158=>10143,
+33155=>10144,
+33159=>10145,
+33165=>10146,
+33164=>10147,
+33163=>10148,
+33301=>10149,
+33943=>10150,
+33956=>10151,
+33953=>10152,
+33951=>10153,
+33978=>10154,
+33998=>10155,
+33986=>10156,
+33964=>10157,
+33966=>10158,
+33963=>10159,
+33977=>10160,
+33972=>10161,
+33985=>10162,
+33997=>10163,
+33962=>10164,
+33946=>10165,
+33969=>10166,
+34000=>10167,
+33949=>10168,
+33959=>10169,
+33979=>10170,
+33954=>10171,
+33940=>10172,
+33991=>10173,
+33996=>10174,
+33947=>10175,
+33961=>10176,
+33967=>10177,
+33960=>10178,
+58327=>10178,
+34006=>10179,
+33944=>10180,
+33974=>10181,
+33999=>10182,
+33952=>10183,
+34007=>10184,
+34004=>10185,
+34002=>10186,
+34011=>10187,
+33968=>10188,
+33937=>10189,
+34401=>10190,
+34611=>10191,
+34595=>10192,
+34600=>10193,
+34667=>10194,
+34624=>10195,
+34606=>10196,
+34590=>10197,
+34593=>10198,
+34585=>10199,
+34587=>10200,
+34627=>10201,
+34604=>10202,
+34625=>10203,
+34622=>10204,
+34630=>10205,
+34592=>10206,
+34610=>10207,
+34602=>10208,
+34605=>10209,
+34620=>10210,
+34578=>10211,
+34618=>10212,
+34609=>10213,
+34613=>10214,
+34626=>10215,
+34598=>10216,
+34599=>10217,
+34616=>10218,
+34596=>10219,
+34586=>10220,
+34608=>10221,
+34577=>10222,
+35063=>10223,
+35047=>10224,
+35057=>10225,
+35058=>10226,
+35066=>10227,
+35070=>10228,
+35054=>10229,
+35068=>10230,
+35062=>10231,
+35067=>10232,
+35056=>10233,
+35052=>10234,
+35051=>10235,
+35229=>10236,
+35233=>10237,
+35231=>10238,
+35230=>10239,
+35305=>10240,
+35307=>10241,
+35304=>10242,
+35499=>10243,
+35481=>10244,
+35467=>10245,
+35474=>10246,
+35471=>10247,
+35478=>10248,
+35901=>10249,
+35944=>10250,
+35945=>10251,
+36053=>10252,
+36047=>10253,
+36055=>10254,
+36246=>10255,
+36361=>10256,
+36354=>10257,
+36351=>10258,
+36365=>10259,
+36349=>10260,
+36362=>10261,
+36355=>10262,
+36359=>10263,
+36358=>10264,
+36357=>10265,
+36350=>10266,
+36352=>10267,
+36356=>10268,
+36624=>10269,
+36625=>10270,
+36622=>10271,
+36621=>10272,
+37155=>10273,
+37148=>10274,
+37152=>10275,
+37154=>10276,
+37151=>10277,
+37149=>10278,
+37146=>10279,
+37156=>10280,
+37153=>10281,
+37147=>10282,
+37242=>10283,
+37234=>10284,
+37241=>10285,
+37235=>10286,
+37541=>10287,
+37540=>10288,
+37494=>10289,
+37531=>10290,
+37498=>10291,
+37536=>10292,
+37524=>10293,
+37546=>10294,
+37517=>10295,
+37542=>10296,
+37530=>10297,
+37547=>10298,
+37497=>10299,
+37527=>10300,
+37503=>10301,
+37539=>10302,
+37614=>10303,
+37518=>10304,
+37506=>10305,
+37525=>10306,
+37538=>10307,
+37501=>10308,
+37512=>10309,
+37537=>10310,
+37514=>10311,
+37510=>10312,
+37516=>10313,
+37529=>10314,
+37543=>10315,
+37502=>10316,
+37511=>10317,
+37545=>10318,
+37533=>10319,
+37515=>10320,
+37421=>10321,
+38558=>10322,
+38561=>10323,
+38655=>10324,
+38744=>10325,
+38781=>10326,
+38778=>10327,
+38782=>10328,
+38787=>10329,
+38784=>10330,
+38786=>10331,
+38779=>10332,
+38788=>10333,
+38785=>10334,
+38783=>10335,
+38862=>10336,
+38861=>10337,
+38934=>10338,
+39085=>10339,
+39086=>10340,
+39170=>10341,
+39168=>10342,
+39175=>10343,
+39325=>10344,
+39324=>10345,
+39363=>10346,
+39353=>10347,
+39355=>10348,
+39354=>10349,
+39362=>10350,
+39357=>10351,
+39367=>10352,
+39601=>10353,
+39651=>10354,
+39655=>10355,
+39742=>10356,
+39743=>10357,
+39776=>10358,
+39777=>10359,
+39775=>10360,
+40177=>10361,
+40178=>10362,
+40181=>10363,
+40615=>10364,
+20735=>10365,
+20739=>10366,
+20784=>10367,
+20728=>10368,
+20742=>10369,
+20743=>10370,
+20726=>10371,
+20734=>10372,
+20747=>10373,
+20748=>10374,
+20733=>10375,
+20746=>10376,
+21131=>10377,
+21132=>10378,
+21233=>10379,
+21231=>10380,
+22088=>10381,
+22082=>10382,
+22092=>10383,
+22069=>10384,
+22081=>10385,
+22090=>10386,
+22089=>10387,
+22086=>10388,
+22104=>10389,
+22106=>10390,
+22080=>10391,
+22067=>10392,
+22077=>10393,
+22060=>10394,
+22078=>10395,
+22072=>10396,
+22058=>10397,
+22074=>10398,
+22298=>10399,
+22699=>10400,
+22685=>10401,
+22705=>10402,
+22688=>10403,
+22691=>10404,
+22703=>10405,
+22700=>10406,
+22693=>10407,
+22689=>10408,
+22783=>10409,
+23295=>10410,
+23284=>10411,
+23293=>10412,
+23287=>10413,
+23286=>10414,
+23299=>10415,
+23288=>10416,
+23298=>10417,
+23289=>10418,
+23297=>10419,
+23303=>10420,
+23301=>10421,
+23311=>10422,
+23655=>10423,
+23961=>10424,
+23959=>10425,
+23967=>10426,
+23954=>10427,
+23970=>10428,
+23955=>10429,
+23957=>10430,
+23968=>10431,
+23964=>10432,
+23969=>10433,
+23962=>10434,
+23966=>10435,
+24169=>10436,
+24157=>10437,
+24160=>10438,
+24156=>10439,
+32243=>10440,
+24283=>10441,
+24286=>10442,
+24289=>10443,
+24393=>10444,
+24498=>10445,
+24971=>10446,
+24963=>10447,
+24953=>10448,
+25009=>10449,
+25008=>10450,
+24994=>10451,
+24969=>10452,
+24987=>10453,
+24979=>10454,
+25007=>10455,
+25005=>10456,
+24991=>10457,
+24978=>10458,
+25002=>10459,
+24993=>10460,
+24973=>10461,
+24934=>10462,
+25011=>10463,
+25133=>10464,
+25710=>10465,
+25712=>10466,
+25750=>10467,
+25760=>10468,
+25733=>10469,
+25751=>10470,
+25756=>10471,
+25743=>10472,
+25739=>10473,
+25738=>10474,
+25740=>10475,
+25763=>10476,
+25759=>10477,
+25704=>10478,
+25777=>10479,
+25752=>10480,
+25974=>10481,
+25978=>10482,
+25977=>10483,
+25979=>10484,
+26034=>10485,
+26035=>10486,
+26293=>10487,
+26288=>10488,
+26281=>10489,
+26290=>10490,
+26295=>10491,
+26282=>10492,
+26287=>10493,
+27136=>10494,
+27142=>10495,
+27159=>10496,
+27109=>10497,
+27128=>10498,
+27157=>10499,
+27121=>10500,
+27108=>10501,
+27168=>10502,
+27135=>10503,
+27116=>10504,
+27106=>10505,
+27163=>10506,
+27165=>10507,
+27134=>10508,
+27175=>10509,
+27122=>10510,
+27118=>10511,
+27156=>10512,
+27127=>10513,
+27111=>10514,
+27200=>10515,
+27144=>10516,
+27110=>10517,
+27131=>10518,
+27149=>10519,
+27132=>10520,
+27115=>10521,
+27145=>10522,
+27140=>10523,
+27160=>10524,
+27173=>10525,
+27151=>10526,
+27126=>10527,
+27174=>10528,
+27143=>10529,
+27124=>10530,
+27158=>10531,
+27473=>10532,
+27557=>10533,
+27555=>10534,
+27554=>10535,
+27558=>10536,
+27649=>10537,
+27648=>10538,
+27647=>10539,
+27650=>10540,
+28481=>10541,
+28454=>10542,
+28542=>10543,
+28551=>10544,
+28614=>10545,
+28562=>10546,
+28557=>10547,
+28553=>10548,
+28556=>10549,
+28514=>10550,
+28495=>10551,
+28549=>10552,
+28506=>10553,
+28566=>10554,
+28534=>10555,
+28524=>10556,
+28546=>10557,
+28501=>10558,
+28530=>10559,
+28498=>10560,
+28496=>10561,
+28503=>10562,
+28564=>10563,
+28563=>10564,
+28509=>10565,
+28416=>10566,
+28513=>10567,
+28523=>10568,
+28541=>10569,
+28519=>10570,
+28560=>10571,
+28499=>10572,
+28555=>10573,
+28521=>10574,
+28543=>10575,
+28565=>10576,
+28515=>10577,
+28535=>10578,
+28522=>10579,
+28539=>10580,
+29106=>10581,
+29103=>10582,
+29083=>10583,
+29104=>10584,
+29088=>10585,
+29082=>10586,
+29097=>10587,
+29109=>10588,
+29085=>10589,
+29093=>10590,
+29086=>10591,
+29092=>10592,
+29089=>10593,
+29098=>10594,
+29084=>10595,
+29095=>10596,
+29107=>10597,
+29336=>10598,
+29338=>10599,
+29528=>10600,
+29522=>10601,
+29534=>10602,
+29535=>10603,
+29536=>10604,
+29533=>10605,
+29531=>10606,
+29537=>10607,
+29530=>10608,
+29529=>10609,
+29538=>10610,
+29831=>10611,
+29833=>10612,
+29834=>10613,
+29830=>10614,
+29825=>10615,
+29821=>10616,
+29829=>10617,
+29832=>10618,
+29820=>10619,
+29817=>10620,
+58868=>10620,
+29960=>10621,
+29959=>10622,
+30078=>10623,
+30245=>10624,
+30238=>10625,
+30233=>10626,
+30237=>10627,
+30236=>10628,
+30243=>10629,
+30234=>10630,
+30248=>10631,
+30235=>10632,
+30364=>10633,
+30365=>10634,
+30366=>10635,
+30363=>10636,
+30605=>10637,
+30607=>10638,
+30601=>10639,
+30600=>10640,
+30925=>10641,
+30907=>10642,
+30927=>10643,
+30924=>10644,
+30929=>10645,
+30926=>10646,
+30932=>10647,
+30920=>10648,
+30915=>10649,
+30916=>10650,
+30921=>10651,
+31130=>10652,
+31137=>10653,
+31136=>10654,
+31132=>10655,
+31138=>10656,
+31131=>10657,
+59175=>10657,
+27510=>10658,
+31289=>10659,
+31410=>10660,
+31412=>10661,
+31411=>10662,
+31671=>10663,
+31691=>10664,
+31678=>10665,
+31660=>10666,
+31694=>10667,
+31663=>10668,
+31673=>10669,
+31690=>10670,
+31669=>10671,
+31941=>10672,
+31944=>10673,
+31948=>10674,
+31947=>10675,
+32247=>10676,
+32219=>10677,
+32234=>10678,
+32231=>10679,
+32215=>10680,
+32225=>10681,
+32259=>10682,
+32250=>10683,
+32230=>10684,
+32246=>10685,
+32241=>10686,
+32240=>10687,
+32238=>10688,
+32223=>10689,
+32630=>10690,
+32684=>10691,
+32688=>10692,
+32685=>10693,
+32749=>10694,
+32747=>10695,
+32746=>10696,
+32748=>10697,
+32742=>10698,
+32744=>10699,
+32868=>10700,
+32871=>10701,
+33187=>10702,
+33183=>10703,
+33182=>10704,
+33173=>10705,
+33186=>10706,
+33177=>10707,
+33175=>10708,
+33302=>10709,
+33359=>10710,
+33363=>10711,
+33362=>10712,
+33360=>10713,
+33358=>10714,
+33361=>10715,
+34084=>10716,
+34107=>10717,
+34063=>10718,
+34048=>10719,
+34089=>10720,
+34062=>10721,
+34057=>10722,
+34061=>10723,
+34079=>10724,
+34058=>10725,
+34087=>10726,
+34076=>10727,
+34043=>10728,
+34091=>10729,
+34042=>10730,
+34056=>10731,
+34060=>10732,
+34036=>10733,
+34090=>10734,
+34034=>10735,
+34069=>10736,
+34039=>10737,
+34027=>10738,
+34035=>10739,
+34044=>10740,
+34066=>10741,
+34026=>10742,
+34025=>10743,
+34070=>10744,
+34046=>10745,
+34088=>10746,
+34077=>10747,
+34094=>10748,
+34050=>10749,
+34045=>10750,
+34078=>10751,
+34038=>10752,
+34097=>10753,
+34086=>10754,
+34023=>10755,
+34024=>10756,
+34032=>10757,
+34031=>10758,
+34041=>10759,
+34072=>10760,
+34080=>10761,
+34096=>10762,
+34059=>10763,
+34073=>10764,
+34095=>10765,
+34402=>10766,
+34646=>10767,
+34659=>10768,
+34660=>10769,
+34679=>10770,
+34785=>10771,
+34675=>10772,
+34648=>10773,
+34644=>10774,
+34651=>10775,
+34642=>10776,
+34657=>10777,
+34650=>10778,
+34641=>10779,
+34654=>10780,
+34669=>10781,
+34666=>10782,
+34640=>10783,
+34638=>10784,
+34655=>10785,
+34653=>10786,
+34671=>10787,
+34668=>10788,
+34682=>10789,
+34670=>10790,
+34652=>10791,
+34661=>10792,
+34639=>10793,
+34683=>10794,
+34677=>10795,
+34658=>10796,
+34663=>10797,
+34665=>10798,
+34906=>10799,
+35077=>10800,
+35084=>10801,
+35092=>10802,
+35083=>10803,
+35095=>10804,
+35096=>10805,
+35097=>10806,
+35078=>10807,
+35094=>10808,
+35089=>10809,
+35086=>10810,
+35081=>10811,
+35234=>10812,
+35236=>10813,
+35235=>10814,
+35309=>10815,
+35312=>10816,
+35308=>10817,
+35535=>10818,
+35526=>10819,
+35512=>10820,
+35539=>10821,
+35537=>10822,
+35540=>10823,
+35541=>10824,
+35515=>10825,
+35543=>10826,
+35518=>10827,
+35520=>10828,
+35525=>10829,
+35544=>10830,
+35523=>10831,
+35514=>10832,
+35517=>10833,
+35545=>10834,
+35902=>10835,
+35917=>10836,
+35983=>10837,
+36069=>10838,
+36063=>10839,
+36057=>10840,
+36072=>10841,
+36058=>10842,
+36061=>10843,
+36071=>10844,
+36256=>10845,
+36252=>10846,
+36257=>10847,
+36251=>10848,
+36384=>10849,
+36387=>10850,
+36389=>10851,
+36388=>10852,
+36398=>10853,
+36373=>10854,
+36379=>10855,
+36374=>10856,
+36369=>10857,
+36377=>10858,
+36390=>10859,
+36391=>10860,
+36372=>10861,
+36370=>10862,
+36376=>10863,
+36371=>10864,
+36380=>10865,
+36375=>10866,
+36378=>10867,
+36652=>10868,
+36644=>10869,
+36632=>10870,
+36634=>10871,
+36640=>10872,
+36643=>10873,
+36630=>10874,
+36631=>10875,
+36979=>10876,
+36976=>10877,
+36975=>10878,
+36967=>10879,
+36971=>10880,
+37167=>10881,
+37163=>10882,
+37161=>10883,
+37162=>10884,
+37170=>10885,
+37158=>10886,
+37166=>10887,
+37253=>10888,
+37254=>10889,
+37258=>10890,
+37249=>10891,
+37250=>10892,
+37252=>10893,
+37248=>10894,
+37584=>10895,
+37571=>10896,
+37572=>10897,
+37568=>10898,
+37593=>10899,
+37558=>10900,
+37583=>10901,
+37617=>10902,
+37599=>10903,
+37592=>10904,
+37609=>10905,
+37591=>10906,
+37597=>10907,
+37580=>10908,
+37615=>10909,
+37570=>10910,
+37608=>10911,
+37578=>10912,
+37576=>10913,
+37582=>10914,
+37606=>10915,
+37581=>10916,
+37589=>10917,
+37577=>10918,
+37600=>10919,
+37598=>10920,
+37607=>10921,
+37585=>10922,
+37587=>10923,
+37557=>10924,
+37601=>10925,
+37669=>10926,
+37574=>10927,
+37556=>10928,
+38268=>10929,
+38316=>10930,
+38315=>10931,
+38318=>10932,
+38320=>10933,
+38564=>10934,
+38562=>10935,
+38611=>10936,
+38661=>10937,
+38664=>10938,
+38658=>10939,
+38746=>10940,
+38794=>10941,
+38798=>10942,
+38792=>10943,
+38864=>10944,
+38863=>10945,
+38942=>10946,
+38941=>10947,
+38950=>10948,
+38953=>10949,
+38952=>10950,
+38944=>10951,
+38939=>10952,
+38951=>10953,
+39090=>10954,
+39176=>10955,
+39162=>10956,
+39185=>10957,
+39188=>10958,
+39190=>10959,
+39191=>10960,
+39189=>10961,
+39388=>10962,
+39373=>10963,
+39375=>10964,
+39379=>10965,
+39380=>10966,
+39374=>10967,
+39369=>10968,
+39382=>10969,
+60270=>10969,
+39384=>10970,
+39371=>10971,
+39383=>10972,
+39372=>10973,
+39603=>10974,
+39660=>10975,
+39659=>10976,
+39667=>10977,
+39666=>10978,
+39665=>10979,
+39750=>10980,
+39747=>10981,
+39783=>10982,
+39796=>10983,
+39793=>10984,
+39782=>10985,
+39798=>10986,
+39797=>10987,
+39792=>10988,
+39784=>10989,
+39780=>10990,
+39788=>10991,
+40188=>10992,
+40186=>10993,
+40189=>10994,
+40191=>10995,
+40183=>10996,
+40199=>10997,
+40192=>10998,
+40185=>10999,
+40187=>11000,
+40200=>11001,
+40197=>11002,
+40196=>11003,
+40579=>11004,
+40659=>11005,
+40719=>11006,
+40720=>11007,
+20764=>11008,
+20755=>11009,
+20759=>11010,
+20762=>11011,
+20753=>11012,
+20958=>11013,
+21300=>11014,
+21473=>11015,
+22128=>11016,
+22112=>11017,
+22126=>11018,
+22131=>11019,
+22118=>11020,
+22115=>11021,
+22125=>11022,
+22130=>11023,
+22110=>11024,
+22135=>11025,
+22300=>11026,
+22299=>11027,
+22728=>11028,
+22717=>11029,
+22729=>11030,
+22719=>11031,
+22714=>11032,
+22722=>11033,
+22716=>11034,
+22726=>11035,
+23319=>11036,
+23321=>11037,
+23323=>11038,
+23329=>11039,
+23316=>11040,
+23315=>11041,
+23312=>11042,
+23318=>11043,
+23336=>11044,
+59539=>11044,
+23322=>11045,
+23328=>11046,
+23326=>11047,
+23535=>11048,
+23980=>11049,
+23985=>11050,
+23977=>11051,
+23975=>11052,
+23989=>11053,
+23984=>11054,
+23982=>11055,
+23978=>11056,
+23976=>11057,
+23986=>11058,
+23981=>11059,
+23983=>11060,
+23988=>11061,
+24167=>11062,
+24168=>11063,
+24166=>11064,
+24175=>11065,
+24297=>11066,
+24295=>11067,
+24294=>11068,
+24296=>11069,
+24293=>11070,
+24395=>11071,
+24508=>11072,
+24507=>11073,
+24989=>11074,
+25000=>11075,
+24982=>11076,
+25029=>11077,
+25012=>11078,
+25030=>11079,
+25025=>11080,
+25036=>11081,
+25018=>11082,
+25023=>11083,
+25016=>11084,
+24972=>11085,
+25815=>11086,
+25814=>11087,
+25808=>11088,
+25807=>11089,
+25801=>11090,
+25789=>11091,
+25737=>11092,
+25795=>11093,
+25819=>11094,
+25843=>11095,
+25817=>11096,
+25907=>11097,
+25983=>11098,
+25980=>11099,
+26018=>11100,
+26312=>11101,
+26302=>11102,
+26304=>11103,
+26314=>11104,
+26315=>11105,
+26319=>11106,
+26301=>11107,
+26299=>11108,
+26298=>11109,
+26316=>11110,
+26403=>11111,
+27188=>11112,
+27238=>11113,
+27209=>11114,
+27239=>11115,
+27186=>11116,
+27240=>11117,
+27198=>11118,
+27229=>11119,
+27245=>11120,
+27254=>11121,
+27227=>11122,
+27217=>11123,
+27176=>11124,
+27226=>11125,
+27195=>11126,
+27199=>11127,
+27201=>11128,
+27242=>11129,
+27236=>11130,
+27216=>11131,
+27215=>11132,
+27220=>11133,
+27247=>11134,
+27241=>11135,
+27232=>11136,
+27196=>11137,
+27230=>11138,
+27222=>11139,
+27221=>11140,
+27213=>11141,
+27214=>11142,
+27206=>11143,
+27477=>11144,
+27476=>11145,
+27478=>11146,
+27559=>11147,
+27562=>11148,
+27563=>11149,
+27592=>11150,
+27591=>11151,
+27652=>11152,
+27651=>11153,
+27654=>11154,
+28589=>11155,
+28619=>11156,
+28579=>11157,
+28615=>11158,
+28604=>11159,
+28622=>11160,
+28616=>11161,
+28510=>11162,
+28612=>11163,
+28605=>11164,
+28574=>11165,
+28618=>11166,
+28584=>11167,
+28676=>11168,
+28581=>11169,
+28590=>11170,
+28602=>11171,
+28588=>11172,
+28586=>11173,
+28623=>11174,
+28607=>11175,
+28600=>11176,
+28578=>11177,
+28617=>11178,
+28587=>11179,
+28621=>11180,
+28591=>11181,
+28594=>11182,
+28592=>11183,
+29125=>11184,
+29122=>11185,
+29119=>11186,
+29112=>11187,
+29142=>11188,
+29120=>11189,
+29121=>11190,
+29131=>11191,
+29140=>11192,
+29130=>11193,
+29127=>11194,
+29135=>11195,
+29117=>11196,
+29144=>11197,
+29116=>11198,
+29126=>11199,
+29146=>11200,
+29147=>11201,
+29341=>11202,
+29342=>11203,
+29545=>11204,
+29542=>11205,
+29543=>11206,
+29548=>11207,
+29541=>11208,
+29547=>11209,
+29546=>11210,
+29823=>11211,
+29850=>11212,
+29856=>11213,
+29844=>11214,
+29842=>11215,
+29845=>11216,
+29857=>11217,
+29963=>11218,
+30080=>11219,
+30255=>11220,
+30253=>11221,
+30257=>11222,
+30269=>11223,
+30259=>11224,
+30268=>11225,
+30261=>11226,
+30258=>11227,
+30256=>11228,
+30395=>11229,
+30438=>11230,
+30618=>11231,
+30621=>11232,
+30625=>11233,
+30620=>11234,
+30619=>11235,
+30626=>11236,
+30627=>11237,
+30613=>11238,
+30617=>11239,
+30615=>11240,
+30941=>11241,
+30953=>11242,
+30949=>11243,
+30954=>11244,
+30942=>11245,
+30947=>11246,
+30939=>11247,
+30945=>11248,
+30946=>11249,
+30957=>11250,
+30943=>11251,
+30944=>11252,
+31140=>11253,
+31300=>11254,
+31304=>11255,
+31303=>11256,
+31414=>11257,
+31416=>11258,
+31413=>11259,
+31409=>11260,
+31415=>11261,
+31710=>11262,
+31715=>11263,
+31719=>11264,
+31709=>11265,
+31701=>11266,
+31717=>11267,
+31706=>11268,
+31720=>11269,
+31737=>11270,
+31700=>11271,
+31722=>11272,
+31714=>11273,
+31708=>11274,
+31723=>11275,
+31704=>11276,
+31711=>11277,
+31954=>11278,
+31956=>11279,
+31959=>11280,
+31952=>11281,
+31953=>11282,
+32274=>11283,
+32289=>11284,
+32279=>11285,
+32268=>11286,
+32287=>11287,
+32288=>11288,
+32275=>11289,
+32270=>11290,
+32284=>11291,
+32277=>11292,
+32282=>11293,
+32290=>11294,
+32267=>11295,
+32271=>11296,
+32278=>11297,
+32269=>11298,
+32276=>11299,
+32293=>11300,
+32292=>11301,
+32579=>11302,
+32635=>11303,
+32636=>11304,
+32634=>11305,
+32689=>11306,
+32751=>11307,
+32810=>11308,
+32809=>11309,
+32876=>11310,
+33201=>11311,
+33190=>11312,
+33198=>11313,
+33209=>11314,
+33205=>11315,
+33195=>11316,
+33200=>11317,
+33196=>11318,
+33204=>11319,
+33202=>11320,
+33207=>11321,
+33191=>11322,
+33266=>11323,
+33365=>11324,
+33366=>11325,
+33367=>11326,
+34134=>11327,
+34117=>11328,
+34155=>11329,
+34125=>11330,
+34131=>11331,
+34145=>11332,
+34136=>11333,
+34112=>11334,
+34118=>11335,
+34148=>11336,
+34113=>11337,
+34146=>11338,
+34116=>11339,
+34129=>11340,
+34119=>11341,
+34147=>11342,
+34110=>11343,
+34139=>11344,
+34161=>11345,
+34126=>11346,
+34158=>11347,
+34165=>11348,
+34133=>11349,
+34151=>11350,
+34144=>11351,
+34188=>11352,
+34150=>11353,
+34141=>11354,
+34132=>11355,
+34149=>11356,
+34156=>11357,
+34403=>11358,
+34405=>11359,
+34404=>11360,
+34724=>11361,
+34715=>11362,
+34703=>11363,
+34711=>11364,
+34707=>11365,
+34706=>11366,
+34696=>11367,
+34689=>11368,
+34710=>11369,
+34712=>11370,
+34681=>11371,
+34695=>11372,
+34723=>11373,
+34693=>11374,
+34704=>11375,
+34705=>11376,
+34717=>11377,
+34692=>11378,
+34708=>11379,
+34716=>11380,
+34714=>11381,
+34697=>11382,
+35102=>11383,
+35110=>11384,
+35120=>11385,
+35117=>11386,
+35118=>11387,
+35111=>11388,
+35121=>11389,
+35106=>11390,
+35113=>11391,
+35107=>11392,
+35119=>11393,
+35116=>11394,
+35103=>11395,
+35313=>11396,
+35552=>11397,
+35554=>11398,
+35570=>11399,
+35572=>11400,
+35573=>11401,
+35549=>11402,
+35604=>11403,
+35556=>11404,
+35551=>11405,
+35568=>11406,
+35528=>11407,
+35550=>11408,
+35553=>11409,
+35560=>11410,
+35583=>11411,
+35567=>11412,
+35579=>11413,
+35985=>11414,
+35986=>11415,
+35984=>11416,
+36085=>11417,
+36078=>11418,
+36081=>11419,
+36080=>11420,
+36083=>11421,
+36204=>11422,
+36206=>11423,
+36261=>11424,
+36263=>11425,
+36403=>11426,
+36414=>11427,
+36408=>11428,
+36416=>11429,
+36421=>11430,
+36406=>11431,
+36412=>11432,
+36413=>11433,
+36417=>11434,
+36400=>11435,
+36415=>11436,
+36541=>11437,
+36662=>11438,
+60329=>11438,
+36654=>11439,
+36661=>11440,
+36658=>11441,
+36665=>11442,
+36663=>11443,
+36660=>11444,
+36982=>11445,
+36985=>11446,
+36987=>11447,
+36998=>11448,
+37114=>11449,
+37171=>11450,
+37173=>11451,
+37174=>11452,
+37267=>11453,
+37264=>11454,
+37265=>11455,
+37261=>11456,
+37263=>11457,
+37671=>11458,
+37662=>11459,
+37640=>11460,
+37663=>11461,
+37638=>11462,
+37647=>11463,
+37754=>11464,
+37688=>11465,
+37692=>11466,
+37659=>11467,
+37667=>11468,
+37650=>11469,
+37633=>11470,
+37702=>11471,
+37677=>11472,
+37646=>11473,
+37645=>11474,
+37579=>11475,
+37661=>11476,
+37626=>11477,
+37651=>11478,
+37625=>11479,
+37623=>11480,
+37684=>11481,
+37634=>11482,
+37668=>11483,
+37631=>11484,
+37673=>11485,
+37689=>11486,
+37685=>11487,
+37674=>11488,
+37652=>11489,
+37644=>11490,
+37643=>11491,
+37630=>11492,
+37641=>11493,
+37632=>11494,
+37627=>11495,
+37654=>11496,
+38332=>11497,
+38349=>11498,
+38334=>11499,
+38329=>11500,
+38330=>11501,
+38326=>11502,
+38335=>11503,
+38325=>11504,
+38333=>11505,
+38569=>11506,
+38612=>11507,
+38667=>11508,
+38674=>11509,
+38672=>11510,
+38809=>11511,
+38807=>11512,
+38804=>11513,
+38896=>11514,
+38904=>11515,
+38965=>11516,
+38959=>11517,
+38962=>11518,
+39204=>11519,
+39199=>11520,
+39207=>11521,
+39209=>11522,
+39326=>11523,
+39406=>11524,
+39404=>11525,
+39397=>11526,
+39396=>11527,
+39408=>11528,
+39395=>11529,
+39402=>11530,
+39401=>11531,
+39399=>11532,
+39609=>11533,
+39615=>11534,
+39604=>11535,
+39611=>11536,
+39670=>11537,
+39674=>11538,
+39673=>11539,
+39671=>11540,
+39731=>11541,
+39808=>11542,
+39813=>11543,
+39815=>11544,
+39804=>11545,
+39806=>11546,
+39803=>11547,
+39810=>11548,
+39827=>11549,
+39826=>11550,
+39824=>11551,
+39802=>11552,
+39829=>11553,
+39805=>11554,
+39816=>11555,
+40229=>11556,
+40215=>11557,
+40224=>11558,
+40222=>11559,
+40212=>11560,
+40233=>11561,
+40221=>11562,
+40216=>11563,
+40226=>11564,
+40208=>11565,
+40217=>11566,
+40223=>11567,
+40584=>11568,
+40582=>11569,
+40583=>11570,
+40622=>11571,
+40621=>11572,
+40661=>11573,
+40662=>11574,
+40698=>11575,
+40722=>11576,
+40765=>11577,
+20774=>11578,
+20773=>11579,
+20770=>11580,
+20772=>11581,
+20768=>11582,
+20777=>11583,
+21236=>11584,
+22163=>11585,
+22156=>11586,
+22157=>11587,
+22150=>11588,
+22148=>11589,
+22147=>11590,
+22142=>11591,
+22146=>11592,
+22143=>11593,
+22145=>11594,
+22742=>11595,
+22740=>11596,
+22735=>11597,
+22738=>11598,
+23341=>11599,
+23333=>11600,
+23346=>11601,
+23331=>11602,
+23340=>11603,
+23335=>11604,
+23334=>11605,
+23343=>11606,
+23342=>11607,
+23419=>11608,
+23537=>11609,
+23538=>11610,
+23991=>11611,
+24172=>11612,
+24170=>11613,
+24510=>11614,
+25027=>11615,
+25013=>11616,
+25020=>11617,
+25063=>11618,
+25056=>11619,
+25061=>11620,
+25060=>11621,
+25064=>11622,
+25054=>11623,
+25839=>11624,
+25833=>11625,
+25827=>11626,
+25835=>11627,
+25828=>11628,
+25832=>11629,
+25985=>11630,
+25984=>11631,
+26038=>11632,
+26074=>11633,
+26322=>11634,
+27277=>11635,
+27286=>11636,
+27265=>11637,
+27301=>11638,
+27273=>11639,
+27295=>11640,
+27291=>11641,
+27297=>11642,
+27294=>11643,
+27271=>11644,
+27283=>11645,
+27278=>11646,
+27285=>11647,
+27267=>11648,
+27304=>11649,
+27300=>11650,
+27281=>11651,
+27263=>11652,
+27302=>11653,
+27290=>11654,
+27269=>11655,
+27276=>11656,
+27282=>11657,
+27483=>11658,
+27565=>11659,
+27657=>11660,
+28620=>11661,
+28585=>11662,
+28660=>11663,
+28628=>11664,
+28643=>11665,
+28636=>11666,
+28653=>11667,
+28647=>11668,
+28646=>11669,
+28638=>11670,
+28658=>11671,
+28637=>11672,
+28642=>11673,
+28648=>11674,
+29153=>11675,
+29169=>11676,
+29160=>11677,
+29170=>11678,
+29156=>11679,
+29168=>11680,
+29154=>11681,
+29555=>11682,
+29550=>11683,
+29551=>11684,
+29847=>11685,
+29874=>11686,
+29867=>11687,
+29840=>11688,
+29866=>11689,
+29869=>11690,
+29873=>11691,
+29861=>11692,
+29871=>11693,
+29968=>11694,
+29969=>11695,
+29970=>11696,
+29967=>11697,
+30084=>11698,
+30275=>11699,
+30280=>11700,
+30281=>11701,
+30279=>11702,
+30372=>11703,
+30441=>11704,
+30645=>11705,
+30635=>11706,
+30642=>11707,
+30647=>11708,
+30646=>11709,
+30644=>11710,
+30641=>11711,
+30632=>11712,
+30704=>11713,
+30963=>11714,
+30973=>11715,
+30978=>11716,
+30971=>11717,
+30972=>11718,
+30975=>11719,
+30962=>11720,
+30981=>11721,
+30969=>11722,
+30974=>11723,
+30980=>11724,
+31147=>11725,
+31144=>11726,
+31324=>11727,
+31323=>11728,
+31318=>11729,
+31320=>11730,
+31316=>11731,
+31322=>11732,
+31422=>11733,
+31424=>11734,
+31425=>11735,
+31749=>11736,
+31759=>11737,
+31730=>11738,
+31744=>11739,
+31743=>11740,
+31739=>11741,
+31758=>11742,
+31732=>11743,
+31755=>11744,
+31731=>11745,
+31746=>11746,
+31753=>11747,
+31747=>11748,
+31745=>11749,
+31736=>11750,
+31741=>11751,
+31750=>11752,
+58176=>11752,
+31728=>11753,
+31729=>11754,
+31760=>11755,
+31754=>11756,
+31976=>11757,
+32301=>11758,
+32316=>11759,
+32322=>11760,
+32307=>11761,
+38984=>11762,
+32312=>11763,
+32298=>11764,
+32329=>11765,
+32320=>11766,
+32327=>11767,
+32297=>11768,
+32332=>11769,
+32304=>11770,
+32315=>11771,
+32310=>11772,
+32324=>11773,
+32314=>11774,
+32581=>11775,
+32639=>11776,
+32638=>11777,
+32637=>11778,
+32756=>11779,
+32754=>11780,
+32812=>11781,
+33211=>11782,
+33220=>11783,
+33228=>11784,
+33226=>11785,
+33221=>11786,
+33223=>11787,
+33212=>11788,
+33257=>11789,
+33371=>11790,
+33370=>11791,
+33372=>11792,
+34179=>11793,
+34176=>11794,
+34191=>11795,
+34215=>11796,
+34197=>11797,
+34208=>11798,
+34187=>11799,
+34211=>11800,
+34171=>11801,
+34212=>11802,
+34202=>11803,
+34206=>11804,
+34167=>11805,
+34172=>11806,
+34185=>11807,
+34209=>11808,
+34170=>11809,
+34168=>11810,
+34135=>11811,
+34190=>11812,
+34198=>11813,
+34182=>11814,
+34189=>11815,
+34201=>11816,
+34205=>11817,
+34177=>11818,
+34210=>11819,
+34178=>11820,
+34184=>11821,
+34181=>11822,
+34169=>11823,
+34166=>11824,
+34200=>11825,
+34192=>11826,
+34207=>11827,
+34408=>11828,
+34750=>11829,
+34730=>11830,
+34733=>11831,
+34757=>11832,
+34736=>11833,
+34732=>11834,
+34745=>11835,
+34741=>11836,
+34748=>11837,
+34734=>11838,
+34761=>11839,
+34755=>11840,
+34754=>11841,
+34764=>11842,
+34743=>11843,
+34735=>11844,
+34756=>11845,
+34762=>11846,
+34740=>11847,
+34742=>11848,
+34751=>11849,
+34744=>11850,
+34749=>11851,
+34782=>11852,
+34738=>11853,
+35125=>11854,
+35123=>11855,
+35132=>11856,
+35134=>11857,
+35137=>11858,
+35154=>11859,
+35127=>11860,
+35138=>11861,
+35245=>11862,
+35247=>11863,
+35246=>11864,
+35314=>11865,
+35315=>11866,
+35614=>11867,
+35608=>11868,
+35606=>11869,
+35601=>11870,
+35589=>11871,
+35595=>11872,
+35618=>11873,
+35599=>11874,
+35602=>11875,
+35605=>11876,
+35591=>11877,
+35597=>11878,
+35592=>11879,
+35590=>11880,
+35612=>11881,
+35603=>11882,
+35610=>11883,
+35919=>11884,
+35952=>11885,
+35954=>11886,
+35953=>11887,
+35951=>11888,
+35989=>11889,
+35988=>11890,
+36089=>11891,
+36207=>11892,
+36430=>11893,
+36429=>11894,
+36435=>11895,
+36432=>11896,
+36428=>11897,
+36423=>11898,
+36675=>11899,
+36672=>11900,
+36997=>11901,
+36990=>11902,
+37176=>11903,
+37274=>11904,
+37282=>11905,
+37275=>11906,
+37273=>11907,
+37279=>11908,
+37281=>11909,
+37277=>11910,
+37280=>11911,
+37793=>11912,
+37763=>11913,
+37807=>11914,
+37732=>11915,
+37718=>11916,
+37703=>11917,
+37756=>11918,
+37720=>11919,
+37724=>11920,
+37750=>11921,
+37705=>11922,
+37712=>11923,
+37713=>11924,
+37728=>11925,
+37741=>11926,
+37775=>11927,
+37708=>11928,
+37738=>11929,
+37753=>11930,
+37719=>11931,
+37717=>11932,
+37714=>11933,
+37711=>11934,
+37745=>11935,
+37751=>11936,
+37755=>11937,
+37729=>11938,
+37726=>11939,
+37731=>11940,
+37735=>11941,
+37710=>11942,
+37721=>11943,
+38343=>11944,
+38336=>11945,
+38345=>11946,
+38339=>11947,
+38341=>11948,
+38327=>11949,
+38574=>11950,
+38576=>11951,
+38572=>11952,
+38688=>11953,
+38687=>11954,
+38680=>11955,
+38685=>11956,
+38681=>11957,
+38810=>11958,
+38817=>11959,
+38812=>11960,
+38814=>11961,
+38813=>11962,
+38869=>11963,
+38868=>11964,
+38897=>11965,
+38977=>11966,
+38980=>11967,
+38986=>11968,
+38985=>11969,
+38981=>11970,
+38979=>11971,
+39205=>11972,
+39211=>11973,
+39212=>11974,
+39210=>11975,
+39219=>11976,
+39218=>11977,
+39215=>11978,
+39213=>11979,
+39217=>11980,
+39216=>11981,
+39320=>11982,
+39331=>11983,
+39329=>11984,
+39426=>11985,
+39418=>11986,
+39412=>11987,
+39415=>11988,
+39417=>11989,
+39416=>11990,
+39414=>11991,
+39419=>11992,
+39421=>11993,
+39422=>11994,
+39420=>11995,
+39427=>11996,
+39614=>11997,
+39678=>11998,
+39677=>11999,
+39681=>12000,
+39676=>12001,
+39752=>12002,
+39834=>12003,
+39848=>12004,
+39838=>12005,
+39835=>12006,
+39846=>12007,
+39841=>12008,
+39845=>12009,
+39844=>12010,
+39814=>12011,
+39842=>12012,
+39840=>12013,
+39855=>12014,
+40243=>12015,
+40257=>12016,
+40295=>12017,
+40246=>12018,
+40238=>12019,
+40239=>12020,
+40241=>12021,
+40248=>12022,
+40240=>12023,
+40261=>12024,
+40258=>12025,
+40259=>12026,
+40254=>12027,
+40247=>12028,
+40256=>12029,
+40253=>12030,
+32757=>12031,
+40237=>12032,
+40586=>12033,
+40585=>12034,
+40589=>12035,
+40624=>12036,
+40648=>12037,
+40666=>12038,
+40699=>12039,
+40703=>12040,
+40740=>12041,
+40739=>12042,
+40738=>12043,
+40788=>12044,
+12245=>12045,
+40864=>12045,
+20785=>12046,
+20781=>12047,
+20782=>12048,
+22168=>12049,
+22172=>12050,
+22167=>12051,
+22170=>12052,
+22173=>12053,
+22169=>12054,
+22896=>12055,
+23356=>12056,
+23657=>12057,
+23658=>12058,
+24000=>12059,
+24173=>12060,
+24174=>12061,
+25048=>12062,
+25055=>12063,
+25069=>12064,
+25070=>12065,
+25073=>12066,
+25066=>12067,
+25072=>12068,
+25067=>12069,
+25046=>12070,
+25065=>12071,
+25855=>12072,
+25860=>12073,
+25853=>12074,
+25848=>12075,
+25857=>12076,
+25859=>12077,
+25852=>12078,
+26004=>12079,
+26075=>12080,
+26330=>12081,
+26331=>12082,
+26328=>12083,
+27333=>12084,
+27321=>12085,
+27325=>12086,
+27361=>12087,
+27334=>12088,
+27322=>12089,
+27318=>12090,
+27319=>12091,
+27335=>12092,
+27316=>12093,
+27309=>12094,
+27486=>12095,
+27593=>12096,
+27659=>12097,
+28679=>12098,
+28684=>12099,
+28685=>12100,
+28673=>12101,
+28677=>12102,
+28692=>12103,
+28686=>12104,
+28671=>12105,
+28672=>12106,
+28667=>12107,
+28710=>12108,
+28668=>12109,
+28663=>12110,
+28682=>12111,
+29185=>12112,
+60224=>12112,
+29183=>12113,
+29177=>12114,
+29187=>12115,
+29181=>12116,
+29558=>12117,
+29880=>12118,
+29888=>12119,
+29877=>12120,
+29889=>12121,
+29886=>12122,
+29878=>12123,
+29883=>12124,
+29890=>12125,
+29972=>12126,
+29971=>12127,
+30300=>12128,
+30308=>12129,
+30297=>12130,
+30288=>12131,
+30291=>12132,
+30295=>12133,
+30298=>12134,
+30374=>12135,
+30397=>12136,
+30444=>12137,
+30658=>12138,
+30650=>12139,
+30988=>12140,
+30995=>12141,
+30996=>12142,
+30985=>12143,
+30992=>12144,
+30994=>12145,
+30993=>12146,
+31149=>12147,
+31148=>12148,
+31327=>12149,
+31772=>12150,
+31785=>12151,
+31769=>12152,
+31776=>12153,
+31775=>12154,
+31789=>12155,
+31773=>12156,
+31782=>12157,
+31784=>12158,
+31778=>12159,
+31781=>12160,
+31792=>12161,
+32348=>12162,
+32336=>12163,
+32342=>12164,
+32355=>12165,
+32344=>12166,
+32354=>12167,
+32351=>12168,
+32337=>12169,
+32352=>12170,
+32343=>12171,
+32339=>12172,
+32693=>12173,
+32691=>12174,
+32759=>12175,
+32760=>12176,
+32885=>12177,
+33233=>12178,
+33234=>12179,
+33232=>12180,
+33375=>12181,
+33374=>12182,
+34228=>12183,
+34246=>12184,
+34240=>12185,
+34243=>12186,
+34242=>12187,
+34227=>12188,
+34229=>12189,
+34237=>12190,
+34247=>12191,
+34244=>12192,
+34239=>12193,
+34251=>12194,
+34254=>12195,
+34248=>12196,
+34245=>12197,
+34225=>12198,
+34230=>12199,
+34258=>12200,
+34340=>12201,
+34232=>12202,
+34231=>12203,
+34238=>12204,
+34409=>12205,
+34791=>12206,
+34790=>12207,
+34786=>12208,
+34779=>12209,
+34795=>12210,
+34794=>12211,
+34789=>12212,
+34783=>12213,
+34803=>12214,
+34788=>12215,
+34772=>12216,
+34780=>12217,
+34771=>12218,
+34797=>12219,
+34776=>12220,
+34787=>12221,
+34775=>12222,
+34777=>12223,
+34817=>12224,
+34804=>12225,
+34792=>12226,
+34781=>12227,
+35155=>12228,
+35147=>12229,
+35151=>12230,
+35148=>12231,
+35142=>12232,
+35152=>12233,
+35153=>12234,
+35145=>12235,
+35626=>12236,
+35623=>12237,
+35619=>12238,
+35635=>12239,
+35632=>12240,
+35637=>12241,
+35655=>12242,
+35631=>12243,
+35644=>12244,
+35646=>12245,
+35633=>12246,
+35621=>12247,
+35639=>12248,
+35622=>12249,
+35638=>12250,
+35630=>12251,
+35620=>12252,
+35643=>12253,
+35645=>12254,
+35642=>12255,
+35906=>12256,
+35957=>12257,
+35993=>12258,
+35992=>12259,
+35991=>12260,
+36094=>12261,
+36100=>12262,
+36098=>12263,
+36096=>12264,
+36444=>12265,
+36450=>12266,
+36448=>12267,
+36439=>12268,
+36438=>12269,
+36446=>12270,
+36453=>12271,
+36455=>12272,
+36443=>12273,
+36442=>12274,
+36449=>12275,
+36445=>12276,
+36457=>12277,
+36436=>12278,
+36678=>12279,
+36679=>12280,
+36680=>12281,
+36683=>12282,
+37160=>12283,
+37178=>12284,
+37179=>12285,
+37182=>12286,
+37288=>12287,
+37285=>12288,
+37287=>12289,
+37295=>12290,
+37290=>12291,
+37813=>12292,
+37772=>12293,
+37778=>12294,
+37815=>12295,
+37787=>12296,
+37789=>12297,
+37769=>12298,
+37799=>12299,
+37774=>12300,
+37802=>12301,
+37790=>12302,
+37798=>12303,
+37781=>12304,
+37768=>12305,
+37785=>12306,
+37791=>12307,
+37760=>12308,
+37773=>12309,
+37809=>12310,
+37777=>12311,
+37810=>12312,
+37796=>12313,
+37800=>12314,
+37812=>12315,
+37795=>12316,
+38354=>12317,
+38355=>12318,
+38353=>12319,
+38579=>12320,
+38615=>12321,
+38618=>12322,
+24002=>12323,
+38623=>12324,
+38616=>12325,
+38621=>12326,
+38691=>12327,
+38690=>12328,
+38693=>12329,
+38828=>12330,
+38830=>12331,
+38824=>12332,
+38827=>12333,
+38820=>12334,
+38826=>12335,
+38818=>12336,
+38821=>12337,
+38871=>12338,
+38873=>12339,
+38870=>12340,
+38872=>12341,
+38906=>12342,
+38992=>12343,
+38993=>12344,
+38994=>12345,
+39096=>12346,
+39233=>12347,
+39228=>12348,
+39226=>12349,
+39439=>12350,
+39435=>12351,
+39433=>12352,
+39437=>12353,
+39428=>12354,
+39441=>12355,
+39434=>12356,
+39429=>12357,
+39431=>12358,
+39430=>12359,
+39616=>12360,
+39644=>12361,
+39688=>12362,
+39684=>12363,
+39685=>12364,
+39721=>12365,
+39733=>12366,
+39754=>12367,
+39756=>12368,
+39755=>12369,
+39879=>12370,
+39878=>12371,
+39875=>12372,
+39871=>12373,
+39873=>12374,
+39861=>12375,
+39864=>12376,
+39891=>12377,
+39862=>12378,
+39876=>12379,
+39865=>12380,
+39869=>12381,
+40284=>12382,
+40275=>12383,
+40271=>12384,
+40266=>12385,
+40283=>12386,
+40267=>12387,
+40281=>12388,
+40278=>12389,
+40268=>12390,
+40279=>12391,
+40274=>12392,
+40276=>12393,
+40287=>12394,
+40280=>12395,
+40282=>12396,
+40590=>12397,
+40588=>12398,
+40671=>12399,
+40705=>12400,
+40704=>12401,
+40726=>12402,
+58693=>12402,
+40741=>12403,
+40747=>12404,
+40746=>12405,
+40745=>12406,
+40744=>12407,
+40780=>12408,
+40789=>12409,
+20788=>12410,
+20789=>12411,
+21142=>12412,
+21239=>12413,
+21428=>12414,
+22187=>12415,
+22189=>12416,
+22182=>12417,
+22183=>12418,
+22186=>12419,
+22188=>12420,
+22746=>12421,
+22749=>12422,
+22747=>12423,
+22802=>12424,
+23357=>12425,
+23358=>12426,
+23359=>12427,
+24003=>12428,
+24176=>12429,
+24511=>12430,
+25083=>12431,
+25863=>12432,
+25872=>12433,
+25869=>12434,
+25865=>12435,
+25868=>12436,
+25870=>12437,
+25988=>12438,
+26078=>12439,
+26077=>12440,
+26334=>12441,
+27367=>12442,
+27360=>12443,
+27340=>12444,
+27345=>12445,
+27353=>12446,
+27339=>12447,
+27359=>12448,
+27356=>12449,
+27344=>12450,
+27371=>12451,
+27343=>12452,
+27341=>12453,
+27358=>12454,
+27488=>12455,
+27568=>12456,
+27660=>12457,
+28697=>12458,
+28711=>12459,
+28704=>12460,
+28694=>12461,
+28715=>12462,
+28705=>12463,
+28706=>12464,
+28707=>12465,
+28713=>12466,
+28695=>12467,
+28708=>12468,
+28700=>12469,
+29196=>12470,
+29194=>12471,
+29191=>12472,
+29186=>12473,
+29189=>12474,
+29349=>12475,
+29350=>12476,
+29348=>12477,
+29347=>12478,
+29345=>12479,
+29899=>12480,
+29893=>12481,
+29879=>12482,
+29891=>12483,
+29974=>12484,
+30304=>12485,
+30665=>12486,
+30666=>12487,
+30660=>12488,
+30705=>12489,
+31005=>12490,
+31003=>12491,
+31009=>12492,
+31004=>12493,
+30999=>12494,
+31006=>12495,
+31152=>12496,
+31335=>12497,
+31336=>12498,
+31795=>12499,
+31804=>12500,
+31801=>12501,
+31788=>12502,
+31803=>12503,
+31980=>12504,
+31978=>12505,
+32374=>12506,
+32373=>12507,
+32376=>12508,
+32368=>12509,
+32375=>12510,
+32367=>12511,
+32378=>12512,
+32370=>12513,
+32372=>12514,
+32360=>12515,
+32587=>12516,
+32586=>12517,
+32643=>12518,
+32646=>12519,
+32695=>12520,
+32765=>12521,
+32766=>12522,
+32888=>12523,
+33239=>12524,
+33237=>12525,
+33291=>12526,
+33380=>12527,
+33377=>12528,
+33379=>12529,
+34283=>12530,
+34289=>12531,
+34285=>12532,
+34265=>12533,
+34273=>12534,
+34280=>12535,
+34266=>12536,
+34263=>12537,
+34284=>12538,
+34290=>12539,
+34296=>12540,
+34264=>12541,
+34271=>12542,
+34275=>12543,
+34268=>12544,
+34257=>12545,
+34288=>12546,
+34278=>12547,
+34287=>12548,
+34270=>12549,
+34274=>12550,
+34816=>12551,
+34810=>12552,
+34819=>12553,
+34806=>12554,
+34807=>12555,
+34825=>12556,
+34828=>12557,
+34827=>12558,
+34822=>12559,
+34812=>12560,
+34824=>12561,
+34815=>12562,
+34826=>12563,
+34818=>12564,
+35170=>12565,
+35162=>12566,
+35163=>12567,
+35159=>12568,
+35169=>12569,
+35164=>12570,
+35160=>12571,
+35165=>12572,
+35161=>12573,
+35208=>12574,
+35255=>12575,
+35254=>12576,
+35318=>12577,
+35664=>12578,
+35656=>12579,
+35658=>12580,
+35648=>12581,
+35667=>12582,
+35670=>12583,
+35668=>12584,
+35659=>12585,
+35669=>12586,
+35665=>12587,
+35650=>12588,
+35666=>12589,
+35671=>12590,
+35907=>12591,
+35959=>12592,
+35958=>12593,
+35994=>12594,
+36102=>12595,
+36103=>12596,
+36105=>12597,
+36268=>12598,
+36266=>12599,
+36269=>12600,
+36267=>12601,
+36461=>12602,
+36472=>12603,
+36467=>12604,
+36458=>12605,
+36463=>12606,
+36475=>12607,
+36546=>12608,
+36690=>12609,
+36689=>12610,
+36687=>12611,
+36688=>12612,
+36691=>12613,
+36788=>12614,
+37184=>12615,
+37183=>12616,
+37296=>12617,
+37293=>12618,
+37854=>12619,
+37831=>12620,
+37839=>12621,
+37826=>12622,
+37850=>12623,
+37840=>12624,
+37881=>12625,
+37868=>12626,
+37836=>12627,
+37849=>12628,
+37801=>12629,
+37862=>12630,
+37834=>12631,
+37844=>12632,
+37870=>12633,
+37859=>12634,
+37845=>12635,
+37828=>12636,
+37838=>12637,
+37824=>12638,
+37842=>12639,
+37797=>12640,
+37863=>12641,
+38269=>12642,
+38362=>12643,
+38363=>12644,
+38625=>12645,
+38697=>12646,
+38699=>12647,
+38700=>12648,
+38696=>12649,
+38694=>12650,
+38835=>12651,
+38839=>12652,
+38838=>12653,
+38877=>12654,
+38878=>12655,
+38879=>12656,
+39004=>12657,
+39001=>12658,
+39005=>12659,
+38999=>12660,
+39103=>12661,
+39101=>12662,
+39099=>12663,
+39102=>12664,
+39240=>12665,
+39239=>12666,
+39235=>12667,
+39334=>12668,
+39335=>12669,
+39450=>12670,
+39445=>12671,
+39461=>12672,
+39453=>12673,
+39460=>12674,
+39451=>12675,
+39458=>12676,
+39456=>12677,
+39463=>12678,
+39459=>12679,
+39454=>12680,
+39452=>12681,
+39444=>12682,
+39618=>12683,
+39691=>12684,
+39690=>12685,
+39694=>12686,
+39692=>12687,
+39735=>12688,
+39914=>12689,
+39915=>12690,
+39904=>12691,
+39902=>12692,
+39908=>12693,
+39910=>12694,
+39906=>12695,
+39920=>12696,
+39892=>12697,
+39895=>12698,
+39916=>12699,
+39900=>12700,
+39897=>12701,
+39909=>12702,
+39893=>12703,
+39905=>12704,
+39898=>12705,
+40311=>12706,
+40321=>12707,
+40330=>12708,
+40324=>12709,
+40328=>12710,
+40305=>12711,
+40320=>12712,
+40312=>12713,
+40326=>12714,
+40331=>12715,
+40332=>12716,
+40317=>12717,
+40299=>12718,
+40308=>12719,
+40309=>12720,
+40304=>12721,
+40297=>12722,
+40325=>12723,
+40307=>12724,
+40315=>12725,
+40322=>12726,
+40303=>12727,
+40313=>12728,
+40319=>12729,
+40327=>12730,
+40296=>12731,
+40596=>12732,
+40593=>12733,
+40640=>12734,
+40700=>12735,
+40749=>12736,
+40768=>12737,
+40769=>12738,
+40781=>12739,
+40790=>12740,
+40791=>12741,
+40792=>12742,
+21303=>12743,
+22194=>12744,
+22197=>12745,
+22195=>12746,
+22755=>12747,
+23365=>12748,
+24006=>12749,
+24007=>12750,
+24302=>12751,
+24303=>12752,
+24512=>12753,
+24513=>12754,
+25081=>12755,
+25879=>12756,
+25878=>12757,
+25877=>12758,
+25875=>12759,
+26079=>12760,
+26344=>12761,
+26339=>12762,
+26340=>12763,
+27379=>12764,
+27376=>12765,
+27370=>12766,
+27368=>12767,
+27385=>12768,
+27377=>12769,
+27374=>12770,
+27375=>12771,
+28732=>12772,
+28725=>12773,
+28719=>12774,
+28727=>12775,
+28724=>12776,
+28721=>12777,
+28738=>12778,
+28728=>12779,
+28735=>12780,
+28730=>12781,
+28729=>12782,
+28714=>12783,
+28736=>12784,
+28731=>12785,
+28723=>12786,
+28737=>12787,
+29203=>12788,
+29204=>12789,
+29352=>12790,
+29565=>12791,
+29564=>12792,
+29882=>12793,
+30379=>12794,
+30378=>12795,
+30398=>12796,
+30445=>12797,
+30668=>12798,
+30670=>12799,
+30671=>12800,
+30669=>12801,
+30706=>12802,
+31013=>12803,
+31011=>12804,
+31015=>12805,
+31016=>12806,
+31012=>12807,
+31017=>12808,
+31154=>12809,
+31342=>12810,
+31340=>12811,
+31341=>12812,
+31479=>12813,
+31817=>12814,
+31816=>12815,
+31818=>12816,
+31815=>12817,
+31813=>12818,
+31982=>12819,
+32379=>12820,
+32382=>12821,
+32385=>12822,
+32384=>12823,
+32698=>12824,
+32767=>12825,
+32889=>12826,
+33243=>12827,
+33241=>12828,
+33384=>12829,
+33385=>12830,
+34338=>12831,
+34303=>12832,
+34305=>12833,
+34302=>12834,
+34331=>12835,
+34304=>12836,
+34294=>12837,
+34308=>12838,
+34313=>12839,
+34309=>12840,
+34316=>12841,
+34301=>12842,
+34841=>12843,
+34832=>12844,
+34833=>12845,
+34839=>12846,
+34835=>12847,
+34838=>12848,
+35171=>12849,
+35174=>12850,
+35257=>12851,
+35319=>12852,
+35680=>12853,
+35690=>12854,
+35677=>12855,
+35688=>12856,
+35683=>12857,
+35685=>12858,
+35687=>12859,
+35693=>12860,
+36270=>12861,
+36486=>12862,
+36488=>12863,
+36484=>12864,
+36697=>12865,
+36694=>12866,
+36695=>12867,
+36693=>12868,
+36696=>12869,
+36698=>12870,
+37005=>12871,
+37187=>12872,
+37185=>12873,
+37303=>12874,
+37301=>12875,
+37298=>12876,
+37299=>12877,
+37899=>12878,
+37907=>12879,
+37883=>12880,
+37920=>12881,
+37903=>12882,
+37908=>12883,
+37886=>12884,
+37909=>12885,
+37904=>12886,
+37928=>12887,
+37913=>12888,
+37901=>12889,
+37877=>12890,
+37888=>12891,
+37879=>12892,
+37895=>12893,
+37902=>12894,
+37910=>12895,
+37906=>12896,
+37882=>12897,
+37897=>12898,
+37880=>12899,
+37948=>12900,
+37898=>12901,
+37887=>12902,
+37884=>12903,
+37900=>12904,
+37878=>12905,
+37905=>12906,
+37894=>12907,
+38366=>12908,
+38368=>12909,
+38367=>12910,
+38702=>12911,
+38703=>12912,
+38841=>12913,
+38843=>12914,
+38909=>12915,
+38910=>12916,
+39008=>12917,
+39010=>12918,
+39011=>12919,
+39007=>12920,
+39105=>12921,
+39106=>12922,
+39248=>12923,
+39246=>12924,
+39257=>12925,
+39244=>12926,
+39243=>12927,
+39251=>12928,
+39474=>12929,
+39476=>12930,
+39473=>12931,
+39468=>12932,
+39466=>12933,
+39478=>12934,
+39465=>12935,
+39470=>12936,
+39480=>12937,
+39469=>12938,
+39623=>12939,
+39626=>12940,
+39622=>12941,
+39696=>12942,
+39698=>12943,
+39697=>12944,
+39947=>12945,
+39944=>12946,
+39927=>12947,
+39941=>12948,
+39954=>12949,
+39928=>12950,
+40000=>12951,
+39943=>12952,
+39950=>12953,
+39942=>12954,
+39959=>12955,
+39956=>12956,
+39945=>12957,
+40351=>12958,
+40345=>12959,
+40356=>12960,
+40349=>12961,
+40338=>12962,
+40344=>12963,
+40336=>12964,
+40347=>12965,
+40352=>12966,
+40340=>12967,
+40348=>12968,
+40362=>12969,
+40343=>12970,
+40353=>12971,
+40346=>12972,
+40354=>12973,
+40360=>12974,
+40350=>12975,
+40355=>12976,
+40383=>12977,
+40361=>12978,
+40342=>12979,
+40358=>12980,
+40359=>12981,
+40601=>12982,
+40603=>12983,
+40602=>12984,
+40677=>12985,
+40676=>12986,
+40679=>12987,
+40678=>12988,
+40752=>12989,
+40750=>12990,
+40795=>12991,
+40800=>12992,
+40798=>12993,
+40797=>12994,
+40793=>12995,
+40849=>12996,
+20794=>12997,
+20793=>12998,
+21144=>12999,
+21143=>13000,
+22211=>13001,
+22205=>13002,
+22206=>13003,
+23368=>13004,
+23367=>13005,
+24011=>13006,
+24015=>13007,
+24305=>13008,
+25085=>13009,
+25883=>13010,
+27394=>13011,
+27388=>13012,
+27395=>13013,
+27384=>13014,
+27392=>13015,
+28739=>13016,
+28740=>13017,
+28746=>13018,
+28744=>13019,
+28745=>13020,
+28741=>13021,
+28742=>13022,
+29213=>13023,
+29210=>13024,
+29209=>13025,
+29566=>13026,
+29975=>13027,
+30314=>13028,
+30672=>13029,
+31021=>13030,
+31025=>13031,
+31023=>13032,
+31828=>13033,
+31827=>13034,
+31986=>13035,
+32394=>13036,
+60229=>13037,
+32391=>13037,
+32392=>13038,
+32395=>13039,
+32390=>13040,
+32397=>13041,
+32589=>13042,
+32699=>13043,
+32816=>13044,
+33245=>13045,
+34328=>13046,
+34346=>13047,
+34342=>13048,
+34335=>13049,
+34339=>13050,
+34332=>13051,
+34329=>13052,
+34343=>13053,
+34350=>13054,
+34337=>13055,
+34336=>13056,
+34345=>13057,
+34334=>13058,
+34341=>13059,
+34857=>13060,
+34845=>13061,
+34843=>13062,
+34848=>13063,
+34852=>13064,
+34844=>13065,
+34859=>13066,
+34890=>13067,
+35181=>13068,
+35177=>13069,
+35182=>13070,
+35179=>13071,
+35322=>13072,
+35705=>13073,
+35704=>13074,
+35653=>13075,
+35706=>13076,
+35707=>13077,
+36112=>13078,
+36116=>13079,
+36271=>13080,
+36494=>13081,
+36492=>13082,
+36702=>13083,
+36699=>13084,
+36701=>13085,
+37190=>13086,
+37188=>13087,
+37189=>13088,
+37305=>13089,
+37951=>13090,
+37947=>13091,
+37942=>13092,
+37929=>13093,
+37949=>13094,
+37936=>13095,
+37945=>13096,
+37930=>13097,
+37943=>13098,
+37932=>13099,
+37952=>13100,
+37937=>13101,
+38373=>13102,
+38372=>13103,
+38371=>13104,
+38709=>13105,
+38714=>13106,
+38847=>13107,
+38881=>13108,
+39012=>13109,
+39113=>13110,
+39110=>13111,
+39104=>13112,
+39256=>13113,
+39254=>13114,
+39481=>13115,
+39485=>13116,
+39494=>13117,
+39492=>13118,
+39490=>13119,
+39489=>13120,
+39482=>13121,
+39487=>13122,
+39629=>13123,
+39701=>13124,
+39703=>13125,
+39704=>13126,
+39702=>13127,
+39738=>13128,
+39762=>13129,
+39979=>13130,
+39965=>13131,
+39964=>13132,
+39980=>13133,
+39971=>13134,
+39976=>13135,
+39977=>13136,
+39972=>13137,
+39969=>13138,
+40375=>13139,
+40374=>13140,
+40380=>13141,
+40385=>13142,
+40391=>13143,
+40394=>13144,
+40399=>13145,
+40382=>13146,
+40389=>13147,
+40387=>13148,
+40379=>13149,
+40373=>13150,
+40398=>13151,
+40377=>13152,
+40378=>13153,
+40364=>13154,
+40392=>13155,
+40369=>13156,
+40365=>13157,
+40396=>13158,
+40371=>13159,
+40397=>13160,
+40370=>13161,
+40570=>13162,
+40604=>13163,
+40683=>13164,
+40686=>13165,
+40685=>13166,
+40731=>13167,
+40728=>13168,
+40730=>13169,
+40753=>13170,
+40782=>13171,
+40805=>13172,
+40804=>13173,
+40850=>13174,
+20153=>13175,
+22214=>13176,
+22213=>13177,
+22219=>13178,
+22897=>13179,
+23371=>13180,
+23372=>13181,
+24021=>13182,
+24017=>13183,
+24306=>13184,
+25889=>13185,
+25888=>13186,
+25894=>13187,
+25890=>13188,
+27403=>13189,
+27400=>13190,
+27401=>13191,
+27661=>13192,
+28757=>13193,
+28758=>13194,
+28759=>13195,
+28754=>13196,
+29214=>13197,
+29215=>13198,
+29353=>13199,
+29567=>13200,
+29912=>13201,
+29909=>13202,
+29913=>13203,
+29911=>13204,
+30317=>13205,
+30381=>13206,
+31029=>13207,
+31156=>13208,
+31344=>13209,
+31345=>13210,
+31831=>13211,
+31836=>13212,
+31833=>13213,
+31835=>13214,
+31834=>13215,
+31988=>13216,
+31985=>13217,
+32401=>13218,
+32591=>13219,
+32647=>13220,
+33246=>13221,
+33387=>13222,
+34356=>13223,
+34357=>13224,
+34355=>13225,
+34348=>13226,
+34354=>13227,
+34358=>13228,
+34860=>13229,
+34856=>13230,
+34854=>13231,
+34858=>13232,
+34853=>13233,
+35185=>13234,
+35263=>13235,
+35262=>13236,
+35323=>13237,
+35710=>13238,
+35716=>13239,
+35714=>13240,
+35718=>13241,
+35717=>13242,
+35711=>13243,
+36117=>13244,
+36501=>13245,
+36500=>13246,
+36506=>13247,
+36498=>13248,
+36496=>13249,
+36502=>13250,
+36503=>13251,
+36704=>13252,
+36706=>13253,
+37191=>13254,
+37964=>13255,
+37968=>13256,
+37962=>13257,
+37963=>13258,
+37967=>13259,
+37959=>13260,
+37957=>13261,
+37960=>13262,
+37961=>13263,
+37958=>13264,
+38719=>13265,
+38883=>13266,
+39018=>13267,
+39017=>13268,
+39115=>13269,
+39252=>13270,
+39259=>13271,
+39502=>13272,
+39507=>13273,
+39508=>13274,
+39500=>13275,
+39503=>13276,
+39496=>13277,
+39498=>13278,
+39497=>13279,
+39506=>13280,
+39504=>13281,
+39632=>13282,
+39705=>13283,
+39723=>13284,
+39739=>13285,
+39766=>13286,
+39765=>13287,
+40006=>13288,
+40008=>13289,
+39999=>13290,
+40004=>13291,
+39993=>13292,
+39987=>13293,
+40001=>13294,
+39996=>13295,
+39991=>13296,
+39988=>13297,
+39986=>13298,
+39997=>13299,
+39990=>13300,
+40411=>13301,
+40402=>13302,
+40414=>13303,
+40410=>13304,
+40395=>13305,
+40400=>13306,
+40412=>13307,
+40401=>13308,
+40415=>13309,
+40425=>13310,
+40409=>13311,
+40408=>13312,
+40406=>13313,
+40437=>13314,
+40405=>13315,
+40413=>13316,
+40630=>13317,
+40688=>13318,
+40757=>13319,
+40755=>13320,
+40754=>13321,
+40770=>13322,
+40811=>13323,
+40853=>13324,
+40866=>13325,
+20797=>13326,
+21145=>13327,
+22760=>13328,
+22759=>13329,
+22898=>13330,
+23373=>13331,
+24024=>13332,
+34863=>13333,
+24399=>13334,
+25089=>13335,
+25091=>13336,
+25092=>13337,
+25897=>13338,
+25893=>13339,
+26006=>13340,
+26347=>13341,
+27409=>13342,
+27410=>13343,
+27407=>13344,
+27594=>13345,
+28763=>13346,
+28762=>13347,
+29218=>13348,
+29570=>13349,
+29569=>13350,
+29571=>13351,
+30320=>13352,
+30676=>13353,
+31847=>13354,
+31846=>13355,
+32405=>13356,
+33388=>13357,
+34362=>13358,
+34368=>13359,
+34361=>13360,
+34364=>13361,
+34353=>13362,
+34363=>13363,
+34366=>13364,
+34864=>13365,
+34866=>13366,
+34862=>13367,
+34867=>13368,
+35190=>13369,
+35188=>13370,
+35187=>13371,
+35326=>13372,
+35724=>13373,
+35726=>13374,
+35723=>13375,
+35720=>13376,
+35909=>13377,
+36121=>13378,
+36504=>13379,
+36708=>13380,
+36707=>13381,
+37308=>13382,
+37986=>13383,
+37973=>13384,
+37981=>13385,
+37975=>13386,
+37982=>13387,
+38852=>13388,
+38853=>13389,
+38912=>13390,
+39510=>13391,
+39513=>13392,
+39710=>13393,
+39711=>13394,
+39712=>13395,
+40018=>13396,
+40024=>13397,
+40016=>13398,
+40010=>13399,
+40013=>13400,
+40011=>13401,
+40021=>13402,
+40025=>13403,
+40012=>13404,
+40014=>13405,
+40443=>13406,
+40439=>13407,
+40431=>13408,
+40419=>13409,
+40427=>13410,
+40440=>13411,
+40420=>13412,
+40438=>13413,
+40417=>13414,
+40430=>13415,
+40422=>13416,
+40434=>13417,
+40432=>13418,
+60370=>13418,
+40418=>13419,
+40428=>13420,
+40436=>13421,
+40435=>13422,
+40424=>13423,
+40429=>13424,
+40642=>13425,
+40656=>13426,
+40690=>13427,
+40691=>13428,
+40710=>13429,
+40732=>13430,
+40760=>13431,
+40759=>13432,
+40758=>13433,
+40771=>13434,
+40783=>13435,
+40817=>13436,
+40816=>13437,
+40814=>13438,
+40815=>13439,
+22227=>13440,
+22221=>13441,
+23374=>13442,
+23661=>13443,
+25901=>13444,
+26349=>13445,
+26350=>13446,
+27411=>13447,
+28767=>13448,
+28769=>13449,
+28765=>13450,
+28768=>13451,
+29219=>13452,
+29915=>13453,
+29925=>13454,
+30677=>13455,
+31032=>13456,
+31159=>13457,
+31158=>13458,
+31850=>13459,
+32407=>13460,
+32649=>13461,
+33389=>13462,
+34371=>13463,
+34872=>13464,
+34871=>13465,
+34869=>13466,
+34891=>13467,
+35732=>13468,
+35733=>13469,
+36510=>13470,
+36511=>13471,
+36512=>13472,
+36509=>13473,
+37310=>13474,
+37309=>13475,
+37314=>13476,
+37995=>13477,
+37992=>13478,
+37993=>13479,
+38629=>13480,
+38726=>13481,
+38723=>13482,
+38727=>13483,
+38855=>13484,
+38885=>13485,
+39518=>13486,
+39637=>13487,
+39769=>13488,
+40035=>13489,
+40039=>13490,
+40038=>13491,
+40034=>13492,
+40030=>13493,
+40032=>13494,
+40450=>13495,
+40446=>13496,
+40455=>13497,
+40451=>13498,
+40454=>13499,
+40453=>13500,
+40448=>13501,
+40449=>13502,
+40457=>13503,
+40447=>13504,
+40445=>13505,
+40452=>13506,
+40608=>13507,
+40734=>13508,
+40774=>13509,
+40820=>13510,
+40821=>13511,
+40822=>13512,
+22228=>13513,
+25902=>13514,
+26040=>13515,
+27416=>13516,
+27417=>13517,
+27415=>13518,
+27418=>13519,
+28770=>13520,
+29222=>13521,
+29354=>13522,
+30680=>13523,
+30681=>13524,
+31033=>13525,
+31849=>13526,
+31851=>13527,
+31990=>13528,
+32410=>13529,
+32408=>13530,
+32411=>13531,
+32409=>13532,
+33248=>13533,
+33249=>13534,
+34374=>13535,
+34375=>13536,
+34376=>13537,
+35193=>13538,
+35194=>13539,
+35196=>13540,
+35195=>13541,
+35327=>13542,
+35736=>13543,
+35737=>13544,
+36517=>13545,
+36516=>13546,
+36515=>13547,
+37998=>13548,
+37997=>13549,
+37999=>13550,
+38001=>13551,
+38003=>13552,
+38729=>13553,
+39026=>13554,
+39263=>13555,
+40040=>13556,
+40046=>13557,
+40045=>13558,
+40459=>13559,
+40461=>13560,
+40464=>13561,
+40463=>13562,
+40466=>13563,
+40465=>13564,
+40609=>13565,
+40693=>13566,
+40713=>13567,
+40775=>13568,
+40824=>13569,
+40827=>13570,
+40826=>13571,
+40825=>13572,
+22302=>13573,
+28774=>13574,
+31855=>13575,
+34876=>13576,
+36274=>13577,
+36518=>13578,
+37315=>13579,
+38004=>13580,
+38008=>13581,
+38006=>13582,
+38005=>13583,
+39520=>13584,
+39726=>13585,
+60830=>13585,
+40052=>13586,
+40051=>13587,
+40049=>13588,
+40053=>13589,
+40468=>13590,
+40467=>13591,
+40694=>13592,
+40714=>13593,
+40868=>13594,
+28776=>13595,
+28773=>13596,
+31991=>13597,
+34410=>13598,
+34878=>13599,
+34877=>13600,
+34879=>13601,
+35742=>13602,
+35996=>13603,
+36521=>13604,
+36553=>13605,
+38731=>13606,
+39027=>13607,
+39028=>13608,
+39116=>13609,
+39265=>13610,
+39339=>13611,
+39524=>13612,
+39526=>13613,
+39527=>13614,
+39716=>13615,
+40469=>13616,
+40471=>13617,
+40776=>13618,
+25095=>13619,
+27422=>13620,
+29223=>13621,
+34380=>13622,
+36520=>13623,
+38018=>13624,
+38016=>13625,
+38017=>13626,
+39529=>13627,
+39528=>13628,
+40473=>13629,
+34379=>13630,
+35743=>13631,
+38019=>13632,
+40057=>13633,
+40631=>13634,
+30325=>13635,
+39531=>13636,
+40058=>13637,
+40477=>13638,
+28777=>13639,
+28778=>13640,
+29225=>13641,
+40612=>13642,
+40830=>13643,
+40777=>13644,
+40856=>13645,
+65049=>13646,
+65075=>13743,
+9588=>13744,
+65076=>13745,
+65103=>13746,
+168=>13747,
+776=>13747,
+63208=>13747,
+710=>13748,
+65342=>13748,
+63209=>13748,
+12541=>13749,
+63210=>13749,
+12542=>13750,
+63211=>13750,
+12445=>13751,
+63212=>13751,
+12446=>13752,
+63213=>13752,
+12293=>13754,
+63216=>13754,
+12294=>13755,
+63217=>13755,
+12295=>13756,
+63218=>13756,
+12540=>13757,
+63219=>13757,
+65339=>13758,
+63220=>13758,
+65341=>13759,
+63221=>13759,
+10045=>13760,
+63222=>13760,
+12353=>13761,
+63223=>13761,
+12354=>13762,
+63224=>13762,
+12355=>13763,
+63225=>13763,
+12356=>13764,
+63226=>13764,
+12357=>13765,
+63227=>13765,
+12358=>13766,
+63228=>13766,
+12359=>13767,
+63229=>13767,
+12360=>13768,
+63230=>13768,
+12361=>13769,
+63231=>13769,
+12362=>13770,
+63232=>13770,
+12363=>13771,
+63233=>13771,
+12364=>13772,
+63234=>13772,
+12365=>13773,
+63235=>13773,
+12366=>13774,
+63236=>13774,
+12367=>13775,
+63237=>13775,
+12368=>13776,
+63238=>13776,
+12369=>13777,
+63239=>13777,
+12370=>13778,
+63240=>13778,
+12371=>13779,
+63241=>13779,
+12372=>13780,
+63242=>13780,
+12373=>13781,
+63243=>13781,
+12374=>13782,
+63244=>13782,
+12375=>13783,
+63245=>13783,
+12376=>13784,
+63246=>13784,
+12377=>13785,
+63247=>13785,
+12378=>13786,
+63248=>13786,
+12379=>13787,
+63249=>13787,
+12380=>13788,
+63250=>13788,
+12381=>13789,
+63251=>13789,
+12382=>13790,
+63252=>13790,
+12383=>13791,
+63253=>13791,
+12384=>13792,
+63254=>13792,
+12385=>13793,
+63255=>13793,
+12386=>13794,
+63256=>13794,
+12387=>13795,
+63257=>13795,
+12388=>13796,
+63258=>13796,
+12389=>13797,
+63259=>13797,
+12390=>13798,
+63260=>13798,
+12391=>13799,
+63261=>13799,
+12392=>13800,
+63262=>13800,
+12393=>13801,
+63263=>13801,
+12394=>13802,
+63264=>13802,
+12395=>13803,
+63265=>13803,
+12396=>13804,
+63266=>13804,
+12397=>13805,
+63267=>13805,
+12398=>13806,
+63268=>13806,
+12399=>13807,
+63269=>13807,
+12400=>13808,
+63270=>13808,
+12401=>13809,
+63271=>13809,
+12402=>13810,
+63272=>13810,
+12403=>13811,
+63273=>13811,
+12404=>13812,
+63274=>13812,
+12405=>13813,
+63275=>13813,
+12406=>13814,
+63276=>13814,
+12407=>13815,
+63277=>13815,
+12408=>13816,
+63278=>13816,
+12409=>13817,
+63279=>13817,
+12410=>13818,
+63280=>13818,
+12411=>13819,
+63281=>13819,
+12412=>13820,
+63282=>13820,
+12413=>13821,
+63283=>13821,
+12414=>13822,
+63284=>13822,
+12415=>13823,
+63285=>13823,
+12416=>13824,
+63286=>13824,
+12417=>13825,
+63287=>13825,
+12418=>13826,
+63288=>13826,
+12419=>13827,
+63289=>13827,
+12420=>13828,
+63290=>13828,
+12421=>13829,
+63291=>13829,
+12422=>13830,
+63292=>13830,
+12423=>13831,
+63293=>13831,
+12424=>13832,
+63294=>13832,
+12425=>13833,
+63295=>13833,
+12426=>13834,
+63296=>13834,
+12427=>13835,
+63297=>13835,
+12428=>13836,
+63298=>13836,
+12429=>13837,
+63299=>13837,
+12430=>13838,
+63300=>13838,
+12431=>13839,
+63301=>13839,
+12432=>13840,
+63302=>13840,
+12433=>13841,
+63303=>13841,
+12434=>13842,
+63304=>13842,
+12435=>13843,
+63305=>13843,
+12449=>13844,
+63306=>13844,
+12450=>13845,
+63307=>13845,
+12451=>13846,
+63308=>13846,
+12452=>13847,
+63309=>13847,
+12453=>13848,
+63310=>13848,
+12454=>13849,
+63311=>13849,
+12455=>13850,
+63312=>13850,
+12456=>13851,
+63313=>13851,
+12457=>13852,
+63314=>13852,
+12458=>13853,
+63315=>13853,
+12459=>13854,
+63316=>13854,
+12460=>13855,
+63317=>13855,
+12461=>13856,
+63318=>13856,
+12462=>13857,
+63319=>13857,
+12463=>13858,
+63320=>13858,
+12464=>13859,
+63321=>13859,
+12465=>13860,
+63322=>13860,
+12466=>13861,
+63323=>13861,
+12467=>13862,
+63324=>13862,
+12468=>13863,
+63325=>13863,
+12469=>13864,
+63326=>13864,
+12470=>13865,
+63327=>13865,
+12471=>13866,
+63328=>13866,
+12472=>13867,
+63329=>13867,
+12473=>13868,
+63330=>13868,
+12474=>13869,
+63331=>13869,
+12475=>13870,
+63332=>13870,
+12476=>13871,
+63333=>13871,
+12477=>13872,
+63334=>13872,
+12478=>13873,
+63335=>13873,
+12479=>13874,
+63336=>13874,
+12480=>13875,
+63337=>13875,
+12481=>13876,
+63338=>13876,
+12482=>13877,
+63339=>13877,
+12483=>13878,
+63340=>13878,
+12484=>13879,
+63341=>13879,
+12485=>13880,
+63342=>13880,
+12486=>13881,
+63343=>13881,
+12487=>13882,
+63344=>13882,
+12488=>13883,
+63345=>13883,
+12489=>13884,
+63346=>13884,
+12490=>13885,
+63347=>13885,
+12491=>13886,
+63348=>13886,
+12492=>13887,
+63349=>13887,
+12493=>13888,
+63350=>13888,
+12494=>13889,
+63351=>13889,
+12495=>13890,
+63352=>13890,
+12496=>13891,
+63353=>13891,
+12497=>13892,
+63354=>13892,
+12498=>13893,
+63355=>13893,
+12499=>13894,
+63356=>13894,
+12500=>13895,
+63357=>13895,
+12501=>13896,
+63358=>13896,
+12502=>13897,
+63359=>13897,
+12503=>13898,
+63360=>13898,
+12504=>13899,
+63361=>13899,
+12505=>13900,
+63362=>13900,
+12506=>13901,
+63363=>13901,
+12507=>13902,
+63364=>13902,
+12508=>13903,
+63365=>13903,
+12509=>13904,
+63366=>13904,
+12510=>13905,
+63367=>13905,
+12511=>13906,
+63368=>13906,
+12512=>13907,
+63369=>13907,
+12513=>13908,
+63370=>13908,
+12514=>13909,
+63371=>13909,
+12515=>13910,
+63372=>13910,
+12516=>13911,
+63373=>13911,
+12517=>13912,
+63374=>13912,
+12518=>13913,
+63375=>13913,
+12519=>13914,
+63376=>13914,
+12520=>13915,
+63377=>13915,
+12521=>13916,
+63378=>13916,
+12522=>13917,
+63379=>13917,
+12523=>13918,
+63380=>13918,
+12524=>13919,
+63381=>13919,
+12525=>13920,
+63382=>13920,
+12526=>13921,
+63383=>13921,
+12527=>13922,
+63384=>13922,
+12528=>13923,
+63385=>13923,
+12529=>13924,
+63386=>13924,
+12530=>13925,
+63387=>13925,
+12531=>13926,
+63388=>13926,
+12532=>13927,
+63389=>13927,
+12533=>13928,
+63390=>13928,
+12534=>13929,
+63391=>13929,
+1040=>13930,
+63392=>13930,
+1041=>13931,
+63393=>13931,
+1042=>13932,
+63394=>13932,
+1043=>13933,
+63395=>13933,
+1044=>13934,
+63396=>13934,
+1045=>13935,
+63397=>13935,
+1025=>13936,
+63398=>13936,
+1046=>13937,
+63399=>13937,
+1047=>13938,
+63400=>13938,
+1048=>13939,
+63401=>13939,
+1049=>13940,
+63402=>13940,
+1050=>13941,
+63403=>13941,
+1051=>13942,
+63404=>13942,
+1052=>13943,
+63405=>13943,
+1053=>13944,
+63406=>13944,
+1054=>13945,
+63407=>13945,
+1055=>13946,
+63408=>13946,
+1056=>13947,
+63409=>13947,
+1057=>13948,
+63410=>13948,
+1058=>13949,
+63411=>13949,
+1059=>13950,
+63412=>13950,
+1060=>13951,
+63413=>13951,
+1061=>13952,
+63414=>13952,
+1062=>13953,
+63415=>13953,
+1063=>13954,
+63416=>13954,
+1064=>13955,
+63417=>13955,
+1065=>13956,
+63418=>13956,
+1066=>13957,
+63419=>13957,
+1067=>13958,
+63420=>13958,
+1068=>13959,
+63421=>13959,
+1069=>13960,
+63422=>13960,
+1070=>13961,
+63423=>13961,
+1071=>13962,
+63424=>13962,
+1072=>13963,
+63425=>13963,
+1073=>13964,
+63426=>13964,
+1074=>13965,
+63427=>13965,
+1075=>13966,
+63428=>13966,
+1076=>13967,
+63429=>13967,
+1077=>13968,
+63430=>13968,
+1105=>13969,
+63431=>13969,
+1078=>13970,
+63432=>13970,
+1079=>13971,
+63433=>13971,
+1080=>13972,
+63434=>13972,
+1081=>13973,
+63435=>13973,
+1082=>13974,
+63436=>13974,
+1083=>13975,
+63437=>13975,
+1084=>13976,
+63438=>13976,
+1085=>13977,
+63439=>13977,
+1086=>13978,
+63440=>13978,
+1087=>13979,
+63441=>13979,
+1088=>13980,
+63442=>13980,
+1089=>13981,
+63443=>13981,
+1090=>13982,
+63444=>13982,
+1091=>13983,
+63445=>13983,
+1092=>13984,
+63446=>13984,
+1093=>13985,
+63447=>13985,
+1094=>13986,
+63448=>13986,
+1095=>13987,
+63449=>13987,
+1096=>13988,
+63450=>13988,
+1097=>13989,
+63451=>13989,
+1098=>13990,
+63452=>13990,
+1099=>13991,
+63453=>13991,
+1100=>13992,
+63454=>13992,
+1101=>13993,
+63455=>13993,
+1102=>13994,
+63456=>13994,
+1103=>13995,
+63457=>13995,
+8679=>13996,
+63458=>13996,
+8632=>13997,
+63459=>13997,
+8633=>13998,
+63460=>13998,
+12751=>13999,
+20033=>13999,
+63461=>13999,
+131276=>14000,
+63462=>14000,
+20058=>14001,
+63463=>14001,
+131210=>14002,
+63464=>14002,
+20994=>14003,
+63465=>14003,
+17553=>14004,
+63466=>14004,
+40880=>14005,
+63467=>14005,
+20872=>14006,
+63468=>14006,
+13853=>14007,
+40881=>14007,
+63469=>14007,
+161287=>14008,
+63470=>14008,
+172=>14049,
+65506=>14049,
+63511=>14049,
+65508=>14050,
+63512=>14050,
+65287=>14051,
+63513=>14051,
+65282=>14052,
+63514=>14052,
+12849=>14053,
+63515=>14053,
+8470=>14054,
+63516=>14054,
+8481=>14055,
+63517=>14055,
+30849=>14056,
+37561=>14057,
+58501=>14057,
+35023=>14058,
+22715=>14059,
+24658=>14060,
+31911=>14061,
+23290=>14062,
+9556=>14063,
+9574=>14064,
+9559=>14065,
+9568=>14066,
+9580=>14067,
+9571=>14068,
+9562=>14069,
+9577=>14070,
+9565=>14071,
+9554=>14072,
+9572=>14073,
+9557=>14074,
+9560=>14078,
+9575=>14079,
+9563=>14080,
+9555=>14081,
+9573=>14082,
+9558=>14083,
+9567=>14084,
+9579=>14085,
+9570=>14086,
+9561=>14087,
+9576=>14088,
+9564=>14089,
+9553=>14090,
+9619=>14096,
+65517=>14096,
+65040=>14099,
+65041=>14100,
+65042=>14101,
+65044=>14103,
+65043=>14104,
+65046=>14105,
+65045=>14106,
+147159=>14123,
+58129=>14123,
+22462=>14124,
+58130=>14124,
+159443=>14125,
+58131=>14125,
+28990=>14126,
+58132=>14126,
+153568=>14127,
+58133=>14127,
+27042=>14128,
+58135=>14128,
+166889=>14129,
+58136=>14129,
+23412=>14130,
+58137=>14130,
+31305=>14131,
+58138=>14131,
+153825=>14132,
+58139=>14132,
+169177=>14133,
+58140=>14133,
+31333=>14134,
+58141=>14134,
+31357=>14135,
+58142=>14135,
+154028=>14136,
+58143=>14136,
+31419=>14137,
+58144=>14137,
+31408=>14138,
+58145=>14138,
+31426=>14139,
+58146=>14139,
+31427=>14140,
+58147=>14140,
+29137=>14141,
+58148=>14141,
+156813=>14142,
+58149=>14142,
+16842=>14143,
+58150=>14143,
+31450=>14144,
+58151=>14144,
+31453=>14145,
+58152=>14145,
+31466=>14146,
+58153=>14146,
+16879=>14147,
+58154=>14147,
+21682=>14148,
+58155=>14148,
+154625=>14149,
+58156=>14149,
+31499=>14150,
+58157=>14150,
+31573=>14151,
+58158=>14151,
+31529=>14152,
+58159=>14152,
+152334=>14153,
+58160=>14153,
+154878=>14154,
+58161=>14154,
+31650=>14155,
+58162=>14155,
+31599=>14156,
+58163=>14156,
+33692=>14157,
+58164=>14157,
+154548=>14158,
+58165=>14158,
+158847=>14159,
+58166=>14159,
+31696=>14160,
+58167=>14160,
+33825=>14161,
+58168=>14161,
+31634=>14162,
+58169=>14162,
+58171=>14164,
+154912=>14164,
+33938=>14166,
+58174=>14166,
+31738=>14167,
+58175=>14167,
+31797=>14169,
+58177=>14169,
+154817=>14170,
+58178=>14170,
+31812=>14171,
+58179=>14171,
+31875=>14172,
+58180=>14172,
+149634=>14173,
+58181=>14173,
+31910=>14174,
+58182=>14174,
+148856=>14175,
+58184=>14175,
+31945=>14176,
+58185=>14176,
+31943=>14177,
+58186=>14177,
+31974=>14178,
+58187=>14178,
+31987=>14180,
+58189=>14180,
+31989=>14181,
+58190=>14181,
+32359=>14182,
+58192=>14182,
+17693=>14183,
+58193=>14183,
+159300=>14184,
+58194=>14184,
+32093=>14185,
+58195=>14185,
+159446=>14186,
+58196=>14186,
+32137=>14187,
+58198=>14187,
+32171=>14188,
+58199=>14188,
+28981=>14189,
+58200=>14189,
+32179=>14190,
+58201=>14190,
+32214=>14191,
+147543=>14192,
+58203=>14192,
+155689=>14193,
+58204=>14193,
+32228=>14194,
+58205=>14194,
+15635=>14195,
+58206=>14195,
+32245=>14196,
+58207=>14196,
+137209=>14197,
+58208=>14197,
+32229=>14198,
+58209=>14198,
+164717=>14199,
+58210=>14199,
+155937=>14201,
+58212=>14201,
+155994=>14202,
+58213=>14202,
+32366=>14203,
+58214=>14203,
+17195=>14205,
+58216=>14205,
+37996=>14206,
+58217=>14206,
+32295=>14207,
+58218=>14207,
+32576=>14208,
+58219=>14208,
+32577=>14209,
+58220=>14209,
+32583=>14210,
+58221=>14210,
+31030=>14211,
+58222=>14211,
+156368=>14212,
+58223=>14212,
+39393=>14213,
+58224=>14213,
+32663=>14214,
+58225=>14214,
+156497=>14215,
+58226=>14215,
+32675=>14216,
+58227=>14216,
+136801=>14217,
+58228=>14217,
+131176=>14218,
+58229=>14218,
+17756=>14219,
+58230=>14219,
+145254=>14220,
+58231=>14220,
+164666=>14221,
+58233=>14221,
+32762=>14222,
+58234=>14222,
+156809=>14223,
+58235=>14223,
+64091=>14224,
+32776=>14225,
+58237=>14225,
+32797=>14226,
+58238=>14226,
+32815=>14228,
+58240=>14228,
+172167=>14229,
+58241=>14229,
+158915=>14230,
+58242=>14230,
+32827=>14231,
+58243=>14231,
+32828=>14232,
+58244=>14232,
+32865=>14233,
+58245=>14233,
+141076=>14234,
+58246=>14234,
+18825=>14235,
+58247=>14235,
+157222=>14236,
+58248=>14236,
+146915=>14237,
+58249=>14237,
+157416=>14238,
+58250=>14238,
+26405=>14239,
+58251=>14239,
+32935=>14240,
+58252=>14240,
+166472=>14241,
+58253=>14241,
+33031=>14242,
+58254=>14242,
+33050=>14243,
+58255=>14243,
+22704=>14244,
+58256=>14244,
+141046=>14245,
+58257=>14245,
+27775=>14246,
+58258=>14246,
+156824=>14247,
+58259=>14247,
+25831=>14248,
+58261=>14248,
+136330=>14249,
+58262=>14249,
+33304=>14250,
+58263=>14250,
+137310=>14251,
+58264=>14251,
+27219=>14252,
+58265=>14252,
+150117=>14253,
+58266=>14253,
+150165=>14254,
+58267=>14254,
+17530=>14255,
+58268=>14255,
+33321=>14256,
+58269=>14256,
+158290=>14257,
+58271=>14257,
+146814=>14258,
+58272=>14258,
+20473=>14259,
+58273=>14259,
+136445=>14260,
+58274=>14260,
+34018=>14261,
+58275=>14261,
+33634=>14262,
+58276=>14262,
+194959=>14263,
+149927=>14264,
+58278=>14264,
+144688=>14265,
+58279=>14265,
+137075=>14266,
+58280=>14266,
+146936=>14267,
+58281=>14267,
+33450=>14268,
+58282=>14268,
+26907=>14269,
+58283=>14269,
+194964=>14270,
+58284=>14270,
+16859=>14271,
+58285=>14271,
+34123=>14272,
+58286=>14272,
+33488=>14273,
+58287=>14273,
+33562=>14274,
+58288=>14274,
+134678=>14275,
+58289=>14275,
+137140=>14276,
+58290=>14276,
+14017=>14277,
+58291=>14277,
+143741=>14278,
+58292=>14278,
+144730=>14279,
+58293=>14279,
+33403=>14280,
+58294=>14280,
+33506=>14281,
+58295=>14281,
+33560=>14282,
+58296=>14282,
+147083=>14283,
+58297=>14283,
+159139=>14284,
+58298=>14284,
+158469=>14285,
+58299=>14285,
+158615=>14286,
+58300=>14286,
+144846=>14287,
+58301=>14287,
+15807=>14288,
+58302=>14288,
+33565=>14289,
+58303=>14289,
+21996=>14290,
+58304=>14290,
+33669=>14291,
+58305=>14291,
+17675=>14292,
+58306=>14292,
+159141=>14293,
+58307=>14293,
+33708=>14294,
+58308=>14294,
+33747=>14296,
+58310=>14296,
+159444=>14297,
+58312=>14297,
+27223=>14298,
+58313=>14298,
+34138=>14299,
+58314=>14299,
+13462=>14300,
+58315=>14300,
+159298=>14301,
+58316=>14301,
+33880=>14302,
+58318=>14302,
+154596=>14303,
+58319=>14303,
+33905=>14304,
+58320=>14304,
+15827=>14305,
+58321=>14305,
+17636=>14306,
+58322=>14306,
+27303=>14307,
+58323=>14307,
+33866=>14308,
+58324=>14308,
+31064=>14309,
+58326=>14309,
+158614=>14311,
+58328=>14311,
+159351=>14312,
+58329=>14312,
+159299=>14313,
+58330=>14313,
+34014=>14314,
+58331=>14314,
+33681=>14316,
+58333=>14316,
+17568=>14317,
+58334=>14317,
+33939=>14318,
+58335=>14318,
+34020=>14319,
+58336=>14319,
+154769=>14320,
+58337=>14320,
+16960=>14321,
+58338=>14321,
+154816=>14322,
+58339=>14322,
+17731=>14323,
+58340=>14323,
+34100=>14324,
+58341=>14324,
+23282=>14325,
+58342=>14325,
+17699=>14326,
+17703=>14327,
+58344=>14327,
+34163=>14328,
+58345=>14328,
+17686=>14329,
+58346=>14329,
+26559=>14330,
+58347=>14330,
+34326=>14331,
+58348=>14331,
+165413=>14332,
+58349=>14332,
+165435=>14333,
+58350=>14333,
+34241=>14334,
+58351=>14334,
+159880=>14335,
+58352=>14335,
+34306=>14336,
+58353=>14336,
+136578=>14337,
+58354=>14337,
+159949=>14338,
+58355=>14338,
+194994=>14339,
+58356=>14339,
+17770=>14340,
+58357=>14340,
+34344=>14341,
+58358=>14341,
+13896=>14342,
+58359=>14342,
+137378=>14343,
+58360=>14343,
+21495=>14344,
+58361=>14344,
+160666=>14345,
+58362=>14345,
+34430=>14346,
+58363=>14346,
+172280=>14348,
+58365=>14348,
+34798=>14349,
+58366=>14349,
+142375=>14350,
+58367=>14350,
+34737=>14351,
+58368=>14351,
+34778=>14352,
+58369=>14352,
+34831=>14353,
+60990=>14353,
+58370=>14353,
+22113=>14354,
+58371=>14354,
+34412=>14355,
+58372=>14355,
+26710=>14356,
+58373=>14356,
+17935=>14357,
+58374=>14357,
+34885=>14358,
+58375=>14358,
+34886=>14359,
+58376=>14359,
+161248=>14360,
+58377=>14360,
+146873=>14361,
+58378=>14361,
+161252=>14362,
+58379=>14362,
+34910=>14363,
+58380=>14363,
+34972=>14364,
+58381=>14364,
+18011=>14365,
+58382=>14365,
+34996=>14366,
+58383=>14366,
+34997=>14367,
+58384=>14367,
+35013=>14368,
+58386=>14368,
+161551=>14369,
+58388=>14369,
+35207=>14370,
+58389=>14370,
+35239=>14374,
+58393=>14374,
+35260=>14375,
+58394=>14375,
+166437=>14376,
+58395=>14376,
+35303=>14377,
+58396=>14377,
+162084=>14378,
+58397=>14378,
+162493=>14379,
+58398=>14379,
+35484=>14380,
+58399=>14380,
+30611=>14381,
+58400=>14381,
+37374=>14382,
+58401=>14382,
+35472=>14383,
+58402=>14383,
+162393=>14384,
+58403=>14384,
+31465=>14385,
+58404=>14385,
+162618=>14386,
+58405=>14386,
+18195=>14387,
+58407=>14387,
+162616=>14388,
+58408=>14388,
+29052=>14389,
+58409=>14389,
+35596=>14390,
+58410=>14390,
+35615=>14391,
+58411=>14391,
+152624=>14392,
+58412=>14392,
+152933=>14393,
+58413=>14393,
+35647=>14394,
+58414=>14394,
+35661=>14396,
+58416=>14396,
+35497=>14397,
+58417=>14397,
+150138=>14398,
+58418=>14398,
+35728=>14399,
+58419=>14399,
+35739=>14400,
+58420=>14400,
+35503=>14401,
+58421=>14401,
+136927=>14402,
+58422=>14402,
+17941=>14403,
+58423=>14403,
+34895=>14404,
+58424=>14404,
+35995=>14405,
+58425=>14405,
+163156=>14406,
+58426=>14406,
+163215=>14407,
+58427=>14407,
+195028=>14408,
+58428=>14408,
+14117=>14409,
+58429=>14409,
+163155=>14410,
+58430=>14410,
+36054=>14411,
+58431=>14411,
+163224=>14412,
+58432=>14412,
+163261=>14413,
+58433=>14413,
+36114=>14414,
+58434=>14414,
+36099=>14415,
+58435=>14415,
+137488=>14416,
+58436=>14416,
+36059=>14417,
+58437=>14417,
+28764=>14418,
+58438=>14418,
+36113=>14419,
+58439=>14419,
+16080=>14420,
+58441=>14420,
+195031=>14421,
+36265=>14422,
+58443=>14422,
+163842=>14423,
+58444=>14423,
+135188=>14424,
+58445=>14424,
+149898=>14425,
+58446=>14425,
+15228=>14426,
+58447=>14426,
+164284=>14427,
+58448=>14427,
+160012=>14428,
+58449=>14428,
+31463=>14429,
+58450=>14429,
+36525=>14430,
+58451=>14430,
+36534=>14431,
+58452=>14431,
+36547=>14432,
+58453=>14432,
+37588=>14433,
+58454=>14433,
+36633=>14434,
+58455=>14434,
+36653=>14435,
+58456=>14435,
+164709=>14436,
+58457=>14436,
+164882=>14437,
+58458=>14437,
+36773=>14438,
+58459=>14438,
+37635=>14439,
+58460=>14439,
+172703=>14440,
+58461=>14440,
+133712=>14441,
+58462=>14441,
+36787=>14442,
+58463=>14442,
+166366=>14444,
+58465=>14444,
+165181=>14445,
+58466=>14445,
+146875=>14446,
+58467=>14446,
+24312=>14447,
+58468=>14447,
+143970=>14448,
+58469=>14448,
+36857=>14449,
+58470=>14449,
+140069=>14451,
+58474=>14451,
+14720=>14452,
+58475=>14452,
+159447=>14453,
+58476=>14453,
+36919=>14454,
+58477=>14454,
+165180=>14455,
+58478=>14455,
+162494=>14456,
+58479=>14456,
+36961=>14457,
+58480=>14457,
+165228=>14458,
+58481=>14458,
+165387=>14459,
+58482=>14459,
+37032=>14460,
+58483=>14460,
+165651=>14461,
+58484=>14461,
+37060=>14462,
+58485=>14462,
+165606=>14463,
+58486=>14463,
+37038=>14464,
+58487=>14464,
+64038=>14465,
+37223=>14466,
+58489=>14466,
+37289=>14467,
+58491=>14467,
+37316=>14468,
+58492=>14468,
+31916=>14469,
+58493=>14469,
+166195=>14470,
+58494=>14470,
+138889=>14471,
+58495=>14471,
+37390=>14472,
+58496=>14472,
+27807=>14473,
+58497=>14473,
+37441=>14474,
+58498=>14474,
+37474=>14475,
+58499=>14475,
+153017=>14476,
+58500=>14476,
+166598=>14477,
+58502=>14477,
+146587=>14478,
+58503=>14478,
+166668=>14479,
+58504=>14479,
+153051=>14480,
+58505=>14480,
+134449=>14481,
+58506=>14481,
+37676=>14482,
+58507=>14482,
+37739=>14483,
+58508=>14483,
+166625=>14484,
+58509=>14484,
+166891=>14485,
+58510=>14485,
+23235=>14486,
+58512=>14486,
+166626=>14487,
+58513=>14487,
+166629=>14488,
+58514=>14488,
+18789=>14489,
+58515=>14489,
+37444=>14490,
+58516=>14490,
+166892=>14491,
+58517=>14491,
+166969=>14492,
+58518=>14492,
+166911=>14493,
+58519=>14493,
+37747=>14494,
+58520=>14494,
+37979=>14495,
+58521=>14495,
+36540=>14496,
+58522=>14496,
+38277=>14497,
+58523=>14497,
+38310=>14498,
+58524=>14498,
+37926=>14499,
+58525=>14499,
+38304=>14500,
+58526=>14500,
+28662=>14501,
+58527=>14501,
+17081=>14502,
+58528=>14502,
+165592=>14503,
+58530=>14503,
+135804=>14504,
+58531=>14504,
+146990=>14505,
+58532=>14505,
+18911=>14506,
+58533=>14506,
+27676=>14507,
+58534=>14507,
+38523=>14508,
+58535=>14508,
+38550=>14509,
+58536=>14509,
+16748=>14510,
+58537=>14510,
+38563=>14511,
+58538=>14511,
+159445=>14512,
+58539=>14512,
+25050=>14513,
+58540=>14513,
+58541=>14514,
+30965=>14515,
+58542=>14515,
+166624=>14516,
+58543=>14516,
+38589=>14517,
+58544=>14517,
+21452=>14518,
+58545=>14518,
+18849=>14519,
+58546=>14519,
+158904=>14520,
+58547=>14520,
+131700=>14521,
+58548=>14521,
+156688=>14522,
+58549=>14522,
+168111=>14523,
+58550=>14523,
+168165=>14524,
+58551=>14524,
+150225=>14525,
+58552=>14525,
+137493=>14526,
+58553=>14526,
+144138=>14527,
+58554=>14527,
+38705=>14528,
+58555=>14528,
+34370=>14529,
+58556=>14529,
+38710=>14530,
+58557=>14530,
+18959=>14531,
+58558=>14531,
+17725=>14532,
+58559=>14532,
+17797=>14533,
+58560=>14533,
+150249=>14534,
+58561=>14534,
+28789=>14535,
+58562=>14535,
+23361=>14536,
+58563=>14536,
+38683=>14537,
+58564=>14537,
+168405=>14539,
+58566=>14539,
+38743=>14540,
+58567=>14540,
+23370=>14541,
+58568=>14541,
+168427=>14542,
+58569=>14542,
+38751=>14543,
+58570=>14543,
+37925=>14544,
+58571=>14544,
+20688=>14545,
+58572=>14545,
+143543=>14546,
+58573=>14546,
+143548=>14547,
+58574=>14547,
+38793=>14548,
+58575=>14548,
+38815=>14549,
+58576=>14549,
+38833=>14550,
+58577=>14550,
+38846=>14551,
+58578=>14551,
+38848=>14552,
+58579=>14552,
+38866=>14553,
+58580=>14553,
+38880=>14554,
+58581=>14554,
+152684=>14555,
+58582=>14555,
+38894=>14556,
+58583=>14556,
+29724=>14557,
+58584=>14557,
+169011=>14558,
+58585=>14558,
+38901=>14560,
+58587=>14560,
+168989=>14561,
+58588=>14561,
+162170=>14562,
+58589=>14562,
+19153=>14563,
+58590=>14563,
+38964=>14564,
+58591=>14564,
+38963=>14565,
+58592=>14565,
+38987=>14566,
+58593=>14566,
+39014=>14567,
+58594=>14567,
+15118=>14568,
+58595=>14568,
+160117=>14569,
+58596=>14569,
+15697=>14570,
+58597=>14570,
+132656=>14571,
+58598=>14571,
+147804=>14572,
+58599=>14572,
+153350=>14573,
+58600=>14573,
+39114=>14574,
+58601=>14574,
+39095=>14575,
+58602=>14575,
+39112=>14576,
+58603=>14576,
+39111=>14577,
+58604=>14577,
+19199=>14578,
+58605=>14578,
+159015=>14579,
+58606=>14579,
+136915=>14580,
+58607=>14580,
+21936=>14581,
+58608=>14581,
+39137=>14582,
+58609=>14582,
+39142=>14583,
+58610=>14583,
+39148=>14584,
+58611=>14584,
+37752=>14585,
+58612=>14585,
+39225=>14586,
+58613=>14586,
+150057=>14587,
+58614=>14587,
+19314=>14588,
+58615=>14588,
+170071=>14589,
+58616=>14589,
+170245=>14590,
+58617=>14590,
+39413=>14591,
+58618=>14591,
+39436=>14592,
+58619=>14592,
+39483=>14593,
+58620=>14593,
+39440=>14594,
+58621=>14594,
+39512=>14595,
+58622=>14595,
+153381=>14596,
+58623=>14596,
+14020=>14597,
+58624=>14597,
+168113=>14598,
+58625=>14598,
+170965=>14599,
+58626=>14599,
+39648=>14600,
+58627=>14600,
+39650=>14601,
+58628=>14601,
+170757=>14602,
+58629=>14602,
+39668=>14603,
+58630=>14603,
+19470=>14604,
+58631=>14604,
+39700=>14605,
+58632=>14605,
+39725=>14606,
+58633=>14606,
+165376=>14607,
+58634=>14607,
+20532=>14608,
+58635=>14608,
+39732=>14609,
+58636=>14609,
+14531=>14610,
+58638=>14610,
+143485=>14611,
+58639=>14611,
+39760=>14612,
+58640=>14612,
+39744=>14613,
+58641=>14613,
+171326=>14614,
+58642=>14614,
+23109=>14615,
+58643=>14615,
+137315=>14616,
+58644=>14616,
+39822=>14617,
+58645=>14617,
+39938=>14618,
+58647=>14618,
+39935=>14619,
+58648=>14619,
+39948=>14620,
+58649=>14620,
+171624=>14621,
+58650=>14621,
+40404=>14622,
+58651=>14622,
+171959=>14623,
+58652=>14623,
+172434=>14624,
+58653=>14624,
+172459=>14625,
+58654=>14625,
+172257=>14626,
+58655=>14626,
+172323=>14627,
+58656=>14627,
+172511=>14628,
+58657=>14628,
+40318=>14629,
+58658=>14629,
+40323=>14630,
+58659=>14630,
+172340=>14631,
+58660=>14631,
+40462=>14632,
+58661=>14632,
+40388=>14633,
+58663=>14633,
+172435=>14634,
+58665=>14634,
+172576=>14635,
+58666=>14635,
+137531=>14636,
+58667=>14636,
+172595=>14637,
+58668=>14637,
+40249=>14638,
+58669=>14638,
+172217=>14639,
+58670=>14639,
+172724=>14640,
+58671=>14640,
+40592=>14641,
+58672=>14641,
+40597=>14642,
+58673=>14642,
+40606=>14643,
+58674=>14643,
+40610=>14644,
+58675=>14644,
+19764=>14645,
+58676=>14645,
+40618=>14646,
+58677=>14646,
+40623=>14647,
+58678=>14647,
+148324=>14648,
+58679=>14648,
+40641=>14649,
+58680=>14649,
+15200=>14650,
+58681=>14650,
+14821=>14651,
+58682=>14651,
+15645=>14652,
+58683=>14652,
+20274=>14653,
+58684=>14653,
+14270=>14654,
+58685=>14654,
+166955=>14655,
+58686=>14655,
+40706=>14656,
+58687=>14656,
+40712=>14657,
+58688=>14657,
+19350=>14658,
+58689=>14658,
+37924=>14659,
+58690=>14659,
+159138=>14660,
+58691=>14660,
+40727=>14661,
+60836=>14661,
+58692=>14661,
+195099=>14662,
+40761=>14663,
+58694=>14663,
+22175=>14664,
+58695=>14664,
+22154=>14665,
+58696=>14665,
+40773=>14666,
+58697=>14666,
+39352=>14667,
+58698=>14667,
+168075=>14668,
+58699=>14668,
+38898=>14669,
+58700=>14669,
+33919=>14670,
+58701=>14670,
+40809=>14672,
+58703=>14672,
+31452=>14673,
+58704=>14673,
+40846=>14674,
+58705=>14674,
+29206=>14675,
+58706=>14675,
+19390=>14676,
+58707=>14676,
+149877=>14677,
+58708=>14677,
+149947=>14678,
+58709=>14678,
+29047=>14679,
+58710=>14679,
+150008=>14680,
+58711=>14680,
+148296=>14681,
+58712=>14681,
+150097=>14682,
+58713=>14682,
+29598=>14683,
+58714=>14683,
+166874=>14684,
+58715=>14684,
+137466=>14685,
+58716=>14685,
+31135=>14686,
+58717=>14686,
+166270=>14687,
+58718=>14687,
+167478=>14688,
+58719=>14688,
+37737=>14689,
+58720=>14689,
+37875=>14690,
+58721=>14690,
+166468=>14691,
+58722=>14691,
+37612=>14692,
+58723=>14692,
+37761=>14693,
+58724=>14693,
+37835=>14694,
+58725=>14694,
+166252=>14695,
+58726=>14695,
+148665=>14696,
+58727=>14696,
+29207=>14697,
+58728=>14697,
+16107=>14698,
+58729=>14698,
+30578=>14699,
+58730=>14699,
+31299=>14700,
+58731=>14700,
+28880=>14701,
+58732=>14701,
+148595=>14702,
+58733=>14702,
+148472=>14703,
+58734=>14703,
+29054=>14704,
+58735=>14704,
+137199=>14705,
+58736=>14705,
+28835=>14706,
+58737=>14706,
+137406=>14707,
+58738=>14707,
+144793=>14708,
+58739=>14708,
+16071=>14709,
+58740=>14709,
+137349=>14710,
+58741=>14710,
+152623=>14711,
+58742=>14711,
+137208=>14712,
+58743=>14712,
+14114=>14713,
+58744=>14713,
+136955=>14714,
+58745=>14714,
+137273=>14715,
+58746=>14715,
+14049=>14716,
+58747=>14716,
+137076=>14717,
+58748=>14717,
+137425=>14718,
+58749=>14718,
+155467=>14719,
+58750=>14719,
+14115=>14720,
+58751=>14720,
+136896=>14721,
+58752=>14721,
+22363=>14722,
+58753=>14722,
+150053=>14723,
+58754=>14723,
+136190=>14724,
+58755=>14724,
+135848=>14725,
+58756=>14725,
+136134=>14726,
+58757=>14726,
+136374=>14727,
+58758=>14727,
+34051=>14728,
+58761=>14728,
+58759=>14728,
+145062=>14729,
+58760=>14729,
+33877=>14731,
+58762=>14731,
+149908=>14732,
+58763=>14732,
+160101=>14733,
+58764=>14733,
+146993=>14734,
+58765=>14734,
+152924=>14735,
+58766=>14735,
+147195=>14736,
+58767=>14736,
+159826=>14737,
+58768=>14737,
+17652=>14738,
+58769=>14738,
+145134=>14739,
+58770=>14739,
+170397=>14740,
+58771=>14740,
+159526=>14741,
+58772=>14741,
+26617=>14742,
+58773=>14742,
+14131=>14743,
+58774=>14743,
+15381=>14744,
+58775=>14744,
+15847=>14745,
+58776=>14745,
+22636=>14746,
+58777=>14746,
+137506=>14747,
+58778=>14747,
+26640=>14748,
+58779=>14748,
+16471=>14749,
+58780=>14749,
+145215=>14750,
+58781=>14750,
+147681=>14751,
+58782=>14751,
+147595=>14752,
+58783=>14752,
+147727=>14753,
+58784=>14753,
+158753=>14754,
+58785=>14754,
+21707=>14755,
+58786=>14755,
+22174=>14756,
+58787=>14756,
+157361=>14757,
+58788=>14757,
+22162=>14758,
+58789=>14758,
+135135=>14759,
+58790=>14759,
+134056=>14760,
+58791=>14760,
+134669=>14761,
+58792=>14761,
+166675=>14763,
+58794=>14763,
+37788=>14764,
+58795=>14764,
+20216=>14765,
+58796=>14765,
+20779=>14766,
+58797=>14766,
+14361=>14767,
+58798=>14767,
+148534=>14768,
+58799=>14768,
+20156=>14769,
+58800=>14769,
+132197=>14770,
+58801=>14770,
+20299=>14772,
+58803=>14772,
+20362=>14773,
+58804=>14773,
+153169=>14774,
+58805=>14774,
+23144=>14775,
+58806=>14775,
+131499=>14776,
+58807=>14776,
+132043=>14777,
+58808=>14777,
+14745=>14778,
+58809=>14778,
+131850=>14779,
+58810=>14779,
+132116=>14780,
+58811=>14780,
+13365=>14781,
+58812=>14781,
+20265=>14782,
+58813=>14782,
+131776=>14783,
+58814=>14783,
+167603=>14784,
+58815=>14784,
+131701=>14785,
+58816=>14785,
+35546=>14786,
+58817=>14786,
+131596=>14787,
+58818=>14787,
+20120=>14788,
+58819=>14788,
+20685=>14789,
+58820=>14789,
+20749=>14790,
+58821=>14790,
+20386=>14791,
+58822=>14791,
+20227=>14792,
+58823=>14792,
+150030=>14793,
+58824=>14793,
+147082=>14794,
+58825=>14794,
+20290=>14795,
+58826=>14795,
+20526=>14796,
+58827=>14796,
+20588=>14797,
+58828=>14797,
+20609=>14798,
+58829=>14798,
+20428=>14799,
+58830=>14799,
+20453=>14800,
+58831=>14800,
+20568=>14801,
+58832=>14801,
+20732=>14802,
+58833=>14802,
+28278=>14803,
+58838=>14803,
+144789=>14804,
+58839=>14804,
+147001=>14805,
+58840=>14805,
+147135=>14806,
+58841=>14806,
+28018=>14807,
+58842=>14807,
+137348=>14808,
+58843=>14808,
+147081=>14809,
+58844=>14809,
+20904=>14810,
+58845=>14810,
+20931=>14811,
+58846=>14811,
+132576=>14812,
+58847=>14812,
+17629=>14813,
+58848=>14813,
+132259=>14814,
+58849=>14814,
+132242=>14815,
+58850=>14815,
+132241=>14816,
+58851=>14816,
+36218=>14817,
+58852=>14817,
+166556=>14818,
+58853=>14818,
+132878=>14819,
+58854=>14819,
+21081=>14820,
+58855=>14820,
+21156=>14821,
+58856=>14821,
+133235=>14822,
+58857=>14822,
+21217=>14823,
+58858=>14823,
+18042=>14825,
+58860=>14825,
+29068=>14826,
+58861=>14826,
+148364=>14827,
+58862=>14827,
+134176=>14828,
+58863=>14828,
+149932=>14829,
+58864=>14829,
+135396=>14830,
+58865=>14830,
+27089=>14831,
+58866=>14831,
+134685=>14832,
+58867=>14832,
+16094=>14834,
+58869=>14834,
+29849=>14835,
+58870=>14835,
+29716=>14836,
+58871=>14836,
+29782=>14837,
+58872=>14837,
+29592=>14838,
+58873=>14838,
+19342=>14839,
+58874=>14839,
+150204=>14840,
+58875=>14840,
+147597=>14841,
+58876=>14841,
+21456=>14842,
+58877=>14842,
+13700=>14843,
+58878=>14843,
+29199=>14844,
+58879=>14844,
+147657=>14845,
+58880=>14845,
+21940=>14846,
+58881=>14846,
+131909=>14847,
+58882=>14847,
+21709=>14848,
+58883=>14848,
+134086=>14849,
+58884=>14849,
+22301=>14850,
+58885=>14850,
+37469=>14851,
+58886=>14851,
+38644=>14852,
+58887=>14852,
+22493=>14853,
+58889=>14853,
+22413=>14854,
+58890=>14854,
+22399=>14855,
+58891=>14855,
+13886=>14856,
+58892=>14856,
+22731=>14857,
+58893=>14857,
+23193=>14858,
+58894=>14858,
+166470=>14859,
+58895=>14859,
+136954=>14860,
+58896=>14860,
+137071=>14861,
+58897=>14861,
+136976=>14862,
+58898=>14862,
+23084=>14863,
+58899=>14863,
+22968=>14864,
+58900=>14864,
+23166=>14865,
+58902=>14865,
+23247=>14866,
+58903=>14866,
+23058=>14867,
+58904=>14867,
+153926=>14868,
+58905=>14868,
+137715=>14869,
+58906=>14869,
+137313=>14870,
+58907=>14870,
+148117=>14871,
+58908=>14871,
+14069=>14872,
+58909=>14872,
+27909=>14873,
+58910=>14873,
+29763=>14874,
+58911=>14874,
+23073=>14875,
+58912=>14875,
+155267=>14876,
+58913=>14876,
+23169=>14877,
+58914=>14877,
+166871=>14878,
+58915=>14878,
+132115=>14879,
+58916=>14879,
+37856=>14880,
+58917=>14880,
+29836=>14881,
+58918=>14881,
+135939=>14882,
+58919=>14882,
+28933=>14883,
+58920=>14883,
+18802=>14884,
+58921=>14884,
+37896=>14885,
+58922=>14885,
+166395=>14886,
+58923=>14886,
+37821=>14887,
+58924=>14887,
+14240=>14888,
+58925=>14888,
+23582=>14889,
+58926=>14889,
+23710=>14890,
+58927=>14890,
+24158=>14891,
+58928=>14891,
+24136=>14892,
+58929=>14892,
+137622=>14893,
+58930=>14893,
+137596=>14894,
+58931=>14894,
+146158=>14895,
+58932=>14895,
+24269=>14896,
+58933=>14896,
+23375=>14897,
+58934=>14897,
+58935=>14898,
+137475=>14898,
+58936=>14899,
+137476=>14899,
+14081=>14900,
+58937=>14900,
+137376=>14901,
+58938=>14901,
+14045=>14902,
+58939=>14902,
+136958=>14903,
+58940=>14903,
+14035=>14904,
+58941=>14904,
+33066=>14905,
+58942=>14905,
+166471=>14906,
+58943=>14906,
+138682=>14907,
+58944=>14907,
+144498=>14908,
+58945=>14908,
+166312=>14909,
+58946=>14909,
+24332=>14910,
+60916=>14910,
+58947=>14910,
+24334=>14911,
+58948=>14911,
+137511=>14912,
+58949=>14912,
+137131=>14913,
+58950=>14913,
+23147=>14914,
+58951=>14914,
+137019=>14915,
+58952=>14915,
+23364=>14916,
+58953=>14916,
+161277=>14917,
+58955=>14917,
+34912=>14918,
+58956=>14918,
+24702=>14919,
+58957=>14919,
+141408=>14920,
+58958=>14920,
+140843=>14921,
+58959=>14921,
+24539=>14922,
+58960=>14922,
+16056=>14923,
+58961=>14923,
+140719=>14924,
+58962=>14924,
+140734=>14925,
+58963=>14925,
+168072=>14926,
+58964=>14926,
+159603=>14927,
+58965=>14927,
+25024=>14928,
+58966=>14928,
+131134=>14929,
+58967=>14929,
+131142=>14930,
+58968=>14930,
+140827=>14931,
+58969=>14931,
+24985=>14932,
+58970=>14932,
+24984=>14933,
+58971=>14933,
+24693=>14934,
+58972=>14934,
+142491=>14935,
+58973=>14935,
+142599=>14936,
+58974=>14936,
+149204=>14937,
+58975=>14937,
+168269=>14938,
+58976=>14938,
+25713=>14939,
+58977=>14939,
+149093=>14940,
+58978=>14940,
+142186=>14941,
+58979=>14941,
+14889=>14942,
+58980=>14942,
+142114=>14943,
+58981=>14943,
+144464=>14944,
+58982=>14944,
+170218=>14945,
+58983=>14945,
+142968=>14946,
+58984=>14946,
+25399=>14947,
+58985=>14947,
+25782=>14948,
+58987=>14948,
+25393=>14949,
+58988=>14949,
+25553=>14950,
+58989=>14950,
+149987=>14951,
+58990=>14951,
+142695=>14952,
+58991=>14952,
+25252=>14953,
+58992=>14953,
+142497=>14954,
+58993=>14954,
+25659=>14955,
+58994=>14955,
+25963=>14956,
+58995=>14956,
+26994=>14957,
+58996=>14957,
+15348=>14958,
+58997=>14958,
+143502=>14959,
+58998=>14959,
+144045=>14960,
+58999=>14960,
+149897=>14961,
+59000=>14961,
+144043=>14962,
+59001=>14962,
+21773=>14963,
+59002=>14963,
+144096=>14964,
+59003=>14964,
+137433=>14965,
+59004=>14965,
+169023=>14966,
+59005=>14966,
+26318=>14967,
+59006=>14967,
+144009=>14968,
+59007=>14968,
+143795=>14969,
+59008=>14969,
+15072=>14970,
+59009=>14970,
+152964=>14971,
+59011=>14971,
+166690=>14972,
+59012=>14972,
+152975=>14973,
+59013=>14973,
+136956=>14974,
+59014=>14974,
+152923=>14975,
+59015=>14975,
+152613=>14976,
+59016=>14976,
+30958=>14977,
+59017=>14977,
+143619=>14978,
+59018=>14978,
+137258=>14979,
+59019=>14979,
+143924=>14980,
+59020=>14980,
+13412=>14981,
+59021=>14981,
+143887=>14982,
+59022=>14982,
+143746=>14983,
+59023=>14983,
+148169=>14984,
+59024=>14984,
+26254=>14985,
+59025=>14985,
+159012=>14986,
+59026=>14986,
+26219=>14987,
+59027=>14987,
+19347=>14988,
+59028=>14988,
+26160=>14989,
+59029=>14989,
+161904=>14990,
+59030=>14990,
+138731=>14991,
+59031=>14991,
+26211=>14992,
+59032=>14992,
+144082=>14993,
+59033=>14993,
+144097=>14994,
+59034=>14994,
+26142=>14995,
+59035=>14995,
+153714=>14996,
+59036=>14996,
+14545=>14997,
+59037=>14997,
+145466=>14998,
+59038=>14998,
+145340=>14999,
+59039=>14999,
+15257=>15000,
+59040=>15000,
+145314=>15001,
+59041=>15001,
+144382=>15002,
+59042=>15002,
+29904=>15003,
+59043=>15003,
+15254=>15004,
+59044=>15004,
+149034=>15005,
+59046=>15005,
+26806=>15006,
+59047=>15006,
+15300=>15008,
+59049=>15008,
+27326=>15009,
+59050=>15009,
+145365=>15010,
+59052=>15010,
+148615=>15011,
+59053=>15011,
+27187=>15012,
+59054=>15012,
+27218=>15013,
+59055=>15013,
+27337=>15014,
+59056=>15014,
+27397=>15015,
+59057=>15015,
+137490=>15016,
+59058=>15016,
+25873=>15017,
+59059=>15017,
+26776=>15018,
+59060=>15018,
+27212=>15019,
+59061=>15019,
+15319=>15020,
+59062=>15020,
+27258=>15021,
+59063=>15021,
+27479=>15022,
+59064=>15022,
+147392=>15023,
+59065=>15023,
+146586=>15024,
+59066=>15024,
+37792=>15025,
+59067=>15025,
+37618=>15026,
+59068=>15026,
+166890=>15027,
+59069=>15027,
+166603=>15028,
+59070=>15028,
+37513=>15029,
+59071=>15029,
+163870=>15030,
+59072=>15030,
+166364=>15031,
+59073=>15031,
+37991=>15032,
+59074=>15032,
+28069=>15033,
+59075=>15033,
+28427=>15034,
+59076=>15034,
+147327=>15036,
+59079=>15036,
+15759=>15037,
+59080=>15037,
+28164=>15038,
+59081=>15038,
+147516=>15039,
+59082=>15039,
+23101=>15040,
+59083=>15040,
+28170=>15041,
+59084=>15041,
+22599=>15042,
+59085=>15042,
+27940=>15043,
+59086=>15043,
+30786=>15044,
+59087=>15044,
+28987=>15045,
+59088=>15045,
+148250=>15046,
+59089=>15046,
+148086=>15047,
+59090=>15047,
+28913=>15048,
+59091=>15048,
+29264=>15049,
+61085=>15049,
+59092=>15049,
+29319=>15050,
+59093=>15050,
+29332=>15051,
+59094=>15051,
+149391=>15052,
+59095=>15052,
+149285=>15053,
+59096=>15053,
+20857=>15054,
+59097=>15054,
+150180=>15055,
+59098=>15055,
+132587=>15056,
+59099=>15056,
+29818=>15057,
+59100=>15057,
+147192=>15058,
+59101=>15058,
+144991=>15059,
+59102=>15059,
+150090=>15060,
+59103=>15060,
+149783=>15061,
+59104=>15061,
+155617=>15062,
+59105=>15062,
+16134=>15063,
+59106=>15063,
+16049=>15064,
+59107=>15064,
+150239=>15065,
+59108=>15065,
+166947=>15066,
+59109=>15066,
+147253=>15067,
+59110=>15067,
+24743=>15068,
+59111=>15068,
+16115=>15069,
+59112=>15069,
+29900=>15070,
+59113=>15070,
+29756=>15071,
+59114=>15071,
+37767=>15072,
+59115=>15072,
+29751=>15073,
+59116=>15073,
+17567=>15074,
+59117=>15074,
+159210=>15075,
+59118=>15075,
+17745=>15076,
+59119=>15076,
+30083=>15077,
+59120=>15077,
+16227=>15078,
+59121=>15078,
+150745=>15079,
+59122=>15079,
+150790=>15080,
+59123=>15080,
+16216=>15081,
+59124=>15081,
+30037=>15082,
+59125=>15082,
+30323=>15083,
+59126=>15083,
+173510=>15084,
+59127=>15084,
+29800=>15086,
+61070=>15086,
+59129=>15086,
+166604=>15087,
+59130=>15087,
+149931=>15088,
+59131=>15088,
+149902=>15089,
+59132=>15089,
+15099=>15090,
+59133=>15090,
+15821=>15091,
+59134=>15091,
+150094=>15092,
+59135=>15092,
+16127=>15093,
+59136=>15093,
+149957=>15094,
+59137=>15094,
+149747=>15095,
+59138=>15095,
+37370=>15096,
+59139=>15096,
+22322=>15097,
+59140=>15097,
+37698=>15098,
+59141=>15098,
+166627=>15099,
+59142=>15099,
+137316=>15100,
+59143=>15100,
+20703=>15101,
+59144=>15101,
+152097=>15102,
+59145=>15102,
+152039=>15103,
+59146=>15103,
+30584=>15104,
+59147=>15104,
+143922=>15105,
+59148=>15105,
+30478=>15106,
+59149=>15106,
+30479=>15107,
+59150=>15107,
+30587=>15108,
+59151=>15108,
+149143=>15109,
+59152=>15109,
+145281=>15110,
+59153=>15110,
+14942=>15111,
+59154=>15111,
+149744=>15112,
+59155=>15112,
+29752=>15113,
+59156=>15113,
+29851=>15114,
+59157=>15114,
+16063=>15115,
+59158=>15115,
+150202=>15116,
+59159=>15116,
+150215=>15117,
+59160=>15117,
+16584=>15118,
+59161=>15118,
+150166=>15119,
+59162=>15119,
+156078=>15120,
+59163=>15120,
+37639=>15121,
+59164=>15121,
+152961=>15122,
+59165=>15122,
+30750=>15123,
+59166=>15123,
+30861=>15124,
+59167=>15124,
+30856=>15125,
+59168=>15125,
+30930=>15126,
+59169=>15126,
+29648=>15127,
+59170=>15127,
+31065=>15128,
+59171=>15128,
+161601=>15129,
+59172=>15129,
+153315=>15130,
+59173=>15130,
+16654=>15131,
+59174=>15131,
+31141=>15134,
+59177=>15134,
+27181=>15135,
+59178=>15135,
+147194=>15136,
+59179=>15136,
+31290=>15137,
+59180=>15137,
+31220=>15138,
+59181=>15138,
+16750=>15139,
+59182=>15139,
+136934=>15140,
+59183=>15140,
+16690=>15141,
+59184=>15141,
+37429=>15142,
+59185=>15142,
+31217=>15143,
+59186=>15143,
+134476=>15144,
+59187=>15144,
+149900=>15145,
+59188=>15145,
+131737=>15146,
+59189=>15146,
+146874=>15147,
+59190=>15147,
+137070=>15148,
+59191=>15148,
+13719=>15149,
+59192=>15149,
+21867=>15150,
+59193=>15150,
+13680=>15151,
+59194=>15151,
+13994=>15152,
+59195=>15152,
+131540=>15153,
+59196=>15153,
+134157=>15154,
+59197=>15154,
+31458=>15155,
+59198=>15155,
+23129=>15156,
+59199=>15156,
+141045=>15157,
+59200=>15157,
+154287=>15158,
+59201=>15158,
+154268=>15159,
+59202=>15159,
+23053=>15160,
+59203=>15160,
+131675=>15161,
+59204=>15161,
+30960=>15162,
+59205=>15162,
+23082=>15163,
+59206=>15163,
+154566=>15164,
+59207=>15164,
+31486=>15165,
+59208=>15165,
+16889=>15166,
+59209=>15166,
+31837=>15167,
+59210=>15167,
+31853=>15168,
+59211=>15168,
+16913=>15169,
+59212=>15169,
+154547=>15170,
+59213=>15170,
+155324=>15171,
+59214=>15171,
+155302=>15172,
+59215=>15172,
+31949=>15173,
+59216=>15173,
+150009=>15174,
+59217=>15174,
+137136=>15175,
+59218=>15175,
+31886=>15176,
+59219=>15176,
+31868=>15177,
+59220=>15177,
+31918=>15178,
+59221=>15178,
+27314=>15179,
+59222=>15179,
+32220=>15180,
+59223=>15180,
+32263=>15181,
+59224=>15181,
+32211=>15182,
+59225=>15182,
+32590=>15183,
+59226=>15183,
+156257=>15184,
+59227=>15184,
+155996=>15185,
+59228=>15185,
+162632=>15186,
+59229=>15186,
+32151=>15187,
+59230=>15187,
+155266=>15188,
+59231=>15188,
+17002=>15189,
+59232=>15189,
+158581=>15190,
+59233=>15190,
+133398=>15191,
+59234=>15191,
+26582=>15192,
+59235=>15192,
+131150=>15193,
+59236=>15193,
+144847=>15194,
+59237=>15194,
+22468=>15195,
+59238=>15195,
+156690=>15196,
+59239=>15196,
+156664=>15197,
+59240=>15197,
+32733=>15198,
+59242=>15198,
+31527=>15199,
+59243=>15199,
+133164=>15200,
+59244=>15200,
+154345=>15201,
+59245=>15201,
+154947=>15202,
+59246=>15202,
+31500=>15203,
+59247=>15203,
+155150=>15204,
+59248=>15204,
+39398=>15205,
+59249=>15205,
+34373=>15206,
+59250=>15206,
+39523=>15207,
+59251=>15207,
+27164=>15208,
+59252=>15208,
+144447=>15209,
+59253=>15209,
+150007=>15210,
+59255=>15210,
+157101=>15211,
+59256=>15211,
+39455=>15212,
+59257=>15212,
+157088=>15213,
+59258=>15213,
+33941=>15214,
+160039=>15215,
+59260=>15215,
+158929=>15216,
+59261=>15216,
+17642=>15217,
+59262=>15217,
+33079=>15218,
+59263=>15218,
+17410=>15219,
+59264=>15219,
+32966=>15220,
+59265=>15220,
+33033=>15221,
+59266=>15221,
+33090=>15222,
+59267=>15222,
+157620=>15223,
+59268=>15223,
+39107=>15224,
+59269=>15224,
+158274=>15225,
+59270=>15225,
+33378=>15226,
+59271=>15226,
+33381=>15227,
+59272=>15227,
+158289=>15228,
+59273=>15228,
+33875=>15229,
+59274=>15229,
+159143=>15230,
+59275=>15230,
+34320=>15231,
+59276=>15231,
+160283=>15232,
+59277=>15232,
+23174=>15233,
+59278=>15233,
+16767=>15234,
+59279=>15234,
+137280=>15235,
+59280=>15235,
+23339=>15236,
+59281=>15236,
+137377=>15237,
+59282=>15237,
+23268=>15238,
+59283=>15238,
+137432=>15239,
+59284=>15239,
+34464=>15240,
+59285=>15240,
+195004=>15241,
+59286=>15241,
+146831=>15242,
+59287=>15242,
+34861=>15243,
+59288=>15243,
+160802=>15244,
+59289=>15244,
+23042=>15245,
+59290=>15245,
+34926=>15246,
+59291=>15246,
+20293=>15247,
+59292=>15247,
+34951=>15248,
+59293=>15248,
+35007=>15249,
+59294=>15249,
+35046=>15250,
+59295=>15250,
+35173=>15251,
+59296=>15251,
+35149=>15252,
+59297=>15252,
+153219=>15253,
+59298=>15253,
+35156=>15254,
+59299=>15254,
+161669=>15255,
+59300=>15255,
+161668=>15256,
+59301=>15256,
+166901=>15257,
+59302=>15257,
+166873=>15258,
+59303=>15258,
+166812=>15259,
+59304=>15259,
+166393=>15260,
+59305=>15260,
+16045=>15261,
+59306=>15261,
+33955=>15262,
+59307=>15262,
+18165=>15263,
+59308=>15263,
+18127=>15264,
+59309=>15264,
+14322=>15265,
+59310=>15265,
+35389=>15266,
+59311=>15266,
+35356=>15267,
+59312=>15267,
+169032=>15268,
+59313=>15268,
+24397=>15269,
+59314=>15269,
+37419=>15270,
+59315=>15270,
+148100=>15271,
+59316=>15271,
+26068=>15272,
+59317=>15272,
+28969=>15273,
+59318=>15273,
+28868=>15274,
+59319=>15274,
+137285=>15275,
+59320=>15275,
+40301=>15276,
+59321=>15276,
+35999=>15277,
+59322=>15277,
+36073=>15278,
+59323=>15278,
+163292=>15279,
+59324=>15279,
+22938=>15280,
+59325=>15280,
+30659=>15281,
+59326=>15281,
+23024=>15282,
+59327=>15282,
+14036=>15283,
+59329=>15283,
+36394=>15284,
+59330=>15284,
+36519=>15285,
+59331=>15285,
+150537=>15286,
+59332=>15286,
+36656=>15287,
+59333=>15287,
+36682=>15288,
+59334=>15288,
+17140=>15289,
+59335=>15289,
+27736=>15290,
+59336=>15290,
+28603=>15291,
+59337=>15291,
+140065=>15292,
+59338=>15292,
+18587=>15293,
+59339=>15293,
+28537=>15294,
+59340=>15294,
+28299=>15295,
+59341=>15295,
+137178=>15296,
+59342=>15296,
+39913=>15297,
+59343=>15297,
+14005=>15298,
+59344=>15298,
+149807=>15299,
+59345=>15299,
+37051=>15300,
+59346=>15300,
+18612=>15301,
+21873=>15302,
+59348=>15302,
+18694=>15303,
+59349=>15303,
+37307=>15304,
+59350=>15304,
+37892=>15305,
+59351=>15305,
+166475=>15306,
+59352=>15306,
+16482=>15307,
+59353=>15307,
+166652=>15308,
+59354=>15308,
+37927=>15309,
+59355=>15309,
+166941=>15310,
+59356=>15310,
+166971=>15311,
+59357=>15311,
+34021=>15312,
+59358=>15312,
+35371=>15313,
+59359=>15313,
+38297=>15314,
+59360=>15314,
+38311=>15315,
+59361=>15315,
+38295=>15316,
+59362=>15316,
+38294=>15317,
+59363=>15317,
+167220=>15318,
+59364=>15318,
+29765=>15319,
+59365=>15319,
+16066=>15320,
+59366=>15320,
+149759=>15321,
+59367=>15321,
+150082=>15322,
+59368=>15322,
+148458=>15323,
+59369=>15323,
+16103=>15324,
+59370=>15324,
+143909=>15325,
+59371=>15325,
+38543=>15326,
+59372=>15326,
+167655=>15327,
+59373=>15327,
+167526=>15328,
+59374=>15328,
+167525=>15329,
+59375=>15329,
+16076=>15330,
+59376=>15330,
+149997=>15331,
+59377=>15331,
+150136=>15332,
+59378=>15332,
+147438=>15333,
+59379=>15333,
+29714=>15334,
+59380=>15334,
+29803=>15335,
+59381=>15335,
+16124=>15336,
+59382=>15336,
+38721=>15337,
+59383=>15337,
+168112=>15338,
+59384=>15338,
+26695=>15339,
+59385=>15339,
+18973=>15340,
+59386=>15340,
+168083=>15341,
+59387=>15341,
+153567=>15342,
+59388=>15342,
+37736=>15344,
+59390=>15344,
+166281=>15345,
+59391=>15345,
+166950=>15346,
+59392=>15346,
+166703=>15347,
+59393=>15347,
+156606=>15348,
+59394=>15348,
+37562=>15349,
+59395=>15349,
+23313=>15350,
+59396=>15350,
+35689=>15351,
+59397=>15351,
+18748=>15352,
+59398=>15352,
+29689=>15353,
+59399=>15353,
+147995=>15354,
+59400=>15354,
+38811=>15355,
+59401=>15355,
+39224=>15357,
+59403=>15357,
+134950=>15358,
+59404=>15358,
+24001=>15359,
+59405=>15359,
+166853=>15360,
+59406=>15360,
+150194=>15361,
+59407=>15361,
+38943=>15362,
+59408=>15362,
+169178=>15363,
+59409=>15363,
+37622=>15364,
+59410=>15364,
+169431=>15365,
+59411=>15365,
+37349=>15366,
+59412=>15366,
+17600=>15367,
+59413=>15367,
+166736=>15368,
+59414=>15368,
+150119=>15369,
+59415=>15369,
+166756=>15370,
+59416=>15370,
+39132=>15371,
+59417=>15371,
+166469=>15372,
+59418=>15372,
+16128=>15373,
+59419=>15373,
+37418=>15374,
+59420=>15374,
+18725=>15375,
+59421=>15375,
+33812=>15376,
+59422=>15376,
+39227=>15377,
+59423=>15377,
+39245=>15378,
+59424=>15378,
+162566=>15379,
+59425=>15379,
+15869=>15380,
+59426=>15380,
+19311=>15382,
+59428=>15382,
+39338=>15383,
+59429=>15383,
+39516=>15384,
+59430=>15384,
+166757=>15385,
+59431=>15385,
+153800=>15386,
+59432=>15386,
+27279=>15387,
+59433=>15387,
+39457=>15388,
+59434=>15388,
+23294=>15389,
+59435=>15389,
+39471=>15390,
+59436=>15390,
+170225=>15391,
+59437=>15391,
+19344=>15392,
+59438=>15392,
+170312=>15393,
+59439=>15393,
+39356=>15394,
+59440=>15394,
+19389=>15395,
+59441=>15395,
+19351=>15396,
+59442=>15396,
+37757=>15397,
+59443=>15397,
+22642=>15398,
+59444=>15398,
+135938=>15399,
+59445=>15399,
+22562=>15400,
+59446=>15400,
+149944=>15401,
+59447=>15401,
+136424=>15402,
+59448=>15402,
+30788=>15403,
+59449=>15403,
+141087=>15404,
+59450=>15404,
+146872=>15405,
+59451=>15405,
+26821=>15406,
+59452=>15406,
+15741=>15407,
+59453=>15407,
+37976=>15408,
+59454=>15408,
+14631=>15409,
+59455=>15409,
+24912=>15410,
+59456=>15410,
+141185=>15411,
+59457=>15411,
+141675=>15412,
+59458=>15412,
+24839=>15413,
+59459=>15413,
+40015=>15414,
+59460=>15414,
+40019=>15415,
+59461=>15415,
+40059=>15416,
+59462=>15416,
+39989=>15417,
+59463=>15417,
+39952=>15418,
+59464=>15418,
+39807=>15419,
+59465=>15419,
+39887=>15420,
+59466=>15420,
+171565=>15421,
+59467=>15421,
+39839=>15422,
+59468=>15422,
+172533=>15423,
+59469=>15423,
+172286=>15424,
+59470=>15424,
+40225=>15425,
+59471=>15425,
+19630=>15426,
+59472=>15426,
+147716=>15427,
+59473=>15427,
+40472=>15428,
+59474=>15428,
+19632=>15429,
+59475=>15429,
+40204=>15430,
+59476=>15430,
+172468=>15431,
+59477=>15431,
+172269=>15432,
+59478=>15432,
+172275=>15433,
+59479=>15433,
+170287=>15434,
+59480=>15434,
+40357=>15435,
+59481=>15435,
+33981=>15436,
+59482=>15436,
+159250=>15437,
+59483=>15437,
+159711=>15438,
+59484=>15438,
+158594=>15439,
+59485=>15439,
+34300=>15440,
+59486=>15440,
+17715=>15441,
+59487=>15441,
+159140=>15442,
+59488=>15442,
+159364=>15443,
+59489=>15443,
+159216=>15444,
+59490=>15444,
+33824=>15445,
+59491=>15445,
+34286=>15446,
+59492=>15446,
+159232=>15447,
+59493=>15447,
+145367=>15448,
+59494=>15448,
+155748=>15449,
+59495=>15449,
+31202=>15450,
+59496=>15450,
+144796=>15451,
+59497=>15451,
+144960=>15452,
+59498=>15452,
+149982=>15453,
+59500=>15453,
+15714=>15454,
+59501=>15454,
+37851=>15455,
+59502=>15455,
+37566=>15456,
+59503=>15456,
+37704=>15457,
+59504=>15457,
+131775=>15458,
+59505=>15458,
+30905=>15459,
+59506=>15459,
+37495=>15460,
+59507=>15460,
+37965=>15461,
+59508=>15461,
+20452=>15462,
+59509=>15462,
+13376=>15463,
+59510=>15463,
+36964=>15464,
+59511=>15464,
+152925=>15465,
+59512=>15465,
+30781=>15466,
+59513=>15466,
+30804=>15467,
+59514=>15467,
+30902=>15468,
+59515=>15468,
+30795=>15469,
+59516=>15469,
+137047=>15470,
+59517=>15470,
+143817=>15471,
+59518=>15471,
+149825=>15472,
+59519=>15472,
+13978=>15473,
+59520=>15473,
+20338=>15474,
+59521=>15474,
+28634=>15475,
+59522=>15475,
+28633=>15476,
+59523=>15476,
+28702=>15478,
+59524=>15478,
+59525=>15478,
+21524=>15479,
+59526=>15479,
+147893=>15480,
+59527=>15480,
+22459=>15481,
+59528=>15481,
+22771=>15482,
+59529=>15482,
+22410=>15483,
+59530=>15483,
+40214=>15484,
+59531=>15484,
+22487=>15485,
+59532=>15485,
+28980=>15486,
+59533=>15486,
+13487=>15487,
+59534=>15487,
+147884=>15488,
+59535=>15488,
+29163=>15489,
+59536=>15489,
+158784=>15490,
+59537=>15490,
+151447=>15491,
+59538=>15491,
+137141=>15493,
+59540=>15493,
+166473=>15494,
+59541=>15494,
+24844=>15495,
+59542=>15495,
+23246=>15496,
+59543=>15496,
+23051=>15497,
+59544=>15497,
+17084=>15498,
+59545=>15498,
+148616=>15499,
+59546=>15499,
+14124=>15500,
+59547=>15500,
+19323=>15501,
+59548=>15501,
+166396=>15502,
+59549=>15502,
+37819=>15503,
+59550=>15503,
+37816=>15504,
+59551=>15504,
+137430=>15505,
+59552=>15505,
+134941=>15506,
+59553=>15506,
+33906=>15507,
+59554=>15507,
+158912=>15508,
+59555=>15508,
+136211=>15509,
+59556=>15509,
+148218=>15510,
+59557=>15510,
+142374=>15511,
+59558=>15511,
+148417=>15512,
+59559=>15512,
+22932=>15513,
+59560=>15513,
+146871=>15514,
+59561=>15514,
+157505=>15515,
+59562=>15515,
+32168=>15516,
+59563=>15516,
+155995=>15517,
+59564=>15517,
+155812=>15518,
+59565=>15518,
+149945=>15519,
+59566=>15519,
+149899=>15520,
+59567=>15520,
+166394=>15521,
+59568=>15521,
+37605=>15522,
+59569=>15522,
+29666=>15523,
+59570=>15523,
+16105=>15524,
+59571=>15524,
+29876=>15525,
+59572=>15525,
+166755=>15526,
+59573=>15526,
+137375=>15527,
+59574=>15527,
+16097=>15528,
+59575=>15528,
+150195=>15529,
+59576=>15529,
+27352=>15530,
+59577=>15530,
+29683=>15531,
+59578=>15531,
+29691=>15532,
+59579=>15532,
+16086=>15533,
+59580=>15533,
+150078=>15534,
+59581=>15534,
+150164=>15535,
+59582=>15535,
+137177=>15536,
+59583=>15536,
+150118=>15537,
+59584=>15537,
+132007=>15538,
+59585=>15538,
+136228=>15539,
+59586=>15539,
+149989=>15540,
+59587=>15540,
+29768=>15541,
+59588=>15541,
+149782=>15542,
+59589=>15542,
+28837=>15543,
+59590=>15543,
+149878=>15544,
+59591=>15544,
+37508=>15545,
+59592=>15545,
+29670=>15546,
+59593=>15546,
+37727=>15547,
+59594=>15547,
+132350=>15548,
+59595=>15548,
+37681=>15549,
+59596=>15549,
+166606=>15550,
+59597=>15550,
+166422=>15551,
+59598=>15551,
+37766=>15552,
+59599=>15552,
+166887=>15553,
+59600=>15553,
+153045=>15554,
+59601=>15554,
+18741=>15555,
+59602=>15555,
+166530=>15556,
+59603=>15556,
+29035=>15557,
+59604=>15557,
+149827=>15558,
+59605=>15558,
+134399=>15559,
+59606=>15559,
+22180=>15560,
+59607=>15560,
+132634=>15561,
+59608=>15561,
+134123=>15562,
+59609=>15562,
+134328=>15563,
+59610=>15563,
+21762=>15564,
+59611=>15564,
+31172=>15565,
+59612=>15565,
+137210=>15566,
+59613=>15566,
+32254=>15567,
+59614=>15567,
+136898=>15568,
+59615=>15568,
+150096=>15569,
+59616=>15569,
+137298=>15570,
+59617=>15570,
+17710=>15571,
+59618=>15571,
+37889=>15572,
+59619=>15572,
+14090=>15573,
+59620=>15573,
+166592=>15574,
+59621=>15574,
+149933=>15575,
+59622=>15575,
+22960=>15576,
+59623=>15576,
+137407=>15577,
+59624=>15577,
+137347=>15578,
+59625=>15578,
+160900=>15579,
+59626=>15579,
+23201=>15580,
+59627=>15580,
+14050=>15581,
+59628=>15581,
+146779=>15582,
+59629=>15582,
+14000=>15583,
+59630=>15583,
+37471=>15584,
+59631=>15584,
+23161=>15585,
+59632=>15585,
+166529=>15586,
+59633=>15586,
+137314=>15587,
+59634=>15587,
+37748=>15588,
+59635=>15588,
+15565=>15589,
+59636=>15589,
+133812=>15590,
+59637=>15590,
+19094=>15591,
+59638=>15591,
+14730=>15592,
+59639=>15592,
+20724=>15593,
+59640=>15593,
+15721=>15594,
+59641=>15594,
+15692=>15595,
+59642=>15595,
+136092=>15596,
+59643=>15596,
+29045=>15597,
+59644=>15597,
+17147=>15598,
+59645=>15598,
+164376=>15599,
+59646=>15599,
+28175=>15600,
+59647=>15600,
+168164=>15601,
+59648=>15601,
+17643=>15602,
+59649=>15602,
+27991=>15603,
+59650=>15603,
+163407=>15604,
+59651=>15604,
+28775=>15605,
+59652=>15605,
+27823=>15606,
+59653=>15606,
+15574=>15607,
+59654=>15607,
+147437=>15608,
+59655=>15608,
+146989=>15609,
+59656=>15609,
+28162=>15610,
+59657=>15610,
+28428=>15611,
+59658=>15611,
+15727=>15612,
+59659=>15612,
+132085=>15613,
+59660=>15613,
+30033=>15614,
+59661=>15614,
+14012=>15615,
+59662=>15615,
+13512=>15616,
+59663=>15616,
+18048=>15617,
+59664=>15617,
+16090=>15618,
+59665=>15618,
+18545=>15619,
+59666=>15619,
+22980=>15620,
+59667=>15620,
+37486=>15621,
+59668=>15621,
+18750=>15622,
+59669=>15622,
+36673=>15623,
+59670=>15623,
+166940=>15624,
+59671=>15624,
+158656=>15625,
+59672=>15625,
+22546=>15626,
+59673=>15626,
+22472=>15627,
+59674=>15627,
+14038=>15628,
+59675=>15628,
+136274=>15629,
+59676=>15629,
+28926=>15630,
+59677=>15630,
+148322=>15631,
+59678=>15631,
+150129=>15632,
+59679=>15632,
+143331=>15633,
+59680=>15633,
+135856=>15634,
+59681=>15634,
+140221=>15635,
+59682=>15635,
+26809=>15636,
+59683=>15636,
+26983=>15637,
+59684=>15637,
+136088=>15638,
+59685=>15638,
+144613=>15639,
+59686=>15639,
+162804=>15640,
+59687=>15640,
+145119=>15641,
+59688=>15641,
+166531=>15642,
+59689=>15642,
+145366=>15643,
+59690=>15643,
+144378=>15644,
+59691=>15644,
+150687=>15645,
+59692=>15645,
+27162=>15646,
+59693=>15646,
+145069=>15647,
+59694=>15647,
+158903=>15648,
+59695=>15648,
+33854=>15649,
+59696=>15649,
+17631=>15650,
+59697=>15650,
+17614=>15651,
+59698=>15651,
+159014=>15652,
+59699=>15652,
+159057=>15653,
+59700=>15653,
+158850=>15654,
+59701=>15654,
+159710=>15655,
+59702=>15655,
+33597=>15658,
+59705=>15658,
+137018=>15659,
+59706=>15659,
+33773=>15660,
+59707=>15660,
+158848=>15661,
+59708=>15661,
+159827=>15662,
+59709=>15662,
+137179=>15663,
+59710=>15663,
+22921=>15664,
+59711=>15664,
+23170=>15665,
+59712=>15665,
+137139=>15666,
+59713=>15666,
+23137=>15667,
+59714=>15667,
+23153=>15668,
+59715=>15668,
+137477=>15669,
+59716=>15669,
+147964=>15670,
+59717=>15670,
+14125=>15671,
+59718=>15671,
+23023=>15672,
+59719=>15672,
+137020=>15673,
+59720=>15673,
+14023=>15674,
+59721=>15674,
+29070=>15675,
+59722=>15675,
+37776=>15676,
+59723=>15676,
+26266=>15677,
+59724=>15677,
+148133=>15678,
+59725=>15678,
+23150=>15679,
+59726=>15679,
+23083=>15680,
+59727=>15680,
+148115=>15681,
+59728=>15681,
+27179=>15682,
+59729=>15682,
+147193=>15683,
+59730=>15683,
+161590=>15684,
+59731=>15684,
+148571=>15685,
+59732=>15685,
+148170=>15686,
+59733=>15686,
+28957=>15687,
+59734=>15687,
+148057=>15688,
+59735=>15688,
+166369=>15689,
+59736=>15689,
+20400=>15690,
+59737=>15690,
+159016=>15691,
+59738=>15691,
+23746=>15692,
+59739=>15692,
+148686=>15693,
+59740=>15693,
+163405=>15694,
+59741=>15694,
+148413=>15695,
+59742=>15695,
+27148=>15696,
+59743=>15696,
+148054=>15697,
+59744=>15697,
+135940=>15698,
+59745=>15698,
+28979=>15700,
+59747=>15700,
+148457=>15701,
+59748=>15701,
+15781=>15702,
+59749=>15702,
+27871=>15703,
+59750=>15703,
+194597=>15704,
+59751=>15704,
+23019=>15705,
+59754=>15705,
+24412=>15706,
+59757=>15706,
+59764=>15707,
+144128=>15707,
+31955=>15708,
+59776=>15708,
+59783=>15709,
+162548=>15709,
+59786=>15710,
+153334=>15710,
+162584=>15711,
+59790=>15711,
+36972=>15712,
+59791=>15712,
+33270=>15713,
+59795=>15713,
+30476=>15714,
+59797=>15714,
+27810=>15715,
+59799=>15715,
+22269=>15716,
+59800=>15716,
+22633=>15717,
+59828=>15717,
+26465=>15718,
+59832=>15718,
+23646=>15719,
+59838=>15719,
+22770=>15720,
+59841=>15720,
+28857=>15721,
+59843=>15721,
+26627=>15722,
+59853=>15722,
+59859=>15723,
+36795=>15723,
+59861=>15724,
+36796=>15724,
+20001=>15725,
+59871=>15725,
+31545=>15726,
+59898=>15726,
+15820=>15727,
+59902=>15727,
+29482=>15728,
+57990=>15728,
+59909=>15728,
+30048=>15729,
+59912=>15729,
+22586=>15730,
+59920=>15730,
+33446=>15731,
+59932=>15731,
+27018=>15732,
+59940=>15732,
+24803=>15733,
+59944=>15733,
+20206=>15734,
+59984=>15734,
+39364=>15735,
+60002=>15735,
+40639=>15736,
+60023=>15736,
+21249=>15737,
+60025=>15737,
+26528=>15738,
+60038=>15738,
+24808=>15739,
+60046=>15739,
+20916=>15740,
+60053=>15740,
+31363=>15741,
+60064=>15741,
+39994=>15742,
+60075=>15742,
+31432=>15743,
+60093=>15743,
+26906=>15744,
+60098=>15744,
+22956=>15745,
+60100=>15745,
+22592=>15746,
+60102=>15746,
+21610=>15747,
+60114=>15747,
+24807=>15748,
+60123=>15748,
+22138=>15749,
+60125=>15749,
+26965=>15750,
+60132=>15750,
+39983=>15751,
+60133=>15751,
+34725=>15752,
+60134=>15752,
+23584=>15753,
+60141=>15753,
+24075=>15754,
+60143=>15754,
+26398=>15755,
+60147=>15755,
+33965=>15756,
+60157=>15756,
+35713=>15757,
+60161=>15757,
+20088=>15758,
+60166=>15758,
+25283=>15759,
+60176=>15759,
+26709=>15760,
+60180=>15760,
+33533=>15762,
+60190=>15762,
+35237=>15763,
+60194=>15763,
+36768=>15764,
+60196=>15764,
+38840=>15765,
+60198=>15765,
+38983=>15766,
+60200=>15766,
+39613=>15767,
+60201=>15767,
+24497=>15768,
+60218=>15768,
+26184=>15769,
+60219=>15769,
+26303=>15770,
+60220=>15770,
+162425=>15771,
+60221=>15771,
+60225=>15773,
+149946=>15773,
+60230=>15776,
+131910=>15776,
+26382=>15777,
+60232=>15777,
+26904=>15778,
+60233=>15778,
+161367=>15779,
+60235=>15779,
+155618=>15780,
+60236=>15780,
+161278=>15781,
+60239=>15781,
+139418=>15782,
+60240=>15782,
+18640=>15783,
+60241=>15783,
+19128=>15784,
+60242=>15784,
+60244=>15785,
+166554=>15785,
+60247=>15786,
+147515=>15786,
+150085=>15787,
+60250=>15787,
+132554=>15788,
+60251=>15788,
+20946=>15789,
+60252=>15789,
+132625=>15790,
+60253=>15790,
+22943=>15791,
+60254=>15791,
+138920=>15792,
+60255=>15792,
+15294=>15793,
+60256=>15793,
+146687=>15794,
+60257=>15794,
+14747=>15795,
+60262=>15795,
+165352=>15796,
+60264=>15796,
+170441=>15797,
+60265=>15797,
+14178=>15798,
+60266=>15798,
+139715=>15799,
+60267=>15799,
+35678=>15800,
+60268=>15800,
+166734=>15801,
+60269=>15801,
+29193=>15803,
+60274=>15803,
+60276=>15804,
+134264=>15804,
+132985=>15805,
+60280=>15805,
+36570=>15806,
+60281=>15806,
+21135=>15807,
+60283=>15807,
+29041=>15808,
+60285=>15808,
+147274=>15809,
+60288=>15809,
+150183=>15810,
+60289=>15810,
+21948=>15811,
+60290=>15811,
+60293=>15812,
+158546=>15812,
+13427=>15813,
+60295=>15813,
+60297=>15814,
+161330=>15814,
+18200=>15815,
+60299=>15815,
+60303=>15816,
+149823=>15816,
+20582=>15817,
+60305=>15817,
+13563=>15818,
+60306=>15818,
+144332=>15819,
+60307=>15819,
+18300=>15821,
+60310=>15821,
+166216=>15822,
+60311=>15822,
+60315=>15823,
+138640=>15823,
+162834=>15825,
+60320=>15825,
+36950=>15826,
+60321=>15826,
+151450=>15827,
+60323=>15827,
+35682=>15828,
+60324=>15828,
+23899=>15829,
+60327=>15829,
+158711=>15830,
+60328=>15830,
+137500=>15832,
+60331=>15832,
+35562=>15833,
+60332=>15833,
+150006=>15834,
+60333=>15834,
+60335=>15835,
+147439=>15835,
+19392=>15836,
+60337=>15836,
+141083=>15837,
+60340=>15837,
+37989=>15838,
+60341=>15838,
+153569=>15839,
+60342=>15839,
+24981=>15840,
+60343=>15840,
+23079=>15841,
+60344=>15841,
+194765=>15842,
+60345=>15842,
+194566=>15843,
+60348=>15844,
+148769=>15844,
+20074=>15845,
+60350=>15845,
+149812=>15846,
+60351=>15846,
+38486=>15847,
+60352=>15847,
+28047=>15848,
+60353=>15848,
+158909=>15849,
+60354=>15849,
+35191=>15850,
+60356=>15850,
+60359=>15851,
+156689=>15851,
+31554=>15853,
+60363=>15853,
+168128=>15854,
+60364=>15854,
+133649=>15855,
+60365=>15855,
+31301=>15857,
+60369=>15857,
+39462=>15858,
+60372=>15858,
+13919=>15859,
+60374=>15859,
+156777=>15860,
+60375=>15860,
+131105=>15861,
+60376=>15861,
+31107=>15862,
+60377=>15862,
+23852=>15863,
+60380=>15863,
+144665=>15864,
+60381=>15864,
+18128=>15866,
+60384=>15866,
+30011=>15867,
+60386=>15867,
+34917=>15868,
+60387=>15868,
+22710=>15869,
+60389=>15869,
+14108=>15870,
+60390=>15870,
+140685=>15871,
+60391=>15871,
+15444=>15872,
+60394=>15872,
+37505=>15873,
+60397=>15873,
+139642=>15874,
+60398=>15874,
+37680=>15875,
+60400=>15875,
+149968=>15876,
+60402=>15876,
+27705=>15877,
+60403=>15877,
+134904=>15878,
+60406=>15878,
+34855=>15879,
+60407=>15879,
+35061=>15880,
+60408=>15880,
+141606=>15881,
+60409=>15881,
+164979=>15882,
+60410=>15882,
+137137=>15883,
+60411=>15883,
+28344=>15884,
+60412=>15884,
+150058=>15885,
+60413=>15885,
+137248=>15886,
+60414=>15886,
+14756=>15887,
+60415=>15887,
+17727=>15890,
+60419=>15890,
+26294=>15891,
+60420=>15891,
+171181=>15892,
+60421=>15892,
+170148=>15893,
+60422=>15893,
+35139=>15894,
+60423=>15894,
+16607=>15895,
+60427=>15895,
+136714=>15896,
+60428=>15896,
+14753=>15897,
+60429=>15897,
+145199=>15898,
+60430=>15898,
+164072=>15899,
+60431=>15899,
+136133=>15900,
+60432=>15900,
+29101=>15901,
+60433=>15901,
+33638=>15902,
+60434=>15902,
+60436=>15903,
+168360=>15903,
+19639=>15905,
+60438=>15905,
+159919=>15906,
+60439=>15906,
+166315=>15907,
+60440=>15907,
+147834=>15908,
+60445=>15908,
+31555=>15909,
+60446=>15909,
+31102=>15910,
+60447=>15910,
+28597=>15911,
+60449=>15911,
+172767=>15912,
+60450=>15912,
+27139=>15913,
+60451=>15913,
+164632=>15914,
+60452=>15914,
+21410=>15915,
+60453=>15915,
+159239=>15916,
+60454=>15916,
+37823=>15917,
+60455=>15917,
+26678=>15918,
+60456=>15918,
+38749=>15919,
+59389=>15919,
+60457=>15919,
+164207=>15920,
+60458=>15920,
+158133=>15921,
+60460=>15921,
+136173=>15922,
+60461=>15922,
+143919=>15923,
+60462=>15923,
+23941=>15924,
+60464=>15924,
+166960=>15925,
+60465=>15925,
+22293=>15926,
+60467=>15926,
+38947=>15927,
+60468=>15927,
+166217=>15928,
+60469=>15928,
+23979=>15929,
+60470=>15929,
+149896=>15930,
+60471=>15930,
+26046=>15931,
+60472=>15931,
+27093=>15932,
+60473=>15932,
+21458=>15933,
+60474=>15933,
+150181=>15934,
+60475=>15934,
+147329=>15935,
+60476=>15935,
+15377=>15936,
+60477=>15936,
+26422=>15937,
+60478=>15937,
+60482=>15938,
+139169=>15938,
+13770=>15939,
+60490=>15939,
+18682=>15940,
+60493=>15940,
+30728=>15942,
+60496=>15942,
+37461=>15943,
+60497=>15943,
+17394=>15944,
+60499=>15944,
+17375=>15945,
+60501=>15945,
+23032=>15946,
+60505=>15946,
+22155=>15948,
+60518=>15948,
+60520=>15949,
+169449=>15949,
+36882=>15950,
+60541=>15950,
+21953=>15951,
+60546=>15951,
+17673=>15952,
+60551=>15952,
+32383=>15953,
+60552=>15953,
+28502=>15954,
+60553=>15954,
+27313=>15955,
+60554=>15955,
+13540=>15956,
+60556=>15956,
+161949=>15957,
+60558=>15957,
+14138=>15958,
+60559=>15958,
+60562=>15960,
+163876=>15960,
+60565=>15961,
+162366=>15961,
+15851=>15962,
+60567=>15962,
+60569=>15963,
+146615=>15963,
+156248=>15964,
+60574=>15964,
+22207=>15965,
+60575=>15965,
+36366=>15966,
+60577=>15966,
+23405=>15967,
+60578=>15967,
+25566=>15968,
+60581=>15968,
+25904=>15970,
+60585=>15970,
+22061=>15971,
+60586=>15971,
+21530=>15972,
+60588=>15972,
+171416=>15973,
+60591=>15973,
+19581=>15974,
+60592=>15974,
+22050=>15975,
+60593=>15975,
+22046=>15976,
+60594=>15976,
+32585=>15977,
+60595=>15977,
+22901=>15978,
+60597=>15978,
+146752=>15979,
+60598=>15979,
+34672=>15980,
+60599=>15980,
+33047=>15981,
+60604=>15981,
+40286=>15982,
+60605=>15982,
+36120=>15983,
+60606=>15983,
+30267=>15984,
+60607=>15984,
+40005=>15985,
+60608=>15985,
+30286=>15986,
+60609=>15986,
+30649=>15987,
+60610=>15987,
+37701=>15988,
+60611=>15988,
+21554=>15989,
+60612=>15989,
+33096=>15990,
+60613=>15990,
+33527=>15991,
+60614=>15991,
+22053=>15992,
+60615=>15992,
+33074=>15993,
+60616=>15993,
+33816=>15994,
+60617=>15994,
+32957=>15995,
+60618=>15995,
+21994=>15996,
+60619=>15996,
+31074=>15997,
+60620=>15997,
+22083=>15998,
+60621=>15998,
+21526=>15999,
+60622=>15999,
+134813=>16000,
+60623=>16000,
+13774=>16001,
+60624=>16001,
+22021=>16002,
+57509=>16002,
+60625=>16002,
+22001=>16003,
+60626=>16003,
+26353=>16004,
+60627=>16004,
+164578=>16005,
+60628=>16005,
+13869=>16006,
+60629=>16006,
+30004=>16007,
+60630=>16007,
+22000=>16008,
+60631=>16008,
+21946=>16009,
+60632=>16009,
+21655=>16010,
+60633=>16010,
+21874=>16011,
+60634=>16011,
+134209=>16012,
+60635=>16012,
+134294=>16013,
+60636=>16013,
+24272=>16014,
+57652=>16014,
+60637=>16014,
+134774=>16015,
+60639=>16015,
+142434=>16016,
+60640=>16016,
+134818=>16017,
+60641=>16017,
+40619=>16018,
+60642=>16018,
+32090=>16019,
+60643=>16019,
+135285=>16021,
+60645=>16021,
+25245=>16022,
+60646=>16022,
+38765=>16023,
+60647=>16023,
+21652=>16024,
+60648=>16024,
+36045=>16025,
+60649=>16025,
+29174=>16026,
+60650=>16026,
+37238=>16027,
+60651=>16027,
+25596=>16028,
+60652=>16028,
+25529=>16029,
+60653=>16029,
+25598=>16030,
+60654=>16030,
+21865=>16031,
+60655=>16031,
+142147=>16032,
+60656=>16032,
+40050=>16033,
+60657=>16033,
+143027=>16034,
+60658=>16034,
+20890=>16035,
+60659=>16035,
+13535=>16036,
+60660=>16036,
+134567=>16037,
+60661=>16037,
+20903=>16038,
+60662=>16038,
+21581=>16039,
+60663=>16039,
+21790=>16040,
+60664=>16040,
+21779=>16041,
+60665=>16041,
+30310=>16042,
+60666=>16042,
+36397=>16043,
+60667=>16043,
+157834=>16044,
+60668=>16044,
+30129=>16045,
+60669=>16045,
+32950=>16046,
+60670=>16046,
+34820=>16047,
+60671=>16047,
+35015=>16049,
+60673=>16049,
+33206=>16050,
+60674=>16050,
+33820=>16051,
+60675=>16051,
+17644=>16052,
+60677=>16052,
+29444=>16053,
+60678=>16053,
+33547=>16054,
+60681=>16054,
+22139=>16055,
+60683=>16055,
+37232=>16056,
+60690=>16056,
+37384=>16057,
+60692=>16057,
+134905=>16058,
+60696=>16058,
+29286=>16059,
+60697=>16059,
+18254=>16060,
+60699=>16060,
+60701=>16061,
+163833=>16061,
+16634=>16062,
+60703=>16062,
+40029=>16063,
+60704=>16063,
+25887=>16064,
+60705=>16064,
+18675=>16065,
+60707=>16065,
+149472=>16066,
+60708=>16066,
+171388=>16067,
+60709=>16067,
+60713=>16069,
+161187=>16069,
+60715=>16070,
+155720=>16071,
+60716=>16071,
+29091=>16072,
+60718=>16072,
+32398=>16073,
+60719=>16073,
+40272=>16074,
+60720=>16074,
+13687=>16075,
+60723=>16075,
+27826=>16076,
+60725=>16076,
+21351=>16077,
+60726=>16077,
+14812=>16078,
+60728=>16078,
+60731=>16079,
+149016=>16079,
+33325=>16080,
+60734=>16080,
+21579=>16081,
+60735=>16081,
+60739=>16082,
+14930=>16083,
+60740=>16083,
+29556=>16084,
+60742=>16084,
+171692=>16085,
+60743=>16085,
+19721=>16086,
+60744=>16086,
+39917=>16087,
+60745=>16087,
+19547=>16089,
+60748=>16089,
+171998=>16090,
+60751=>16090,
+33884=>16091,
+60752=>16091,
+60754=>16092,
+160434=>16092,
+25390=>16093,
+60757=>16093,
+32037=>16094,
+60758=>16094,
+14890=>16095,
+60761=>16095,
+36872=>16096,
+60762=>16096,
+21196=>16097,
+60763=>16097,
+15988=>16098,
+60764=>16098,
+13946=>16099,
+60765=>16099,
+17897=>16100,
+60766=>16100,
+132238=>16101,
+60767=>16101,
+30272=>16102,
+60768=>16102,
+23280=>16103,
+60769=>16103,
+134838=>16104,
+60770=>16104,
+30842=>16105,
+60771=>16105,
+18358=>16106,
+163630=>16106,
+60772=>16106,
+22695=>16107,
+60773=>16107,
+16575=>16108,
+60774=>16108,
+22140=>16109,
+60775=>16109,
+39819=>16110,
+60776=>16110,
+23924=>16111,
+60777=>16111,
+30292=>16112,
+60778=>16112,
+173108=>16113,
+60779=>16113,
+40581=>16114,
+60780=>16114,
+19681=>16115,
+60781=>16115,
+14331=>16117,
+60783=>16117,
+24857=>16118,
+60784=>16118,
+148466=>16119,
+60786=>16119,
+60787=>16120,
+22109=>16121,
+60788=>16121,
+171526=>16122,
+60792=>16122,
+21044=>16123,
+60793=>16123,
+13741=>16124,
+60795=>16124,
+40316=>16126,
+60797=>16126,
+31830=>16127,
+60798=>16127,
+39737=>16128,
+60799=>16128,
+22494=>16129,
+60800=>16129,
+23635=>16130,
+60802=>16130,
+25811=>16131,
+60803=>16131,
+169168=>16132,
+60804=>16132,
+156469=>16133,
+60805=>16133,
+34477=>16134,
+60807=>16134,
+134440=>16135,
+60808=>16135,
+134513=>16136,
+60811=>16136,
+60812=>16137,
+20990=>16138,
+60813=>16138,
+139023=>16139,
+60814=>16139,
+23950=>16140,
+60815=>16140,
+38659=>16141,
+60816=>16141,
+138705=>16142,
+60817=>16142,
+40577=>16143,
+60818=>16143,
+36940=>16144,
+60819=>16144,
+31519=>16145,
+60820=>16145,
+39682=>16146,
+60821=>16146,
+23761=>16147,
+60822=>16147,
+31651=>16148,
+60823=>16148,
+25192=>16149,
+60824=>16149,
+25397=>16150,
+60825=>16150,
+39679=>16151,
+60826=>16151,
+31695=>16152,
+60827=>16152,
+39722=>16153,
+60828=>16153,
+31870=>16154,
+60829=>16154,
+31810=>16156,
+60831=>16156,
+31878=>16157,
+60832=>16157,
+39957=>16158,
+60833=>16158,
+31740=>16159,
+60834=>16159,
+39689=>16160,
+60835=>16160,
+39982=>16162,
+40794=>16163,
+60839=>16163,
+21875=>16164,
+60840=>16164,
+23491=>16165,
+60841=>16165,
+20477=>16166,
+60842=>16166,
+40600=>16167,
+60843=>16167,
+20466=>16168,
+60844=>16168,
+21088=>16169,
+60845=>16169,
+21201=>16170,
+60847=>16170,
+22375=>16171,
+60848=>16171,
+20566=>16172,
+60849=>16172,
+22967=>16173,
+60850=>16173,
+24082=>16174,
+60851=>16174,
+38856=>16175,
+60852=>16175,
+40363=>16176,
+60853=>16176,
+36700=>16177,
+60854=>16177,
+21609=>16178,
+60855=>16178,
+38836=>16179,
+60856=>16179,
+39232=>16180,
+60857=>16180,
+38842=>16181,
+60858=>16181,
+21292=>16182,
+60859=>16182,
+24880=>16183,
+60860=>16183,
+26924=>16184,
+60861=>16184,
+21466=>16185,
+60862=>16185,
+39946=>16186,
+60863=>16186,
+40194=>16187,
+60864=>16187,
+19515=>16188,
+60865=>16188,
+38465=>16189,
+60866=>16189,
+27008=>16190,
+60867=>16190,
+20646=>16191,
+60868=>16191,
+30022=>16192,
+60869=>16192,
+137069=>16193,
+60870=>16193,
+39386=>16194,
+60871=>16194,
+21107=>16195,
+60872=>16195,
+60873=>16196,
+37209=>16197,
+60874=>16197,
+38529=>16198,
+60875=>16198,
+37212=>16199,
+60876=>16199,
+60877=>16200,
+37201=>16201,
+60878=>16201,
+167575=>16202,
+60879=>16202,
+25471=>16203,
+60880=>16203,
+27338=>16204,
+60882=>16204,
+22033=>16205,
+60883=>16205,
+37262=>16206,
+60884=>16206,
+30074=>16207,
+60885=>16207,
+25221=>16208,
+60886=>16208,
+29519=>16209,
+60888=>16209,
+31856=>16210,
+60889=>16210,
+154657=>16211,
+60890=>16211,
+60892=>16212,
+30422=>16213,
+60894=>16213,
+39837=>16214,
+60895=>16214,
+20010=>16215,
+60896=>16215,
+134356=>16216,
+60897=>16216,
+33726=>16217,
+60898=>16217,
+34882=>16218,
+60899=>16218,
+60900=>16219,
+23626=>16220,
+60901=>16220,
+27072=>16221,
+60902=>16221,
+21023=>16224,
+60905=>16224,
+24053=>16225,
+60906=>16225,
+20174=>16226,
+60907=>16226,
+27697=>16227,
+60908=>16227,
+131570=>16228,
+60909=>16228,
+20281=>16229,
+60910=>16229,
+21660=>16230,
+60911=>16230,
+21146=>16232,
+60913=>16232,
+36226=>16233,
+60914=>16233,
+13822=>16234,
+60915=>16234,
+13811=>16236,
+60917=>16236,
+60918=>16237,
+27474=>16238,
+60919=>16238,
+37244=>16239,
+60920=>16239,
+40869=>16240,
+60921=>16240,
+39831=>16241,
+60922=>16241,
+38958=>16242,
+60923=>16242,
+39092=>16243,
+60924=>16243,
+39610=>16244,
+60925=>16244,
+40616=>16245,
+60926=>16245,
+40580=>16246,
+60927=>16246,
+31508=>16247,
+60929=>16247,
+60930=>16248,
+27642=>16249,
+60931=>16249,
+34840=>16250,
+60932=>16250,
+32632=>16251,
+60933=>16251,
+60934=>16252,
+22048=>16253,
+60935=>16253,
+173642=>16254,
+60936=>16254,
+36471=>16255,
+60937=>16255,
+40787=>16256,
+60938=>16256,
+60939=>16257,
+36308=>16258,
+60940=>16258,
+36431=>16259,
+60941=>16259,
+40476=>16260,
+60942=>16260,
+36353=>16261,
+60943=>16261,
+25218=>16262,
+60944=>16262,
+164733=>16263,
+60945=>16263,
+36392=>16264,
+60946=>16264,
+36469=>16265,
+60947=>16265,
+31443=>16266,
+60948=>16266,
+31294=>16267,
+60950=>16267,
+30936=>16268,
+60951=>16268,
+27882=>16269,
+60952=>16269,
+35431=>16270,
+60953=>16270,
+30215=>16271,
+60954=>16271,
+40742=>16272,
+60956=>16272,
+27854=>16273,
+60957=>16273,
+34774=>16274,
+60958=>16274,
+30147=>16275,
+60959=>16275,
+172722=>16276,
+60960=>16276,
+30803=>16277,
+60961=>16277,
+36108=>16278,
+60963=>16278,
+29410=>16279,
+60964=>16279,
+29553=>16280,
+60965=>16280,
+35629=>16281,
+60966=>16281,
+29442=>16282,
+60967=>16282,
+29937=>16283,
+60968=>16283,
+36075=>16284,
+60969=>16284,
+150203=>16285,
+60970=>16285,
+34351=>16286,
+60971=>16286,
+24506=>16287,
+60972=>16287,
+34976=>16288,
+60973=>16288,
+17591=>16289,
+60974=>16289,
+60975=>16290,
+159237=>16291,
+60977=>16291,
+60978=>16292,
+35454=>16293,
+60979=>16293,
+140571=>16294,
+60980=>16294,
+60981=>16295,
+24829=>16296,
+60982=>16296,
+30311=>16297,
+60983=>16297,
+39639=>16298,
+60984=>16298,
+40260=>16299,
+60985=>16299,
+37742=>16300,
+58859=>16300,
+60986=>16300,
+39823=>16301,
+60987=>16301,
+34805=>16302,
+60988=>16302,
+60989=>16303,
+36087=>16305,
+60991=>16305,
+29484=>16306,
+60992=>16306,
+38689=>16307,
+60993=>16307,
+39856=>16308,
+60994=>16308,
+13782=>16309,
+60995=>16309,
+29362=>16310,
+60996=>16310,
+19463=>16311,
+60997=>16311,
+31825=>16312,
+60998=>16312,
+39242=>16313,
+60999=>16313,
+24921=>16314,
+61001=>16314,
+19460=>16315,
+61002=>16315,
+40598=>16316,
+61003=>16316,
+24957=>16317,
+61004=>16317,
+61005=>16318,
+22367=>16319,
+61006=>16319,
+24943=>16320,
+61007=>16320,
+25254=>16321,
+61008=>16321,
+25145=>16322,
+61009=>16322,
+14940=>16324,
+61011=>16324,
+25058=>16325,
+61012=>16325,
+21418=>16326,
+61013=>16326,
+25444=>16327,
+61015=>16327,
+26626=>16328,
+61016=>16328,
+13778=>16329,
+61017=>16329,
+23895=>16330,
+61018=>16330,
+36826=>16331,
+61020=>16331,
+167481=>16332,
+61021=>16332,
+61022=>16333,
+20697=>16334,
+61023=>16334,
+30982=>16335,
+61025=>16335,
+21298=>16336,
+61026=>16336,
+38456=>16337,
+61027=>16337,
+134971=>16338,
+61028=>16338,
+16485=>16339,
+61029=>16339,
+61030=>16340,
+30718=>16341,
+61031=>16341,
+61032=>16342,
+31938=>16343,
+61033=>16343,
+155418=>16344,
+61034=>16344,
+31962=>16345,
+61035=>16345,
+31277=>16346,
+61036=>16346,
+32870=>16347,
+61037=>16347,
+32867=>16348,
+61038=>16348,
+32077=>16349,
+61039=>16349,
+29957=>16350,
+61040=>16350,
+29938=>16351,
+61041=>16351,
+35220=>16352,
+61042=>16352,
+33306=>16353,
+61043=>16353,
+26380=>16354,
+61044=>16354,
+32866=>16355,
+61045=>16355,
+160902=>16356,
+61046=>16356,
+32859=>16357,
+61047=>16357,
+29936=>16358,
+61048=>16358,
+33027=>16359,
+61049=>16359,
+30500=>16360,
+61050=>16360,
+35209=>16361,
+61051=>16361,
+157644=>16362,
+61052=>16362,
+30035=>16363,
+61053=>16363,
+34729=>16364,
+61055=>16364,
+34766=>16365,
+61056=>16365,
+33224=>16366,
+61057=>16366,
+34700=>16367,
+61058=>16367,
+35401=>16368,
+61059=>16368,
+36013=>16369,
+61060=>16369,
+35651=>16370,
+61061=>16370,
+30507=>16371,
+61062=>16371,
+29944=>16372,
+61063=>16372,
+34010=>16373,
+61064=>16373,
+27058=>16374,
+61066=>16374,
+36262=>16375,
+61067=>16375,
+61068=>16376,
+35241=>16377,
+58392=>16377,
+61069=>16377,
+28089=>16379,
+61071=>16379,
+34753=>16380,
+61072=>16380,
+147473=>16381,
+61073=>16381,
+29927=>16382,
+61074=>16382,
+15835=>16383,
+61075=>16383,
+29046=>16384,
+61076=>16384,
+24740=>16385,
+57702=>16385,
+61077=>16385,
+24988=>16386,
+61078=>16386,
+15569=>16387,
+61079=>16387,
+24695=>16389,
+61081=>16389,
+61082=>16390,
+32625=>16391,
+61083=>16391,
+194850=>16392,
+24809=>16393,
+61086=>16393,
+19326=>16394,
+61087=>16394,
+132423=>16395,
+57344=>16395,
+37595=>16396,
+57345=>16396,
+132575=>16397,
+57346=>16397,
+147397=>16398,
+57347=>16398,
+34124=>16399,
+57348=>16399,
+17077=>16400,
+57349=>16400,
+29679=>16401,
+57350=>16401,
+20917=>16402,
+57351=>16402,
+13897=>16403,
+57352=>16403,
+149826=>16404,
+57353=>16404,
+166372=>16405,
+57354=>16405,
+37700=>16406,
+57355=>16406,
+137691=>16407,
+57356=>16407,
+33518=>16408,
+57357=>16408,
+146632=>16409,
+57358=>16409,
+30780=>16410,
+57359=>16410,
+26436=>16411,
+57360=>16411,
+25311=>16412,
+57361=>16412,
+149811=>16413,
+57362=>16413,
+166314=>16414,
+57363=>16414,
+131744=>16415,
+57364=>16415,
+158643=>16416,
+57365=>16416,
+135941=>16417,
+57366=>16417,
+20395=>16418,
+57367=>16418,
+140525=>16419,
+57368=>16419,
+20488=>16420,
+57369=>16420,
+159017=>16421,
+57370=>16421,
+162436=>16422,
+57371=>16422,
+144896=>16423,
+57372=>16423,
+150193=>16424,
+57373=>16424,
+140563=>16425,
+57374=>16425,
+131966=>16427,
+57376=>16427,
+24484=>16428,
+57377=>16428,
+131968=>16429,
+57378=>16429,
+131911=>16430,
+57379=>16430,
+28379=>16431,
+57380=>16431,
+132127=>16432,
+57381=>16432,
+20702=>16433,
+20737=>16434,
+57383=>16434,
+13434=>16435,
+57384=>16435,
+20750=>16436,
+57385=>16436,
+39020=>16437,
+57386=>16437,
+14147=>16438,
+57387=>16438,
+33814=>16439,
+57388=>16439,
+149924=>16440,
+57389=>16440,
+132231=>16441,
+57390=>16441,
+20832=>16442,
+57391=>16442,
+144308=>16443,
+57392=>16443,
+20842=>16444,
+57393=>16444,
+134143=>16445,
+57394=>16445,
+139516=>16446,
+57395=>16446,
+131813=>16447,
+57396=>16447,
+140592=>16448,
+57397=>16448,
+132494=>16449,
+57398=>16449,
+143923=>16450,
+57399=>16450,
+137603=>16451,
+57400=>16451,
+23426=>16452,
+57401=>16452,
+34685=>16453,
+57402=>16453,
+132531=>16454,
+57403=>16454,
+146585=>16455,
+57404=>16455,
+20914=>16456,
+57405=>16456,
+20920=>16457,
+57406=>16457,
+40244=>16458,
+57407=>16458,
+20937=>16459,
+57408=>16459,
+20943=>16460,
+57409=>16460,
+20945=>16461,
+57410=>16461,
+15580=>16462,
+57411=>16462,
+20947=>16463,
+57412=>16463,
+150182=>16464,
+57413=>16464,
+20915=>16465,
+57414=>16465,
+20973=>16468,
+57417=>16468,
+33741=>16469,
+57418=>16469,
+26942=>16470,
+57419=>16470,
+145197=>16471,
+57420=>16471,
+24443=>16472,
+57421=>16472,
+21003=>16473,
+57422=>16473,
+21030=>16474,
+57423=>16474,
+21052=>16475,
+57424=>16475,
+21173=>16476,
+57425=>16476,
+21079=>16477,
+57426=>16477,
+21140=>16478,
+57427=>16478,
+21177=>16479,
+57428=>16479,
+21189=>16480,
+57429=>16480,
+31765=>16481,
+57430=>16481,
+34114=>16482,
+57431=>16482,
+21216=>16483,
+57432=>16483,
+34317=>16484,
+57433=>16484,
+158483=>16485,
+57434=>16485,
+194601=>16486,
+166622=>16487,
+57436=>16487,
+21833=>16488,
+57437=>16488,
+28377=>16489,
+57438=>16489,
+147328=>16490,
+57439=>16490,
+133460=>16491,
+57440=>16491,
+147436=>16492,
+57441=>16492,
+21299=>16493,
+57442=>16493,
+134114=>16495,
+57444=>16495,
+27851=>16496,
+57445=>16496,
+136998=>16497,
+57446=>16497,
+26651=>16498,
+57447=>16498,
+29653=>16499,
+57448=>16499,
+24650=>16500,
+57449=>16500,
+16042=>16501,
+57450=>16501,
+14540=>16502,
+57451=>16502,
+136936=>16503,
+57452=>16503,
+29149=>16504,
+57453=>16504,
+17570=>16505,
+57454=>16505,
+21357=>16506,
+57455=>16506,
+21364=>16507,
+57456=>16507,
+165547=>16508,
+57457=>16508,
+21374=>16509,
+57458=>16509,
+194610=>16510,
+136598=>16511,
+57460=>16511,
+136723=>16512,
+57461=>16512,
+30694=>16513,
+57462=>16513,
+21395=>16514,
+57463=>16514,
+166555=>16515,
+57464=>16515,
+21408=>16516,
+57465=>16516,
+21419=>16517,
+57466=>16517,
+21422=>16518,
+57467=>16518,
+29607=>16519,
+57468=>16519,
+153458=>16520,
+57469=>16520,
+16217=>16521,
+57470=>16521,
+29596=>16522,
+57471=>16522,
+21441=>16523,
+57472=>16523,
+21445=>16524,
+57473=>16524,
+27721=>16525,
+57474=>16525,
+20041=>16526,
+57475=>16526,
+22526=>16527,
+57476=>16527,
+21465=>16528,
+57477=>16528,
+15019=>16529,
+57478=>16529,
+134031=>16530,
+57479=>16530,
+21472=>16531,
+57480=>16531,
+147435=>16532,
+57481=>16532,
+142755=>16533,
+57482=>16533,
+21494=>16534,
+57483=>16534,
+134263=>16535,
+57484=>16535,
+21523=>16536,
+57485=>16536,
+28793=>16537,
+57486=>16537,
+21803=>16538,
+57487=>16538,
+26199=>16539,
+57488=>16539,
+27995=>16540,
+57489=>16540,
+21613=>16541,
+57490=>16541,
+158547=>16542,
+57491=>16542,
+134516=>16543,
+57492=>16543,
+21853=>16544,
+57493=>16544,
+21647=>16545,
+57494=>16545,
+21668=>16546,
+57495=>16546,
+18342=>16547,
+57496=>16547,
+136973=>16548,
+57497=>16548,
+134877=>16549,
+57498=>16549,
+15796=>16550,
+57499=>16550,
+134477=>16551,
+57500=>16551,
+166332=>16552,
+57501=>16552,
+140952=>16553,
+57502=>16553,
+21831=>16554,
+57503=>16554,
+19693=>16555,
+57504=>16555,
+21551=>16556,
+57505=>16556,
+29719=>16557,
+57506=>16557,
+21894=>16558,
+57507=>16558,
+21929=>16559,
+57508=>16559,
+137431=>16561,
+57510=>16561,
+147514=>16562,
+57511=>16562,
+17746=>16563,
+57512=>16563,
+148533=>16564,
+57513=>16564,
+26291=>16565,
+57514=>16565,
+135348=>16566,
+57515=>16566,
+22071=>16567,
+57516=>16567,
+26317=>16568,
+57517=>16568,
+144010=>16569,
+57518=>16569,
+26276=>16570,
+57519=>16570,
+22093=>16572,
+57521=>16572,
+22095=>16573,
+57522=>16573,
+30961=>16574,
+57523=>16574,
+22257=>16575,
+57524=>16575,
+38791=>16576,
+57525=>16576,
+21502=>16577,
+57526=>16577,
+22272=>16578,
+57527=>16578,
+22255=>16579,
+57528=>16579,
+22253=>16580,
+57529=>16580,
+166758=>16581,
+57530=>16581,
+13859=>16582,
+57531=>16582,
+135759=>16583,
+57532=>16583,
+22342=>16584,
+57533=>16584,
+147877=>16585,
+57534=>16585,
+27758=>16586,
+57535=>16586,
+28811=>16587,
+57536=>16587,
+22338=>16588,
+57537=>16588,
+14001=>16589,
+57538=>16589,
+158846=>16590,
+57539=>16590,
+22502=>16591,
+57540=>16591,
+136214=>16592,
+57541=>16592,
+22531=>16593,
+57542=>16593,
+136276=>16594,
+57543=>16594,
+148323=>16595,
+57544=>16595,
+22566=>16596,
+57545=>16596,
+150517=>16597,
+57546=>16597,
+22559=>16598,
+22698=>16599,
+57548=>16599,
+13665=>16600,
+57549=>16600,
+22752=>16601,
+57550=>16601,
+22748=>16602,
+57551=>16602,
+135740=>16603,
+57552=>16603,
+22779=>16604,
+57553=>16604,
+23551=>16605,
+57554=>16605,
+22339=>16606,
+57555=>16606,
+172368=>16607,
+57556=>16607,
+148088=>16608,
+57557=>16608,
+37843=>16609,
+57558=>16609,
+13729=>16610,
+57559=>16610,
+22815=>16611,
+57560=>16611,
+26790=>16612,
+57561=>16612,
+14019=>16613,
+57562=>16613,
+28249=>16614,
+57563=>16614,
+136766=>16615,
+57564=>16615,
+23076=>16616,
+57565=>16616,
+136850=>16618,
+57567=>16618,
+34053=>16619,
+57568=>16619,
+22985=>16620,
+57569=>16620,
+134478=>16621,
+57570=>16621,
+158849=>16622,
+57571=>16622,
+159018=>16623,
+57572=>16623,
+137180=>16624,
+57573=>16624,
+23001=>16625,
+57574=>16625,
+137211=>16626,
+57575=>16626,
+137138=>16627,
+57576=>16627,
+159142=>16628,
+57577=>16628,
+28017=>16629,
+57578=>16629,
+137256=>16630,
+57579=>16630,
+136917=>16631,
+57580=>16631,
+23033=>16632,
+57581=>16632,
+159301=>16633,
+57582=>16633,
+23211=>16634,
+57583=>16634,
+23139=>16635,
+57584=>16635,
+14054=>16636,
+57585=>16636,
+149929=>16637,
+57586=>16637,
+14088=>16639,
+57588=>16639,
+23190=>16640,
+57589=>16640,
+29797=>16641,
+57590=>16641,
+23251=>16642,
+57591=>16642,
+159649=>16643,
+57592=>16643,
+140628=>16644,
+57593=>16644,
+137489=>16645,
+57595=>16645,
+14130=>16646,
+57596=>16646,
+136888=>16647,
+57597=>16647,
+24195=>16648,
+57598=>16648,
+21200=>16649,
+57599=>16649,
+23414=>16650,
+57600=>16650,
+25992=>16651,
+57601=>16651,
+23420=>16652,
+57602=>16652,
+162318=>16653,
+57603=>16653,
+16388=>16654,
+57604=>16654,
+18525=>16655,
+57605=>16655,
+131588=>16656,
+57606=>16656,
+23509=>16657,
+57607=>16657,
+137780=>16658,
+57609=>16658,
+154060=>16659,
+57610=>16659,
+132517=>16660,
+57611=>16660,
+23539=>16661,
+57612=>16661,
+23453=>16662,
+57613=>16662,
+19728=>16663,
+57614=>16663,
+23557=>16664,
+57615=>16664,
+138052=>16665,
+57616=>16665,
+23571=>16666,
+57617=>16666,
+29646=>16667,
+57618=>16667,
+23572=>16668,
+57619=>16668,
+138405=>16669,
+57620=>16669,
+158504=>16670,
+57621=>16670,
+23625=>16671,
+57622=>16671,
+18653=>16672,
+57623=>16672,
+23685=>16673,
+57624=>16673,
+23785=>16674,
+57625=>16674,
+23791=>16675,
+57626=>16675,
+23947=>16676,
+57627=>16676,
+138745=>16677,
+57628=>16677,
+138807=>16678,
+57629=>16678,
+23824=>16679,
+57630=>16679,
+23832=>16680,
+57631=>16680,
+23878=>16681,
+57632=>16681,
+138916=>16682,
+57633=>16682,
+23738=>16683,
+57634=>16683,
+24023=>16684,
+57635=>16684,
+33532=>16685,
+57636=>16685,
+14381=>16686,
+57637=>16686,
+149761=>16687,
+57638=>16687,
+139337=>16688,
+57639=>16688,
+139635=>16689,
+57640=>16689,
+33415=>16690,
+57641=>16690,
+14390=>16691,
+57642=>16691,
+15298=>16692,
+57643=>16692,
+24110=>16693,
+57644=>16693,
+27274=>16694,
+57645=>16694,
+57647=>16696,
+148668=>16697,
+57648=>16697,
+134355=>16698,
+57649=>16698,
+21414=>16699,
+57650=>16699,
+20151=>16700,
+57651=>16700,
+21416=>16702,
+57653=>16702,
+137073=>16703,
+57654=>16703,
+24073=>16704,
+57655=>16704,
+57656=>16705,
+164994=>16706,
+57657=>16706,
+24313=>16707,
+57658=>16707,
+24315=>16708,
+57659=>16708,
+14496=>16709,
+57660=>16709,
+24316=>16710,
+57661=>16710,
+26686=>16711,
+57662=>16711,
+37915=>16712,
+57663=>16712,
+24333=>16713,
+57664=>16713,
+131521=>16714,
+57665=>16714,
+194708=>16715,
+57666=>16715,
+15070=>16716,
+57667=>16716,
+135994=>16717,
+57669=>16717,
+24378=>16718,
+57670=>16718,
+157832=>16719,
+57671=>16719,
+140240=>16720,
+57672=>16720,
+140401=>16721,
+57674=>16721,
+24419=>16722,
+57675=>16722,
+159342=>16723,
+57677=>16723,
+24434=>16724,
+57678=>16724,
+37696=>16725,
+57679=>16725,
+166454=>16726,
+57680=>16726,
+24487=>16727,
+57681=>16727,
+23990=>16728,
+57682=>16728,
+15711=>16729,
+57683=>16729,
+152144=>16730,
+57684=>16730,
+139114=>16731,
+57685=>16731,
+159992=>16732,
+57686=>16732,
+140904=>16733,
+57687=>16733,
+37334=>16734,
+57688=>16734,
+131742=>16735,
+57689=>16735,
+166441=>16736,
+57690=>16736,
+24625=>16737,
+57691=>16737,
+26245=>16738,
+57692=>16738,
+14691=>16739,
+57694=>16739,
+15815=>16740,
+57695=>16740,
+13881=>16741,
+57696=>16741,
+22416=>16742,
+57697=>16742,
+141236=>16743,
+57698=>16743,
+31089=>16744,
+57699=>16744,
+15936=>16745,
+57700=>16745,
+24734=>16746,
+57701=>16746,
+24810=>16748,
+149890=>16749,
+57704=>16749,
+149903=>16750,
+57705=>16750,
+162387=>16751,
+57706=>16751,
+29860=>16752,
+57707=>16752,
+20705=>16753,
+57708=>16753,
+23200=>16754,
+57709=>16754,
+24932=>16755,
+57710=>16755,
+24898=>16756,
+57712=>16756,
+194726=>16757,
+57713=>16757,
+159442=>16758,
+57714=>16758,
+24961=>16759,
+57715=>16759,
+20980=>16760,
+57716=>16760,
+132694=>16761,
+57717=>16761,
+24967=>16762,
+57718=>16762,
+23466=>16763,
+57719=>16763,
+147383=>16764,
+57720=>16764,
+141407=>16765,
+57721=>16765,
+25043=>16766,
+57722=>16766,
+166813=>16767,
+57723=>16767,
+170333=>16768,
+57724=>16768,
+25040=>16769,
+57725=>16769,
+14642=>16770,
+57726=>16770,
+141696=>16771,
+57727=>16771,
+141505=>16772,
+57728=>16772,
+24611=>16773,
+57729=>16773,
+24924=>16774,
+57730=>16774,
+25886=>16775,
+57731=>16775,
+25483=>16776,
+57732=>16776,
+131352=>16777,
+57733=>16777,
+25285=>16778,
+57734=>16778,
+137072=>16779,
+57735=>16779,
+25301=>16780,
+57736=>16780,
+142861=>16781,
+57737=>16781,
+25452=>16782,
+57738=>16782,
+149983=>16783,
+57739=>16783,
+14871=>16784,
+57740=>16784,
+25656=>16785,
+57741=>16785,
+25592=>16786,
+57742=>16786,
+136078=>16787,
+57743=>16787,
+137212=>16788,
+57744=>16788,
+28554=>16789,
+57746=>16789,
+142902=>16790,
+57747=>16790,
+153373=>16792,
+57750=>16792,
+25825=>16793,
+57751=>16793,
+25829=>16794,
+57752=>16794,
+38011=>16795,
+57753=>16795,
+14950=>16796,
+57754=>16796,
+25658=>16797,
+57755=>16797,
+14935=>16798,
+57756=>16798,
+25933=>16799,
+57757=>16799,
+28438=>16800,
+57758=>16800,
+150056=>16801,
+57759=>16801,
+150051=>16802,
+57760=>16802,
+25989=>16803,
+57761=>16803,
+25965=>16804,
+57762=>16804,
+25951=>16805,
+57763=>16805,
+26037=>16807,
+57765=>16807,
+149824=>16808,
+57766=>16808,
+19255=>16809,
+57767=>16809,
+26065=>16810,
+57768=>16810,
+16600=>16811,
+57769=>16811,
+137257=>16812,
+57770=>16812,
+57771=>16813,
+26083=>16814,
+57772=>16814,
+24543=>16815,
+57773=>16815,
+144384=>16816,
+57774=>16816,
+26136=>16817,
+57775=>16817,
+57776=>16818,
+143863=>16818,
+57777=>16819,
+143864=>16819,
+26180=>16820,
+57778=>16820,
+57779=>16821,
+143780=>16821,
+57780=>16822,
+143781=>16822,
+26187=>16823,
+57781=>16823,
+134773=>16824,
+57782=>16824,
+26215=>16825,
+57783=>16825,
+152038=>16826,
+57784=>16826,
+26227=>16827,
+57785=>16827,
+64018=>16828,
+143921=>16829,
+57788=>16829,
+165364=>16830,
+57789=>16830,
+143816=>16831,
+57790=>16831,
+152339=>16832,
+57791=>16832,
+30661=>16833,
+57792=>16833,
+141559=>16834,
+57793=>16834,
+39332=>16835,
+57794=>16835,
+26370=>16836,
+57795=>16836,
+148380=>16837,
+57796=>16837,
+150049=>16838,
+57797=>16838,
+27130=>16839,
+57799=>16839,
+145346=>16840,
+57800=>16840,
+194779=>16841,
+26471=>16842,
+57802=>16842,
+26466=>16843,
+57803=>16843,
+147917=>16844,
+57804=>16844,
+168173=>16845,
+57805=>16845,
+26583=>16846,
+57806=>16846,
+17641=>16847,
+57807=>16847,
+26658=>16848,
+57808=>16848,
+28240=>16849,
+57809=>16849,
+37436=>16850,
+57810=>16850,
+26625=>16851,
+57811=>16851,
+144358=>16852,
+57812=>16852,
+159136=>16853,
+57813=>16853,
+26717=>16854,
+57814=>16854,
+144495=>16855,
+57815=>16855,
+27105=>16856,
+57816=>16856,
+27147=>16857,
+57817=>16857,
+166623=>16858,
+57818=>16858,
+26995=>16859,
+57819=>16859,
+26819=>16860,
+57820=>16860,
+144845=>16861,
+57821=>16861,
+26881=>16862,
+57822=>16862,
+26880=>16863,
+57823=>16863,
+14849=>16864,
+57825=>16864,
+144956=>16865,
+57826=>16865,
+15232=>16866,
+57827=>16866,
+26540=>16867,
+57828=>16867,
+26977=>16868,
+57829=>16868,
+166474=>16869,
+57830=>16869,
+17148=>16870,
+57831=>16870,
+26934=>16871,
+57832=>16871,
+27032=>16872,
+57833=>16872,
+15265=>16873,
+57834=>16873,
+132041=>16874,
+57835=>16874,
+33635=>16875,
+57836=>16875,
+20624=>16876,
+57837=>16876,
+27129=>16877,
+57838=>16877,
+144985=>16878,
+57839=>16878,
+139562=>16879,
+57840=>16879,
+27205=>16880,
+57841=>16880,
+145155=>16881,
+57842=>16881,
+27293=>16882,
+57843=>16882,
+15347=>16883,
+57844=>16883,
+26545=>16884,
+57845=>16884,
+27336=>16885,
+57846=>16885,
+168348=>16886,
+57847=>16886,
+15373=>16887,
+57848=>16887,
+27421=>16888,
+57849=>16888,
+133411=>16889,
+57850=>16889,
+24798=>16890,
+60308=>16890,
+57851=>16890,
+27445=>16891,
+57852=>16891,
+27508=>16892,
+57853=>16892,
+141261=>16893,
+57854=>16893,
+28341=>16894,
+57855=>16894,
+57856=>16895,
+146139=>16895,
+137560=>16897,
+57858=>16897,
+14144=>16898,
+57859=>16898,
+21537=>16899,
+57860=>16899,
+146266=>16900,
+57861=>16900,
+27617=>16901,
+57862=>16901,
+147196=>16902,
+57863=>16902,
+27612=>16903,
+57864=>16903,
+27703=>16904,
+57865=>16904,
+140427=>16905,
+57866=>16905,
+149745=>16906,
+57867=>16906,
+158545=>16907,
+57868=>16907,
+27738=>16908,
+57869=>16908,
+33318=>16909,
+57870=>16909,
+27769=>16910,
+57871=>16910,
+146876=>16911,
+57872=>16911,
+17605=>16912,
+57873=>16912,
+146877=>16913,
+57874=>16913,
+147876=>16914,
+57875=>16914,
+149772=>16915,
+57876=>16915,
+149760=>16916,
+57877=>16916,
+146633=>16917,
+57878=>16917,
+14053=>16918,
+57879=>16918,
+15595=>16919,
+57880=>16919,
+134450=>16920,
+57881=>16920,
+39811=>16921,
+57882=>16921,
+143865=>16922,
+57883=>16922,
+140433=>16923,
+57884=>16923,
+32655=>16924,
+57885=>16924,
+26679=>16925,
+57886=>16925,
+159013=>16926,
+57887=>16926,
+159137=>16927,
+57888=>16927,
+159211=>16928,
+57889=>16928,
+28054=>16929,
+57890=>16929,
+27996=>16930,
+57891=>16930,
+28284=>16931,
+57892=>16931,
+28420=>16932,
+57893=>16932,
+149887=>16933,
+57894=>16933,
+147589=>16934,
+57895=>16934,
+159346=>16935,
+57896=>16935,
+34099=>16936,
+57897=>16936,
+159604=>16937,
+57898=>16937,
+20935=>16938,
+57899=>16938,
+33838=>16941,
+57902=>16941,
+166689=>16942,
+57903=>16942,
+194824=>16943,
+146991=>16944,
+57905=>16944,
+29779=>16945,
+57906=>16945,
+147330=>16946,
+57907=>16946,
+31180=>16947,
+57908=>16947,
+28239=>16948,
+57909=>16948,
+23185=>16949,
+57910=>16949,
+143435=>16950,
+57911=>16950,
+28664=>16951,
+57912=>16951,
+14093=>16952,
+57913=>16952,
+28573=>16953,
+57914=>16953,
+146992=>16954,
+57915=>16954,
+28410=>16955,
+57916=>16955,
+136343=>16956,
+57917=>16956,
+147517=>16957,
+57918=>16957,
+17749=>16958,
+57919=>16958,
+37872=>16959,
+57920=>16959,
+28484=>16960,
+57921=>16960,
+28508=>16961,
+57922=>16961,
+15694=>16962,
+57923=>16962,
+28532=>16963,
+57924=>16963,
+168304=>16964,
+57925=>16964,
+15675=>16965,
+57926=>16965,
+28575=>16966,
+57927=>16966,
+147780=>16967,
+57928=>16967,
+28627=>16968,
+57929=>16968,
+147601=>16969,
+57930=>16969,
+147797=>16970,
+57931=>16970,
+147513=>16971,
+57932=>16971,
+147440=>16972,
+57933=>16972,
+147380=>16973,
+57934=>16973,
+147775=>16974,
+57935=>16974,
+20959=>16975,
+57936=>16975,
+57937=>16976,
+147798=>16976,
+57938=>16977,
+147799=>16977,
+147776=>16978,
+57939=>16978,
+156125=>16979,
+57940=>16979,
+28747=>16980,
+57941=>16980,
+28798=>16981,
+57942=>16981,
+28839=>16982,
+57943=>16982,
+28876=>16984,
+57945=>16984,
+28885=>16985,
+57946=>16985,
+28886=>16986,
+57947=>16986,
+28895=>16987,
+57948=>16987,
+16644=>16988,
+57949=>16988,
+15848=>16989,
+57950=>16989,
+29108=>16990,
+57951=>16990,
+29078=>16991,
+57952=>16991,
+148087=>16992,
+57953=>16992,
+28971=>16993,
+57954=>16993,
+28997=>16994,
+57955=>16994,
+23176=>16995,
+57956=>16995,
+29002=>16996,
+57957=>16996,
+64072=>16997,
+148325=>16998,
+57960=>16998,
+29007=>16999,
+57961=>16999,
+37730=>17000,
+57962=>17000,
+148161=>17001,
+57963=>17001,
+28972=>17002,
+57964=>17002,
+148570=>17003,
+57965=>17003,
+150055=>17004,
+57966=>17004,
+150050=>17005,
+57967=>17005,
+29114=>17006,
+57968=>17006,
+166888=>17007,
+57969=>17007,
+28861=>17008,
+57970=>17008,
+29198=>17009,
+57971=>17009,
+37954=>17010,
+57972=>17010,
+29205=>17011,
+57973=>17011,
+22801=>17012,
+57974=>17012,
+37955=>17013,
+57975=>17013,
+29220=>17014,
+57976=>17014,
+37697=>17015,
+57977=>17015,
+153093=>17016,
+57978=>17016,
+29230=>17017,
+57979=>17017,
+29248=>17018,
+57980=>17018,
+149876=>17019,
+57981=>17019,
+26813=>17020,
+57982=>17020,
+29269=>17021,
+57983=>17021,
+29271=>17022,
+57984=>17022,
+15957=>17023,
+57985=>17023,
+143428=>17024,
+57986=>17024,
+26637=>17025,
+57987=>17025,
+28477=>17026,
+57988=>17026,
+29314=>17027,
+57989=>17027,
+29483=>17029,
+57991=>17029,
+149539=>17030,
+57992=>17030,
+165931=>17031,
+57993=>17031,
+18669=>17032,
+57994=>17032,
+165892=>17033,
+57995=>17033,
+29480=>17034,
+57996=>17034,
+29486=>17035,
+57997=>17035,
+29647=>17036,
+57998=>17036,
+29610=>17037,
+57999=>17037,
+134202=>17038,
+58000=>17038,
+158254=>17039,
+58001=>17039,
+29641=>17040,
+58002=>17040,
+29769=>17041,
+58003=>17041,
+147938=>17042,
+58004=>17042,
+136935=>17043,
+58005=>17043,
+150052=>17044,
+58006=>17044,
+26147=>17045,
+58007=>17045,
+14021=>17046,
+58008=>17046,
+149943=>17047,
+58009=>17047,
+149901=>17048,
+58010=>17048,
+150011=>17049,
+58011=>17049,
+29687=>17050,
+58012=>17050,
+29717=>17051,
+58013=>17051,
+26883=>17052,
+58014=>17052,
+150054=>17053,
+58015=>17053,
+29753=>17054,
+58016=>17054,
+16087=>17055,
+58018=>17055,
+194863=>17056,
+141485=>17057,
+58020=>17057,
+29792=>17058,
+58021=>17058,
+167602=>17059,
+58022=>17059,
+29767=>17060,
+58023=>17060,
+29668=>17061,
+58024=>17061,
+29814=>17062,
+58025=>17062,
+33721=>17063,
+58026=>17063,
+29804=>17064,
+58027=>17064,
+29812=>17065,
+58029=>17065,
+37873=>17066,
+58030=>17066,
+27180=>17067,
+58031=>17067,
+29826=>17068,
+58032=>17068,
+18771=>17069,
+58033=>17069,
+150156=>17070,
+58034=>17070,
+147807=>17071,
+58035=>17071,
+150137=>17072,
+58036=>17072,
+166799=>17073,
+58037=>17073,
+23366=>17074,
+58038=>17074,
+166915=>17075,
+58039=>17075,
+137374=>17076,
+58040=>17076,
+29896=>17077,
+58041=>17077,
+137608=>17078,
+58042=>17078,
+29966=>17079,
+58043=>17079,
+29982=>17080,
+58045=>17080,
+167641=>17081,
+58046=>17081,
+137803=>17082,
+58047=>17082,
+23511=>17083,
+58048=>17083,
+167596=>17084,
+58049=>17084,
+37765=>17085,
+58050=>17085,
+30029=>17086,
+58051=>17086,
+30026=>17087,
+58052=>17087,
+30055=>17088,
+58053=>17088,
+30062=>17089,
+58054=>17089,
+151426=>17090,
+58055=>17090,
+16132=>17091,
+58056=>17091,
+150803=>17092,
+58057=>17092,
+30094=>17093,
+58058=>17093,
+29789=>17094,
+58059=>17094,
+30110=>17095,
+58060=>17095,
+30132=>17096,
+58061=>17096,
+30210=>17097,
+58062=>17097,
+30252=>17098,
+58063=>17098,
+30289=>17099,
+58064=>17099,
+30287=>17100,
+58065=>17100,
+30319=>17101,
+58066=>17101,
+58067=>17102,
+156661=>17103,
+58068=>17103,
+30352=>17104,
+58069=>17104,
+33263=>17105,
+58070=>17105,
+14328=>17106,
+58071=>17106,
+157969=>17107,
+58072=>17107,
+157966=>17108,
+58073=>17108,
+30369=>17109,
+58074=>17109,
+30373=>17110,
+58075=>17110,
+30391=>17111,
+58076=>17111,
+30412=>17112,
+58077=>17112,
+159647=>17113,
+58078=>17113,
+33890=>17114,
+58079=>17114,
+151709=>17115,
+58080=>17115,
+151933=>17116,
+58081=>17116,
+138780=>17117,
+58082=>17117,
+30494=>17118,
+58083=>17118,
+30502=>17119,
+58084=>17119,
+30528=>17120,
+58085=>17120,
+25775=>17121,
+58086=>17121,
+152096=>17122,
+58087=>17122,
+30552=>17123,
+58088=>17123,
+144044=>17124,
+58089=>17124,
+30639=>17125,
+58090=>17125,
+166244=>17126,
+58091=>17126,
+166248=>17127,
+58092=>17127,
+136897=>17128,
+58093=>17128,
+30708=>17129,
+58094=>17129,
+26826=>17131,
+58098=>17131,
+30895=>17132,
+58099=>17132,
+30919=>17133,
+58100=>17133,
+30931=>17134,
+58101=>17134,
+38565=>17135,
+58102=>17135,
+31022=>17136,
+58103=>17136,
+153056=>17137,
+58104=>17137,
+30935=>17138,
+58105=>17138,
+31028=>17139,
+58106=>17139,
+30897=>17140,
+58107=>17140,
+161292=>17141,
+58108=>17141,
+36792=>17142,
+58109=>17142,
+34948=>17143,
+58110=>17143,
+140828=>17144,
+58113=>17144,
+31110=>17145,
+58114=>17145,
+35072=>17146,
+58115=>17146,
+26882=>17147,
+58116=>17147,
+31104=>17148,
+58117=>17148,
+153687=>17149,
+58118=>17149,
+31133=>17150,
+58119=>17150,
+162617=>17151,
+58120=>17151,
+31036=>17152,
+58121=>17152,
+31145=>17153,
+58122=>17153,
+28202=>17154,
+58123=>17154,
+160038=>17155,
+58124=>17155,
+16040=>17156,
+58125=>17156,
+31174=>17157,
+58126=>17157,
+168205=>17158,
+58127=>17158,
+31188=>17159,
+58128=>17159,
+21797=>17161,
+62526=>17161,
+134210=>17163,
+62528=>17163,
+134421=>17164,
+62529=>17164,
+151851=>17165,
+62530=>17165,
+21904=>17166,
+62531=>17166,
+142534=>17167,
+62532=>17167,
+14828=>17168,
+62533=>17168,
+131905=>17169,
+62534=>17169,
+36422=>17170,
+62535=>17170,
+150968=>17171,
+62536=>17171,
+169189=>17172,
+62537=>17172,
+164030=>17174,
+62539=>17174,
+30586=>17175,
+62540=>17175,
+142392=>17176,
+62541=>17176,
+14900=>17177,
+62542=>17177,
+18389=>17178,
+62543=>17178,
+164189=>17179,
+62544=>17179,
+158194=>17180,
+62545=>17180,
+151018=>17181,
+62546=>17181,
+25821=>17182,
+62547=>17182,
+134524=>17183,
+62548=>17183,
+135092=>17184,
+62549=>17184,
+134357=>17185,
+62550=>17185,
+25741=>17187,
+62552=>17187,
+36478=>17188,
+62553=>17188,
+134806=>17189,
+62554=>17189,
+135012=>17191,
+62556=>17191,
+142505=>17192,
+62557=>17192,
+164438=>17193,
+62558=>17193,
+148691=>17194,
+62559=>17194,
+134470=>17196,
+62561=>17196,
+170573=>17197,
+62562=>17197,
+164073=>17198,
+62563=>17198,
+18420=>17199,
+62564=>17199,
+151207=>17200,
+62565=>17200,
+142530=>17201,
+62566=>17201,
+39602=>17202,
+62567=>17202,
+14951=>17203,
+62568=>17203,
+169460=>17204,
+62569=>17204,
+16365=>17205,
+62570=>17205,
+13574=>17206,
+62571=>17206,
+152263=>17207,
+62572=>17207,
+169940=>17208,
+62573=>17208,
+142660=>17210,
+62575=>17210,
+40302=>17211,
+62576=>17211,
+38933=>17212,
+62577=>17212,
+17369=>17214,
+62579=>17214,
+25780=>17216,
+62581=>17216,
+21731=>17217,
+62582=>17217,
+62584=>17219,
+142282=>17219,
+14843=>17221,
+62586=>17221,
+157402=>17223,
+62588=>17223,
+157462=>17224,
+62589=>17224,
+162208=>17225,
+62590=>17225,
+25834=>17226,
+62591=>17226,
+151634=>17227,
+62592=>17227,
+134211=>17228,
+62593=>17228,
+36456=>17229,
+62594=>17229,
+166732=>17231,
+62596=>17231,
+132913=>17232,
+62597=>17232,
+18443=>17234,
+62599=>17234,
+131497=>17235,
+62600=>17235,
+16378=>17236,
+62601=>17236,
+22643=>17237,
+62602=>17237,
+142733=>17238,
+62603=>17238,
+148936=>17240,
+62605=>17240,
+132348=>17241,
+62606=>17241,
+155799=>17242,
+62607=>17242,
+134988=>17243,
+62608=>17243,
+21881=>17245,
+62610=>17245,
+17338=>17247,
+62612=>17247,
+19124=>17249,
+62614=>17249,
+141926=>17250,
+62615=>17250,
+135325=>17251,
+62616=>17251,
+33194=>17252,
+62617=>17252,
+39157=>17253,
+62618=>17253,
+134556=>17254,
+62619=>17254,
+25465=>17255,
+62620=>17255,
+14846=>17256,
+62621=>17256,
+141173=>17257,
+62622=>17257,
+36288=>17258,
+62623=>17258,
+22177=>17259,
+62624=>17259,
+25724=>17260,
+62625=>17260,
+15939=>17261,
+62626=>17261,
+173569=>17263,
+62628=>17263,
+134665=>17264,
+62629=>17264,
+142031=>17265,
+62630=>17265,
+135368=>17268,
+62633=>17268,
+145858=>17269,
+62634=>17269,
+14738=>17270,
+62635=>17270,
+14854=>17271,
+62636=>17271,
+164507=>17272,
+62637=>17272,
+13688=>17273,
+62638=>17273,
+155209=>17274,
+62639=>17274,
+139463=>17275,
+62640=>17275,
+142514=>17278,
+62643=>17278,
+169760=>17279,
+62644=>17279,
+13500=>17280,
+62645=>17280,
+27709=>17281,
+62646=>17281,
+151099=>17282,
+62647=>17282,
+161140=>17285,
+62650=>17285,
+142987=>17286,
+62651=>17286,
+139784=>17287,
+62652=>17287,
+173659=>17288,
+62653=>17288,
+167117=>17289,
+62654=>17289,
+134778=>17290,
+62655=>17290,
+134196=>17291,
+62656=>17291,
+161337=>17292,
+62683=>17292,
+142286=>17293,
+62684=>17293,
+62687=>17294,
+142417=>17294,
+14872=>17295,
+62689=>17295,
+62691=>17296,
+135367=>17296,
+62693=>17297,
+173618=>17297,
+167122=>17298,
+62695=>17298,
+167321=>17299,
+62696=>17299,
+167114=>17300,
+62697=>17300,
+38314=>17301,
+62698=>17301,
+62706=>17303,
+161630=>17303,
+28992=>17304,
+62708=>17304,
+20822=>17306,
+62385=>17306,
+20222=>17307,
+20616=>17308,
+62487=>17308,
+13459=>17310,
+62489=>17310,
+20870=>17311,
+62491=>17311,
+24130=>17312,
+63037=>17312,
+20997=>17313,
+62495=>17313,
+21031=>17314,
+62436=>17314,
+21113=>17315,
+62497=>17315,
+194600=>17316,
+13651=>17317,
+62504=>17317,
+21442=>17318,
+62505=>17318,
+21343=>17319,
+62715=>17319,
+21823=>17321,
+62520=>17321,
+21976=>17323,
+59986=>17323,
+13789=>17324,
+62722=>17324,
+22049=>17325,
+63067=>17325,
+22100=>17327,
+60044=>17327,
+60148=>17328,
+135291=>17328,
+60153=>17330,
+135379=>17330,
+61095=>17332,
+135934=>17332,
+14265=>17335,
+60104=>17335,
+23745=>17336,
+61099=>17336,
+23829=>17337,
+63066=>17337,
+23894=>17338,
+63030=>17338,
+14392=>17339,
+63036=>17339,
+20097=>17340,
+62477=>17340,
+24253=>17341,
+63038=>17341,
+14612=>17342,
+63042=>17342,
+25017=>17343,
+63050=>17343,
+25232=>17344,
+63054=>17344,
+25368=>17345,
+63056=>17345,
+25690=>17346,
+63063=>17346,
+25745=>17347,
+62381=>17347,
+33133=>17348,
+62709=>17348,
+33156=>17349,
+59922=>17349,
+33171=>17350,
+59924=>17350,
+26624=>17351,
+63080=>17351,
+15292=>17352,
+63093=>17352,
+29327=>17353,
+60517=>17353,
+29389=>17354,
+59781=>17354,
+149487=>17355,
+29497=>17356,
+59785=>17356,
+30018=>17357,
+59811=>17357,
+30172=>17358,
+59817=>17358,
+16320=>17359,
+59818=>17359,
+60278=>17360,
+151205=>17360,
+16343=>17361,
+59820=>17361,
+30336=>17363,
+30348=>17364,
+59824=>17364,
+151388=>17364,
+16552=>17365,
+59845=>17365,
+30777=>17366,
+59846=>17366,
+16643=>17367,
+59855=>17367,
+31377=>17368,
+59863=>17368,
+31771=>17369,
+59876=>17369,
+31981=>17370,
+59884=>17370,
+32659=>17371,
+62658=>17371,
+32686=>17372,
+59892=>17372,
+33535=>17374,
+59936=>17374,
+22623=>17375,
+59981=>17375,
+34482=>17376,
+59960=>17376,
+17836=>17377,
+34699=>17378,
+59963=>17378,
+35143=>17379,
+59969=>17379,
+35369=>17381,
+59972=>17381,
+36465=>17383,
+59988=>17383,
+60484=>17384,
+164233=>17384,
+36528=>17385,
+59990=>17385,
+37214=>17387,
+62443=>17387,
+37260=>17388,
+62441=>17388,
+39182=>17389,
+60051=>17389,
+39196=>17390,
+60054=>17390,
+39809=>17393,
+60066=>17393,
+40384=>17394,
+60080=>17394,
+40339=>17395,
+60078=>17395,
+40620=>17396,
+60085=>17396,
+19857=>17397,
+60540=>17397,
+37818=>17399,
+40571=>17400,
+60084=>17400,
+28809=>17401,
+63148=>17401,
+29512=>17402,
+59788=>17402,
+31129=>17404,
+59858=>17404,
+36791=>17405,
+59997=>17405,
+39234=>17407,
+60056=>17407,
+8364=>17601,
+12443=>17606,
+63518=>17606,
+12444=>17607,
+63519=>17607,
+11904=>17608,
+63520=>17608,
+12736=>17609,
+62211=>17609,
+12737=>17610,
+62212=>17610,
+12738=>17611,
+62213=>17611,
+12739=>17612,
+62214=>17612,
+12740=>17613,
+62215=>17613,
+131340=>17614,
+62216=>17614,
+12741=>17615,
+62217=>17615,
+131281=>17616,
+62218=>17616,
+131277=>17617,
+62219=>17617,
+12742=>17618,
+62220=>17618,
+12743=>17619,
+62221=>17619,
+131275=>17620,
+62222=>17620,
+139240=>17621,
+62223=>17621,
+12744=>17622,
+62224=>17622,
+131274=>17623,
+62225=>17623,
+12745=>17624,
+62226=>17624,
+12746=>17625,
+62227=>17625,
+12747=>17626,
+62228=>17626,
+12748=>17627,
+62229=>17627,
+131342=>17628,
+62230=>17628,
+12749=>17629,
+62231=>17629,
+12750=>17630,
+62232=>17630,
+62776=>17631,
+62777=>17632,
+138177=>17633,
+62778=>17633,
+194680=>17634,
+62779=>17634,
+12205=>17635,
+38737=>17635,
+62780=>17635,
+131206=>17636,
+62781=>17636,
+20059=>17637,
+62782=>17637,
+20155=>17638,
+62783=>17638,
+13630=>17639,
+62784=>17639,
+23587=>17640,
+62785=>17640,
+24401=>17641,
+62786=>17641,
+24516=>17642,
+62787=>17642,
+14586=>17643,
+62788=>17643,
+25164=>17644,
+62789=>17644,
+25909=>17645,
+62790=>17645,
+27514=>17646,
+62791=>17646,
+27701=>17647,
+62792=>17647,
+27706=>17648,
+62793=>17648,
+28780=>17649,
+62794=>17649,
+29227=>17650,
+62795=>17650,
+20012=>17651,
+62796=>17651,
+29357=>17652,
+62797=>17652,
+149737=>17653,
+62798=>17653,
+32594=>17654,
+62799=>17654,
+31035=>17655,
+62800=>17655,
+31993=>17656,
+62801=>17656,
+32595=>17657,
+62802=>17657,
+156266=>17658,
+62803=>17658,
+13505=>17659,
+62804=>17659,
+156491=>17660,
+62806=>17660,
+32770=>17661,
+62807=>17661,
+32896=>17662,
+62808=>17662,
+157202=>17663,
+62809=>17663,
+158033=>17664,
+62810=>17664,
+21341=>17665,
+62811=>17665,
+34916=>17666,
+62812=>17666,
+35265=>17667,
+62813=>17667,
+161970=>17668,
+62814=>17668,
+35744=>17669,
+62815=>17669,
+36125=>17670,
+62816=>17670,
+38021=>17671,
+62817=>17671,
+38264=>17672,
+62818=>17672,
+38271=>17673,
+62819=>17673,
+38376=>17674,
+62820=>17674,
+167439=>17675,
+62821=>17675,
+38886=>17676,
+62822=>17676,
+39029=>17677,
+62823=>17677,
+39118=>17678,
+62824=>17678,
+39134=>17679,
+62825=>17679,
+39267=>17680,
+62826=>17680,
+170000=>17681,
+62827=>17681,
+40060=>17682,
+62828=>17682,
+40479=>17683,
+62829=>17683,
+40644=>17684,
+62830=>17684,
+27503=>17685,
+62831=>17685,
+63751=>17686,
+62832=>17686,
+20023=>17687,
+62833=>17687,
+131207=>17688,
+62834=>17688,
+38429=>17689,
+62835=>17689,
+25143=>17690,
+62836=>17690,
+38050=>17691,
+62837=>17691,
+11908=>17692,
+63521=>17692,
+11910=>17693,
+63522=>17693,
+11911=>17694,
+63523=>17694,
+11912=>17695,
+63524=>17695,
+11914=>17696,
+63525=>17696,
+11916=>17697,
+63526=>17697,
+11917=>17698,
+63527=>17698,
+11925=>17699,
+63528=>17699,
+11932=>17700,
+63529=>17700,
+11941=>17701,
+63531=>17701,
+11943=>17702,
+63532=>17702,
+11946=>17703,
+63533=>17703,
+11948=>17704,
+63534=>17704,
+11950=>17705,
+63535=>17705,
+11958=>17706,
+63536=>17706,
+11964=>17707,
+63537=>17707,
+11966=>17708,
+63538=>17708,
+11978=>17709,
+63540=>17709,
+11980=>17710,
+63541=>17710,
+11981=>17711,
+63542=>17711,
+11983=>17712,
+63543=>17712,
+11990=>17713,
+63544=>17713,
+11991=>17714,
+63545=>17714,
+11998=>17715,
+63546=>17715,
+172969=>17716,
+62368=>17716,
+135493=>17717,
+62369=>17717,
+25866=>17718,
+62371=>17718,
+20029=>17719,
+62374=>17719,
+28381=>17720,
+62375=>17720,
+40270=>17721,
+62376=>17721,
+37343=>17722,
+62377=>17722,
+62380=>17723,
+161589=>17723,
+20250=>17724,
+62382=>17724,
+20264=>17725,
+62383=>17725,
+20392=>17726,
+62384=>17726,
+20852=>17727,
+62386=>17727,
+20892=>17728,
+62387=>17728,
+20964=>17729,
+62388=>17729,
+21153=>17730,
+62389=>17730,
+21160=>17731,
+62390=>17731,
+21307=>17732,
+62391=>17732,
+21326=>17733,
+62392=>17733,
+21457=>17734,
+62393=>17734,
+21464=>17735,
+62394=>17735,
+22242=>17736,
+62395=>17736,
+22768=>17737,
+62396=>17737,
+22788=>17738,
+62397=>17738,
+22791=>17739,
+62398=>17739,
+22834=>17740,
+62399=>17740,
+22836=>17741,
+62400=>17741,
+23398=>17742,
+62401=>17742,
+23454=>17743,
+62402=>17743,
+23455=>17744,
+62403=>17744,
+23706=>17745,
+62404=>17745,
+24198=>17746,
+62405=>17746,
+24635=>17747,
+62406=>17747,
+25993=>17748,
+62407=>17748,
+26622=>17749,
+62408=>17749,
+26628=>17750,
+62409=>17750,
+26725=>17751,
+62410=>17751,
+27982=>17752,
+62411=>17752,
+28860=>17753,
+62412=>17753,
+30005=>17754,
+62413=>17754,
+32420=>17755,
+62414=>17755,
+32428=>17756,
+62415=>17756,
+32442=>17757,
+62416=>17757,
+32455=>17758,
+62417=>17758,
+32463=>17759,
+62418=>17759,
+32479=>17760,
+62419=>17760,
+32518=>17761,
+62420=>17761,
+32567=>17762,
+62421=>17762,
+33402=>17763,
+62422=>17763,
+33487=>17764,
+62423=>17764,
+33647=>17765,
+62424=>17765,
+35270=>17766,
+62425=>17766,
+35774=>17767,
+62426=>17767,
+35810=>17768,
+62427=>17768,
+36710=>17769,
+62428=>17769,
+36711=>17770,
+62429=>17770,
+36718=>17771,
+62430=>17771,
+29713=>17772,
+62431=>17772,
+31996=>17773,
+62432=>17773,
+32205=>17774,
+62433=>17774,
+26950=>17775,
+62434=>17775,
+31433=>17776,
+62435=>17776,
+30904=>17777,
+62442=>17777,
+32956=>17778,
+62444=>17778,
+36107=>17779,
+62446=>17779,
+33014=>17780,
+62447=>17780,
+133607=>17781,
+62448=>17781,
+32927=>17782,
+62451=>17782,
+40647=>17783,
+62452=>17783,
+19661=>17784,
+62453=>17784,
+40393=>17785,
+62454=>17785,
+40460=>17786,
+62455=>17786,
+19518=>17787,
+62456=>17787,
+171510=>17788,
+62457=>17788,
+159758=>17789,
+62458=>17789,
+40458=>17790,
+62459=>17790,
+172339=>17791,
+62460=>17791,
+13761=>17792,
+62461=>17792,
+28314=>17793,
+62463=>17793,
+33342=>17794,
+62464=>17794,
+29977=>17795,
+62465=>17795,
+18705=>17796,
+62467=>17796,
+39532=>17797,
+62468=>17797,
+39567=>17798,
+62469=>17798,
+40857=>17799,
+62470=>17799,
+31111=>17800,
+62471=>17800,
+164972=>17801,
+62472=>17801,
+138698=>17802,
+62473=>17802,
+132560=>17803,
+62474=>17803,
+142054=>17804,
+62475=>17804,
+20004=>17805,
+62476=>17805,
+20096=>17806,
+62478=>17806,
+20103=>17807,
+62479=>17807,
+20159=>17808,
+62480=>17808,
+20203=>17809,
+62481=>17809,
+20279=>17810,
+62482=>17810,
+13388=>17811,
+62483=>17811,
+20413=>17812,
+62484=>17812,
+15944=>17813,
+62485=>17813,
+20483=>17814,
+62486=>17814,
+13437=>17815,
+62488=>17815,
+13477=>17816,
+62490=>17816,
+22789=>17817,
+62492=>17817,
+20955=>17818,
+62493=>17818,
+20988=>17819,
+62494=>17819,
+20105=>17820,
+62496=>17820,
+21136=>17821,
+62498=>17821,
+21287=>17822,
+62499=>17822,
+13767=>17823,
+62500=>17823,
+21417=>17824,
+62501=>17824,
+13649=>17825,
+62502=>17825,
+21424=>17826,
+62503=>17826,
+21539=>17827,
+62506=>17827,
+13677=>17828,
+62507=>17828,
+13682=>17829,
+62508=>17829,
+13953=>17830,
+62509=>17830,
+21651=>17831,
+62510=>17831,
+21667=>17832,
+62511=>17832,
+21684=>17833,
+62512=>17833,
+21689=>17834,
+62513=>17834,
+21712=>17835,
+62514=>17835,
+21743=>17836,
+62515=>17836,
+21784=>17837,
+62516=>17837,
+21795=>17838,
+62517=>17838,
+21800=>17839,
+62518=>17839,
+13720=>17840,
+62519=>17840,
+13733=>17841,
+62521=>17841,
+13759=>17842,
+62522=>17842,
+21975=>17843,
+62523=>17843,
+13765=>17844,
+62524=>17844,
+163204=>17845,
+62525=>17845,
+16467=>17846,
+62538=>17846,
+62551=>17847,
+135412=>17847,
+62555=>17848,
+134155=>17848,
+62574=>17849,
+161992=>17849,
+62580=>17850,
+155813=>17850,
+62583=>17851,
+142668=>17851,
+62585=>17852,
+135287=>17852,
+62587=>17853,
+135279=>17853,
+62595=>17854,
+139681=>17854,
+62609=>17855,
+134550=>17855,
+16571=>17856,
+62611=>17856,
+62631=>17857,
+142537=>17857,
+22098=>17858,
+62641=>17858,
+134961=>17859,
+62642=>17859,
+62657=>17860,
+157724=>17860,
+135375=>17861,
+62659=>17861,
+141315=>17862,
+62660=>17862,
+141625=>17863,
+62661=>17863,
+13819=>17864,
+62662=>17864,
+152035=>17865,
+62663=>17865,
+134796=>17866,
+62664=>17866,
+135053=>17867,
+62665=>17867,
+134826=>17868,
+62666=>17868,
+16275=>17869,
+62667=>17869,
+134960=>17870,
+62668=>17870,
+134471=>17871,
+62669=>17871,
+135503=>17872,
+62670=>17872,
+134732=>17873,
+62671=>17873,
+134827=>17874,
+62673=>17874,
+134057=>17875,
+62674=>17875,
+134472=>17876,
+62675=>17876,
+135360=>17877,
+62676=>17877,
+135485=>17878,
+62677=>17878,
+16377=>17879,
+62678=>17879,
+140950=>17880,
+62679=>17880,
+25650=>17881,
+62680=>17881,
+135085=>17882,
+62681=>17882,
+144372=>17883,
+62682=>17883,
+62685=>17884,
+134526=>17884,
+62686=>17885,
+134527=>17885,
+62688=>17886,
+142421=>17886,
+62690=>17887,
+134808=>17887,
+62692=>17888,
+134958=>17888,
+62694=>17889,
+158544=>17889,
+21708=>17890,
+62699=>17890,
+33476=>17891,
+62700=>17891,
+21945=>17892,
+62701=>17892,
+171715=>17893,
+62703=>17893,
+39974=>17894,
+62704=>17894,
+39606=>17895,
+62705=>17895,
+62707=>17896,
+142830=>17896,
+33004=>17897,
+62710=>17897,
+23580=>17898,
+62711=>17898,
+157042=>17899,
+62712=>17899,
+33076=>17900,
+62713=>17900,
+14231=>17901,
+62714=>17901,
+164029=>17902,
+62716=>17902,
+37302=>17903,
+62717=>17903,
+134906=>17904,
+62718=>17904,
+134671=>17905,
+62719=>17905,
+134775=>17906,
+62720=>17906,
+134907=>17907,
+62721=>17907,
+151019=>17908,
+62723=>17908,
+13833=>17909,
+62724=>17909,
+134358=>17910,
+62725=>17910,
+22191=>17911,
+62726=>17911,
+141237=>17912,
+62727=>17912,
+135369=>17913,
+62728=>17913,
+134672=>17914,
+62729=>17914,
+134776=>17915,
+62730=>17915,
+135288=>17916,
+62731=>17916,
+135496=>17917,
+62732=>17917,
+164359=>17918,
+62733=>17918,
+136277=>17919,
+62734=>17919,
+134777=>17920,
+62735=>17920,
+151120=>17921,
+62736=>17921,
+142756=>17922,
+62737=>17922,
+23124=>17923,
+62738=>17923,
+62739=>17924,
+135197=>17924,
+62740=>17925,
+135198=>17925,
+62741=>17926,
+135413=>17926,
+62742=>17927,
+135414=>17927,
+22428=>17928,
+62743=>17928,
+134673=>17929,
+62744=>17929,
+161428=>17930,
+62745=>17930,
+164557=>17931,
+62746=>17931,
+135093=>17932,
+62747=>17932,
+134779=>17933,
+62748=>17933,
+151934=>17934,
+62749=>17934,
+14083=>17935,
+62750=>17935,
+135094=>17936,
+62751=>17936,
+135552=>17937,
+62752=>17937,
+152280=>17938,
+62753=>17938,
+172733=>17939,
+62754=>17939,
+149978=>17940,
+62755=>17940,
+137274=>17941,
+62756=>17941,
+147831=>17942,
+62757=>17942,
+164476=>17943,
+62758=>17943,
+22681=>17944,
+62759=>17944,
+21096=>17945,
+62760=>17945,
+13850=>17946,
+62761=>17946,
+153405=>17947,
+62762=>17947,
+31666=>17948,
+62763=>17948,
+23400=>17949,
+62764=>17949,
+18432=>17950,
+62765=>17950,
+19244=>17951,
+62766=>17951,
+40743=>17952,
+62767=>17952,
+18919=>17953,
+62768=>17953,
+39967=>17954,
+62769=>17954,
+39821=>17955,
+62770=>17955,
+154484=>17956,
+62771=>17956,
+143677=>17957,
+62772=>17957,
+22011=>17958,
+62773=>17958,
+13810=>17959,
+62774=>17959,
+22153=>17960,
+62775=>17960,
+23870=>17961,
+63028=>17961,
+23880=>17962,
+63029=>17962,
+15868=>17963,
+63031=>17963,
+14351=>17964,
+63032=>17964,
+23972=>17965,
+63033=>17965,
+23993=>17966,
+63034=>17966,
+14368=>17967,
+63035=>17967,
+24357=>17968,
+63039=>17968,
+24451=>17969,
+63040=>17969,
+14600=>17970,
+63041=>17970,
+14655=>17971,
+63043=>17971,
+14669=>17972,
+63044=>17972,
+24791=>17973,
+63045=>17973,
+24893=>17974,
+63046=>17974,
+23781=>17975,
+63047=>17975,
+14729=>17976,
+63048=>17976,
+25015=>17977,
+63049=>17977,
+25039=>17978,
+63051=>17978,
+14776=>17979,
+63052=>17979,
+25132=>17980,
+63053=>17980,
+25317=>17981,
+63055=>17981,
+14840=>17982,
+63057=>17982,
+22193=>17983,
+63058=>17983,
+14851=>17984,
+63059=>17984,
+25570=>17985,
+63060=>17985,
+25595=>17986,
+63061=>17986,
+25607=>17987,
+63062=>17987,
+14923=>17988,
+63064=>17988,
+25792=>17989,
+63065=>17989,
+40863=>17990,
+63068=>17990,
+14999=>17991,
+63069=>17991,
+25990=>17992,
+63070=>17992,
+15037=>17993,
+63071=>17993,
+26111=>17994,
+63072=>17994,
+26195=>17995,
+63073=>17995,
+15090=>17996,
+63074=>17996,
+26258=>17997,
+63075=>17997,
+15138=>17998,
+63076=>17998,
+26390=>17999,
+63077=>17999,
+15170=>18000,
+63078=>18000,
+26532=>18001,
+63079=>18001,
+15192=>18002,
+63081=>18002,
+26698=>18003,
+63082=>18003,
+26756=>18004,
+63083=>18004,
+15218=>18005,
+63084=>18005,
+15217=>18006,
+63085=>18006,
+15227=>18007,
+63086=>18007,
+26889=>18008,
+63087=>18008,
+26947=>18009,
+63088=>18009,
+29276=>18010,
+63089=>18010,
+26980=>18011,
+63090=>18011,
+27039=>18012,
+63091=>18012,
+27013=>18013,
+63092=>18013,
+27094=>18014,
+63094=>18014,
+15325=>18015,
+63095=>18015,
+27237=>18016,
+63096=>18016,
+27252=>18017,
+63097=>18017,
+27249=>18018,
+63098=>18018,
+27266=>18019,
+63099=>18019,
+15340=>18020,
+63100=>18020,
+27289=>18021,
+63101=>18021,
+15346=>18022,
+63102=>18022,
+27307=>18023,
+63103=>18023,
+27317=>18024,
+63104=>18024,
+27348=>18025,
+63105=>18025,
+27382=>18026,
+63106=>18026,
+27521=>18027,
+63107=>18027,
+27585=>18028,
+63108=>18028,
+27626=>18029,
+63109=>18029,
+27765=>18030,
+63110=>18030,
+27818=>18031,
+63111=>18031,
+15563=>18032,
+63112=>18032,
+27906=>18033,
+63113=>18033,
+27910=>18034,
+63114=>18034,
+27942=>18035,
+63115=>18035,
+28033=>18036,
+63116=>18036,
+15599=>18037,
+63117=>18037,
+28068=>18038,
+63118=>18038,
+28081=>18039,
+63119=>18039,
+28181=>18040,
+63120=>18040,
+28184=>18041,
+63121=>18041,
+28201=>18042,
+63122=>18042,
+28294=>18043,
+63123=>18043,
+166336=>18044,
+63124=>18044,
+28347=>18045,
+63125=>18045,
+28386=>18046,
+63126=>18046,
+28378=>18047,
+63127=>18047,
+40831=>18048,
+63128=>18048,
+28392=>18049,
+63129=>18049,
+28393=>18050,
+63130=>18050,
+28452=>18051,
+63131=>18051,
+28468=>18052,
+63132=>18052,
+15686=>18053,
+63133=>18053,
+147265=>18054,
+63134=>18054,
+28545=>18055,
+63135=>18055,
+28606=>18056,
+63136=>18056,
+15722=>18057,
+63137=>18057,
+15733=>18058,
+63138=>18058,
+29111=>18059,
+63139=>18059,
+23705=>18060,
+63140=>18060,
+15754=>18061,
+63141=>18061,
+28716=>18062,
+63142=>18062,
+15761=>18063,
+63143=>18063,
+28752=>18064,
+63144=>18064,
+28756=>18065,
+63145=>18065,
+28783=>18066,
+63146=>18066,
+28799=>18067,
+63147=>18067,
+131877=>18068,
+63149=>18068,
+17345=>18069,
+63150=>18069,
+13809=>18070,
+63151=>18070,
+134872=>18071,
+63152=>18071,
+13902=>18072,
+58134=>18072,
+15789=>18073,
+58172=>18073,
+154725=>18074,
+58173=>18074,
+26237=>18075,
+58183=>18075,
+31860=>18076,
+58188=>18076,
+29837=>18077,
+58197=>18077,
+32402=>18078,
+58215=>18078,
+17667=>18079,
+58232=>18079,
+58260=>18080,
+151480=>18080,
+58270=>18081,
+133901=>18081,
+58277=>18082,
+158474=>18082,
+13438=>18083,
+58311=>18083,
+58317=>18084,
+143087=>18084,
+58325=>18085,
+146613=>18085,
+58343=>18086,
+159385=>18086,
+34673=>18087,
+58364=>18087,
+25537=>18088,
+58385=>18088,
+30583=>18089,
+58387=>18089,
+35210=>18090,
+58390=>18090,
+58406=>18091,
+147343=>18091,
+35660=>18092,
+58415=>18092,
+58440=>18093,
+150729=>18093,
+18730=>18094,
+58464=>18094,
+172052=>18095,
+58471=>18095,
+165564=>18096,
+58472=>18096,
+165121=>18097,
+58473=>18097,
+15088=>18098,
+58490=>18098,
+28815=>18099,
+58511=>18099,
+58529=>18100,
+140922=>18100,
+58637=>18101,
+158120=>18101,
+58646=>18102,
+148043=>18102,
+26760=>18103,
+58662=>18103,
+58664=>18104,
+139611=>18104,
+40802=>18105,
+58702=>18105,
+37830=>18106,
+58793=>18106,
+58802=>18107,
+131967=>18107,
+37734=>18108,
+58888=>18108,
+37519=>18109,
+58901=>18109,
+34324=>18110,
+58954=>18110,
+58986=>18111,
+173147=>18111,
+16784=>18112,
+59010=>18112,
+26511=>18113,
+59045=>18113,
+26654=>18114,
+59048=>18114,
+14435=>18115,
+59051=>18115,
+59077=>18116,
+149996=>18116,
+15129=>18117,
+59128=>18117,
+33942=>18118,
+59176=>18118,
+59241=>18119,
+149858=>18119,
+14818=>18120,
+59254=>18120,
+33920=>18121,
+59259=>18121,
+17262=>18122,
+59328=>18122,
+38769=>18123,
+59402=>18123,
+39323=>18124,
+59427=>18124,
+18733=>18125,
+59499=>18125,
+28439=>18126,
+59703=>18126,
+160009=>18127,
+59704=>18127,
+28838=>18128,
+59746=>18128,
+150095=>18129,
+59752=>18129,
+32357=>18130,
+59753=>18130,
+23855=>18131,
+59755=>18131,
+15859=>18132,
+59756=>18132,
+150109=>18133,
+59758=>18133,
+137183=>18134,
+59759=>18134,
+32164=>18135,
+59760=>18135,
+33830=>18136,
+59761=>18136,
+21637=>18137,
+59762=>18137,
+146170=>18138,
+59763=>18138,
+131604=>18139,
+59765=>18139,
+22398=>18140,
+59766=>18140,
+133333=>18141,
+59767=>18141,
+132633=>18142,
+59768=>18142,
+16357=>18143,
+59769=>18143,
+139166=>18144,
+59770=>18144,
+172726=>18145,
+59771=>18145,
+28675=>18146,
+59772=>18146,
+168283=>18147,
+59773=>18147,
+23920=>18148,
+59774=>18148,
+29583=>18149,
+59775=>18149,
+166489=>18150,
+59777=>18150,
+168992=>18151,
+59778=>18151,
+20424=>18152,
+59779=>18152,
+32743=>18153,
+59780=>18153,
+29456=>18154,
+59782=>18154,
+29496=>18155,
+59784=>18155,
+29505=>18156,
+59787=>18156,
+16041=>18157,
+59789=>18157,
+29173=>18158,
+59792=>18158,
+149746=>18159,
+59793=>18159,
+29665=>18160,
+59794=>18160,
+16074=>18161,
+59796=>18161,
+16081=>18162,
+59798=>18162,
+29721=>18163,
+59801=>18163,
+29726=>18164,
+59802=>18164,
+29727=>18165,
+59803=>18165,
+16098=>18166,
+59804=>18166,
+16112=>18167,
+59805=>18167,
+16116=>18168,
+59806=>18168,
+16122=>18169,
+59807=>18169,
+29907=>18170,
+59808=>18170,
+16142=>18171,
+59809=>18171,
+16211=>18172,
+59810=>18172,
+30061=>18173,
+59812=>18173,
+30066=>18174,
+59813=>18174,
+30093=>18175,
+59814=>18175,
+16252=>18176,
+59815=>18176,
+30152=>18177,
+59816=>18177,
+30285=>18178,
+59819=>18178,
+30324=>18179,
+59821=>18179,
+16348=>18180,
+59822=>18180,
+30330=>18181,
+59823=>18181,
+29064=>18182,
+59825=>18182,
+22051=>18183,
+59826=>18183,
+35200=>18184,
+59827=>18184,
+16413=>18185,
+59829=>18185,
+30531=>18186,
+59830=>18186,
+16441=>18187,
+59831=>18187,
+16453=>18188,
+59833=>18188,
+13787=>18189,
+59834=>18189,
+30616=>18190,
+59835=>18190,
+16490=>18191,
+59836=>18191,
+16495=>18192,
+59837=>18192,
+30654=>18193,
+59839=>18193,
+30667=>18194,
+59840=>18194,
+30744=>18195,
+59842=>18195,
+30748=>18196,
+59844=>18196,
+30791=>18197,
+59847=>18197,
+30801=>18198,
+59848=>18198,
+30822=>18199,
+59849=>18199,
+33864=>18200,
+59850=>18200,
+152885=>18201,
+59851=>18201,
+31027=>18202,
+59852=>18202,
+31026=>18203,
+59854=>18203,
+16649=>18204,
+59856=>18204,
+31121=>18205,
+59857=>18205,
+31238=>18206,
+59860=>18206,
+16743=>18207,
+59862=>18207,
+16818=>18208,
+59864=>18208,
+31420=>18209,
+59865=>18209,
+33401=>18210,
+59866=>18210,
+16836=>18211,
+59867=>18211,
+31439=>18212,
+59868=>18212,
+31451=>18213,
+59869=>18213,
+16847=>18214,
+59870=>18214,
+31586=>18215,
+59872=>18215,
+31596=>18216,
+59873=>18216,
+31611=>18217,
+59874=>18217,
+31762=>18218,
+59875=>18218,
+16992=>18219,
+59877=>18219,
+17018=>18220,
+59878=>18220,
+31867=>18221,
+59879=>18221,
+31900=>18222,
+59880=>18222,
+17036=>18223,
+59881=>18223,
+31928=>18224,
+59882=>18224,
+17044=>18225,
+59883=>18225,
+36755=>18226,
+59885=>18226,
+28864=>18227,
+59886=>18227,
+134351=>18228,
+59887=>18228,
+32207=>18229,
+59888=>18229,
+32212=>18230,
+59889=>18230,
+32208=>18231,
+59890=>18231,
+32253=>18232,
+59891=>18232,
+32692=>18233,
+59893=>18233,
+29343=>18234,
+59894=>18234,
+17303=>18235,
+59895=>18235,
+32800=>18236,
+59896=>18236,
+32805=>18237,
+59897=>18237,
+32814=>18238,
+59899=>18238,
+32817=>18239,
+59900=>18239,
+32852=>18240,
+59901=>18240,
+22452=>18241,
+59903=>18241,
+28832=>18242,
+59904=>18242,
+32951=>18243,
+59905=>18243,
+33001=>18244,
+59906=>18244,
+17389=>18245,
+59907=>18245,
+33036=>18246,
+59908=>18246,
+33038=>18247,
+59910=>18247,
+33042=>18248,
+59911=>18248,
+33044=>18249,
+59913=>18249,
+17409=>18250,
+59914=>18250,
+15161=>18251,
+59915=>18251,
+33110=>18252,
+59916=>18252,
+33113=>18253,
+59917=>18253,
+33114=>18254,
+59918=>18254,
+17427=>18255,
+59919=>18255,
+33148=>18256,
+59921=>18256,
+17445=>18257,
+59923=>18257,
+17453=>18258,
+59925=>18258,
+33189=>18259,
+59926=>18259,
+22511=>18260,
+59927=>18260,
+33217=>18261,
+59928=>18261,
+33252=>18262,
+59929=>18262,
+33364=>18263,
+59930=>18263,
+17551=>18264,
+59931=>18264,
+33398=>18265,
+59933=>18265,
+33482=>18266,
+59934=>18266,
+33496=>18267,
+59935=>18267,
+17584=>18268,
+59937=>18268,
+33623=>18269,
+59938=>18269,
+38505=>18270,
+59939=>18270,
+33797=>18271,
+59941=>18271,
+28917=>18272,
+59942=>18272,
+33892=>18273,
+59943=>18273,
+33928=>18274,
+59945=>18274,
+17668=>18275,
+59946=>18275,
+33982=>18276,
+59947=>18276,
+34017=>18277,
+59948=>18277,
+34040=>18278,
+59949=>18278,
+34064=>18279,
+59950=>18279,
+34104=>18280,
+59951=>18280,
+34130=>18281,
+59952=>18281,
+17723=>18282,
+59953=>18282,
+34159=>18283,
+59954=>18283,
+34160=>18284,
+59955=>18284,
+34272=>18285,
+59956=>18285,
+17783=>18286,
+59957=>18286,
+34418=>18287,
+59958=>18287,
+34450=>18288,
+59959=>18288,
+34543=>18289,
+59961=>18289,
+38469=>18290,
+59962=>18290,
+17926=>18291,
+59964=>18291,
+17943=>18292,
+59965=>18292,
+34990=>18293,
+59966=>18293,
+35071=>18294,
+59967=>18294,
+35108=>18295,
+59968=>18295,
+35217=>18296,
+59970=>18296,
+162151=>18297,
+59971=>18297,
+35384=>18298,
+59973=>18298,
+35476=>18299,
+59974=>18299,
+35508=>18300,
+59975=>18300,
+35921=>18301,
+59976=>18301,
+36052=>18302,
+59977=>18302,
+36082=>18303,
+59978=>18303,
+36124=>18304,
+59979=>18304,
+18328=>18305,
+59980=>18305,
+36291=>18306,
+59982=>18306,
+18413=>18307,
+59983=>18307,
+36410=>18308,
+59985=>18308,
+22356=>18309,
+59987=>18309,
+22005=>18310,
+59989=>18310,
+18487=>18311,
+59991=>18311,
+36558=>18312,
+59992=>18312,
+36578=>18313,
+59993=>18313,
+36580=>18314,
+59994=>18314,
+36589=>18315,
+59995=>18315,
+36594=>18316,
+59996=>18316,
+36801=>18317,
+59998=>18317,
+36810=>18318,
+59999=>18318,
+36812=>18319,
+60000=>18319,
+36915=>18320,
+60001=>18320,
+18605=>18321,
+60003=>18321,
+39136=>18322,
+60004=>18322,
+37395=>18323,
+60005=>18323,
+18718=>18324,
+60006=>18324,
+37416=>18325,
+60007=>18325,
+37464=>18326,
+60008=>18326,
+37483=>18327,
+60009=>18327,
+37553=>18328,
+60010=>18328,
+37550=>18329,
+60011=>18329,
+37567=>18330,
+60012=>18330,
+37603=>18331,
+60013=>18331,
+37611=>18332,
+60014=>18332,
+37619=>18333,
+60015=>18333,
+37620=>18334,
+60016=>18334,
+37629=>18335,
+60017=>18335,
+37699=>18336,
+60018=>18336,
+37764=>18337,
+60019=>18337,
+37805=>18338,
+60020=>18338,
+18757=>18339,
+60021=>18339,
+18769=>18340,
+60022=>18340,
+37911=>18341,
+60024=>18341,
+37917=>18342,
+60026=>18342,
+37933=>18343,
+60027=>18343,
+37950=>18344,
+60028=>18344,
+18794=>18345,
+60029=>18345,
+37972=>18346,
+60030=>18346,
+38009=>18347,
+60031=>18347,
+38189=>18348,
+60032=>18348,
+38306=>18349,
+60033=>18349,
+18855=>18350,
+60034=>18350,
+38388=>18351,
+60035=>18351,
+38451=>18352,
+60036=>18352,
+18917=>18353,
+60037=>18353,
+18980=>18354,
+60039=>18354,
+38720=>18355,
+60040=>18355,
+18997=>18356,
+60041=>18356,
+38834=>18357,
+60042=>18357,
+38850=>18358,
+60043=>18358,
+19172=>18359,
+60045=>18359,
+39097=>18360,
+60047=>18360,
+19225=>18361,
+60048=>18361,
+39153=>18362,
+60049=>18362,
+22596=>18363,
+60050=>18363,
+39193=>18364,
+60052=>18364,
+39223=>18365,
+60055=>18365,
+39261=>18366,
+60057=>18366,
+39266=>18367,
+60058=>18367,
+19312=>18368,
+60059=>18368,
+39365=>18369,
+60060=>18369,
+19357=>18370,
+60061=>18370,
+39484=>18371,
+60062=>18371,
+39695=>18372,
+60063=>18372,
+39785=>18373,
+60065=>18373,
+39901=>18374,
+60067=>18374,
+39921=>18375,
+60068=>18375,
+39924=>18376,
+60069=>18376,
+19565=>18377,
+60070=>18377,
+39968=>18378,
+60071=>18378,
+14191=>18379,
+60072=>18379,
+138178=>18380,
+60073=>18380,
+40265=>18381,
+60074=>18381,
+40702=>18382,
+60076=>18382,
+22096=>18383,
+60077=>18383,
+40381=>18384,
+60079=>18384,
+40444=>18385,
+60081=>18385,
+38134=>18386,
+60082=>18386,
+36790=>18387,
+60083=>18387,
+40625=>18388,
+60086=>18388,
+40637=>18389,
+60087=>18389,
+40646=>18390,
+60088=>18390,
+38108=>18391,
+60089=>18391,
+40674=>18392,
+60090=>18392,
+40689=>18393,
+60091=>18393,
+40696=>18394,
+60092=>18394,
+40772=>18395,
+60094=>18395,
+131220=>18396,
+60095=>18396,
+131767=>18397,
+60096=>18397,
+132000=>18398,
+60097=>18398,
+38083=>18399,
+60099=>18399,
+60101=>18400,
+132311=>18400,
+38081=>18401,
+60103=>18401,
+132565=>18402,
+60105=>18402,
+132629=>18403,
+60106=>18403,
+132726=>18404,
+60107=>18404,
+136890=>18405,
+60108=>18405,
+22359=>18406,
+60109=>18406,
+29043=>18407,
+60110=>18407,
+133826=>18408,
+60111=>18408,
+133837=>18409,
+60112=>18409,
+134079=>18410,
+60113=>18410,
+194619=>18411,
+60115=>18411,
+134091=>18412,
+60116=>18412,
+21662=>18413,
+60117=>18413,
+134139=>18414,
+60118=>18414,
+134203=>18415,
+60119=>18415,
+134227=>18416,
+60120=>18416,
+134245=>18417,
+60121=>18417,
+134268=>18418,
+60122=>18418,
+60124=>18419,
+134285=>18419,
+134325=>18420,
+60126=>18420,
+134365=>18421,
+60127=>18421,
+134381=>18422,
+60128=>18422,
+134511=>18423,
+60129=>18423,
+134578=>18424,
+60130=>18424,
+134600=>18425,
+60131=>18425,
+134660=>18426,
+60135=>18426,
+134670=>18427,
+60136=>18427,
+134871=>18428,
+60137=>18428,
+135056=>18429,
+60138=>18429,
+134957=>18430,
+60139=>18430,
+134771=>18431,
+60140=>18431,
+60142=>18432,
+135100=>18432,
+135260=>18433,
+60144=>18433,
+135247=>18434,
+60145=>18434,
+135286=>18435,
+60146=>18435,
+135304=>18436,
+60149=>18436,
+135318=>18437,
+60150=>18437,
+13895=>18438,
+60151=>18438,
+135359=>18439,
+60152=>18439,
+135471=>18440,
+60154=>18440,
+135483=>18441,
+60155=>18441,
+21348=>18442,
+60156=>18442,
+135907=>18443,
+60158=>18443,
+136053=>18444,
+60159=>18444,
+60160=>18445,
+135990=>18445,
+136567=>18446,
+60162=>18446,
+136729=>18447,
+60163=>18447,
+137155=>18448,
+60164=>18448,
+137159=>18449,
+60165=>18449,
+28859=>18450,
+60167=>18450,
+137261=>18451,
+60168=>18451,
+137578=>18452,
+60169=>18452,
+137773=>18453,
+60170=>18453,
+137797=>18454,
+60171=>18454,
+138282=>18455,
+60172=>18455,
+138352=>18456,
+60173=>18456,
+138412=>18457,
+60174=>18457,
+138952=>18458,
+60175=>18458,
+138965=>18459,
+60177=>18459,
+139029=>18460,
+60178=>18460,
+29080=>18461,
+60179=>18461,
+139333=>18462,
+60181=>18462,
+27113=>18463,
+60182=>18463,
+14024=>18464,
+60183=>18464,
+139900=>18465,
+60184=>18465,
+140247=>18466,
+60185=>18466,
+140282=>18467,
+60186=>18467,
+141098=>18468,
+60187=>18468,
+141425=>18469,
+60188=>18469,
+141647=>18470,
+60189=>18470,
+141671=>18471,
+60191=>18471,
+141715=>18472,
+60192=>18472,
+142037=>18473,
+60193=>18473,
+60195=>18474,
+142056=>18474,
+60197=>18475,
+142094=>18475,
+60199=>18476,
+142143=>18476,
+60202=>18477,
+142412=>18477,
+142472=>18478,
+60204=>18478,
+142519=>18479,
+60205=>18479,
+154600=>18480,
+60206=>18480,
+142600=>18481,
+60207=>18481,
+142610=>18482,
+60208=>18482,
+142775=>18483,
+60209=>18483,
+142741=>18484,
+60210=>18484,
+142914=>18485,
+60211=>18485,
+143220=>18486,
+60212=>18486,
+143308=>18487,
+60213=>18487,
+143411=>18488,
+60214=>18488,
+143462=>18489,
+60215=>18489,
+144159=>18490,
+60216=>18490,
+144350=>18491,
+60217=>18491,
+144743=>18492,
+60222=>18492,
+144883=>18493,
+60223=>18493,
+144922=>18494,
+60227=>18494,
+145174=>18495,
+60228=>18495,
+22709=>18496,
+60231=>18496,
+60234=>18497,
+146087=>18497,
+146961=>18498,
+60237=>18498,
+147129=>18499,
+60238=>18499,
+60243=>18500,
+147737=>18500,
+148206=>18501,
+60245=>18501,
+148237=>18502,
+60246=>18502,
+148276=>18503,
+60248=>18503,
+148374=>18504,
+60249=>18504,
+148484=>18505,
+60258=>18505,
+148694=>18506,
+60259=>18506,
+22408=>18507,
+60260=>18507,
+149108=>18508,
+60261=>18508,
+60263=>18509,
+149295=>18509,
+149522=>18510,
+60271=>18510,
+149755=>18511,
+60272=>18511,
+150037=>18512,
+60273=>18512,
+60275=>18513,
+150208=>18513,
+22885=>18514,
+60277=>18514,
+60279=>18515,
+151430=>18515,
+60282=>18516,
+151596=>18516,
+22335=>18517,
+60284=>18517,
+152217=>18518,
+60286=>18518,
+152601=>18519,
+60287=>18519,
+152646=>18520,
+60291=>18520,
+152686=>18521,
+60292=>18521,
+60296=>18522,
+152895=>18522,
+60298=>18523,
+152926=>18523,
+152930=>18524,
+60300=>18524,
+152934=>18525,
+60301=>18525,
+153543=>18526,
+60302=>18526,
+60304=>18527,
+153693=>18527,
+60309=>18528,
+153859=>18528,
+154286=>18529,
+60312=>18529,
+154505=>18530,
+60313=>18530,
+154630=>18531,
+60314=>18531,
+22433=>18532,
+60316=>18532,
+29009=>18533,
+60317=>18533,
+60319=>18534,
+155906=>18534,
+60322=>18535,
+156082=>18535,
+156674=>18536,
+60325=>18536,
+156746=>18537,
+60326=>18537,
+60330=>18538,
+156804=>18538,
+60334=>18539,
+156808=>18539,
+60336=>18540,
+156946=>18540,
+157119=>18541,
+60338=>18541,
+157365=>18542,
+60339=>18542,
+22201=>18543,
+60347=>18543,
+60349=>18544,
+157436=>18544,
+13848=>18545,
+60355=>18545,
+157593=>18546,
+60357=>18546,
+157806=>18547,
+60358=>18547,
+60360=>18548,
+157790=>18548,
+60362=>18549,
+157895=>18549,
+60366=>18550,
+157990=>18550,
+60368=>18551,
+158009=>18551,
+60371=>18552,
+158202=>18552,
+60373=>18553,
+158253=>18553,
+158260=>18554,
+60378=>18554,
+158555=>18555,
+60379=>18555,
+60383=>18556,
+158621=>18556,
+60385=>18557,
+158884=>18557,
+60388=>18558,
+159150=>18558,
+159819=>18559,
+60392=>18559,
+160205=>18560,
+60393=>18560,
+160384=>18561,
+60395=>18561,
+160389=>18562,
+60396=>18562,
+60399=>18563,
+160395=>18563,
+60401=>18564,
+160486=>18564,
+38047=>18565,
+60404=>18565,
+160848=>18566,
+60405=>18566,
+14009=>18567,
+60416=>18567,
+161740=>18568,
+60424=>18568,
+161880=>18569,
+60425=>18569,
+22230=>18570,
+60426=>18570,
+60435=>18571,
+162269=>18571,
+162301=>18572,
+60441=>18572,
+162314=>18573,
+60442=>18573,
+162571=>18574,
+60443=>18574,
+163174=>18575,
+60444=>18575,
+60448=>18576,
+163849=>18576,
+60459=>18577,
+163875=>18577,
+60463=>18578,
+163912=>18578,
+60466=>18579,
+163971=>18579,
+163984=>18580,
+60479=>18580,
+164084=>18581,
+60480=>18581,
+164142=>18582,
+60481=>18582,
+60483=>18583,
+164175=>18583,
+164271=>18584,
+60485=>18584,
+164378=>18585,
+60486=>18585,
+164614=>18586,
+60487=>18586,
+164655=>18587,
+60488=>18587,
+164746=>18588,
+60489=>18588,
+164968=>18589,
+60491=>18589,
+165546=>18590,
+60492=>18590,
+25574=>18591,
+60494=>18591,
+166230=>18592,
+60495=>18592,
+60498=>18593,
+166328=>18593,
+60500=>18594,
+166375=>18594,
+60502=>18595,
+166376=>18595,
+166726=>18596,
+60503=>18596,
+166868=>18597,
+60504=>18597,
+60506=>18598,
+166921=>18598,
+167877=>18599,
+60508=>18599,
+168172=>18600,
+60509=>18600,
+168208=>18601,
+60511=>18601,
+168252=>18602,
+60512=>18602,
+15863=>18603,
+60513=>18603,
+168286=>18604,
+60514=>18604,
+150218=>18605,
+60515=>18605,
+36816=>18606,
+60516=>18606,
+60519=>18607,
+169191=>18607,
+169392=>18608,
+60521=>18608,
+169400=>18609,
+60522=>18609,
+169778=>18610,
+60523=>18610,
+170193=>18611,
+60524=>18611,
+170313=>18612,
+60525=>18612,
+170346=>18613,
+60526=>18613,
+170435=>18614,
+60527=>18614,
+170536=>18615,
+60528=>18615,
+170766=>18616,
+60529=>18616,
+171354=>18617,
+60530=>18617,
+171419=>18618,
+60531=>18618,
+32415=>18619,
+60532=>18619,
+171768=>18620,
+60533=>18620,
+171811=>18621,
+60534=>18621,
+19620=>18622,
+60535=>18622,
+38215=>18623,
+60536=>18623,
+172691=>18624,
+60537=>18624,
+29090=>18625,
+60538=>18625,
+172799=>18626,
+60539=>18626,
+173515=>18627,
+60542=>18627,
+19868=>18628,
+60543=>18628,
+134300=>18629,
+60544=>18629,
+36798=>18630,
+60545=>18630,
+36794=>18631,
+60547=>18631,
+140464=>18632,
+60548=>18632,
+36793=>18633,
+60549=>18633,
+150163=>18634,
+60550=>18634,
+20202=>18635,
+60555=>18635,
+60557=>18636,
+166700=>18636,
+36480=>18637,
+60560=>18637,
+137205=>18638,
+60561=>18638,
+166764=>18639,
+60563=>18639,
+166809=>18640,
+60564=>18640,
+60566=>18641,
+157359=>18641,
+60568=>18642,
+161365=>18642,
+153141=>18643,
+60570=>18643,
+153942=>18644,
+60571=>18644,
+20122=>18645,
+60572=>18645,
+155265=>18646,
+60573=>18646,
+60576=>18647,
+134765=>18647,
+147080=>18648,
+60579=>18648,
+150686=>18649,
+60580=>18649,
+137206=>18650,
+60583=>18650,
+137339=>18651,
+60584=>18651,
+60587=>18652,
+154698=>18652,
+152337=>18653,
+60589=>18653,
+15814=>18654,
+60590=>18654,
+60596=>18655,
+155352=>18655,
+19996=>18656,
+60600=>18656,
+135146=>18657,
+60601=>18657,
+134473=>18658,
+60602=>18658,
+145082=>18659,
+60603=>18659,
+60638=>18660,
+151880=>18660,
+21982=>18661,
+60644=>18661,
+34694=>18662,
+60672=>18662,
+60676=>18663,
+135361=>18663,
+149254=>18664,
+60679=>18664,
+23440=>18665,
+60680=>18665,
+60682=>18666,
+157843=>18666,
+141044=>18667,
+60684=>18667,
+163119=>18668,
+60685=>18668,
+147875=>18669,
+60686=>18669,
+163187=>18670,
+60687=>18670,
+159440=>18671,
+60688=>18671,
+160438=>18672,
+60689=>18672,
+60691=>18673,
+135641=>18673,
+146684=>18674,
+60693=>18674,
+173737=>18675,
+60694=>18675,
+134828=>18676,
+60695=>18676,
+60698=>18677,
+138402=>18677,
+60700=>18678,
+151490=>18678,
+60702=>18679,
+135147=>18679,
+60706=>18680,
+142752=>18680,
+135148=>18681,
+60710=>18681,
+134666=>18682,
+60711=>18682,
+60714=>18683,
+135149=>18683,
+60717=>18684,
+135559=>18684,
+19994=>18685,
+60721=>18685,
+19972=>18686,
+60722=>18686,
+23309=>18687,
+60724=>18687,
+13996=>18688,
+60727=>18688,
+21373=>18689,
+60729=>18689,
+13989=>18690,
+60730=>18690,
+22682=>18691,
+60732=>18691,
+150382=>18692,
+60733=>18692,
+22442=>18693,
+60736=>18693,
+154261=>18694,
+60737=>18694,
+133497=>18695,
+60738=>18695,
+60741=>18696,
+140389=>18696,
+146686=>18697,
+60746=>18697,
+171824=>18698,
+60747=>18698,
+151465=>18699,
+60749=>18699,
+169374=>18700,
+60750=>18700,
+60753=>18701,
+146870=>18701,
+157619=>18702,
+60755=>18702,
+145184=>18703,
+60756=>18703,
+147191=>18704,
+60759=>18704,
+146988=>18705,
+60760=>18705,
+60785=>18706,
+143578=>18706,
+135849=>18707,
+60789=>18707,
+22439=>18708,
+60790=>18708,
+149859=>18709,
+60791=>18709,
+60794=>18710,
+159918=>18710,
+60801=>18711,
+137068=>18711,
+60806=>18712,
+160100=>18712,
+159010=>18713,
+60809=>18713,
+150242=>18714,
+60810=>18714,
+39963=>18715,
+60837=>18715,
+149822=>18716,
+60838=>18716,
+15878=>18717,
+60846=>18717,
+60881=>18718,
+159011=>18718,
+60887=>18719,
+132092=>18719,
+60891=>18720,
+146685=>18720,
+60893=>18721,
+149785=>18721,
+22394=>18722,
+60904=>18722,
+21722=>18723,
+60912=>18723,
+29050=>18724,
+60928=>18724,
+60949=>18725,
+150135=>18725,
+60955=>18726,
+166490=>18726,
+60962=>18727,
+194624=>18727,
+60976=>18728,
+137275=>18728,
+61000=>18729,
+155993=>18729,
+61014=>18730,
+144373=>18730,
+61019=>18731,
+166850=>18731,
+61024=>18732,
+138566=>18732,
+61054=>18733,
+159441=>18733,
+13877=>18734,
+61065=>18734,
+61084=>18735,
+166701=>18735,
+21024=>18736,
+61088=>18736,
+15384=>18737,
+61089=>18737,
+146631=>18738,
+61090=>18738,
+155351=>18739,
+61091=>18739,
+161366=>18740,
+61092=>18740,
+152881=>18741,
+61093=>18741,
+137540=>18742,
+61094=>18742,
+170243=>18743,
+61096=>18743,
+159196=>18744,
+61097=>18744,
+159917=>18745,
+61098=>18745,
+156077=>18746,
+61100=>18746,
+166415=>18747,
+61101=>18747,
+145015=>18748,
+61102=>18748,
+131310=>18749,
+61103=>18749,
+157766=>18750,
+61104=>18750,
+151310=>18751,
+61105=>18751,
+17762=>18752,
+61106=>18752,
+23327=>18753,
+61107=>18753,
+156492=>18754,
+61108=>18754,
+40784=>18755,
+61109=>18755,
+40614=>18756,
+61110=>18756,
+156267=>18757,
+61111=>18757,
+20962=>18758,
+57415=>18758,
+21314=>18759,
+57416=>18759,
+26285=>18760,
+57520=>18760,
+22620=>18761,
+57547=>18761,
+21843=>18762,
+57566=>18762,
+15749=>18763,
+57594=>18763,
+24928=>18764,
+57608=>18764,
+18606=>18765,
+57668=>18765,
+38845=>18766,
+57676=>18766,
+57693=>18767,
+137335=>18767,
+24755=>18768,
+57703=>18768,
+33828=>18769,
+57711=>18769,
+38932=>18770,
+57748=>18770,
+147596=>18771,
+57749=>18771,
+57764=>18772,
+143486=>18772,
+57787=>18773,
+138813=>18773,
+15147=>18774,
+57798=>18774,
+15666=>18775,
+57824=>18775,
+57857=>18776,
+132021=>18776,
+28801=>18777,
+57944=>18777,
+23708=>18778,
+57959=>18778,
+58017=>18779,
+132547=>18779,
+14128=>18780,
+58028=>18780,
+136054=>18781,
+58096=>18781,
+150034=>18782,
+58097=>18782,
+58111=>18783,
+166699=>18783,
+58112=>18784,
+155779=>18784,
+256=>18785,
+62233=>18785,
+193=>18786,
+62234=>18786,
+461=>18787,
+62235=>18787,
+192=>18788,
+62236=>18788,
+274=>18789,
+62237=>18789,
+201=>18790,
+62238=>18790,
+282=>18791,
+62239=>18791,
+200=>18792,
+62240=>18792,
+332=>18793,
+62241=>18793,
+211=>18794,
+62242=>18794,
+465=>18795,
+62243=>18795,
+210=>18796,
+62244=>18796,
+62245=>18797,
+7870=>18798,
+62246=>18798,
+62247=>18799,
+7872=>18800,
+62248=>18800,
+202=>18801,
+62249=>18801,
+257=>18802,
+62250=>18802,
+225=>18803,
+62251=>18803,
+462=>18804,
+62252=>18804,
+224=>18805,
+62253=>18805,
+593=>18806,
+62254=>18806,
+275=>18807,
+62255=>18807,
+233=>18808,
+62256=>18808,
+283=>18809,
+62257=>18809,
+232=>18810,
+62258=>18810,
+299=>18811,
+62259=>18811,
+237=>18812,
+62260=>18812,
+464=>18813,
+62261=>18813,
+236=>18814,
+62262=>18814,
+333=>18815,
+62263=>18815,
+243=>18816,
+62264=>18816,
+466=>18817,
+62265=>18817,
+242=>18818,
+62266=>18818,
+363=>18819,
+62267=>18819,
+250=>18820,
+62268=>18820,
+468=>18821,
+62269=>18821,
+249=>18822,
+62270=>18822,
+470=>18823,
+62271=>18823,
+472=>18824,
+62272=>18824,
+474=>18825,
+62273=>18825,
+476=>18826,
+62274=>18826,
+252=>18827,
+62275=>18827,
+62276=>18828,
+7871=>18829,
+62277=>18829,
+62278=>18830,
+7873=>18831,
+62279=>18831,
+234=>18832,
+62280=>18832,
+609=>18833,
+62281=>18833,
+643=>18834,
+63551=>18834,
+592=>18835,
+63552=>18835,
+603=>18836,
+63553=>18836,
+596=>18837,
+63554=>18837,
+629=>18838,
+63555=>18838,
+339=>18839,
+63556=>18839,
+248=>18840,
+63557=>18840,
+331=>18841,
+63558=>18841,
+650=>18842,
+63559=>18842,
+618=>18843,
+63560=>18843,
+9178=>18844,
+62282=>18844,
+9179=>18845,
+62283=>18845,
+11933=>18846,
+63530=>18846,
+11974=>18847,
+63539=>18847,
+12003=>18848,
+63547=>18848,
+20539=>18849,
+28158=>18850,
+171123=>18851,
+62841=>18851,
+40870=>18852,
+62842=>18852,
+15817=>18853,
+62843=>18853,
+34959=>18854,
+62845=>18855,
+147790=>18855,
+28791=>18856,
+23797=>18857,
+19232=>18858,
+62848=>18858,
+152013=>18859,
+62849=>18859,
+13657=>18860,
+62850=>18860,
+154928=>18861,
+62851=>18861,
+24866=>18862,
+62853=>18863,
+166450=>18863,
+36775=>18864,
+37366=>18865,
+29073=>18866,
+26393=>18867,
+29626=>18868,
+144001=>18869,
+62859=>18869,
+172295=>18870,
+62860=>18870,
+15499=>18871,
+62861=>18871,
+137600=>18872,
+62862=>18872,
+19216=>18873,
+62863=>18873,
+30948=>18874,
+29698=>18875,
+20910=>18876,
+165647=>18877,
+62867=>18877,
+16393=>18878,
+62868=>18878,
+27235=>18879,
+172730=>18880,
+62870=>18880,
+16931=>18881,
+62871=>18881,
+34319=>18882,
+31274=>18883,
+170311=>18884,
+62875=>18884,
+166634=>18885,
+62876=>18885,
+38741=>18886,
+28749=>18887,
+21284=>18888,
+62880=>18889,
+139390=>18889,
+37876=>18890,
+30425=>18891,
+166371=>18892,
+62883=>18892,
+40871=>18893,
+62884=>18893,
+30685=>18894,
+20131=>18895,
+20464=>18896,
+20668=>18897,
+20015=>18898,
+20247=>18899,
+40872=>18900,
+62891=>18900,
+21556=>18901,
+32139=>18902,
+22674=>18903,
+22736=>18904,
+62896=>18905,
+138678=>18905,
+24210=>18906,
+24217=>18907,
+24514=>18908,
+62900=>18909,
+141074=>18909,
+25995=>18910,
+62902=>18911,
+144377=>18911,
+26905=>18912,
+27203=>18913,
+62905=>18914,
+146531=>18914,
+27903=>18915,
+29184=>18916,
+62909=>18917,
+148741=>18917,
+29580=>18918,
+16091=>18919,
+62911=>18919,
+150035=>18920,
+62912=>18920,
+23317=>18921,
+29881=>18922,
+35715=>18923,
+154788=>18924,
+62916=>18924,
+153237=>18925,
+62917=>18925,
+31379=>18926,
+31724=>18927,
+31939=>18928,
+32364=>18929,
+33528=>18930,
+34199=>18931,
+40873=>18932,
+62924=>18932,
+34960=>18933,
+40874=>18934,
+62926=>18934,
+36537=>18935,
+40875=>18936,
+62928=>18936,
+36815=>18937,
+34143=>18938,
+39392=>18939,
+37409=>18940,
+40876=>18941,
+62933=>18941,
+167353=>18942,
+62934=>18942,
+136255=>18943,
+62935=>18943,
+16497=>18944,
+62936=>18944,
+17058=>18945,
+62937=>18945,
+23066=>18946,
+39016=>18947,
+26475=>18948,
+17014=>18949,
+62944=>18949,
+22333=>18950,
+34262=>18951,
+62948=>18952,
+149883=>18952,
+33471=>18953,
+160013=>18954,
+62950=>18954,
+19585=>18955,
+62951=>18955,
+159092=>18956,
+62952=>18956,
+23931=>18957,
+158485=>18958,
+62954=>18958,
+159678=>18959,
+62955=>18959,
+40877=>18960,
+62956=>18960,
+40878=>18961,
+62957=>18961,
+23446=>18962,
+40879=>18963,
+62959=>18963,
+32347=>18964,
+17392=>18965,
+19506=>18966,
+17923=>18967,
+17830=>18968,
+17784=>18969,
+160359=>18970,
+19831=>18971,
+17843=>18972,
+162993=>18973,
+19682=>18974,
+163013=>18975,
+15253=>18976,
+18230=>18977,
+18244=>18978,
+19527=>18979,
+19520=>18980,
+148159=>18981,
+144919=>18982,
+160594=>18983,
+159371=>18984,
+159954=>18985,
+19543=>18986,
+172881=>18987,
+18255=>18988,
+17882=>18989,
+19589=>18990,
+162924=>18991,
+19719=>18992,
+19108=>18993,
+18081=>18994,
+158499=>18995,
+29221=>18996,
+154196=>18997,
+137827=>18998,
+146950=>18999,
+147297=>19000,
+26189=>19001,
+22267=>19002,
+32149=>19003,
+22813=>19004,
+166841=>19005,
+15860=>19006,
+38708=>19007,
+162799=>19008,
+23515=>19009,
+138590=>19010,
+23204=>19011,
+13861=>19012,
+171696=>19013,
+23249=>19014,
+23479=>19015,
+23804=>19016,
+26478=>19017,
+34195=>19018,
+170309=>19019,
+29793=>19020,
+29853=>19021,
+133743=>19022,
+26343=>19023,
+28247=>19024,
+31178=>19025,
+15752=>19026,
+17603=>19027,
+143958=>19028,
+141206=>19029,
+17306=>19030,
+17718=>19031,
+23765=>19032,
+146202=>19033,
+35577=>19034,
+23672=>19035,
+15634=>19036,
+144721=>19037,
+23928=>19038,
+40882=>19039,
+29015=>19040,
+17752=>19041,
+147692=>19042,
+138787=>19043,
+19575=>19044,
+14712=>19045,
+13386=>19046,
+131492=>19047,
+158785=>19048,
+35532=>19049,
+20404=>19050,
+131641=>19051,
+22975=>19052,
+33132=>19053,
+38998=>19054,
+170234=>19055,
+24379=>19056,
+134047=>19057,
+139713=>19058,
+166253=>19059,
+16642=>19060,
+18107=>19061,
+168057=>19062,
+16135=>19063,
+40883=>19064,
+172469=>19065,
+16632=>19066,
+14294=>19067,
+18167=>19068,
+158790=>19069,
+16764=>19070,
+165554=>19071,
+160767=>19072,
+17773=>19073,
+14548=>19074,
+152730=>19075,
+17761=>19076,
+17691=>19077,
+19849=>19078,
+19579=>19079,
+19830=>19080,
+17898=>19081,
+16328=>19082,
+150287=>19083,
+13921=>19084,
+17630=>19085,
+17597=>19086,
+16877=>19087,
+);
+?>
diff --git a/admin/exportclases/fonts/uni2cid_ag15.php b/admin/exportclases/fonts/uni2cid_ag15.php
new file mode 100644
index 0000000..194559d
--- /dev/null
+++ b/admin/exportclases/fonts/uni2cid_ag15.php
@@ -0,0 +1,30222 @@
+<?php
+// unicode to cid conversion table is from
+// ftp://ftp.oreilly.com/pub/examples/nutshell/cjkv/adobe/
+// cid2code.txt in ag15.tar.Z
+$cidinfo['uni2cid'] = array(
+32=>1,
+33=>2,
+34=>3,
+35=>4,
+36=>5,
+37=>6,
+38=>7,
+39=>8,
+40=>9,
+41=>10,
+42=>11,
+43=>12,
+44=>13,
+45=>14,
+46=>15,
+47=>16,
+48=>17,
+49=>18,
+50=>19,
+51=>20,
+52=>21,
+53=>22,
+54=>23,
+55=>24,
+56=>25,
+57=>26,
+58=>27,
+59=>28,
+60=>29,
+61=>30,
+62=>31,
+63=>32,
+64=>33,
+65=>34,
+66=>35,
+67=>36,
+68=>37,
+69=>38,
+70=>39,
+71=>40,
+72=>41,
+73=>42,
+74=>43,
+75=>44,
+76=>45,
+77=>46,
+78=>47,
+79=>48,
+80=>49,
+81=>50,
+82=>51,
+83=>52,
+84=>53,
+85=>54,
+86=>55,
+87=>56,
+88=>57,
+89=>58,
+90=>59,
+91=>60,
+92=>61,
+93=>62,
+94=>63,
+95=>64,
+96=>65,
+97=>66,
+98=>67,
+99=>68,
+100=>69,
+101=>70,
+102=>71,
+103=>72,
+104=>73,
+105=>74,
+106=>75,
+107=>76,
+108=>77,
+109=>78,
+110=>79,
+111=>80,
+112=>81,
+113=>82,
+114=>83,
+115=>84,
+116=>85,
+117=>86,
+118=>87,
+119=>88,
+120=>89,
+121=>90,
+122=>91,
+123=>92,
+124=>93,
+125=>94,
+126=>95,
+12288=>96,
+12289=>97,
+12290=>98,
+183=>99,
+12539=>99,
+713=>100,
+711=>101,
+168=>102,
+12291=>103,
+12293=>104,
+8212=>105,
+65374=>106,
+8214=>107,
+8230=>108,
+8943=>108,
+8216=>109,
+8217=>110,
+8220=>111,
+8221=>112,
+12308=>113,
+12309=>114,
+12296=>115,
+12297=>116,
+12298=>117,
+12299=>118,
+12300=>119,
+12301=>120,
+12302=>121,
+12303=>122,
+12310=>123,
+12311=>124,
+12304=>125,
+12305=>126,
+177=>127,
+215=>128,
+247=>129,
+8758=>130,
+8743=>131,
+8744=>132,
+8721=>133,
+8719=>134,
+8746=>135,
+8745=>136,
+8712=>137,
+8759=>138,
+8730=>139,
+8869=>140,
+8741=>141,
+8736=>142,
+8978=>143,
+8857=>144,
+8747=>145,
+8750=>146,
+8801=>147,
+8780=>148,
+8776=>149,
+8765=>150,
+8733=>151,
+8800=>152,
+8814=>153,
+8815=>154,
+8804=>155,
+8805=>156,
+8734=>157,
+8757=>158,
+8756=>159,
+9794=>160,
+9792=>161,
+176=>162,
+8242=>163,
+8243=>164,
+8451=>165,
+65284=>166,
+164=>167,
+65504=>168,
+65505=>169,
+8240=>170,
+167=>171,
+8470=>172,
+9734=>173,
+9733=>174,
+9675=>175,
+9679=>176,
+9678=>177,
+9671=>178,
+9670=>179,
+9633=>180,
+9632=>181,
+9651=>182,
+9650=>183,
+8251=>184,
+8594=>185,
+8592=>186,
+8593=>187,
+8595=>188,
+12307=>189,
+9352=>190,
+9353=>191,
+9354=>192,
+9355=>193,
+9356=>194,
+9357=>195,
+9358=>196,
+9359=>197,
+9360=>198,
+9361=>199,
+9362=>200,
+9363=>201,
+9364=>202,
+9365=>203,
+9366=>204,
+9367=>205,
+9368=>206,
+9369=>207,
+9370=>208,
+9371=>209,
+9332=>210,
+9333=>211,
+9334=>212,
+9335=>213,
+9336=>214,
+9337=>215,
+9338=>216,
+9339=>217,
+9340=>218,
+9341=>219,
+9342=>220,
+9343=>221,
+9344=>222,
+9345=>223,
+9346=>224,
+9347=>225,
+9348=>226,
+9349=>227,
+9350=>228,
+9351=>229,
+9312=>230,
+9313=>231,
+9314=>232,
+9315=>233,
+9316=>234,
+9317=>235,
+9318=>236,
+9319=>237,
+9320=>238,
+9321=>239,
+12832=>240,
+12833=>241,
+12834=>242,
+12835=>243,
+12836=>244,
+12837=>245,
+12838=>246,
+12839=>247,
+12840=>248,
+12841=>249,
+8544=>250,
+8545=>251,
+8546=>252,
+8547=>253,
+8548=>254,
+8549=>255,
+8550=>256,
+8551=>257,
+8552=>258,
+8553=>259,
+8554=>260,
+8555=>261,
+65281=>262,
+65282=>263,
+65283=>264,
+65509=>265,
+65285=>266,
+65286=>267,
+65287=>268,
+65288=>269,
+65289=>270,
+65290=>271,
+65291=>272,
+65292=>273,
+65293=>274,
+65294=>275,
+65295=>276,
+65296=>277,
+65297=>278,
+65298=>279,
+65299=>280,
+65300=>281,
+65301=>282,
+65302=>283,
+65303=>284,
+65304=>285,
+65305=>286,
+65306=>287,
+65307=>288,
+65308=>289,
+65309=>290,
+65310=>291,
+65311=>292,
+65312=>293,
+65313=>294,
+65314=>295,
+65315=>296,
+65316=>297,
+65317=>298,
+65318=>299,
+65319=>300,
+65320=>301,
+65321=>302,
+65322=>303,
+65323=>304,
+65324=>305,
+65325=>306,
+65326=>307,
+65327=>308,
+65328=>309,
+65329=>310,
+65330=>311,
+65331=>312,
+65332=>313,
+65333=>314,
+65334=>315,
+65335=>316,
+65336=>317,
+65337=>318,
+65338=>319,
+65339=>320,
+65340=>321,
+65341=>322,
+65342=>323,
+65343=>324,
+65344=>325,
+65345=>326,
+65346=>327,
+65347=>328,
+65348=>329,
+65349=>330,
+65350=>331,
+65351=>332,
+65352=>333,
+65353=>334,
+65354=>335,
+65355=>336,
+65356=>337,
+65357=>338,
+65358=>339,
+65359=>340,
+65360=>341,
+65361=>342,
+65362=>343,
+65363=>344,
+65364=>345,
+65365=>346,
+65366=>347,
+65367=>348,
+65368=>349,
+65369=>350,
+65370=>351,
+65371=>352,
+65372=>353,
+65373=>354,
+65507=>355,
+12353=>356,
+12354=>357,
+12355=>358,
+12356=>359,
+12357=>360,
+12358=>361,
+12359=>362,
+12360=>363,
+12361=>364,
+12362=>365,
+12363=>366,
+12364=>367,
+12365=>368,
+12366=>369,
+12367=>370,
+12368=>371,
+12369=>372,
+12370=>373,
+12371=>374,
+12372=>375,
+12373=>376,
+12374=>377,
+12375=>378,
+12376=>379,
+12377=>380,
+12378=>381,
+12379=>382,
+12380=>383,
+12381=>384,
+12382=>385,
+12383=>386,
+12384=>387,
+12385=>388,
+12386=>389,
+12387=>390,
+12388=>391,
+12389=>392,
+12390=>393,
+12391=>394,
+12392=>395,
+12393=>396,
+12394=>397,
+12395=>398,
+12396=>399,
+12397=>400,
+12398=>401,
+12399=>402,
+12400=>403,
+12401=>404,
+12402=>405,
+12403=>406,
+12404=>407,
+12405=>408,
+12406=>409,
+12407=>410,
+12408=>411,
+12409=>412,
+12410=>413,
+12411=>414,
+12412=>415,
+12413=>416,
+12414=>417,
+12415=>418,
+12416=>419,
+12417=>420,
+12418=>421,
+12419=>422,
+12420=>423,
+12421=>424,
+12422=>425,
+12423=>426,
+12424=>427,
+12425=>428,
+12426=>429,
+12427=>430,
+12428=>431,
+12429=>432,
+12430=>433,
+12431=>434,
+12432=>435,
+12433=>436,
+12434=>437,
+12435=>438,
+12449=>439,
+12450=>440,
+12451=>441,
+12452=>442,
+12453=>443,
+12454=>444,
+12455=>445,
+12456=>446,
+12457=>447,
+12458=>448,
+12459=>449,
+12460=>450,
+12461=>451,
+12462=>452,
+12463=>453,
+12464=>454,
+12465=>455,
+12466=>456,
+12467=>457,
+12468=>458,
+12469=>459,
+12470=>460,
+12471=>461,
+12472=>462,
+12473=>463,
+12474=>464,
+12475=>465,
+12476=>466,
+12477=>467,
+12478=>468,
+12479=>469,
+12480=>470,
+12481=>471,
+12482=>472,
+12483=>473,
+12484=>474,
+12485=>475,
+12486=>476,
+12487=>477,
+12488=>478,
+12489=>479,
+12490=>480,
+12491=>481,
+12492=>482,
+12493=>483,
+12494=>484,
+12495=>485,
+12496=>486,
+12497=>487,
+12498=>488,
+12499=>489,
+12500=>490,
+12501=>491,
+12502=>492,
+12503=>493,
+12504=>494,
+12505=>495,
+12506=>496,
+12507=>497,
+12508=>498,
+12509=>499,
+12510=>500,
+12511=>501,
+12512=>502,
+12513=>503,
+12514=>504,
+12515=>505,
+12516=>506,
+12517=>507,
+12518=>508,
+12519=>509,
+12520=>510,
+12521=>511,
+12522=>512,
+12523=>513,
+12524=>514,
+12525=>515,
+12526=>516,
+12527=>517,
+12528=>518,
+12529=>519,
+12530=>520,
+12531=>521,
+12532=>522,
+12533=>523,
+12534=>524,
+913=>525,
+914=>526,
+915=>527,
+916=>528,
+917=>529,
+918=>530,
+919=>531,
+920=>532,
+921=>533,
+922=>534,
+923=>535,
+924=>536,
+925=>537,
+926=>538,
+927=>539,
+928=>540,
+929=>541,
+931=>542,
+932=>543,
+933=>544,
+934=>545,
+935=>546,
+936=>547,
+937=>548,
+945=>549,
+946=>550,
+947=>551,
+948=>552,
+949=>553,
+950=>554,
+951=>555,
+952=>556,
+953=>557,
+954=>558,
+955=>559,
+956=>560,
+957=>561,
+958=>562,
+959=>563,
+960=>564,
+961=>565,
+963=>566,
+964=>567,
+965=>568,
+966=>569,
+967=>570,
+968=>571,
+969=>572,
+65040=>573,
+59277=>573,
+65042=>574,
+59278=>574,
+65041=>575,
+59279=>575,
+59280=>576,
+65043=>576,
+59281=>577,
+65044=>577,
+59282=>578,
+65045=>578,
+59283=>579,
+65046=>579,
+65077=>580,
+65078=>581,
+65081=>582,
+65082=>583,
+65087=>584,
+65088=>585,
+65085=>586,
+65086=>587,
+65089=>588,
+65090=>589,
+65091=>590,
+65092=>591,
+59284=>592,
+65047=>592,
+59285=>593,
+65048=>593,
+65083=>594,
+65084=>595,
+65079=>596,
+65080=>597,
+65073=>598,
+8285=>599,
+59286=>599,
+65049=>599,
+65075=>600,
+65076=>601,
+1040=>602,
+1041=>603,
+1042=>604,
+1043=>605,
+1044=>606,
+1045=>607,
+1025=>608,
+1046=>609,
+1047=>610,
+1048=>611,
+1049=>612,
+1050=>613,
+1051=>614,
+1052=>615,
+1053=>616,
+1054=>617,
+1055=>618,
+1056=>619,
+1057=>620,
+1058=>621,
+1059=>622,
+1060=>623,
+1061=>624,
+1062=>625,
+1063=>626,
+1064=>627,
+1065=>628,
+1066=>629,
+1067=>630,
+1068=>631,
+1069=>632,
+1070=>633,
+1071=>634,
+1072=>635,
+1073=>636,
+1074=>637,
+1075=>638,
+1076=>639,
+1077=>640,
+1105=>641,
+1078=>642,
+1079=>643,
+1080=>644,
+1081=>645,
+1082=>646,
+1083=>647,
+1084=>648,
+1085=>649,
+1086=>650,
+1087=>651,
+1088=>652,
+1089=>653,
+1090=>654,
+1091=>655,
+1092=>656,
+1093=>657,
+1094=>658,
+1095=>659,
+1096=>660,
+1097=>661,
+1098=>662,
+1099=>663,
+1100=>664,
+1101=>665,
+1102=>666,
+1103=>667,
+257=>668,
+225=>669,
+462=>670,
+224=>671,
+275=>672,
+233=>673,
+283=>674,
+232=>675,
+299=>676,
+237=>677,
+464=>678,
+236=>679,
+333=>680,
+243=>681,
+466=>682,
+242=>683,
+363=>684,
+250=>685,
+468=>686,
+249=>687,
+470=>688,
+472=>689,
+474=>690,
+476=>691,
+252=>692,
+234=>693,
+593=>694,
+7743=>695,
+59335=>695,
+324=>696,
+328=>697,
+505=>698,
+59336=>698,
+609=>699,
+12549=>700,
+12550=>701,
+12551=>702,
+12552=>703,
+12553=>704,
+12554=>705,
+12555=>706,
+12556=>707,
+12557=>708,
+12558=>709,
+12559=>710,
+12560=>711,
+12561=>712,
+12562=>713,
+12563=>714,
+12564=>715,
+12565=>716,
+12566=>717,
+12567=>718,
+12568=>719,
+12569=>720,
+12570=>721,
+12571=>722,
+12572=>723,
+12573=>724,
+12574=>725,
+12575=>726,
+12576=>727,
+12577=>728,
+12578=>729,
+12579=>730,
+12580=>731,
+12581=>732,
+12582=>733,
+12583=>734,
+12584=>735,
+12585=>736,
+9472=>738,
+9473=>739,
+9474=>740,
+9475=>741,
+9476=>742,
+9477=>743,
+9478=>744,
+9479=>745,
+9480=>746,
+9481=>747,
+9482=>748,
+9483=>749,
+9484=>750,
+9485=>751,
+9486=>752,
+9487=>753,
+9488=>754,
+9489=>755,
+9490=>756,
+9491=>757,
+9492=>758,
+9493=>759,
+9494=>760,
+9495=>761,
+9496=>762,
+9497=>763,
+9498=>764,
+9499=>765,
+9500=>766,
+9501=>767,
+9502=>768,
+9503=>769,
+9504=>770,
+9505=>771,
+9506=>772,
+9507=>773,
+9508=>774,
+9509=>775,
+9510=>776,
+9511=>777,
+9512=>778,
+9513=>779,
+9514=>780,
+9515=>781,
+9516=>782,
+9517=>783,
+9518=>784,
+9519=>785,
+9520=>786,
+9521=>787,
+9522=>788,
+9523=>789,
+9524=>790,
+9525=>791,
+9526=>792,
+9527=>793,
+9528=>794,
+9529=>795,
+9530=>796,
+9531=>797,
+9532=>798,
+9533=>799,
+9534=>800,
+9535=>801,
+9536=>802,
+9537=>803,
+9538=>804,
+9539=>805,
+9540=>806,
+9541=>807,
+9542=>808,
+9543=>809,
+9544=>810,
+9545=>811,
+9546=>812,
+9547=>813,
+21834=>940,
+38463=>941,
+22467=>942,
+25384=>943,
+21710=>944,
+21769=>945,
+21696=>946,
+30353=>947,
+30284=>948,
+34108=>949,
+30702=>950,
+33406=>951,
+30861=>952,
+29233=>953,
+38552=>954,
+38797=>955,
+27688=>956,
+23433=>957,
+20474=>958,
+25353=>959,
+26263=>960,
+23736=>961,
+33018=>962,
+26696=>963,
+32942=>964,
+26114=>965,
+30414=>966,
+20985=>967,
+25942=>968,
+29100=>969,
+32753=>970,
+34948=>971,
+20658=>972,
+22885=>973,
+25034=>974,
+28595=>975,
+33453=>976,
+25420=>977,
+25170=>978,
+21485=>979,
+21543=>980,
+31494=>981,
+12043=>982,
+20843=>982,
+30116=>983,
+24052=>984,
+25300=>985,
+36299=>986,
+38774=>987,
+25226=>988,
+32793=>989,
+22365=>990,
+38712=>991,
+32610=>992,
+29240=>993,
+12137=>994,
+30333=>994,
+26575=>995,
+30334=>996,
+25670=>997,
+20336=>998,
+36133=>999,
+25308=>1000,
+31255=>1001,
+26001=>1002,
+29677=>1003,
+25644=>1004,
+25203=>1005,
+33324=>1006,
+39041=>1007,
+26495=>1008,
+29256=>1009,
+25198=>1010,
+25292=>1011,
+20276=>1012,
+29923=>1013,
+21322=>1014,
+21150=>1015,
+32458=>1016,
+37030=>1017,
+24110=>1018,
+26758=>1019,
+27036=>1020,
+33152=>1021,
+32465=>1022,
+26834=>1023,
+30917=>1024,
+34444=>1025,
+38225=>1026,
+20621=>1027,
+35876=>1028,
+33502=>1029,
+32990=>1030,
+21253=>1031,
+35090=>1032,
+21093=>1033,
+34180=>1034,
+38649=>1035,
+20445=>1036,
+22561=>1037,
+39281=>1038,
+23453=>1039,
+25265=>1040,
+25253=>1041,
+26292=>1042,
+35961=>1043,
+40077=>1044,
+29190=>1045,
+26479=>1046,
+30865=>1047,
+24754=>1048,
+21329=>1049,
+21271=>1050,
+36744=>1051,
+32972=>1052,
+36125=>1053,
+38049=>1054,
+20493=>1055,
+29384=>1056,
+22791=>1057,
+24811=>1058,
+28953=>1059,
+34987=>1060,
+22868=>1061,
+33519=>1062,
+26412=>1063,
+31528=>1064,
+23849=>1065,
+32503=>1066,
+29997=>1067,
+27893=>1068,
+36454=>1069,
+36856=>1070,
+36924=>1071,
+12240=>1072,
+40763=>1072,
+12112=>1073,
+27604=>1073,
+37145=>1074,
+31508=>1075,
+24444=>1076,
+30887=>1077,
+34006=>1078,
+34109=>1079,
+27605=>1080,
+27609=>1081,
+27606=>1082,
+24065=>1083,
+24199=>1084,
+30201=>1085,
+38381=>1086,
+25949=>1087,
+24330=>1088,
+24517=>1089,
+36767=>1090,
+22721=>1091,
+33218=>1092,
+36991=>1093,
+38491=>1094,
+38829=>1095,
+36793=>1096,
+32534=>1097,
+36140=>1098,
+25153=>1099,
+20415=>1100,
+21464=>1101,
+21342=>1102,
+36776=>1103,
+36777=>1104,
+36779=>1105,
+36941=>1106,
+26631=>1107,
+24426=>1108,
+33176=>1109,
+34920=>1110,
+40150=>1111,
+24971=>1112,
+21035=>1113,
+30250=>1114,
+24428=>1115,
+25996=>1116,
+28626=>1117,
+28392=>1118,
+23486=>1119,
+25672=>1120,
+20853=>1121,
+20912=>1122,
+26564=>1123,
+19993=>1124,
+31177=>1125,
+39292=>1126,
+28851=>1127,
+30149=>1128,
+24182=>1129,
+29627=>1130,
+33760=>1131,
+25773=>1132,
+25320=>1133,
+38069=>1134,
+27874=>1135,
+21338=>1136,
+21187=>1137,
+25615=>1138,
+38082=>1139,
+31636=>1140,
+20271=>1141,
+24091=>1142,
+33334=>1143,
+33046=>1144,
+33162=>1145,
+28196=>1146,
+27850=>1147,
+39539=>1148,
+25429=>1149,
+12056=>1150,
+21340=>1150,
+21754=>1151,
+34917=>1152,
+22496=>1153,
+19981=>1154,
+24067=>1155,
+27493=>1156,
+31807=>1157,
+37096=>1158,
+24598=>1159,
+25830=>1160,
+29468=>1161,
+35009=>1162,
+26448=>1163,
+25165=>1164,
+36130=>1165,
+30572=>1166,
+36393=>1167,
+37319=>1168,
+24425=>1169,
+33756=>1170,
+34081=>1171,
+39184=>1172,
+21442=>1173,
+34453=>1174,
+27531=>1175,
+24813=>1176,
+24808=>1177,
+28799=>1178,
+33485=>1179,
+33329=>1180,
+20179=>1181,
+27815=>1182,
+34255=>1183,
+25805=>1184,
+31961=>1185,
+27133=>1186,
+26361=>1187,
+33609=>1188,
+21397=>1189,
+31574=>1190,
+20391=>1191,
+20876=>1192,
+27979=>1193,
+23618=>1194,
+36461=>1195,
+25554=>1196,
+21449=>1197,
+33580=>1198,
+33590=>1199,
+26597=>1200,
+30900=>1201,
+25661=>1202,
+23519=>1203,
+23700=>1204,
+24046=>1205,
+35815=>1206,
+25286=>1207,
+26612=>1208,
+35962=>1209,
+25600=>1210,
+25530=>1211,
+34633=>1212,
+39307=>1213,
+35863=>1214,
+32544=>1215,
+38130=>1216,
+20135=>1217,
+38416=>1218,
+39076=>1219,
+26124=>1220,
+29462=>1221,
+22330=>1222,
+23581=>1223,
+24120=>1224,
+38271=>1225,
+20607=>1226,
+32928=>1227,
+12058=>1228,
+21378=>1228,
+25950=>1229,
+30021=>1230,
+21809=>1231,
+20513=>1232,
+36229=>1233,
+25220=>1234,
+38046=>1235,
+26397=>1236,
+22066=>1237,
+28526=>1238,
+24034=>1239,
+21557=>1240,
+28818=>1241,
+36710=>1242,
+25199=>1243,
+25764=>1244,
+25507=>1245,
+24443=>1246,
+28552=>1247,
+37108=>1248,
+12162=>1249,
+33251=>1249,
+12192=>1250,
+36784=>1250,
+23576=>1251,
+26216=>1252,
+24561=>1253,
+27785=>1254,
+38472=>1255,
+36225=>1256,
+34924=>1257,
+25745=>1258,
+31216=>1259,
+22478=>1260,
+27225=>1261,
+25104=>1262,
+21576=>1263,
+20056=>1264,
+31243=>1265,
+24809=>1266,
+28548=>1267,
+35802=>1268,
+25215=>1269,
+36894=>1270,
+39563=>1271,
+31204=>1272,
+21507=>1273,
+30196=>1274,
+25345=>1275,
+21273=>1276,
+27744=>1277,
+36831=>1278,
+24347=>1279,
+39536=>1280,
+32827=>1281,
+40831=>1282,
+20360=>1283,
+23610=>1284,
+12186=>1285,
+36196=>1285,
+32709=>1286,
+26021=>1287,
+28861=>1288,
+20805=>1289,
+20914=>1290,
+12173=>1291,
+34411=>1291,
+23815=>1292,
+23456=>1293,
+25277=>1294,
+37228=>1295,
+30068=>1296,
+36364=>1297,
+31264=>1298,
+24833=>1299,
+31609=>1300,
+20167=>1301,
+32504=>1302,
+30597=>1303,
+19985=>1304,
+33261=>1305,
+21021=>1306,
+20986=>1307,
+27249=>1308,
+21416=>1309,
+36487=>1310,
+38148=>1311,
+38607=>1312,
+28353=>1313,
+38500=>1314,
+26970=>1315,
+30784=>1316,
+20648=>1317,
+30679=>1318,
+25616=>1319,
+35302=>1320,
+22788=>1321,
+25571=>1322,
+24029=>1323,
+31359=>1324,
+26941=>1325,
+20256=>1326,
+33337=>1327,
+21912=>1328,
+20018=>1329,
+30126=>1330,
+31383=>1331,
+24162=>1332,
+24202=>1333,
+38383=>1334,
+21019=>1335,
+21561=>1336,
+28810=>1337,
+25462=>1338,
+38180=>1339,
+22402=>1340,
+26149=>1341,
+26943=>1342,
+37255=>1343,
+21767=>1344,
+28147=>1345,
+32431=>1346,
+34850=>1347,
+25139=>1348,
+32496=>1349,
+30133=>1350,
+33576=>1351,
+30913=>1352,
+38604=>1353,
+36766=>1354,
+24904=>1355,
+29943=>1356,
+35789=>1357,
+27492=>1358,
+21050=>1359,
+36176=>1360,
+27425=>1361,
+32874=>1362,
+33905=>1363,
+22257=>1364,
+21254=>1365,
+20174=>1366,
+19995=>1367,
+20945=>1368,
+31895=>1369,
+37259=>1370,
+31751=>1371,
+20419=>1372,
+36479=>1373,
+31713=>1374,
+31388=>1375,
+25703=>1376,
+23828=>1377,
+20652=>1378,
+33030=>1379,
+30209=>1380,
+31929=>1381,
+28140=>1382,
+32736=>1383,
+26449=>1384,
+23384=>1385,
+12072=>1386,
+23544=>1386,
+30923=>1387,
+25774=>1388,
+25619=>1389,
+25514=>1390,
+25387=>1391,
+38169=>1392,
+25645=>1393,
+36798=>1394,
+31572=>1395,
+30249=>1396,
+25171=>1397,
+12068=>1398,
+22823=>1398,
+21574=>1399,
+12109=>1400,
+27513=>1400,
+20643=>1401,
+25140=>1402,
+24102=>1403,
+27526=>1404,
+20195=>1405,
+36151=>1406,
+34955=>1407,
+24453=>1408,
+36910=>1409,
+24608=>1410,
+32829=>1411,
+25285=>1412,
+20025=>1413,
+21333=>1414,
+37112=>1415,
+25528=>1416,
+32966=>1417,
+26086=>1418,
+27694=>1419,
+20294=>1420,
+24814=>1421,
+28129=>1422,
+35806=>1423,
+24377=>1424,
+34507=>1425,
+24403=>1426,
+25377=>1427,
+20826=>1428,
+33633=>1429,
+26723=>1430,
+12049=>1431,
+20992=>1431,
+25443=>1432,
+36424=>1433,
+20498=>1434,
+23707=>1435,
+31095=>1436,
+23548=>1437,
+21040=>1438,
+31291=>1439,
+24764=>1440,
+36947=>1441,
+30423=>1442,
+24503=>1443,
+24471=>1444,
+30340=>1445,
+36460=>1446,
+28783=>1447,
+30331=>1448,
+31561=>1449,
+30634=>1450,
+20979=>1451,
+37011=>1452,
+22564=>1453,
+20302=>1454,
+28404=>1455,
+36842=>1456,
+25932=>1457,
+31515=>1458,
+29380=>1459,
+28068=>1460,
+32735=>1461,
+23265=>1462,
+25269=>1463,
+24213=>1464,
+22320=>1465,
+33922=>1466,
+31532=>1467,
+24093=>1468,
+24351=>1469,
+36882=>1470,
+32532=>1471,
+39072=>1472,
+25474=>1473,
+28359=>1474,
+30872=>1475,
+28857=>1476,
+20856=>1477,
+38747=>1478,
+22443=>1479,
+30005=>1480,
+20291=>1481,
+30008=>1482,
+24215=>1483,
+24806=>1484,
+22880=>1485,
+28096=>1486,
+27583=>1487,
+30857=>1488,
+21500=>1489,
+38613=>1490,
+20939=>1491,
+20993=>1492,
+25481=>1493,
+21514=>1494,
+38035=>1495,
+35843=>1496,
+36300=>1497,
+29241=>1498,
+30879=>1499,
+34678=>1500,
+36845=>1501,
+35853=>1502,
+21472=>1503,
+19969=>1504,
+30447=>1505,
+21486=>1506,
+38025=>1507,
+39030=>1508,
+12237=>1509,
+40718=>1509,
+38189=>1510,
+23450=>1511,
+35746=>1512,
+20002=>1513,
+19996=>1514,
+20908=>1515,
+33891=>1516,
+25026=>1517,
+21160=>1518,
+26635=>1519,
+20375=>1520,
+24683=>1521,
+20923=>1522,
+27934=>1523,
+20828=>1524,
+25238=>1525,
+12099=>1526,
+26007=>1526,
+38497=>1527,
+12182=>1528,
+35910=>1528,
+36887=>1529,
+30168=>1530,
+37117=>1531,
+30563=>1532,
+27602=>1533,
+29322=>1534,
+29420=>1535,
+35835=>1536,
+22581=>1537,
+30585=>1538,
+36172=>1539,
+26460=>1540,
+38208=>1541,
+32922=>1542,
+24230=>1543,
+28193=>1544,
+22930=>1545,
+31471=>1546,
+30701=>1547,
+38203=>1548,
+27573=>1549,
+26029=>1550,
+32526=>1551,
+22534=>1552,
+20817=>1553,
+38431=>1554,
+23545=>1555,
+22697=>1556,
+21544=>1557,
+36466=>1558,
+25958=>1559,
+39039=>1560,
+22244=>1561,
+38045=>1562,
+30462=>1563,
+36929=>1564,
+25479=>1565,
+21702=>1566,
+22810=>1567,
+22842=>1568,
+22427=>1569,
+36530=>1570,
+26421=>1571,
+36346=>1572,
+33333=>1573,
+21057=>1574,
+24816=>1575,
+22549=>1576,
+34558=>1577,
+23784=>1578,
+40517=>1579,
+20420=>1580,
+39069=>1581,
+35769=>1582,
+23077=>1583,
+24694=>1584,
+21380=>1585,
+25212=>1586,
+36943=>1587,
+37122=>1588,
+39295=>1589,
+24681=>1590,
+12157=>1591,
+32780=>1591,
+12041=>1592,
+20799=>1592,
+12159=>1593,
+32819=>1593,
+23572=>1594,
+39285=>1595,
+27953=>1596,
+12038=>1597,
+20108=>1597,
+36144=>1598,
+21457=>1599,
+32602=>1600,
+31567=>1601,
+20240=>1602,
+20047=>1603,
+38400=>1604,
+27861=>1605,
+29648=>1606,
+34281=>1607,
+24070=>1608,
+30058=>1609,
+32763=>1610,
+27146=>1611,
+30718=>1612,
+38034=>1613,
+32321=>1614,
+20961=>1615,
+28902=>1616,
+21453=>1617,
+36820=>1618,
+33539=>1619,
+36137=>1620,
+29359=>1621,
+39277=>1622,
+27867=>1623,
+22346=>1624,
+33459=>1625,
+12101=>1626,
+26041=>1626,
+32938=>1627,
+25151=>1628,
+38450=>1629,
+22952=>1630,
+20223=>1631,
+35775=>1632,
+32442=>1633,
+25918=>1634,
+33778=>1635,
+12206=>1636,
+38750=>1636,
+21857=>1637,
+39134=>1638,
+32933=>1639,
+21290=>1640,
+35837=>1641,
+21536=>1642,
+32954=>1643,
+24223=>1644,
+27832=>1645,
+36153=>1646,
+33452=>1647,
+37210=>1648,
+21545=>1649,
+27675=>1650,
+20998=>1651,
+32439=>1652,
+22367=>1653,
+28954=>1654,
+27774=>1655,
+31881=>1656,
+22859=>1657,
+20221=>1658,
+24575=>1659,
+24868=>1660,
+31914=>1661,
+20016=>1662,
+23553=>1663,
+26539=>1664,
+34562=>1665,
+23792=>1666,
+38155=>1667,
+39118=>1668,
+30127=>1669,
+28925=>1670,
+36898=>1671,
+20911=>1672,
+32541=>1673,
+35773=>1674,
+22857=>1675,
+20964=>1676,
+20315=>1677,
+21542=>1678,
+22827=>1679,
+25975=>1680,
+32932=>1681,
+23413=>1682,
+25206=>1683,
+25282=>1684,
+36752=>1685,
+24133=>1686,
+27679=>1687,
+31526=>1688,
+20239=>1689,
+20440=>1690,
+26381=>1691,
+28014=>1692,
+28074=>1693,
+31119=>1694,
+34993=>1695,
+24343=>1696,
+29995=>1697,
+25242=>1698,
+36741=>1699,
+20463=>1700,
+37340=>1701,
+26023=>1702,
+33071=>1703,
+33105=>1704,
+24220=>1705,
+33104=>1706,
+36212=>1707,
+21103=>1708,
+35206=>1709,
+36171=>1710,
+22797=>1711,
+20613=>1712,
+20184=>1713,
+12201=>1714,
+38428=>1714,
+12119=>1715,
+29238=>1715,
+33145=>1716,
+36127=>1717,
+23500=>1718,
+35747=>1719,
+38468=>1720,
+22919=>1721,
+32538=>1722,
+21648=>1723,
+22134=>1724,
+22030=>1725,
+35813=>1726,
+25913=>1727,
+27010=>1728,
+38041=>1729,
+30422=>1730,
+28297=>1731,
+12082=>1732,
+24178=>1732,
+12130=>1733,
+29976=>1733,
+26438=>1734,
+26577=>1735,
+31487=>1736,
+32925=>1737,
+36214=>1738,
+24863=>1739,
+31174=>1740,
+25954=>1741,
+36195=>1742,
+20872=>1743,
+21018=>1744,
+38050=>1745,
+32568=>1746,
+32923=>1747,
+32434=>1748,
+23703=>1749,
+28207=>1750,
+26464=>1751,
+31705=>1752,
+30347=>1753,
+12220=>1754,
+39640=>1754,
+33167=>1755,
+32660=>1756,
+31957=>1757,
+25630=>1758,
+38224=>1759,
+31295=>1760,
+21578=>1761,
+21733=>1762,
+27468=>1763,
+25601=>1764,
+12093=>1765,
+25096=>1765,
+40509=>1766,
+33011=>1767,
+30105=>1768,
+21106=>1769,
+12208=>1770,
+38761=>1770,
+33883=>1771,
+26684=>1772,
+34532=>1773,
+38401=>1774,
+38548=>1775,
+38124=>1776,
+20010=>1777,
+21508=>1778,
+32473=>1779,
+26681=>1780,
+36319=>1781,
+32789=>1782,
+26356=>1783,
+24218=>1784,
+32697=>1785,
+22466=>1786,
+32831=>1787,
+26775=>1788,
+12079=>1789,
+24037=>1789,
+25915=>1790,
+21151=>1791,
+24685=>1792,
+40858=>1793,
+20379=>1794,
+36524=>1795,
+20844=>1796,
+23467=>1797,
+12088=>1798,
+24339=>1798,
+24041=>1799,
+27742=>1800,
+25329=>1801,
+36129=>1802,
+20849=>1803,
+38057=>1804,
+21246=>1805,
+27807=>1806,
+33503=>1807,
+29399=>1808,
+22434=>1809,
+26500=>1810,
+36141=>1811,
+22815=>1812,
+36764=>1813,
+33735=>1814,
+21653=>1815,
+31629=>1816,
+20272=>1817,
+27837=>1818,
+23396=>1819,
+22993=>1820,
+12238=>1821,
+40723=>1821,
+21476=>1822,
+34506=>1823,
+12219=>1824,
+39592=>1824,
+12181=>1825,
+35895=>1825,
+32929=>1826,
+25925=>1827,
+39038=>1828,
+22266=>1829,
+38599=>1830,
+21038=>1831,
+12128=>1832,
+29916=>1832,
+21072=>1833,
+23521=>1834,
+25346=>1835,
+35074=>1836,
+20054=>1837,
+25296=>1838,
+24618=>1839,
+26874=>1840,
+20851=>1841,
+23448=>1842,
+20896=>1843,
+35266=>1844,
+31649=>1845,
+39302=>1846,
+32592=>1847,
+24815=>1848,
+28748=>1849,
+36143=>1850,
+20809=>1851,
+12084=>1852,
+24191=>1852,
+36891=>1853,
+29808=>1854,
+35268=>1855,
+22317=>1856,
+30789=>1857,
+24402=>1858,
+40863=>1859,
+38394=>1860,
+36712=>1861,
+12225=>1862,
+39740=>1862,
+35809=>1863,
+30328=>1864,
+26690=>1865,
+26588=>1866,
+36330=>1867,
+36149=>1868,
+21053=>1869,
+36746=>1870,
+28378=>1871,
+26829=>1872,
+38149=>1873,
+37101=>1874,
+22269=>1875,
+26524=>1876,
+35065=>1877,
+36807=>1878,
+21704=>1879,
+39608=>1880,
+23401=>1881,
+28023=>1882,
+27686=>1883,
+20133=>1884,
+23475=>1885,
+39559=>1886,
+37219=>1887,
+25000=>1888,
+37039=>1889,
+38889=>1890,
+21547=>1891,
+28085=>1892,
+23506=>1893,
+20989=>1894,
+21898=>1895,
+32597=>1896,
+32752=>1897,
+25788=>1898,
+25421=>1899,
+26097=>1900,
+25022=>1901,
+24717=>1902,
+28938=>1903,
+27735=>1904,
+27721=>1905,
+22831=>1906,
+26477=>1907,
+33322=>1908,
+22741=>1909,
+22158=>1910,
+35946=>1911,
+27627=>1912,
+37085=>1913,
+22909=>1914,
+32791=>1915,
+21495=>1916,
+28009=>1917,
+21621=>1918,
+21917=>1919,
+33655=>1920,
+33743=>1921,
+26680=>1922,
+12146=>1923,
+31166=>1923,
+21644=>1924,
+20309=>1925,
+21512=>1926,
+30418=>1927,
+35977=>1928,
+38402=>1929,
+27827=>1930,
+28088=>1931,
+36203=>1932,
+35088=>1933,
+40548=>1934,
+36154=>1935,
+22079=>1936,
+12234=>1937,
+40657=>1937,
+30165=>1938,
+24456=>1939,
+29408=>1940,
+24680=>1941,
+21756=>1942,
+20136=>1943,
+27178=>1944,
+34913=>1945,
+24658=>1946,
+36720=>1947,
+21700=>1948,
+28888=>1949,
+34425=>1950,
+40511=>1951,
+27946=>1952,
+23439=>1953,
+24344=>1954,
+32418=>1955,
+21897=>1956,
+20399=>1957,
+29492=>1958,
+21564=>1959,
+21402=>1960,
+20505=>1961,
+21518=>1962,
+21628=>1963,
+20046=>1964,
+24573=>1965,
+29786=>1966,
+22774=>1967,
+33899=>1968,
+32993=>1969,
+34676=>1970,
+29392=>1971,
+31946=>1972,
+28246=>1973,
+24359=>1974,
+34382=>1975,
+21804=>1976,
+25252=>1977,
+20114=>1978,
+27818=>1979,
+25143=>1980,
+33457=>1981,
+21719=>1982,
+21326=>1983,
+29502=>1984,
+28369=>1985,
+30011=>1986,
+21010=>1987,
+21270=>1988,
+35805=>1989,
+27088=>1990,
+24458=>1991,
+24576=>1992,
+28142=>1993,
+22351=>1994,
+27426=>1995,
+29615=>1996,
+26707=>1997,
+36824=>1998,
+32531=>1999,
+25442=>2000,
+24739=>2001,
+21796=>2002,
+30186=>2003,
+35938=>2004,
+28949=>2005,
+28067=>2006,
+23462=>2007,
+24187=>2008,
+33618=>2009,
+24908=>2010,
+40644=>2011,
+30970=>2012,
+34647=>2013,
+31783=>2014,
+30343=>2015,
+20976=>2016,
+24822=>2017,
+29004=>2018,
+26179=>2019,
+24140=>2020,
+24653=>2021,
+35854=>2022,
+28784=>2023,
+25381=>2024,
+36745=>2025,
+24509=>2026,
+24674=>2027,
+34516=>2028,
+22238=>2029,
+27585=>2030,
+24724=>2031,
+24935=>2032,
+21321=>2033,
+24800=>2034,
+26214=>2035,
+36159=>2036,
+31229=>2037,
+20250=>2038,
+28905=>2039,
+27719=>2040,
+35763=>2041,
+35826=>2042,
+32472=>2043,
+33636=>2044,
+26127=>2045,
+23130=>2046,
+39746=>2047,
+27985=>2048,
+28151=>2049,
+35905=>2050,
+27963=>2051,
+20249=>2052,
+12117=>2053,
+28779=>2053,
+33719=>2054,
+25110=>2055,
+24785=>2056,
+38669=>2057,
+36135=>2058,
+31096=>2059,
+20987=>2060,
+22334=>2061,
+22522=>2062,
+26426=>2063,
+30072=>2064,
+31293=>2065,
+31215=>2066,
+31637=>2067,
+32908=>2068,
+39269=>2069,
+36857=>2070,
+28608=>2071,
+35749=>2072,
+40481=>2073,
+23020=>2074,
+32489=>2075,
+32521=>2076,
+21513=>2077,
+26497=>2078,
+26840=>2079,
+36753=>2080,
+31821=>2081,
+38598=>2082,
+21450=>2083,
+24613=>2084,
+30142=>2085,
+27762=>2086,
+21363=>2087,
+23241=>2088,
+32423=>2089,
+25380=>2090,
+12047=>2091,
+20960=>2091,
+33034=>2092,
+12080=>2093,
+24049=>2093,
+34015=>2094,
+25216=>2095,
+20864=>2096,
+23395=>2097,
+20238=>2098,
+31085=>2099,
+21058=>2100,
+24760=>2101,
+27982=>2102,
+23492=>2103,
+23490=>2104,
+35745=>2105,
+35760=>2106,
+26082=>2107,
+24524=>2108,
+38469=>2109,
+22931=>2110,
+32487=>2111,
+32426=>2112,
+22025=>2113,
+26551=>2114,
+22841=>2115,
+20339=>2116,
+23478=>2117,
+21152=>2118,
+33626=>2119,
+39050=>2120,
+36158=>2121,
+30002=>2122,
+38078=>2123,
+20551=>2124,
+31292=>2125,
+20215=>2126,
+26550=>2127,
+39550=>2128,
+23233=>2129,
+27516=>2130,
+30417=>2131,
+22362=>2132,
+23574=>2133,
+31546=>2134,
+38388=>2135,
+29006=>2136,
+20860=>2137,
+32937=>2138,
+33392=>2139,
+22904=>2140,
+32516=>2141,
+33575=>2142,
+26816=>2143,
+26604=>2144,
+30897=>2145,
+30839=>2146,
+25315=>2147,
+25441=>2148,
+31616=>2149,
+20461=>2150,
+21098=>2151,
+20943=>2152,
+33616=>2153,
+27099=>2154,
+37492=>2155,
+36341=>2156,
+36145=>2157,
+35265=>2158,
+38190=>2159,
+31661=>2160,
+20214=>2161,
+20581=>2162,
+33328=>2163,
+21073=>2164,
+39279=>2165,
+28176=>2166,
+28293=>2167,
+28071=>2168,
+24314=>2169,
+20725=>2170,
+23004=>2171,
+23558=>2172,
+27974=>2173,
+27743=>2174,
+30086=>2175,
+33931=>2176,
+26728=>2177,
+22870=>2178,
+35762=>2179,
+21280=>2180,
+37233=>2181,
+38477=>2182,
+34121=>2183,
+26898=>2184,
+30977=>2185,
+28966=>2186,
+33014=>2187,
+20132=>2188,
+37066=>2189,
+27975=>2190,
+39556=>2191,
+23047=>2192,
+22204=>2193,
+25605=>2194,
+38128=>2195,
+30699=>2196,
+20389=>2197,
+33050=>2198,
+29409=>2199,
+12179=>2200,
+35282=>2200,
+39290=>2201,
+32564=>2202,
+32478=>2203,
+21119=>2204,
+25945=>2205,
+37237=>2206,
+36735=>2207,
+36739=>2208,
+21483=>2209,
+31382=>2210,
+25581=>2211,
+25509=>2212,
+30342=>2213,
+31224=>2214,
+34903=>2215,
+38454=>2216,
+25130=>2217,
+21163=>2218,
+33410=>2219,
+26708=>2220,
+26480=>2221,
+25463=>2222,
+30571=>2223,
+31469=>2224,
+27905=>2225,
+32467=>2226,
+35299=>2227,
+22992=>2228,
+25106=>2229,
+34249=>2230,
+33445=>2231,
+30028=>2232,
+20511=>2233,
+20171=>2234,
+30117=>2235,
+35819=>2236,
+23626=>2237,
+12081=>2238,
+24062=>2238,
+31563=>2239,
+12100=>2240,
+26020=>2240,
+12198=>2241,
+37329=>2241,
+20170=>2242,
+27941=>2243,
+35167=>2244,
+32039=>2245,
+38182=>2246,
+20165=>2247,
+35880=>2248,
+36827=>2249,
+38771=>2250,
+26187=>2251,
+31105=>2252,
+36817=>2253,
+28908=>2254,
+28024=>2255,
+23613=>2256,
+21170=>2257,
+33606=>2258,
+20834=>2259,
+33550=>2260,
+30555=>2261,
+26230=>2262,
+40120=>2263,
+20140=>2264,
+24778=>2265,
+31934=>2266,
+31923=>2267,
+32463=>2268,
+20117=>2269,
+35686=>2270,
+26223=>2271,
+39048=>2272,
+38745=>2273,
+22659=>2274,
+25964=>2275,
+38236=>2276,
+24452=>2277,
+30153=>2278,
+38742=>2279,
+31455=>2280,
+31454=>2281,
+20928=>2282,
+28847=>2283,
+31384=>2284,
+25578=>2285,
+31350=>2286,
+32416=>2287,
+29590=>2288,
+12210=>2289,
+38893=>2289,
+20037=>2290,
+28792=>2291,
+20061=>2292,
+37202=>2293,
+21417=>2294,
+25937=>2295,
+26087=>2296,
+12165=>2297,
+33276=>2297,
+33285=>2298,
+21646=>2299,
+23601=>2300,
+30106=>2301,
+38816=>2302,
+25304=>2303,
+29401=>2304,
+30141=>2305,
+23621=>2306,
+39545=>2307,
+33738=>2308,
+23616=>2309,
+21632=>2310,
+30697=>2311,
+20030=>2312,
+27822=>2313,
+32858=>2314,
+25298=>2315,
+25454=>2316,
+24040=>2317,
+20855=>2318,
+36317=>2319,
+36382=>2320,
+38191=>2321,
+20465=>2322,
+21477=>2323,
+24807=>2324,
+28844=>2325,
+21095=>2326,
+25424=>2327,
+40515=>2328,
+23071=>2329,
+20518=>2330,
+30519=>2331,
+21367=>2332,
+32482=>2333,
+25733=>2334,
+25899=>2335,
+25225=>2336,
+25496=>2337,
+20500=>2338,
+29237=>2339,
+35273=>2340,
+20915=>2341,
+35776=>2342,
+32477=>2343,
+22343=>2344,
+33740=>2345,
+38055=>2346,
+20891=>2347,
+21531=>2348,
+23803=>2349,
+20426=>2350,
+31459=>2351,
+27994=>2352,
+37089=>2353,
+39567=>2354,
+21888=>2355,
+21654=>2356,
+21345=>2357,
+21679=>2358,
+24320=>2359,
+25577=>2360,
+26999=>2361,
+20975=>2362,
+24936=>2363,
+21002=>2364,
+22570=>2365,
+21208=>2366,
+22350=>2367,
+30733=>2368,
+30475=>2369,
+24247=>2370,
+24951=>2371,
+31968=>2372,
+25179=>2373,
+25239=>2374,
+20130=>2375,
+28821=>2376,
+32771=>2377,
+25335=>2378,
+28900=>2379,
+38752=>2380,
+22391=>2381,
+33499=>2382,
+26607=>2383,
+26869=>2384,
+30933=>2385,
+39063=>2386,
+31185=>2387,
+22771=>2388,
+21683=>2389,
+21487=>2390,
+28212=>2391,
+20811=>2392,
+21051=>2393,
+23458=>2394,
+35838=>2395,
+32943=>2396,
+21827=>2397,
+22438=>2398,
+24691=>2399,
+22353=>2400,
+21549=>2401,
+31354=>2402,
+24656=>2403,
+23380=>2404,
+25511=>2405,
+25248=>2406,
+12061=>2407,
+21475=>2407,
+25187=>2408,
+23495=>2409,
+26543=>2410,
+21741=>2411,
+31391=>2412,
+33510=>2413,
+37239=>2414,
+24211=>2415,
+35044=>2416,
+22840=>2417,
+22446=>2418,
+25358=>2419,
+36328=>2420,
+33007=>2421,
+22359=>2422,
+31607=>2423,
+20393=>2424,
+24555=>2425,
+23485=>2426,
+27454=>2427,
+21281=>2428,
+31568=>2429,
+29378=>2430,
+26694=>2431,
+30719=>2432,
+30518=>2433,
+26103=>2434,
+20917=>2435,
+20111=>2436,
+30420=>2437,
+23743=>2438,
+31397=>2439,
+33909=>2440,
+22862=>2441,
+39745=>2442,
+20608=>2443,
+39304=>2444,
+24871=>2445,
+28291=>2446,
+22372=>2447,
+26118=>2448,
+25414=>2449,
+22256=>2450,
+25324=>2451,
+25193=>2452,
+24275=>2453,
+38420=>2454,
+22403=>2455,
+25289=>2456,
+21895=>2457,
+34593=>2458,
+33098=>2459,
+36771=>2460,
+21862=>2461,
+33713=>2462,
+26469=>2463,
+36182=>2464,
+34013=>2465,
+23146=>2466,
+26639=>2467,
+25318=>2468,
+31726=>2469,
+38417=>2470,
+20848=>2471,
+28572=>2472,
+35888=>2473,
+25597=>2474,
+35272=>2475,
+25042=>2476,
+32518=>2477,
+28866=>2478,
+28389=>2479,
+29701=>2480,
+27028=>2481,
+29436=>2482,
+24266=>2483,
+37070=>2484,
+26391=>2485,
+28010=>2486,
+25438=>2487,
+21171=>2488,
+29282=>2489,
+12156=>2490,
+32769=>2490,
+20332=>2491,
+23013=>2492,
+37226=>2493,
+28889=>2494,
+28061=>2495,
+21202=>2496,
+20048=>2497,
+38647=>2498,
+38253=>2499,
+34174=>2500,
+30922=>2501,
+32047=>2502,
+20769=>2503,
+22418=>2504,
+25794=>2505,
+32907=>2506,
+31867=>2507,
+27882=>2508,
+26865=>2509,
+26974=>2510,
+20919=>2511,
+21400=>2512,
+26792=>2513,
+29313=>2514,
+40654=>2515,
+31729=>2516,
+29432=>2517,
+31163=>2518,
+28435=>2519,
+29702=>2520,
+26446=>2521,
+12197=>2522,
+37324=>2522,
+40100=>2523,
+31036=>2524,
+33673=>2525,
+33620=>2526,
+21519=>2527,
+26647=>2528,
+20029=>2529,
+21385=>2530,
+21169=>2531,
+30782=>2532,
+21382=>2533,
+21033=>2534,
+20616=>2535,
+20363=>2536,
+20432=>2537,
+30178=>2538,
+12148=>2539,
+31435=>2539,
+31890=>2540,
+27813=>2541,
+12202=>2542,
+38582=>2542,
+12050=>2543,
+21147=>2543,
+29827=>2544,
+21737=>2545,
+20457=>2546,
+32852=>2547,
+33714=>2548,
+36830=>2549,
+38256=>2550,
+24265=>2551,
+24604=>2552,
+28063=>2553,
+24088=>2554,
+25947=>2555,
+33080=>2556,
+38142=>2557,
+24651=>2558,
+28860=>2559,
+32451=>2560,
+31918=>2561,
+20937=>2562,
+63865=>2562,
+26753=>2563,
+31921=>2564,
+33391=>2565,
+20004=>2566,
+36742=>2567,
+37327=>2568,
+26238=>2569,
+20142=>2570,
+35845=>2571,
+25769=>2572,
+32842=>2573,
+20698=>2574,
+30103=>2575,
+29134=>2576,
+23525=>2577,
+36797=>2578,
+28518=>2579,
+20102=>2580,
+25730=>2581,
+38243=>2582,
+24278=>2583,
+26009=>2584,
+21015=>2585,
+35010=>2586,
+28872=>2587,
+21155=>2588,
+29454=>2589,
+29747=>2590,
+26519=>2591,
+30967=>2592,
+38678=>2593,
+20020=>2594,
+37051=>2595,
+40158=>2596,
+28107=>2597,
+20955=>2598,
+36161=>2599,
+21533=>2600,
+25294=>2601,
+29618=>2602,
+33777=>2603,
+38646=>2604,
+40836=>2605,
+38083=>2606,
+20278=>2607,
+32666=>2608,
+20940=>2609,
+28789=>2610,
+38517=>2611,
+23725=>2612,
+39046=>2613,
+21478=>2614,
+20196=>2615,
+28316=>2616,
+29705=>2617,
+27060=>2618,
+30827=>2619,
+39311=>2620,
+30041=>2621,
+21016=>2622,
+30244=>2623,
+27969=>2624,
+26611=>2625,
+20845=>2626,
+40857=>2627,
+32843=>2628,
+21657=>2629,
+31548=>2630,
+31423=>2631,
+38534=>2632,
+22404=>2633,
+25314=>2634,
+38471=>2635,
+27004=>2636,
+23044=>2637,
+25602=>2638,
+31699=>2639,
+28431=>2640,
+38475=>2641,
+33446=>2642,
+21346=>2643,
+39045=>2644,
+24208=>2645,
+28809=>2646,
+25523=>2647,
+21348=>2648,
+34383=>2649,
+40065=>2650,
+40595=>2651,
+30860=>2652,
+38706=>2653,
+36335=>2654,
+36162=>2655,
+12229=>2656,
+40575=>2656,
+28510=>2657,
+31108=>2658,
+24405=>2659,
+38470=>2660,
+25134=>2661,
+39540=>2662,
+21525=>2663,
+38109=>2664,
+20387=>2665,
+26053=>2666,
+23653=>2667,
+23649=>2668,
+32533=>2669,
+34385=>2670,
+27695=>2671,
+24459=>2672,
+29575=>2673,
+28388=>2674,
+32511=>2675,
+23782=>2676,
+25371=>2677,
+23402=>2678,
+28390=>2679,
+21365=>2680,
+20081=>2681,
+25504=>2682,
+30053=>2683,
+25249=>2684,
+36718=>2685,
+20262=>2686,
+20177=>2687,
+27814=>2688,
+32438=>2689,
+35770=>2690,
+33821=>2691,
+34746=>2692,
+32599=>2693,
+36923=>2694,
+38179=>2695,
+31657=>2696,
+39585=>2697,
+35064=>2698,
+33853=>2699,
+27931=>2700,
+39558=>2701,
+32476=>2702,
+22920=>2703,
+12231=>2704,
+40635=>2704,
+29595=>2705,
+30721=>2706,
+34434=>2707,
+39532=>2708,
+39554=>2709,
+22043=>2710,
+21527=>2711,
+22475=>2712,
+20080=>2713,
+40614=>2714,
+21334=>2715,
+36808=>2716,
+33033=>2717,
+30610=>2718,
+39314=>2719,
+34542=>2720,
+28385=>2721,
+34067=>2722,
+26364=>2723,
+24930=>2724,
+28459=>2725,
+35881=>2726,
+33426=>2727,
+33579=>2728,
+30450=>2729,
+27667=>2730,
+24537=>2731,
+33725=>2732,
+29483=>2733,
+33541=>2734,
+38170=>2735,
+12113=>2736,
+27611=>2736,
+12141=>2737,
+30683=>2737,
+38086=>2738,
+21359=>2739,
+33538=>2740,
+20882=>2741,
+24125=>2742,
+35980=>2743,
+36152=>2744,
+20040=>2745,
+29611=>2746,
+26522=>2747,
+26757=>2748,
+37238=>2749,
+38665=>2750,
+29028=>2751,
+27809=>2752,
+30473=>2753,
+23186=>2754,
+38209=>2755,
+27599=>2756,
+32654=>2757,
+26151=>2758,
+23504=>2759,
+22969=>2760,
+23194=>2761,
+38376=>2762,
+38391=>2763,
+20204=>2764,
+33804=>2765,
+33945=>2766,
+27308=>2767,
+30431=>2768,
+38192=>2769,
+29467=>2770,
+26790=>2771,
+23391=>2772,
+30511=>2773,
+37274=>2774,
+38753=>2775,
+31964=>2776,
+36855=>2777,
+35868=>2778,
+24357=>2779,
+12150=>2780,
+31859=>2780,
+31192=>2781,
+35269=>2782,
+27852=>2783,
+34588=>2784,
+23494=>2785,
+24130=>2786,
+26825=>2787,
+30496=>2788,
+32501=>2789,
+20885=>2790,
+20813=>2791,
+21193=>2792,
+23081=>2793,
+32517=>2794,
+12207=>2795,
+38754=>2795,
+33495=>2796,
+25551=>2797,
+30596=>2798,
+34256=>2799,
+31186=>2800,
+28218=>2801,
+24217=>2802,
+22937=>2803,
+34065=>2804,
+28781=>2805,
+27665=>2806,
+25279=>2807,
+12139=>2808,
+30399=>2808,
+25935=>2809,
+24751=>2810,
+38397=>2811,
+26126=>2812,
+34719=>2813,
+40483=>2814,
+38125=>2815,
+21517=>2816,
+21629=>2817,
+35884=>2818,
+25720=>2819,
+25721=>2820,
+34321=>2821,
+27169=>2822,
+33180=>2823,
+30952=>2824,
+25705=>2825,
+39764=>2826,
+25273=>2827,
+26411=>2828,
+33707=>2829,
+22696=>2830,
+40664=>2831,
+27819=>2832,
+28448=>2833,
+23518=>2834,
+38476=>2835,
+35851=>2836,
+29279=>2837,
+26576=>2838,
+25287=>2839,
+29281=>2840,
+20137=>2841,
+22982=>2842,
+27597=>2843,
+22675=>2844,
+26286=>2845,
+24149=>2846,
+21215=>2847,
+24917=>2848,
+12106=>2849,
+26408=>2849,
+12140=>2850,
+30446=>2850,
+30566=>2851,
+29287=>2852,
+31302=>2853,
+25343=>2854,
+21738=>2855,
+21584=>2856,
+38048=>2857,
+37027=>2858,
+23068=>2859,
+32435=>2860,
+27670=>2861,
+20035=>2862,
+22902=>2863,
+32784=>2864,
+22856=>2865,
+21335=>2866,
+30007=>2867,
+38590=>2868,
+22218=>2869,
+25376=>2870,
+33041=>2871,
+24700=>2872,
+38393=>2873,
+28118=>2874,
+21602=>2875,
+39297=>2876,
+20869=>2877,
+23273=>2878,
+33021=>2879,
+22958=>2880,
+38675=>2881,
+20522=>2882,
+27877=>2883,
+23612=>2884,
+25311=>2885,
+20320=>2886,
+21311=>2887,
+33147=>2888,
+36870=>2889,
+28346=>2890,
+34091=>2891,
+25288=>2892,
+24180=>2893,
+30910=>2894,
+25781=>2895,
+25467=>2896,
+24565=>2897,
+23064=>2898,
+37247=>2899,
+40479=>2900,
+23615=>2901,
+25423=>2902,
+32834=>2903,
+23421=>2904,
+21870=>2905,
+38218=>2906,
+38221=>2907,
+28037=>2908,
+24744=>2909,
+26592=>2910,
+29406=>2911,
+20957=>2912,
+23425=>2913,
+25319=>2914,
+27870=>2915,
+12124=>2916,
+29275=>2916,
+25197=>2917,
+38062=>2918,
+32445=>2919,
+33043=>2920,
+27987=>2921,
+20892=>2922,
+24324=>2923,
+22900=>2924,
+21162=>2925,
+24594=>2926,
+12069=>2927,
+22899=>2927,
+26262=>2928,
+34384=>2929,
+30111=>2930,
+25386=>2931,
+25062=>2932,
+31983=>2933,
+35834=>2934,
+21734=>2935,
+27431=>2936,
+40485=>2937,
+27572=>2938,
+34261=>2939,
+21589=>2940,
+20598=>2941,
+27812=>2942,
+21866=>2943,
+36276=>2944,
+29228=>2945,
+24085=>2946,
+24597=>2947,
+29750=>2948,
+25293=>2949,
+25490=>2950,
+29260=>2951,
+24472=>2952,
+28227=>2953,
+27966=>2954,
+25856=>2955,
+28504=>2956,
+30424=>2957,
+30928=>2958,
+30460=>2959,
+30036=>2960,
+21028=>2961,
+21467=>2962,
+20051=>2963,
+24222=>2964,
+26049=>2965,
+32810=>2966,
+32982=>2967,
+25243=>2968,
+21638=>2969,
+21032=>2970,
+28846=>2971,
+34957=>2972,
+36305=>2973,
+27873=>2974,
+21624=>2975,
+32986=>2976,
+22521=>2977,
+35060=>2978,
+36180=>2979,
+38506=>2980,
+37197=>2981,
+20329=>2982,
+27803=>2983,
+21943=>2984,
+30406=>2985,
+30768=>2986,
+25256=>2987,
+28921=>2988,
+28558=>2989,
+24429=>2990,
+34028=>2991,
+26842=>2992,
+30844=>2993,
+31735=>2994,
+33192=>2995,
+26379=>2996,
+40527=>2997,
+25447=>2998,
+30896=>2999,
+22383=>3000,
+30738=>3001,
+38713=>3002,
+25209=>3003,
+25259=>3004,
+21128=>3005,
+29749=>3006,
+27607=>3007,
+21860=>3008,
+33086=>3009,
+30130=>3010,
+12138=>3011,
+30382=>3011,
+21305=>3012,
+30174=>3013,
+20731=>3014,
+23617=>3015,
+35692=>3016,
+31687=>3017,
+20559=>3018,
+12122=>3019,
+29255=>3019,
+39575=>3020,
+39128=>3021,
+28418=>3022,
+29922=>3023,
+31080=>3024,
+25735=>3025,
+30629=>3026,
+25340=>3027,
+39057=>3028,
+36139=>3029,
+21697=>3030,
+32856=>3031,
+20050=>3032,
+22378=>3033,
+33529=>3034,
+33805=>3035,
+24179=>3036,
+20973=>3037,
+29942=>3038,
+35780=>3039,
+23631=>3040,
+22369=>3041,
+27900=>3042,
+39047=>3043,
+23110=>3044,
+30772=>3045,
+39748=>3046,
+36843=>3047,
+31893=>3048,
+21078=>3049,
+25169=>3050,
+38138=>3051,
+20166=>3052,
+33670=>3053,
+33889=>3054,
+33769=>3055,
+33970=>3056,
+22484=>3057,
+26420=>3058,
+22275=>3059,
+26222=>3060,
+28006=>3061,
+35889=>3062,
+26333=>3063,
+28689=>3064,
+26399=>3065,
+27450=>3066,
+26646=>3067,
+25114=>3068,
+22971=>3069,
+19971=>3070,
+20932=>3071,
+28422=>3072,
+26578=>3073,
+27791=>3074,
+20854=>3075,
+26827=>3076,
+22855=>3077,
+27495=>3078,
+30054=>3079,
+23822=>3080,
+33040=>3081,
+40784=>3082,
+26071=>3083,
+31048=>3084,
+31041=>3085,
+39569=>3086,
+36215=>3087,
+23682=>3088,
+20062=>3089,
+20225=>3090,
+21551=>3091,
+22865=>3092,
+30732=>3093,
+22120=>3094,
+12115=>3095,
+27668=>3095,
+36804=>3096,
+24323=>3097,
+27773=>3098,
+27875=>3099,
+35755=>3100,
+25488=>3101,
+24688=>3102,
+27965=>3103,
+29301=>3104,
+25190=>3105,
+38030=>3106,
+38085=>3107,
+21315=>3108,
+36801=>3109,
+31614=>3110,
+20191=>3111,
+35878=>3112,
+20094=>3113,
+40660=>3114,
+38065=>3115,
+38067=>3116,
+21069=>3117,
+28508=>3118,
+36963=>3119,
+27973=>3120,
+35892=>3121,
+22545=>3122,
+23884=>3123,
+12107=>3124,
+27424=>3124,
+27465=>3125,
+26538=>3126,
+21595=>3127,
+33108=>3128,
+32652=>3129,
+22681=>3130,
+34103=>3131,
+24378=>3132,
+25250=>3133,
+27207=>3134,
+38201=>3135,
+25970=>3136,
+24708=>3137,
+26725=>3138,
+30631=>3139,
+20052=>3140,
+20392=>3141,
+24039=>3142,
+38808=>3143,
+25772=>3144,
+32728=>3145,
+23789=>3146,
+20431=>3147,
+31373=>3148,
+20999=>3149,
+33540=>3150,
+19988=>3151,
+24623=>3152,
+31363=>3153,
+38054=>3154,
+20405=>3155,
+20146=>3156,
+31206=>3157,
+29748=>3158,
+21220=>3159,
+33465=>3160,
+25810=>3161,
+31165=>3162,
+23517=>3163,
+27777=>3164,
+38738=>3165,
+36731=>3166,
+27682=>3167,
+20542=>3168,
+21375=>3169,
+28165=>3170,
+25806=>3171,
+26228=>3172,
+27696=>3173,
+24773=>3174,
+39031=>3175,
+35831=>3176,
+24198=>3177,
+29756=>3178,
+31351=>3179,
+31179=>3180,
+19992=>3181,
+37041=>3182,
+29699=>3183,
+27714=>3184,
+22234=>3185,
+37195=>3186,
+27845=>3187,
+36235=>3188,
+21306=>3189,
+34502=>3190,
+26354=>3191,
+36527=>3192,
+23624=>3193,
+39537=>3194,
+28192=>3195,
+21462=>3196,
+23094=>3197,
+40843=>3198,
+36259=>3199,
+21435=>3200,
+22280=>3201,
+39079=>3202,
+26435=>3203,
+37275=>3204,
+27849=>3205,
+20840=>3206,
+30154=>3207,
+25331=>3208,
+12125=>3209,
+29356=>3209,
+21048=>3210,
+21149=>3211,
+32570=>3212,
+28820=>3213,
+30264=>3214,
+21364=>3215,
+40522=>3216,
+27063=>3217,
+30830=>3218,
+38592=>3219,
+35033=>3220,
+32676=>3221,
+28982=>3222,
+29123=>3223,
+20873=>3224,
+26579=>3225,
+29924=>3226,
+22756=>3227,
+25880=>3228,
+22199=>3229,
+35753=>3230,
+39286=>3231,
+25200=>3232,
+32469=>3233,
+24825=>3234,
+28909=>3235,
+22764=>3236,
+20161=>3237,
+12040=>3238,
+20154=>3238,
+24525=>3239,
+38887=>3240,
+20219=>3241,
+35748=>3242,
+20995=>3243,
+22922=>3244,
+32427=>3245,
+25172=>3246,
+20173=>3247,
+12103=>3248,
+26085=>3248,
+25102=>3249,
+33592=>3250,
+33993=>3251,
+33635=>3252,
+34701=>3253,
+29076=>3254,
+28342=>3255,
+23481=>3256,
+32466=>3257,
+20887=>3258,
+25545=>3259,
+26580=>3260,
+12161=>3261,
+32905=>3261,
+33593=>3262,
+34837=>3263,
+20754=>3264,
+23418=>3265,
+22914=>3266,
+36785=>3267,
+20083=>3268,
+27741=>3269,
+12042=>3270,
+20837=>3270,
+35109=>3271,
+36719=>3272,
+38446=>3273,
+34122=>3274,
+29790=>3275,
+38160=>3276,
+38384=>3277,
+28070=>3278,
+33509=>3279,
+24369=>3280,
+25746=>3281,
+27922=>3282,
+33832=>3283,
+33134=>3284,
+40131=>3285,
+22622=>3286,
+36187=>3287,
+19977=>3288,
+21441=>3289,
+20254=>3290,
+25955=>3291,
+26705=>3292,
+21971=>3293,
+20007=>3294,
+25620=>3295,
+39578=>3296,
+25195=>3297,
+23234=>3298,
+29791=>3299,
+12170=>3300,
+33394=>3300,
+28073=>3301,
+26862=>3302,
+20711=>3303,
+33678=>3304,
+30722=>3305,
+26432=>3306,
+21049=>3307,
+27801=>3308,
+32433=>3309,
+20667=>3310,
+21861=>3311,
+29022=>3312,
+31579=>3313,
+26194=>3314,
+29642=>3315,
+33515=>3316,
+26441=>3317,
+12077=>3318,
+23665=>3318,
+21024=>3319,
+29053=>3320,
+34923=>3321,
+38378=>3322,
+38485=>3323,
+25797=>3324,
+36193=>3325,
+33203=>3326,
+21892=>3327,
+27733=>3328,
+25159=>3329,
+32558=>3330,
+22674=>3331,
+20260=>3332,
+21830=>3333,
+36175=>3334,
+26188=>3335,
+19978=>3336,
+23578=>3337,
+35059=>3338,
+26786=>3339,
+25422=>3340,
+31245=>3341,
+28903=>3342,
+33421=>3343,
+21242=>3344,
+38902=>3345,
+23569=>3346,
+21736=>3347,
+37045=>3348,
+32461=>3349,
+22882=>3350,
+36170=>3351,
+34503=>3352,
+12166=>3353,
+33292=>3353,
+33293=>3354,
+36198=>3355,
+25668=>3356,
+23556=>3357,
+24913=>3358,
+28041=>3359,
+31038=>3360,
+35774=>3361,
+30775=>3362,
+30003=>3363,
+21627=>3364,
+20280=>3365,
+12189=>3366,
+36523=>3366,
+28145=>3367,
+23072=>3368,
+32453=>3369,
+31070=>3370,
+27784=>3371,
+23457=>3372,
+23158=>3373,
+29978=>3374,
+32958=>3375,
+24910=>3376,
+28183=>3377,
+22768=>3378,
+12131=>3379,
+29983=>3379,
+29989=>3380,
+29298=>3381,
+21319=>3382,
+32499=>3383,
+30465=>3384,
+30427=>3385,
+21097=>3386,
+32988=>3387,
+22307=>3388,
+24072=>3389,
+22833=>3390,
+29422=>3391,
+26045=>3392,
+28287=>3393,
+35799=>3394,
+12075=>3395,
+23608=>3395,
+34417=>3396,
+12055=>3397,
+21313=>3397,
+12143=>3398,
+30707=>3398,
+25342=>3399,
+26102=>3400,
+20160=>3401,
+12215=>3402,
+39135=>3402,
+34432=>3403,
+23454=>3404,
+35782=>3405,
+21490=>3406,
+12142=>3407,
+30690=>3407,
+20351=>3408,
+23630=>3409,
+39542=>3410,
+22987=>3411,
+24335=>3412,
+12144=>3413,
+31034=>3413,
+12064=>3414,
+22763=>3414,
+19990=>3415,
+26623=>3416,
+20107=>3417,
+25325=>3418,
+35475=>3419,
+36893=>3420,
+21183=>3421,
+26159=>3422,
+21980=>3423,
+22124=>3424,
+36866=>3425,
+20181=>3426,
+20365=>3427,
+37322=>3428,
+39280=>3429,
+12114=>3430,
+27663=>3430,
+24066=>3431,
+24643=>3432,
+23460=>3433,
+35270=>3434,
+35797=>3435,
+25910=>3436,
+12095=>3437,
+25163=>3437,
+12216=>3438,
+39318=>3438,
+23432=>3439,
+23551=>3440,
+25480=>3441,
+21806=>3442,
+21463=>3443,
+30246=>3444,
+20861=>3445,
+34092=>3446,
+26530=>3447,
+26803=>3448,
+27530=>3449,
+25234=>3450,
+36755=>3451,
+21460=>3452,
+33298=>3453,
+28113=>3454,
+30095=>3455,
+20070=>3456,
+36174=>3457,
+23408=>3458,
+29087=>3459,
+34223=>3460,
+26257=>3461,
+26329=>3462,
+32626=>3463,
+34560=>3464,
+12233=>3465,
+40653=>3465,
+12239=>3466,
+40736=>3466,
+23646=>3467,
+26415=>3468,
+36848=>3469,
+26641=>3470,
+26463=>3471,
+25101=>3472,
+31446=>3473,
+22661=>3474,
+24246=>3475,
+25968=>3476,
+28465=>3477,
+24661=>3478,
+21047=>3479,
+32781=>3480,
+25684=>3481,
+34928=>3482,
+29993=>3483,
+24069=>3484,
+26643=>3485,
+25332=>3486,
+38684=>3487,
+21452=>3488,
+29245=>3489,
+35841=>3490,
+12116=>3491,
+27700=>3491,
+30561=>3492,
+31246=>3493,
+21550=>3494,
+30636=>3495,
+39034=>3496,
+33308=>3497,
+35828=>3498,
+30805=>3499,
+26388=>3500,
+28865=>3501,
+26031=>3502,
+25749=>3503,
+22070=>3504,
+24605=>3505,
+31169=>3506,
+21496=>3507,
+19997=>3508,
+27515=>3509,
+32902=>3510,
+23546=>3511,
+21987=>3512,
+22235=>3513,
+20282=>3514,
+20284=>3515,
+39282=>3516,
+24051=>3517,
+26494=>3518,
+32824=>3519,
+24578=>3520,
+39042=>3521,
+36865=>3522,
+23435=>3523,
+35772=>3524,
+35829=>3525,
+25628=>3526,
+33368=>3527,
+25822=>3528,
+22013=>3529,
+33487=>3530,
+37221=>3531,
+20439=>3532,
+32032=>3533,
+36895=>3534,
+31903=>3535,
+20723=>3536,
+22609=>3537,
+28335=>3538,
+23487=>3539,
+35785=>3540,
+32899=>3541,
+37240=>3542,
+33948=>3543,
+31639=>3544,
+34429=>3545,
+38539=>3546,
+38543=>3547,
+32485=>3548,
+39635=>3549,
+30862=>3550,
+23681=>3551,
+31319=>3552,
+36930=>3553,
+38567=>3554,
+31071=>3555,
+23385=>3556,
+25439=>3557,
+31499=>3558,
+34001=>3559,
+26797=>3560,
+21766=>3561,
+32553=>3562,
+29712=>3563,
+32034=>3564,
+38145=>3565,
+25152=>3566,
+22604=>3567,
+20182=>3568,
+23427=>3569,
+22905=>3570,
+22612=>3571,
+29549=>3572,
+25374=>3573,
+36427=>3574,
+36367=>3575,
+32974=>3576,
+33492=>3577,
+25260=>3578,
+21488=>3579,
+27888=>3580,
+37214=>3581,
+22826=>3582,
+24577=>3583,
+27760=>3584,
+22349=>3585,
+25674=>3586,
+36138=>3587,
+30251=>3588,
+28393=>3589,
+22363=>3590,
+27264=>3591,
+30192=>3592,
+28525=>3593,
+35885=>3594,
+35848=>3595,
+22374=>3596,
+27631=>3597,
+34962=>3598,
+30899=>3599,
+25506=>3600,
+21497=>3601,
+28845=>3602,
+27748=>3603,
+22616=>3604,
+25642=>3605,
+22530=>3606,
+26848=>3607,
+33179=>3608,
+21776=>3609,
+31958=>3610,
+20504=>3611,
+36538=>3612,
+28108=>3613,
+36255=>3614,
+28907=>3615,
+25487=>3616,
+28059=>3617,
+28372=>3618,
+32486=>3619,
+33796=>3620,
+26691=>3621,
+36867=>3622,
+28120=>3623,
+38518=>3624,
+35752=>3625,
+22871=>3626,
+29305=>3627,
+34276=>3628,
+33150=>3629,
+30140=>3630,
+35466=>3631,
+26799=>3632,
+21076=>3633,
+36386=>3634,
+38161=>3635,
+25552=>3636,
+39064=>3637,
+36420=>3638,
+21884=>3639,
+20307=>3640,
+26367=>3641,
+22159=>3642,
+24789=>3643,
+28053=>3644,
+21059=>3645,
+23625=>3646,
+22825=>3647,
+28155=>3648,
+22635=>3649,
+12133=>3650,
+30000=>3650,
+29980=>3651,
+24684=>3652,
+33300=>3653,
+33094=>3654,
+25361=>3655,
+26465=>3656,
+36834=>3657,
+30522=>3658,
+36339=>3659,
+36148=>3660,
+38081=>3661,
+24086=>3662,
+21381=>3663,
+21548=>3664,
+28867=>3665,
+27712=>3666,
+24311=>3667,
+20572=>3668,
+20141=>3669,
+24237=>3670,
+25402=>3671,
+33351=>3672,
+36890=>3673,
+26704=>3674,
+37230=>3675,
+30643=>3676,
+21516=>3677,
+38108=>3678,
+24420=>3679,
+31461=>3680,
+26742=>3681,
+25413=>3682,
+31570=>3683,
+32479=>3684,
+30171=>3685,
+20599=>3686,
+25237=>3687,
+22836=>3688,
+36879=>3689,
+20984=>3690,
+31171=>3691,
+31361=>3692,
+22270=>3693,
+24466=>3694,
+36884=>3695,
+28034=>3696,
+23648=>3697,
+12063=>3698,
+22303=>3698,
+21520=>3699,
+20820=>3700,
+28237=>3701,
+22242=>3702,
+25512=>3703,
+39059=>3704,
+33151=>3705,
+34581=>3706,
+35114=>3707,
+36864=>3708,
+21534=>3709,
+23663=>3710,
+33216=>3711,
+25302=>3712,
+25176=>3713,
+33073=>3714,
+40501=>3715,
+38464=>3716,
+39534=>3717,
+39548=>3718,
+26925=>3719,
+22949=>3720,
+25299=>3721,
+21822=>3722,
+25366=>3723,
+21703=>3724,
+34521=>3725,
+27964=>3726,
+23043=>3727,
+12129=>3728,
+29926=>3728,
+34972=>3729,
+27498=>3730,
+22806=>3731,
+35916=>3732,
+24367=>3733,
+28286=>3734,
+29609=>3735,
+39037=>3736,
+20024=>3737,
+28919=>3738,
+23436=>3739,
+30871=>3740,
+25405=>3741,
+26202=>3742,
+30358=>3743,
+24779=>3744,
+23451=>3745,
+23113=>3746,
+19975=>3747,
+33109=>3748,
+27754=>3749,
+29579=>3750,
+20129=>3751,
+26505=>3752,
+12153=>3753,
+32593=>3753,
+24448=>3754,
+26106=>3755,
+26395=>3756,
+24536=>3757,
+22916=>3758,
+23041=>3759,
+24013=>3760,
+24494=>3761,
+21361=>3762,
+38886=>3763,
+36829=>3764,
+26693=>3765,
+22260=>3766,
+21807=>3767,
+24799=>3768,
+20026=>3769,
+28493=>3770,
+32500=>3771,
+33479=>3772,
+33806=>3773,
+22996=>3774,
+20255=>3775,
+20266=>3776,
+23614=>3777,
+32428=>3778,
+26410=>3779,
+34074=>3780,
+21619=>3781,
+30031=>3782,
+32963=>3783,
+21890=>3784,
+39759=>3785,
+20301=>3786,
+28205=>3787,
+35859=>3788,
+23561=>3789,
+24944=>3790,
+21355=>3791,
+30239=>3792,
+28201=>3793,
+34442=>3794,
+12098=>3795,
+25991=>3795,
+38395=>3796,
+32441=>3797,
+21563=>3798,
+31283=>3799,
+32010=>3800,
+38382=>3801,
+21985=>3802,
+32705=>3803,
+29934=>3804,
+25373=>3805,
+34583=>3806,
+28065=>3807,
+31389=>3808,
+25105=>3809,
+26017=>3810,
+21351=>3811,
+25569=>3812,
+27779=>3813,
+24043=>3814,
+21596=>3815,
+38056=>3816,
+20044=>3817,
+27745=>3818,
+35820=>3819,
+23627=>3820,
+12102=>3821,
+26080=>3821,
+33436=>3822,
+26791=>3823,
+21566=>3824,
+21556=>3825,
+12111=>3826,
+27595=>3826,
+27494=>3827,
+20116=>3828,
+25410=>3829,
+21320=>3830,
+33310=>3831,
+20237=>3832,
+20398=>3833,
+22366=>3834,
+25098=>3835,
+38654=>3836,
+26212=>3837,
+29289=>3838,
+21247=>3839,
+21153=>3840,
+24735=>3841,
+35823=>3842,
+26132=>3843,
+29081=>3844,
+26512=>3845,
+35199=>3846,
+30802=>3847,
+30717=>3848,
+26224=>3849,
+22075=>3850,
+21560=>3851,
+38177=>3852,
+29306=>3853,
+31232=>3854,
+24687=>3855,
+24076=>3856,
+24713=>3857,
+33181=>3858,
+12067=>3859,
+22805=>3859,
+24796=>3860,
+29060=>3861,
+28911=>3862,
+28330=>3863,
+27728=>3864,
+29312=>3865,
+27268=>3866,
+34989=>3867,
+24109=>3868,
+20064=>3869,
+23219=>3870,
+21916=>3871,
+38115=>3872,
+27927=>3873,
+31995=>3874,
+38553=>3875,
+25103=>3876,
+32454=>3877,
+30606=>3878,
+34430=>3879,
+21283=>3880,
+38686=>3881,
+36758=>3882,
+26247=>3883,
+23777=>3884,
+20384=>3885,
+29421=>3886,
+19979=>3887,
+21414=>3888,
+22799=>3889,
+21523=>3890,
+25472=>3891,
+38184=>3892,
+20808=>3893,
+20185=>3894,
+40092=>3895,
+32420=>3896,
+21688=>3897,
+36132=>3898,
+34900=>3899,
+33335=>3900,
+38386=>3901,
+28046=>3902,
+24358=>3903,
+23244=>3904,
+26174=>3905,
+38505=>3906,
+29616=>3907,
+29486=>3908,
+21439=>3909,
+33146=>3910,
+39301=>3911,
+32673=>3912,
+23466=>3913,
+38519=>3914,
+38480=>3915,
+32447=>3916,
+30456=>3917,
+21410=>3918,
+38262=>3919,
+12217=>3920,
+39321=>3920,
+31665=>3921,
+35140=>3922,
+28248=>3923,
+20065=>3924,
+32724=>3925,
+31077=>3926,
+35814=>3927,
+24819=>3928,
+21709=>3929,
+20139=>3930,
+39033=>3931,
+24055=>3932,
+27233=>3933,
+20687=>3934,
+21521=>3935,
+35937=>3936,
+33831=>3937,
+30813=>3938,
+38660=>3939,
+21066=>3940,
+21742=>3941,
+22179=>3942,
+38144=>3943,
+28040=>3944,
+23477=>3945,
+28102=>3946,
+26195=>3947,
+12073=>3948,
+23567=>3948,
+23389=>3949,
+26657=>3950,
+32918=>3951,
+21880=>3952,
+31505=>3953,
+25928=>3954,
+26964=>3955,
+20123=>3956,
+27463=>3957,
+34638=>3958,
+38795=>3959,
+21327=>3960,
+25375=>3961,
+25658=>3962,
+37034=>3963,
+26012=>3964,
+32961=>3965,
+35856=>3966,
+20889=>3967,
+26800=>3968,
+21368=>3969,
+34809=>3970,
+25032=>3971,
+27844=>3972,
+27899=>3973,
+35874=>3974,
+23633=>3975,
+34218=>3976,
+33455=>3977,
+38156=>3978,
+27427=>3979,
+12191=>3980,
+36763=>3980,
+26032=>3981,
+24571=>3982,
+12092=>3983,
+24515=>3983,
+20449=>3984,
+34885=>3985,
+26143=>3986,
+33125=>3987,
+29481=>3988,
+24826=>3989,
+20852=>3990,
+21009=>3991,
+22411=>3992,
+24418=>3993,
+37026=>3994,
+12175=>3995,
+34892=>3995,
+37266=>3996,
+24184=>3997,
+26447=>3998,
+24615=>3999,
+22995=>4000,
+20804=>4001,
+20982=>4002,
+33016=>4003,
+21256=>4004,
+27769=>4005,
+38596=>4006,
+29066=>4007,
+20241=>4008,
+20462=>4009,
+32670=>4010,
+26429=>4011,
+21957=>4012,
+38152=>4013,
+31168=>4014,
+34966=>4015,
+32483=>4016,
+22687=>4017,
+25100=>4018,
+38656=>4019,
+34394=>4020,
+22040=>4021,
+39035=>4022,
+24464=>4023,
+35768=>4024,
+33988=>4025,
+37207=>4026,
+21465=>4027,
+26093=>4028,
+24207=>4029,
+30044=>4030,
+24676=>4031,
+32110=>4032,
+23167=>4033,
+32490=>4034,
+32493=>4035,
+36713=>4036,
+21927=>4037,
+23459=>4038,
+24748=>4039,
+26059=>4040,
+12126=>4041,
+29572=>4041,
+36873=>4042,
+30307=>4043,
+30505=>4044,
+32474=>4045,
+38772=>4046,
+34203=>4047,
+23398=>4048,
+12147=>4049,
+31348=>4049,
+38634=>4050,
+12174=>4051,
+34880=>4051,
+21195=>4052,
+29071=>4053,
+24490=>4054,
+26092=>4055,
+35810=>4056,
+23547=>4057,
+39535=>4058,
+24033=>4059,
+27529=>4060,
+27739=>4061,
+35757=>4062,
+35759=>4063,
+36874=>4064,
+36805=>4065,
+21387=>4066,
+25276=>4067,
+40486=>4068,
+40493=>4069,
+21568=>4070,
+20011=>4071,
+33469=>4072,
+12123=>4073,
+29273=>4073,
+34460=>4074,
+23830=>4075,
+34905=>4076,
+28079=>4077,
+38597=>4078,
+21713=>4079,
+20122=>4080,
+35766=>4081,
+28937=>4082,
+21693=>4083,
+38409=>4084,
+28895=>4085,
+28153=>4086,
+30416=>4087,
+20005=>4088,
+30740=>4089,
+34578=>4090,
+23721=>4091,
+24310=>4092,
+12180=>4093,
+35328=>4093,
+39068=>4094,
+38414=>4095,
+28814=>4096,
+27839=>4097,
+22852=>4098,
+25513=>4099,
+30524=>4100,
+34893=>4101,
+28436=>4102,
+33395=>4103,
+22576=>4104,
+29141=>4105,
+21388=>4106,
+30746=>4107,
+38593=>4108,
+21761=>4109,
+24422=>4110,
+28976=>4111,
+23476=>4112,
+35866=>4113,
+39564=>4114,
+27523=>4115,
+22830=>4116,
+40495=>4117,
+31207=>4118,
+26472=>4119,
+25196=>4120,
+20335=>4121,
+30113=>4122,
+12154=>4123,
+32650=>4123,
+27915=>4124,
+38451=>4125,
+27687=>4126,
+20208=>4127,
+30162=>4128,
+20859=>4129,
+26679=>4130,
+28478=>4131,
+36992=>4132,
+33136=>4133,
+22934=>4134,
+29814=>4135,
+25671=>4136,
+23591=>4137,
+36965=>4138,
+31377=>4139,
+35875=>4140,
+23002=>4141,
+21676=>4142,
+33280=>4143,
+33647=>4144,
+35201=>4145,
+32768=>4146,
+26928=>4147,
+22094=>4148,
+32822=>4149,
+29239=>4150,
+37326=>4151,
+20918=>4152,
+20063=>4153,
+39029=>4154,
+25494=>4155,
+19994=>4156,
+21494=>4157,
+26355=>4158,
+33099=>4159,
+22812=>4160,
+28082=>4161,
+12032=>4162,
+19968=>4162,
+22777=>4163,
+21307=>4164,
+25558=>4165,
+38129=>4166,
+20381=>4167,
+20234=>4168,
+12176=>4169,
+34915=>4169,
+39056=>4170,
+22839=>4171,
+36951=>4172,
+31227=>4173,
+20202=>4174,
+33008=>4175,
+30097=>4176,
+27778=>4177,
+23452=>4178,
+23016=>4179,
+24413=>4180,
+26885=>4181,
+34433=>4182,
+20506=>4183,
+24050=>4184,
+12036=>4185,
+20057=>4185,
+30691=>4186,
+20197=>4187,
+33402=>4188,
+25233=>4189,
+26131=>4190,
+12194=>4191,
+37009=>4191,
+23673=>4192,
+20159=>4193,
+24441=>4194,
+33222=>4195,
+36920=>4196,
+32900=>4197,
+30123=>4198,
+20134=>4199,
+35028=>4200,
+24847=>4201,
+27589=>4202,
+24518=>4203,
+20041=>4204,
+30410=>4205,
+28322=>4206,
+35811=>4207,
+35758=>4208,
+35850=>4209,
+35793=>4210,
+24322=>4211,
+32764=>4212,
+32716=>4213,
+32462=>4214,
+33589=>4215,
+33643=>4216,
+22240=>4217,
+27575=>4218,
+12211=>4219,
+38899=>4219,
+38452=>4220,
+23035=>4221,
+21535=>4222,
+38134=>4223,
+28139=>4224,
+23493=>4225,
+39278=>4226,
+23609=>4227,
+24341=>4228,
+38544=>4229,
+21360=>4230,
+33521=>4231,
+27185=>4232,
+23156=>4233,
+40560=>4234,
+24212=>4235,
+32552=>4236,
+33721=>4237,
+33828=>4238,
+33829=>4239,
+33639=>4240,
+34631=>4241,
+36814=>4242,
+36194=>4243,
+30408=>4244,
+24433=>4245,
+39062=>4246,
+30828=>4247,
+26144=>4248,
+21727=>4249,
+25317=>4250,
+20323=>4251,
+33219=>4252,
+30152=>4253,
+24248=>4254,
+38605=>4255,
+36362=>4256,
+34553=>4257,
+21647=>4258,
+27891=>4259,
+28044=>4260,
+27704=>4261,
+24703=>4262,
+21191=>4263,
+12132=>4264,
+29992=>4264,
+24189=>4265,
+20248=>4266,
+24736=>4267,
+24551=>4268,
+23588=>4269,
+30001=>4270,
+37038=>4271,
+38080=>4272,
+29369=>4273,
+27833=>4274,
+28216=>4275,
+12195=>4276,
+37193=>4276,
+26377=>4277,
+21451=>4278,
+21491=>4279,
+20305=>4280,
+37321=>4281,
+35825=>4282,
+12060=>4283,
+21448=>4283,
+24188=>4284,
+36802=>4285,
+28132=>4286,
+20110=>4287,
+30402=>4288,
+27014=>4289,
+34398=>4290,
+24858=>4291,
+33286=>4292,
+20313=>4293,
+20446=>4294,
+36926=>4295,
+40060=>4296,
+24841=>4297,
+28189=>4298,
+28180=>4299,
+38533=>4300,
+20104=>4301,
+23089=>4302,
+12204=>4303,
+38632=>4303,
+19982=>4304,
+23679=>4305,
+31161=>4306,
+23431=>4307,
+35821=>4308,
+12155=>4309,
+32701=>4309,
+12127=>4310,
+29577=>4310,
+22495=>4311,
+33419=>4312,
+37057=>4313,
+21505=>4314,
+36935=>4315,
+21947=>4316,
+23786=>4317,
+24481=>4318,
+24840=>4319,
+27442=>4320,
+29425=>4321,
+32946=>4322,
+35465=>4323,
+28020=>4324,
+23507=>4325,
+35029=>4326,
+39044=>4327,
+35947=>4328,
+39533=>4329,
+40499=>4330,
+28170=>4331,
+20900=>4332,
+20803=>4333,
+22435=>4334,
+34945=>4335,
+21407=>4336,
+25588=>4337,
+36757=>4338,
+22253=>4339,
+21592=>4340,
+22278=>4341,
+29503=>4342,
+28304=>4343,
+32536=>4344,
+36828=>4345,
+33489=>4346,
+24895=>4347,
+24616=>4348,
+38498=>4349,
+12104=>4350,
+26352=>4350,
+32422=>4351,
+36234=>4352,
+36291=>4353,
+38053=>4354,
+23731=>4355,
+31908=>4356,
+12105=>4357,
+26376=>4357,
+24742=>4358,
+38405=>4359,
+32792=>4360,
+20113=>4361,
+37095=>4362,
+21248=>4363,
+38504=>4364,
+20801=>4365,
+36816=>4366,
+34164=>4367,
+37213=>4368,
+26197=>4369,
+38901=>4370,
+23381=>4371,
+21277=>4372,
+30776=>4373,
+26434=>4374,
+26685=>4375,
+21705=>4376,
+28798=>4377,
+23472=>4378,
+36733=>4379,
+20877=>4380,
+22312=>4381,
+21681=>4382,
+25874=>4383,
+26242=>4384,
+36190=>4385,
+36163=>4386,
+33039=>4387,
+33900=>4388,
+36973=>4389,
+31967=>4390,
+20991=>4391,
+34299=>4392,
+26531=>4393,
+26089=>4394,
+28577=>4395,
+34468=>4396,
+36481=>4397,
+22122=>4398,
+36896=>4399,
+30338=>4400,
+28790=>4401,
+29157=>4402,
+36131=>4403,
+25321=>4404,
+21017=>4405,
+27901=>4406,
+36156=>4407,
+24590=>4408,
+22686=>4409,
+24974=>4410,
+26366=>4411,
+36192=>4412,
+25166=>4413,
+21939=>4414,
+28195=>4415,
+26413=>4416,
+36711=>4417,
+38113=>4418,
+38392=>4419,
+30504=>4420,
+26629=>4421,
+27048=>4422,
+21643=>4423,
+20045=>4424,
+28856=>4425,
+35784=>4426,
+25688=>4427,
+25995=>4428,
+23429=>4429,
+31364=>4430,
+20538=>4431,
+23528=>4432,
+30651=>4433,
+27617=>4434,
+35449=>4435,
+31896=>4436,
+27838=>4437,
+30415=>4438,
+26025=>4439,
+36759=>4440,
+23853=>4441,
+23637=>4442,
+34360=>4443,
+26632=>4444,
+21344=>4445,
+25112=>4446,
+31449=>4447,
+28251=>4448,
+32509=>4449,
+27167=>4450,
+31456=>4451,
+24432=>4452,
+28467=>4453,
+24352=>4454,
+25484=>4455,
+28072=>4456,
+26454=>4457,
+19976=>4458,
+24080=>4459,
+36134=>4460,
+20183=>4461,
+32960=>4462,
+30260=>4463,
+38556=>4464,
+25307=>4465,
+26157=>4466,
+25214=>4467,
+27836=>4468,
+36213=>4469,
+29031=>4470,
+32617=>4471,
+20806=>4472,
+32903=>4473,
+21484=>4474,
+36974=>4475,
+25240=>4476,
+21746=>4477,
+34544=>4478,
+36761=>4479,
+32773=>4480,
+38167=>4481,
+34071=>4482,
+36825=>4483,
+27993=>4484,
+29645=>4485,
+26015=>4486,
+30495=>4487,
+29956=>4488,
+30759=>4489,
+33275=>4490,
+36126=>4491,
+38024=>4492,
+20390=>4493,
+26517=>4494,
+30137=>4495,
+35786=>4496,
+38663=>4497,
+25391=>4498,
+38215=>4499,
+38453=>4500,
+33976=>4501,
+25379=>4502,
+30529=>4503,
+24449=>4504,
+29424=>4505,
+20105=>4506,
+24596=>4507,
+25972=>4508,
+25327=>4509,
+27491=>4510,
+25919=>4511,
+24103=>4512,
+30151=>4513,
+37073=>4514,
+35777=>4515,
+33437=>4516,
+26525=>4517,
+12096=>4518,
+25903=>4518,
+21553=>4519,
+34584=>4520,
+30693=>4521,
+32930=>4522,
+33026=>4523,
+27713=>4524,
+20043=>4525,
+32455=>4526,
+32844=>4527,
+30452=>4528,
+26893=>4529,
+27542=>4530,
+25191=>4531,
+20540=>4532,
+20356=>4533,
+22336=>4534,
+25351=>4535,
+12108=>4536,
+27490=>4536,
+36286=>4537,
+21482=>4538,
+26088=>4539,
+32440=>4540,
+24535=>4541,
+25370=>4542,
+25527=>4543,
+12164=>4544,
+33267=>4544,
+33268=>4545,
+32622=>4546,
+24092=>4547,
+23769=>4548,
+21046=>4549,
+26234=>4550,
+31209=>4551,
+31258=>4552,
+36136=>4553,
+28825=>4554,
+30164=>4555,
+28382=>4556,
+27835=>4557,
+31378=>4558,
+20013=>4559,
+30405=>4560,
+24544=>4561,
+38047=>4562,
+34935=>4563,
+32456=>4564,
+31181=>4565,
+32959=>4566,
+37325=>4567,
+20210=>4568,
+20247=>4569,
+12168=>4570,
+33311=>4570,
+21608=>4571,
+24030=>4572,
+27954=>4573,
+35788=>4574,
+31909=>4575,
+36724=>4576,
+32920=>4577,
+24090=>4578,
+21650=>4579,
+30385=>4580,
+23449=>4581,
+26172=>4582,
+39588=>4583,
+29664=>4584,
+26666=>4585,
+34523=>4586,
+26417=>4587,
+29482=>4588,
+35832=>4589,
+35803=>4590,
+36880=>4591,
+12149=>4592,
+31481=>4592,
+28891=>4593,
+29038=>4594,
+25284=>4595,
+30633=>4596,
+22065=>4597,
+20027=>4598,
+33879=>4599,
+26609=>4600,
+21161=>4601,
+34496=>4602,
+36142=>4603,
+38136=>4604,
+31569=>4605,
+20303=>4606,
+27880=>4607,
+31069=>4608,
+39547=>4609,
+25235=>4610,
+12118=>4611,
+29226=>4611,
+25341=>4612,
+19987=>4613,
+30742=>4614,
+36716=>4615,
+25776=>4616,
+36186=>4617,
+31686=>4618,
+26729=>4619,
+24196=>4620,
+35013=>4621,
+22918=>4622,
+25758=>4623,
+22766=>4624,
+29366=>4625,
+26894=>4626,
+38181=>4627,
+36861=>4628,
+36184=>4629,
+22368=>4630,
+32512=>4631,
+35846=>4632,
+20934=>4633,
+25417=>4634,
+25305=>4635,
+21331=>4636,
+26700=>4637,
+29730=>4638,
+33537=>4639,
+37196=>4640,
+21828=>4641,
+30528=>4642,
+28796=>4643,
+27978=>4644,
+20857=>4645,
+21672=>4646,
+36164=>4647,
+23039=>4648,
+28363=>4649,
+28100=>4650,
+23388=>4651,
+32043=>4652,
+20180=>4653,
+31869=>4654,
+28371=>4655,
+12070=>4656,
+23376=>4656,
+12163=>4657,
+33258=>4657,
+28173=>4658,
+23383=>4659,
+39683=>4660,
+26837=>4661,
+36394=>4662,
+23447=>4663,
+32508=>4664,
+24635=>4665,
+32437=>4666,
+37049=>4667,
+12187=>4668,
+36208=>4668,
+22863=>4669,
+25549=>4670,
+31199=>4671,
+12188=>4672,
+36275=>4672,
+21330=>4673,
+26063=>4674,
+31062=>4675,
+35781=>4676,
+38459=>4677,
+32452=>4678,
+38075=>4679,
+32386=>4680,
+22068=>4681,
+37257=>4682,
+26368=>4683,
+32618=>4684,
+23562=>4685,
+36981=>4686,
+26152=>4687,
+24038=>4688,
+20304=>4689,
+26590=>4690,
+20570=>4691,
+20316=>4692,
+22352=>4693,
+24231=>4694,
+20109=>4695,
+19980=>4696,
+20800=>4697,
+64012=>4697,
+19984=>4698,
+24319=>4699,
+21317=>4700,
+19989=>4701,
+20120=>4702,
+19998=>4703,
+12224=>4704,
+39730=>4704,
+23404=>4705,
+22121=>4706,
+12033=>4707,
+20008=>4707,
+31162=>4708,
+12035=>4709,
+20031=>4709,
+12052=>4710,
+21269=>4710,
+20039=>4711,
+22829=>4712,
+12120=>4713,
+29243=>4713,
+21358=>4714,
+27664=>4715,
+22239=>4716,
+32996=>4717,
+39319=>4718,
+27603=>4719,
+30590=>4720,
+40727=>4721,
+12034=>4722,
+20022=>4722,
+20127=>4723,
+40720=>4724,
+20060=>4725,
+20073=>4726,
+20115=>4727,
+33416=>4728,
+23387=>4729,
+21868=>4730,
+22031=>4731,
+20164=>4732,
+21389=>4733,
+21405=>4734,
+21411=>4735,
+21413=>4736,
+21422=>4737,
+38757=>4738,
+36189=>4739,
+12053=>4740,
+21274=>4740,
+21493=>4741,
+21286=>4742,
+21294=>4743,
+21310=>4744,
+36188=>4745,
+21350=>4746,
+21347=>4747,
+20994=>4748,
+21000=>4749,
+21006=>4750,
+21037=>4751,
+21043=>4752,
+21055=>4753,
+21056=>4754,
+21068=>4755,
+21086=>4756,
+21089=>4757,
+21084=>4758,
+33967=>4759,
+21117=>4760,
+21122=>4761,
+21121=>4762,
+21136=>4763,
+21139=>4764,
+12044=>4765,
+20866=>4765,
+32596=>4766,
+20155=>4767,
+20163=>4768,
+20169=>4769,
+20162=>4770,
+20200=>4771,
+20193=>4772,
+20203=>4773,
+20190=>4774,
+20251=>4775,
+20211=>4776,
+20258=>4777,
+20324=>4778,
+20213=>4779,
+20261=>4780,
+20263=>4781,
+20233=>4782,
+20267=>4783,
+20318=>4784,
+20327=>4785,
+25912=>4786,
+20314=>4787,
+20317=>4788,
+20319=>4789,
+20311=>4790,
+20274=>4791,
+20285=>4792,
+20342=>4793,
+20340=>4794,
+20369=>4795,
+20361=>4796,
+20355=>4797,
+20367=>4798,
+20350=>4799,
+20347=>4800,
+20394=>4801,
+20348=>4802,
+20396=>4803,
+20372=>4804,
+20454=>4805,
+20456=>4806,
+20458=>4807,
+20421=>4808,
+20442=>4809,
+20451=>4810,
+20444=>4811,
+20433=>4812,
+20447=>4813,
+20472=>4814,
+20521=>4815,
+20556=>4816,
+20467=>4817,
+20524=>4818,
+20495=>4819,
+20526=>4820,
+20525=>4821,
+20478=>4822,
+20508=>4823,
+20492=>4824,
+20517=>4825,
+20520=>4826,
+20606=>4827,
+20547=>4828,
+20565=>4829,
+20552=>4830,
+20558=>4831,
+20588=>4832,
+20603=>4833,
+20645=>4834,
+20647=>4835,
+20649=>4836,
+20666=>4837,
+20694=>4838,
+20742=>4839,
+20717=>4840,
+20716=>4841,
+20710=>4842,
+20718=>4843,
+20743=>4844,
+20747=>4845,
+20189=>4846,
+27709=>4847,
+20312=>4848,
+20325=>4849,
+20430=>4850,
+12245=>4851,
+40864=>4851,
+27718=>4852,
+31860=>4853,
+20846=>4854,
+24061=>4855,
+40649=>4856,
+39320=>4857,
+20865=>4858,
+22804=>4859,
+12051=>4860,
+21241=>4860,
+21261=>4861,
+35335=>4862,
+21264=>4863,
+20971=>4864,
+22809=>4865,
+20821=>4866,
+12039=>4867,
+20128=>4867,
+20822=>4868,
+20147=>4869,
+34926=>4870,
+34980=>4871,
+20149=>4872,
+33044=>4873,
+35026=>4874,
+31104=>4875,
+23348=>4876,
+34819=>4877,
+32696=>4878,
+12046=>4879,
+20907=>4879,
+20913=>4880,
+20925=>4881,
+20924=>4882,
+20935=>4883,
+12045=>4884,
+20886=>4884,
+20898=>4885,
+20901=>4886,
+35744=>4887,
+35750=>4888,
+35751=>4889,
+35754=>4890,
+35764=>4891,
+35765=>4892,
+35767=>4893,
+35778=>4894,
+35779=>4895,
+35787=>4896,
+35791=>4897,
+35790=>4898,
+35794=>4899,
+35795=>4900,
+35796=>4901,
+35798=>4902,
+35800=>4903,
+35801=>4904,
+35804=>4905,
+35807=>4906,
+35808=>4907,
+35812=>4908,
+35816=>4909,
+35817=>4910,
+35822=>4911,
+35824=>4912,
+35827=>4913,
+35830=>4914,
+35833=>4915,
+35836=>4916,
+35839=>4917,
+35840=>4918,
+35842=>4919,
+35844=>4920,
+35847=>4921,
+35852=>4922,
+35855=>4923,
+35857=>4924,
+35858=>4925,
+35860=>4926,
+35861=>4927,
+35862=>4928,
+35865=>4929,
+35867=>4930,
+35864=>4931,
+35869=>4932,
+35871=>4933,
+35872=>4934,
+35873=>4935,
+35877=>4936,
+35879=>4937,
+35882=>4938,
+35883=>4939,
+35886=>4940,
+35887=>4941,
+35890=>4942,
+35891=>4943,
+35893=>4944,
+35894=>4945,
+12057=>4946,
+21353=>4946,
+21370=>4947,
+38429=>4948,
+38434=>4949,
+38433=>4950,
+38449=>4951,
+38442=>4952,
+38461=>4953,
+38460=>4954,
+38466=>4955,
+38473=>4956,
+38484=>4957,
+38495=>4958,
+38503=>4959,
+38508=>4960,
+38514=>4961,
+38516=>4962,
+38536=>4963,
+38541=>4964,
+38551=>4965,
+38576=>4966,
+37015=>4967,
+37019=>4968,
+37021=>4969,
+37017=>4970,
+37036=>4971,
+37025=>4972,
+37044=>4973,
+37043=>4974,
+37046=>4975,
+37050=>4976,
+37048=>4977,
+37040=>4978,
+37071=>4979,
+37061=>4980,
+37054=>4981,
+37072=>4982,
+37060=>4983,
+37063=>4984,
+37075=>4985,
+37094=>4986,
+37090=>4987,
+37084=>4988,
+37079=>4989,
+37083=>4990,
+37099=>4991,
+37103=>4992,
+37118=>4993,
+37124=>4994,
+37154=>4995,
+37150=>4996,
+37155=>4997,
+37169=>4998,
+37167=>4999,
+37177=>5000,
+37187=>5001,
+37190=>5002,
+21005=>5003,
+22850=>5004,
+21154=>5005,
+21164=>5006,
+21165=>5007,
+21182=>5008,
+21759=>5009,
+21200=>5010,
+21206=>5011,
+21232=>5012,
+21471=>5013,
+29166=>5014,
+30669=>5015,
+12085=>5016,
+24308=>5016,
+12048=>5017,
+20981=>5017,
+20988=>5018,
+12223=>5019,
+39727=>5019,
+12059=>5020,
+21430=>5020,
+24321=>5021,
+30042=>5022,
+24047=>5023,
+22348=>5024,
+22441=>5025,
+22433=>5026,
+22654=>5027,
+22716=>5028,
+22725=>5029,
+22737=>5030,
+22313=>5031,
+22316=>5032,
+22314=>5033,
+22323=>5034,
+22329=>5035,
+22318=>5036,
+22319=>5037,
+22364=>5038,
+22331=>5039,
+22338=>5040,
+22377=>5041,
+22405=>5042,
+22379=>5043,
+22406=>5044,
+22396=>5045,
+22395=>5046,
+22376=>5047,
+22381=>5048,
+22390=>5049,
+22387=>5050,
+22445=>5051,
+22436=>5052,
+22412=>5053,
+22450=>5054,
+22479=>5055,
+22439=>5056,
+22452=>5057,
+22419=>5058,
+22432=>5059,
+22485=>5060,
+22488=>5061,
+22490=>5062,
+22489=>5063,
+22482=>5064,
+22456=>5065,
+22516=>5066,
+22511=>5067,
+22520=>5068,
+22500=>5069,
+22493=>5070,
+22539=>5071,
+22541=>5072,
+22525=>5073,
+22509=>5074,
+22528=>5075,
+22558=>5076,
+22553=>5077,
+22596=>5078,
+22560=>5079,
+22629=>5080,
+22636=>5081,
+22657=>5082,
+22665=>5083,
+22682=>5084,
+22656=>5085,
+39336=>5086,
+40729=>5087,
+25087=>5088,
+33401=>5089,
+33405=>5090,
+33407=>5091,
+33423=>5092,
+33418=>5093,
+33448=>5094,
+33412=>5095,
+33422=>5096,
+33425=>5097,
+33431=>5098,
+33433=>5099,
+33451=>5100,
+33464=>5101,
+33470=>5102,
+33456=>5103,
+33480=>5104,
+33482=>5105,
+33507=>5106,
+33432=>5107,
+33463=>5108,
+33454=>5109,
+33483=>5110,
+33484=>5111,
+33473=>5112,
+33449=>5113,
+33460=>5114,
+33441=>5115,
+33450=>5116,
+33439=>5117,
+33476=>5118,
+33486=>5119,
+33444=>5120,
+33505=>5121,
+33545=>5122,
+33527=>5123,
+33508=>5124,
+33551=>5125,
+33543=>5126,
+33500=>5127,
+33524=>5128,
+33490=>5129,
+33496=>5130,
+33548=>5131,
+33531=>5132,
+33491=>5133,
+33553=>5134,
+33562=>5135,
+33542=>5136,
+33556=>5137,
+33557=>5138,
+33504=>5139,
+33493=>5140,
+33564=>5141,
+33617=>5142,
+33627=>5143,
+33628=>5144,
+33544=>5145,
+33682=>5146,
+33596=>5147,
+33588=>5148,
+33585=>5149,
+33691=>5150,
+33630=>5151,
+33583=>5152,
+33615=>5153,
+33607=>5154,
+33603=>5155,
+33631=>5156,
+33600=>5157,
+33559=>5158,
+33632=>5159,
+33581=>5160,
+33594=>5161,
+33587=>5162,
+33638=>5163,
+33637=>5164,
+33640=>5165,
+33563=>5166,
+33641=>5167,
+33644=>5168,
+33642=>5169,
+33645=>5170,
+33646=>5171,
+33712=>5172,
+33656=>5173,
+33715=>5174,
+33716=>5175,
+33696=>5176,
+33706=>5177,
+33683=>5178,
+33692=>5179,
+33669=>5180,
+33660=>5181,
+33718=>5182,
+33705=>5183,
+33661=>5184,
+33720=>5185,
+33659=>5186,
+33688=>5187,
+33694=>5188,
+33704=>5189,
+33722=>5190,
+33724=>5191,
+33729=>5192,
+33793=>5193,
+33765=>5194,
+33752=>5195,
+22535=>5196,
+33816=>5197,
+33803=>5198,
+33757=>5199,
+33789=>5200,
+33750=>5201,
+33820=>5202,
+33848=>5203,
+33809=>5204,
+33798=>5205,
+33748=>5206,
+33759=>5207,
+33807=>5208,
+33795=>5209,
+33784=>5210,
+33785=>5211,
+33770=>5212,
+33733=>5213,
+33728=>5214,
+33830=>5215,
+33776=>5216,
+33761=>5217,
+33884=>5218,
+33873=>5219,
+33882=>5220,
+33881=>5221,
+33907=>5222,
+33927=>5223,
+33928=>5224,
+33914=>5225,
+33929=>5226,
+33912=>5227,
+33852=>5228,
+33862=>5229,
+33897=>5230,
+33910=>5231,
+33932=>5232,
+33934=>5233,
+33841=>5234,
+33901=>5235,
+33985=>5236,
+33997=>5237,
+34000=>5238,
+34022=>5239,
+33981=>5240,
+34003=>5241,
+33994=>5242,
+33983=>5243,
+33978=>5244,
+34016=>5245,
+33953=>5246,
+33977=>5247,
+33972=>5248,
+33943=>5249,
+34021=>5250,
+34019=>5251,
+34060=>5252,
+29965=>5253,
+34104=>5254,
+34032=>5255,
+34105=>5256,
+34079=>5257,
+34106=>5258,
+34134=>5259,
+34107=>5260,
+34047=>5261,
+34044=>5262,
+34137=>5263,
+34120=>5264,
+34152=>5265,
+34148=>5266,
+34142=>5267,
+34170=>5268,
+30626=>5269,
+34115=>5270,
+34162=>5271,
+34171=>5272,
+34212=>5273,
+34216=>5274,
+34183=>5275,
+34191=>5276,
+34169=>5277,
+34222=>5278,
+34204=>5279,
+34181=>5280,
+34233=>5281,
+34231=>5282,
+34224=>5283,
+34259=>5284,
+34241=>5285,
+34268=>5286,
+34303=>5287,
+34343=>5288,
+34309=>5289,
+34345=>5290,
+34326=>5291,
+34364=>5292,
+12086=>5293,
+24318=>5293,
+24328=>5294,
+22844=>5295,
+22849=>5296,
+32823=>5297,
+22869=>5298,
+22874=>5299,
+22872=>5300,
+21263=>5301,
+12074=>5302,
+23586=>5302,
+23589=>5303,
+23596=>5304,
+23604=>5305,
+25164=>5306,
+25194=>5307,
+25247=>5308,
+25275=>5309,
+25290=>5310,
+25306=>5311,
+25303=>5312,
+25326=>5313,
+25378=>5314,
+25334=>5315,
+25401=>5316,
+25419=>5317,
+25411=>5318,
+25517=>5319,
+25590=>5320,
+25457=>5321,
+25466=>5322,
+25486=>5323,
+25524=>5324,
+25453=>5325,
+25516=>5326,
+25482=>5327,
+25449=>5328,
+25518=>5329,
+25532=>5330,
+25586=>5331,
+25592=>5332,
+25568=>5333,
+25599=>5334,
+25540=>5335,
+25566=>5336,
+25550=>5337,
+25682=>5338,
+25542=>5339,
+25534=>5340,
+25669=>5341,
+25665=>5342,
+25611=>5343,
+25627=>5344,
+25632=>5345,
+25612=>5346,
+25638=>5347,
+25633=>5348,
+25694=>5349,
+25732=>5350,
+25709=>5351,
+25750=>5352,
+25722=>5353,
+25783=>5354,
+25784=>5355,
+25753=>5356,
+25786=>5357,
+25792=>5358,
+25808=>5359,
+25815=>5360,
+25828=>5361,
+25826=>5362,
+25865=>5363,
+25893=>5364,
+25902=>5365,
+12087=>5366,
+24331=>5366,
+24530=>5367,
+29977=>5368,
+24337=>5369,
+21343=>5370,
+21489=>5371,
+21501=>5372,
+21481=>5373,
+21480=>5374,
+21499=>5375,
+21522=>5376,
+21526=>5377,
+21510=>5378,
+21579=>5379,
+21586=>5380,
+21587=>5381,
+21588=>5382,
+21590=>5383,
+21571=>5384,
+21537=>5385,
+21591=>5386,
+21593=>5387,
+21539=>5388,
+21554=>5389,
+21634=>5390,
+21652=>5391,
+21623=>5392,
+21617=>5393,
+21604=>5394,
+21658=>5395,
+21659=>5396,
+21636=>5397,
+21622=>5398,
+21606=>5399,
+21661=>5400,
+21712=>5401,
+21677=>5402,
+21698=>5403,
+21684=>5404,
+21714=>5405,
+21671=>5406,
+21670=>5407,
+21715=>5408,
+21716=>5409,
+21618=>5410,
+21667=>5411,
+21717=>5412,
+21691=>5413,
+21695=>5414,
+21708=>5415,
+21721=>5416,
+21722=>5417,
+21724=>5418,
+21673=>5419,
+21674=>5420,
+21668=>5421,
+21725=>5422,
+21711=>5423,
+21726=>5424,
+21787=>5425,
+21735=>5426,
+21792=>5427,
+21757=>5428,
+21780=>5429,
+21747=>5430,
+21794=>5431,
+21795=>5432,
+21775=>5433,
+21777=>5434,
+21799=>5435,
+21802=>5436,
+21863=>5437,
+21903=>5438,
+21941=>5439,
+21833=>5440,
+21869=>5441,
+21825=>5442,
+21845=>5443,
+21823=>5444,
+21840=>5445,
+21820=>5446,
+21815=>5447,
+21846=>5448,
+21877=>5449,
+21878=>5450,
+21879=>5451,
+21811=>5452,
+21808=>5453,
+21852=>5454,
+21899=>5455,
+21970=>5456,
+21891=>5457,
+21937=>5458,
+21945=>5459,
+21896=>5460,
+21889=>5461,
+21919=>5462,
+21886=>5463,
+21974=>5464,
+21905=>5465,
+21883=>5466,
+21983=>5467,
+21949=>5468,
+21950=>5469,
+21908=>5470,
+21913=>5471,
+21994=>5472,
+22007=>5473,
+21961=>5474,
+22047=>5475,
+21969=>5476,
+21995=>5477,
+21996=>5478,
+21972=>5479,
+21990=>5480,
+21981=>5481,
+21956=>5482,
+21999=>5483,
+21989=>5484,
+22002=>5485,
+22003=>5486,
+21964=>5487,
+21965=>5488,
+21992=>5489,
+22005=>5490,
+21988=>5491,
+36756=>5492,
+22046=>5493,
+22024=>5494,
+22028=>5495,
+22017=>5496,
+22052=>5497,
+22051=>5498,
+22014=>5499,
+22016=>5500,
+22055=>5501,
+22061=>5502,
+22104=>5503,
+22073=>5504,
+22103=>5505,
+22060=>5506,
+22093=>5507,
+22114=>5508,
+22105=>5509,
+22108=>5510,
+22092=>5511,
+22100=>5512,
+22150=>5513,
+22116=>5514,
+22129=>5515,
+22123=>5516,
+22139=>5517,
+22140=>5518,
+22149=>5519,
+22163=>5520,
+22191=>5521,
+22228=>5522,
+12062=>5523,
+22231=>5523,
+22237=>5524,
+22241=>5525,
+22261=>5526,
+22251=>5527,
+22265=>5528,
+22271=>5529,
+22276=>5530,
+22282=>5531,
+22281=>5532,
+22300=>5533,
+24079=>5534,
+24089=>5535,
+24084=>5536,
+24081=>5537,
+24113=>5538,
+24123=>5539,
+24124=>5540,
+24119=>5541,
+24132=>5542,
+24148=>5543,
+24155=>5544,
+24158=>5545,
+24161=>5546,
+23692=>5547,
+23674=>5548,
+23693=>5549,
+23696=>5550,
+23702=>5551,
+23688=>5552,
+23704=>5553,
+23705=>5554,
+23697=>5555,
+23706=>5556,
+23708=>5557,
+23733=>5558,
+23714=>5559,
+23741=>5560,
+23724=>5561,
+23723=>5562,
+23729=>5563,
+23715=>5564,
+23745=>5565,
+23735=>5566,
+23748=>5567,
+23762=>5568,
+23780=>5569,
+23755=>5570,
+23781=>5571,
+23810=>5572,
+23811=>5573,
+23847=>5574,
+23846=>5575,
+23854=>5576,
+23844=>5577,
+23838=>5578,
+23814=>5579,
+23835=>5580,
+23896=>5581,
+23870=>5582,
+23860=>5583,
+23869=>5584,
+23916=>5585,
+23899=>5586,
+23919=>5587,
+23901=>5588,
+23915=>5589,
+23883=>5590,
+23882=>5591,
+23913=>5592,
+23924=>5593,
+23938=>5594,
+23961=>5595,
+23965=>5596,
+35955=>5597,
+23991=>5598,
+24005=>5599,
+12091=>5600,
+24435=>5600,
+24439=>5601,
+24450=>5602,
+24455=>5603,
+24457=>5604,
+24460=>5605,
+24469=>5606,
+24473=>5607,
+24476=>5608,
+24488=>5609,
+24493=>5610,
+24501=>5611,
+24508=>5612,
+34914=>5613,
+12090=>5614,
+24417=>5614,
+29357=>5615,
+29360=>5616,
+29364=>5617,
+29367=>5618,
+29368=>5619,
+29379=>5620,
+29377=>5621,
+29390=>5622,
+29389=>5623,
+29394=>5624,
+29416=>5625,
+29423=>5626,
+29417=>5627,
+29426=>5628,
+29428=>5629,
+29431=>5630,
+29441=>5631,
+29427=>5632,
+29443=>5633,
+29434=>5634,
+29435=>5635,
+29463=>5636,
+29459=>5637,
+29473=>5638,
+29450=>5639,
+29470=>5640,
+29469=>5641,
+29461=>5642,
+29474=>5643,
+29497=>5644,
+29477=>5645,
+29484=>5646,
+29496=>5647,
+29489=>5648,
+29520=>5649,
+29517=>5650,
+29527=>5651,
+29536=>5652,
+29548=>5653,
+29551=>5654,
+29566=>5655,
+12167=>5656,
+33307=>5656,
+22821=>5657,
+39143=>5658,
+22820=>5659,
+12065=>5660,
+22786=>5660,
+39267=>5661,
+39271=>5662,
+39272=>5663,
+39273=>5664,
+39274=>5665,
+39275=>5666,
+39276=>5667,
+39284=>5668,
+39287=>5669,
+39293=>5670,
+39296=>5671,
+39300=>5672,
+39303=>5673,
+39306=>5674,
+39309=>5675,
+39312=>5676,
+39313=>5677,
+39315=>5678,
+39316=>5679,
+39317=>5680,
+24192=>5681,
+24209=>5682,
+24203=>5683,
+24214=>5684,
+24229=>5685,
+24224=>5686,
+24249=>5687,
+24245=>5688,
+24254=>5689,
+24243=>5690,
+36179=>5691,
+24274=>5692,
+24273=>5693,
+24283=>5694,
+24296=>5695,
+24298=>5696,
+33210=>5697,
+24516=>5698,
+24521=>5699,
+24534=>5700,
+24527=>5701,
+24579=>5702,
+24558=>5703,
+24580=>5704,
+24545=>5705,
+24548=>5706,
+24574=>5707,
+24581=>5708,
+24582=>5709,
+24554=>5710,
+24557=>5711,
+24568=>5712,
+24601=>5713,
+24629=>5714,
+24614=>5715,
+24603=>5716,
+24591=>5717,
+24589=>5718,
+24617=>5719,
+24619=>5720,
+24586=>5721,
+24639=>5722,
+24609=>5723,
+24696=>5724,
+24697=>5725,
+24699=>5726,
+24698=>5727,
+24642=>5728,
+24682=>5729,
+24701=>5730,
+24726=>5731,
+24730=>5732,
+24749=>5733,
+24733=>5734,
+24707=>5735,
+24722=>5736,
+24716=>5737,
+24731=>5738,
+24812=>5739,
+24763=>5740,
+24753=>5741,
+24797=>5742,
+24792=>5743,
+24774=>5744,
+24794=>5745,
+24756=>5746,
+24864=>5747,
+24870=>5748,
+24853=>5749,
+24867=>5750,
+24820=>5751,
+24832=>5752,
+24846=>5753,
+24875=>5754,
+24906=>5755,
+24949=>5756,
+25004=>5757,
+24980=>5758,
+24999=>5759,
+25015=>5760,
+25044=>5761,
+25077=>5762,
+24541=>5763,
+38579=>5764,
+38377=>5765,
+38379=>5766,
+38385=>5767,
+38387=>5768,
+38389=>5769,
+38390=>5770,
+38396=>5771,
+38398=>5772,
+38403=>5773,
+38404=>5774,
+38406=>5775,
+38408=>5776,
+38410=>5777,
+38411=>5778,
+38412=>5779,
+38413=>5780,
+38415=>5781,
+38418=>5782,
+38421=>5783,
+38422=>5784,
+38423=>5785,
+38425=>5786,
+38426=>5787,
+20012=>5788,
+12121=>5789,
+29247=>5789,
+25109=>5790,
+27701=>5791,
+27732=>5792,
+27740=>5793,
+27722=>5794,
+27811=>5795,
+27781=>5796,
+27792=>5797,
+27796=>5798,
+27788=>5799,
+27752=>5800,
+27753=>5801,
+27764=>5802,
+27766=>5803,
+27782=>5804,
+27817=>5805,
+27856=>5806,
+27860=>5807,
+27821=>5808,
+27895=>5809,
+27896=>5810,
+27889=>5811,
+27863=>5812,
+27826=>5813,
+27872=>5814,
+27862=>5815,
+27898=>5816,
+27883=>5817,
+27886=>5818,
+27825=>5819,
+27859=>5820,
+27887=>5821,
+27902=>5822,
+27961=>5823,
+27943=>5824,
+27916=>5825,
+27971=>5826,
+27976=>5827,
+27911=>5828,
+27908=>5829,
+27929=>5830,
+27918=>5831,
+27947=>5832,
+27981=>5833,
+27950=>5834,
+27957=>5835,
+27930=>5836,
+27983=>5837,
+27986=>5838,
+27988=>5839,
+27955=>5840,
+28049=>5841,
+28015=>5842,
+28062=>5843,
+28064=>5844,
+27998=>5845,
+28051=>5846,
+28052=>5847,
+27996=>5848,
+28000=>5849,
+28028=>5850,
+28003=>5851,
+28186=>5852,
+28103=>5853,
+28101=>5854,
+28126=>5855,
+28174=>5856,
+28095=>5857,
+28128=>5858,
+28177=>5859,
+28134=>5860,
+28125=>5861,
+28121=>5862,
+28182=>5863,
+28075=>5864,
+28172=>5865,
+28078=>5866,
+28203=>5867,
+28270=>5868,
+28238=>5869,
+28267=>5870,
+28338=>5871,
+28255=>5872,
+28294=>5873,
+28243=>5874,
+28244=>5875,
+28210=>5876,
+28197=>5877,
+28228=>5878,
+28383=>5879,
+28337=>5880,
+28312=>5881,
+28384=>5882,
+28461=>5883,
+28386=>5884,
+28325=>5885,
+28327=>5886,
+28349=>5887,
+28347=>5888,
+28343=>5889,
+28375=>5890,
+28340=>5891,
+28367=>5892,
+28303=>5893,
+28354=>5894,
+28319=>5895,
+28514=>5896,
+28486=>5897,
+28487=>5898,
+28452=>5899,
+28437=>5900,
+28409=>5901,
+28463=>5902,
+28470=>5903,
+28491=>5904,
+28532=>5905,
+28458=>5906,
+28425=>5907,
+28457=>5908,
+28553=>5909,
+28557=>5910,
+28556=>5911,
+28536=>5912,
+28530=>5913,
+28540=>5914,
+28538=>5915,
+28625=>5916,
+28617=>5917,
+28583=>5918,
+28601=>5919,
+28598=>5920,
+28610=>5921,
+28641=>5922,
+28654=>5923,
+28638=>5924,
+28640=>5925,
+28655=>5926,
+28698=>5927,
+28707=>5928,
+28699=>5929,
+28729=>5930,
+28725=>5931,
+28751=>5932,
+28766=>5933,
+12071=>5934,
+23424=>5934,
+23428=>5935,
+23445=>5936,
+23443=>5937,
+23461=>5938,
+23480=>5939,
+29999=>5940,
+39582=>5941,
+25652=>5942,
+23524=>5943,
+23534=>5944,
+35120=>5945,
+23536=>5946,
+36423=>5947,
+35591=>5948,
+36790=>5949,
+36819=>5950,
+36821=>5951,
+36837=>5952,
+36846=>5953,
+36836=>5954,
+36841=>5955,
+36838=>5956,
+36851=>5957,
+36840=>5958,
+36869=>5959,
+36868=>5960,
+36875=>5961,
+36902=>5962,
+36881=>5963,
+36877=>5964,
+36886=>5965,
+36897=>5966,
+36917=>5967,
+36918=>5968,
+36909=>5969,
+36911=>5970,
+36932=>5971,
+36945=>5972,
+36946=>5973,
+36944=>5974,
+36968=>5975,
+36952=>5976,
+36962=>5977,
+36955=>5978,
+26297=>5979,
+36980=>5980,
+36989=>5981,
+36994=>5982,
+37000=>5983,
+36995=>5984,
+37003=>5985,
+12089=>5986,
+24400=>5986,
+24407=>5987,
+24406=>5988,
+24408=>5989,
+23611=>5990,
+21675=>5991,
+23632=>5992,
+23641=>5993,
+23409=>5994,
+23651=>5995,
+23654=>5996,
+32700=>5997,
+24362=>5998,
+24361=>5999,
+24365=>6000,
+33396=>6001,
+24380=>6002,
+39739=>6003,
+12076=>6004,
+23662=>6004,
+22913=>6005,
+22915=>6006,
+22925=>6007,
+22953=>6008,
+22954=>6009,
+22947=>6010,
+22935=>6011,
+22986=>6012,
+22955=>6013,
+22942=>6014,
+22948=>6015,
+22994=>6016,
+22962=>6017,
+22959=>6018,
+22999=>6019,
+22974=>6020,
+23045=>6021,
+23046=>6022,
+23005=>6023,
+23048=>6024,
+23011=>6025,
+23000=>6026,
+23033=>6027,
+23052=>6028,
+23049=>6029,
+23090=>6030,
+23092=>6031,
+23057=>6032,
+23075=>6033,
+23059=>6034,
+23104=>6035,
+23143=>6036,
+23114=>6037,
+23125=>6038,
+23100=>6039,
+23138=>6040,
+23157=>6041,
+33004=>6042,
+23210=>6043,
+23195=>6044,
+23159=>6045,
+23162=>6046,
+23230=>6047,
+23275=>6048,
+23218=>6049,
+23250=>6050,
+23252=>6051,
+23224=>6052,
+23264=>6053,
+23267=>6054,
+23281=>6055,
+23254=>6056,
+23270=>6057,
+23256=>6058,
+23260=>6059,
+23305=>6060,
+23319=>6061,
+23318=>6062,
+23346=>6063,
+23351=>6064,
+23360=>6065,
+23573=>6066,
+23580=>6067,
+23386=>6068,
+23397=>6069,
+23411=>6070,
+23377=>6071,
+23379=>6072,
+23394=>6073,
+39541=>6074,
+39543=>6075,
+39544=>6076,
+39546=>6077,
+39551=>6078,
+39549=>6079,
+39552=>6080,
+39553=>6081,
+39557=>6082,
+39560=>6083,
+39562=>6084,
+39568=>6085,
+39570=>6086,
+39571=>6087,
+39574=>6088,
+39576=>6089,
+39579=>6090,
+39580=>6091,
+39581=>6092,
+39583=>6093,
+39584=>6094,
+39586=>6095,
+39587=>6096,
+39589=>6097,
+39591=>6098,
+32415=>6099,
+32417=>6100,
+32419=>6101,
+32421=>6102,
+32424=>6103,
+32425=>6104,
+32429=>6105,
+32432=>6106,
+32446=>6107,
+32448=>6108,
+32449=>6109,
+32450=>6110,
+32457=>6111,
+32459=>6112,
+32460=>6113,
+32464=>6114,
+32468=>6115,
+32471=>6116,
+32475=>6117,
+32480=>6118,
+32481=>6119,
+32488=>6120,
+32491=>6121,
+32494=>6122,
+32495=>6123,
+32497=>6124,
+32498=>6125,
+32525=>6126,
+32502=>6127,
+32506=>6128,
+32507=>6129,
+32510=>6130,
+32513=>6131,
+32514=>6132,
+32515=>6133,
+32519=>6134,
+32520=>6135,
+32523=>6136,
+32524=>6137,
+32527=>6138,
+32529=>6139,
+32530=>6140,
+32535=>6141,
+32537=>6142,
+32540=>6143,
+32539=>6144,
+32543=>6145,
+32545=>6146,
+32546=>6147,
+32547=>6148,
+32548=>6149,
+32549=>6150,
+32550=>6151,
+32551=>6152,
+32554=>6153,
+32555=>6154,
+32556=>6155,
+32557=>6156,
+32559=>6157,
+32560=>6158,
+32561=>6159,
+32562=>6160,
+32563=>6161,
+32565=>6162,
+12083=>6163,
+24186=>6163,
+30079=>6164,
+12078=>6165,
+24027=>6165,
+30014=>6166,
+37013=>6167,
+29582=>6168,
+29585=>6169,
+29614=>6170,
+29602=>6171,
+29599=>6172,
+29647=>6173,
+29634=>6174,
+29649=>6175,
+29623=>6176,
+29619=>6177,
+29632=>6178,
+29641=>6179,
+29640=>6180,
+29669=>6181,
+29657=>6182,
+39036=>6183,
+29706=>6184,
+29673=>6185,
+29671=>6186,
+29662=>6187,
+29626=>6188,
+29682=>6189,
+29711=>6190,
+29738=>6191,
+29787=>6192,
+29734=>6193,
+29733=>6194,
+29736=>6195,
+29744=>6196,
+29742=>6197,
+29740=>6198,
+29723=>6199,
+29722=>6200,
+29761=>6201,
+29788=>6202,
+29783=>6203,
+29781=>6204,
+29785=>6205,
+29815=>6206,
+29805=>6207,
+29822=>6208,
+29852=>6209,
+29838=>6210,
+29824=>6211,
+29825=>6212,
+29831=>6213,
+29835=>6214,
+29854=>6215,
+29864=>6216,
+29865=>6217,
+29840=>6218,
+29863=>6219,
+29906=>6220,
+29882=>6221,
+38890=>6222,
+38891=>6223,
+38892=>6224,
+26444=>6225,
+26451=>6226,
+26462=>6227,
+26440=>6228,
+26473=>6229,
+26533=>6230,
+26503=>6231,
+26474=>6232,
+26483=>6233,
+26520=>6234,
+26535=>6235,
+26485=>6236,
+26536=>6237,
+26526=>6238,
+26541=>6239,
+26507=>6240,
+26487=>6241,
+26492=>6242,
+26608=>6243,
+26633=>6244,
+26584=>6245,
+26634=>6246,
+26601=>6247,
+26544=>6248,
+26636=>6249,
+26585=>6250,
+26549=>6251,
+26586=>6252,
+26547=>6253,
+26589=>6254,
+26624=>6255,
+26563=>6256,
+26552=>6257,
+26594=>6258,
+26638=>6259,
+26561=>6260,
+26621=>6261,
+26674=>6262,
+26675=>6263,
+26720=>6264,
+26721=>6265,
+26702=>6266,
+26722=>6267,
+26692=>6268,
+26724=>6269,
+26755=>6270,
+26653=>6271,
+26709=>6272,
+26726=>6273,
+26689=>6274,
+26727=>6275,
+26688=>6276,
+26686=>6277,
+26698=>6278,
+26697=>6279,
+26665=>6280,
+26805=>6281,
+26767=>6282,
+26740=>6283,
+26743=>6284,
+26771=>6285,
+26731=>6286,
+26818=>6287,
+26990=>6288,
+26876=>6289,
+26911=>6290,
+26912=>6291,
+26873=>6292,
+26916=>6293,
+26864=>6294,
+26891=>6295,
+26881=>6296,
+26967=>6297,
+26851=>6298,
+26896=>6299,
+26993=>6300,
+26937=>6301,
+26976=>6302,
+26946=>6303,
+26973=>6304,
+27012=>6305,
+26987=>6306,
+27008=>6307,
+27032=>6308,
+27000=>6309,
+26932=>6310,
+27084=>6311,
+27015=>6312,
+27016=>6313,
+27086=>6314,
+27017=>6315,
+26982=>6316,
+26979=>6317,
+27001=>6318,
+27035=>6319,
+27047=>6320,
+27067=>6321,
+27051=>6322,
+27053=>6323,
+27092=>6324,
+27057=>6325,
+27073=>6326,
+27082=>6327,
+27103=>6328,
+27029=>6329,
+27104=>6330,
+27021=>6331,
+27135=>6332,
+27183=>6333,
+27117=>6334,
+27159=>6335,
+27160=>6336,
+27237=>6337,
+27122=>6338,
+27204=>6339,
+27198=>6340,
+27296=>6341,
+27216=>6342,
+27227=>6343,
+27189=>6344,
+27278=>6345,
+27257=>6346,
+27197=>6347,
+27176=>6348,
+27224=>6349,
+27260=>6350,
+27281=>6351,
+27280=>6352,
+27305=>6353,
+27287=>6354,
+27307=>6355,
+29495=>6356,
+29522=>6357,
+27521=>6358,
+27522=>6359,
+27527=>6360,
+27524=>6361,
+27538=>6362,
+27539=>6363,
+27533=>6364,
+27546=>6365,
+27547=>6366,
+27553=>6367,
+27562=>6368,
+36715=>6369,
+36717=>6370,
+36721=>6371,
+36722=>6372,
+36723=>6373,
+36725=>6374,
+36726=>6375,
+36728=>6376,
+36727=>6377,
+36729=>6378,
+36730=>6379,
+36732=>6380,
+36734=>6381,
+36737=>6382,
+36738=>6383,
+36740=>6384,
+36743=>6385,
+36747=>6386,
+36749=>6387,
+36750=>6388,
+36751=>6389,
+36760=>6390,
+36762=>6391,
+36558=>6392,
+25099=>6393,
+25111=>6394,
+25115=>6395,
+25119=>6396,
+25122=>6397,
+25121=>6398,
+25125=>6399,
+25124=>6400,
+25132=>6401,
+33255=>6402,
+29935=>6403,
+29940=>6404,
+29951=>6405,
+29967=>6406,
+29969=>6407,
+29971=>6408,
+12097=>6409,
+25908=>6409,
+26094=>6410,
+26095=>6411,
+26096=>6412,
+26122=>6413,
+26137=>6414,
+26482=>6415,
+26115=>6416,
+26133=>6417,
+26112=>6418,
+28805=>6419,
+26359=>6420,
+26141=>6421,
+26164=>6422,
+26161=>6423,
+26166=>6424,
+26165=>6425,
+32774=>6426,
+26207=>6427,
+26196=>6428,
+26177=>6429,
+26191=>6430,
+26198=>6431,
+26209=>6432,
+26199=>6433,
+26231=>6434,
+26244=>6435,
+26252=>6436,
+26279=>6437,
+26269=>6438,
+26302=>6439,
+26331=>6440,
+26332=>6441,
+26342=>6442,
+26345=>6443,
+36146=>6444,
+36147=>6445,
+36150=>6446,
+36155=>6447,
+36157=>6448,
+36160=>6449,
+36165=>6450,
+36166=>6451,
+36168=>6452,
+36169=>6453,
+36167=>6454,
+36173=>6455,
+36181=>6456,
+36185=>6457,
+35271=>6458,
+35274=>6459,
+35275=>6460,
+35276=>6461,
+35278=>6462,
+35279=>6463,
+35280=>6464,
+35281=>6465,
+29294=>6466,
+29343=>6467,
+29277=>6468,
+29286=>6469,
+29295=>6470,
+29310=>6471,
+29311=>6472,
+29316=>6473,
+29323=>6474,
+29325=>6475,
+29327=>6476,
+29330=>6477,
+25352=>6478,
+25394=>6479,
+25520=>6480,
+25663=>6481,
+25816=>6482,
+32772=>6483,
+27626=>6484,
+27635=>6485,
+27645=>6486,
+27637=>6487,
+27641=>6488,
+27653=>6489,
+27655=>6490,
+27654=>6491,
+27661=>6492,
+27669=>6493,
+27672=>6494,
+27673=>6495,
+27674=>6496,
+27681=>6497,
+27689=>6498,
+27684=>6499,
+27690=>6500,
+27698=>6501,
+25909=>6502,
+25941=>6503,
+25963=>6504,
+29261=>6505,
+29266=>6506,
+29270=>6507,
+29232=>6508,
+34402=>6509,
+21014=>6510,
+32927=>6511,
+32924=>6512,
+32915=>6513,
+32956=>6514,
+26378=>6515,
+32957=>6516,
+32945=>6517,
+32939=>6518,
+32941=>6519,
+32948=>6520,
+32951=>6521,
+32999=>6522,
+33000=>6523,
+33001=>6524,
+33002=>6525,
+32987=>6526,
+32962=>6527,
+32964=>6528,
+32985=>6529,
+32973=>6530,
+32983=>6531,
+26384=>6532,
+32989=>6533,
+33003=>6534,
+33009=>6535,
+33012=>6536,
+33005=>6537,
+33037=>6538,
+33038=>6539,
+33010=>6540,
+33020=>6541,
+26389=>6542,
+33042=>6543,
+35930=>6544,
+33078=>6545,
+33054=>6546,
+33068=>6547,
+33048=>6548,
+33074=>6549,
+33096=>6550,
+33100=>6551,
+33107=>6552,
+33140=>6553,
+33113=>6554,
+33114=>6555,
+33137=>6556,
+33120=>6557,
+33129=>6558,
+33148=>6559,
+33149=>6560,
+33133=>6561,
+33127=>6562,
+22605=>6563,
+23221=>6564,
+33160=>6565,
+33154=>6566,
+33169=>6567,
+28373=>6568,
+33187=>6569,
+33194=>6570,
+33228=>6571,
+26406=>6572,
+33226=>6573,
+33211=>6574,
+33217=>6575,
+33190=>6576,
+27428=>6577,
+27447=>6578,
+27449=>6579,
+27459=>6580,
+27462=>6581,
+27481=>6582,
+39121=>6583,
+39122=>6584,
+39123=>6585,
+39125=>6586,
+39129=>6587,
+39130=>6588,
+12110=>6589,
+27571=>6589,
+24384=>6590,
+27586=>6591,
+35315=>6592,
+26000=>6593,
+40785=>6594,
+26003=>6595,
+26044=>6596,
+26054=>6597,
+26052=>6598,
+26051=>6599,
+26060=>6600,
+26062=>6601,
+26066=>6602,
+26070=>6603,
+28800=>6604,
+28828=>6605,
+28822=>6606,
+28829=>6607,
+28859=>6608,
+28864=>6609,
+28855=>6610,
+28843=>6611,
+28849=>6612,
+28904=>6613,
+28874=>6614,
+28944=>6615,
+28947=>6616,
+28950=>6617,
+28975=>6618,
+28977=>6619,
+29043=>6620,
+29020=>6621,
+29032=>6622,
+28997=>6623,
+29042=>6624,
+29002=>6625,
+29048=>6626,
+29050=>6627,
+29080=>6628,
+29107=>6629,
+29109=>6630,
+29096=>6631,
+29088=>6632,
+29152=>6633,
+29140=>6634,
+29159=>6635,
+29177=>6636,
+29213=>6637,
+29224=>6638,
+28780=>6639,
+28952=>6640,
+29030=>6641,
+29113=>6642,
+25150=>6643,
+25149=>6644,
+25155=>6645,
+25160=>6646,
+25161=>6647,
+31035=>6648,
+31040=>6649,
+31046=>6650,
+31049=>6651,
+31067=>6652,
+31068=>6653,
+31059=>6654,
+31066=>6655,
+31074=>6656,
+31063=>6657,
+31072=>6658,
+31087=>6659,
+31079=>6660,
+31098=>6661,
+31109=>6662,
+31114=>6663,
+31130=>6664,
+31143=>6665,
+31155=>6666,
+24529=>6667,
+24528=>6668,
+24636=>6669,
+24669=>6670,
+24666=>6671,
+24679=>6672,
+24641=>6673,
+24665=>6674,
+24675=>6675,
+24747=>6676,
+24838=>6677,
+24845=>6678,
+24925=>6679,
+25001=>6680,
+24989=>6681,
+25035=>6682,
+25041=>6683,
+25094=>6684,
+32896=>6685,
+12160=>6686,
+32895=>6686,
+27795=>6687,
+27894=>6688,
+28156=>6689,
+30710=>6690,
+30712=>6691,
+30720=>6692,
+30729=>6693,
+30743=>6694,
+30744=>6695,
+30737=>6696,
+26027=>6697,
+30765=>6698,
+30748=>6699,
+30749=>6700,
+30777=>6701,
+30778=>6702,
+30779=>6703,
+30751=>6704,
+30780=>6705,
+30757=>6706,
+30764=>6707,
+30755=>6708,
+30761=>6709,
+30798=>6710,
+30829=>6711,
+30806=>6712,
+30807=>6713,
+30758=>6714,
+30800=>6715,
+30791=>6716,
+30796=>6717,
+30826=>6718,
+30875=>6719,
+30867=>6720,
+30874=>6721,
+30855=>6722,
+30876=>6723,
+30881=>6724,
+30883=>6725,
+30898=>6726,
+30905=>6727,
+30885=>6728,
+30932=>6729,
+30937=>6730,
+30921=>6731,
+30956=>6732,
+30962=>6733,
+30981=>6734,
+30964=>6735,
+30995=>6736,
+31012=>6737,
+31006=>6738,
+31028=>6739,
+40859=>6740,
+12235=>6741,
+40697=>6741,
+40699=>6742,
+40700=>6743,
+30449=>6744,
+30468=>6745,
+30477=>6746,
+30457=>6747,
+30471=>6748,
+30472=>6749,
+30490=>6750,
+30498=>6751,
+30489=>6752,
+30509=>6753,
+30502=>6754,
+30517=>6755,
+30520=>6756,
+30544=>6757,
+30545=>6758,
+30535=>6759,
+30531=>6760,
+30554=>6761,
+30568=>6762,
+30562=>6763,
+30565=>6764,
+30591=>6765,
+30605=>6766,
+30589=>6767,
+30592=>6768,
+30604=>6769,
+30609=>6770,
+30623=>6771,
+30624=>6772,
+30640=>6773,
+30645=>6774,
+30653=>6775,
+30010=>6776,
+30016=>6777,
+30030=>6778,
+30027=>6779,
+30024=>6780,
+30043=>6781,
+30066=>6782,
+30073=>6783,
+30083=>6784,
+32600=>6785,
+32609=>6786,
+32607=>6787,
+35400=>6788,
+32616=>6789,
+32628=>6790,
+32625=>6791,
+32633=>6792,
+32641=>6793,
+32638=>6794,
+30413=>6795,
+30437=>6796,
+34866=>6797,
+38021=>6798,
+38022=>6799,
+38023=>6800,
+38027=>6801,
+38026=>6802,
+38028=>6803,
+38029=>6804,
+38031=>6805,
+38032=>6806,
+38036=>6807,
+38039=>6808,
+38037=>6809,
+38042=>6810,
+38043=>6811,
+38044=>6812,
+38051=>6813,
+38052=>6814,
+38059=>6815,
+38058=>6816,
+38061=>6817,
+38060=>6818,
+38063=>6819,
+38064=>6820,
+38066=>6821,
+38068=>6822,
+38070=>6823,
+38071=>6824,
+38072=>6825,
+38073=>6826,
+38074=>6827,
+38076=>6828,
+38077=>6829,
+38079=>6830,
+38084=>6831,
+38088=>6832,
+38089=>6833,
+38090=>6834,
+38091=>6835,
+38092=>6836,
+38093=>6837,
+38094=>6838,
+38096=>6839,
+38097=>6840,
+38098=>6841,
+38101=>6842,
+38102=>6843,
+38103=>6844,
+38105=>6845,
+38104=>6846,
+38107=>6847,
+38110=>6848,
+38111=>6849,
+38112=>6850,
+38114=>6851,
+38116=>6852,
+38117=>6853,
+38119=>6854,
+38120=>6855,
+38122=>6856,
+38121=>6857,
+38123=>6858,
+38126=>6859,
+38127=>6860,
+38131=>6861,
+38132=>6862,
+38133=>6863,
+38135=>6864,
+38137=>6865,
+38140=>6866,
+38141=>6867,
+38143=>6868,
+38147=>6869,
+38146=>6870,
+38150=>6871,
+38151=>6872,
+38153=>6873,
+38154=>6874,
+38157=>6875,
+38158=>6876,
+38159=>6877,
+38162=>6878,
+38163=>6879,
+38164=>6880,
+38165=>6881,
+38166=>6882,
+38168=>6883,
+38171=>6884,
+38173=>6885,
+38174=>6886,
+38175=>6887,
+38178=>6888,
+38186=>6889,
+38187=>6890,
+38185=>6891,
+38188=>6892,
+38193=>6893,
+38194=>6894,
+38196=>6895,
+38198=>6896,
+38199=>6897,
+38200=>6898,
+38204=>6899,
+38206=>6900,
+38207=>6901,
+38210=>6902,
+38197=>6903,
+38212=>6904,
+38213=>6905,
+38214=>6906,
+38217=>6907,
+38220=>6908,
+38222=>6909,
+38223=>6910,
+38226=>6911,
+38227=>6912,
+38228=>6913,
+38230=>6914,
+38231=>6915,
+38232=>6916,
+38233=>6917,
+38235=>6918,
+38238=>6919,
+38239=>6920,
+38237=>6921,
+38241=>6922,
+38242=>6923,
+38244=>6924,
+38245=>6925,
+38246=>6926,
+38247=>6927,
+38248=>6928,
+38249=>6929,
+38250=>6930,
+38251=>6931,
+38252=>6932,
+38255=>6933,
+38257=>6934,
+38258=>6935,
+38259=>6936,
+38202=>6937,
+30695=>6938,
+30700=>6939,
+38601=>6940,
+31189=>6941,
+31213=>6942,
+31203=>6943,
+31211=>6944,
+31238=>6945,
+23879=>6946,
+31235=>6947,
+31234=>6948,
+31262=>6949,
+31252=>6950,
+31289=>6951,
+31287=>6952,
+31313=>6953,
+40655=>6954,
+39333=>6955,
+31344=>6956,
+30344=>6957,
+30350=>6958,
+30355=>6959,
+30361=>6960,
+30372=>6961,
+29918=>6962,
+29920=>6963,
+29996=>6964,
+40480=>6965,
+40482=>6966,
+40488=>6967,
+40489=>6968,
+40490=>6969,
+40491=>6970,
+40492=>6971,
+40498=>6972,
+40497=>6973,
+40502=>6974,
+40504=>6975,
+40503=>6976,
+40505=>6977,
+40506=>6978,
+40510=>6979,
+40513=>6980,
+40514=>6981,
+40516=>6982,
+40518=>6983,
+40519=>6984,
+40520=>6985,
+40521=>6986,
+40523=>6987,
+40524=>6988,
+40526=>6989,
+40529=>6990,
+40533=>6991,
+40535=>6992,
+40538=>6993,
+40539=>6994,
+40540=>6995,
+40542=>6996,
+40547=>6997,
+40550=>6998,
+40551=>6999,
+40552=>7000,
+40553=>7001,
+40554=>7002,
+40555=>7003,
+40556=>7004,
+40561=>7005,
+40557=>7006,
+40563=>7007,
+12135=>7008,
+30098=>7008,
+30100=>7009,
+30102=>7010,
+30112=>7011,
+30109=>7012,
+30124=>7013,
+30115=>7014,
+30131=>7015,
+30132=>7016,
+30136=>7017,
+30148=>7018,
+30129=>7019,
+30128=>7020,
+30147=>7021,
+30146=>7022,
+30166=>7023,
+30157=>7024,
+30179=>7025,
+30184=>7026,
+30182=>7027,
+30180=>7028,
+30187=>7029,
+30183=>7030,
+30211=>7031,
+30193=>7032,
+30204=>7033,
+30207=>7034,
+30224=>7035,
+30208=>7036,
+30213=>7037,
+30220=>7038,
+30231=>7039,
+30218=>7040,
+30245=>7041,
+30232=>7042,
+30229=>7043,
+30233=>7044,
+30235=>7045,
+30268=>7046,
+30242=>7047,
+30240=>7048,
+30272=>7049,
+30253=>7050,
+30256=>7051,
+30271=>7052,
+30261=>7053,
+30275=>7054,
+30270=>7055,
+30259=>7056,
+30285=>7057,
+30302=>7058,
+30292=>7059,
+30300=>7060,
+30294=>7061,
+30315=>7062,
+30319=>7063,
+32714=>7064,
+31462=>7065,
+31352=>7066,
+31353=>7067,
+31360=>7068,
+31366=>7069,
+31368=>7070,
+31381=>7071,
+31398=>7072,
+31392=>7073,
+31404=>7074,
+31400=>7075,
+31405=>7076,
+31411=>7077,
+34916=>7078,
+34921=>7079,
+34930=>7080,
+34941=>7081,
+34943=>7082,
+34946=>7083,
+34978=>7084,
+35014=>7085,
+34999=>7086,
+35004=>7087,
+35017=>7088,
+35042=>7089,
+35022=>7090,
+35043=>7091,
+35045=>7092,
+35057=>7093,
+35098=>7094,
+35068=>7095,
+35048=>7096,
+35070=>7097,
+35056=>7098,
+35105=>7099,
+35097=>7100,
+35091=>7101,
+35099=>7102,
+35082=>7103,
+35124=>7104,
+35115=>7105,
+35126=>7106,
+35137=>7107,
+35174=>7108,
+35195=>7109,
+12134=>7110,
+30091=>7110,
+32997=>7111,
+30386=>7112,
+30388=>7113,
+30684=>7114,
+12158=>7115,
+32786=>7115,
+32788=>7116,
+32790=>7117,
+32796=>7118,
+32800=>7119,
+32802=>7120,
+32805=>7121,
+32806=>7122,
+32807=>7123,
+32809=>7124,
+32808=>7125,
+32817=>7126,
+32779=>7127,
+32821=>7128,
+32835=>7129,
+32838=>7130,
+32845=>7131,
+32850=>7132,
+32873=>7133,
+32881=>7134,
+35203=>7135,
+39032=>7136,
+39040=>7137,
+39043=>7138,
+39049=>7139,
+39052=>7140,
+39053=>7141,
+39055=>7142,
+39060=>7143,
+39066=>7144,
+39067=>7145,
+39070=>7146,
+39071=>7147,
+39073=>7148,
+39074=>7149,
+39077=>7150,
+39078=>7151,
+12172=>7152,
+34381=>7152,
+34388=>7153,
+34412=>7154,
+34414=>7155,
+34431=>7156,
+34426=>7157,
+34428=>7158,
+34427=>7159,
+34472=>7160,
+34445=>7161,
+34443=>7162,
+34476=>7163,
+34461=>7164,
+34471=>7165,
+34467=>7166,
+34474=>7167,
+34451=>7168,
+34473=>7169,
+34486=>7170,
+34500=>7171,
+34485=>7172,
+34510=>7173,
+34480=>7174,
+34490=>7175,
+34481=>7176,
+34479=>7177,
+34505=>7178,
+34511=>7179,
+34484=>7180,
+34537=>7181,
+34545=>7182,
+34546=>7183,
+34541=>7184,
+34547=>7185,
+34512=>7186,
+34579=>7187,
+34526=>7188,
+34548=>7189,
+34527=>7190,
+34520=>7191,
+34513=>7192,
+34563=>7193,
+34567=>7194,
+34552=>7195,
+34568=>7196,
+34570=>7197,
+34573=>7198,
+34569=>7199,
+34595=>7200,
+34619=>7201,
+34590=>7202,
+34597=>7203,
+34606=>7204,
+34586=>7205,
+34622=>7206,
+34632=>7207,
+34612=>7208,
+34609=>7209,
+34601=>7210,
+34615=>7211,
+34623=>7212,
+34690=>7213,
+34594=>7214,
+34685=>7215,
+34686=>7216,
+34683=>7217,
+34656=>7218,
+34672=>7219,
+34636=>7220,
+34670=>7221,
+34699=>7222,
+34643=>7223,
+34659=>7224,
+34684=>7225,
+34660=>7226,
+34649=>7227,
+34661=>7228,
+34707=>7229,
+34735=>7230,
+34728=>7231,
+34770=>7232,
+34758=>7233,
+34696=>7234,
+34693=>7235,
+34733=>7236,
+34711=>7237,
+34691=>7238,
+34731=>7239,
+34789=>7240,
+34732=>7241,
+34741=>7242,
+34739=>7243,
+34763=>7244,
+34771=>7245,
+34749=>7246,
+34769=>7247,
+34752=>7248,
+34762=>7249,
+34779=>7250,
+34794=>7251,
+34784=>7252,
+34798=>7253,
+34838=>7254,
+34835=>7255,
+34814=>7256,
+34826=>7257,
+34843=>7258,
+34849=>7259,
+34873=>7260,
+34876=>7261,
+12152=>7262,
+32566=>7262,
+32578=>7263,
+32580=>7264,
+32581=>7265,
+33296=>7266,
+31482=>7267,
+31485=>7268,
+31496=>7269,
+31491=>7270,
+31492=>7271,
+31509=>7272,
+31498=>7273,
+31531=>7274,
+31503=>7275,
+31559=>7276,
+31544=>7277,
+31530=>7278,
+31513=>7279,
+31534=>7280,
+31537=>7281,
+31520=>7282,
+31525=>7283,
+31524=>7284,
+31539=>7285,
+31550=>7286,
+31518=>7287,
+31576=>7288,
+31578=>7289,
+31557=>7290,
+31605=>7291,
+31564=>7292,
+31581=>7293,
+31584=>7294,
+31598=>7295,
+31611=>7296,
+31586=>7297,
+31602=>7298,
+31601=>7299,
+31632=>7300,
+31654=>7301,
+31655=>7302,
+31672=>7303,
+31660=>7304,
+31645=>7305,
+31656=>7306,
+31621=>7307,
+31658=>7308,
+31644=>7309,
+31650=>7310,
+31659=>7311,
+31668=>7312,
+31697=>7313,
+31681=>7314,
+31692=>7315,
+31709=>7316,
+31706=>7317,
+31717=>7318,
+31718=>7319,
+31722=>7320,
+31756=>7321,
+31742=>7322,
+31740=>7323,
+31759=>7324,
+31766=>7325,
+31755=>7326,
+31775=>7327,
+31786=>7328,
+31782=>7329,
+31800=>7330,
+31809=>7331,
+31808=>7332,
+33278=>7333,
+33281=>7334,
+33282=>7335,
+33284=>7336,
+33260=>7337,
+34884=>7338,
+33313=>7339,
+33314=>7340,
+33315=>7341,
+33325=>7342,
+33327=>7343,
+33320=>7344,
+33323=>7345,
+33336=>7346,
+33339=>7347,
+33331=>7348,
+33332=>7349,
+33342=>7350,
+33348=>7351,
+33353=>7352,
+33355=>7353,
+33359=>7354,
+33370=>7355,
+33375=>7356,
+33384=>7357,
+34942=>7358,
+34949=>7359,
+34952=>7360,
+35032=>7361,
+35039=>7362,
+35166=>7363,
+32669=>7364,
+32671=>7365,
+32679=>7366,
+32687=>7367,
+32688=>7368,
+32690=>7369,
+31868=>7370,
+25929=>7371,
+31889=>7372,
+31901=>7373,
+31900=>7374,
+31902=>7375,
+31906=>7376,
+31922=>7377,
+31932=>7378,
+31933=>7379,
+31937=>7380,
+31943=>7381,
+31948=>7382,
+31949=>7383,
+31944=>7384,
+31941=>7385,
+31959=>7386,
+31976=>7387,
+12169=>7388,
+33390=>7388,
+26280=>7389,
+32703=>7390,
+32718=>7391,
+32725=>7392,
+32741=>7393,
+32737=>7394,
+32742=>7395,
+32745=>7396,
+32750=>7397,
+32755=>7398,
+12151=>7399,
+31992=>7399,
+32119=>7400,
+32166=>7401,
+32174=>7402,
+32327=>7403,
+32411=>7404,
+40632=>7405,
+40628=>7406,
+36211=>7407,
+36228=>7408,
+36244=>7409,
+36241=>7410,
+36273=>7411,
+36199=>7412,
+36205=>7413,
+35911=>7414,
+35913=>7415,
+37194=>7416,
+37200=>7417,
+37198=>7418,
+37199=>7419,
+37220=>7420,
+37218=>7421,
+37217=>7422,
+37232=>7423,
+37225=>7424,
+37231=>7425,
+37245=>7426,
+37246=>7427,
+37234=>7428,
+37236=>7429,
+37241=>7430,
+37260=>7431,
+37253=>7432,
+37264=>7433,
+37261=>7434,
+37265=>7435,
+37282=>7436,
+37283=>7437,
+37290=>7438,
+37293=>7439,
+37294=>7440,
+37295=>7441,
+37301=>7442,
+37300=>7443,
+37306=>7444,
+12183=>7445,
+35925=>7445,
+40574=>7446,
+36280=>7447,
+36331=>7448,
+36357=>7449,
+36441=>7450,
+36457=>7451,
+36277=>7452,
+36287=>7453,
+36284=>7454,
+36282=>7455,
+36292=>7456,
+36310=>7457,
+36311=>7458,
+36314=>7459,
+36318=>7460,
+36302=>7461,
+36303=>7462,
+36315=>7463,
+36294=>7464,
+36332=>7465,
+36343=>7466,
+36344=>7467,
+36323=>7468,
+36345=>7469,
+36347=>7470,
+36324=>7471,
+36361=>7472,
+36349=>7473,
+36372=>7474,
+36381=>7475,
+36383=>7476,
+36396=>7477,
+36398=>7478,
+36387=>7479,
+36399=>7480,
+36410=>7481,
+36416=>7482,
+36409=>7483,
+36405=>7484,
+36413=>7485,
+36401=>7486,
+36425=>7487,
+36417=>7488,
+36418=>7489,
+36433=>7490,
+36434=>7491,
+36426=>7492,
+36464=>7493,
+36470=>7494,
+36476=>7495,
+36463=>7496,
+36468=>7497,
+36485=>7498,
+36495=>7499,
+36500=>7500,
+36496=>7501,
+36508=>7502,
+36510=>7503,
+12184=>7504,
+35960=>7504,
+35970=>7505,
+35978=>7506,
+35973=>7507,
+35992=>7508,
+35988=>7509,
+26011=>7510,
+35286=>7511,
+35294=>7512,
+35290=>7513,
+35292=>7514,
+35301=>7515,
+35307=>7516,
+35311=>7517,
+35390=>7518,
+35622=>7519,
+38739=>7520,
+38633=>7521,
+38643=>7522,
+38639=>7523,
+38662=>7524,
+38657=>7525,
+38664=>7526,
+38671=>7527,
+38670=>7528,
+38698=>7529,
+38701=>7530,
+38704=>7531,
+38718=>7532,
+40832=>7533,
+40835=>7534,
+40837=>7535,
+40838=>7536,
+40839=>7537,
+40840=>7538,
+40841=>7539,
+40842=>7540,
+40844=>7541,
+40702=>7542,
+40715=>7543,
+40717=>7544,
+12203=>7545,
+38585=>7545,
+38588=>7546,
+38589=>7547,
+38606=>7548,
+38610=>7549,
+30655=>7550,
+38624=>7551,
+37518=>7552,
+37550=>7553,
+37576=>7554,
+37694=>7555,
+37738=>7556,
+37834=>7557,
+37775=>7558,
+37950=>7559,
+37995=>7560,
+40063=>7561,
+40066=>7562,
+40069=>7563,
+40070=>7564,
+40071=>7565,
+40072=>7566,
+31267=>7567,
+40075=>7568,
+40078=>7569,
+40080=>7570,
+40081=>7571,
+40082=>7572,
+40084=>7573,
+40085=>7574,
+40090=>7575,
+40091=>7576,
+40094=>7577,
+40095=>7578,
+40096=>7579,
+40097=>7580,
+40098=>7581,
+40099=>7582,
+40101=>7583,
+40102=>7584,
+40103=>7585,
+40104=>7586,
+40105=>7587,
+40107=>7588,
+40109=>7589,
+40110=>7590,
+40112=>7591,
+40113=>7592,
+40114=>7593,
+40115=>7594,
+40116=>7595,
+40117=>7596,
+40118=>7597,
+40119=>7598,
+40122=>7599,
+40123=>7600,
+40124=>7601,
+40125=>7602,
+40132=>7603,
+40133=>7604,
+40134=>7605,
+40135=>7606,
+40138=>7607,
+40139=>7608,
+40140=>7609,
+40141=>7610,
+40142=>7611,
+40143=>7612,
+40144=>7613,
+40147=>7614,
+40148=>7615,
+40149=>7616,
+40151=>7617,
+40152=>7618,
+40153=>7619,
+40156=>7620,
+40157=>7621,
+40159=>7622,
+40162=>7623,
+38780=>7624,
+38789=>7625,
+38801=>7626,
+38802=>7627,
+38804=>7628,
+38831=>7629,
+38827=>7630,
+38819=>7631,
+38834=>7632,
+38836=>7633,
+39601=>7634,
+39600=>7635,
+39607=>7636,
+40536=>7637,
+39606=>7638,
+39610=>7639,
+39612=>7640,
+39617=>7641,
+39616=>7642,
+39621=>7643,
+39618=>7644,
+39627=>7645,
+39628=>7646,
+39633=>7647,
+39749=>7648,
+39747=>7649,
+39751=>7650,
+39753=>7651,
+39752=>7652,
+39757=>7653,
+39761=>7654,
+39144=>7655,
+39181=>7656,
+39214=>7657,
+39253=>7658,
+39252=>7659,
+12221=>7660,
+39647=>7660,
+39649=>7661,
+39654=>7662,
+39663=>7663,
+39659=>7664,
+39675=>7665,
+39661=>7666,
+39673=>7667,
+39688=>7668,
+39695=>7669,
+39699=>7670,
+39711=>7671,
+39715=>7672,
+40637=>7673,
+40638=>7674,
+32315=>7675,
+40578=>7676,
+40583=>7677,
+40584=>7678,
+40587=>7679,
+40594=>7680,
+37846=>7681,
+40605=>7682,
+40607=>7683,
+40667=>7684,
+40668=>7685,
+40669=>7686,
+40672=>7687,
+40671=>7688,
+40674=>7689,
+40681=>7690,
+40679=>7691,
+40677=>7692,
+40682=>7693,
+40687=>7694,
+40738=>7695,
+40748=>7696,
+40751=>7697,
+40761=>7698,
+40759=>7699,
+40765=>7700,
+40766=>7701,
+40772=>7702,
+12295=>7703,
+
+
+
+
+
+
+
+30362=>7717,
+34297=>7718,
+31001=>7719,
+24859=>7720,
+39599=>7721,
+35158=>7722,
+22761=>7723,
+32631=>7724,
+25850=>7725,
+25943=>7726,
+38930=>7727,
+36774=>7728,
+32070=>7729,
+24171=>7730,
+32129=>7731,
+37770=>7732,
+35607=>7733,
+39165=>7734,
+23542=>7735,
+22577=>7736,
+39825=>7737,
+36649=>7738,
+12185=>7739,
+35997=>7739,
+37575=>7740,
+29437=>7741,
+20633=>7742,
+24970=>7743,
+32179=>7744,
+31558=>7745,
+30050=>7746,
+25987=>7747,
+24163=>7748,
+38281=>7749,
+37002=>7750,
+32232=>7751,
+36022=>7752,
+35722=>7753,
+36783=>7754,
+36782=>7755,
+27161=>7756,
+40009=>7757,
+30303=>7758,
+28693=>7759,
+28657=>7760,
+36051=>7761,
+25839=>7762,
+39173=>7763,
+25765=>7764,
+37474=>7765,
+37457=>7766,
+39361=>7767,
+35036=>7768,
+36001=>7769,
+21443=>7770,
+34870=>7771,
+27544=>7772,
+24922=>7773,
+24920=>7774,
+29158=>7775,
+33980=>7776,
+33369=>7777,
+20489=>7778,
+28356=>7779,
+21408=>7780,
+20596=>7781,
+28204=>7782,
+23652=>7783,
+35435=>7784,
+25881=>7785,
+25723=>7786,
+34796=>7787,
+39262=>7788,
+35730=>7789,
+32399=>7790,
+37855=>7791,
+29987=>7792,
+38369=>7793,
+39019=>7794,
+22580=>7795,
+22039=>7796,
+12199=>7797,
+38263=>7797,
+20767=>7798,
+33144=>7799,
+24288=>7800,
+26274=>7801,
+37396=>7802,
+12190=>7803,
+36554=>7803,
+24505=>7804,
+22645=>7805,
+38515=>7806,
+35183=>7807,
+31281=>7808,
+25074=>7809,
+35488=>7810,
+39425=>7811,
+36978=>7812,
+39347=>7813,
+12242=>7814,
+40786=>7814,
+29118=>7815,
+34909=>7816,
+34802=>7817,
+23541=>7818,
+30087=>7819,
+36490=>7820,
+31820=>7821,
+32162=>7822,
+37276=>7823,
+37604=>7824,
+38619=>7825,
+30990=>7826,
+20786=>7827,
+35320=>7828,
+34389=>7829,
+20659=>7830,
+30241=>7831,
+38358=>7832,
+21109=>7833,
+37656=>7834,
+32020=>7835,
+32189=>7836,
+36781=>7837,
+35422=>7838,
+36060=>7839,
+32880=>7840,
+24478=>7841,
+21474=>7842,
+36517=>7843,
+31428=>7844,
+37679=>7845,
+36948=>7846,
+24118=>7847,
+36024=>7848,
+25812=>7849,
+21934=>7850,
+37170=>7851,
+25763=>7852,
+33213=>7853,
+24986=>7854,
+35477=>7855,
+24392=>7856,
+30070=>7857,
+25803=>7858,
+40680=>7859,
+34153=>7860,
+27284=>7861,
+25623=>7862,
+23798=>7863,
+31153=>7864,
+23566=>7865,
+29128=>7866,
+37159=>7867,
+25973=>7868,
+28364=>7869,
+36958=>7870,
+32224=>7871,
+39003=>7872,
+40670=>7873,
+22666=>7874,
+38651=>7875,
+28593=>7876,
+37347=>7877,
+35519=>7878,
+35548=>7879,
+37336=>7880,
+38914=>7881,
+37664=>7882,
+35330=>7883,
+26481=>7884,
+21205=>7885,
+26847=>7886,
+20941=>7887,
+12222=>7888,
+39717=>7888,
+29346=>7889,
+29544=>7890,
+35712=>7891,
+36077=>7892,
+37709=>7893,
+37723=>7894,
+26039=>7895,
+32222=>7896,
+38538=>7897,
+23565=>7898,
+22136=>7899,
+38931=>7900,
+37389=>7901,
+22890=>7902,
+22702=>7903,
+40285=>7904,
+38989=>7905,
+35355=>7906,
+24801=>7907,
+39187=>7908,
+20818=>7909,
+29246=>7910,
+39180=>7911,
+36019=>7912,
+30332=>7913,
+32624=>7914,
+38309=>7915,
+31020=>7916,
+37353=>7917,
+29033=>7918,
+31684=>7919,
+36009=>7920,
+39151=>7921,
+35370=>7922,
+32033=>7923,
+12214=>7924,
+39131=>7924,
+35513=>7925,
+24290=>7926,
+36027=>7927,
+32027=>7928,
+22707=>7929,
+22894=>7930,
+24996=>7931,
+31966=>7932,
+35920=>7933,
+26963=>7934,
+37586=>7935,
+12213=>7936,
+39080=>7936,
+30219=>7937,
+39342=>7938,
+32299=>7939,
+35575=>7940,
+40179=>7941,
+33178=>7942,
+36667=>7943,
+25771=>7944,
+36628=>7945,
+36070=>7946,
+24489=>7947,
+36000=>7948,
+35331=>7949,
+23142=>7950,
+32283=>7951,
+35442=>7952,
+37411=>7953,
+33995=>7954,
+24185=>7955,
+36245=>7956,
+36123=>7957,
+23713=>7958,
+21083=>7959,
+37628=>7960,
+32177=>7961,
+23831=>7962,
+37804=>7963,
+25841=>7964,
+40255=>7965,
+38307=>7966,
+37499=>7967,
+20491=>7968,
+32102=>7969,
+40852=>7970,
+38799=>7971,
+36002=>7972,
+37390=>7973,
+28317=>7974,
+27083=>7975,
+36092=>7976,
+34865=>7977,
+39015=>7978,
+21102=>7979,
+38364=>7980,
+35264=>7981,
+39208=>7982,
+24931=>7983,
+36011=>7984,
+24291=>7985,
+35215=>7986,
+27512=>7987,
+12244=>7988,
+40860=>7988,
+38312=>7989,
+36556=>7990,
+35437=>7991,
+27331=>7992,
+36020=>7993,
+21130=>7994,
+36645=>7995,
+37707=>7996,
+22283=>7997,
+36942=>7998,
+39405=>7999,
+38867=>8000,
+28450=>8001,
+34399=>8002,
+38305=>8003,
+40372=>8004,
+36032=>8005,
+36703=>8006,
+40251=>8007,
+32005=>8008,
+22778=>8009,
+35703=>8010,
+28396=>8011,
+22057=>8012,
+33775=>8013,
+30059=>8014,
+21123=>8015,
+35441=>8016,
+25079=>8017,
+22750=>8018,
+27489=>8019,
+29872=>8020,
+36996=>8021,
+32233=>8022,
+35594=>8023,
+25582=>8024,
+36637=>8025,
+36036=>8026,
+31330=>8027,
+26371=>8028,
+29172=>8029,
+21295=>8030,
+35569=>8031,
+35496=>8032,
+32362=>8033,
+33911=>8034,
+28222=>8035,
+29554=>8036,
+36008=>8037,
+31117=>8038,
+25802=>8039,
+27231=>8040,
+31309=>8041,
+39249=>8042,
+35663=>8043,
+40388=>8044,
+32318=>8045,
+32221=>8046,
+26997=>8047,
+36655=>8048,
+32026=>8049,
+25824=>8050,
+24190=>8051,
+34186=>8052,
+21137=>8053,
+28639=>8054,
+35336=>8055,
+35352=>8056,
+38555=>8057,
+32380=>8058,
+32000=>8059,
+22846=>8060,
+33698=>8061,
+38960=>8062,
+36040=>8063,
+37440=>8064,
+20729=>8065,
+39381=>8066,
+27570=>8067,
+30435=>8068,
+22533=>8069,
+31627=>8070,
+38291=>8071,
+33393=>8072,
+32216=>8073,
+32365=>8074,
+27298=>8075,
+40572=>8076,
+25536=>8077,
+25791=>8078,
+31777=>8079,
+20745=>8080,
+34214=>8081,
+27323=>8082,
+37970=>8083,
+36368=>8084,
+36068=>8085,
+12178=>8086,
+35211=>8086,
+37749=>8087,
+33382=>8088,
+21133=>8089,
+39198=>8090,
+28472=>8091,
+28666=>8092,
+28567=>8093,
+23559=>8094,
+28479=>8095,
+34083=>8096,
+27123=>8097,
+22892=>8098,
+35611=>8099,
+37292=>8100,
+33184=>8101,
+28550=>8102,
+39509=>8103,
+23308=>8104,
+25898=>8105,
+37496=>8106,
+30703=>8107,
+20709=>8108,
+39171=>8109,
+32371=>8110,
+32094=>8111,
+36686=>8112,
+36611=>8113,
+38542=>8114,
+31680=>8115,
+28500=>8116,
+32080=>8117,
+35489=>8118,
+32202=>8119,
+37670=>8120,
+20677=>8121,
+35641=>8122,
+36914=>8123,
+29180=>8124,
+30433=>8125,
+21185=>8126,
+33686=>8127,
+39912=>8128,
+39514=>8129,
+32147=>8130,
+38968=>8131,
+37857=>8132,
+24465=>8133,
+30169=>8134,
+31478=>8135,
+31998=>8136,
+33290=>8137,
+39378=>8138,
+33289=>8139,
+25818=>8140,
+37624=>8141,
+25084=>8142,
+21127=>8143,
+40273=>8144,
+32121=>8145,
+35258=>8146,
+35363=>8147,
+32118=>8148,
+37406=>8149,
+36557=>8150,
+39423=>8151,
+38283=>8152,
+20977=>8153,
+38982=>8154,
+27579=>8155,
+35506=>8156,
+22718=>8157,
+25031=>8158,
+25715=>8159,
+24235=>8160,
+35122=>8161,
+35463=>8162,
+22602=>8163,
+20744=>8164,
+23532=>8165,
+31014=>8166,
+26336=>8167,
+34407=>8168,
+24011=>8169,
+31418=>8170,
+39243=>8171,
+28528=>8172,
+25844=>8173,
+38346=>8174,
+34847=>8175,
+33240=>8176,
+33802=>8177,
+20358=>8178,
+36084=>8179,
+34253=>8180,
+27396=>8181,
+25876=>8182,
+31811=>8183,
+38348=>8184,
+34349=>8185,
+28734=>8186,
+35733=>8187,
+25900=>8188,
+35261=>8189,
+25078=>8190,
+32412=>8191,
+29211=>8192,
+28651=>8193,
+25736=>8194,
+21214=>8195,
+28551=>8196,
+27138=>8197,
+37939=>8198,
+22744=>8199,
+39006=>8200,
+31852=>8201,
+38626=>8202,
+28757=>8203,
+35023=>8204,
+63975=>8204,
+39881=>8205,
+31150=>8206,
+40599=>8207,
+21426=>8208,
+21237=>8209,
+31019=>8210,
+27511=>8211,
+28701=>8212,
+38584=>8213,
+20486=>8214,
+32879=>8215,
+34030=>8216,
+36899=>8217,
+37934=>8218,
+24976=>8219,
+28451=>8220,
+31806=>8221,
+25986=>8222,
+33225=>8223,
+37832=>8224,
+25088=>8225,
+29001=>8226,
+32244=>8227,
+31975=>8228,
+20841=>8229,
+36635=>8230,
+35538=>8231,
+30274=>8232,
+36988=>8233,
+37904=>8234,
+29557=>8235,
+33256=>8236,
+37168=>8237,
+40023=>8238,
+36035=>8239,
+40801=>8240,
+37428=>8241,
+38728=>8242,
+23994=>8243,
+38936=>8244,
+39230=>8245,
+21129=>8246,
+12243=>8247,
+40845=>8247,
+32894=>8248,
+22184=>8249,
+31840=>8250,
+22751=>8251,
+25871=>8252,
+38580=>8253,
+27155=>8254,
+23105=>8255,
+25695=>8256,
+31757=>8257,
+34310=>8258,
+30439=>8259,
+39025=>8260,
+24300=>8261,
+29200=>8262,
+25796=>8263,
+28407=>8264,
+34396=>8265,
+39791=>8266,
+36034=>8267,
+37682=>8268,
+38520=>8269,
+39522=>8270,
+37569=>8271,
+23650=>8272,
+32311=>8273,
+24942=>8274,
+28670=>8275,
+32209=>8276,
+24018=>8277,
+25891=>8278,
+23423=>8279,
+28772=>8280,
+20098=>8281,
+25476=>8282,
+36650=>8283,
+20523=>8284,
+20374=>8285,
+28138=>8286,
+32184=>8287,
+35542=>8288,
+34367=>8289,
+32645=>8290,
+37007=>8291,
+38012=>8292,
+31854=>8293,
+39486=>8294,
+39409=>8295,
+32097=>8296,
+23229=>8297,
+29802=>8298,
+30908=>8299,
+34718=>8300,
+12218=>8301,
+39340=>8301,
+39393=>8302,
+21966=>8303,
+36023=>8304,
+12230=>8305,
+40613=>8305,
+36067=>8306,
+36993=>8307,
+30622=>8308,
+39237=>8309,
+34875=>8310,
+28415=>8311,
+35646=>8312,
+37672=>8313,
+37466=>8314,
+36031=>8315,
+37762=>8316,
+12200=>8317,
+38272=>8317,
+24758=>8318,
+20497=>8319,
+37683=>8320,
+22818=>8321,
+35598=>8322,
+24396=>8323,
+35219=>8324,
+32191=>8325,
+32236=>8326,
+24287=>8327,
+28357=>8328,
+25003=>8329,
+38313=>8330,
+40180=>8331,
+37528=>8332,
+35628=>8333,
+35584=>8334,
+30045=>8335,
+37385=>8336,
+32013=>8337,
+38627=>8338,
+25747=>8339,
+33126=>8340,
+24817=>8341,
+39719=>8342,
+39186=>8343,
+25836=>8344,
+33193=>8345,
+25862=>8346,
+37312=>8347,
+12227=>8348,
+40165=>8348,
+32886=>8349,
+22169=>8350,
+38007=>8351,
+37811=>8352,
+27320=>8353,
+29552=>8354,
+23527=>8355,
+25840=>8356,
+28632=>8357,
+37397=>8358,
+32016=>8359,
+33215=>8360,
+28611=>8361,
+36786=>8362,
+30247=>8363,
+35582=>8364,
+27472=>8365,
+40407=>8366,
+27590=>8367,
+22036=>8368,
+28442=>8369,
+30436=>8370,
+40848=>8371,
+36064=>8372,
+22132=>8373,
+40300=>8374,
+39449=>8375,
+39108=>8376,
+38971=>8377,
+36007=>8378,
+34315=>8379,
+24977=>8380,
+35413=>8381,
+28497=>8382,
+38935=>8383,
+25778=>8384,
+37610=>8385,
+20693=>8386,
+27192=>8387,
+35676=>8388,
+33229=>8389,
+12241=>8390,
+40778=>8390,
+39438=>8391,
+35912=>8392,
+21843=>8393,
+27683=>8394,
+35350=>8395,
+29309=>8396,
+37370=>8397,
+37467=>8398,
+36983=>8399,
+31805=>8400,
+35609=>8401,
+37666=>8402,
+37463=>8403,
+28154=>8404,
+35700=>8405,
+22649=>8406,
+27085=>8407,
+21958=>8408,
+22715=>8409,
+34196=>8410,
+25654=>8411,
+37740=>8412,
+27211=>8413,
+21932=>8414,
+20689=>8415,
+32761=>8416,
+31429=>8417,
+31434=>8418,
+27453=>8419,
+35242=>8420,
+23522=>8421,
+36629=>8422,
+27691=>8423,
+20670=>8424,
+38915=>8425,
+35531=>8426,
+24950=>8427,
+29898=>8428,
+31406=>8429,
+36264=>8430,
+21312=>8431,
+36544=>8432,
+39493=>8433,
+40818=>8434,
+39028=>8435,
+27402=>8436,
+21240=>8437,
+40306=>8438,
+30906=>8439,
+35731=>8440,
+39250=>8441,
+25854=>8442,
+32350=>8443,
+29105=>8444,
+38860=>8445,
+35469=>8446,
+32009=>8447,
+27054=>8448,
+32104=>8449,
+36575=>8450,
+37613=>8451,
+38287=>8452,
+28516=>8453,
+28753=>8454,
+34217=>8455,
+39955=>8456,
+36093=>8457,
+20632=>8458,
+21930=>8459,
+39479=>8460,
+25475=>8461,
+28544=>8462,
+27578=>8463,
+32023=>8464,
+31721=>8465,
+26348=>8466,
+38275=>8467,
+38493=>8468,
+36109=>8469,
+32341=>8470,
+20663=>8471,
+36062=>8472,
+29138=>8473,
+32057=>8474,
+36050=>8475,
+25448=>8476,
+25885=>8477,
+25086=>8478,
+35373=>8479,
+32051=>8480,
+23529=>8481,
+23352=>8482,
+33102=>8483,
+28402=>8484,
+32882=>8485,
+32361=>8486,
+21213=>8487,
+32854=>8488,
+24107=>8489,
+29509=>8490,
+28629=>8491,
+35433=>8492,
+26178=>8493,
+34645=>8494,
+23526=>8495,
+35672=>8496,
+39387=>8497,
+21218=>8498,
+36969=>8499,
+37323=>8500,
+39166=>8501,
+35222=>8502,
+35430=>8503,
+22781=>8504,
+29560=>8505,
+27166=>8506,
+36664=>8507,
+26360=>8508,
+36118=>8509,
+23660=>8510,
+34899=>8511,
+27193=>8512,
+31466=>8513,
+25976=>8514,
+24101=>8515,
+38617=>8516,
+35504=>8517,
+38918=>8518,
+35500=>8519,
+30889=>8520,
+29197=>8521,
+32114=>8522,
+39164=>8523,
+39686=>8524,
+32883=>8525,
+24939=>8526,
+38924=>8527,
+35359=>8528,
+35494=>8529,
+25851=>8530,
+34311=>8531,
+35380=>8532,
+32901=>8533,
+38614=>8534,
+38568=>8535,
+32143=>8536,
+27506=>8537,
+23403=>8538,
+25613=>8539,
+32302=>8540,
+29795=>8541,
+37782=>8542,
+29562=>8543,
+25787=>8544,
+33274=>8545,
+24907=>8546,
+25892=>8547,
+36010=>8548,
+30321=>8549,
+28760=>8550,
+22727=>8551,
+35674=>8552,
+35527=>8553,
+22022=>8554,
+28271=>8555,
+29145=>8556,
+28644=>8557,
+32295=>8558,
+35342=>8559,
+39472=>8560,
+35588=>8561,
+37563=>8562,
+38988=>8563,
+39636=>8564,
+26781=>8565,
+36028=>8566,
+37941=>8567,
+24307=>8568,
+32893=>8569,
+28916=>8570,
+37509=>8571,
+32113=>8572,
+38957=>8573,
+22294=>8574,
+22615=>8575,
+22296=>8576,
+38973=>8577,
+40213=>8578,
+39345=>8579,
+39389=>8580,
+27234=>8581,
+31402=>8582,
+35178=>8583,
+24398=>8584,
+28771=>8585,
+38929=>8586,
+33836=>8587,
+32178=>8588,
+12209=>8589,
+38859=>8589,
+36949=>8590,
+22285=>8591,
+29234=>8592,
+28656=>8593,
+32173=>8594,
+33894=>8595,
+20553=>8596,
+20702=>8597,
+32239=>8598,
+35586=>8599,
+34907=>8600,
+32862=>8601,
+32011=>8602,
+31337=>8603,
+21839=>8604,
+25790=>8605,
+34680=>8606,
+28198=>8607,
+31401=>8608,
+21978=>8609,
+37794=>8610,
+28879=>8611,
+35491=>8612,
+28961=>8613,
+34154=>8614,
+22626=>8615,
+38695=>8616,
+21209=>8617,
+35492=>8618,
+37675=>8619,
+29351=>8620,
+35186=>8621,
+32722=>8622,
+37521=>8623,
+25138=>8624,
+32048=>8625,
+34662=>8626,
+36676=>8627,
+23805=>8628,
+20448=>8629,
+29433=>8630,
+22151=>8631,
+37697=>8632,
+39854=>8633,
+32406=>8634,
+36066=>8635,
+37532=>8636,
+38289=>8637,
+39023=>8638,
+38570=>8639,
+29694=>8640,
+29563=>8641,
+32291=>8642,
+39201=>8643,
+25010=>8644,
+32171=>8645,
+38002=>8646,
+37129=>8647,
+35443=>8648,
+38911=>8649,
+38917=>8650,
+34157=>8651,
+22210=>8652,
+37559=>8653,
+26313=>8654,
+22063=>8655,
+21332=>8656,
+25406=>8657,
+33029=>8658,
+35559=>8659,
+23531=>8660,
+28681=>8661,
+35613=>8662,
+37573=>8663,
+37313=>8664,
+33288=>8665,
+37561=>8666,
+32137=>8667,
+38920=>8668,
+35377=>8669,
+32210=>8670,
+32396=>8671,
+36562=>8672,
+25080=>8673,
+36984=>8674,
+30316=>8675,
+32098=>8676,
+23416=>8677,
+21211=>8678,
+35426=>8679,
+23563=>8680,
+39348=>8681,
+35347=>8682,
+35338=>8683,
+36956=>8684,
+22739=>8685,
+40201=>8686,
+40232=>8687,
+21854=>8688,
+20126=>8689,
+35357=>8690,
+38329=>8691,
+40573=>8692,
+22196=>8693,
+38996=>8694,
+38331=>8695,
+33399=>8696,
+21421=>8697,
+30831=>8698,
+35578=>8699,
+39511=>8700,
+40230=>8701,
+26954=>8702,
+25562=>8703,
+30221=>8704,
+38525=>8705,
+30306=>8706,
+39178=>8707,
+27171=>8708,
+22575=>8709,
+35617=>8710,
+34277=>8711,
+29242=>8712,
+12212=>8713,
+38913=>8713,
+26989=>8714,
+33865=>8715,
+37291=>8716,
+37541=>8717,
+38948=>8718,
+36986=>8719,
+20736=>8720,
+34811=>8721,
+34269=>8722,
+20740=>8723,
+25014=>8724,
+32681=>8725,
+35427=>8726,
+35696=>8727,
+35516=>8728,
+35695=>8729,
+32377=>8730,
+34093=>8731,
+38512=>8732,
+37504=>8733,
+39154=>8734,
+38577=>8735,
+27387=>8736,
+23344=>8737,
+40441=>8738,
+25033=>8739,
+32403=>8740,
+29801=>8741,
+34722=>8742,
+29151=>8743,
+29074=>8744,
+34821=>8745,
+36111=>8746,
+31310=>8747,
+21938=>8748,
+25793=>8749,
+20653=>8750,
+30320=>8751,
+36404=>8752,
+20778=>8753,
+24962=>8754,
+37109=>8755,
+37438=>8756,
+29494=>8757,
+35480=>8758,
+36671=>8759,
+39192=>8760,
+12226=>8761,
+39770=>8761,
+28417=>8762,
+33287=>8763,
+23996=>8764,
+35486=>8765,
+39729=>8766,
+29508=>8767,
+35709=>8768,
+38928=>8769,
+39341=>8770,
+40219=>8771,
+28149=>8772,
+36677=>8773,
+22290=>8774,
+21729=>8775,
+22291=>8776,
+32227=>8777,
+36960=>8778,
+39000=>8779,
+32004=>8780,
+36493=>8781,
+38000=>8782,
+38322=>8783,
+38642=>8784,
+37142=>8785,
+38549=>8786,
+36939=>8787,
+34292=>8788,
+37270=>8789,
+26248=>8790,
+38620=>8791,
+36617=>8792,
+25890=>8793,
+26283=>8794,
+36106=>8795,
+36124=>8796,
+33247=>8797,
+38015=>8798,
+26839=>8799,
+31432=>8800,
+36012=>8801,
+25799=>8802,
+21063=>8803,
+28580=>8804,
+36042=>8805,
+36104=>8806,
+36555=>8807,
+37720=>8808,
+38296=>8809,
+35408=>8810,
+40779=>8811,
+20661=>8812,
+27656=>8813,
+30430=>8814,
+26028=>8815,
+36670=>8816,
+23940=>8817,
+26855=>8818,
+25136=>8819,
+32187=>8820,
+24373=>8821,
+28466=>8822,
+24115=>8823,
+36076=>8824,
+33081=>8825,
+36249=>8826,
+34756=>8827,
+36685=>8828,
+37754=>8829,
+36889=>8830,
+35998=>8831,
+37341=>8832,
+20597=>8833,
+35386=>8834,
+37806=>8835,
+38499=>8836,
+24128=>8837,
+30309=>8838,
+37165=>8839,
+35657=>8840,
+32340=>8841,
+32887=>8842,
+22519=>8843,
+34937=>8844,
+32025=>8845,
+25711=>8846,
+25842=>8847,
+24159=>8848,
+36074=>8849,
+28399=>8850,
+37912=>8851,
+32066=>8852,
+31278=>8853,
+33131=>8854,
+34886=>8855,
+35589=>8856,
+36600=>8857,
+30394=>8858,
+26205=>8859,
+39519=>8860,
+35576=>8861,
+35461=>8862,
+29165=>8863,
+30682=>8864,
+22225=>8865,
+36015=>8866,
+37956=>8867,
+31689=>8868,
+39376=>8869,
+23560=>8870,
+30938=>8871,
+36681=>8872,
+36090=>8873,
+27137=>8874,
+33674=>8875,
+35037=>8876,
+22941=>8877,
+22767=>8878,
+29376=>8879,
+37648=>8880,
+36101=>8881,
+22684=>8882,
+32180=>8883,
+35524=>8884,
+28310=>8885,
+28609=>8886,
+36039=>8887,
+28460=>8888,
+32156=>8889,
+32317=>8890,
+32305=>8891,
+37138=>8892,
+35419=>8893,
+32068=>8894,
+38013=>8895,
+21959=>8896,
+21401=>8897,
+21428=>8898,
+38760=>8899,
+36107=>8900,
+21293=>8901,
+21297=>8902,
+36094=>8903,
+21060=>8904,
+21132=>8905,
+21108=>8906,
+20660=>8907,
+20480=>8908,
+20630=>8909,
+20757=>8910,
+20738=>8911,
+20756=>8912,
+20796=>8913,
+20791=>8914,
+20712=>8915,
+20674=>8916,
+20795=>8917,
+20752=>8918,
+20794=>8919,
+20681=>8920,
+31988=>8921,
+40652=>8922,
+22213=>8923,
+40172=>8924,
+35131=>8925,
+33248=>8926,
+35329=>8927,
+35344=>8928,
+35340=>8929,
+35349=>8930,
+35635=>8931,
+35406=>8932,
+35365=>8933,
+35393=>8934,
+35382=>8935,
+35398=>8936,
+35412=>8937,
+35416=>8938,
+35410=>8939,
+35462=>8940,
+35460=>8941,
+35455=>8942,
+35440=>8943,
+35452=>8944,
+35445=>8945,
+35436=>8946,
+35438=>8947,
+35533=>8948,
+35554=>8949,
+35425=>8950,
+35482=>8951,
+35493=>8952,
+35473=>8953,
+35474=>8954,
+35535=>8955,
+35537=>8956,
+35529=>8957,
+35547=>8958,
+35543=>8959,
+35522=>8960,
+35510=>8961,
+35574=>8962,
+35563=>8963,
+35604=>8964,
+35585=>8965,
+35556=>8966,
+35565=>8967,
+35580=>8968,
+35571=>8969,
+35558=>8970,
+35566=>8971,
+35550=>8972,
+35624=>8973,
+35740=>8974,
+35606=>8975,
+35610=>8976,
+35600=>8977,
+35627=>8978,
+35629=>8979,
+35670=>8980,
+35673=>8981,
+35662=>8982,
+35742=>8983,
+35691=>8984,
+35734=>8985,
+38488=>8986,
+37178=>8987,
+37140=>8988,
+37172=>8989,
+37087=>8990,
+37174=>8991,
+37126=>8992,
+37192=>8993,
+33467=>8994,
+21233=>8995,
+24048=>8996,
+22538=>8997,
+22745=>8998,
+22754=>8999,
+22752=>9000,
+22746=>9001,
+22497=>9002,
+22607=>9003,
+22550=>9004,
+22610=>9005,
+22557=>9006,
+22628=>9007,
+34188=>9008,
+34131=>9009,
+34294=>9010,
+33703=>9011,
+33799=>9012,
+34031=>9013,
+33511=>9014,
+34338=>9015,
+34086=>9016,
+22603=>9017,
+29026=>9018,
+34136=>9019,
+34045=>9020,
+34126=>9021,
+34184=>9022,
+34234=>9023,
+29334=>9024,
+28366=>9025,
+34113=>9026,
+34254=>9027,
+34130=>9028,
+33984=>9029,
+33874=>9030,
+33892=>9031,
+33940=>9032,
+33845=>9033,
+34207=>9034,
+34133=>9035,
+40367=>9036,
+33939=>9037,
+32264=>9038,
+34118=>9039,
+34146=>9040,
+34078=>9041,
+39488=>9042,
+34362=>9043,
+37795=>9044,
+34167=>9045,
+34334=>9046,
+34298=>9047,
+34308=>9048,
+34282=>9049,
+34330=>9050,
+22889=>9051,
+23607=>9052,
+25451=>9053,
+25718=>9054,
+25759=>9055,
+25681=>9056,
+25692=>9057,
+25779=>9058,
+25860=>9059,
+25878=>9060,
+25847=>9061,
+25852=>9062,
+25883=>9063,
+22064=>9064,
+22072=>9065,
+22216=>9066,
+22182=>9067,
+21764=>9068,
+21692=>9069,
+22144=>9070,
+22109=>9071,
+22112=>9072,
+22069=>9073,
+22006=>9074,
+22118=>9075,
+22130=>9076,
+22156=>9077,
+22117=>9078,
+22044=>9079,
+22062=>9080,
+21993=>9081,
+22038=>9082,
+22208=>9083,
+22029=>9084,
+22195=>9085,
+22209=>9086,
+22127=>9087,
+36705=>9088,
+22198=>9089,
+22165=>9090,
+22279=>9091,
+24131=>9092,
+24172=>9093,
+24152=>9094,
+24151=>9095,
+23943=>9096,
+23796=>9097,
+23888=>9098,
+23852=>9099,
+23975=>9100,
+23968=>9101,
+23959=>9102,
+23821=>9103,
+23992=>9104,
+23937=>9105,
+24020=>9106,
+24480=>9107,
+29559=>9108,
+29505=>9109,
+29546=>9110,
+29499=>9111,
+29547=>9112,
+29568=>9113,
+29564=>9114,
+39136=>9115,
+39219=>9116,
+39145=>9117,
+39228=>9118,
+39146=>9119,
+39147=>9120,
+39149=>9121,
+39156=>9122,
+39177=>9123,
+39185=>9124,
+39195=>9125,
+39223=>9126,
+39231=>9127,
+39235=>9128,
+39240=>9129,
+39241=>9130,
+39242=>9131,
+39244=>9132,
+39266=>9133,
+24289=>9134,
+36065=>9135,
+25082=>9136,
+25006=>9137,
+24938=>9138,
+24894=>9139,
+24757=>9140,
+24884=>9141,
+25036=>9142,
+24927=>9143,
+25064=>9144,
+24827=>9145,
+24887=>9146,
+24818=>9147,
+24947=>9148,
+24860=>9149,
+24978=>9150,
+38274=>9151,
+38278=>9152,
+38344=>9153,
+38286=>9154,
+38292=>9155,
+38284=>9156,
+38373=>9157,
+38317=>9158,
+38315=>9159,
+39726=>9160,
+38316=>9161,
+38334=>9162,
+38326=>9163,
+39721=>9164,
+38335=>9165,
+38333=>9166,
+38332=>9167,
+38339=>9168,
+38347=>9169,
+38356=>9170,
+38352=>9171,
+38357=>9172,
+38366=>9173,
+28739=>9174,
+28505=>9175,
+28711=>9176,
+28696=>9177,
+28668=>9178,
+28039=>9179,
+28025=>9180,
+28254=>9181,
+28590=>9182,
+28687=>9183,
+28408=>9184,
+28527=>9185,
+28150=>9186,
+28543=>9187,
+28678=>9188,
+28576=>9189,
+28683=>9190,
+28775=>9191,
+28740=>9192,
+28677=>9193,
+28535=>9194,
+28704=>9195,
+28703=>9196,
+28722=>9197,
+28712=>9198,
+28765=>9199,
+39467=>9200,
+36999=>9201,
+36885=>9202,
+37008=>9203,
+23656=>9204,
+24371=>9205,
+23285=>9206,
+23255=>9207,
+23296=>9208,
+23149=>9209,
+23304=>9210,
+23372=>9211,
+23207=>9212,
+23291=>9213,
+23307=>9214,
+23329=>9215,
+23338=>9216,
+23321=>9217,
+39380=>9218,
+39391=>9219,
+39385=>9220,
+39478=>9221,
+39515=>9222,
+39377=>9223,
+39384=>9224,
+39501=>9225,
+39498=>9226,
+39394=>9227,
+39530=>9228,
+39439=>9229,
+39437=>9230,
+39429=>9231,
+39490=>9232,
+39469=>9233,
+39446=>9234,
+39489=>9235,
+39470=>9236,
+39480=>9237,
+39491=>9238,
+39492=>9239,
+39503=>9240,
+39525=>9241,
+39524=>9242,
+31993=>9243,
+32006=>9244,
+32002=>9245,
+32007=>9246,
+32008=>9247,
+32394=>9248,
+32028=>9249,
+32021=>9250,
+32019=>9251,
+32058=>9252,
+32050=>9253,
+32049=>9254,
+32272=>9255,
+32060=>9256,
+32064=>9257,
+32063=>9258,
+32093=>9259,
+32078=>9260,
+32115=>9261,
+32134=>9262,
+32131=>9263,
+32136=>9264,
+32190=>9265,
+32186=>9266,
+32203=>9267,
+32212=>9268,
+32196=>9269,
+32158=>9270,
+32172=>9271,
+32185=>9272,
+32163=>9273,
+32176=>9274,
+32199=>9275,
+32217=>9276,
+32215=>9277,
+32249=>9278,
+32242=>9279,
+32354=>9280,
+32230=>9281,
+32246=>9282,
+32241=>9283,
+32267=>9284,
+32225=>9285,
+32265=>9286,
+32285=>9287,
+32287=>9288,
+32286=>9289,
+32301=>9290,
+32266=>9291,
+32273=>9292,
+32381=>9293,
+32313=>9294,
+32309=>9295,
+32306=>9296,
+32326=>9297,
+32325=>9298,
+32392=>9299,
+32346=>9300,
+32338=>9301,
+32366=>9302,
+32382=>9303,
+32368=>9304,
+32367=>9305,
+32408=>9306,
+29859=>9307,
+29771=>9308,
+29903=>9309,
+38922=>9310,
+29885=>9311,
+29759=>9312,
+29833=>9313,
+29862=>9314,
+29908=>9315,
+29914=>9316,
+38873=>9317,
+38878=>9318,
+38876=>9319,
+27050=>9320,
+27370=>9321,
+26776=>9322,
+26838=>9323,
+27141=>9324,
+26783=>9325,
+27355=>9326,
+27379=>9327,
+27368=>9328,
+27359=>9329,
+27273=>9330,
+26895=>9331,
+27208=>9332,
+26984=>9333,
+27071=>9334,
+27194=>9335,
+27292=>9336,
+27410=>9337,
+27422=>9338,
+27357=>9339,
+27111=>9340,
+27407=>9341,
+27414=>9342,
+27372=>9343,
+27354=>9344,
+27384=>9345,
+27315=>9346,
+27367=>9347,
+27299=>9348,
+27347=>9349,
+27358=>9350,
+27556=>9351,
+27550=>9352,
+27566=>9353,
+27563=>9354,
+27567=>9355,
+36564=>9356,
+36571=>9357,
+36594=>9358,
+36603=>9359,
+36708=>9360,
+36601=>9361,
+36604=>9362,
+36587=>9363,
+36580=>9364,
+36706=>9365,
+36602=>9366,
+36606=>9367,
+36618=>9368,
+36615=>9369,
+36613=>9370,
+36626=>9371,
+36646=>9372,
+36638=>9373,
+36639=>9374,
+36636=>9375,
+36659=>9376,
+36678=>9377,
+36692=>9378,
+25108=>9379,
+25127=>9380,
+29964=>9381,
+26311=>9382,
+26308=>9383,
+26249=>9384,
+26326=>9385,
+36033=>9386,
+36016=>9387,
+36026=>9388,
+36029=>9389,
+36100=>9390,
+36018=>9391,
+36037=>9392,
+36112=>9393,
+36049=>9394,
+36058=>9395,
+36053=>9396,
+36075=>9397,
+36071=>9398,
+36091=>9399,
+35224=>9400,
+35244=>9401,
+35233=>9402,
+35263=>9403,
+35238=>9404,
+35247=>9405,
+35250=>9406,
+35255=>9407,
+27647=>9408,
+27660=>9409,
+27692=>9410,
+29272=>9411,
+26407=>9412,
+33110=>9413,
+33242=>9414,
+33051=>9415,
+33214=>9416,
+33121=>9417,
+33231=>9418,
+27487=>9419,
+39086=>9420,
+39087=>9421,
+39094=>9422,
+39100=>9423,
+39110=>9424,
+39112=>9425,
+36674=>9426,
+40783=>9427,
+26005=>9428,
+29036=>9429,
+29010=>9430,
+29079=>9431,
+29121=>9432,
+29148=>9433,
+29182=>9434,
+31152=>9435,
+31118=>9436,
+31146=>9437,
+25055=>9438,
+24932=>9439,
+25059=>9440,
+25095=>9441,
+28585=>9442,
+30959=>9443,
+30893=>9444,
+30824=>9445,
+30904=>9446,
+31018=>9447,
+31025=>9448,
+30820=>9449,
+30973=>9450,
+30951=>9451,
+30947=>9452,
+40853=>9453,
+30616=>9454,
+30558=>9455,
+30652=>9456,
+32646=>9457,
+32648=>9458,
+37330=>9459,
+37331=>9460,
+37332=>9461,
+37337=>9462,
+37335=>9463,
+37333=>9464,
+37367=>9465,
+37351=>9466,
+37348=>9467,
+37702=>9468,
+37365=>9469,
+37369=>9470,
+37384=>9471,
+37414=>9472,
+37445=>9473,
+37393=>9474,
+37392=>9475,
+37377=>9476,
+37415=>9477,
+37380=>9478,
+37413=>9479,
+37376=>9480,
+37434=>9481,
+37478=>9482,
+37431=>9483,
+37427=>9484,
+37461=>9485,
+37437=>9486,
+37432=>9487,
+37470=>9488,
+37484=>9489,
+37485=>9490,
+37439=>9491,
+37984=>9492,
+37424=>9493,
+37449=>9494,
+37448=>9495,
+37453=>9496,
+37422=>9497,
+37433=>9498,
+37944=>9499,
+37548=>9500,
+37536=>9501,
+37498=>9502,
+37546=>9503,
+37614=>9504,
+37583=>9505,
+37891=>9506,
+37603=>9507,
+37946=>9508,
+37553=>9509,
+37542=>9510,
+37799=>9511,
+37526=>9512,
+37580=>9513,
+37545=>9514,
+37877=>9515,
+37523=>9516,
+37503=>9517,
+37801=>9518,
+37530=>9519,
+37658=>9520,
+37547=>9521,
+37507=>9522,
+37899=>9523,
+37544=>9524,
+37539=>9525,
+37906=>9526,
+37688=>9527,
+37617=>9528,
+37847=>9529,
+37605=>9530,
+37616=>9531,
+37615=>9532,
+37608=>9533,
+37564=>9534,
+37597=>9535,
+37622=>9536,
+37926=>9537,
+37927=>9538,
+37571=>9539,
+37599=>9540,
+37606=>9541,
+37650=>9542,
+37638=>9543,
+37737=>9544,
+37659=>9545,
+37696=>9546,
+37633=>9547,
+37653=>9548,
+37678=>9549,
+37699=>9550,
+37639=>9551,
+37640=>9552,
+37663=>9553,
+37657=>9554,
+37733=>9555,
+37703=>9556,
+37750=>9557,
+37716=>9558,
+37732=>9559,
+37802=>9560,
+37744=>9561,
+37764=>9562,
+37860=>9563,
+37848=>9564,
+37928=>9565,
+37767=>9566,
+37836=>9567,
+37784=>9568,
+37816=>9569,
+37823=>9570,
+37798=>9571,
+37808=>9572,
+37813=>9573,
+37964=>9574,
+37858=>9575,
+37852=>9576,
+37853=>9577,
+37837=>9578,
+37854=>9579,
+37827=>9580,
+37831=>9581,
+37841=>9582,
+37908=>9583,
+37917=>9584,
+37879=>9585,
+37989=>9586,
+37907=>9587,
+37997=>9588,
+37920=>9589,
+38009=>9590,
+37881=>9591,
+37913=>9592,
+37962=>9593,
+37938=>9594,
+37951=>9595,
+37972=>9596,
+37987=>9597,
+37758=>9598,
+31329=>9599,
+40169=>9600,
+40182=>9601,
+40199=>9602,
+40198=>9603,
+40227=>9604,
+40327=>9605,
+40469=>9606,
+40221=>9607,
+40223=>9608,
+40421=>9609,
+40239=>9610,
+40409=>9611,
+40240=>9612,
+40258=>9613,
+40478=>9614,
+40275=>9615,
+40477=>9616,
+40288=>9617,
+40274=>9618,
+40435=>9619,
+40284=>9620,
+40289=>9621,
+40339=>9622,
+40298=>9623,
+40303=>9624,
+40329=>9625,
+40344=>9626,
+40346=>9627,
+40384=>9628,
+40357=>9629,
+40361=>9630,
+40386=>9631,
+40380=>9632,
+40474=>9633,
+40403=>9634,
+40410=>9635,
+40431=>9636,
+40422=>9637,
+40434=>9638,
+40440=>9639,
+40460=>9640,
+40442=>9641,
+40475=>9642,
+30308=>9643,
+30296=>9644,
+30311=>9645,
+30210=>9646,
+30278=>9647,
+30279=>9648,
+30281=>9649,
+30238=>9650,
+30267=>9651,
+30317=>9652,
+30318=>9653,
+30313=>9654,
+30322=>9655,
+31431=>9656,
+31414=>9657,
+35168=>9658,
+35123=>9659,
+35165=>9660,
+35143=>9661,
+35128=>9662,
+35172=>9663,
+30392=>9664,
+32814=>9665,
+32812=>9666,
+32889=>9667,
+32885=>9668,
+38919=>9669,
+38926=>9670,
+38927=>9671,
+38945=>9672,
+38940=>9673,
+28481=>9674,
+38950=>9675,
+38967=>9676,
+38990=>9677,
+38995=>9678,
+39027=>9679,
+39010=>9680,
+39001=>9681,
+39013=>9682,
+39020=>9683,
+39024=>9684,
+34787=>9685,
+34822=>9686,
+34566=>9687,
+34851=>9688,
+34806=>9689,
+34554=>9690,
+34799=>9691,
+34692=>9692,
+34832=>9693,
+34760=>9694,
+34833=>9695,
+34747=>9696,
+34766=>9697,
+32588=>9698,
+31716=>9699,
+31591=>9700,
+31849=>9701,
+31731=>9702,
+31744=>9703,
+31691=>9704,
+31836=>9705,
+31774=>9706,
+31787=>9707,
+31779=>9708,
+31850=>9709,
+31839=>9710,
+33380=>9711,
+33387=>9712,
+35018=>9713,
+32677=>9714,
+31986=>9715,
+31990=>9716,
+31965=>9717,
+32310=>9718,
+40617=>9719,
+36274=>9720,
+37317=>9721,
+37315=>9722,
+40570=>9723,
+36489=>9724,
+36428=>9725,
+36498=>9726,
+36474=>9727,
+36437=>9728,
+36506=>9729,
+36491=>9730,
+36499=>9731,
+36497=>9732,
+36513=>9733,
+36451=>9734,
+36522=>9735,
+36518=>9736,
+35316=>9737,
+35318=>9738,
+38746=>9739,
+38722=>9740,
+38717=>9741,
+38724=>9742,
+40788=>9743,
+40799=>9744,
+40793=>9745,
+40800=>9746,
+40796=>9747,
+40806=>9748,
+40812=>9749,
+40810=>9750,
+40823=>9751,
+12236=>9752,
+40701=>9752,
+40703=>9753,
+40713=>9754,
+35726=>9755,
+38014=>9756,
+37864=>9757,
+39799=>9758,
+39796=>9759,
+39809=>9760,
+39811=>9761,
+39822=>9762,
+40056=>9763,
+31308=>9764,
+39826=>9765,
+40031=>9766,
+39824=>9767,
+39853=>9768,
+39834=>9769,
+39850=>9770,
+39838=>9771,
+40045=>9772,
+39851=>9773,
+39837=>9774,
+40024=>9775,
+39873=>9776,
+40058=>9777,
+39985=>9778,
+39993=>9779,
+39971=>9780,
+39991=>9781,
+39872=>9782,
+39882=>9783,
+39879=>9784,
+39933=>9785,
+39894=>9786,
+39914=>9787,
+39915=>9788,
+39905=>9789,
+39908=>9790,
+39911=>9791,
+39901=>9792,
+39906=>9793,
+39920=>9794,
+39899=>9795,
+39924=>9796,
+39892=>9797,
+40029=>9798,
+39944=>9799,
+39952=>9800,
+39949=>9801,
+39954=>9802,
+39945=>9803,
+39935=>9804,
+39968=>9805,
+39986=>9806,
+39981=>9807,
+39976=>9808,
+39973=>9809,
+39977=>9810,
+39987=>9811,
+39998=>9812,
+40008=>9813,
+39995=>9814,
+39989=>9815,
+40005=>9816,
+40022=>9817,
+40020=>9818,
+40018=>9819,
+40039=>9820,
+38851=>9821,
+38845=>9822,
+38857=>9823,
+40379=>9824,
+39631=>9825,
+39638=>9826,
+39637=>9827,
+39768=>9828,
+39758=>9829,
+39255=>9830,
+39260=>9831,
+39714=>9832,
+40695=>9833,
+40690=>9834,
+35180=>9835,
+38342=>9836,
+37686=>9837,
+24390=>9838,
+34068=>9839,
+32404=>9840,
+40803=>9841,
+22137=>9842,
+40725=>9843,
+22081=>9844,
+39662=>9845,
+35079=>9846,
+31296=>9847,
+39091=>9848,
+38308=>9849,
+39693=>9850,
+36852=>9851,
+24409=>9852,
+31339=>9853,
+39138=>9854,
+20642=>9855,
+34193=>9856,
+20760=>9857,
+25458=>9858,
+21067=>9859,
+30543=>9860,
+32397=>9861,
+26310=>9862,
+30637=>9863,
+12228=>9864,
+40565=>9864,
+22217=>9865,
+40692=>9866,
+28635=>9867,
+25054=>9868,
+30663=>9869,
+28720=>9870,
+40629=>9871,
+34890=>9872,
+38370=>9873,
+38854=>9874,
+31844=>9875,
+32308=>9876,
+38822=>9877,
+40623=>9878,
+22220=>9879,
+39089=>9880,
+27311=>9881,
+32590=>9882,
+31984=>9883,
+20418=>9884,
+32363=>9885,
+40569=>9886,
+22190=>9887,
+39706=>9888,
+33903=>9889,
+31142=>9890,
+31858=>9891,
+39634=>9892,
+38587=>9893,
+32251=>9894,
+35069=>9895,
+30787=>9896,
+8560=>9897,
+8561=>9898,
+8562=>9899,
+8563=>9900,
+8564=>9901,
+8565=>9902,
+8566=>9903,
+8567=>9904,
+8568=>9905,
+8569=>9906,
+714=>9907,
+715=>9908,
+729=>9909,
+8211=>9910,
+8213=>9911,
+8229=>9912,
+8245=>9913,
+8453=>9914,
+8457=>9915,
+8598=>9916,
+8599=>9917,
+8600=>9918,
+8601=>9919,
+8725=>9920,
+8735=>9921,
+8739=>9922,
+8786=>9923,
+8806=>9924,
+8807=>9925,
+8895=>9926,
+9552=>9927,
+9553=>9928,
+9554=>9929,
+9555=>9930,
+9556=>9931,
+9557=>9932,
+9558=>9933,
+9559=>9934,
+9560=>9935,
+9561=>9936,
+9562=>9937,
+9563=>9938,
+9564=>9939,
+9565=>9940,
+9566=>9941,
+9567=>9942,
+9568=>9943,
+9569=>9944,
+9570=>9945,
+9571=>9946,
+9572=>9947,
+9573=>9948,
+9574=>9949,
+9575=>9950,
+9576=>9951,
+9577=>9952,
+9578=>9953,
+9579=>9954,
+9580=>9955,
+9581=>9956,
+9582=>9957,
+9583=>9958,
+9584=>9959,
+9585=>9960,
+9586=>9961,
+9587=>9962,
+9601=>9963,
+9602=>9964,
+9603=>9965,
+9604=>9966,
+9605=>9967,
+9606=>9968,
+9607=>9969,
+9608=>9970,
+9609=>9971,
+9610=>9972,
+9611=>9973,
+9612=>9974,
+9613=>9975,
+9614=>9976,
+9615=>9977,
+9619=>9978,
+9620=>9979,
+9621=>9980,
+9660=>9981,
+9661=>9982,
+9698=>9983,
+9699=>9984,
+9700=>9985,
+9701=>9986,
+9737=>9987,
+8853=>9988,
+12306=>9989,
+12317=>9990,
+12318=>9991,
+12321=>9992,
+12322=>9993,
+12323=>9994,
+12324=>9995,
+12325=>9996,
+12326=>9997,
+12327=>9998,
+12328=>9999,
+12329=>10000,
+12963=>10001,
+13198=>10002,
+13199=>10003,
+13212=>10004,
+13213=>10005,
+13214=>10006,
+13217=>10007,
+13252=>10008,
+13262=>10009,
+13265=>10010,
+13266=>10011,
+13269=>10012,
+65072=>10013,
+65506=>10014,
+65508=>10015,
+8481=>10016,
+12849=>10017,
+8208=>10018,
+12540=>10019,
+12443=>10020,
+12444=>10021,
+12541=>10022,
+12542=>10023,
+12294=>10024,
+12445=>10025,
+12446=>10026,
+65097=>10027,
+65098=>10028,
+65099=>10029,
+65100=>10030,
+65101=>10031,
+65102=>10032,
+65103=>10033,
+65104=>10034,
+65105=>10035,
+65106=>10036,
+65108=>10037,
+65109=>10038,
+65110=>10039,
+65111=>10040,
+65113=>10041,
+65114=>10042,
+65115=>10043,
+65116=>10044,
+65117=>10045,
+65118=>10046,
+65119=>10047,
+65120=>10048,
+65121=>10049,
+65122=>10050,
+65123=>10051,
+65124=>10052,
+65125=>10053,
+65126=>10054,
+65128=>10055,
+65129=>10056,
+65130=>10057,
+65131=>10058,
+12350=>10059,
+59367=>10059,
+12272=>10060,
+59368=>10060,
+12273=>10061,
+59369=>10061,
+12274=>10062,
+59370=>10062,
+12275=>10063,
+59371=>10063,
+12276=>10064,
+59372=>10064,
+12277=>10065,
+59373=>10065,
+12278=>10066,
+59374=>10066,
+12279=>10067,
+59375=>10067,
+12280=>10068,
+59376=>10068,
+12281=>10069,
+59377=>10069,
+12282=>10070,
+59378=>10070,
+12283=>10071,
+59379=>10071,
+19970=>10072,
+19972=>10073,
+19973=>10074,
+19974=>10075,
+19983=>10076,
+19986=>10077,
+19991=>10078,
+19999=>10079,
+20000=>10080,
+20001=>10081,
+20003=>10082,
+20006=>10083,
+20009=>10084,
+20014=>10085,
+20015=>10086,
+20017=>10087,
+20019=>10088,
+20021=>10089,
+20023=>10090,
+20028=>10091,
+20032=>10092,
+20033=>10093,
+20034=>10094,
+20036=>10095,
+20038=>10096,
+20042=>10097,
+20049=>10098,
+20053=>10099,
+20055=>10100,
+20058=>10101,
+20059=>10102,
+20066=>10103,
+20067=>10104,
+20068=>10105,
+20069=>10106,
+20071=>10107,
+20072=>10108,
+20074=>10109,
+20075=>10110,
+20076=>10111,
+20077=>10112,
+20078=>10113,
+20079=>10114,
+20082=>10115,
+20084=>10116,
+20085=>10117,
+20086=>10118,
+20087=>10119,
+20088=>10120,
+20089=>10121,
+20090=>10122,
+20091=>10123,
+20092=>10124,
+20093=>10125,
+20095=>10126,
+20096=>10127,
+20097=>10128,
+20099=>10129,
+20100=>10130,
+12037=>10131,
+20101=>10131,
+20103=>10132,
+20106=>10133,
+20112=>10134,
+20118=>10135,
+20119=>10136,
+20121=>10137,
+20124=>10138,
+20125=>10139,
+20131=>10140,
+20138=>10141,
+20143=>10142,
+20144=>10143,
+20145=>10144,
+20148=>10145,
+20150=>10146,
+20151=>10147,
+20152=>10148,
+20153=>10149,
+20156=>10150,
+20157=>10151,
+20158=>10152,
+20168=>10153,
+20172=>10154,
+20175=>10155,
+20176=>10156,
+20178=>10157,
+20186=>10158,
+20187=>10159,
+20188=>10160,
+20192=>10161,
+20194=>10162,
+20198=>10163,
+20199=>10164,
+20201=>10165,
+20205=>10166,
+20206=>10167,
+20207=>10168,
+20209=>10169,
+20212=>10170,
+20216=>10171,
+20217=>10172,
+20218=>10173,
+20220=>10174,
+20222=>10175,
+20224=>10176,
+20226=>10177,
+20227=>10178,
+20228=>10179,
+20229=>10180,
+20230=>10181,
+20231=>10182,
+20232=>10183,
+20235=>10184,
+20236=>10185,
+20242=>10186,
+20243=>10187,
+20244=>10188,
+20245=>10189,
+20246=>10190,
+20252=>10191,
+20253=>10192,
+20257=>10193,
+20259=>10194,
+20264=>10195,
+20265=>10196,
+20268=>10197,
+20269=>10198,
+20270=>10199,
+20273=>10200,
+20275=>10201,
+20277=>10202,
+20279=>10203,
+20281=>10204,
+20283=>10205,
+20286=>10206,
+20287=>10207,
+20288=>10208,
+20289=>10209,
+20290=>10210,
+20292=>10211,
+20293=>10212,
+20295=>10213,
+20296=>10214,
+20297=>10215,
+20298=>10216,
+20299=>10217,
+20300=>10218,
+20306=>10219,
+20308=>10220,
+20310=>10221,
+20321=>10222,
+20322=>10223,
+20326=>10224,
+20328=>10225,
+20330=>10226,
+20331=>10227,
+20333=>10228,
+20334=>10229,
+20337=>10230,
+20338=>10231,
+20341=>10232,
+20343=>10233,
+20344=>10234,
+20345=>10235,
+20346=>10236,
+20349=>10237,
+20352=>10238,
+20353=>10239,
+20354=>10240,
+20357=>10241,
+20359=>10242,
+20362=>10243,
+20364=>10244,
+20366=>10245,
+20368=>10246,
+20370=>10247,
+20371=>10248,
+20373=>10249,
+20376=>10250,
+20377=>10251,
+20378=>10252,
+20380=>10253,
+20382=>10254,
+20383=>10255,
+20385=>10256,
+20386=>10257,
+20388=>10258,
+20395=>10259,
+20397=>10260,
+20400=>10261,
+20401=>10262,
+20402=>10263,
+20403=>10264,
+20404=>10265,
+20406=>10266,
+20407=>10267,
+20408=>10268,
+20409=>10269,
+20410=>10270,
+20411=>10271,
+20412=>10272,
+20413=>10273,
+20414=>10274,
+20416=>10275,
+20417=>10276,
+20422=>10277,
+20423=>10278,
+20424=>10279,
+20425=>10280,
+20427=>10281,
+20428=>10282,
+20429=>10283,
+20434=>10284,
+20435=>10285,
+20436=>10286,
+20437=>10287,
+20438=>10288,
+20441=>10289,
+20443=>10290,
+20450=>10291,
+20452=>10292,
+20453=>10293,
+20455=>10294,
+20459=>10295,
+20460=>10296,
+20464=>10297,
+20466=>10298,
+20468=>10299,
+20469=>10300,
+20470=>10301,
+20471=>10302,
+20473=>10303,
+20475=>10304,
+20476=>10305,
+20477=>10306,
+20479=>10307,
+20481=>10308,
+20482=>10309,
+20483=>10310,
+20484=>10311,
+20485=>10312,
+20487=>10313,
+20488=>10314,
+20490=>10315,
+20494=>10316,
+20496=>10317,
+20499=>10318,
+20501=>10319,
+20502=>10320,
+20503=>10321,
+20507=>10322,
+20509=>10323,
+20510=>10324,
+20512=>10325,
+20514=>10326,
+20515=>10327,
+20516=>10328,
+20519=>10329,
+20527=>10330,
+20528=>10331,
+20529=>10332,
+20530=>10333,
+20531=>10334,
+20532=>10335,
+20533=>10336,
+20534=>10337,
+20535=>10338,
+20536=>10339,
+20537=>10340,
+20539=>10341,
+20541=>10342,
+20543=>10343,
+20544=>10344,
+20545=>10345,
+20546=>10346,
+20548=>10347,
+20549=>10348,
+20550=>10349,
+20554=>10350,
+20555=>10351,
+20557=>10352,
+20560=>10353,
+20561=>10354,
+20562=>10355,
+20563=>10356,
+20564=>10357,
+20566=>10358,
+20567=>10359,
+20568=>10360,
+20569=>10361,
+20571=>10362,
+20573=>10363,
+20574=>10364,
+20575=>10365,
+20576=>10366,
+20577=>10367,
+20578=>10368,
+20579=>10369,
+20580=>10370,
+20582=>10371,
+20583=>10372,
+20584=>10373,
+20585=>10374,
+20586=>10375,
+20587=>10376,
+20589=>10377,
+20590=>10378,
+20591=>10379,
+20592=>10380,
+20593=>10381,
+20594=>10382,
+20595=>10383,
+20600=>10384,
+20601=>10385,
+20602=>10386,
+20604=>10387,
+20605=>10388,
+20609=>10389,
+20610=>10390,
+20611=>10391,
+20612=>10392,
+20614=>10393,
+20615=>10394,
+20617=>10395,
+20618=>10396,
+20619=>10397,
+20620=>10398,
+20622=>10399,
+20623=>10400,
+20624=>10401,
+20625=>10402,
+20626=>10403,
+20627=>10404,
+20628=>10405,
+20629=>10406,
+20631=>10407,
+20634=>10408,
+20635=>10409,
+20636=>10410,
+20637=>10411,
+20638=>10412,
+20639=>10413,
+20640=>10414,
+20641=>10415,
+20644=>10416,
+20646=>10417,
+20650=>10418,
+20651=>10419,
+20654=>10420,
+20655=>10421,
+20656=>10422,
+20657=>10423,
+20662=>10424,
+20664=>10425,
+20665=>10426,
+20668=>10427,
+20669=>10428,
+20671=>10429,
+20672=>10430,
+20673=>10431,
+20675=>10432,
+20676=>10433,
+20678=>10434,
+20679=>10435,
+20680=>10436,
+20682=>10437,
+20683=>10438,
+20684=>10439,
+20685=>10440,
+20686=>10441,
+20688=>10442,
+20690=>10443,
+20691=>10444,
+20692=>10445,
+20695=>10446,
+20696=>10447,
+20697=>10448,
+20699=>10449,
+20700=>10450,
+20701=>10451,
+20703=>10452,
+20704=>10453,
+20705=>10454,
+20706=>10455,
+20707=>10456,
+20708=>10457,
+20713=>10458,
+20714=>10459,
+20715=>10460,
+20719=>10461,
+20720=>10462,
+20721=>10463,
+20722=>10464,
+20724=>10465,
+20726=>10466,
+20727=>10467,
+20728=>10468,
+20730=>10469,
+20732=>10470,
+20733=>10471,
+20734=>10472,
+20735=>10473,
+20737=>10474,
+20739=>10475,
+20741=>10476,
+20746=>10477,
+20748=>10478,
+20749=>10479,
+20750=>10480,
+20751=>10481,
+20753=>10482,
+20755=>10483,
+20758=>10484,
+20759=>10485,
+20761=>10486,
+20762=>10487,
+20763=>10488,
+20764=>10489,
+20765=>10490,
+20766=>10491,
+20768=>10492,
+20770=>10493,
+20771=>10494,
+20772=>10495,
+20773=>10496,
+20774=>10497,
+20775=>10498,
+20776=>10499,
+20777=>10500,
+20779=>10501,
+20780=>10502,
+20781=>10503,
+20782=>10504,
+20783=>10505,
+20784=>10506,
+20785=>10507,
+20787=>10508,
+20788=>10509,
+20789=>10510,
+20790=>10511,
+20792=>10512,
+20793=>10513,
+20797=>10514,
+20798=>10515,
+20802=>10516,
+20807=>10517,
+20810=>10518,
+20812=>10519,
+20814=>10520,
+20815=>10521,
+20816=>10522,
+20819=>10523,
+20823=>10524,
+20824=>10525,
+20825=>10526,
+20827=>10527,
+20829=>10528,
+20830=>10529,
+20831=>10530,
+20832=>10531,
+20833=>10532,
+20835=>10533,
+20836=>10534,
+20838=>10535,
+20839=>10536,
+20842=>10537,
+20847=>10538,
+20850=>10539,
+20858=>10540,
+20862=>10541,
+20863=>10542,
+20867=>10543,
+20868=>10544,
+20870=>10545,
+20871=>10546,
+20874=>10547,
+20875=>10548,
+20878=>10549,
+20879=>10550,
+20880=>10551,
+20881=>10552,
+20883=>10553,
+20884=>10554,
+20888=>10555,
+20890=>10556,
+20893=>10557,
+20894=>10558,
+20895=>10559,
+20897=>10560,
+20899=>10561,
+20902=>10562,
+20903=>10563,
+20904=>10564,
+20905=>10565,
+20906=>10566,
+20909=>10567,
+20910=>10568,
+20916=>10569,
+20920=>10570,
+20921=>10571,
+20922=>10572,
+20926=>10573,
+20927=>10574,
+20929=>10575,
+20930=>10576,
+20931=>10577,
+20933=>10578,
+20936=>10579,
+20938=>10580,
+20942=>10581,
+20944=>10582,
+20946=>10583,
+20947=>10584,
+20948=>10585,
+20949=>10586,
+20950=>10587,
+20951=>10588,
+20952=>10589,
+20953=>10590,
+20954=>10591,
+20956=>10592,
+20958=>10593,
+20959=>10594,
+20962=>10595,
+20963=>10596,
+20965=>10597,
+20966=>10598,
+20967=>10599,
+20968=>10600,
+20969=>10601,
+20970=>10602,
+20972=>10603,
+20974=>10604,
+20978=>10605,
+20980=>10606,
+20983=>10607,
+20990=>10608,
+20996=>10609,
+20997=>10610,
+21001=>10611,
+21003=>10612,
+21004=>10613,
+21007=>10614,
+21008=>10615,
+21011=>10616,
+21012=>10617,
+21013=>10618,
+21020=>10619,
+21022=>10620,
+21023=>10621,
+21025=>10622,
+21026=>10623,
+21027=>10624,
+21029=>10625,
+21030=>10626,
+21031=>10627,
+21034=>10628,
+21036=>10629,
+21039=>10630,
+21041=>10631,
+21042=>10632,
+21044=>10633,
+21045=>10634,
+21052=>10635,
+21054=>10636,
+21061=>10637,
+21062=>10638,
+21064=>10639,
+21065=>10640,
+21070=>10641,
+21071=>10642,
+21074=>10643,
+21075=>10644,
+21077=>10645,
+21079=>10646,
+21080=>10647,
+21081=>10648,
+21082=>10649,
+21085=>10650,
+21087=>10651,
+21088=>10652,
+21090=>10653,
+21091=>10654,
+21092=>10655,
+21094=>10656,
+21096=>10657,
+21099=>10658,
+21100=>10659,
+21101=>10660,
+21104=>10661,
+21105=>10662,
+21107=>10663,
+21110=>10664,
+21111=>10665,
+21112=>10666,
+21113=>10667,
+21114=>10668,
+21115=>10669,
+21116=>10670,
+21118=>10671,
+21120=>10672,
+21124=>10673,
+21125=>10674,
+21126=>10675,
+21131=>10676,
+21134=>10677,
+21135=>10678,
+21138=>10679,
+21140=>10680,
+21141=>10681,
+21142=>10682,
+21143=>10683,
+21144=>10684,
+21145=>10685,
+21146=>10686,
+21148=>10687,
+21156=>10688,
+21157=>10689,
+21158=>10690,
+21159=>10691,
+21166=>10692,
+21167=>10693,
+21168=>10694,
+21172=>10695,
+21173=>10696,
+21174=>10697,
+21175=>10698,
+21176=>10699,
+21177=>10700,
+21178=>10701,
+21179=>10702,
+21180=>10703,
+21181=>10704,
+21184=>10705,
+21186=>10706,
+21188=>10707,
+21189=>10708,
+21190=>10709,
+21192=>10710,
+21194=>10711,
+21196=>10712,
+21197=>10713,
+21198=>10714,
+21199=>10715,
+21201=>10716,
+21203=>10717,
+21204=>10718,
+21207=>10719,
+21210=>10720,
+21212=>10721,
+21216=>10722,
+21217=>10723,
+21219=>10724,
+21221=>10725,
+21222=>10726,
+21223=>10727,
+21224=>10728,
+21225=>10729,
+21226=>10730,
+21227=>10731,
+21228=>10732,
+21229=>10733,
+21230=>10734,
+21231=>10735,
+21234=>10736,
+21235=>10737,
+21236=>10738,
+21238=>10739,
+21239=>10740,
+21243=>10741,
+21244=>10742,
+21245=>10743,
+21249=>10744,
+21250=>10745,
+21251=>10746,
+21252=>10747,
+21255=>10748,
+21257=>10749,
+21258=>10750,
+21259=>10751,
+21260=>10752,
+21262=>10753,
+21265=>10754,
+21266=>10755,
+21267=>10756,
+21268=>10757,
+21272=>10758,
+21275=>10759,
+21276=>10760,
+21278=>10761,
+21279=>10762,
+21282=>10763,
+21284=>10764,
+21285=>10765,
+21287=>10766,
+21288=>10767,
+21289=>10768,
+21291=>10769,
+21292=>10770,
+21296=>10771,
+21298=>10772,
+21299=>10773,
+21300=>10774,
+21301=>10775,
+21302=>10776,
+21303=>10777,
+12054=>10778,
+21304=>10778,
+21308=>10779,
+21309=>10780,
+21314=>10781,
+21316=>10782,
+21318=>10783,
+21323=>10784,
+21324=>10785,
+21325=>10786,
+21328=>10787,
+21336=>10788,
+21337=>10789,
+21339=>10790,
+21341=>10791,
+21349=>10792,
+21352=>10793,
+21354=>10794,
+21356=>10795,
+21357=>10796,
+21362=>10797,
+21366=>10798,
+21369=>10799,
+21371=>10800,
+21372=>10801,
+21373=>10802,
+21374=>10803,
+21376=>10804,
+21377=>10805,
+21379=>10806,
+21383=>10807,
+21384=>10808,
+21386=>10809,
+21390=>10810,
+21391=>10811,
+21392=>10812,
+21393=>10813,
+21394=>10814,
+21395=>10815,
+21396=>10816,
+21398=>10817,
+21399=>10818,
+21403=>10819,
+21404=>10820,
+21406=>10821,
+21409=>10822,
+21412=>10823,
+21415=>10824,
+21418=>10825,
+21419=>10826,
+21420=>10827,
+21423=>10828,
+21424=>10829,
+21425=>10830,
+21427=>10831,
+21429=>10832,
+21431=>10833,
+21432=>10834,
+21433=>10835,
+21434=>10836,
+21436=>10837,
+21437=>10838,
+21438=>10839,
+21440=>10840,
+21444=>10841,
+21445=>10842,
+21446=>10843,
+21447=>10844,
+21454=>10845,
+21455=>10846,
+21456=>10847,
+21458=>10848,
+21459=>10849,
+21461=>10850,
+21466=>10851,
+21468=>10852,
+21469=>10853,
+21470=>10854,
+21473=>10855,
+21479=>10856,
+21492=>10857,
+21498=>10858,
+21502=>10859,
+21503=>10860,
+21504=>10861,
+21506=>10862,
+21509=>10863,
+21511=>10864,
+21515=>10865,
+21524=>10866,
+21528=>10867,
+21529=>10868,
+21530=>10869,
+21532=>10870,
+21538=>10871,
+21540=>10872,
+21541=>10873,
+21546=>10874,
+21552=>10875,
+21555=>10876,
+21558=>10877,
+21559=>10878,
+21562=>10879,
+21565=>10880,
+21567=>10881,
+21569=>10882,
+21570=>10883,
+21572=>10884,
+21573=>10885,
+21575=>10886,
+21577=>10887,
+21580=>10888,
+21581=>10889,
+21582=>10890,
+21583=>10891,
+21585=>10892,
+21594=>10893,
+21597=>10894,
+21598=>10895,
+21599=>10896,
+21600=>10897,
+21601=>10898,
+21603=>10899,
+21605=>10900,
+21607=>10901,
+21609=>10902,
+21610=>10903,
+21611=>10904,
+21612=>10905,
+21613=>10906,
+21614=>10907,
+21615=>10908,
+21616=>10909,
+21620=>10910,
+21625=>10911,
+21626=>10912,
+21630=>10913,
+21631=>10914,
+21633=>10915,
+21635=>10916,
+21637=>10917,
+21639=>10918,
+21640=>10919,
+21641=>10920,
+21642=>10921,
+21645=>10922,
+21649=>10923,
+21651=>10924,
+21655=>10925,
+21656=>10926,
+21660=>10927,
+21662=>10928,
+21663=>10929,
+21664=>10930,
+21665=>10931,
+21666=>10932,
+21669=>10933,
+21678=>10934,
+21680=>10935,
+21682=>10936,
+21685=>10937,
+21686=>10938,
+21687=>10939,
+21689=>10940,
+21690=>10941,
+21694=>10942,
+21699=>10943,
+21701=>10944,
+21706=>10945,
+21707=>10946,
+21718=>10947,
+21720=>10948,
+21723=>10949,
+21728=>10950,
+21730=>10951,
+21731=>10952,
+21732=>10953,
+21739=>10954,
+21740=>10955,
+21743=>10956,
+21744=>10957,
+21745=>10958,
+21748=>10959,
+21749=>10960,
+21750=>10961,
+21751=>10962,
+21752=>10963,
+21753=>10964,
+21755=>10965,
+21758=>10966,
+21760=>10967,
+21762=>10968,
+21763=>10969,
+21765=>10970,
+21768=>10971,
+21770=>10972,
+21771=>10973,
+21772=>10974,
+21773=>10975,
+21774=>10976,
+21778=>10977,
+21779=>10978,
+21781=>10979,
+21782=>10980,
+21783=>10981,
+21784=>10982,
+21785=>10983,
+21786=>10984,
+21788=>10985,
+21789=>10986,
+21790=>10987,
+21791=>10988,
+21793=>10989,
+21797=>10990,
+21798=>10991,
+21800=>10992,
+21801=>10993,
+21803=>10994,
+21805=>10995,
+21810=>10996,
+21812=>10997,
+21813=>10998,
+21814=>10999,
+21816=>11000,
+21817=>11001,
+21818=>11002,
+21819=>11003,
+21821=>11004,
+21824=>11005,
+21826=>11006,
+21829=>11007,
+21831=>11008,
+21832=>11009,
+21835=>11010,
+21836=>11011,
+21837=>11012,
+21838=>11013,
+21841=>11014,
+21842=>11015,
+21844=>11016,
+21847=>11017,
+21848=>11018,
+21849=>11019,
+21850=>11020,
+21851=>11021,
+21853=>11022,
+21855=>11023,
+21856=>11024,
+21858=>11025,
+21859=>11026,
+21864=>11027,
+21865=>11028,
+21867=>11029,
+21871=>11030,
+21872=>11031,
+21873=>11032,
+21874=>11033,
+21875=>11034,
+21876=>11035,
+21881=>11036,
+21882=>11037,
+21885=>11038,
+21887=>11039,
+21893=>11040,
+21894=>11041,
+21900=>11042,
+21901=>11043,
+21902=>11044,
+21904=>11045,
+21906=>11046,
+21907=>11047,
+21909=>11048,
+21910=>11049,
+21911=>11050,
+21914=>11051,
+21915=>11052,
+21918=>11053,
+21920=>11054,
+21921=>11055,
+21922=>11056,
+21923=>11057,
+21924=>11058,
+21925=>11059,
+21926=>11060,
+21928=>11061,
+21929=>11062,
+21931=>11063,
+21933=>11064,
+21935=>11065,
+21936=>11066,
+21940=>11067,
+21942=>11068,
+21944=>11069,
+21946=>11070,
+21948=>11071,
+21951=>11072,
+21952=>11073,
+21953=>11074,
+21954=>11075,
+21955=>11076,
+21960=>11077,
+21962=>11078,
+21963=>11079,
+21967=>11080,
+21968=>11081,
+21973=>11082,
+21975=>11083,
+21976=>11084,
+21977=>11085,
+21979=>11086,
+21982=>11087,
+21984=>11088,
+21986=>11089,
+21991=>11090,
+21997=>11091,
+21998=>11092,
+22000=>11093,
+22001=>11094,
+22004=>11095,
+22008=>11096,
+22009=>11097,
+22010=>11098,
+22011=>11099,
+22012=>11100,
+22015=>11101,
+22018=>11102,
+22019=>11103,
+22020=>11104,
+22021=>11105,
+22023=>11106,
+22026=>11107,
+22027=>11108,
+22032=>11109,
+22033=>11110,
+22034=>11111,
+22035=>11112,
+22037=>11113,
+22041=>11114,
+22042=>11115,
+22045=>11116,
+22048=>11117,
+22049=>11118,
+22050=>11119,
+22053=>11120,
+22054=>11121,
+22056=>11122,
+22058=>11123,
+22059=>11124,
+22067=>11125,
+22071=>11126,
+22074=>11127,
+22076=>11128,
+22077=>11129,
+22078=>11130,
+22080=>11131,
+22082=>11132,
+22083=>11133,
+22084=>11134,
+22085=>11135,
+22086=>11136,
+22087=>11137,
+22088=>11138,
+22089=>11139,
+22090=>11140,
+22091=>11141,
+22095=>11142,
+22096=>11143,
+22097=>11144,
+22098=>11145,
+22099=>11146,
+22101=>11147,
+22102=>11148,
+22106=>11149,
+22107=>11150,
+22110=>11151,
+22111=>11152,
+22113=>11153,
+22115=>11154,
+22119=>11155,
+22125=>11156,
+22126=>11157,
+22128=>11158,
+22131=>11159,
+22133=>11160,
+22135=>11161,
+22138=>11162,
+22141=>11163,
+22142=>11164,
+22143=>11165,
+22145=>11166,
+22146=>11167,
+22147=>11168,
+22148=>11169,
+22152=>11170,
+22153=>11171,
+22154=>11172,
+22155=>11173,
+22157=>11174,
+22160=>11175,
+22161=>11176,
+22162=>11177,
+22164=>11178,
+22166=>11179,
+22167=>11180,
+22168=>11181,
+22170=>11182,
+22171=>11183,
+22172=>11184,
+22173=>11185,
+22174=>11186,
+22175=>11187,
+22176=>11188,
+22177=>11189,
+22178=>11190,
+22180=>11191,
+22181=>11192,
+22183=>11193,
+22185=>11194,
+22186=>11195,
+22187=>11196,
+22188=>11197,
+22189=>11198,
+22192=>11199,
+22193=>11200,
+22194=>11201,
+22197=>11202,
+22200=>11203,
+22201=>11204,
+22202=>11205,
+22203=>11206,
+22205=>11207,
+22206=>11208,
+22207=>11209,
+22211=>11210,
+22212=>11211,
+22214=>11212,
+22215=>11213,
+22219=>11214,
+22221=>11215,
+22222=>11216,
+22223=>11217,
+22224=>11218,
+22226=>11219,
+22227=>11220,
+22229=>11221,
+22230=>11222,
+22232=>11223,
+22233=>11224,
+22236=>11225,
+22243=>11226,
+22245=>11227,
+22246=>11228,
+22247=>11229,
+22248=>11230,
+22249=>11231,
+22250=>11232,
+22252=>11233,
+22254=>11234,
+22255=>11235,
+22258=>11236,
+22259=>11237,
+22262=>11238,
+22263=>11239,
+22264=>11240,
+22267=>11241,
+22268=>11242,
+22272=>11243,
+22273=>11244,
+22274=>11245,
+22277=>11246,
+22284=>11247,
+22286=>11248,
+22287=>11249,
+22288=>11250,
+22289=>11251,
+22292=>11252,
+22293=>11253,
+22295=>11254,
+22297=>11255,
+22298=>11256,
+22299=>11257,
+22301=>11258,
+22302=>11259,
+22304=>11260,
+22305=>11261,
+22306=>11262,
+22308=>11263,
+22309=>11264,
+22310=>11265,
+22311=>11266,
+22315=>11267,
+22321=>11268,
+22322=>11269,
+22324=>11270,
+22325=>11271,
+22326=>11272,
+22327=>11273,
+22328=>11274,
+22332=>11275,
+22333=>11276,
+22335=>11277,
+22337=>11278,
+22339=>11279,
+22340=>11280,
+22341=>11281,
+22342=>11282,
+22344=>11283,
+22345=>11284,
+22347=>11285,
+22354=>11286,
+22355=>11287,
+22356=>11288,
+22357=>11289,
+22358=>11290,
+22360=>11291,
+22361=>11292,
+22370=>11293,
+22371=>11294,
+22373=>11295,
+22375=>11296,
+22380=>11297,
+22382=>11298,
+22384=>11299,
+22385=>11300,
+22386=>11301,
+22388=>11302,
+22389=>11303,
+22392=>11304,
+22393=>11305,
+22394=>11306,
+22397=>11307,
+22398=>11308,
+22399=>11309,
+22400=>11310,
+22401=>11311,
+22407=>11312,
+22408=>11313,
+22409=>11314,
+22410=>11315,
+22413=>11316,
+22414=>11317,
+22415=>11318,
+22416=>11319,
+22417=>11320,
+22420=>11321,
+22421=>11322,
+22422=>11323,
+22423=>11324,
+22424=>11325,
+22425=>11326,
+22426=>11327,
+22428=>11328,
+22429=>11329,
+22430=>11330,
+22431=>11331,
+22437=>11332,
+22440=>11333,
+22442=>11334,
+22444=>11335,
+22447=>11336,
+22448=>11337,
+22449=>11338,
+22451=>11339,
+22453=>11340,
+22454=>11341,
+22455=>11342,
+22457=>11343,
+22458=>11344,
+22459=>11345,
+22460=>11346,
+22461=>11347,
+22462=>11348,
+22463=>11349,
+22464=>11350,
+22465=>11351,
+22468=>11352,
+22469=>11353,
+22470=>11354,
+22471=>11355,
+22472=>11356,
+22473=>11357,
+22474=>11358,
+22476=>11359,
+22477=>11360,
+22480=>11361,
+22481=>11362,
+22483=>11363,
+22486=>11364,
+22487=>11365,
+22491=>11366,
+22492=>11367,
+22494=>11368,
+22498=>11369,
+22499=>11370,
+22501=>11371,
+22502=>11372,
+22503=>11373,
+22504=>11374,
+22505=>11375,
+22506=>11376,
+22507=>11377,
+22508=>11378,
+22510=>11379,
+22512=>11380,
+22513=>11381,
+22514=>11382,
+22515=>11383,
+22517=>11384,
+22518=>11385,
+22523=>11386,
+22524=>11387,
+22526=>11388,
+22527=>11389,
+22529=>11390,
+22531=>11391,
+22532=>11392,
+22536=>11393,
+22537=>11394,
+22540=>11395,
+22542=>11396,
+22543=>11397,
+22544=>11398,
+22546=>11399,
+22547=>11400,
+22548=>11401,
+22551=>11402,
+22552=>11403,
+22554=>11404,
+22555=>11405,
+22556=>11406,
+22559=>11407,
+22562=>11408,
+22563=>11409,
+22565=>11410,
+22566=>11411,
+22567=>11412,
+22568=>11413,
+22569=>11414,
+22571=>11415,
+22572=>11416,
+22573=>11417,
+22574=>11418,
+22578=>11419,
+22579=>11420,
+22582=>11421,
+22583=>11422,
+22584=>11423,
+22585=>11424,
+22586=>11425,
+22587=>11426,
+22588=>11427,
+22589=>11428,
+22590=>11429,
+22591=>11430,
+22592=>11431,
+22593=>11432,
+22594=>11433,
+22595=>11434,
+22597=>11435,
+22598=>11436,
+22599=>11437,
+22600=>11438,
+22601=>11439,
+22606=>11440,
+22608=>11441,
+22611=>11442,
+22613=>11443,
+22614=>11444,
+22617=>11445,
+22618=>11446,
+22619=>11447,
+22620=>11448,
+22621=>11449,
+22623=>11450,
+22624=>11451,
+22625=>11452,
+22627=>11453,
+22630=>11454,
+22631=>11455,
+22632=>11456,
+22633=>11457,
+22634=>11458,
+22637=>11459,
+22638=>11460,
+22639=>11461,
+22640=>11462,
+22641=>11463,
+22642=>11464,
+22643=>11465,
+22644=>11466,
+22646=>11467,
+22647=>11468,
+22648=>11469,
+22650=>11470,
+22651=>11471,
+22652=>11472,
+22653=>11473,
+22655=>11474,
+22658=>11475,
+22660=>11476,
+22662=>11477,
+22663=>11478,
+22664=>11479,
+22667=>11480,
+22668=>11481,
+22669=>11482,
+22670=>11483,
+22671=>11484,
+22672=>11485,
+22673=>11486,
+22676=>11487,
+22677=>11488,
+22678=>11489,
+22679=>11490,
+22680=>11491,
+22683=>11492,
+22685=>11493,
+22688=>11494,
+22689=>11495,
+22690=>11496,
+22691=>11497,
+22692=>11498,
+22693=>11499,
+22694=>11500,
+22695=>11501,
+22698=>11502,
+22699=>11503,
+22700=>11504,
+22701=>11505,
+22703=>11506,
+22704=>11507,
+22705=>11508,
+22706=>11509,
+22708=>11510,
+22709=>11511,
+22710=>11512,
+22711=>11513,
+22712=>11514,
+22713=>11515,
+22714=>11516,
+22717=>11517,
+22719=>11518,
+22720=>11519,
+22722=>11520,
+22723=>11521,
+22724=>11522,
+22726=>11523,
+22728=>11524,
+22729=>11525,
+22730=>11526,
+22731=>11527,
+22732=>11528,
+22733=>11529,
+22734=>11530,
+22735=>11531,
+22736=>11532,
+22738=>11533,
+22740=>11534,
+22742=>11535,
+22743=>11536,
+22747=>11537,
+22748=>11538,
+22749=>11539,
+22753=>11540,
+22755=>11541,
+22757=>11542,
+22758=>11543,
+22759=>11544,
+22760=>11545,
+22762=>11546,
+22765=>11547,
+22769=>11548,
+22770=>11549,
+22772=>11550,
+22773=>11551,
+22775=>11552,
+22776=>11553,
+22779=>11554,
+22780=>11555,
+22782=>11556,
+22783=>11557,
+22784=>11558,
+22785=>11559,
+22787=>11560,
+22789=>11561,
+22790=>11562,
+22792=>11563,
+22793=>11564,
+12066=>11565,
+22794=>11565,
+22795=>11566,
+22796=>11567,
+22798=>11568,
+22800=>11569,
+22801=>11570,
+22802=>11571,
+22803=>11572,
+22807=>11573,
+22808=>11574,
+22811=>11575,
+22813=>11576,
+22814=>11577,
+22816=>11578,
+22817=>11579,
+22819=>11580,
+22822=>11581,
+22824=>11582,
+22828=>11583,
+22832=>11584,
+22834=>11585,
+22835=>11586,
+22837=>11587,
+22838=>11588,
+22843=>11589,
+22845=>11590,
+22847=>11591,
+22848=>11592,
+22851=>11593,
+22853=>11594,
+22854=>11595,
+22858=>11596,
+22860=>11597,
+22861=>11598,
+22864=>11599,
+22866=>11600,
+22867=>11601,
+22873=>11602,
+22875=>11603,
+22876=>11604,
+22877=>11605,
+22878=>11606,
+22879=>11607,
+22881=>11608,
+22883=>11609,
+22884=>11610,
+22886=>11611,
+22887=>11612,
+22888=>11613,
+22891=>11614,
+22893=>11615,
+22895=>11616,
+22896=>11617,
+22897=>11618,
+22898=>11619,
+22901=>11620,
+22903=>11621,
+22906=>11622,
+22907=>11623,
+22908=>11624,
+22910=>11625,
+22911=>11626,
+22912=>11627,
+22917=>11628,
+22921=>11629,
+22923=>11630,
+22924=>11631,
+22926=>11632,
+22927=>11633,
+22928=>11634,
+22929=>11635,
+22932=>11636,
+22933=>11637,
+22936=>11638,
+22938=>11639,
+22939=>11640,
+22940=>11641,
+22943=>11642,
+22944=>11643,
+22945=>11644,
+22946=>11645,
+22950=>11646,
+22951=>11647,
+22956=>11648,
+22957=>11649,
+22960=>11650,
+22961=>11651,
+22963=>11652,
+22964=>11653,
+22965=>11654,
+22966=>11655,
+22967=>11656,
+22968=>11657,
+22970=>11658,
+22972=>11659,
+22973=>11660,
+22975=>11661,
+22976=>11662,
+22977=>11663,
+22978=>11664,
+22979=>11665,
+22980=>11666,
+22981=>11667,
+22983=>11668,
+22984=>11669,
+22985=>11670,
+22988=>11671,
+22989=>11672,
+22990=>11673,
+22991=>11674,
+22997=>11675,
+22998=>11676,
+23001=>11677,
+23003=>11678,
+23006=>11679,
+23007=>11680,
+23008=>11681,
+23009=>11682,
+23010=>11683,
+23012=>11684,
+23014=>11685,
+23015=>11686,
+23017=>11687,
+23018=>11688,
+23019=>11689,
+23021=>11690,
+23022=>11691,
+23023=>11692,
+23024=>11693,
+23025=>11694,
+23026=>11695,
+23027=>11696,
+23028=>11697,
+23029=>11698,
+23030=>11699,
+23031=>11700,
+23032=>11701,
+23034=>11702,
+23036=>11703,
+23037=>11704,
+23038=>11705,
+23040=>11706,
+23042=>11707,
+23050=>11708,
+23051=>11709,
+23053=>11710,
+23054=>11711,
+23055=>11712,
+23056=>11713,
+23058=>11714,
+23060=>11715,
+23061=>11716,
+23062=>11717,
+23063=>11718,
+23065=>11719,
+23066=>11720,
+23067=>11721,
+23069=>11722,
+23070=>11723,
+23073=>11724,
+23074=>11725,
+23076=>11726,
+23078=>11727,
+23079=>11728,
+23080=>11729,
+23082=>11730,
+23083=>11731,
+23084=>11732,
+23085=>11733,
+23086=>11734,
+23087=>11735,
+23088=>11736,
+23091=>11737,
+23093=>11738,
+23095=>11739,
+23096=>11740,
+23097=>11741,
+23098=>11742,
+23099=>11743,
+23101=>11744,
+23102=>11745,
+23103=>11746,
+23106=>11747,
+23107=>11748,
+23108=>11749,
+23109=>11750,
+23111=>11751,
+23112=>11752,
+23115=>11753,
+23116=>11754,
+23117=>11755,
+23118=>11756,
+23119=>11757,
+23120=>11758,
+23121=>11759,
+23122=>11760,
+23123=>11761,
+23124=>11762,
+23126=>11763,
+23127=>11764,
+23128=>11765,
+23129=>11766,
+23131=>11767,
+23132=>11768,
+23133=>11769,
+23134=>11770,
+23135=>11771,
+23136=>11772,
+23137=>11773,
+23139=>11774,
+23140=>11775,
+23141=>11776,
+23144=>11777,
+23145=>11778,
+23147=>11779,
+23148=>11780,
+23150=>11781,
+23151=>11782,
+23152=>11783,
+23153=>11784,
+23154=>11785,
+23155=>11786,
+23160=>11787,
+23161=>11788,
+23163=>11789,
+23164=>11790,
+23165=>11791,
+23166=>11792,
+23168=>11793,
+23169=>11794,
+23170=>11795,
+23171=>11796,
+23172=>11797,
+23173=>11798,
+23174=>11799,
+23175=>11800,
+23176=>11801,
+23177=>11802,
+23178=>11803,
+23179=>11804,
+23180=>11805,
+23181=>11806,
+23182=>11807,
+23183=>11808,
+23184=>11809,
+23185=>11810,
+23187=>11811,
+23188=>11812,
+23189=>11813,
+23190=>11814,
+23191=>11815,
+23192=>11816,
+23193=>11817,
+23196=>11818,
+23197=>11819,
+23198=>11820,
+23199=>11821,
+23200=>11822,
+23201=>11823,
+23202=>11824,
+23203=>11825,
+23204=>11826,
+23205=>11827,
+23206=>11828,
+23208=>11829,
+23209=>11830,
+23211=>11831,
+23212=>11832,
+23213=>11833,
+23214=>11834,
+23215=>11835,
+23216=>11836,
+23217=>11837,
+23220=>11838,
+23222=>11839,
+23223=>11840,
+23225=>11841,
+23226=>11842,
+23227=>11843,
+23228=>11844,
+23231=>11845,
+23232=>11846,
+23235=>11847,
+23236=>11848,
+23237=>11849,
+23238=>11850,
+23239=>11851,
+23240=>11852,
+23242=>11853,
+23243=>11854,
+23245=>11855,
+23246=>11856,
+23247=>11857,
+23248=>11858,
+23249=>11859,
+23251=>11860,
+23253=>11861,
+23257=>11862,
+23258=>11863,
+23259=>11864,
+23261=>11865,
+23262=>11866,
+23263=>11867,
+23266=>11868,
+23268=>11869,
+23269=>11870,
+23271=>11871,
+23272=>11872,
+23274=>11873,
+23276=>11874,
+23277=>11875,
+23278=>11876,
+23279=>11877,
+23280=>11878,
+23282=>11879,
+23283=>11880,
+23284=>11881,
+23286=>11882,
+23287=>11883,
+23288=>11884,
+23289=>11885,
+23290=>11886,
+23292=>11887,
+23293=>11888,
+23294=>11889,
+23295=>11890,
+23297=>11891,
+23298=>11892,
+23299=>11893,
+23300=>11894,
+23301=>11895,
+23302=>11896,
+23303=>11897,
+23306=>11898,
+23309=>11899,
+23310=>11900,
+23311=>11901,
+23312=>11902,
+23313=>11903,
+23314=>11904,
+23315=>11905,
+23316=>11906,
+23317=>11907,
+23320=>11908,
+23322=>11909,
+23323=>11910,
+23324=>11911,
+23325=>11912,
+23326=>11913,
+23327=>11914,
+23328=>11915,
+23330=>11916,
+23331=>11917,
+23332=>11918,
+23333=>11919,
+23334=>11920,
+23335=>11921,
+23336=>11922,
+23337=>11923,
+23339=>11924,
+23340=>11925,
+23341=>11926,
+23342=>11927,
+23343=>11928,
+23345=>11929,
+23347=>11930,
+23349=>11931,
+23350=>11932,
+23353=>11933,
+23354=>11934,
+23355=>11935,
+23356=>11936,
+23357=>11937,
+23358=>11938,
+23359=>11939,
+23361=>11940,
+23362=>11941,
+23363=>11942,
+23364=>11943,
+23365=>11944,
+23366=>11945,
+23367=>11946,
+23368=>11947,
+23369=>11948,
+23370=>11949,
+23371=>11950,
+23373=>11951,
+23374=>11952,
+23375=>11953,
+23378=>11954,
+23382=>11955,
+23390=>11956,
+23392=>11957,
+23393=>11958,
+23399=>11959,
+23400=>11960,
+23405=>11961,
+23406=>11962,
+23407=>11963,
+23410=>11964,
+23412=>11965,
+23414=>11966,
+23415=>11967,
+23417=>11968,
+23419=>11969,
+23420=>11970,
+23422=>11971,
+23426=>11972,
+23430=>11973,
+23434=>11974,
+23437=>11975,
+23438=>11976,
+23440=>11977,
+23441=>11978,
+23442=>11979,
+23444=>11980,
+23446=>11981,
+23455=>11982,
+23463=>11983,
+23464=>11984,
+23465=>11985,
+23468=>11986,
+23469=>11987,
+23470=>11988,
+23471=>11989,
+23473=>11990,
+23474=>11991,
+23479=>11992,
+23482=>11993,
+23483=>11994,
+23484=>11995,
+23488=>11996,
+23489=>11997,
+23491=>11998,
+23496=>11999,
+23497=>12000,
+23498=>12001,
+23499=>12002,
+23501=>12003,
+23502=>12004,
+23503=>12005,
+23505=>12006,
+23508=>12007,
+23509=>12008,
+23510=>12009,
+23511=>12010,
+23512=>12011,
+23513=>12012,
+23514=>12013,
+23515=>12014,
+23516=>12015,
+23520=>12016,
+23523=>12017,
+23530=>12018,
+23533=>12019,
+23535=>12020,
+23537=>12021,
+23538=>12022,
+23539=>12023,
+23540=>12024,
+23543=>12025,
+23549=>12026,
+23550=>12027,
+23552=>12028,
+23554=>12029,
+23555=>12030,
+23557=>12031,
+23564=>12032,
+23568=>12033,
+23570=>12034,
+23571=>12035,
+23575=>12036,
+23577=>12037,
+23579=>12038,
+23582=>12039,
+23583=>12040,
+23584=>12041,
+23585=>12042,
+23587=>12043,
+23590=>12044,
+23592=>12045,
+23593=>12046,
+23594=>12047,
+23595=>12048,
+23597=>12049,
+23598=>12050,
+23599=>12051,
+23600=>12052,
+23602=>12053,
+23603=>12054,
+23605=>12055,
+23606=>12056,
+23619=>12057,
+23620=>12058,
+23622=>12059,
+23623=>12060,
+23628=>12061,
+23629=>12062,
+23634=>12063,
+23635=>12064,
+23636=>12065,
+23638=>12066,
+23639=>12067,
+23640=>12068,
+23642=>12069,
+23643=>12070,
+23644=>12071,
+23645=>12072,
+23647=>12073,
+23655=>12074,
+23657=>12075,
+23658=>12076,
+23659=>12077,
+23661=>12078,
+23664=>12079,
+23666=>12080,
+23667=>12081,
+23668=>12082,
+23669=>12083,
+23670=>12084,
+23671=>12085,
+23672=>12086,
+23675=>12087,
+23676=>12088,
+23677=>12089,
+23678=>12090,
+23680=>12091,
+23683=>12092,
+23684=>12093,
+23685=>12094,
+23686=>12095,
+23687=>12096,
+23689=>12097,
+23690=>12098,
+23691=>12099,
+23694=>12100,
+23695=>12101,
+23698=>12102,
+23699=>12103,
+23701=>12104,
+23709=>12105,
+23710=>12106,
+23711=>12107,
+23712=>12108,
+23716=>12109,
+23717=>12110,
+23718=>12111,
+23719=>12112,
+23720=>12113,
+23722=>12114,
+23726=>12115,
+23727=>12116,
+23728=>12117,
+23730=>12118,
+23732=>12119,
+23734=>12120,
+23737=>12121,
+23738=>12122,
+23739=>12123,
+23740=>12124,
+23742=>12125,
+23744=>12126,
+23746=>12127,
+23747=>12128,
+23749=>12129,
+23750=>12130,
+23751=>12131,
+23752=>12132,
+23753=>12133,
+23754=>12134,
+23756=>12135,
+23757=>12136,
+23758=>12137,
+23759=>12138,
+23760=>12139,
+23761=>12140,
+23763=>12141,
+23764=>12142,
+23765=>12143,
+23766=>12144,
+23767=>12145,
+23768=>12146,
+23770=>12147,
+23771=>12148,
+23772=>12149,
+23773=>12150,
+23774=>12151,
+23775=>12152,
+23776=>12153,
+23778=>12154,
+23779=>12155,
+23783=>12156,
+23785=>12157,
+23787=>12158,
+23788=>12159,
+23790=>12160,
+23791=>12161,
+23793=>12162,
+23794=>12163,
+23795=>12164,
+23797=>12165,
+23799=>12166,
+23800=>12167,
+23801=>12168,
+23802=>12169,
+23804=>12170,
+23806=>12171,
+23807=>12172,
+23808=>12173,
+23809=>12174,
+23812=>12175,
+23813=>12176,
+23816=>12177,
+23817=>12178,
+23818=>12179,
+23819=>12180,
+23820=>12181,
+23823=>12182,
+23824=>12183,
+23825=>12184,
+23826=>12185,
+23827=>12186,
+23829=>12187,
+23832=>12188,
+23833=>12189,
+23834=>12190,
+23836=>12191,
+23837=>12192,
+23839=>12193,
+23840=>12194,
+23841=>12195,
+23842=>12196,
+23843=>12197,
+23845=>12198,
+23848=>12199,
+23850=>12200,
+23851=>12201,
+23855=>12202,
+23856=>12203,
+23857=>12204,
+23858=>12205,
+23859=>12206,
+23861=>12207,
+23862=>12208,
+23863=>12209,
+23864=>12210,
+23865=>12211,
+23866=>12212,
+23867=>12213,
+23868=>12214,
+23871=>12215,
+23872=>12216,
+23873=>12217,
+23874=>12218,
+23875=>12219,
+23876=>12220,
+23877=>12221,
+23878=>12222,
+23880=>12223,
+23881=>12224,
+23885=>12225,
+23886=>12226,
+23887=>12227,
+23889=>12228,
+23890=>12229,
+23891=>12230,
+23892=>12231,
+23893=>12232,
+23894=>12233,
+23895=>12234,
+23897=>12235,
+23898=>12236,
+23900=>12237,
+23902=>12238,
+23903=>12239,
+23904=>12240,
+23905=>12241,
+23906=>12242,
+23907=>12243,
+23908=>12244,
+23909=>12245,
+23910=>12246,
+23911=>12247,
+23912=>12248,
+23914=>12249,
+23917=>12250,
+23918=>12251,
+23920=>12252,
+23921=>12253,
+23922=>12254,
+23923=>12255,
+23925=>12256,
+23926=>12257,
+23927=>12258,
+23928=>12259,
+23929=>12260,
+23930=>12261,
+23931=>12262,
+23932=>12263,
+23933=>12264,
+23934=>12265,
+23935=>12266,
+23936=>12267,
+23939=>12268,
+23941=>12269,
+23942=>12270,
+23944=>12271,
+23945=>12272,
+23946=>12273,
+23947=>12274,
+23948=>12275,
+23949=>12276,
+23950=>12277,
+23951=>12278,
+23952=>12279,
+23953=>12280,
+23954=>12281,
+23955=>12282,
+23956=>12283,
+23957=>12284,
+23958=>12285,
+23960=>12286,
+23962=>12287,
+23963=>12288,
+23964=>12289,
+23966=>12290,
+23967=>12291,
+23969=>12292,
+23970=>12293,
+23971=>12294,
+23972=>12295,
+23973=>12296,
+23974=>12297,
+23976=>12298,
+23977=>12299,
+23978=>12300,
+23979=>12301,
+23980=>12302,
+23981=>12303,
+23982=>12304,
+23983=>12305,
+23984=>12306,
+23985=>12307,
+23986=>12308,
+23987=>12309,
+23988=>12310,
+23989=>12311,
+23990=>12312,
+23993=>12313,
+23995=>12314,
+23997=>12315,
+23998=>12316,
+23999=>12317,
+24000=>12318,
+24001=>12319,
+24002=>12320,
+24003=>12321,
+24004=>12322,
+24006=>12323,
+24007=>12324,
+24008=>12325,
+24009=>12326,
+24010=>12327,
+24012=>12328,
+24014=>12329,
+24015=>12330,
+24016=>12331,
+24017=>12332,
+24019=>12333,
+24021=>12334,
+24022=>12335,
+24023=>12336,
+24024=>12337,
+24025=>12338,
+24026=>12339,
+24028=>12340,
+24031=>12341,
+24032=>12342,
+24035=>12343,
+24036=>12344,
+24042=>12345,
+24044=>12346,
+24045=>12347,
+24053=>12348,
+24054=>12349,
+24056=>12350,
+24057=>12351,
+24058=>12352,
+24059=>12353,
+24060=>12354,
+24063=>12355,
+24064=>12356,
+24068=>12357,
+24071=>12358,
+24073=>12359,
+24074=>12360,
+24075=>12361,
+24077=>12362,
+24078=>12363,
+24082=>12364,
+24083=>12365,
+24087=>12366,
+24094=>12367,
+24095=>12368,
+24096=>12369,
+24097=>12370,
+24098=>12371,
+24099=>12372,
+24100=>12373,
+24104=>12374,
+24105=>12375,
+24106=>12376,
+24108=>12377,
+24111=>12378,
+24112=>12379,
+24114=>12380,
+24116=>12381,
+24117=>12382,
+24121=>12383,
+24122=>12384,
+24126=>12385,
+24127=>12386,
+24129=>12387,
+24134=>12388,
+24135=>12389,
+24136=>12390,
+24137=>12391,
+24138=>12392,
+24139=>12393,
+24141=>12394,
+24142=>12395,
+24143=>12396,
+24144=>12397,
+24145=>12398,
+24146=>12399,
+24147=>12400,
+24150=>12401,
+24153=>12402,
+24154=>12403,
+24156=>12404,
+24157=>12405,
+24160=>12406,
+24164=>12407,
+24165=>12408,
+24166=>12409,
+24167=>12410,
+24168=>12411,
+24169=>12412,
+24170=>12413,
+24173=>12414,
+24174=>12415,
+24175=>12416,
+24176=>12417,
+24177=>12418,
+24181=>12419,
+24183=>12420,
+24193=>12421,
+24194=>12422,
+24195=>12423,
+24197=>12424,
+24200=>12425,
+24201=>12426,
+24204=>12427,
+24205=>12428,
+24206=>12429,
+24210=>12430,
+24216=>12431,
+24219=>12432,
+24221=>12433,
+24225=>12434,
+24226=>12435,
+24227=>12436,
+24228=>12437,
+24232=>12438,
+24233=>12439,
+24234=>12440,
+24236=>12441,
+24238=>12442,
+24239=>12443,
+24240=>12444,
+24241=>12445,
+24242=>12446,
+24244=>12447,
+24250=>12448,
+24251=>12449,
+24252=>12450,
+24253=>12451,
+24255=>12452,
+24256=>12453,
+24257=>12454,
+24258=>12455,
+24259=>12456,
+24260=>12457,
+24261=>12458,
+24262=>12459,
+24263=>12460,
+24264=>12461,
+24267=>12462,
+24268=>12463,
+24269=>12464,
+24270=>12465,
+24271=>12466,
+24272=>12467,
+24276=>12468,
+24277=>12469,
+24279=>12470,
+24280=>12471,
+24281=>12472,
+24282=>12473,
+24284=>12474,
+24285=>12475,
+24286=>12476,
+24292=>12477,
+24293=>12478,
+24294=>12479,
+24295=>12480,
+24297=>12481,
+24299=>12482,
+24301=>12483,
+24302=>12484,
+24303=>12485,
+24304=>12486,
+24305=>12487,
+24306=>12488,
+24309=>12489,
+24312=>12490,
+24313=>12491,
+24315=>12492,
+24316=>12493,
+24317=>12494,
+24325=>12495,
+24326=>12496,
+24327=>12497,
+24329=>12498,
+24332=>12499,
+24333=>12500,
+24334=>12501,
+24336=>12502,
+24338=>12503,
+24340=>12504,
+24342=>12505,
+24345=>12506,
+24346=>12507,
+24348=>12508,
+24349=>12509,
+24350=>12510,
+24353=>12511,
+24354=>12512,
+24355=>12513,
+24356=>12514,
+24360=>12515,
+24363=>12516,
+24364=>12517,
+24366=>12518,
+24368=>12519,
+24370=>12520,
+24372=>12521,
+24374=>12522,
+24375=>12523,
+24376=>12524,
+24379=>12525,
+24381=>12526,
+24382=>12527,
+24383=>12528,
+24385=>12529,
+24386=>12530,
+24387=>12531,
+24388=>12532,
+24389=>12533,
+24391=>12534,
+24393=>12535,
+24394=>12536,
+24395=>12537,
+24397=>12538,
+24399=>12539,
+24401=>12540,
+24404=>12541,
+24410=>12542,
+24411=>12543,
+24412=>12544,
+24414=>12545,
+24415=>12546,
+24416=>12547,
+24419=>12548,
+24421=>12549,
+24423=>12550,
+24424=>12551,
+24427=>12552,
+24430=>12553,
+24431=>12554,
+24434=>12555,
+24436=>12556,
+24437=>12557,
+24438=>12558,
+24440=>12559,
+24442=>12560,
+24445=>12561,
+24446=>12562,
+24447=>12563,
+24451=>12564,
+24454=>12565,
+24461=>12566,
+24462=>12567,
+24463=>12568,
+24467=>12569,
+24468=>12570,
+24470=>12571,
+24474=>12572,
+24475=>12573,
+24477=>12574,
+24479=>12575,
+24482=>12576,
+24483=>12577,
+24484=>12578,
+24485=>12579,
+24486=>12580,
+24487=>12581,
+24491=>12582,
+24492=>12583,
+24495=>12584,
+24496=>12585,
+24497=>12586,
+24498=>12587,
+24499=>12588,
+24500=>12589,
+24502=>12590,
+24504=>12591,
+24506=>12592,
+24507=>12593,
+24510=>12594,
+24511=>12595,
+24512=>12596,
+24513=>12597,
+24514=>12598,
+24519=>12599,
+24520=>12600,
+24522=>12601,
+24523=>12602,
+24526=>12603,
+24531=>12604,
+24532=>12605,
+24533=>12606,
+24538=>12607,
+24539=>12608,
+24540=>12609,
+24542=>12610,
+24543=>12611,
+24546=>12612,
+24547=>12613,
+24549=>12614,
+24550=>12615,
+24552=>12616,
+24553=>12617,
+24556=>12618,
+24559=>12619,
+24560=>12620,
+24562=>12621,
+24563=>12622,
+24564=>12623,
+24566=>12624,
+24567=>12625,
+24569=>12626,
+24570=>12627,
+24572=>12628,
+24583=>12629,
+24584=>12630,
+24585=>12631,
+24587=>12632,
+24588=>12633,
+24592=>12634,
+24593=>12635,
+24595=>12636,
+24599=>12637,
+24600=>12638,
+24602=>12639,
+24606=>12640,
+24607=>12641,
+24610=>12642,
+24611=>12643,
+24612=>12644,
+24620=>12645,
+24621=>12646,
+24622=>12647,
+24624=>12648,
+24625=>12649,
+24626=>12650,
+24627=>12651,
+24628=>12652,
+24630=>12653,
+24631=>12654,
+24632=>12655,
+24633=>12656,
+24634=>12657,
+24637=>12658,
+24638=>12659,
+24640=>12660,
+24644=>12661,
+24645=>12662,
+24646=>12663,
+24647=>12664,
+24648=>12665,
+24649=>12666,
+24650=>12667,
+24652=>12668,
+24654=>12669,
+24655=>12670,
+24657=>12671,
+24659=>12672,
+24660=>12673,
+24662=>12674,
+24663=>12675,
+24664=>12676,
+24667=>12677,
+24668=>12678,
+24670=>12679,
+24671=>12680,
+24672=>12681,
+24673=>12682,
+24677=>12683,
+24678=>12684,
+24686=>12685,
+24689=>12686,
+24690=>12687,
+24692=>12688,
+24693=>12689,
+24695=>12690,
+24702=>12691,
+24704=>12692,
+24705=>12693,
+24706=>12694,
+24709=>12695,
+24710=>12696,
+24711=>12697,
+24712=>12698,
+24714=>12699,
+24715=>12700,
+24718=>12701,
+24719=>12702,
+24720=>12703,
+24721=>12704,
+24723=>12705,
+24725=>12706,
+24727=>12707,
+24728=>12708,
+24729=>12709,
+24732=>12710,
+24734=>12711,
+24737=>12712,
+24738=>12713,
+24740=>12714,
+24741=>12715,
+24743=>12716,
+24745=>12717,
+24746=>12718,
+24750=>12719,
+24752=>12720,
+24755=>12721,
+24759=>12722,
+24761=>12723,
+24762=>12724,
+24765=>12725,
+24766=>12726,
+24767=>12727,
+24768=>12728,
+24769=>12729,
+24770=>12730,
+24771=>12731,
+24772=>12732,
+24775=>12733,
+24776=>12734,
+24777=>12735,
+24780=>12736,
+24781=>12737,
+24782=>12738,
+24783=>12739,
+24784=>12740,
+24786=>12741,
+24787=>12742,
+24788=>12743,
+24790=>12744,
+24791=>12745,
+24793=>12746,
+24795=>12747,
+24798=>12748,
+24802=>12749,
+24803=>12750,
+24804=>12751,
+24805=>12752,
+24810=>12753,
+24821=>12754,
+24823=>12755,
+24824=>12756,
+24828=>12757,
+24829=>12758,
+24830=>12759,
+24831=>12760,
+24834=>12761,
+24835=>12762,
+24836=>12763,
+24837=>12764,
+24839=>12765,
+24842=>12766,
+24843=>12767,
+24844=>12768,
+24848=>12769,
+24849=>12770,
+24850=>12771,
+24851=>12772,
+24852=>12773,
+24854=>12774,
+24855=>12775,
+24856=>12776,
+24857=>12777,
+24861=>12778,
+24862=>12779,
+24865=>12780,
+24866=>12781,
+24869=>12782,
+24872=>12783,
+24873=>12784,
+24874=>12785,
+24876=>12786,
+24877=>12787,
+24878=>12788,
+24879=>12789,
+24880=>12790,
+24881=>12791,
+24882=>12792,
+24883=>12793,
+24885=>12794,
+24886=>12795,
+24888=>12796,
+24889=>12797,
+24890=>12798,
+24891=>12799,
+24892=>12800,
+24893=>12801,
+24896=>12802,
+24897=>12803,
+24898=>12804,
+24899=>12805,
+24900=>12806,
+24901=>12807,
+24902=>12808,
+24903=>12809,
+24905=>12810,
+24909=>12811,
+24911=>12812,
+24912=>12813,
+24914=>12814,
+24915=>12815,
+24916=>12816,
+24918=>12817,
+24919=>12818,
+24921=>12819,
+24923=>12820,
+24924=>12821,
+24926=>12822,
+24928=>12823,
+24929=>12824,
+24933=>12825,
+24934=>12826,
+24937=>12827,
+24940=>12828,
+24941=>12829,
+24943=>12830,
+24945=>12831,
+24946=>12832,
+24948=>12833,
+24952=>12834,
+24953=>12835,
+24954=>12836,
+24955=>12837,
+24956=>12838,
+24957=>12839,
+24958=>12840,
+24959=>12841,
+24960=>12842,
+24961=>12843,
+24963=>12844,
+24964=>12845,
+24965=>12846,
+24966=>12847,
+24967=>12848,
+24968=>12849,
+24969=>12850,
+24972=>12851,
+24973=>12852,
+24975=>12853,
+24979=>12854,
+24981=>12855,
+24982=>12856,
+24983=>12857,
+24984=>12858,
+24985=>12859,
+24987=>12860,
+24988=>12861,
+24990=>12862,
+24991=>12863,
+24992=>12864,
+24993=>12865,
+24994=>12866,
+24995=>12867,
+24997=>12868,
+24998=>12869,
+25002=>12870,
+25005=>12871,
+25007=>12872,
+25008=>12873,
+25009=>12874,
+25011=>12875,
+25012=>12876,
+25013=>12877,
+25016=>12878,
+25017=>12879,
+25018=>12880,
+25019=>12881,
+25020=>12882,
+25021=>12883,
+25023=>12884,
+25024=>12885,
+25025=>12886,
+25027=>12887,
+25028=>12888,
+25029=>12889,
+25030=>12890,
+25037=>12891,
+25038=>12892,
+25039=>12893,
+25040=>12894,
+25043=>12895,
+25045=>12896,
+25046=>12897,
+25047=>12898,
+25048=>12899,
+25049=>12900,
+25050=>12901,
+25051=>12902,
+25052=>12903,
+25053=>12904,
+25056=>12905,
+25057=>12906,
+25058=>12907,
+25060=>12908,
+25061=>12909,
+25063=>12910,
+25065=>12911,
+25066=>12912,
+25067=>12913,
+25068=>12914,
+25069=>12915,
+25070=>12916,
+25071=>12917,
+25072=>12918,
+25073=>12919,
+25075=>12920,
+25076=>12921,
+25081=>12922,
+25083=>12923,
+25085=>12924,
+25089=>12925,
+25090=>12926,
+25091=>12927,
+25092=>12928,
+25093=>12929,
+25097=>12930,
+25107=>12931,
+25113=>12932,
+25116=>12933,
+25117=>12934,
+25118=>12935,
+25120=>12936,
+25123=>12937,
+25126=>12938,
+25128=>12939,
+25129=>12940,
+25131=>12941,
+25133=>12942,
+25135=>12943,
+25137=>12944,
+25141=>12945,
+12094=>12946,
+25142=>12946,
+25144=>12947,
+25145=>12948,
+25146=>12949,
+25147=>12950,
+25148=>12951,
+25154=>12952,
+25156=>12953,
+25157=>12954,
+25158=>12955,
+25162=>12956,
+25167=>12957,
+25168=>12958,
+25173=>12959,
+25174=>12960,
+25175=>12961,
+25177=>12962,
+25178=>12963,
+25180=>12964,
+25181=>12965,
+25182=>12966,
+25183=>12967,
+25184=>12968,
+25185=>12969,
+25186=>12970,
+25188=>12971,
+25189=>12972,
+25192=>12973,
+25201=>12974,
+25202=>12975,
+25204=>12976,
+25205=>12977,
+25207=>12978,
+25208=>12979,
+25210=>12980,
+25211=>12981,
+25213=>12982,
+25217=>12983,
+25218=>12984,
+25219=>12985,
+25221=>12986,
+25222=>12987,
+25223=>12988,
+25224=>12989,
+25227=>12990,
+25228=>12991,
+25229=>12992,
+25230=>12993,
+25231=>12994,
+25232=>12995,
+25236=>12996,
+25241=>12997,
+25244=>12998,
+25245=>12999,
+25246=>13000,
+25251=>13001,
+25254=>13002,
+25255=>13003,
+25257=>13004,
+25258=>13005,
+25261=>13006,
+25262=>13007,
+25263=>13008,
+25264=>13009,
+25266=>13010,
+25267=>13011,
+25268=>13012,
+25270=>13013,
+25271=>13014,
+25272=>13015,
+25274=>13016,
+25278=>13017,
+25280=>13018,
+25281=>13019,
+25283=>13020,
+25291=>13021,
+25295=>13022,
+25297=>13023,
+25301=>13024,
+25309=>13025,
+25310=>13026,
+25312=>13027,
+25313=>13028,
+25316=>13029,
+25322=>13030,
+25323=>13031,
+25328=>13032,
+25330=>13033,
+25333=>13034,
+25336=>13035,
+25337=>13036,
+25338=>13037,
+25339=>13038,
+25344=>13039,
+25347=>13040,
+25348=>13041,
+25349=>13042,
+25350=>13043,
+25354=>13044,
+25355=>13045,
+25356=>13046,
+25357=>13047,
+25359=>13048,
+25360=>13049,
+25362=>13050,
+25363=>13051,
+25364=>13052,
+25365=>13053,
+25367=>13054,
+25368=>13055,
+25369=>13056,
+25372=>13057,
+25382=>13058,
+25383=>13059,
+25385=>13060,
+25388=>13061,
+25389=>13062,
+25390=>13063,
+25392=>13064,
+25393=>13065,
+25395=>13066,
+25396=>13067,
+25397=>13068,
+25398=>13069,
+25399=>13070,
+25400=>13071,
+25403=>13072,
+25404=>13073,
+25407=>13074,
+25408=>13075,
+25409=>13076,
+25412=>13077,
+25415=>13078,
+25416=>13079,
+25418=>13080,
+25425=>13081,
+25426=>13082,
+25427=>13083,
+25428=>13084,
+25430=>13085,
+25431=>13086,
+25432=>13087,
+25433=>13088,
+25434=>13089,
+25435=>13090,
+25436=>13091,
+25437=>13092,
+25440=>13093,
+25444=>13094,
+25445=>13095,
+25446=>13096,
+25450=>13097,
+25452=>13098,
+25455=>13099,
+25456=>13100,
+25459=>13101,
+25460=>13102,
+25461=>13103,
+25464=>13104,
+25465=>13105,
+25468=>13106,
+25469=>13107,
+25470=>13108,
+25471=>13109,
+25473=>13110,
+25477=>13111,
+25478=>13112,
+25483=>13113,
+25485=>13114,
+25489=>13115,
+25491=>13116,
+25492=>13117,
+25493=>13118,
+25495=>13119,
+25497=>13120,
+25498=>13121,
+25499=>13122,
+25500=>13123,
+25501=>13124,
+25502=>13125,
+25503=>13126,
+25505=>13127,
+25508=>13128,
+25510=>13129,
+25515=>13130,
+25519=>13131,
+25521=>13132,
+25522=>13133,
+25525=>13134,
+25526=>13135,
+25529=>13136,
+25531=>13137,
+25533=>13138,
+25535=>13139,
+25537=>13140,
+25538=>13141,
+25539=>13142,
+25541=>13143,
+25543=>13144,
+25544=>13145,
+25546=>13146,
+25547=>13147,
+25548=>13148,
+25553=>13149,
+25555=>13150,
+25556=>13151,
+25557=>13152,
+25559=>13153,
+25560=>13154,
+25561=>13155,
+25563=>13156,
+25564=>13157,
+25565=>13158,
+25567=>13159,
+25570=>13160,
+25572=>13161,
+25573=>13162,
+25574=>13163,
+25575=>13164,
+25576=>13165,
+25579=>13166,
+25580=>13167,
+25583=>13168,
+25584=>13169,
+25585=>13170,
+25587=>13171,
+25589=>13172,
+25591=>13173,
+25593=>13174,
+25594=>13175,
+25595=>13176,
+25596=>13177,
+25598=>13178,
+25603=>13179,
+25604=>13180,
+25606=>13181,
+25607=>13182,
+25608=>13183,
+25609=>13184,
+25610=>13185,
+25614=>13186,
+25617=>13187,
+25618=>13188,
+25621=>13189,
+25622=>13190,
+25624=>13191,
+25625=>13192,
+25626=>13193,
+25629=>13194,
+25631=>13195,
+25634=>13196,
+25635=>13197,
+25636=>13198,
+25637=>13199,
+25639=>13200,
+25640=>13201,
+25641=>13202,
+25643=>13203,
+25646=>13204,
+25647=>13205,
+25648=>13206,
+25649=>13207,
+25650=>13208,
+25651=>13209,
+25653=>13210,
+25655=>13211,
+25656=>13212,
+25657=>13213,
+25659=>13214,
+25660=>13215,
+25662=>13216,
+25664=>13217,
+25666=>13218,
+25667=>13219,
+25673=>13220,
+25675=>13221,
+25676=>13222,
+25677=>13223,
+25678=>13224,
+25679=>13225,
+25680=>13226,
+25683=>13227,
+25685=>13228,
+25686=>13229,
+25687=>13230,
+25689=>13231,
+25690=>13232,
+25691=>13233,
+25693=>13234,
+25696=>13235,
+25697=>13236,
+25698=>13237,
+25699=>13238,
+25700=>13239,
+25701=>13240,
+25702=>13241,
+25704=>13242,
+25706=>13243,
+25707=>13244,
+25708=>13245,
+25710=>13246,
+25712=>13247,
+25713=>13248,
+25714=>13249,
+25716=>13250,
+25717=>13251,
+25719=>13252,
+25724=>13253,
+25725=>13254,
+25726=>13255,
+25727=>13256,
+25728=>13257,
+25729=>13258,
+25731=>13259,
+25734=>13260,
+25737=>13261,
+25738=>13262,
+25739=>13263,
+25740=>13264,
+25741=>13265,
+25742=>13266,
+25743=>13267,
+25744=>13268,
+25748=>13269,
+25751=>13270,
+25752=>13271,
+25754=>13272,
+25755=>13273,
+25756=>13274,
+25757=>13275,
+25760=>13276,
+25761=>13277,
+25762=>13278,
+25766=>13279,
+25767=>13280,
+25768=>13281,
+25770=>13282,
+25775=>13283,
+25777=>13284,
+25780=>13285,
+25782=>13286,
+25785=>13287,
+25789=>13288,
+25795=>13289,
+25798=>13290,
+25800=>13291,
+25801=>13292,
+25804=>13293,
+25807=>13294,
+25809=>13295,
+25811=>13296,
+25813=>13297,
+25814=>13298,
+25817=>13299,
+25819=>13300,
+25820=>13301,
+25821=>13302,
+25823=>13303,
+25825=>13304,
+25827=>13305,
+25829=>13306,
+25831=>13307,
+25832=>13308,
+25833=>13309,
+25834=>13310,
+25835=>13311,
+25837=>13312,
+25838=>13313,
+25843=>13314,
+25845=>13315,
+25846=>13316,
+25848=>13317,
+25849=>13318,
+25853=>13319,
+25855=>13320,
+25857=>13321,
+25858=>13322,
+25859=>13323,
+25861=>13324,
+25863=>13325,
+25864=>13326,
+25866=>13327,
+25867=>13328,
+25868=>13329,
+25869=>13330,
+25870=>13331,
+25872=>13332,
+25873=>13333,
+25875=>13334,
+25877=>13335,
+25879=>13336,
+25882=>13337,
+25884=>13338,
+25886=>13339,
+25887=>13340,
+25888=>13341,
+25889=>13342,
+25894=>13343,
+25895=>13344,
+25896=>13345,
+25897=>13346,
+25901=>13347,
+25904=>13348,
+25905=>13349,
+25906=>13350,
+25907=>13351,
+25911=>13352,
+25914=>13353,
+25916=>13354,
+25917=>13355,
+25920=>13356,
+25921=>13357,
+25922=>13358,
+25923=>13359,
+25924=>13360,
+25926=>13361,
+25927=>13362,
+25930=>13363,
+25931=>13364,
+25933=>13365,
+25934=>13366,
+25936=>13367,
+25938=>13368,
+25939=>13369,
+25940=>13370,
+25944=>13371,
+25946=>13372,
+25948=>13373,
+25951=>13374,
+25952=>13375,
+25953=>13376,
+25956=>13377,
+25957=>13378,
+25959=>13379,
+25960=>13380,
+25961=>13381,
+25962=>13382,
+25965=>13383,
+25966=>13384,
+25967=>13385,
+25969=>13386,
+25971=>13387,
+25974=>13388,
+25977=>13389,
+25978=>13390,
+25979=>13391,
+25980=>13392,
+25981=>13393,
+25982=>13394,
+25983=>13395,
+25984=>13396,
+25985=>13397,
+25988=>13398,
+25989=>13399,
+25990=>13400,
+25992=>13401,
+25993=>13402,
+25994=>13403,
+25997=>13404,
+25998=>13405,
+25999=>13406,
+26002=>13407,
+26004=>13408,
+26006=>13409,
+26008=>13410,
+26010=>13411,
+26013=>13412,
+26014=>13413,
+26016=>13414,
+26018=>13415,
+26019=>13416,
+26022=>13417,
+26024=>13418,
+26026=>13419,
+26030=>13420,
+26033=>13421,
+26034=>13422,
+26035=>13423,
+26036=>13424,
+26037=>13425,
+26038=>13426,
+26040=>13427,
+26042=>13428,
+26043=>13429,
+26046=>13430,
+26047=>13431,
+26048=>13432,
+26050=>13433,
+26055=>13434,
+26056=>13435,
+26057=>13436,
+26058=>13437,
+26061=>13438,
+26064=>13439,
+26065=>13440,
+26067=>13441,
+26068=>13442,
+26069=>13443,
+26072=>13444,
+26073=>13445,
+26074=>13446,
+26075=>13447,
+26076=>13448,
+26077=>13449,
+26078=>13450,
+26079=>13451,
+26081=>13452,
+26083=>13453,
+26084=>13454,
+26090=>13455,
+26091=>13456,
+26098=>13457,
+26099=>13458,
+26100=>13459,
+26101=>13460,
+26104=>13461,
+26105=>13462,
+26107=>13463,
+26108=>13464,
+26109=>13465,
+26110=>13466,
+26111=>13467,
+26113=>13468,
+26116=>13469,
+26117=>13470,
+26119=>13471,
+26120=>13472,
+26121=>13473,
+26123=>13474,
+26125=>13475,
+26128=>13476,
+26129=>13477,
+26130=>13478,
+26134=>13479,
+26135=>13480,
+26136=>13481,
+26138=>13482,
+26139=>13483,
+26140=>13484,
+26142=>13485,
+26145=>13486,
+26146=>13487,
+26147=>13488,
+26148=>13489,
+26150=>13490,
+26153=>13491,
+26154=>13492,
+26155=>13493,
+26156=>13494,
+26158=>13495,
+26160=>13496,
+26162=>13497,
+26163=>13498,
+26167=>13499,
+26168=>13500,
+26169=>13501,
+26170=>13502,
+26171=>13503,
+26173=>13504,
+26175=>13505,
+26176=>13506,
+26180=>13507,
+26181=>13508,
+26182=>13509,
+26183=>13510,
+26184=>13511,
+26185=>13512,
+26186=>13513,
+26189=>13514,
+26190=>13515,
+26192=>13516,
+26193=>13517,
+26200=>13518,
+26201=>13519,
+26203=>13520,
+26204=>13521,
+26206=>13522,
+26208=>13523,
+26210=>13524,
+26211=>13525,
+26213=>13526,
+26215=>13527,
+26217=>13528,
+26218=>13529,
+26219=>13530,
+26220=>13531,
+26221=>13532,
+26225=>13533,
+26226=>13534,
+26227=>13535,
+26229=>13536,
+26232=>13537,
+26233=>13538,
+26235=>13539,
+26236=>13540,
+26237=>13541,
+26239=>13542,
+26240=>13543,
+26241=>13544,
+26243=>13545,
+26245=>13546,
+26246=>13547,
+26250=>13548,
+26251=>13549,
+26253=>13550,
+26254=>13551,
+26255=>13552,
+26256=>13553,
+26258=>13554,
+26259=>13555,
+26260=>13556,
+26261=>13557,
+26264=>13558,
+26265=>13559,
+26266=>13560,
+26267=>13561,
+26268=>13562,
+26270=>13563,
+26271=>13564,
+26272=>13565,
+26273=>13566,
+26275=>13567,
+26276=>13568,
+26277=>13569,
+26278=>13570,
+26281=>13571,
+26282=>13572,
+26284=>13573,
+26285=>13574,
+26287=>13575,
+26288=>13576,
+26289=>13577,
+26290=>13578,
+26291=>13579,
+26293=>13580,
+26294=>13581,
+26295=>13582,
+26296=>13583,
+26298=>13584,
+26299=>13585,
+26300=>13586,
+26301=>13587,
+26303=>13588,
+26304=>13589,
+26305=>13590,
+26306=>13591,
+26307=>13592,
+26309=>13593,
+26312=>13594,
+26314=>13595,
+26315=>13596,
+26316=>13597,
+26317=>13598,
+26318=>13599,
+26319=>13600,
+26320=>13601,
+26321=>13602,
+26322=>13603,
+26323=>13604,
+26324=>13605,
+26325=>13606,
+26327=>13607,
+26328=>13608,
+26330=>13609,
+26334=>13610,
+26335=>13611,
+26337=>13612,
+26338=>13613,
+26339=>13614,
+26340=>13615,
+26341=>13616,
+26343=>13617,
+26344=>13618,
+26346=>13619,
+26347=>13620,
+26349=>13621,
+26350=>13622,
+26351=>13623,
+26353=>13624,
+26357=>13625,
+26358=>13626,
+26362=>13627,
+26363=>13628,
+26365=>13629,
+26369=>13630,
+26370=>13631,
+26372=>13632,
+26373=>13633,
+26374=>13634,
+26375=>13635,
+26380=>13636,
+26382=>13637,
+26383=>13638,
+26385=>13639,
+26386=>13640,
+26387=>13641,
+26390=>13642,
+26392=>13643,
+26393=>13644,
+26394=>13645,
+26396=>13646,
+26398=>13647,
+26400=>13648,
+26401=>13649,
+26402=>13650,
+26403=>13651,
+26404=>13652,
+26405=>13653,
+26409=>13654,
+26414=>13655,
+26416=>13656,
+26418=>13657,
+26419=>13658,
+26422=>13659,
+26423=>13660,
+26424=>13661,
+26425=>13662,
+26427=>13663,
+26428=>13664,
+26430=>13665,
+26431=>13666,
+26433=>13667,
+26436=>13668,
+26437=>13669,
+26439=>13670,
+26442=>13671,
+26443=>13672,
+26445=>13673,
+26450=>13674,
+26452=>13675,
+26453=>13676,
+26455=>13677,
+26456=>13678,
+26457=>13679,
+26458=>13680,
+26459=>13681,
+26461=>13682,
+26466=>13683,
+26467=>13684,
+26468=>13685,
+26470=>13686,
+26471=>13687,
+26475=>13688,
+26476=>13689,
+26478=>13690,
+26484=>13691,
+26486=>13692,
+26488=>13693,
+26489=>13694,
+26490=>13695,
+26491=>13696,
+26493=>13697,
+26496=>13698,
+26498=>13699,
+26499=>13700,
+26501=>13701,
+26502=>13702,
+26504=>13703,
+26506=>13704,
+26508=>13705,
+26509=>13706,
+26510=>13707,
+26511=>13708,
+26513=>13709,
+26514=>13710,
+26515=>13711,
+26516=>13712,
+26518=>13713,
+26521=>13714,
+26523=>13715,
+26527=>13716,
+26528=>13717,
+26529=>13718,
+26532=>13719,
+26534=>13720,
+26537=>13721,
+26540=>13722,
+26542=>13723,
+26545=>13724,
+26546=>13725,
+26548=>13726,
+26553=>13727,
+26554=>13728,
+26555=>13729,
+26556=>13730,
+26557=>13731,
+26558=>13732,
+26559=>13733,
+26560=>13734,
+26562=>13735,
+26565=>13736,
+26566=>13737,
+26567=>13738,
+26568=>13739,
+26569=>13740,
+26570=>13741,
+26571=>13742,
+26572=>13743,
+26573=>13744,
+26574=>13745,
+26581=>13746,
+26582=>13747,
+26583=>13748,
+26587=>13749,
+26591=>13750,
+26593=>13751,
+26595=>13752,
+26596=>13753,
+26598=>13754,
+26599=>13755,
+26600=>13756,
+26602=>13757,
+26603=>13758,
+26605=>13759,
+26606=>13760,
+26610=>13761,
+26613=>13762,
+26614=>13763,
+26615=>13764,
+26616=>13765,
+26617=>13766,
+26618=>13767,
+26619=>13768,
+26620=>13769,
+26622=>13770,
+26625=>13771,
+26626=>13772,
+26627=>13773,
+26628=>13774,
+26630=>13775,
+26637=>13776,
+26640=>13777,
+26642=>13778,
+26644=>13779,
+26645=>13780,
+26648=>13781,
+26649=>13782,
+26650=>13783,
+26651=>13784,
+26652=>13785,
+26654=>13786,
+26655=>13787,
+26656=>13788,
+26658=>13789,
+26659=>13790,
+26660=>13791,
+26661=>13792,
+26662=>13793,
+26663=>13794,
+26664=>13795,
+26667=>13796,
+26668=>13797,
+26669=>13798,
+26670=>13799,
+26671=>13800,
+26672=>13801,
+26673=>13802,
+26676=>13803,
+26677=>13804,
+26678=>13805,
+26682=>13806,
+26683=>13807,
+26687=>13808,
+26695=>13809,
+26699=>13810,
+26701=>13811,
+26703=>13812,
+26706=>13813,
+26710=>13814,
+26711=>13815,
+26712=>13816,
+26713=>13817,
+26714=>13818,
+26715=>13819,
+26716=>13820,
+26717=>13821,
+26718=>13822,
+26719=>13823,
+26730=>13824,
+26732=>13825,
+26733=>13826,
+26734=>13827,
+26735=>13828,
+26736=>13829,
+26737=>13830,
+26738=>13831,
+26739=>13832,
+26741=>13833,
+26744=>13834,
+26745=>13835,
+26746=>13836,
+26747=>13837,
+26748=>13838,
+26749=>13839,
+26750=>13840,
+26751=>13841,
+26752=>13842,
+26754=>13843,
+26756=>13844,
+26759=>13845,
+26760=>13846,
+26761=>13847,
+26762=>13848,
+26763=>13849,
+26764=>13850,
+26765=>13851,
+26766=>13852,
+26768=>13853,
+26769=>13854,
+26770=>13855,
+26772=>13856,
+26773=>13857,
+26774=>13858,
+26777=>13859,
+26778=>13860,
+26779=>13861,
+26780=>13862,
+26782=>13863,
+26784=>13864,
+26785=>13865,
+26787=>13866,
+26788=>13867,
+26789=>13868,
+26793=>13869,
+26794=>13870,
+26795=>13871,
+26796=>13872,
+26798=>13873,
+26801=>13874,
+26802=>13875,
+26804=>13876,
+26806=>13877,
+26807=>13878,
+26808=>13879,
+26809=>13880,
+26810=>13881,
+26811=>13882,
+26812=>13883,
+26813=>13884,
+26814=>13885,
+26815=>13886,
+26817=>13887,
+26819=>13888,
+26820=>13889,
+26821=>13890,
+26822=>13891,
+26823=>13892,
+26824=>13893,
+26826=>13894,
+26828=>13895,
+26830=>13896,
+26831=>13897,
+26832=>13898,
+26833=>13899,
+26835=>13900,
+26836=>13901,
+26841=>13902,
+26843=>13903,
+26844=>13904,
+26845=>13905,
+26846=>13906,
+26849=>13907,
+26850=>13908,
+26852=>13909,
+26853=>13910,
+26854=>13911,
+26856=>13912,
+26857=>13913,
+26858=>13914,
+26859=>13915,
+26860=>13916,
+26861=>13917,
+26863=>13918,
+26866=>13919,
+26867=>13920,
+26868=>13921,
+26870=>13922,
+26871=>13923,
+26872=>13924,
+26875=>13925,
+26877=>13926,
+26878=>13927,
+26879=>13928,
+26880=>13929,
+26882=>13930,
+26883=>13931,
+26884=>13932,
+26886=>13933,
+26887=>13934,
+26888=>13935,
+26889=>13936,
+26890=>13937,
+26892=>13938,
+26897=>13939,
+26899=>13940,
+26900=>13941,
+26901=>13942,
+26902=>13943,
+26903=>13944,
+26904=>13945,
+26905=>13946,
+26906=>13947,
+26907=>13948,
+26908=>13949,
+26909=>13950,
+26910=>13951,
+26913=>13952,
+26914=>13953,
+26915=>13954,
+26917=>13955,
+26918=>13956,
+26919=>13957,
+26920=>13958,
+26921=>13959,
+26922=>13960,
+26923=>13961,
+26924=>13962,
+26926=>13963,
+26927=>13964,
+26929=>13965,
+26930=>13966,
+26931=>13967,
+26933=>13968,
+26934=>13969,
+26935=>13970,
+26936=>13971,
+26938=>13972,
+26939=>13973,
+26940=>13974,
+26942=>13975,
+26944=>13976,
+26945=>13977,
+26947=>13978,
+26948=>13979,
+26949=>13980,
+26950=>13981,
+26951=>13982,
+26952=>13983,
+26953=>13984,
+26955=>13985,
+26956=>13986,
+26957=>13987,
+26958=>13988,
+26959=>13989,
+26960=>13990,
+26961=>13991,
+26962=>13992,
+26965=>13993,
+26966=>13994,
+26968=>13995,
+26969=>13996,
+26971=>13997,
+26972=>13998,
+26975=>13999,
+26977=>14000,
+26978=>14001,
+26980=>14002,
+26981=>14003,
+26983=>14004,
+26985=>14005,
+26986=>14006,
+26988=>14007,
+26991=>14008,
+26992=>14009,
+26994=>14010,
+26995=>14011,
+26996=>14012,
+26998=>14013,
+27002=>14014,
+27003=>14015,
+27005=>14016,
+27006=>14017,
+27007=>14018,
+27009=>14019,
+27011=>14020,
+27013=>14021,
+27018=>14022,
+27019=>14023,
+27020=>14024,
+27022=>14025,
+27023=>14026,
+27024=>14027,
+27025=>14028,
+27026=>14029,
+27027=>14030,
+27030=>14031,
+27031=>14032,
+27033=>14033,
+27034=>14034,
+27037=>14035,
+27038=>14036,
+27039=>14037,
+27040=>14038,
+27041=>14039,
+27042=>14040,
+27043=>14041,
+27044=>14042,
+27045=>14043,
+27046=>14044,
+27049=>14045,
+27052=>14046,
+27055=>14047,
+27056=>14048,
+27058=>14049,
+27059=>14050,
+27061=>14051,
+27062=>14052,
+27064=>14053,
+27065=>14054,
+27066=>14055,
+27068=>14056,
+27069=>14057,
+27070=>14058,
+27072=>14059,
+27074=>14060,
+27075=>14061,
+27076=>14062,
+27077=>14063,
+27078=>14064,
+27079=>14065,
+27080=>14066,
+27081=>14067,
+27087=>14068,
+27089=>14069,
+27090=>14070,
+27091=>14071,
+27093=>14072,
+27094=>14073,
+27095=>14074,
+27096=>14075,
+27097=>14076,
+27098=>14077,
+27100=>14078,
+27101=>14079,
+27102=>14080,
+27105=>14081,
+27106=>14082,
+27107=>14083,
+27108=>14084,
+27109=>14085,
+27110=>14086,
+27112=>14087,
+27113=>14088,
+27114=>14089,
+27115=>14090,
+27116=>14091,
+27118=>14092,
+27119=>14093,
+27120=>14094,
+27121=>14095,
+27124=>14096,
+27125=>14097,
+27126=>14098,
+27127=>14099,
+27128=>14100,
+27129=>14101,
+27130=>14102,
+27131=>14103,
+27132=>14104,
+27134=>14105,
+27136=>14106,
+27139=>14107,
+27140=>14108,
+27142=>14109,
+27143=>14110,
+27144=>14111,
+27145=>14112,
+27147=>14113,
+27148=>14114,
+27149=>14115,
+27150=>14116,
+27151=>14117,
+27152=>14118,
+27153=>14119,
+27154=>14120,
+27156=>14121,
+27157=>14122,
+27158=>14123,
+27162=>14124,
+27163=>14125,
+27164=>14126,
+27165=>14127,
+27168=>14128,
+27170=>14129,
+27172=>14130,
+27173=>14131,
+27174=>14132,
+27175=>14133,
+27177=>14134,
+27179=>14135,
+27180=>14136,
+27181=>14137,
+27182=>14138,
+27184=>14139,
+27186=>14140,
+27187=>14141,
+27188=>14142,
+27190=>14143,
+27191=>14144,
+27195=>14145,
+27196=>14146,
+27199=>14147,
+27200=>14148,
+27201=>14149,
+27202=>14150,
+27203=>14151,
+27205=>14152,
+27206=>14153,
+27209=>14154,
+27210=>14155,
+27212=>14156,
+27213=>14157,
+27214=>14158,
+27215=>14159,
+27217=>14160,
+27218=>14161,
+27219=>14162,
+27220=>14163,
+27221=>14164,
+27222=>14165,
+27223=>14166,
+27226=>14167,
+27228=>14168,
+27229=>14169,
+27230=>14170,
+27232=>14171,
+27235=>14172,
+27236=>14173,
+27238=>14174,
+27239=>14175,
+27240=>14176,
+27241=>14177,
+27242=>14178,
+27243=>14179,
+27244=>14180,
+27245=>14181,
+27246=>14182,
+27247=>14183,
+27248=>14184,
+27250=>14185,
+27251=>14186,
+27252=>14187,
+27253=>14188,
+27254=>14189,
+27255=>14190,
+27256=>14191,
+27258=>14192,
+27259=>14193,
+27261=>14194,
+27262=>14195,
+27263=>14196,
+27265=>14197,
+27266=>14198,
+27267=>14199,
+27269=>14200,
+27270=>14201,
+27271=>14202,
+27272=>14203,
+27274=>14204,
+27275=>14205,
+27276=>14206,
+27277=>14207,
+27279=>14208,
+27282=>14209,
+27283=>14210,
+27285=>14211,
+27286=>14212,
+27288=>14213,
+27289=>14214,
+27290=>14215,
+27291=>14216,
+27293=>14217,
+27294=>14218,
+27295=>14219,
+27297=>14220,
+27300=>14221,
+27301=>14222,
+27302=>14223,
+27303=>14224,
+27304=>14225,
+27306=>14226,
+27309=>14227,
+27310=>14228,
+27312=>14229,
+27313=>14230,
+27314=>14231,
+27316=>14232,
+27317=>14233,
+27318=>14234,
+27319=>14235,
+27321=>14236,
+27322=>14237,
+27324=>14238,
+27325=>14239,
+27326=>14240,
+27327=>14241,
+27328=>14242,
+27329=>14243,
+27330=>14244,
+27332=>14245,
+27333=>14246,
+27334=>14247,
+27335=>14248,
+27336=>14249,
+27337=>14250,
+27338=>14251,
+27339=>14252,
+27340=>14253,
+27341=>14254,
+27342=>14255,
+27343=>14256,
+27344=>14257,
+27345=>14258,
+27346=>14259,
+27348=>14260,
+27349=>14261,
+27350=>14262,
+27351=>14263,
+27352=>14264,
+27353=>14265,
+27356=>14266,
+27360=>14267,
+27361=>14268,
+27362=>14269,
+27363=>14270,
+27364=>14271,
+27365=>14272,
+27366=>14273,
+27369=>14274,
+27371=>14275,
+27373=>14276,
+27374=>14277,
+27375=>14278,
+27376=>14279,
+27377=>14280,
+27378=>14281,
+27380=>14282,
+27381=>14283,
+27382=>14284,
+27383=>14285,
+27385=>14286,
+27386=>14287,
+27388=>14288,
+27389=>14289,
+27390=>14290,
+27391=>14291,
+27392=>14292,
+27393=>14293,
+27394=>14294,
+27395=>14295,
+27397=>14296,
+27398=>14297,
+27399=>14298,
+27400=>14299,
+27401=>14300,
+27403=>14301,
+27404=>14302,
+27405=>14303,
+27406=>14304,
+27408=>14305,
+27409=>14306,
+27411=>14307,
+27412=>14308,
+27413=>14309,
+27415=>14310,
+27416=>14311,
+27417=>14312,
+27418=>14313,
+27419=>14314,
+27420=>14315,
+27421=>14316,
+27423=>14317,
+27429=>14318,
+27430=>14319,
+27432=>14320,
+27433=>14321,
+27434=>14322,
+27435=>14323,
+27436=>14324,
+27437=>14325,
+27438=>14326,
+27439=>14327,
+27440=>14328,
+27441=>14329,
+27443=>14330,
+27444=>14331,
+27445=>14332,
+27446=>14333,
+27448=>14334,
+27451=>14335,
+27452=>14336,
+27455=>14337,
+27456=>14338,
+27457=>14339,
+27458=>14340,
+27460=>14341,
+27461=>14342,
+27464=>14343,
+27466=>14344,
+27467=>14345,
+27469=>14346,
+27470=>14347,
+27471=>14348,
+27473=>14349,
+27474=>14350,
+27475=>14351,
+27476=>14352,
+27477=>14353,
+27478=>14354,
+27479=>14355,
+27480=>14356,
+27482=>14357,
+27483=>14358,
+27484=>14359,
+27485=>14360,
+27486=>14361,
+27488=>14362,
+27496=>14363,
+27497=>14364,
+27499=>14365,
+27500=>14366,
+27501=>14367,
+27502=>14368,
+27503=>14369,
+27504=>14370,
+27505=>14371,
+27507=>14372,
+27508=>14373,
+27509=>14374,
+27510=>14375,
+27514=>14376,
+27517=>14377,
+27518=>14378,
+27519=>14379,
+27520=>14380,
+27525=>14381,
+27528=>14382,
+27532=>14383,
+27534=>14384,
+27535=>14385,
+27536=>14386,
+27537=>14387,
+27540=>14388,
+27541=>14389,
+27543=>14390,
+27545=>14391,
+27548=>14392,
+27549=>14393,
+27551=>14394,
+27552=>14395,
+27554=>14396,
+27555=>14397,
+27557=>14398,
+27558=>14399,
+27559=>14400,
+27560=>14401,
+27561=>14402,
+27564=>14403,
+27565=>14404,
+27568=>14405,
+27569=>14406,
+27574=>14407,
+27576=>14408,
+27577=>14409,
+27580=>14410,
+27581=>14411,
+27582=>14412,
+27584=>14413,
+27587=>14414,
+27588=>14415,
+27591=>14416,
+27592=>14417,
+27593=>14418,
+27594=>14419,
+27596=>14420,
+27598=>14421,
+27600=>14422,
+27601=>14423,
+27608=>14424,
+27610=>14425,
+27612=>14426,
+27613=>14427,
+27614=>14428,
+27615=>14429,
+27616=>14430,
+27618=>14431,
+27619=>14432,
+27620=>14433,
+27621=>14434,
+27622=>14435,
+27623=>14436,
+27624=>14437,
+27625=>14438,
+27628=>14439,
+27629=>14440,
+27630=>14441,
+27632=>14442,
+27633=>14443,
+27634=>14444,
+27636=>14445,
+27638=>14446,
+27639=>14447,
+27640=>14448,
+27642=>14449,
+27643=>14450,
+27644=>14451,
+27646=>14452,
+27648=>14453,
+27649=>14454,
+27650=>14455,
+27651=>14456,
+27652=>14457,
+27657=>14458,
+27658=>14459,
+27659=>14460,
+27662=>14461,
+27666=>14462,
+27671=>14463,
+27676=>14464,
+27677=>14465,
+27678=>14466,
+27680=>14467,
+27685=>14468,
+27693=>14469,
+27697=>14470,
+27699=>14471,
+27702=>14472,
+27703=>14473,
+27705=>14474,
+27706=>14475,
+27707=>14476,
+27708=>14477,
+27710=>14478,
+27711=>14479,
+27715=>14480,
+27716=>14481,
+27717=>14482,
+27720=>14483,
+27723=>14484,
+27724=>14485,
+27725=>14486,
+27726=>14487,
+27727=>14488,
+27729=>14489,
+27730=>14490,
+27731=>14491,
+27734=>14492,
+27736=>14493,
+27737=>14494,
+27738=>14495,
+27746=>14496,
+27747=>14497,
+27749=>14498,
+27750=>14499,
+27751=>14500,
+27755=>14501,
+27756=>14502,
+27757=>14503,
+27758=>14504,
+27759=>14505,
+27761=>14506,
+27763=>14507,
+27765=>14508,
+27767=>14509,
+27768=>14510,
+27770=>14511,
+27771=>14512,
+27772=>14513,
+27775=>14514,
+27776=>14515,
+27780=>14516,
+27783=>14517,
+27786=>14518,
+27787=>14519,
+27789=>14520,
+27790=>14521,
+27793=>14522,
+27794=>14523,
+27797=>14524,
+27798=>14525,
+27799=>14526,
+27800=>14527,
+27802=>14528,
+27804=>14529,
+27805=>14530,
+27806=>14531,
+27808=>14532,
+27810=>14533,
+27816=>14534,
+27820=>14535,
+27823=>14536,
+27824=>14537,
+27828=>14538,
+27829=>14539,
+27830=>14540,
+27831=>14541,
+27834=>14542,
+27840=>14543,
+27841=>14544,
+27842=>14545,
+27843=>14546,
+27846=>14547,
+27847=>14548,
+27848=>14549,
+27851=>14550,
+27853=>14551,
+27854=>14552,
+27855=>14553,
+27857=>14554,
+27858=>14555,
+27864=>14556,
+27865=>14557,
+27866=>14558,
+27868=>14559,
+27869=>14560,
+27871=>14561,
+27876=>14562,
+27878=>14563,
+27879=>14564,
+27881=>14565,
+27884=>14566,
+27885=>14567,
+27890=>14568,
+27892=>14569,
+27897=>14570,
+27903=>14571,
+27904=>14572,
+27906=>14573,
+27907=>14574,
+27909=>14575,
+27910=>14576,
+27912=>14577,
+27913=>14578,
+27914=>14579,
+27917=>14580,
+27919=>14581,
+27920=>14582,
+27921=>14583,
+27923=>14584,
+27924=>14585,
+27925=>14586,
+27926=>14587,
+27928=>14588,
+27932=>14589,
+27933=>14590,
+27935=>14591,
+27936=>14592,
+27937=>14593,
+27938=>14594,
+27939=>14595,
+27940=>14596,
+27942=>14597,
+27944=>14598,
+27945=>14599,
+27948=>14600,
+27949=>14601,
+27951=>14602,
+27952=>14603,
+27956=>14604,
+27958=>14605,
+27959=>14606,
+27960=>14607,
+27962=>14608,
+27967=>14609,
+27968=>14610,
+27970=>14611,
+27972=>14612,
+27977=>14613,
+27980=>14614,
+27984=>14615,
+27989=>14616,
+27990=>14617,
+27991=>14618,
+27992=>14619,
+27995=>14620,
+27997=>14621,
+27999=>14622,
+28001=>14623,
+28002=>14624,
+28004=>14625,
+28005=>14626,
+28007=>14627,
+28008=>14628,
+28011=>14629,
+28012=>14630,
+28013=>14631,
+28016=>14632,
+28017=>14633,
+28018=>14634,
+28019=>14635,
+28021=>14636,
+28022=>14637,
+28026=>14638,
+28027=>14639,
+28029=>14640,
+28030=>14641,
+28031=>14642,
+28032=>14643,
+28033=>14644,
+28035=>14645,
+28036=>14646,
+28038=>14647,
+28042=>14648,
+28043=>14649,
+28045=>14650,
+28047=>14651,
+28048=>14652,
+28050=>14653,
+28054=>14654,
+28055=>14655,
+28056=>14656,
+28057=>14657,
+28058=>14658,
+28060=>14659,
+28066=>14660,
+28069=>14661,
+28076=>14662,
+28077=>14663,
+28080=>14664,
+28081=>14665,
+28083=>14666,
+28084=>14667,
+28086=>14668,
+28087=>14669,
+28089=>14670,
+28090=>14671,
+28091=>14672,
+28092=>14673,
+28093=>14674,
+28094=>14675,
+28097=>14676,
+28098=>14677,
+28099=>14678,
+28104=>14679,
+28105=>14680,
+28106=>14681,
+28109=>14682,
+28110=>14683,
+28111=>14684,
+28112=>14685,
+28114=>14686,
+28115=>14687,
+28116=>14688,
+28117=>14689,
+28119=>14690,
+28122=>14691,
+28123=>14692,
+28124=>14693,
+28127=>14694,
+28130=>14695,
+28131=>14696,
+28133=>14697,
+28135=>14698,
+28136=>14699,
+28137=>14700,
+28141=>14701,
+28143=>14702,
+28144=>14703,
+28146=>14704,
+28148=>14705,
+28152=>14706,
+28157=>14707,
+28158=>14708,
+28159=>14709,
+28160=>14710,
+28161=>14711,
+28162=>14712,
+28163=>14713,
+28164=>14714,
+28166=>14715,
+28167=>14716,
+28168=>14717,
+28169=>14718,
+28171=>14719,
+28175=>14720,
+28178=>14721,
+28179=>14722,
+28181=>14723,
+28184=>14724,
+28185=>14725,
+28187=>14726,
+28188=>14727,
+28190=>14728,
+28191=>14729,
+28194=>14730,
+28199=>14731,
+28200=>14732,
+28202=>14733,
+28206=>14734,
+28208=>14735,
+28209=>14736,
+28211=>14737,
+28213=>14738,
+28214=>14739,
+28215=>14740,
+28217=>14741,
+28219=>14742,
+28220=>14743,
+28221=>14744,
+28223=>14745,
+28224=>14746,
+28225=>14747,
+28226=>14748,
+28229=>14749,
+28230=>14750,
+28231=>14751,
+28232=>14752,
+28233=>14753,
+28234=>14754,
+28235=>14755,
+28236=>14756,
+28239=>14757,
+28240=>14758,
+28241=>14759,
+28242=>14760,
+28245=>14761,
+28247=>14762,
+28249=>14763,
+28250=>14764,
+28252=>14765,
+28253=>14766,
+28256=>14767,
+28257=>14768,
+28258=>14769,
+28259=>14770,
+28260=>14771,
+28261=>14772,
+28262=>14773,
+28263=>14774,
+28264=>14775,
+28265=>14776,
+28266=>14777,
+28268=>14778,
+28269=>14779,
+28272=>14780,
+28273=>14781,
+28274=>14782,
+28275=>14783,
+28276=>14784,
+28277=>14785,
+28278=>14786,
+28279=>14787,
+28280=>14788,
+28281=>14789,
+28282=>14790,
+28283=>14791,
+28284=>14792,
+28285=>14793,
+28288=>14794,
+28289=>14795,
+28290=>14796,
+28292=>14797,
+28295=>14798,
+28296=>14799,
+28298=>14800,
+28299=>14801,
+28300=>14802,
+28301=>14803,
+28302=>14804,
+28305=>14805,
+28306=>14806,
+28307=>14807,
+28308=>14808,
+28309=>14809,
+28311=>14810,
+28313=>14811,
+28314=>14812,
+28315=>14813,
+28318=>14814,
+28320=>14815,
+28321=>14816,
+28323=>14817,
+28324=>14818,
+28326=>14819,
+28328=>14820,
+28329=>14821,
+28331=>14822,
+28332=>14823,
+28333=>14824,
+28334=>14825,
+28336=>14826,
+28339=>14827,
+28341=>14828,
+28344=>14829,
+28345=>14830,
+28348=>14831,
+28350=>14832,
+28351=>14833,
+28352=>14834,
+28355=>14835,
+28358=>14836,
+28360=>14837,
+28361=>14838,
+28362=>14839,
+28365=>14840,
+28368=>14841,
+28370=>14842,
+28374=>14843,
+28376=>14844,
+28377=>14845,
+28379=>14846,
+28380=>14847,
+28381=>14848,
+28387=>14849,
+28391=>14850,
+28394=>14851,
+28395=>14852,
+28397=>14853,
+28398=>14854,
+28400=>14855,
+28401=>14856,
+28403=>14857,
+28405=>14858,
+28406=>14859,
+28410=>14860,
+28411=>14861,
+28412=>14862,
+28413=>14863,
+28414=>14864,
+28416=>14865,
+28419=>14866,
+28420=>14867,
+28421=>14868,
+28423=>14869,
+28424=>14870,
+28426=>14871,
+28427=>14872,
+28428=>14873,
+28429=>14874,
+28430=>14875,
+28432=>14876,
+28433=>14877,
+28434=>14878,
+28438=>14879,
+28439=>14880,
+28440=>14881,
+28441=>14882,
+28443=>14883,
+28444=>14884,
+28445=>14885,
+28446=>14886,
+28447=>14887,
+28449=>14888,
+28453=>14889,
+28454=>14890,
+28455=>14891,
+28456=>14892,
+28462=>14893,
+28464=>14894,
+28468=>14895,
+28469=>14896,
+28471=>14897,
+28473=>14898,
+28474=>14899,
+28475=>14900,
+28476=>14901,
+28477=>14902,
+28480=>14903,
+28482=>14904,
+28483=>14905,
+28484=>14906,
+28485=>14907,
+28488=>14908,
+28489=>14909,
+28490=>14910,
+28492=>14911,
+28494=>14912,
+28495=>14913,
+28496=>14914,
+28498=>14915,
+28499=>14916,
+28501=>14917,
+28502=>14918,
+28503=>14919,
+28506=>14920,
+28507=>14921,
+28509=>14922,
+28511=>14923,
+28512=>14924,
+28513=>14925,
+28515=>14926,
+28517=>14927,
+28519=>14928,
+28520=>14929,
+28521=>14930,
+28522=>14931,
+28523=>14932,
+28524=>14933,
+28529=>14934,
+28531=>14935,
+28533=>14936,
+28534=>14937,
+28537=>14938,
+28539=>14939,
+28541=>14940,
+28542=>14941,
+28545=>14942,
+28546=>14943,
+28547=>14944,
+28549=>14945,
+28554=>14946,
+28555=>14947,
+28559=>14948,
+28560=>14949,
+28561=>14950,
+28562=>14951,
+28563=>14952,
+28564=>14953,
+28565=>14954,
+28566=>14955,
+28568=>14956,
+28569=>14957,
+28570=>14958,
+28571=>14959,
+28573=>14960,
+28574=>14961,
+28575=>14962,
+28578=>14963,
+28579=>14964,
+28581=>14965,
+28582=>14966,
+28584=>14967,
+28586=>14968,
+28587=>14969,
+28588=>14970,
+28589=>14971,
+28591=>14972,
+28592=>14973,
+28594=>14974,
+28596=>14975,
+28597=>14976,
+28599=>14977,
+28600=>14978,
+28602=>14979,
+28603=>14980,
+28604=>14981,
+28605=>14982,
+28606=>14983,
+28607=>14984,
+28612=>14985,
+28613=>14986,
+28614=>14987,
+28615=>14988,
+28616=>14989,
+28618=>14990,
+28619=>14991,
+28620=>14992,
+28621=>14993,
+28622=>14994,
+28623=>14995,
+28624=>14996,
+28627=>14997,
+28628=>14998,
+28630=>14999,
+28631=>15000,
+28633=>15001,
+28634=>15002,
+28636=>15003,
+28637=>15004,
+28642=>15005,
+28643=>15006,
+28645=>15007,
+28646=>15008,
+28647=>15009,
+28648=>15010,
+28649=>15011,
+28650=>15012,
+28652=>15013,
+28653=>15014,
+28658=>15015,
+28659=>15016,
+28660=>15017,
+28661=>15018,
+28662=>15019,
+28663=>15020,
+28664=>15021,
+28665=>15022,
+28667=>15023,
+28669=>15024,
+28671=>15025,
+28672=>15026,
+28673=>15027,
+28674=>15028,
+28675=>15029,
+28676=>15030,
+28679=>15031,
+28680=>15032,
+28682=>15033,
+28684=>15034,
+28685=>15035,
+28686=>15036,
+28688=>15037,
+28690=>15038,
+28691=>15039,
+28692=>15040,
+28694=>15041,
+28695=>15042,
+28697=>15043,
+28700=>15044,
+28702=>15045,
+28705=>15046,
+28706=>15047,
+28708=>15048,
+28709=>15049,
+28710=>15050,
+28713=>15051,
+28714=>15052,
+28715=>15053,
+28716=>15054,
+28717=>15055,
+28718=>15056,
+28719=>15057,
+28721=>15058,
+28723=>15059,
+28724=>15060,
+28726=>15061,
+28727=>15062,
+28728=>15063,
+28730=>15064,
+28731=>15065,
+28732=>15066,
+28733=>15067,
+28735=>15068,
+28736=>15069,
+28737=>15070,
+28738=>15071,
+28741=>15072,
+28742=>15073,
+28743=>15074,
+28744=>15075,
+28745=>15076,
+28746=>15077,
+28747=>15078,
+28749=>15079,
+28750=>15080,
+28752=>15081,
+28754=>15082,
+28755=>15083,
+28756=>15084,
+28758=>15085,
+28759=>15086,
+28761=>15087,
+28762=>15088,
+28763=>15089,
+28764=>15090,
+28767=>15091,
+28768=>15092,
+28769=>15093,
+28770=>15094,
+28773=>15095,
+28774=>15096,
+28776=>15097,
+28777=>15098,
+28778=>15099,
+28782=>15100,
+28785=>15101,
+28786=>15102,
+28787=>15103,
+28788=>15104,
+28791=>15105,
+28793=>15106,
+28794=>15107,
+28795=>15108,
+28797=>15109,
+28801=>15110,
+28802=>15111,
+28803=>15112,
+28804=>15113,
+28806=>15114,
+28807=>15115,
+28808=>15116,
+28811=>15117,
+28812=>15118,
+28813=>15119,
+28815=>15120,
+28816=>15121,
+28817=>15122,
+28819=>15123,
+28823=>15124,
+28824=>15125,
+28826=>15126,
+28827=>15127,
+28830=>15128,
+28831=>15129,
+28832=>15130,
+28833=>15131,
+28834=>15132,
+28835=>15133,
+28836=>15134,
+28837=>15135,
+28838=>15136,
+28839=>15137,
+28840=>15138,
+28841=>15139,
+28842=>15140,
+28848=>15141,
+28850=>15142,
+28852=>15143,
+28853=>15144,
+28854=>15145,
+28858=>15146,
+28862=>15147,
+28863=>15148,
+28868=>15149,
+28869=>15150,
+28870=>15151,
+28871=>15152,
+28873=>15153,
+28875=>15154,
+28876=>15155,
+28877=>15156,
+28878=>15157,
+28880=>15158,
+28881=>15159,
+28882=>15160,
+28883=>15161,
+28884=>15162,
+28885=>15163,
+28886=>15164,
+28887=>15165,
+28890=>15166,
+28892=>15167,
+28893=>15168,
+28894=>15169,
+28896=>15170,
+28897=>15171,
+28898=>15172,
+28899=>15173,
+28901=>15174,
+28906=>15175,
+28910=>15176,
+28912=>15177,
+28913=>15178,
+28914=>15179,
+28915=>15180,
+28917=>15181,
+28918=>15182,
+28920=>15183,
+28922=>15184,
+28923=>15185,
+28924=>15186,
+28926=>15187,
+28927=>15188,
+28928=>15189,
+28929=>15190,
+28930=>15191,
+28931=>15192,
+28932=>15193,
+28933=>15194,
+28934=>15195,
+28935=>15196,
+28936=>15197,
+28939=>15198,
+28940=>15199,
+28941=>15200,
+28942=>15201,
+28943=>15202,
+28945=>15203,
+28946=>15204,
+28948=>15205,
+28951=>15206,
+28955=>15207,
+28956=>15208,
+28957=>15209,
+28958=>15210,
+28959=>15211,
+28960=>15212,
+28962=>15213,
+28963=>15214,
+28964=>15215,
+28965=>15216,
+28967=>15217,
+28968=>15218,
+28969=>15219,
+28970=>15220,
+28971=>15221,
+28972=>15222,
+28973=>15223,
+28974=>15224,
+28978=>15225,
+28979=>15226,
+28980=>15227,
+28981=>15228,
+28983=>15229,
+28984=>15230,
+28985=>15231,
+28986=>15232,
+28987=>15233,
+28988=>15234,
+28989=>15235,
+28990=>15236,
+28991=>15237,
+28992=>15238,
+28993=>15239,
+28994=>15240,
+28995=>15241,
+28996=>15242,
+28998=>15243,
+28999=>15244,
+29000=>15245,
+29003=>15246,
+29005=>15247,
+29007=>15248,
+29008=>15249,
+29009=>15250,
+29011=>15251,
+29012=>15252,
+29013=>15253,
+29014=>15254,
+29015=>15255,
+29016=>15256,
+29017=>15257,
+29018=>15258,
+29019=>15259,
+29021=>15260,
+29023=>15261,
+29024=>15262,
+29025=>15263,
+29027=>15264,
+29029=>15265,
+29034=>15266,
+29035=>15267,
+29037=>15268,
+29039=>15269,
+29040=>15270,
+29041=>15271,
+29044=>15272,
+29045=>15273,
+29046=>15274,
+29047=>15275,
+29049=>15276,
+29051=>15277,
+29052=>15278,
+29054=>15279,
+29055=>15280,
+29056=>15281,
+29057=>15282,
+29058=>15283,
+29059=>15284,
+29061=>15285,
+29062=>15286,
+29063=>15287,
+29064=>15288,
+29065=>15289,
+29067=>15290,
+29068=>15291,
+29069=>15292,
+29070=>15293,
+29072=>15294,
+29073=>15295,
+29075=>15296,
+29077=>15297,
+29078=>15298,
+29082=>15299,
+29083=>15300,
+29084=>15301,
+29085=>15302,
+29086=>15303,
+29089=>15304,
+29090=>15305,
+29091=>15306,
+29092=>15307,
+29093=>15308,
+29094=>15309,
+29095=>15310,
+29097=>15311,
+29098=>15312,
+29099=>15313,
+29101=>15314,
+29102=>15315,
+29103=>15316,
+29104=>15317,
+29106=>15318,
+29108=>15319,
+29110=>15320,
+29111=>15321,
+29112=>15322,
+29114=>15323,
+29115=>15324,
+29116=>15325,
+29117=>15326,
+29119=>15327,
+29120=>15328,
+29122=>15329,
+29124=>15330,
+29125=>15331,
+29126=>15332,
+29127=>15333,
+29129=>15334,
+29130=>15335,
+29131=>15336,
+29132=>15337,
+29133=>15338,
+29135=>15339,
+29136=>15340,
+29137=>15341,
+29139=>15342,
+29142=>15343,
+29143=>15344,
+29144=>15345,
+29146=>15346,
+29147=>15347,
+29149=>15348,
+29150=>15349,
+29153=>15350,
+29154=>15351,
+29155=>15352,
+29156=>15353,
+29160=>15354,
+29161=>15355,
+29162=>15356,
+29163=>15357,
+29164=>15358,
+29167=>15359,
+29168=>15360,
+29169=>15361,
+29170=>15362,
+29171=>15363,
+29173=>15364,
+29174=>15365,
+29175=>15366,
+29176=>15367,
+29178=>15368,
+29179=>15369,
+29181=>15370,
+29183=>15371,
+29184=>15372,
+29185=>15373,
+29186=>15374,
+29187=>15375,
+29188=>15376,
+29189=>15377,
+29191=>15378,
+29192=>15379,
+29193=>15380,
+29194=>15381,
+29195=>15382,
+29196=>15383,
+29198=>15384,
+29199=>15385,
+29201=>15386,
+29202=>15387,
+29203=>15388,
+29204=>15389,
+29205=>15390,
+29206=>15391,
+29207=>15392,
+29208=>15393,
+29209=>15394,
+29210=>15395,
+29212=>15396,
+29214=>15397,
+29215=>15398,
+29216=>15399,
+29217=>15400,
+29218=>15401,
+29219=>15402,
+29220=>15403,
+29221=>15404,
+29222=>15405,
+29223=>15406,
+29225=>15407,
+29227=>15408,
+29229=>15409,
+29230=>15410,
+29231=>15411,
+29235=>15412,
+29236=>15413,
+29244=>15414,
+29248=>15415,
+29249=>15416,
+29250=>15417,
+29251=>15418,
+29252=>15419,
+29253=>15420,
+29254=>15421,
+29257=>15422,
+29258=>15423,
+29259=>15424,
+29262=>15425,
+29263=>15426,
+29264=>15427,
+29265=>15428,
+29267=>15429,
+29268=>15430,
+29269=>15431,
+29271=>15432,
+29274=>15433,
+29276=>15434,
+29278=>15435,
+29280=>15436,
+29283=>15437,
+29284=>15438,
+29285=>15439,
+29288=>15440,
+29290=>15441,
+29291=>15442,
+29292=>15443,
+29293=>15444,
+29296=>15445,
+29297=>15446,
+29299=>15447,
+29300=>15448,
+29302=>15449,
+29303=>15450,
+29304=>15451,
+29307=>15452,
+29308=>15453,
+29314=>15454,
+29315=>15455,
+29317=>15456,
+29318=>15457,
+29319=>15458,
+29320=>15459,
+29321=>15460,
+29324=>15461,
+29326=>15462,
+29328=>15463,
+29329=>15464,
+29331=>15465,
+29332=>15466,
+29333=>15467,
+29335=>15468,
+29336=>15469,
+29337=>15470,
+29338=>15471,
+29339=>15472,
+29340=>15473,
+29341=>15474,
+29342=>15475,
+29344=>15476,
+29345=>15477,
+29347=>15478,
+29348=>15479,
+29349=>15480,
+29350=>15481,
+29352=>15482,
+29353=>15483,
+29354=>15484,
+29355=>15485,
+29358=>15486,
+29361=>15487,
+29362=>15488,
+29363=>15489,
+29365=>15490,
+29370=>15491,
+29371=>15492,
+29372=>15493,
+29373=>15494,
+29374=>15495,
+29375=>15496,
+29381=>15497,
+29382=>15498,
+29383=>15499,
+29385=>15500,
+29386=>15501,
+29387=>15502,
+29388=>15503,
+29391=>15504,
+29393=>15505,
+29395=>15506,
+29396=>15507,
+29397=>15508,
+29398=>15509,
+29400=>15510,
+29402=>15511,
+29403=>15512,
+29404=>15513,
+29405=>15514,
+29407=>15515,
+29410=>15516,
+29411=>15517,
+29412=>15518,
+29413=>15519,
+29414=>15520,
+29415=>15521,
+29418=>15522,
+29419=>15523,
+29429=>15524,
+29430=>15525,
+29438=>15526,
+29439=>15527,
+29440=>15528,
+29442=>15529,
+29444=>15530,
+29445=>15531,
+29446=>15532,
+29447=>15533,
+29448=>15534,
+29449=>15535,
+29451=>15536,
+29452=>15537,
+29453=>15538,
+29455=>15539,
+29456=>15540,
+29457=>15541,
+29458=>15542,
+29460=>15543,
+29464=>15544,
+29465=>15545,
+29466=>15546,
+29471=>15547,
+29472=>15548,
+29475=>15549,
+29476=>15550,
+29478=>15551,
+29479=>15552,
+29480=>15553,
+29485=>15554,
+29487=>15555,
+29488=>15556,
+29490=>15557,
+29491=>15558,
+29493=>15559,
+29498=>15560,
+29500=>15561,
+29501=>15562,
+29504=>15563,
+29506=>15564,
+29507=>15565,
+29510=>15566,
+29511=>15567,
+29512=>15568,
+29513=>15569,
+29514=>15570,
+29515=>15571,
+29516=>15572,
+29518=>15573,
+29519=>15574,
+29521=>15575,
+29523=>15576,
+29524=>15577,
+29525=>15578,
+29526=>15579,
+29528=>15580,
+29529=>15581,
+29530=>15582,
+29531=>15583,
+29532=>15584,
+29533=>15585,
+29534=>15586,
+29535=>15587,
+29537=>15588,
+29538=>15589,
+29539=>15590,
+29540=>15591,
+29541=>15592,
+29542=>15593,
+29543=>15594,
+29545=>15595,
+29550=>15596,
+29553=>15597,
+29555=>15598,
+29556=>15599,
+29558=>15600,
+29561=>15601,
+29565=>15602,
+29567=>15603,
+29569=>15604,
+29570=>15605,
+29571=>15606,
+29573=>15607,
+29574=>15608,
+29576=>15609,
+29578=>15610,
+29580=>15611,
+29581=>15612,
+29583=>15613,
+29584=>15614,
+29586=>15615,
+29587=>15616,
+29588=>15617,
+29589=>15618,
+29591=>15619,
+29592=>15620,
+29593=>15621,
+29594=>15622,
+29596=>15623,
+29597=>15624,
+29598=>15625,
+29600=>15626,
+29601=>15627,
+29603=>15628,
+29604=>15629,
+29605=>15630,
+29606=>15631,
+29607=>15632,
+29608=>15633,
+29610=>15634,
+29612=>15635,
+29613=>15636,
+29617=>15637,
+29620=>15638,
+29621=>15639,
+29622=>15640,
+29624=>15641,
+29625=>15642,
+29628=>15643,
+29629=>15644,
+29630=>15645,
+29631=>15646,
+29633=>15647,
+29635=>15648,
+29636=>15649,
+29637=>15650,
+29638=>15651,
+29639=>15652,
+29643=>15653,
+29644=>15654,
+29646=>15655,
+29650=>15656,
+29651=>15657,
+29652=>15658,
+29653=>15659,
+29654=>15660,
+29655=>15661,
+29656=>15662,
+29658=>15663,
+29659=>15664,
+29660=>15665,
+29661=>15666,
+29663=>15667,
+29665=>15668,
+29666=>15669,
+29667=>15670,
+29668=>15671,
+29670=>15672,
+29672=>15673,
+29674=>15674,
+29675=>15675,
+29676=>15676,
+29678=>15677,
+29679=>15678,
+29680=>15679,
+29681=>15680,
+29683=>15681,
+29684=>15682,
+29685=>15683,
+29686=>15684,
+29687=>15685,
+29688=>15686,
+29689=>15687,
+29690=>15688,
+29691=>15689,
+29692=>15690,
+29693=>15691,
+29695=>15692,
+29696=>15693,
+29697=>15694,
+29698=>15695,
+29700=>15696,
+29703=>15697,
+29704=>15698,
+29707=>15699,
+29708=>15700,
+29709=>15701,
+29710=>15702,
+29713=>15703,
+29714=>15704,
+29715=>15705,
+29716=>15706,
+29717=>15707,
+29718=>15708,
+29719=>15709,
+29720=>15710,
+29721=>15711,
+29724=>15712,
+29725=>15713,
+29726=>15714,
+29727=>15715,
+29728=>15716,
+29729=>15717,
+29731=>15718,
+29732=>15719,
+29735=>15720,
+29737=>15721,
+29739=>15722,
+29741=>15723,
+29743=>15724,
+29745=>15725,
+29746=>15726,
+29751=>15727,
+29752=>15728,
+29753=>15729,
+29754=>15730,
+29755=>15731,
+29757=>15732,
+29758=>15733,
+29760=>15734,
+29762=>15735,
+29763=>15736,
+29764=>15737,
+29765=>15738,
+29766=>15739,
+29767=>15740,
+29768=>15741,
+29769=>15742,
+29770=>15743,
+29772=>15744,
+29773=>15745,
+29774=>15746,
+29775=>15747,
+29776=>15748,
+29777=>15749,
+29778=>15750,
+29779=>15751,
+29780=>15752,
+29782=>15753,
+29784=>15754,
+29789=>15755,
+29792=>15756,
+29793=>15757,
+29794=>15758,
+29796=>15759,
+29797=>15760,
+29798=>15761,
+29799=>15762,
+29800=>15763,
+29803=>15764,
+29804=>15765,
+29806=>15766,
+29807=>15767,
+29809=>15768,
+29810=>15769,
+29811=>15770,
+29812=>15771,
+29813=>15772,
+29816=>15773,
+29817=>15774,
+29818=>15775,
+29819=>15776,
+29820=>15777,
+29821=>15778,
+29823=>15779,
+29826=>15780,
+29828=>15781,
+29829=>15782,
+29830=>15783,
+29832=>15784,
+29834=>15785,
+29836=>15786,
+29837=>15787,
+29839=>15788,
+29841=>15789,
+29842=>15790,
+29843=>15791,
+29844=>15792,
+29845=>15793,
+29846=>15794,
+29847=>15795,
+29848=>15796,
+29849=>15797,
+29850=>15798,
+29851=>15799,
+29853=>15800,
+29855=>15801,
+29856=>15802,
+29857=>15803,
+29858=>15804,
+29860=>15805,
+29861=>15806,
+29866=>15807,
+29867=>15808,
+29868=>15809,
+29869=>15810,
+29870=>15811,
+29871=>15812,
+29873=>15813,
+29874=>15814,
+29875=>15815,
+29876=>15816,
+29877=>15817,
+29878=>15818,
+29879=>15819,
+29880=>15820,
+29881=>15821,
+29883=>15822,
+29884=>15823,
+29886=>15824,
+29887=>15825,
+29888=>15826,
+29889=>15827,
+29890=>15828,
+29891=>15829,
+29892=>15830,
+29893=>15831,
+29894=>15832,
+29895=>15833,
+29896=>15834,
+29897=>15835,
+29899=>15836,
+29900=>15837,
+29901=>15838,
+29902=>15839,
+29904=>15840,
+29905=>15841,
+29907=>15842,
+29909=>15843,
+29910=>15844,
+29911=>15845,
+29912=>15846,
+29913=>15847,
+29915=>15848,
+29917=>15849,
+29919=>15850,
+29921=>15851,
+29925=>15852,
+29927=>15853,
+29928=>15854,
+29929=>15855,
+29930=>15856,
+29931=>15857,
+29932=>15858,
+29933=>15859,
+29936=>15860,
+29937=>15861,
+29938=>15862,
+29939=>15863,
+29941=>15864,
+29944=>15865,
+29945=>15866,
+29946=>15867,
+29947=>15868,
+29948=>15869,
+29949=>15870,
+29950=>15871,
+29952=>15872,
+29953=>15873,
+29954=>15874,
+29955=>15875,
+29957=>15876,
+29958=>15877,
+29959=>15878,
+29960=>15879,
+29961=>15880,
+29962=>15881,
+29963=>15882,
+29966=>15883,
+29968=>15884,
+29970=>15885,
+29972=>15886,
+29973=>15887,
+29974=>15888,
+29975=>15889,
+29979=>15890,
+29981=>15891,
+29982=>15892,
+29984=>15893,
+29985=>15894,
+29986=>15895,
+29988=>15896,
+29990=>15897,
+29991=>15898,
+29994=>15899,
+29998=>15900,
+30004=>15901,
+30006=>15902,
+30009=>15903,
+30012=>15904,
+30013=>15905,
+30015=>15906,
+30017=>15907,
+30018=>15908,
+30019=>15909,
+30020=>15910,
+30022=>15911,
+30023=>15912,
+30025=>15913,
+30026=>15914,
+30029=>15915,
+30032=>15916,
+30033=>15917,
+30034=>15918,
+30035=>15919,
+30037=>15920,
+30038=>15921,
+30039=>15922,
+30040=>15923,
+30046=>15924,
+30047=>15925,
+30048=>15926,
+30049=>15927,
+30051=>15928,
+30052=>15929,
+30055=>15930,
+30056=>15931,
+30057=>15932,
+30060=>15933,
+30061=>15934,
+30062=>15935,
+30063=>15936,
+30064=>15937,
+30065=>15938,
+30067=>15939,
+30069=>15940,
+30071=>15941,
+30074=>15942,
+30075=>15943,
+30076=>15944,
+30077=>15945,
+30078=>15946,
+30080=>15947,
+30081=>15948,
+30082=>15949,
+30084=>15950,
+30085=>15951,
+30088=>15952,
+30089=>15953,
+30090=>15954,
+30092=>15955,
+30093=>15956,
+30094=>15957,
+30096=>15958,
+30099=>15959,
+30101=>15960,
+30104=>15961,
+30107=>15962,
+30108=>15963,
+30110=>15964,
+30114=>15965,
+30118=>15966,
+30119=>15967,
+30120=>15968,
+30121=>15969,
+30122=>15970,
+30125=>15971,
+30134=>15972,
+30135=>15973,
+30138=>15974,
+30139=>15975,
+30143=>15976,
+30144=>15977,
+30145=>15978,
+30150=>15979,
+30155=>15980,
+30156=>15981,
+30158=>15982,
+30159=>15983,
+30160=>15984,
+30161=>15985,
+30163=>15986,
+30167=>15987,
+30170=>15988,
+30172=>15989,
+30173=>15990,
+30175=>15991,
+30176=>15992,
+30177=>15993,
+30181=>15994,
+30185=>15995,
+30188=>15996,
+30189=>15997,
+30190=>15998,
+30191=>15999,
+30194=>16000,
+30195=>16001,
+30197=>16002,
+30198=>16003,
+30199=>16004,
+30200=>16005,
+30202=>16006,
+30203=>16007,
+30205=>16008,
+30206=>16009,
+30212=>16010,
+30214=>16011,
+30215=>16012,
+30216=>16013,
+30217=>16014,
+30222=>16015,
+30223=>16016,
+30225=>16017,
+30226=>16018,
+30227=>16019,
+30228=>16020,
+30230=>16021,
+30234=>16022,
+30236=>16023,
+30237=>16024,
+30243=>16025,
+30248=>16026,
+30252=>16027,
+30254=>16028,
+30255=>16029,
+30257=>16030,
+30258=>16031,
+30262=>16032,
+30263=>16033,
+30265=>16034,
+30266=>16035,
+30269=>16036,
+30273=>16037,
+30276=>16038,
+30277=>16039,
+30280=>16040,
+30282=>16041,
+30283=>16042,
+30286=>16043,
+30287=>16044,
+30288=>16045,
+30289=>16046,
+30290=>16047,
+30291=>16048,
+30293=>16049,
+30295=>16050,
+30297=>16051,
+30298=>16052,
+30299=>16053,
+30301=>16054,
+30304=>16055,
+30305=>16056,
+30310=>16057,
+30312=>16058,
+30314=>16059,
+30323=>16060,
+30324=>16061,
+30325=>16062,
+12136=>16063,
+30326=>16063,
+30327=>16064,
+30329=>16065,
+30330=>16066,
+30335=>16067,
+30336=>16068,
+30337=>16069,
+30339=>16070,
+30341=>16071,
+30345=>16072,
+30346=>16073,
+30348=>16074,
+30349=>16075,
+30351=>16076,
+30352=>16077,
+30354=>16078,
+30356=>16079,
+30357=>16080,
+30359=>16081,
+30360=>16082,
+30363=>16083,
+30364=>16084,
+30365=>16085,
+30366=>16086,
+30367=>16087,
+30368=>16088,
+30369=>16089,
+30370=>16090,
+30371=>16091,
+30373=>16092,
+30374=>16093,
+30375=>16094,
+30376=>16095,
+30377=>16096,
+30378=>16097,
+30379=>16098,
+30380=>16099,
+30381=>16100,
+30383=>16101,
+30384=>16102,
+30387=>16103,
+30389=>16104,
+30390=>16105,
+30391=>16106,
+30393=>16107,
+30395=>16108,
+30396=>16109,
+30397=>16110,
+30398=>16111,
+30400=>16112,
+30401=>16113,
+30403=>16114,
+30404=>16115,
+30407=>16116,
+30409=>16117,
+30411=>16118,
+30412=>16119,
+30419=>16120,
+30421=>16121,
+30425=>16122,
+30426=>16123,
+30428=>16124,
+30429=>16125,
+30432=>16126,
+30434=>16127,
+30438=>16128,
+30440=>16129,
+30441=>16130,
+30442=>16131,
+30443=>16132,
+30444=>16133,
+30445=>16134,
+30448=>16135,
+30451=>16136,
+30453=>16137,
+30454=>16138,
+30455=>16139,
+30458=>16140,
+30459=>16141,
+30461=>16142,
+30463=>16143,
+30464=>16144,
+30466=>16145,
+30467=>16146,
+30469=>16147,
+30470=>16148,
+30474=>16149,
+30476=>16150,
+30478=>16151,
+30479=>16152,
+30480=>16153,
+30481=>16154,
+30482=>16155,
+30483=>16156,
+30484=>16157,
+30485=>16158,
+30486=>16159,
+30487=>16160,
+30488=>16161,
+30491=>16162,
+30492=>16163,
+30493=>16164,
+30494=>16165,
+30497=>16166,
+30499=>16167,
+30500=>16168,
+30501=>16169,
+30503=>16170,
+30506=>16171,
+30507=>16172,
+30508=>16173,
+30510=>16174,
+30512=>16175,
+30513=>16176,
+30514=>16177,
+30515=>16178,
+30516=>16179,
+30521=>16180,
+30523=>16181,
+30525=>16182,
+30526=>16183,
+30527=>16184,
+30530=>16185,
+30532=>16186,
+30533=>16187,
+30534=>16188,
+30536=>16189,
+30537=>16190,
+30538=>16191,
+30539=>16192,
+30540=>16193,
+30541=>16194,
+30542=>16195,
+30546=>16196,
+30547=>16197,
+30548=>16198,
+30549=>16199,
+30550=>16200,
+30551=>16201,
+30552=>16202,
+30553=>16203,
+30556=>16204,
+30557=>16205,
+30559=>16206,
+30560=>16207,
+30564=>16208,
+30567=>16209,
+30569=>16210,
+30570=>16211,
+30573=>16212,
+30574=>16213,
+30575=>16214,
+30576=>16215,
+30577=>16216,
+30578=>16217,
+30579=>16218,
+30580=>16219,
+30581=>16220,
+30582=>16221,
+30583=>16222,
+30584=>16223,
+30586=>16224,
+30587=>16225,
+30588=>16226,
+30593=>16227,
+30594=>16228,
+30595=>16229,
+30598=>16230,
+30599=>16231,
+30600=>16232,
+30601=>16233,
+30602=>16234,
+30603=>16235,
+30607=>16236,
+30608=>16237,
+30611=>16238,
+30612=>16239,
+30613=>16240,
+30614=>16241,
+30615=>16242,
+30617=>16243,
+30618=>16244,
+30619=>16245,
+30620=>16246,
+30621=>16247,
+30625=>16248,
+30627=>16249,
+30628=>16250,
+30630=>16251,
+30632=>16252,
+30635=>16253,
+30638=>16254,
+30639=>16255,
+30641=>16256,
+30642=>16257,
+30644=>16258,
+30646=>16259,
+30647=>16260,
+30648=>16261,
+30649=>16262,
+30650=>16263,
+30654=>16264,
+30656=>16265,
+30657=>16266,
+30658=>16267,
+30659=>16268,
+30660=>16269,
+30661=>16270,
+30662=>16271,
+30664=>16272,
+30665=>16273,
+30666=>16274,
+30667=>16275,
+30668=>16276,
+30670=>16277,
+30671=>16278,
+30672=>16279,
+30673=>16280,
+30674=>16281,
+30675=>16282,
+30676=>16283,
+30677=>16284,
+30678=>16285,
+30680=>16286,
+30681=>16287,
+30685=>16288,
+30686=>16289,
+30687=>16290,
+30688=>16291,
+30689=>16292,
+30692=>16293,
+30694=>16294,
+30696=>16295,
+30698=>16296,
+30704=>16297,
+30705=>16298,
+30706=>16299,
+30708=>16300,
+30709=>16301,
+30711=>16302,
+30713=>16303,
+30714=>16304,
+30715=>16305,
+30716=>16306,
+30723=>16307,
+30724=>16308,
+30725=>16309,
+30726=>16310,
+30727=>16311,
+30728=>16312,
+30730=>16313,
+30731=>16314,
+30734=>16315,
+30735=>16316,
+30736=>16317,
+30739=>16318,
+30741=>16319,
+30745=>16320,
+30747=>16321,
+30750=>16322,
+30752=>16323,
+30753=>16324,
+30754=>16325,
+30756=>16326,
+30760=>16327,
+30762=>16328,
+30763=>16329,
+30766=>16330,
+30767=>16331,
+30769=>16332,
+30770=>16333,
+30771=>16334,
+30773=>16335,
+30774=>16336,
+30781=>16337,
+30783=>16338,
+30785=>16339,
+30786=>16340,
+30788=>16341,
+30790=>16342,
+30792=>16343,
+30793=>16344,
+30794=>16345,
+30795=>16346,
+30797=>16347,
+30799=>16348,
+30801=>16349,
+30803=>16350,
+30804=>16351,
+30808=>16352,
+30809=>16353,
+30810=>16354,
+30811=>16355,
+30812=>16356,
+30814=>16357,
+30815=>16358,
+30816=>16359,
+30817=>16360,
+30818=>16361,
+30819=>16362,
+30821=>16363,
+30822=>16364,
+30823=>16365,
+30825=>16366,
+30832=>16367,
+30833=>16368,
+30834=>16369,
+30835=>16370,
+30836=>16371,
+30837=>16372,
+30838=>16373,
+30840=>16374,
+30841=>16375,
+30842=>16376,
+30843=>16377,
+30845=>16378,
+30846=>16379,
+30847=>16380,
+30848=>16381,
+30849=>16382,
+30850=>16383,
+30851=>16384,
+30852=>16385,
+30853=>16386,
+30854=>16387,
+30856=>16388,
+30858=>16389,
+30859=>16390,
+30863=>16391,
+30864=>16392,
+30866=>16393,
+30868=>16394,
+30869=>16395,
+30870=>16396,
+30873=>16397,
+30877=>16398,
+30878=>16399,
+30880=>16400,
+30882=>16401,
+30884=>16402,
+30886=>16403,
+30888=>16404,
+30890=>16405,
+30891=>16406,
+30892=>16407,
+30894=>16408,
+30895=>16409,
+30901=>16410,
+30902=>16411,
+30903=>16412,
+30907=>16413,
+30909=>16414,
+30911=>16415,
+30912=>16416,
+30914=>16417,
+30915=>16418,
+30916=>16419,
+30918=>16420,
+30919=>16421,
+30920=>16422,
+30924=>16423,
+30925=>16424,
+30926=>16425,
+30927=>16426,
+30929=>16427,
+30930=>16428,
+30931=>16429,
+30934=>16430,
+30935=>16431,
+30936=>16432,
+30939=>16433,
+30940=>16434,
+30941=>16435,
+30942=>16436,
+30943=>16437,
+30944=>16438,
+30945=>16439,
+30946=>16440,
+30948=>16441,
+30949=>16442,
+30950=>16443,
+30953=>16444,
+30954=>16445,
+30955=>16446,
+30957=>16447,
+30958=>16448,
+30960=>16449,
+30961=>16450,
+30963=>16451,
+30965=>16452,
+30966=>16453,
+30968=>16454,
+30969=>16455,
+30971=>16456,
+30972=>16457,
+30974=>16458,
+30975=>16459,
+30976=>16460,
+30978=>16461,
+30979=>16462,
+30980=>16463,
+30982=>16464,
+30983=>16465,
+30984=>16466,
+30985=>16467,
+30986=>16468,
+30987=>16469,
+30988=>16470,
+30989=>16471,
+30991=>16472,
+30992=>16473,
+30993=>16474,
+30994=>16475,
+30996=>16476,
+30997=>16477,
+30998=>16478,
+30999=>16479,
+31000=>16480,
+31002=>16481,
+31003=>16482,
+31004=>16483,
+31005=>16484,
+31007=>16485,
+31008=>16486,
+31009=>16487,
+31010=>16488,
+31011=>16489,
+31013=>16490,
+31015=>16491,
+31016=>16492,
+31017=>16493,
+31021=>16494,
+31022=>16495,
+31023=>16496,
+31024=>16497,
+31026=>16498,
+31027=>16499,
+31029=>16500,
+31030=>16501,
+31031=>16502,
+31032=>16503,
+31033=>16504,
+31037=>16505,
+31039=>16506,
+31042=>16507,
+31043=>16508,
+31044=>16509,
+31045=>16510,
+31047=>16511,
+31050=>16512,
+31051=>16513,
+31052=>16514,
+31053=>16515,
+31054=>16516,
+31055=>16517,
+31056=>16518,
+31057=>16519,
+31058=>16520,
+31060=>16521,
+31061=>16522,
+31064=>16523,
+31065=>16524,
+31073=>16525,
+31075=>16526,
+31076=>16527,
+31078=>16528,
+31081=>16529,
+31082=>16530,
+31083=>16531,
+31084=>16532,
+31086=>16533,
+31088=>16534,
+31089=>16535,
+31090=>16536,
+31091=>16537,
+31092=>16538,
+31093=>16539,
+31094=>16540,
+31097=>16541,
+31099=>16542,
+31100=>16543,
+31101=>16544,
+31102=>16545,
+31103=>16546,
+31106=>16547,
+31107=>16548,
+31110=>16549,
+31111=>16550,
+31112=>16551,
+31113=>16552,
+31115=>16553,
+31116=>16554,
+31120=>16555,
+31121=>16556,
+31122=>16557,
+31123=>16558,
+31124=>16559,
+31125=>16560,
+31126=>16561,
+31127=>16562,
+31128=>16563,
+31129=>16564,
+31131=>16565,
+31132=>16566,
+31133=>16567,
+31134=>16568,
+31135=>16569,
+31136=>16570,
+31137=>16571,
+31138=>16572,
+31139=>16573,
+31140=>16574,
+31141=>16575,
+31144=>16576,
+31145=>16577,
+31147=>16578,
+31148=>16579,
+31149=>16580,
+31151=>16581,
+31154=>16582,
+31156=>16583,
+31157=>16584,
+31158=>16585,
+31159=>16586,
+12145=>16587,
+31160=>16587,
+31164=>16588,
+31167=>16589,
+31170=>16590,
+31172=>16591,
+31173=>16592,
+31175=>16593,
+31176=>16594,
+31178=>16595,
+63893=>16595,
+31180=>16596,
+31182=>16597,
+31183=>16598,
+31184=>16599,
+31187=>16600,
+31188=>16601,
+31190=>16602,
+31191=>16603,
+31193=>16604,
+31194=>16605,
+31195=>16606,
+31196=>16607,
+31197=>16608,
+31198=>16609,
+31200=>16610,
+31201=>16611,
+31202=>16612,
+31205=>16613,
+31208=>16614,
+31210=>16615,
+31212=>16616,
+31214=>16617,
+31217=>16618,
+31218=>16619,
+31219=>16620,
+31220=>16621,
+31221=>16622,
+31222=>16623,
+31223=>16624,
+31225=>16625,
+31226=>16626,
+31228=>16627,
+31230=>16628,
+31231=>16629,
+31233=>16630,
+31236=>16631,
+31237=>16632,
+31239=>16633,
+31240=>16634,
+31241=>16635,
+31242=>16636,
+31244=>16637,
+31247=>16638,
+31248=>16639,
+31249=>16640,
+31250=>16641,
+31251=>16642,
+31253=>16643,
+31254=>16644,
+31256=>16645,
+31257=>16646,
+31259=>16647,
+31260=>16648,
+31261=>16649,
+31263=>16650,
+31265=>16651,
+31266=>16652,
+31268=>16653,
+31269=>16654,
+31270=>16655,
+31271=>16656,
+31272=>16657,
+31273=>16658,
+31274=>16659,
+31275=>16660,
+31276=>16661,
+31277=>16662,
+31279=>16663,
+31280=>16664,
+31282=>16665,
+31284=>16666,
+31285=>16667,
+31286=>16668,
+31288=>16669,
+31290=>16670,
+31294=>16671,
+31297=>16672,
+31298=>16673,
+31299=>16674,
+31300=>16675,
+31301=>16676,
+31303=>16677,
+31304=>16678,
+31305=>16679,
+31306=>16680,
+31307=>16681,
+31311=>16682,
+31312=>16683,
+31314=>16684,
+31315=>16685,
+31316=>16686,
+31317=>16687,
+31318=>16688,
+31320=>16689,
+31321=>16690,
+31322=>16691,
+31323=>16692,
+31324=>16693,
+31325=>16694,
+31326=>16695,
+31327=>16696,
+31328=>16697,
+31331=>16698,
+31332=>16699,
+31333=>16700,
+31334=>16701,
+31335=>16702,
+31336=>16703,
+31338=>16704,
+31340=>16705,
+31341=>16706,
+31342=>16707,
+31343=>16708,
+31345=>16709,
+31346=>16710,
+31347=>16711,
+31349=>16712,
+31355=>16713,
+31356=>16714,
+31357=>16715,
+31358=>16716,
+31362=>16717,
+31365=>16718,
+31367=>16719,
+31369=>16720,
+31370=>16721,
+31371=>16722,
+31372=>16723,
+31374=>16724,
+31375=>16725,
+31376=>16726,
+31379=>16727,
+31380=>16728,
+31385=>16729,
+31386=>16730,
+31387=>16731,
+31390=>16732,
+31393=>16733,
+31394=>16734,
+31395=>16735,
+31396=>16736,
+31399=>16737,
+31403=>16738,
+31407=>16739,
+31408=>16740,
+31409=>16741,
+31410=>16742,
+31412=>16743,
+31413=>16744,
+31415=>16745,
+31416=>16746,
+31417=>16747,
+31419=>16748,
+31420=>16749,
+31421=>16750,
+31422=>16751,
+31424=>16752,
+31425=>16753,
+31426=>16754,
+31427=>16755,
+31430=>16756,
+31433=>16757,
+31436=>16758,
+31437=>16759,
+31438=>16760,
+31439=>16761,
+31440=>16762,
+31441=>16763,
+31442=>16764,
+31443=>16765,
+31444=>16766,
+31445=>16767,
+31447=>16768,
+31448=>16769,
+31450=>16770,
+31451=>16771,
+31452=>16772,
+31453=>16773,
+31457=>16774,
+31458=>16775,
+31460=>16776,
+31463=>16777,
+31464=>16778,
+31465=>16779,
+31467=>16780,
+31468=>16781,
+31470=>16782,
+31472=>16783,
+31473=>16784,
+31474=>16785,
+31475=>16786,
+31476=>16787,
+31477=>16788,
+31479=>16789,
+31480=>16790,
+31483=>16791,
+31484=>16792,
+31486=>16793,
+31488=>16794,
+31489=>16795,
+31490=>16796,
+31493=>16797,
+31495=>16798,
+31497=>16799,
+31500=>16800,
+31501=>16801,
+31502=>16802,
+31504=>16803,
+31506=>16804,
+31507=>16805,
+31510=>16806,
+31511=>16807,
+31512=>16808,
+31514=>16809,
+31516=>16810,
+31517=>16811,
+31519=>16812,
+31521=>16813,
+31522=>16814,
+31523=>16815,
+31527=>16816,
+31529=>16817,
+31533=>16818,
+31535=>16819,
+31536=>16820,
+31538=>16821,
+31540=>16822,
+31541=>16823,
+31542=>16824,
+31543=>16825,
+31545=>16826,
+31547=>16827,
+31549=>16828,
+31551=>16829,
+31552=>16830,
+31553=>16831,
+31554=>16832,
+31555=>16833,
+31556=>16834,
+31560=>16835,
+31562=>16836,
+31565=>16837,
+31566=>16838,
+31571=>16839,
+31573=>16840,
+31575=>16841,
+31577=>16842,
+31580=>16843,
+31582=>16844,
+31583=>16845,
+31585=>16846,
+31587=>16847,
+31588=>16848,
+31589=>16849,
+31590=>16850,
+31592=>16851,
+31593=>16852,
+31594=>16853,
+31595=>16854,
+31596=>16855,
+31597=>16856,
+31599=>16857,
+31600=>16858,
+31603=>16859,
+31604=>16860,
+31606=>16861,
+31608=>16862,
+31610=>16863,
+31612=>16864,
+31613=>16865,
+31615=>16866,
+31617=>16867,
+31618=>16868,
+31619=>16869,
+31620=>16870,
+31622=>16871,
+31623=>16872,
+31624=>16873,
+31625=>16874,
+31626=>16875,
+31628=>16876,
+31630=>16877,
+31631=>16878,
+31633=>16879,
+31634=>16880,
+31635=>16881,
+31638=>16882,
+31640=>16883,
+31641=>16884,
+31642=>16885,
+31643=>16886,
+31646=>16887,
+31647=>16888,
+31648=>16889,
+31651=>16890,
+31652=>16891,
+31653=>16892,
+31662=>16893,
+31663=>16894,
+31664=>16895,
+31666=>16896,
+31667=>16897,
+31669=>16898,
+31670=>16899,
+31671=>16900,
+31673=>16901,
+31674=>16902,
+31675=>16903,
+31676=>16904,
+31677=>16905,
+31678=>16906,
+31679=>16907,
+31682=>16908,
+31683=>16909,
+31685=>16910,
+31688=>16911,
+31690=>16912,
+31693=>16913,
+31694=>16914,
+31695=>16915,
+31696=>16916,
+31698=>16917,
+31700=>16918,
+31701=>16919,
+31702=>16920,
+31703=>16921,
+31704=>16922,
+31707=>16923,
+31708=>16924,
+31710=>16925,
+31711=>16926,
+31712=>16927,
+31714=>16928,
+31715=>16929,
+31719=>16930,
+31720=>16931,
+31723=>16932,
+31724=>16933,
+31725=>16934,
+31727=>16935,
+31728=>16936,
+31730=>16937,
+31732=>16938,
+31733=>16939,
+31734=>16940,
+31736=>16941,
+31737=>16942,
+31738=>16943,
+31739=>16944,
+31741=>16945,
+31743=>16946,
+31745=>16947,
+31746=>16948,
+31747=>16949,
+31748=>16950,
+31749=>16951,
+31750=>16952,
+31752=>16953,
+31753=>16954,
+31754=>16955,
+31758=>16956,
+31760=>16957,
+31761=>16958,
+31762=>16959,
+31763=>16960,
+31764=>16961,
+31765=>16962,
+31767=>16963,
+31768=>16964,
+31769=>16965,
+31770=>16966,
+31771=>16967,
+31772=>16968,
+31773=>16969,
+31776=>16970,
+31778=>16971,
+31780=>16972,
+31781=>16973,
+31784=>16974,
+31785=>16975,
+31788=>16976,
+31789=>16977,
+31790=>16978,
+31791=>16979,
+31792=>16980,
+31793=>16981,
+31794=>16982,
+31795=>16983,
+31796=>16984,
+31797=>16985,
+31798=>16986,
+31799=>16987,
+31801=>16988,
+31802=>16989,
+31803=>16990,
+31804=>16991,
+31810=>16992,
+31812=>16993,
+31813=>16994,
+31814=>16995,
+31815=>16996,
+31816=>16997,
+31817=>16998,
+31818=>16999,
+31819=>17000,
+31822=>17001,
+31823=>17002,
+31824=>17003,
+31825=>17004,
+31826=>17005,
+31827=>17006,
+31828=>17007,
+31829=>17008,
+31830=>17009,
+31831=>17010,
+31832=>17011,
+31833=>17012,
+31834=>17013,
+31835=>17014,
+31837=>17015,
+31838=>17016,
+31841=>17017,
+31842=>17018,
+31843=>17019,
+31845=>17020,
+31846=>17021,
+31847=>17022,
+31848=>17023,
+31851=>17024,
+31853=>17025,
+31855=>17026,
+31856=>17027,
+31857=>17028,
+31861=>17029,
+31862=>17030,
+31863=>17031,
+31864=>17032,
+31865=>17033,
+31866=>17034,
+31870=>17035,
+31871=>17036,
+31872=>17037,
+31873=>17038,
+31874=>17039,
+31875=>17040,
+31876=>17041,
+31877=>17042,
+31878=>17043,
+31879=>17044,
+31880=>17045,
+31882=>17046,
+31883=>17047,
+31884=>17048,
+31885=>17049,
+31886=>17050,
+31887=>17051,
+31888=>17052,
+31891=>17053,
+31892=>17054,
+31894=>17055,
+31897=>17056,
+31898=>17057,
+31899=>17058,
+31904=>17059,
+31905=>17060,
+31907=>17061,
+31910=>17062,
+31911=>17063,
+31912=>17064,
+31913=>17065,
+31915=>17066,
+31916=>17067,
+31917=>17068,
+31919=>17069,
+31920=>17070,
+31924=>17071,
+31925=>17072,
+31926=>17073,
+31927=>17074,
+31928=>17075,
+31930=>17076,
+31931=>17077,
+31935=>17078,
+31936=>17079,
+31938=>17080,
+31939=>17081,
+31940=>17082,
+31942=>17083,
+31945=>17084,
+31947=>17085,
+31950=>17086,
+31951=>17087,
+31952=>17088,
+31953=>17089,
+31954=>17090,
+31955=>17091,
+31956=>17092,
+31960=>17093,
+31962=>17094,
+31963=>17095,
+31969=>17096,
+31970=>17097,
+31971=>17098,
+31972=>17099,
+31973=>17100,
+31974=>17101,
+31977=>17102,
+31978=>17103,
+31979=>17104,
+31980=>17105,
+31981=>17106,
+31982=>17107,
+31985=>17108,
+31987=>17109,
+31989=>17110,
+31991=>17111,
+31994=>17112,
+31996=>17113,
+31997=>17114,
+31999=>17115,
+32001=>17116,
+32003=>17117,
+32012=>17118,
+32014=>17119,
+32015=>17120,
+32017=>17121,
+32018=>17122,
+32022=>17123,
+32024=>17124,
+32029=>17125,
+32030=>17126,
+32031=>17127,
+32035=>17128,
+32036=>17129,
+32037=>17130,
+32038=>17131,
+32040=>17132,
+32041=>17133,
+32042=>17134,
+32044=>17135,
+32045=>17136,
+32046=>17137,
+32052=>17138,
+32053=>17139,
+32054=>17140,
+32055=>17141,
+32056=>17142,
+32059=>17143,
+32061=>17144,
+32062=>17145,
+32065=>17146,
+32067=>17147,
+32069=>17148,
+32071=>17149,
+32072=>17150,
+32073=>17151,
+32074=>17152,
+32075=>17153,
+32076=>17154,
+32077=>17155,
+32079=>17156,
+32081=>17157,
+32082=>17158,
+32083=>17159,
+32084=>17160,
+32085=>17161,
+32086=>17162,
+32087=>17163,
+32088=>17164,
+32089=>17165,
+32090=>17166,
+32091=>17167,
+32092=>17168,
+32095=>17169,
+32096=>17170,
+32099=>17171,
+32100=>17172,
+32101=>17173,
+32103=>17174,
+32105=>17175,
+32106=>17176,
+32107=>17177,
+32108=>17178,
+32109=>17179,
+32111=>17180,
+32112=>17181,
+32116=>17182,
+32117=>17183,
+32120=>17184,
+32122=>17185,
+32123=>17186,
+32124=>17187,
+32125=>17188,
+32126=>17189,
+32127=>17190,
+32128=>17191,
+32130=>17192,
+32132=>17193,
+32133=>17194,
+32135=>17195,
+32138=>17196,
+32139=>17197,
+32140=>17198,
+32141=>17199,
+32142=>17200,
+32144=>17201,
+32145=>17202,
+32146=>17203,
+32148=>17204,
+32149=>17205,
+32150=>17206,
+32151=>17207,
+32152=>17208,
+32153=>17209,
+32154=>17210,
+32155=>17211,
+32157=>17212,
+32159=>17213,
+32160=>17214,
+32161=>17215,
+32164=>17216,
+32165=>17217,
+32167=>17218,
+32168=>17219,
+32169=>17220,
+32170=>17221,
+32175=>17222,
+32181=>17223,
+32182=>17224,
+32183=>17225,
+32188=>17226,
+32192=>17227,
+32193=>17228,
+32194=>17229,
+32195=>17230,
+32197=>17231,
+32198=>17232,
+32200=>17233,
+32201=>17234,
+32204=>17235,
+32205=>17236,
+32206=>17237,
+32207=>17238,
+32208=>17239,
+32211=>17240,
+32213=>17241,
+32214=>17242,
+32218=>17243,
+32219=>17244,
+32220=>17245,
+32223=>17246,
+32226=>17247,
+32228=>17248,
+32229=>17249,
+32231=>17250,
+32234=>17251,
+32235=>17252,
+32237=>17253,
+32238=>17254,
+32240=>17255,
+32243=>17256,
+32245=>17257,
+32247=>17258,
+32248=>17259,
+32250=>17260,
+32252=>17261,
+32253=>17262,
+32254=>17263,
+32255=>17264,
+32256=>17265,
+32257=>17266,
+32258=>17267,
+32259=>17268,
+32260=>17269,
+32261=>17270,
+32262=>17271,
+32263=>17272,
+32268=>17273,
+32269=>17274,
+32270=>17275,
+32271=>17276,
+32274=>17277,
+32275=>17278,
+32276=>17279,
+32277=>17280,
+32278=>17281,
+32279=>17282,
+32280=>17283,
+32281=>17284,
+32282=>17285,
+32284=>17286,
+32288=>17287,
+32289=>17288,
+32290=>17289,
+32292=>17290,
+32293=>17291,
+32294=>17292,
+32296=>17293,
+32297=>17294,
+32298=>17295,
+32300=>17296,
+32303=>17297,
+32304=>17298,
+32307=>17299,
+32312=>17300,
+32314=>17301,
+32316=>17302,
+32319=>17303,
+32320=>17304,
+32322=>17305,
+32323=>17306,
+32324=>17307,
+32328=>17308,
+32329=>17309,
+32330=>17310,
+32331=>17311,
+32332=>17312,
+32333=>17313,
+32334=>17314,
+32335=>17315,
+32336=>17316,
+32337=>17317,
+32339=>17318,
+32342=>17319,
+32343=>17320,
+32344=>17321,
+32345=>17322,
+32347=>17323,
+32348=>17324,
+32349=>17325,
+32351=>17326,
+32352=>17327,
+32353=>17328,
+32355=>17329,
+32356=>17330,
+32357=>17331,
+32358=>17332,
+32359=>17333,
+32360=>17334,
+32364=>17335,
+32369=>17336,
+32370=>17337,
+32372=>17338,
+32373=>17339,
+32374=>17340,
+32375=>17341,
+32376=>17342,
+32378=>17343,
+32379=>17344,
+32383=>17345,
+32384=>17346,
+32385=>17347,
+32387=>17348,
+32388=>17349,
+32389=>17350,
+32390=>17351,
+32391=>17352,
+32393=>17353,
+32395=>17354,
+32398=>17355,
+32400=>17356,
+32401=>17357,
+32402=>17358,
+32405=>17359,
+32407=>17360,
+32409=>17361,
+32410=>17362,
+32413=>17363,
+32414=>17364,
+32430=>17365,
+32436=>17366,
+32443=>17367,
+32444=>17368,
+32470=>17369,
+32484=>17370,
+32492=>17371,
+32505=>17372,
+32522=>17373,
+32528=>17374,
+32542=>17375,
+32567=>17376,
+32569=>17377,
+32571=>17378,
+32572=>17379,
+32573=>17380,
+32574=>17381,
+32575=>17382,
+32576=>17383,
+32577=>17384,
+32579=>17385,
+32582=>17386,
+32583=>17387,
+32584=>17388,
+32585=>17389,
+32586=>17390,
+32587=>17391,
+32589=>17392,
+32591=>17393,
+32594=>17394,
+32595=>17395,
+32598=>17396,
+32601=>17397,
+32603=>17398,
+32604=>17399,
+32605=>17400,
+32606=>17401,
+32608=>17402,
+32611=>17403,
+32612=>17404,
+32613=>17405,
+32614=>17406,
+32615=>17407,
+32619=>17408,
+32620=>17409,
+32621=>17410,
+32623=>17411,
+32627=>17412,
+32629=>17413,
+32630=>17414,
+32632=>17415,
+32634=>17416,
+32635=>17417,
+32636=>17418,
+32637=>17419,
+32639=>17420,
+32640=>17421,
+32642=>17422,
+32643=>17423,
+32644=>17424,
+32647=>17425,
+32649=>17426,
+32651=>17427,
+32653=>17428,
+32655=>17429,
+32656=>17430,
+32657=>17431,
+32658=>17432,
+32659=>17433,
+32661=>17434,
+32662=>17435,
+32663=>17436,
+32664=>17437,
+32665=>17438,
+32667=>17439,
+32668=>17440,
+32672=>17441,
+32674=>17442,
+32675=>17443,
+32678=>17444,
+32680=>17445,
+32682=>17446,
+32683=>17447,
+32684=>17448,
+32685=>17449,
+32686=>17450,
+32689=>17451,
+32691=>17452,
+32692=>17453,
+32693=>17454,
+32694=>17455,
+32695=>17456,
+32698=>17457,
+32699=>17458,
+32702=>17459,
+32704=>17460,
+32706=>17461,
+32707=>17462,
+32708=>17463,
+32710=>17464,
+32711=>17465,
+32712=>17466,
+32713=>17467,
+32715=>17468,
+32717=>17469,
+32719=>17470,
+32720=>17471,
+32721=>17472,
+32723=>17473,
+32726=>17474,
+32727=>17475,
+32729=>17476,
+32730=>17477,
+32731=>17478,
+32732=>17479,
+32733=>17480,
+32734=>17481,
+32738=>17482,
+32739=>17483,
+32740=>17484,
+32743=>17485,
+32744=>17486,
+32746=>17487,
+32747=>17488,
+32748=>17489,
+32749=>17490,
+32751=>17491,
+32754=>17492,
+32756=>17493,
+32757=>17494,
+32758=>17495,
+32759=>17496,
+32760=>17497,
+32762=>17498,
+32765=>17499,
+32766=>17500,
+32767=>17501,
+32770=>17502,
+32775=>17503,
+32776=>17504,
+32777=>17505,
+32778=>17506,
+32782=>17507,
+32783=>17508,
+32785=>17509,
+32787=>17510,
+32794=>17511,
+32795=>17512,
+32797=>17513,
+32798=>17514,
+32799=>17515,
+32801=>17516,
+32803=>17517,
+32804=>17518,
+32811=>17519,
+32813=>17520,
+32815=>17521,
+32816=>17522,
+32818=>17523,
+32820=>17524,
+32825=>17525,
+32826=>17526,
+32828=>17527,
+32830=>17528,
+32832=>17529,
+32833=>17530,
+32836=>17531,
+32837=>17532,
+32839=>17533,
+32840=>17534,
+32841=>17535,
+32846=>17536,
+32847=>17537,
+32848=>17538,
+32849=>17539,
+32851=>17540,
+32853=>17541,
+32855=>17542,
+32857=>17543,
+32859=>17544,
+32860=>17545,
+32861=>17546,
+32863=>17547,
+32864=>17548,
+32865=>17549,
+32866=>17550,
+32867=>17551,
+32868=>17552,
+32869=>17553,
+32870=>17554,
+32871=>17555,
+32872=>17556,
+32875=>17557,
+32876=>17558,
+32877=>17559,
+32878=>17560,
+32884=>17561,
+32888=>17562,
+32890=>17563,
+32891=>17564,
+32892=>17565,
+32897=>17566,
+32898=>17567,
+32904=>17568,
+32906=>17569,
+32909=>17570,
+32910=>17571,
+32911=>17572,
+32912=>17573,
+32913=>17574,
+32914=>17575,
+32916=>17576,
+32917=>17577,
+32919=>17578,
+32921=>17579,
+32926=>17580,
+32931=>17581,
+32934=>17582,
+32935=>17583,
+32936=>17584,
+32940=>17585,
+32944=>17586,
+32947=>17587,
+32949=>17588,
+32950=>17589,
+32952=>17590,
+32953=>17591,
+32955=>17592,
+32965=>17593,
+32967=>17594,
+32968=>17595,
+32969=>17596,
+32970=>17597,
+32971=>17598,
+32975=>17599,
+32976=>17600,
+32977=>17601,
+32978=>17602,
+32979=>17603,
+32980=>17604,
+32981=>17605,
+32984=>17606,
+32991=>17607,
+32992=>17608,
+32994=>17609,
+32995=>17610,
+32998=>17611,
+33006=>17612,
+33013=>17613,
+33015=>17614,
+33017=>17615,
+33019=>17616,
+33022=>17617,
+33023=>17618,
+33024=>17619,
+33025=>17620,
+33027=>17621,
+33028=>17622,
+33031=>17623,
+33032=>17624,
+33035=>17625,
+33036=>17626,
+33045=>17627,
+33047=>17628,
+33049=>17629,
+33052=>17630,
+33053=>17631,
+33055=>17632,
+33056=>17633,
+33057=>17634,
+33058=>17635,
+33059=>17636,
+33060=>17637,
+33061=>17638,
+33062=>17639,
+33063=>17640,
+33064=>17641,
+33065=>17642,
+33066=>17643,
+33067=>17644,
+33069=>17645,
+33070=>17646,
+33072=>17647,
+33075=>17648,
+33076=>17649,
+33077=>17650,
+33079=>17651,
+33082=>17652,
+33083=>17653,
+33084=>17654,
+33085=>17655,
+33087=>17656,
+33088=>17657,
+33089=>17658,
+33090=>17659,
+33091=>17660,
+33092=>17661,
+33093=>17662,
+33095=>17663,
+33097=>17664,
+33101=>17665,
+33103=>17666,
+33106=>17667,
+33111=>17668,
+33112=>17669,
+33115=>17670,
+33116=>17671,
+33117=>17672,
+33118=>17673,
+33119=>17674,
+33122=>17675,
+33123=>17676,
+33124=>17677,
+33128=>17678,
+33130=>17679,
+33132=>17680,
+33135=>17681,
+33138=>17682,
+33139=>17683,
+33141=>17684,
+33142=>17685,
+33143=>17686,
+33153=>17687,
+33155=>17688,
+33156=>17689,
+33157=>17690,
+33158=>17691,
+33159=>17692,
+33161=>17693,
+33163=>17694,
+33164=>17695,
+33165=>17696,
+33166=>17697,
+33168=>17698,
+33170=>17699,
+33171=>17700,
+33172=>17701,
+33173=>17702,
+33174=>17703,
+33175=>17704,
+33177=>17705,
+33182=>17706,
+33183=>17707,
+33185=>17708,
+33186=>17709,
+33188=>17710,
+33189=>17711,
+33191=>17712,
+33195=>17713,
+33196=>17714,
+33197=>17715,
+33198=>17716,
+33199=>17717,
+33200=>17718,
+33201=>17719,
+33202=>17720,
+33204=>17721,
+33205=>17722,
+33206=>17723,
+33207=>17724,
+33208=>17725,
+33209=>17726,
+33212=>17727,
+33220=>17728,
+33221=>17729,
+33223=>17730,
+33224=>17731,
+33227=>17732,
+33230=>17733,
+33232=>17734,
+33233=>17735,
+33234=>17736,
+33235=>17737,
+33236=>17738,
+33237=>17739,
+33238=>17740,
+33239=>17741,
+33241=>17742,
+33243=>17743,
+33244=>17744,
+33245=>17745,
+33246=>17746,
+33249=>17747,
+33250=>17748,
+33252=>17749,
+33253=>17750,
+33254=>17751,
+33257=>17752,
+33259=>17753,
+33262=>17754,
+33263=>17755,
+33264=>17756,
+33265=>17757,
+33266=>17758,
+33269=>17759,
+33270=>17760,
+33271=>17761,
+33272=>17762,
+33273=>17763,
+33277=>17764,
+33279=>17765,
+33283=>17766,
+33291=>17767,
+33294=>17768,
+33295=>17769,
+33297=>17770,
+33299=>17771,
+33301=>17772,
+33302=>17773,
+33303=>17774,
+33304=>17775,
+33305=>17776,
+33306=>17777,
+33309=>17778,
+33312=>17779,
+33316=>17780,
+33317=>17781,
+33318=>17782,
+33319=>17783,
+33321=>17784,
+33326=>17785,
+33330=>17786,
+33338=>17787,
+33340=>17788,
+33341=>17789,
+33343=>17790,
+33344=>17791,
+33345=>17792,
+33346=>17793,
+33347=>17794,
+33349=>17795,
+33350=>17796,
+33352=>17797,
+33354=>17798,
+33356=>17799,
+33357=>17800,
+33358=>17801,
+33360=>17802,
+33361=>17803,
+33362=>17804,
+33363=>17805,
+33364=>17806,
+33365=>17807,
+33366=>17808,
+33367=>17809,
+33371=>17810,
+33372=>17811,
+33373=>17812,
+33374=>17813,
+33376=>17814,
+33377=>17815,
+33378=>17816,
+33379=>17817,
+33381=>17818,
+33383=>17819,
+33385=>17820,
+33386=>17821,
+33388=>17822,
+33389=>17823,
+33397=>17824,
+33398=>17825,
+12171=>17826,
+33400=>17826,
+33403=>17827,
+33404=>17828,
+33408=>17829,
+33409=>17830,
+33411=>17831,
+33413=>17832,
+33414=>17833,
+33415=>17834,
+33417=>17835,
+33420=>17836,
+33424=>17837,
+33427=>17838,
+33428=>17839,
+33429=>17840,
+33430=>17841,
+33434=>17842,
+33435=>17843,
+33438=>17844,
+33440=>17845,
+33442=>17846,
+33443=>17847,
+33447=>17848,
+33458=>17849,
+33461=>17850,
+33462=>17851,
+33466=>17852,
+33468=>17853,
+33471=>17854,
+33472=>17855,
+33474=>17856,
+33475=>17857,
+33477=>17858,
+33478=>17859,
+33481=>17860,
+33488=>17861,
+33494=>17862,
+33497=>17863,
+33498=>17864,
+33501=>17865,
+33506=>17866,
+33512=>17867,
+33513=>17868,
+33514=>17869,
+33516=>17870,
+33517=>17871,
+33518=>17872,
+33520=>17873,
+33522=>17874,
+33523=>17875,
+33525=>17876,
+33526=>17877,
+33528=>17878,
+33530=>17879,
+33532=>17880,
+33533=>17881,
+33534=>17882,
+33535=>17883,
+33536=>17884,
+33546=>17885,
+33547=>17886,
+33549=>17887,
+33552=>17888,
+33554=>17889,
+33555=>17890,
+33558=>17891,
+33560=>17892,
+33561=>17893,
+33565=>17894,
+33566=>17895,
+33567=>17896,
+33568=>17897,
+33569=>17898,
+33570=>17899,
+33571=>17900,
+33572=>17901,
+33573=>17902,
+33574=>17903,
+33577=>17904,
+33578=>17905,
+33582=>17906,
+33584=>17907,
+33586=>17908,
+33591=>17909,
+33595=>17910,
+33597=>17911,
+33598=>17912,
+33599=>17913,
+33601=>17914,
+33602=>17915,
+33604=>17916,
+33605=>17917,
+33608=>17918,
+33610=>17919,
+33611=>17920,
+33612=>17921,
+33613=>17922,
+33614=>17923,
+33619=>17924,
+33621=>17925,
+33622=>17926,
+33623=>17927,
+33624=>17928,
+33625=>17929,
+33629=>17930,
+33634=>17931,
+33648=>17932,
+33649=>17933,
+33650=>17934,
+33651=>17935,
+33652=>17936,
+33653=>17937,
+33654=>17938,
+33657=>17939,
+33658=>17940,
+33662=>17941,
+33663=>17942,
+33664=>17943,
+33665=>17944,
+33666=>17945,
+33667=>17946,
+33668=>17947,
+33671=>17948,
+33672=>17949,
+33675=>17950,
+33676=>17951,
+33677=>17952,
+33679=>17953,
+33680=>17954,
+33681=>17955,
+33684=>17956,
+33685=>17957,
+33687=>17958,
+33689=>17959,
+33690=>17960,
+33693=>17961,
+33695=>17962,
+33697=>17963,
+33699=>17964,
+33700=>17965,
+33701=>17966,
+33702=>17967,
+33708=>17968,
+33709=>17969,
+33710=>17970,
+33711=>17971,
+33717=>17972,
+33723=>17973,
+33726=>17974,
+33727=>17975,
+33730=>17976,
+33731=>17977,
+33732=>17978,
+33734=>17979,
+33736=>17980,
+33737=>17981,
+33739=>17982,
+33741=>17983,
+33742=>17984,
+33744=>17985,
+33745=>17986,
+33746=>17987,
+33747=>17988,
+33749=>17989,
+33751=>17990,
+33753=>17991,
+33754=>17992,
+33755=>17993,
+33758=>17994,
+33762=>17995,
+33763=>17996,
+33764=>17997,
+33766=>17998,
+33767=>17999,
+33768=>18000,
+33771=>18001,
+33772=>18002,
+33773=>18003,
+33774=>18004,
+33779=>18005,
+33780=>18006,
+33781=>18007,
+33782=>18008,
+33783=>18009,
+33786=>18010,
+33787=>18011,
+33788=>18012,
+33790=>18013,
+33791=>18014,
+33792=>18015,
+33794=>18016,
+33797=>18017,
+33800=>18018,
+33801=>18019,
+33808=>18020,
+33810=>18021,
+33811=>18022,
+33812=>18023,
+33813=>18024,
+33814=>18025,
+33815=>18026,
+33817=>18027,
+33818=>18028,
+33819=>18029,
+33822=>18030,
+33823=>18031,
+33824=>18032,
+33825=>18033,
+33826=>18034,
+33827=>18035,
+33833=>18036,
+33834=>18037,
+33835=>18038,
+33837=>18039,
+33838=>18040,
+33839=>18041,
+33840=>18042,
+33842=>18043,
+33843=>18044,
+33844=>18045,
+33846=>18046,
+33847=>18047,
+33849=>18048,
+33850=>18049,
+33851=>18050,
+33854=>18051,
+33855=>18052,
+33856=>18053,
+33857=>18054,
+33858=>18055,
+33859=>18056,
+33860=>18057,
+33861=>18058,
+33863=>18059,
+33864=>18060,
+33866=>18061,
+33867=>18062,
+33868=>18063,
+33869=>18064,
+33870=>18065,
+33871=>18066,
+33872=>18067,
+33875=>18068,
+33876=>18069,
+33877=>18070,
+33878=>18071,
+33880=>18072,
+33885=>18073,
+33886=>18074,
+33887=>18075,
+33888=>18076,
+33890=>18077,
+33893=>18078,
+33895=>18079,
+33896=>18080,
+33898=>18081,
+33902=>18082,
+33904=>18083,
+33906=>18084,
+33908=>18085,
+33913=>18086,
+33915=>18087,
+33916=>18088,
+33917=>18089,
+33918=>18090,
+33919=>18091,
+33920=>18092,
+33921=>18093,
+33923=>18094,
+33924=>18095,
+33925=>18096,
+33926=>18097,
+33930=>18098,
+33933=>18099,
+33935=>18100,
+33936=>18101,
+33937=>18102,
+33938=>18103,
+33941=>18104,
+33942=>18105,
+33944=>18106,
+33946=>18107,
+33947=>18108,
+33949=>18109,
+33950=>18110,
+33951=>18111,
+33952=>18112,
+33954=>18113,
+33955=>18114,
+33956=>18115,
+33957=>18116,
+33958=>18117,
+33959=>18118,
+33960=>18119,
+33961=>18120,
+33962=>18121,
+33963=>18122,
+33964=>18123,
+33965=>18124,
+33966=>18125,
+33968=>18126,
+33969=>18127,
+33971=>18128,
+33973=>18129,
+33974=>18130,
+33975=>18131,
+33979=>18132,
+33982=>18133,
+33986=>18134,
+33987=>18135,
+33989=>18136,
+33990=>18137,
+33991=>18138,
+33992=>18139,
+33996=>18140,
+33998=>18141,
+33999=>18142,
+34002=>18143,
+34004=>18144,
+34005=>18145,
+34007=>18146,
+34008=>18147,
+34009=>18148,
+34010=>18149,
+34011=>18150,
+34012=>18151,
+34014=>18152,
+34017=>18153,
+34018=>18154,
+34020=>18155,
+34023=>18156,
+34024=>18157,
+34025=>18158,
+34026=>18159,
+34027=>18160,
+34029=>18161,
+34033=>18162,
+34034=>18163,
+34035=>18164,
+34036=>18165,
+34037=>18166,
+34038=>18167,
+34039=>18168,
+34040=>18169,
+34041=>18170,
+34042=>18171,
+34043=>18172,
+34046=>18173,
+34048=>18174,
+34049=>18175,
+34050=>18176,
+34051=>18177,
+34052=>18178,
+34053=>18179,
+34054=>18180,
+34055=>18181,
+34056=>18182,
+34057=>18183,
+34058=>18184,
+34059=>18185,
+34061=>18186,
+34062=>18187,
+34063=>18188,
+34064=>18189,
+34066=>18190,
+34069=>18191,
+34070=>18192,
+34072=>18193,
+34073=>18194,
+34075=>18195,
+34076=>18196,
+34077=>18197,
+34080=>18198,
+34082=>18199,
+34084=>18200,
+34085=>18201,
+34087=>18202,
+34088=>18203,
+34089=>18204,
+34090=>18205,
+34094=>18206,
+34095=>18207,
+34096=>18208,
+34097=>18209,
+34098=>18210,
+34099=>18211,
+34100=>18212,
+34101=>18213,
+34102=>18214,
+34110=>18215,
+34111=>18216,
+34112=>18217,
+34114=>18218,
+34116=>18219,
+34117=>18220,
+34119=>18221,
+34123=>18222,
+34124=>18223,
+34125=>18224,
+34127=>18225,
+34128=>18226,
+34129=>18227,
+34132=>18228,
+34135=>18229,
+34138=>18230,
+34139=>18231,
+34140=>18232,
+34141=>18233,
+34143=>18234,
+34144=>18235,
+34145=>18236,
+34147=>18237,
+34149=>18238,
+34150=>18239,
+34151=>18240,
+34155=>18241,
+34156=>18242,
+34158=>18243,
+34159=>18244,
+34160=>18245,
+34161=>18246,
+34163=>18247,
+34165=>18248,
+34166=>18249,
+34168=>18250,
+34172=>18251,
+34173=>18252,
+34175=>18253,
+34176=>18254,
+34177=>18255,
+34178=>18256,
+34179=>18257,
+34182=>18258,
+34185=>18259,
+34187=>18260,
+34189=>18261,
+34190=>18262,
+34192=>18263,
+34194=>18264,
+34195=>18265,
+34197=>18266,
+34198=>18267,
+34199=>18268,
+34200=>18269,
+34201=>18270,
+34202=>18271,
+34205=>18272,
+34206=>18273,
+34208=>18274,
+34209=>18275,
+34210=>18276,
+34211=>18277,
+34213=>18278,
+34215=>18279,
+34219=>18280,
+34220=>18281,
+34221=>18282,
+34225=>18283,
+34226=>18284,
+34227=>18285,
+34228=>18286,
+34229=>18287,
+34230=>18288,
+34232=>18289,
+34235=>18290,
+34236=>18291,
+34237=>18292,
+34238=>18293,
+34239=>18294,
+34240=>18295,
+34242=>18296,
+34243=>18297,
+34244=>18298,
+34245=>18299,
+34246=>18300,
+34247=>18301,
+34248=>18302,
+34250=>18303,
+34251=>18304,
+34252=>18305,
+34257=>18306,
+34258=>18307,
+34260=>18308,
+34262=>18309,
+34263=>18310,
+34264=>18311,
+34265=>18312,
+34266=>18313,
+34267=>18314,
+34270=>18315,
+34271=>18316,
+34272=>18317,
+34273=>18318,
+34274=>18319,
+34275=>18320,
+34278=>18321,
+34279=>18322,
+34280=>18323,
+34283=>18324,
+34284=>18325,
+34285=>18326,
+34286=>18327,
+34287=>18328,
+34288=>18329,
+34289=>18330,
+34290=>18331,
+34291=>18332,
+34293=>18333,
+34295=>18334,
+34296=>18335,
+34300=>18336,
+34301=>18337,
+34302=>18338,
+34304=>18339,
+34305=>18340,
+34306=>18341,
+34307=>18342,
+34312=>18343,
+34313=>18344,
+34314=>18345,
+34316=>18346,
+34317=>18347,
+34318=>18348,
+34319=>18349,
+34320=>18350,
+34322=>18351,
+34323=>18352,
+34324=>18353,
+34325=>18354,
+34327=>18355,
+34328=>18356,
+34329=>18357,
+34331=>18358,
+34332=>18359,
+34333=>18360,
+34335=>18361,
+34336=>18362,
+34337=>18363,
+34339=>18364,
+34340=>18365,
+34341=>18366,
+34342=>18367,
+34344=>18368,
+34346=>18369,
+34347=>18370,
+34348=>18371,
+34350=>18372,
+34351=>18373,
+34352=>18374,
+34353=>18375,
+34354=>18376,
+34355=>18377,
+34356=>18378,
+34357=>18379,
+34358=>18380,
+34359=>18381,
+34361=>18382,
+34363=>18383,
+34365=>18384,
+34366=>18385,
+34368=>18386,
+34369=>18387,
+34370=>18388,
+34371=>18389,
+34372=>18390,
+34373=>18391,
+34374=>18392,
+34375=>18393,
+34376=>18394,
+34377=>18395,
+34378=>18396,
+34379=>18397,
+34380=>18398,
+34386=>18399,
+34387=>18400,
+34390=>18401,
+34391=>18402,
+34392=>18403,
+34393=>18404,
+34395=>18405,
+34397=>18406,
+34400=>18407,
+34401=>18408,
+34403=>18409,
+34404=>18410,
+34405=>18411,
+34406=>18412,
+34408=>18413,
+34409=>18414,
+34410=>18415,
+34413=>18416,
+34415=>18417,
+34416=>18418,
+34418=>18419,
+34419=>18420,
+34420=>18421,
+34421=>18422,
+34422=>18423,
+34423=>18424,
+34424=>18425,
+34435=>18426,
+34436=>18427,
+34437=>18428,
+34438=>18429,
+34439=>18430,
+34440=>18431,
+34441=>18432,
+34446=>18433,
+34447=>18434,
+34448=>18435,
+34449=>18436,
+34450=>18437,
+34452=>18438,
+34454=>18439,
+34455=>18440,
+34456=>18441,
+34457=>18442,
+34458=>18443,
+34459=>18444,
+34462=>18445,
+34463=>18446,
+34464=>18447,
+34465=>18448,
+34466=>18449,
+34469=>18450,
+34470=>18451,
+34475=>18452,
+34477=>18453,
+34478=>18454,
+34482=>18455,
+34483=>18456,
+34487=>18457,
+34488=>18458,
+34489=>18459,
+34491=>18460,
+34492=>18461,
+34493=>18462,
+34494=>18463,
+34495=>18464,
+34497=>18465,
+34498=>18466,
+34499=>18467,
+34501=>18468,
+34504=>18469,
+34508=>18470,
+34509=>18471,
+34514=>18472,
+34515=>18473,
+34517=>18474,
+34518=>18475,
+34519=>18476,
+34522=>18477,
+34524=>18478,
+34525=>18479,
+34528=>18480,
+34529=>18481,
+34530=>18482,
+34531=>18483,
+34533=>18484,
+34534=>18485,
+34535=>18486,
+34536=>18487,
+34538=>18488,
+34539=>18489,
+34540=>18490,
+34543=>18491,
+34549=>18492,
+34550=>18493,
+34551=>18494,
+34555=>18495,
+34556=>18496,
+34557=>18497,
+34559=>18498,
+34561=>18499,
+34564=>18500,
+34565=>18501,
+34571=>18502,
+34572=>18503,
+34574=>18504,
+34575=>18505,
+34576=>18506,
+34577=>18507,
+34580=>18508,
+34582=>18509,
+34585=>18510,
+34587=>18511,
+34589=>18512,
+34591=>18513,
+34592=>18514,
+34596=>18515,
+34598=>18516,
+34599=>18517,
+34600=>18518,
+34602=>18519,
+34603=>18520,
+34604=>18521,
+34605=>18522,
+34607=>18523,
+34608=>18524,
+34610=>18525,
+34611=>18526,
+34613=>18527,
+34614=>18528,
+34616=>18529,
+34617=>18530,
+34618=>18531,
+34620=>18532,
+34621=>18533,
+34624=>18534,
+34625=>18535,
+34626=>18536,
+34627=>18537,
+34628=>18538,
+34629=>18539,
+34630=>18540,
+34634=>18541,
+34635=>18542,
+34637=>18543,
+34639=>18544,
+34640=>18545,
+34641=>18546,
+34642=>18547,
+34644=>18548,
+34646=>18549,
+34648=>18550,
+34650=>18551,
+34651=>18552,
+34652=>18553,
+34653=>18554,
+34654=>18555,
+34655=>18556,
+34657=>18557,
+34658=>18558,
+34663=>18559,
+34664=>18560,
+34665=>18561,
+34666=>18562,
+34667=>18563,
+34668=>18564,
+34669=>18565,
+34671=>18566,
+34673=>18567,
+34674=>18568,
+34675=>18569,
+34677=>18570,
+34679=>18571,
+34681=>18572,
+34682=>18573,
+34687=>18574,
+34688=>18575,
+34689=>18576,
+34694=>18577,
+34695=>18578,
+34697=>18579,
+34698=>18580,
+34700=>18581,
+34702=>18582,
+34703=>18583,
+34704=>18584,
+34705=>18585,
+34706=>18586,
+34708=>18587,
+34709=>18588,
+34710=>18589,
+34712=>18590,
+34713=>18591,
+34714=>18592,
+34715=>18593,
+34716=>18594,
+34717=>18595,
+34720=>18596,
+34721=>18597,
+34723=>18598,
+34724=>18599,
+34725=>18600,
+34726=>18601,
+34727=>18602,
+34729=>18603,
+34730=>18604,
+34734=>18605,
+34736=>18606,
+34737=>18607,
+34738=>18608,
+34740=>18609,
+34742=>18610,
+34743=>18611,
+34744=>18612,
+34745=>18613,
+34748=>18614,
+34750=>18615,
+34751=>18616,
+34753=>18617,
+34754=>18618,
+34755=>18619,
+34757=>18620,
+34759=>18621,
+34761=>18622,
+34764=>18623,
+34765=>18624,
+34767=>18625,
+34768=>18626,
+34772=>18627,
+34773=>18628,
+34774=>18629,
+34775=>18630,
+34776=>18631,
+34777=>18632,
+34778=>18633,
+34780=>18634,
+34781=>18635,
+34782=>18636,
+34783=>18637,
+34785=>18638,
+34786=>18639,
+34788=>18640,
+34790=>18641,
+34791=>18642,
+34792=>18643,
+34793=>18644,
+34795=>18645,
+34797=>18646,
+34800=>18647,
+34801=>18648,
+34803=>18649,
+34804=>18650,
+34805=>18651,
+34807=>18652,
+34808=>18653,
+34810=>18654,
+34812=>18655,
+34813=>18656,
+34815=>18657,
+34816=>18658,
+34817=>18659,
+34818=>18660,
+34820=>18661,
+34823=>18662,
+34824=>18663,
+34825=>18664,
+34827=>18665,
+34828=>18666,
+34829=>18667,
+34830=>18668,
+34831=>18669,
+34834=>18670,
+34836=>18671,
+34839=>18672,
+34840=>18673,
+34841=>18674,
+34842=>18675,
+34844=>18676,
+34845=>18677,
+34846=>18678,
+34848=>18679,
+34852=>18680,
+34853=>18681,
+34854=>18682,
+34855=>18683,
+34856=>18684,
+34857=>18685,
+34858=>18686,
+34859=>18687,
+34860=>18688,
+34861=>18689,
+34862=>18690,
+34863=>18691,
+34864=>18692,
+34867=>18693,
+34868=>18694,
+34869=>18695,
+34871=>18696,
+34872=>18697,
+34874=>18698,
+34877=>18699,
+34878=>18700,
+34879=>18701,
+34881=>18702,
+34882=>18703,
+34883=>18704,
+34887=>18705,
+34888=>18706,
+34889=>18707,
+34891=>18708,
+34894=>18709,
+34895=>18710,
+34896=>18711,
+34897=>18712,
+34898=>18713,
+34901=>18714,
+34902=>18715,
+34904=>18716,
+34906=>18717,
+34908=>18718,
+34910=>18719,
+34911=>18720,
+34912=>18721,
+34918=>18722,
+34919=>18723,
+34922=>18724,
+34925=>18725,
+34927=>18726,
+34929=>18727,
+34931=>18728,
+34932=>18729,
+34933=>18730,
+34934=>18731,
+34936=>18732,
+34938=>18733,
+34939=>18734,
+34940=>18735,
+34944=>18736,
+34947=>18737,
+34950=>18738,
+34951=>18739,
+34953=>18740,
+34954=>18741,
+34956=>18742,
+34958=>18743,
+34959=>18744,
+34960=>18745,
+34961=>18746,
+34963=>18747,
+34964=>18748,
+34965=>18749,
+34967=>18750,
+34968=>18751,
+34969=>18752,
+34970=>18753,
+34971=>18754,
+34973=>18755,
+34974=>18756,
+34975=>18757,
+34976=>18758,
+34977=>18759,
+34979=>18760,
+34981=>18761,
+34982=>18762,
+34983=>18763,
+34984=>18764,
+34985=>18765,
+34986=>18766,
+34988=>18767,
+34990=>18768,
+34991=>18769,
+34992=>18770,
+34994=>18771,
+34995=>18772,
+34996=>18773,
+34997=>18774,
+34998=>18775,
+35000=>18776,
+35001=>18777,
+35002=>18778,
+35003=>18779,
+35005=>18780,
+35006=>18781,
+35007=>18782,
+35008=>18783,
+35011=>18784,
+35012=>18785,
+35015=>18786,
+35016=>18787,
+35019=>18788,
+35020=>18789,
+35021=>18790,
+35024=>18791,
+35025=>18792,
+35027=>18793,
+35030=>18794,
+35031=>18795,
+35034=>18796,
+35035=>18797,
+35038=>18798,
+35040=>18799,
+35041=>18800,
+35046=>18801,
+35047=>18802,
+35049=>18803,
+35050=>18804,
+35051=>18805,
+35052=>18806,
+35053=>18807,
+35054=>18808,
+35055=>18809,
+35058=>18810,
+35061=>18811,
+35062=>18812,
+35063=>18813,
+35066=>18814,
+35067=>18815,
+35071=>18816,
+35072=>18817,
+35073=>18818,
+35075=>18819,
+35076=>18820,
+35077=>18821,
+35078=>18822,
+35080=>18823,
+35081=>18824,
+35083=>18825,
+35084=>18826,
+35085=>18827,
+35086=>18828,
+35087=>18829,
+35089=>18830,
+35092=>18831,
+35093=>18832,
+35094=>18833,
+35095=>18834,
+35096=>18835,
+35100=>18836,
+35101=>18837,
+35102=>18838,
+35103=>18839,
+35104=>18840,
+35106=>18841,
+35107=>18842,
+35108=>18843,
+35110=>18844,
+35111=>18845,
+35112=>18846,
+35113=>18847,
+35116=>18848,
+35117=>18849,
+35118=>18850,
+35119=>18851,
+35121=>18852,
+35125=>18853,
+35127=>18854,
+35129=>18855,
+35130=>18856,
+35132=>18857,
+35133=>18858,
+35134=>18859,
+35135=>18860,
+35136=>18861,
+35138=>18862,
+35139=>18863,
+35141=>18864,
+35142=>18865,
+35144=>18866,
+35145=>18867,
+35146=>18868,
+35147=>18869,
+35148=>18870,
+35149=>18871,
+35150=>18872,
+35151=>18873,
+35152=>18874,
+35153=>18875,
+35154=>18876,
+35155=>18877,
+35156=>18878,
+35157=>18879,
+35159=>18880,
+35160=>18881,
+35161=>18882,
+35162=>18883,
+35163=>18884,
+35164=>18885,
+35169=>18886,
+35170=>18887,
+35171=>18888,
+35173=>18889,
+35175=>18890,
+35176=>18891,
+35177=>18892,
+35179=>18893,
+35181=>18894,
+35182=>18895,
+35184=>18896,
+35185=>18897,
+35187=>18898,
+35188=>18899,
+35189=>18900,
+35190=>18901,
+35191=>18902,
+35192=>18903,
+35193=>18904,
+35194=>18905,
+35196=>18906,
+35197=>18907,
+12177=>18908,
+35198=>18908,
+35200=>18909,
+35202=>18910,
+35204=>18911,
+35205=>18912,
+35207=>18913,
+35208=>18914,
+35209=>18915,
+35210=>18916,
+35212=>18917,
+35213=>18918,
+35214=>18919,
+35216=>18920,
+35217=>18921,
+35218=>18922,
+35220=>18923,
+35221=>18924,
+35223=>18925,
+35225=>18926,
+35226=>18927,
+35227=>18928,
+35228=>18929,
+35229=>18930,
+35230=>18931,
+35231=>18932,
+35232=>18933,
+35234=>18934,
+35235=>18935,
+35236=>18936,
+35237=>18937,
+35239=>18938,
+35240=>18939,
+35241=>18940,
+35243=>18941,
+35245=>18942,
+35246=>18943,
+35248=>18944,
+35249=>18945,
+35251=>18946,
+35252=>18947,
+35253=>18948,
+35254=>18949,
+35256=>18950,
+35257=>18951,
+35259=>18952,
+35260=>18953,
+35262=>18954,
+35267=>18955,
+35277=>18956,
+35283=>18957,
+35284=>18958,
+35285=>18959,
+35287=>18960,
+35288=>18961,
+35289=>18962,
+35291=>18963,
+35293=>18964,
+35295=>18965,
+35296=>18966,
+35297=>18967,
+35298=>18968,
+35300=>18969,
+35303=>18970,
+35304=>18971,
+35305=>18972,
+35306=>18973,
+35308=>18974,
+35309=>18975,
+35310=>18976,
+35312=>18977,
+35313=>18978,
+35314=>18979,
+35317=>18980,
+35319=>18981,
+35321=>18982,
+35322=>18983,
+35323=>18984,
+35324=>18985,
+35325=>18986,
+35326=>18987,
+35327=>18988,
+35332=>18989,
+35333=>18990,
+35334=>18991,
+35337=>18992,
+35339=>18993,
+35341=>18994,
+35343=>18995,
+35345=>18996,
+35346=>18997,
+35348=>18998,
+35351=>18999,
+35353=>19000,
+35354=>19001,
+35356=>19002,
+35358=>19003,
+35360=>19004,
+35361=>19005,
+35362=>19006,
+35364=>19007,
+35366=>19008,
+35367=>19009,
+35368=>19010,
+35369=>19011,
+35371=>19012,
+35372=>19013,
+35374=>19014,
+35375=>19015,
+35376=>19016,
+35378=>19017,
+35379=>19018,
+35381=>19019,
+35383=>19020,
+35384=>19021,
+35385=>19022,
+35387=>19023,
+35388=>19024,
+35389=>19025,
+35391=>19026,
+35392=>19027,
+35394=>19028,
+35395=>19029,
+35396=>19030,
+35397=>19031,
+35399=>19032,
+35401=>19033,
+35402=>19034,
+35403=>19035,
+35404=>19036,
+35405=>19037,
+35407=>19038,
+35409=>19039,
+35411=>19040,
+35414=>19041,
+35415=>19042,
+35417=>19043,
+35418=>19044,
+35420=>19045,
+35421=>19046,
+35423=>19047,
+35424=>19048,
+35428=>19049,
+35429=>19050,
+35431=>19051,
+35432=>19052,
+35434=>19053,
+35439=>19054,
+35444=>19055,
+35446=>19056,
+35447=>19057,
+35448=>19058,
+35450=>19059,
+35451=>19060,
+35453=>19061,
+35454=>19062,
+35456=>19063,
+35457=>19064,
+35458=>19065,
+35459=>19066,
+35464=>19067,
+35467=>19068,
+35468=>19069,
+35470=>19070,
+35471=>19071,
+35472=>19072,
+35476=>19073,
+35478=>19074,
+35479=>19075,
+35481=>19076,
+35483=>19077,
+35484=>19078,
+35485=>19079,
+35487=>19080,
+35490=>19081,
+35495=>19082,
+35497=>19083,
+35498=>19084,
+35499=>19085,
+35501=>19086,
+35502=>19087,
+35503=>19088,
+35505=>19089,
+35507=>19090,
+35508=>19091,
+35509=>19092,
+35511=>19093,
+35512=>19094,
+35514=>19095,
+35515=>19096,
+35517=>19097,
+35518=>19098,
+35520=>19099,
+35521=>19100,
+35523=>19101,
+35525=>19102,
+35526=>19103,
+35528=>19104,
+35530=>19105,
+35532=>19106,
+35534=>19107,
+35536=>19108,
+35539=>19109,
+35540=>19110,
+35541=>19111,
+35544=>19112,
+35545=>19113,
+35546=>19114,
+35549=>19115,
+35551=>19116,
+35552=>19117,
+35553=>19118,
+35555=>19119,
+35557=>19120,
+35560=>19121,
+35561=>19122,
+35562=>19123,
+35564=>19124,
+35567=>19125,
+35568=>19126,
+35570=>19127,
+35572=>19128,
+35573=>19129,
+35577=>19130,
+35579=>19131,
+35581=>19132,
+35583=>19133,
+35587=>19134,
+35590=>19135,
+35592=>19136,
+35593=>19137,
+35595=>19138,
+35596=>19139,
+35597=>19140,
+35599=>19141,
+35601=>19142,
+35602=>19143,
+35603=>19144,
+35605=>19145,
+35608=>19146,
+35612=>19147,
+35614=>19148,
+35615=>19149,
+35616=>19150,
+35618=>19151,
+35619=>19152,
+35620=>19153,
+35621=>19154,
+35623=>19155,
+35625=>19156,
+35626=>19157,
+35630=>19158,
+35631=>19159,
+35632=>19160,
+35633=>19161,
+35634=>19162,
+35636=>19163,
+35637=>19164,
+35638=>19165,
+35639=>19166,
+35640=>19167,
+35642=>19168,
+35643=>19169,
+35644=>19170,
+35645=>19171,
+35647=>19172,
+35648=>19173,
+35649=>19174,
+35650=>19175,
+35651=>19176,
+35652=>19177,
+35653=>19178,
+35654=>19179,
+35655=>19180,
+35656=>19181,
+35658=>19182,
+35659=>19183,
+35660=>19184,
+35661=>19185,
+35664=>19186,
+35665=>19187,
+35666=>19188,
+35667=>19189,
+35668=>19190,
+35669=>19191,
+35671=>19192,
+35675=>19193,
+35677=>19194,
+35678=>19195,
+35679=>19196,
+35680=>19197,
+35681=>19198,
+35682=>19199,
+35683=>19200,
+35684=>19201,
+35685=>19202,
+35687=>19203,
+35688=>19204,
+35689=>19205,
+35690=>19206,
+35693=>19207,
+35694=>19208,
+35697=>19209,
+35698=>19210,
+35699=>19211,
+35701=>19212,
+35702=>19213,
+35704=>19214,
+35705=>19215,
+35706=>19216,
+35707=>19217,
+35708=>19218,
+35710=>19219,
+35711=>19220,
+35713=>19221,
+35714=>19222,
+35715=>19223,
+35716=>19224,
+35717=>19225,
+35718=>19226,
+35719=>19227,
+35720=>19228,
+35721=>19229,
+35723=>19230,
+35724=>19231,
+35725=>19232,
+35727=>19233,
+35728=>19234,
+35729=>19235,
+35732=>19236,
+35735=>19237,
+35736=>19238,
+35737=>19239,
+35738=>19240,
+35739=>19241,
+35741=>19242,
+35743=>19243,
+35756=>19244,
+35761=>19245,
+35771=>19246,
+35783=>19247,
+35792=>19248,
+35818=>19249,
+35849=>19250,
+35870=>19251,
+35896=>19252,
+35897=>19253,
+35898=>19254,
+35899=>19255,
+35900=>19256,
+35901=>19257,
+35902=>19258,
+35903=>19259,
+35904=>19260,
+35906=>19261,
+35907=>19262,
+35908=>19263,
+35909=>19264,
+35914=>19265,
+35915=>19266,
+35917=>19267,
+35918=>19268,
+35919=>19269,
+35921=>19270,
+35922=>19271,
+35923=>19272,
+35924=>19273,
+35926=>19274,
+35927=>19275,
+35928=>19276,
+35929=>19277,
+35931=>19278,
+35932=>19279,
+35933=>19280,
+35934=>19281,
+35935=>19282,
+35936=>19283,
+35939=>19284,
+35940=>19285,
+35941=>19286,
+35942=>19287,
+35943=>19288,
+35944=>19289,
+35945=>19290,
+35948=>19291,
+35949=>19292,
+35950=>19293,
+35951=>19294,
+35952=>19295,
+35953=>19296,
+35954=>19297,
+35956=>19298,
+35957=>19299,
+35958=>19300,
+35959=>19301,
+35963=>19302,
+35964=>19303,
+35965=>19304,
+35966=>19305,
+35967=>19306,
+35968=>19307,
+35969=>19308,
+35971=>19309,
+35972=>19310,
+35974=>19311,
+35975=>19312,
+35976=>19313,
+35979=>19314,
+35981=>19315,
+35982=>19316,
+35983=>19317,
+35984=>19318,
+35985=>19319,
+35986=>19320,
+35987=>19321,
+35989=>19322,
+35990=>19323,
+35991=>19324,
+35993=>19325,
+35994=>19326,
+35995=>19327,
+35996=>19328,
+35999=>19329,
+36003=>19330,
+36004=>19331,
+36005=>19332,
+36006=>19333,
+36013=>19334,
+36014=>19335,
+36017=>19336,
+36021=>19337,
+36025=>19338,
+36030=>19339,
+36038=>19340,
+36041=>19341,
+36043=>19342,
+36044=>19343,
+36045=>19344,
+36046=>19345,
+36047=>19346,
+36048=>19347,
+36052=>19348,
+36054=>19349,
+36055=>19350,
+36056=>19351,
+36057=>19352,
+36059=>19353,
+36061=>19354,
+36063=>19355,
+36069=>19356,
+36072=>19357,
+36073=>19358,
+36078=>19359,
+36079=>19360,
+36080=>19361,
+36081=>19362,
+36082=>19363,
+36083=>19364,
+36085=>19365,
+36086=>19366,
+36087=>19367,
+36088=>19368,
+36089=>19369,
+36095=>19370,
+36096=>19371,
+36097=>19372,
+36098=>19373,
+36099=>19374,
+36102=>19375,
+36103=>19376,
+36105=>19377,
+36108=>19378,
+36110=>19379,
+36113=>19380,
+36114=>19381,
+36115=>19382,
+36116=>19383,
+36117=>19384,
+36119=>19385,
+36120=>19386,
+36121=>19387,
+36122=>19388,
+36128=>19389,
+36177=>19390,
+36178=>19391,
+36183=>19392,
+36191=>19393,
+36197=>19394,
+36200=>19395,
+36201=>19396,
+36202=>19397,
+36204=>19398,
+36206=>19399,
+36207=>19400,
+36209=>19401,
+36210=>19402,
+36216=>19403,
+36217=>19404,
+36218=>19405,
+36219=>19406,
+36220=>19407,
+36221=>19408,
+36222=>19409,
+36223=>19410,
+36224=>19411,
+36226=>19412,
+36227=>19413,
+36230=>19414,
+36231=>19415,
+36232=>19416,
+36233=>19417,
+36236=>19418,
+36237=>19419,
+36238=>19420,
+36239=>19421,
+36240=>19422,
+36242=>19423,
+36243=>19424,
+36246=>19425,
+36247=>19426,
+36248=>19427,
+36250=>19428,
+36251=>19429,
+36252=>19430,
+36253=>19431,
+36254=>19432,
+36256=>19433,
+36257=>19434,
+36258=>19435,
+36260=>19436,
+36261=>19437,
+36262=>19438,
+36263=>19439,
+36265=>19440,
+36266=>19441,
+36267=>19442,
+36268=>19443,
+36269=>19444,
+36270=>19445,
+36271=>19446,
+36272=>19447,
+36278=>19448,
+36279=>19449,
+36281=>19450,
+36283=>19451,
+36285=>19452,
+36288=>19453,
+36289=>19454,
+36290=>19455,
+36293=>19456,
+36295=>19457,
+36296=>19458,
+36297=>19459,
+36298=>19460,
+36301=>19461,
+36304=>19462,
+36306=>19463,
+36307=>19464,
+36308=>19465,
+36309=>19466,
+36312=>19467,
+36313=>19468,
+36316=>19469,
+36320=>19470,
+36321=>19471,
+36322=>19472,
+36325=>19473,
+36326=>19474,
+36327=>19475,
+36329=>19476,
+36333=>19477,
+36334=>19478,
+36336=>19479,
+36337=>19480,
+36338=>19481,
+36340=>19482,
+36342=>19483,
+36348=>19484,
+36350=>19485,
+36351=>19486,
+36352=>19487,
+36353=>19488,
+36354=>19489,
+36355=>19490,
+36356=>19491,
+36358=>19492,
+36359=>19493,
+36360=>19494,
+36363=>19495,
+36365=>19496,
+36366=>19497,
+36369=>19498,
+36370=>19499,
+36371=>19500,
+36373=>19501,
+36374=>19502,
+36375=>19503,
+36376=>19504,
+36377=>19505,
+36378=>19506,
+36379=>19507,
+36380=>19508,
+36384=>19509,
+36385=>19510,
+36388=>19511,
+36389=>19512,
+36390=>19513,
+36391=>19514,
+36392=>19515,
+36395=>19516,
+36397=>19517,
+36400=>19518,
+36402=>19519,
+36403=>19520,
+36406=>19521,
+36407=>19522,
+36408=>19523,
+36411=>19524,
+36412=>19525,
+36414=>19526,
+36415=>19527,
+36419=>19528,
+36421=>19529,
+36422=>19530,
+36429=>19531,
+36430=>19532,
+36431=>19533,
+36432=>19534,
+36435=>19535,
+36436=>19536,
+36438=>19537,
+36439=>19538,
+36440=>19539,
+36442=>19540,
+36443=>19541,
+36444=>19542,
+36445=>19543,
+36446=>19544,
+36447=>19545,
+36448=>19546,
+36449=>19547,
+36450=>19548,
+36452=>19549,
+36453=>19550,
+36455=>19551,
+36456=>19552,
+36458=>19553,
+36459=>19554,
+36462=>19555,
+36465=>19556,
+36467=>19557,
+36469=>19558,
+36471=>19559,
+36472=>19560,
+36473=>19561,
+36475=>19562,
+36477=>19563,
+36478=>19564,
+36480=>19565,
+36482=>19566,
+36483=>19567,
+36484=>19568,
+36486=>19569,
+36488=>19570,
+36492=>19571,
+36494=>19572,
+36501=>19573,
+36502=>19574,
+36503=>19575,
+36504=>19576,
+36505=>19577,
+36507=>19578,
+36509=>19579,
+36511=>19580,
+36512=>19581,
+36514=>19582,
+36515=>19583,
+36516=>19584,
+36519=>19585,
+36520=>19586,
+36521=>19587,
+36525=>19588,
+36526=>19589,
+36528=>19590,
+36529=>19591,
+36531=>19592,
+36532=>19593,
+36533=>19594,
+36534=>19595,
+36535=>19596,
+36536=>19597,
+36537=>19598,
+36539=>19599,
+36540=>19600,
+36541=>19601,
+36542=>19602,
+36543=>19603,
+36545=>19604,
+36546=>19605,
+36547=>19606,
+36548=>19607,
+36549=>19608,
+36550=>19609,
+36551=>19610,
+36552=>19611,
+36553=>19612,
+36559=>19613,
+36560=>19614,
+36561=>19615,
+36563=>19616,
+36565=>19617,
+36566=>19618,
+36567=>19619,
+36568=>19620,
+36569=>19621,
+36570=>19622,
+36572=>19623,
+36573=>19624,
+36574=>19625,
+36576=>19626,
+36577=>19627,
+36578=>19628,
+36579=>19629,
+36581=>19630,
+36582=>19631,
+36583=>19632,
+36584=>19633,
+36585=>19634,
+36586=>19635,
+36588=>19636,
+36589=>19637,
+36590=>19638,
+36591=>19639,
+36592=>19640,
+36593=>19641,
+36595=>19642,
+36596=>19643,
+36597=>19644,
+36598=>19645,
+36599=>19646,
+36605=>19647,
+36607=>19648,
+36608=>19649,
+36609=>19650,
+36610=>19651,
+36612=>19652,
+36614=>19653,
+36616=>19654,
+36619=>19655,
+36620=>19656,
+36621=>19657,
+36622=>19658,
+36623=>19659,
+36624=>19660,
+36625=>19661,
+36627=>19662,
+36630=>19663,
+36631=>19664,
+36632=>19665,
+36633=>19666,
+36634=>19667,
+36640=>19668,
+36641=>19669,
+36642=>19670,
+36643=>19671,
+36644=>19672,
+36647=>19673,
+36648=>19674,
+36651=>19675,
+36652=>19676,
+36653=>19677,
+36654=>19678,
+36656=>19679,
+36657=>19680,
+36658=>19681,
+36660=>19682,
+36661=>19683,
+36662=>19684,
+36663=>19685,
+36665=>19686,
+36666=>19687,
+36668=>19688,
+36669=>19689,
+36672=>19690,
+36673=>19691,
+36675=>19692,
+36679=>19693,
+36680=>19694,
+36682=>19695,
+36683=>19696,
+36684=>19697,
+36687=>19698,
+36688=>19699,
+36689=>19700,
+36690=>19701,
+36691=>19702,
+36693=>19703,
+36694=>19704,
+36695=>19705,
+36696=>19706,
+36697=>19707,
+36698=>19708,
+36699=>19709,
+36700=>19710,
+36701=>19711,
+36702=>19712,
+36704=>19713,
+36707=>19714,
+36709=>19715,
+36714=>19716,
+36736=>19717,
+36748=>19718,
+36754=>19719,
+36765=>19720,
+36768=>19721,
+36769=>19722,
+36770=>19723,
+36772=>19724,
+36773=>19725,
+36775=>19726,
+36778=>19727,
+36780=>19728,
+36787=>19729,
+36788=>19730,
+12193=>19731,
+36789=>19731,
+36791=>19732,
+36792=>19733,
+36794=>19734,
+36795=>19735,
+36796=>19736,
+36799=>19737,
+36800=>19738,
+36803=>19739,
+36806=>19740,
+36809=>19741,
+36810=>19742,
+36811=>19743,
+36812=>19744,
+36813=>19745,
+36815=>19746,
+36818=>19747,
+36822=>19748,
+36823=>19749,
+36826=>19750,
+36832=>19751,
+36833=>19752,
+36835=>19753,
+36839=>19754,
+36844=>19755,
+36847=>19756,
+36849=>19757,
+36850=>19758,
+36853=>19759,
+36854=>19760,
+36858=>19761,
+36859=>19762,
+36860=>19763,
+36862=>19764,
+36863=>19765,
+36871=>19766,
+36872=>19767,
+36876=>19768,
+36878=>19769,
+36883=>19770,
+36888=>19771,
+36892=>19772,
+36900=>19773,
+36901=>19774,
+36903=>19775,
+36904=>19776,
+36905=>19777,
+36906=>19778,
+36907=>19779,
+36908=>19780,
+36912=>19781,
+36913=>19782,
+36915=>19783,
+36916=>19784,
+36919=>19785,
+36921=>19786,
+36922=>19787,
+36925=>19788,
+36927=>19789,
+36928=>19790,
+36931=>19791,
+36933=>19792,
+36934=>19793,
+36936=>19794,
+36937=>19795,
+36938=>19796,
+36940=>19797,
+36950=>19798,
+36953=>19799,
+36954=>19800,
+36957=>19801,
+36959=>19802,
+36961=>19803,
+36964=>19804,
+36966=>19805,
+36967=>19806,
+36970=>19807,
+36971=>19808,
+36972=>19809,
+36975=>19810,
+36976=>19811,
+36977=>19812,
+36979=>19813,
+36982=>19814,
+36985=>19815,
+36987=>19816,
+36990=>19817,
+36997=>19818,
+36998=>19819,
+37001=>19820,
+37004=>19821,
+37005=>19822,
+37006=>19823,
+37010=>19824,
+37012=>19825,
+37014=>19826,
+37016=>19827,
+37018=>19828,
+37020=>19829,
+37022=>19830,
+37023=>19831,
+37024=>19832,
+37028=>19833,
+37029=>19834,
+37031=>19835,
+37032=>19836,
+37033=>19837,
+37035=>19838,
+37037=>19839,
+37042=>19840,
+37047=>19841,
+37052=>19842,
+37053=>19843,
+37055=>19844,
+37056=>19845,
+37058=>19846,
+37059=>19847,
+37062=>19848,
+37064=>19849,
+37065=>19850,
+37067=>19851,
+37068=>19852,
+37069=>19853,
+37074=>19854,
+37076=>19855,
+37077=>19856,
+37078=>19857,
+37080=>19858,
+37081=>19859,
+37082=>19860,
+37086=>19861,
+37088=>19862,
+37091=>19863,
+37092=>19864,
+37093=>19865,
+37097=>19866,
+37098=>19867,
+37100=>19868,
+37102=>19869,
+37104=>19870,
+37105=>19871,
+37106=>19872,
+37107=>19873,
+37110=>19874,
+37111=>19875,
+37113=>19876,
+37114=>19877,
+37115=>19878,
+37116=>19879,
+37119=>19880,
+37120=>19881,
+37121=>19882,
+37123=>19883,
+37125=>19884,
+37127=>19885,
+37128=>19886,
+37130=>19887,
+37131=>19888,
+37132=>19889,
+37133=>19890,
+37134=>19891,
+37135=>19892,
+37136=>19893,
+37137=>19894,
+37139=>19895,
+37141=>19896,
+37143=>19897,
+37144=>19898,
+37146=>19899,
+37147=>19900,
+37148=>19901,
+37149=>19902,
+37151=>19903,
+37152=>19904,
+37153=>19905,
+37156=>19906,
+37157=>19907,
+37158=>19908,
+37160=>19909,
+37161=>19910,
+37162=>19911,
+37163=>19912,
+37164=>19913,
+37166=>19914,
+37171=>19915,
+37173=>19916,
+37175=>19917,
+37176=>19918,
+37179=>19919,
+37180=>19920,
+37181=>19921,
+37182=>19922,
+37183=>19923,
+37184=>19924,
+37185=>19925,
+37186=>19926,
+37188=>19927,
+37189=>19928,
+37191=>19929,
+37201=>19930,
+37203=>19931,
+37204=>19932,
+37205=>19933,
+37206=>19934,
+37208=>19935,
+37209=>19936,
+37211=>19937,
+37212=>19938,
+37215=>19939,
+37216=>19940,
+37222=>19941,
+37223=>19942,
+37224=>19943,
+37227=>19944,
+37229=>19945,
+37235=>19946,
+37242=>19947,
+37243=>19948,
+37244=>19949,
+37248=>19950,
+37249=>19951,
+37250=>19952,
+37251=>19953,
+37252=>19954,
+37254=>19955,
+37256=>19956,
+37258=>19957,
+37262=>19958,
+37263=>19959,
+37267=>19960,
+37268=>19961,
+37269=>19962,
+37271=>19963,
+37272=>19964,
+37273=>19965,
+37277=>19966,
+37278=>19967,
+37279=>19968,
+37280=>19969,
+37281=>19970,
+37284=>19971,
+37285=>19972,
+37286=>19973,
+37287=>19974,
+37288=>19975,
+37289=>19976,
+37296=>19977,
+37297=>19978,
+37298=>19979,
+37299=>19980,
+37302=>19981,
+37303=>19982,
+37304=>19983,
+37305=>19984,
+37307=>19985,
+37308=>19986,
+37309=>19987,
+37310=>19988,
+37311=>19989,
+37314=>19990,
+37316=>19991,
+12196=>19992,
+37318=>19992,
+37320=>19993,
+37328=>19994,
+37334=>19995,
+37338=>19996,
+37339=>19997,
+37342=>19998,
+37343=>19999,
+37344=>20000,
+37345=>20001,
+37346=>20002,
+37349=>20003,
+37350=>20004,
+37352=>20005,
+37354=>20006,
+37355=>20007,
+37356=>20008,
+37357=>20009,
+37358=>20010,
+37359=>20011,
+37360=>20012,
+37361=>20013,
+37362=>20014,
+37363=>20015,
+37364=>20016,
+37366=>20017,
+37368=>20018,
+37371=>20019,
+37372=>20020,
+37373=>20021,
+37374=>20022,
+37375=>20023,
+37378=>20024,
+37379=>20025,
+37381=>20026,
+37382=>20027,
+37383=>20028,
+37386=>20029,
+37387=>20030,
+37388=>20031,
+37391=>20032,
+37394=>20033,
+37395=>20034,
+37398=>20035,
+37399=>20036,
+37400=>20037,
+37401=>20038,
+37402=>20039,
+37403=>20040,
+37404=>20041,
+37405=>20042,
+37407=>20043,
+37408=>20044,
+37409=>20045,
+37410=>20046,
+37412=>20047,
+37416=>20048,
+37417=>20049,
+37418=>20050,
+37419=>20051,
+37420=>20052,
+37421=>20053,
+37423=>20054,
+37425=>20055,
+37426=>20056,
+37429=>20057,
+37430=>20058,
+37435=>20059,
+37436=>20060,
+37441=>20061,
+37442=>20062,
+37443=>20063,
+37444=>20064,
+37446=>20065,
+37447=>20066,
+37450=>20067,
+37451=>20068,
+37452=>20069,
+37454=>20070,
+37455=>20071,
+37456=>20072,
+37458=>20073,
+37459=>20074,
+37460=>20075,
+37462=>20076,
+37464=>20077,
+37465=>20078,
+37468=>20079,
+37469=>20080,
+37471=>20081,
+37472=>20082,
+37473=>20083,
+37475=>20084,
+37476=>20085,
+37477=>20086,
+37479=>20087,
+37480=>20088,
+37481=>20089,
+37482=>20090,
+37483=>20091,
+37486=>20092,
+37487=>20093,
+37488=>20094,
+37489=>20095,
+37490=>20096,
+37491=>20097,
+37493=>20098,
+37494=>20099,
+37495=>20100,
+37497=>20101,
+37500=>20102,
+37501=>20103,
+37502=>20104,
+37505=>20105,
+37506=>20106,
+37508=>20107,
+37510=>20108,
+37511=>20109,
+37512=>20110,
+37513=>20111,
+37514=>20112,
+37515=>20113,
+37516=>20114,
+37517=>20115,
+37519=>20116,
+37520=>20117,
+37522=>20118,
+37524=>20119,
+37525=>20120,
+37527=>20121,
+37529=>20122,
+37531=>20123,
+37533=>20124,
+37534=>20125,
+37535=>20126,
+37537=>20127,
+37538=>20128,
+37540=>20129,
+37543=>20130,
+37549=>20131,
+37551=>20132,
+37552=>20133,
+37554=>20134,
+37555=>20135,
+37556=>20136,
+37557=>20137,
+37558=>20138,
+37560=>20139,
+37562=>20140,
+37565=>20141,
+37566=>20142,
+37567=>20143,
+37568=>20144,
+37570=>20145,
+37572=>20146,
+37574=>20147,
+37577=>20148,
+37578=>20149,
+37579=>20150,
+37581=>20151,
+37582=>20152,
+37584=>20153,
+37585=>20154,
+37587=>20155,
+37588=>20156,
+37589=>20157,
+37590=>20158,
+37591=>20159,
+37592=>20160,
+37593=>20161,
+37594=>20162,
+37595=>20163,
+37596=>20164,
+37598=>20165,
+37600=>20166,
+37601=>20167,
+37602=>20168,
+37607=>20169,
+37609=>20170,
+37611=>20171,
+37612=>20172,
+37618=>20173,
+37619=>20174,
+37620=>20175,
+37621=>20176,
+37623=>20177,
+37625=>20178,
+37626=>20179,
+37627=>20180,
+37629=>20181,
+37630=>20182,
+37631=>20183,
+37632=>20184,
+37634=>20185,
+37635=>20186,
+37636=>20187,
+37637=>20188,
+37641=>20189,
+37642=>20190,
+37643=>20191,
+37644=>20192,
+37645=>20193,
+37646=>20194,
+37647=>20195,
+37649=>20196,
+37651=>20197,
+37652=>20198,
+37654=>20199,
+37655=>20200,
+37660=>20201,
+37661=>20202,
+37662=>20203,
+37665=>20204,
+37667=>20205,
+37668=>20206,
+37669=>20207,
+37671=>20208,
+37673=>20209,
+37674=>20210,
+37676=>20211,
+37677=>20212,
+37680=>20213,
+37681=>20214,
+37684=>20215,
+37685=>20216,
+37687=>20217,
+37689=>20218,
+37690=>20219,
+37691=>20220,
+37692=>20221,
+37693=>20222,
+37695=>20223,
+37698=>20224,
+37700=>20225,
+37701=>20226,
+37704=>20227,
+37705=>20228,
+37706=>20229,
+37708=>20230,
+37710=>20231,
+37711=>20232,
+37712=>20233,
+37713=>20234,
+37714=>20235,
+37715=>20236,
+37717=>20237,
+37718=>20238,
+37719=>20239,
+37721=>20240,
+37722=>20241,
+37724=>20242,
+37725=>20243,
+37726=>20244,
+37727=>20245,
+37728=>20246,
+37729=>20247,
+37730=>20248,
+37731=>20249,
+37734=>20250,
+37735=>20251,
+37736=>20252,
+37739=>20253,
+37741=>20254,
+37742=>20255,
+37743=>20256,
+37745=>20257,
+37746=>20258,
+37747=>20259,
+37748=>20260,
+37751=>20261,
+37752=>20262,
+37753=>20263,
+37755=>20264,
+37756=>20265,
+37757=>20266,
+37759=>20267,
+37760=>20268,
+37761=>20269,
+37763=>20270,
+37765=>20271,
+37766=>20272,
+37768=>20273,
+37769=>20274,
+37771=>20275,
+37772=>20276,
+37773=>20277,
+37774=>20278,
+37776=>20279,
+37777=>20280,
+37778=>20281,
+37779=>20282,
+37780=>20283,
+37781=>20284,
+37783=>20285,
+37785=>20286,
+37786=>20287,
+37787=>20288,
+37788=>20289,
+37789=>20290,
+37790=>20291,
+37791=>20292,
+37792=>20293,
+37793=>20294,
+37796=>20295,
+37797=>20296,
+37800=>20297,
+37803=>20298,
+37805=>20299,
+37807=>20300,
+37809=>20301,
+37810=>20302,
+37812=>20303,
+37814=>20304,
+37815=>20305,
+37817=>20306,
+37818=>20307,
+37819=>20308,
+37820=>20309,
+37821=>20310,
+37822=>20311,
+37824=>20312,
+37825=>20313,
+37826=>20314,
+37828=>20315,
+37829=>20316,
+37830=>20317,
+37833=>20318,
+37835=>20319,
+37838=>20320,
+37839=>20321,
+37840=>20322,
+37842=>20323,
+37843=>20324,
+37844=>20325,
+37845=>20326,
+37849=>20327,
+37850=>20328,
+37851=>20329,
+37856=>20330,
+37859=>20331,
+37861=>20332,
+37862=>20333,
+37863=>20334,
+37865=>20335,
+37866=>20336,
+37867=>20337,
+37868=>20338,
+37869=>20339,
+37870=>20340,
+37871=>20341,
+37872=>20342,
+37873=>20343,
+37874=>20344,
+37875=>20345,
+37876=>20346,
+37878=>20347,
+37880=>20348,
+37882=>20349,
+37883=>20350,
+37884=>20351,
+37885=>20352,
+37886=>20353,
+37887=>20354,
+37888=>20355,
+37889=>20356,
+37890=>20357,
+37892=>20358,
+37893=>20359,
+37894=>20360,
+37895=>20361,
+37896=>20362,
+37897=>20363,
+37898=>20364,
+37900=>20365,
+37901=>20366,
+37902=>20367,
+37903=>20368,
+37905=>20369,
+37909=>20370,
+37910=>20371,
+37911=>20372,
+37914=>20373,
+37915=>20374,
+37916=>20375,
+37918=>20376,
+37919=>20377,
+37921=>20378,
+37922=>20379,
+37923=>20380,
+37924=>20381,
+37925=>20382,
+37929=>20383,
+37930=>20384,
+37931=>20385,
+37932=>20386,
+37933=>20387,
+37935=>20388,
+37936=>20389,
+37937=>20390,
+37940=>20391,
+37942=>20392,
+37943=>20393,
+37945=>20394,
+37947=>20395,
+37948=>20396,
+37949=>20397,
+37952=>20398,
+37953=>20399,
+37954=>20400,
+37955=>20401,
+37957=>20402,
+37958=>20403,
+37959=>20404,
+37960=>20405,
+37961=>20406,
+37963=>20407,
+37965=>20408,
+37966=>20409,
+37967=>20410,
+37968=>20411,
+37969=>20412,
+37971=>20413,
+37973=>20414,
+37974=>20415,
+37975=>20416,
+37976=>20417,
+37977=>20418,
+37978=>20419,
+37979=>20420,
+37980=>20421,
+37981=>20422,
+37982=>20423,
+37983=>20424,
+37985=>20425,
+37986=>20426,
+37988=>20427,
+37990=>20428,
+37991=>20429,
+37992=>20430,
+37993=>20431,
+37994=>20432,
+37996=>20433,
+37998=>20434,
+37999=>20435,
+38001=>20436,
+38003=>20437,
+38004=>20438,
+38005=>20439,
+38006=>20440,
+38008=>20441,
+38010=>20442,
+38011=>20443,
+38016=>20444,
+38017=>20445,
+38018=>20446,
+38019=>20447,
+38020=>20448,
+38033=>20449,
+38038=>20450,
+38040=>20451,
+38087=>20452,
+38095=>20453,
+38099=>20454,
+38100=>20455,
+38106=>20456,
+38118=>20457,
+38139=>20458,
+38172=>20459,
+38176=>20460,
+38183=>20461,
+38195=>20462,
+38205=>20463,
+38211=>20464,
+38216=>20465,
+38219=>20466,
+38229=>20467,
+38234=>20468,
+38240=>20469,
+38254=>20470,
+38260=>20471,
+38261=>20472,
+38264=>20473,
+38265=>20474,
+38266=>20475,
+38267=>20476,
+38268=>20477,
+38269=>20478,
+38270=>20479,
+38273=>20480,
+38276=>20481,
+38277=>20482,
+38279=>20483,
+38280=>20484,
+38282=>20485,
+38285=>20486,
+38288=>20487,
+38290=>20488,
+38293=>20489,
+38294=>20490,
+38295=>20491,
+38297=>20492,
+38298=>20493,
+38299=>20494,
+38300=>20495,
+38301=>20496,
+38302=>20497,
+38303=>20498,
+38304=>20499,
+38306=>20500,
+38310=>20501,
+38311=>20502,
+38314=>20503,
+38318=>20504,
+38319=>20505,
+38320=>20506,
+38321=>20507,
+38323=>20508,
+38324=>20509,
+38325=>20510,
+38327=>20511,
+38328=>20512,
+38330=>20513,
+38336=>20514,
+38337=>20515,
+38338=>20516,
+38340=>20517,
+38341=>20518,
+38343=>20519,
+38345=>20520,
+38349=>20521,
+38350=>20522,
+38351=>20523,
+38353=>20524,
+38354=>20525,
+38355=>20526,
+38359=>20527,
+38360=>20528,
+38361=>20529,
+38362=>20530,
+38363=>20531,
+38365=>20532,
+38367=>20533,
+38368=>20534,
+38371=>20535,
+38372=>20536,
+38374=>20537,
+38375=>20538,
+38380=>20539,
+38399=>20540,
+38407=>20541,
+38419=>20542,
+38424=>20543,
+38427=>20544,
+38430=>20545,
+38432=>20546,
+38435=>20547,
+38436=>20548,
+38437=>20549,
+38438=>20550,
+38439=>20551,
+38440=>20552,
+38441=>20553,
+38443=>20554,
+38444=>20555,
+38445=>20556,
+38447=>20557,
+38448=>20558,
+38455=>20559,
+38456=>20560,
+38457=>20561,
+38458=>20562,
+38462=>20563,
+38465=>20564,
+38467=>20565,
+38474=>20566,
+38478=>20567,
+38479=>20568,
+38481=>20569,
+38482=>20570,
+38483=>20571,
+38486=>20572,
+38487=>20573,
+38489=>20574,
+38490=>20575,
+38492=>20576,
+38494=>20577,
+38496=>20578,
+38501=>20579,
+38502=>20580,
+38507=>20581,
+38509=>20582,
+38510=>20583,
+38511=>20584,
+38513=>20585,
+38521=>20586,
+38522=>20587,
+38523=>20588,
+38524=>20589,
+38526=>20590,
+38527=>20591,
+38528=>20592,
+38529=>20593,
+38530=>20594,
+38531=>20595,
+38532=>20596,
+38535=>20597,
+38537=>20598,
+38540=>20599,
+38545=>20600,
+38546=>20601,
+38547=>20602,
+38550=>20603,
+38554=>20604,
+38557=>20605,
+38558=>20606,
+38559=>20607,
+38560=>20608,
+38561=>20609,
+38562=>20610,
+63985=>20611,
+38563=>20611,
+38564=>20612,
+38565=>20613,
+38566=>20614,
+38569=>20615,
+38571=>20616,
+38572=>20617,
+38573=>20618,
+38574=>20619,
+38575=>20620,
+38578=>20621,
+38581=>20622,
+38583=>20623,
+38586=>20624,
+38591=>20625,
+38594=>20626,
+38595=>20627,
+38600=>20628,
+38602=>20629,
+38603=>20630,
+38608=>20631,
+38609=>20632,
+38611=>20633,
+38612=>20634,
+38615=>20635,
+38616=>20636,
+38618=>20637,
+38621=>20638,
+38622=>20639,
+38623=>20640,
+38625=>20641,
+38628=>20642,
+38629=>20643,
+38630=>20644,
+38631=>20645,
+38635=>20646,
+38636=>20647,
+38637=>20648,
+38638=>20649,
+38640=>20650,
+38641=>20651,
+38644=>20652,
+38645=>20653,
+38648=>20654,
+38650=>20655,
+38652=>20656,
+38653=>20657,
+38655=>20658,
+38658=>20659,
+38659=>20660,
+38661=>20661,
+38666=>20662,
+38667=>20663,
+38668=>20664,
+38672=>20665,
+38673=>20666,
+38674=>20667,
+38676=>20668,
+38677=>20669,
+38679=>20670,
+38680=>20671,
+38681=>20672,
+38682=>20673,
+38683=>20674,
+38685=>20675,
+38687=>20676,
+38688=>20677,
+38689=>20678,
+38690=>20679,
+38691=>20680,
+38692=>20681,
+38693=>20682,
+38694=>20683,
+38696=>20684,
+38697=>20685,
+38699=>20686,
+38700=>20687,
+38702=>20688,
+38703=>20689,
+38705=>20690,
+38707=>20691,
+38708=>20692,
+38709=>20693,
+38710=>20694,
+38711=>20695,
+38714=>20696,
+38715=>20697,
+38716=>20698,
+38719=>20699,
+38720=>20700,
+38721=>20701,
+38723=>20702,
+38725=>20703,
+38726=>20704,
+38727=>20705,
+38729=>20706,
+38730=>20707,
+38731=>20708,
+38732=>20709,
+38733=>20710,
+38734=>20711,
+38735=>20712,
+38736=>20713,
+12205=>20714,
+38737=>20714,
+38740=>20715,
+38741=>20716,
+38743=>20717,
+38744=>20718,
+38748=>20719,
+38749=>20720,
+38751=>20721,
+38755=>20722,
+38756=>20723,
+38758=>20724,
+38759=>20725,
+38762=>20726,
+38763=>20727,
+38764=>20728,
+38765=>20729,
+38766=>20730,
+38767=>20731,
+38768=>20732,
+38769=>20733,
+38770=>20734,
+38773=>20735,
+38775=>20736,
+38776=>20737,
+38777=>20738,
+38778=>20739,
+38779=>20740,
+38781=>20741,
+38782=>20742,
+38783=>20743,
+38784=>20744,
+38785=>20745,
+38786=>20746,
+38787=>20747,
+38788=>20748,
+38790=>20749,
+38791=>20750,
+38792=>20751,
+38793=>20752,
+38794=>20753,
+38796=>20754,
+38798=>20755,
+38800=>20756,
+38803=>20757,
+38805=>20758,
+38806=>20759,
+38807=>20760,
+38809=>20761,
+38810=>20762,
+38811=>20763,
+38812=>20764,
+38813=>20765,
+38814=>20766,
+38815=>20767,
+38817=>20768,
+38818=>20769,
+38820=>20770,
+38821=>20771,
+38823=>20772,
+38824=>20773,
+38825=>20774,
+38826=>20775,
+38828=>20776,
+38830=>20777,
+38832=>20778,
+38833=>20779,
+38835=>20780,
+38837=>20781,
+38838=>20782,
+38839=>20783,
+38840=>20784,
+38841=>20785,
+38842=>20786,
+38843=>20787,
+38844=>20788,
+38846=>20789,
+38847=>20790,
+38848=>20791,
+38849=>20792,
+38850=>20793,
+38852=>20794,
+38853=>20795,
+38855=>20796,
+38856=>20797,
+38858=>20798,
+38861=>20799,
+38862=>20800,
+38863=>20801,
+38864=>20802,
+38865=>20803,
+38866=>20804,
+38868=>20805,
+38869=>20806,
+38870=>20807,
+38871=>20808,
+38872=>20809,
+38874=>20810,
+38875=>20811,
+38877=>20812,
+38879=>20813,
+38880=>20814,
+38881=>20815,
+38882=>20816,
+38883=>20817,
+38884=>20818,
+38885=>20819,
+38888=>20820,
+38894=>20821,
+38895=>20822,
+38896=>20823,
+38897=>20824,
+38898=>20825,
+38900=>20826,
+38903=>20827,
+38904=>20828,
+38905=>20829,
+38906=>20830,
+38907=>20831,
+38908=>20832,
+38909=>20833,
+38910=>20834,
+38912=>20835,
+38916=>20836,
+38921=>20837,
+38923=>20838,
+38925=>20839,
+38932=>20840,
+38933=>20841,
+38934=>20842,
+38937=>20843,
+38938=>20844,
+38939=>20845,
+38941=>20846,
+38942=>20847,
+38943=>20848,
+38944=>20849,
+38946=>20850,
+38947=>20851,
+38949=>20852,
+38951=>20853,
+38952=>20854,
+38953=>20855,
+38954=>20856,
+38955=>20857,
+38956=>20858,
+38958=>20859,
+38959=>20860,
+38961=>20861,
+38962=>20862,
+38963=>20863,
+38964=>20864,
+38965=>20865,
+38966=>20866,
+38969=>20867,
+38970=>20868,
+38972=>20869,
+38974=>20870,
+38975=>20871,
+38976=>20872,
+38977=>20873,
+38978=>20874,
+38979=>20875,
+38980=>20876,
+38981=>20877,
+38983=>20878,
+38984=>20879,
+38985=>20880,
+38986=>20881,
+38987=>20882,
+38991=>20883,
+38992=>20884,
+38993=>20885,
+38994=>20886,
+38997=>20887,
+38998=>20888,
+38999=>20889,
+39002=>20890,
+39004=>20891,
+39005=>20892,
+39007=>20893,
+39008=>20894,
+39009=>20895,
+39011=>20896,
+39012=>20897,
+39014=>20898,
+39016=>20899,
+39017=>20900,
+39018=>20901,
+39021=>20902,
+39022=>20903,
+39026=>20904,
+39051=>20905,
+39054=>20906,
+39058=>20907,
+39061=>20908,
+39065=>20909,
+39075=>20910,
+39081=>20911,
+39082=>20912,
+39083=>20913,
+39084=>20914,
+39085=>20915,
+39088=>20916,
+39090=>20917,
+39092=>20918,
+39093=>20919,
+39095=>20920,
+39096=>20921,
+39097=>20922,
+39098=>20923,
+39099=>20924,
+39101=>20925,
+39102=>20926,
+39103=>20927,
+39104=>20928,
+39105=>20929,
+39106=>20930,
+39107=>20931,
+39109=>20932,
+39111=>20933,
+39113=>20934,
+39114=>20935,
+39115=>20936,
+39116=>20937,
+39117=>20938,
+39119=>20939,
+39120=>20940,
+39124=>20941,
+39126=>20942,
+39127=>20943,
+39132=>20944,
+39133=>20945,
+39137=>20946,
+39139=>20947,
+39140=>20948,
+39141=>20949,
+39142=>20950,
+39148=>20951,
+39150=>20952,
+39152=>20953,
+39153=>20954,
+39155=>20955,
+39157=>20956,
+39158=>20957,
+39159=>20958,
+39160=>20959,
+39161=>20960,
+39162=>20961,
+39163=>20962,
+39167=>20963,
+39168=>20964,
+39169=>20965,
+39170=>20966,
+39172=>20967,
+39174=>20968,
+39175=>20969,
+39176=>20970,
+39179=>20971,
+39182=>20972,
+39183=>20973,
+39188=>20974,
+39189=>20975,
+39190=>20976,
+39191=>20977,
+39193=>20978,
+39194=>20979,
+39196=>20980,
+39197=>20981,
+39199=>20982,
+39200=>20983,
+39202=>20984,
+39203=>20985,
+39204=>20986,
+39205=>20987,
+39206=>20988,
+39207=>20989,
+39209=>20990,
+39210=>20991,
+39211=>20992,
+39212=>20993,
+39213=>20994,
+39215=>20995,
+39216=>20996,
+39217=>20997,
+39218=>20998,
+39220=>20999,
+39221=>21000,
+39222=>21001,
+39224=>21002,
+39225=>21003,
+39226=>21004,
+39227=>21005,
+39229=>21006,
+39232=>21007,
+39233=>21008,
+39234=>21009,
+39236=>21010,
+39238=>21011,
+39239=>21012,
+39245=>21013,
+39246=>21014,
+39247=>21015,
+39248=>21016,
+39251=>21017,
+39254=>21018,
+39256=>21019,
+39257=>21020,
+39258=>21021,
+39259=>21022,
+39261=>21023,
+39263=>21024,
+39264=>21025,
+39265=>21026,
+39268=>21027,
+39270=>21028,
+39283=>21029,
+39288=>21030,
+39289=>21031,
+39291=>21032,
+39294=>21033,
+39298=>21034,
+39299=>21035,
+39305=>21036,
+39308=>21037,
+39310=>21038,
+39322=>21039,
+39323=>21040,
+39324=>21041,
+39325=>21042,
+39326=>21043,
+39327=>21044,
+39328=>21045,
+39329=>21046,
+39330=>21047,
+39331=>21048,
+39332=>21049,
+39334=>21050,
+39335=>21051,
+39337=>21052,
+39338=>21053,
+39339=>21054,
+39343=>21055,
+39344=>21056,
+39346=>21057,
+39349=>21058,
+39350=>21059,
+39351=>21060,
+39352=>21061,
+39353=>21062,
+39354=>21063,
+39355=>21064,
+39356=>21065,
+39357=>21066,
+39358=>21067,
+39359=>21068,
+39360=>21069,
+39362=>21070,
+39363=>21071,
+39364=>21072,
+39365=>21073,
+39366=>21074,
+39367=>21075,
+39368=>21076,
+39369=>21077,
+39370=>21078,
+39371=>21079,
+39372=>21080,
+39373=>21081,
+39374=>21082,
+39375=>21083,
+39379=>21084,
+39382=>21085,
+39383=>21086,
+39386=>21087,
+39388=>21088,
+39390=>21089,
+39392=>21090,
+39395=>21091,
+39396=>21092,
+39397=>21093,
+39398=>21094,
+39399=>21095,
+39400=>21096,
+39401=>21097,
+39402=>21098,
+39403=>21099,
+39404=>21100,
+39406=>21101,
+39407=>21102,
+39408=>21103,
+39410=>21104,
+39411=>21105,
+39412=>21106,
+39413=>21107,
+39414=>21108,
+39415=>21109,
+39416=>21110,
+39417=>21111,
+39418=>21112,
+39419=>21113,
+39420=>21114,
+39421=>21115,
+39422=>21116,
+39424=>21117,
+39426=>21118,
+39427=>21119,
+39428=>21120,
+39430=>21121,
+39431=>21122,
+39432=>21123,
+39433=>21124,
+39434=>21125,
+39435=>21126,
+39436=>21127,
+39440=>21128,
+39441=>21129,
+39442=>21130,
+39443=>21131,
+39444=>21132,
+39445=>21133,
+39447=>21134,
+39448=>21135,
+39450=>21136,
+39451=>21137,
+39452=>21138,
+39453=>21139,
+39454=>21140,
+39455=>21141,
+39456=>21142,
+39457=>21143,
+39458=>21144,
+39459=>21145,
+39460=>21146,
+39461=>21147,
+39462=>21148,
+39463=>21149,
+39464=>21150,
+39465=>21151,
+39466=>21152,
+39468=>21153,
+39471=>21154,
+39473=>21155,
+39474=>21156,
+39475=>21157,
+39476=>21158,
+39477=>21159,
+39481=>21160,
+39482=>21161,
+39483=>21162,
+39484=>21163,
+39485=>21164,
+39487=>21165,
+39494=>21166,
+39495=>21167,
+39496=>21168,
+39497=>21169,
+39499=>21170,
+39500=>21171,
+39502=>21172,
+39504=>21173,
+39505=>21174,
+39506=>21175,
+39507=>21176,
+39508=>21177,
+39510=>21178,
+39512=>21179,
+39513=>21180,
+39516=>21181,
+39517=>21182,
+39518=>21183,
+39520=>21184,
+39521=>21185,
+39523=>21186,
+39526=>21187,
+39527=>21188,
+39528=>21189,
+39529=>21190,
+39531=>21191,
+39538=>21192,
+39555=>21193,
+39561=>21194,
+39565=>21195,
+39566=>21196,
+39572=>21197,
+39573=>21198,
+39577=>21199,
+39590=>21200,
+39593=>21201,
+39594=>21202,
+39595=>21203,
+39596=>21204,
+39597=>21205,
+39598=>21206,
+39602=>21207,
+39603=>21208,
+39604=>21209,
+39605=>21210,
+39609=>21211,
+39611=>21212,
+39613=>21213,
+39614=>21214,
+39615=>21215,
+39619=>21216,
+39620=>21217,
+39622=>21218,
+39623=>21219,
+39624=>21220,
+39625=>21221,
+39626=>21222,
+39629=>21223,
+39630=>21224,
+39632=>21225,
+39639=>21226,
+39641=>21227,
+39642=>21228,
+39643=>21229,
+39644=>21230,
+39645=>21231,
+39646=>21232,
+39648=>21233,
+39650=>21234,
+39651=>21235,
+39652=>21236,
+39653=>21237,
+39655=>21238,
+39656=>21239,
+39657=>21240,
+39658=>21241,
+39660=>21242,
+39664=>21243,
+39665=>21244,
+39666=>21245,
+39667=>21246,
+39668=>21247,
+39669=>21248,
+39670=>21249,
+39671=>21250,
+39672=>21251,
+39674=>21252,
+39676=>21253,
+39677=>21254,
+39678=>21255,
+39679=>21256,
+39680=>21257,
+39681=>21258,
+39682=>21259,
+39684=>21260,
+39685=>21261,
+39687=>21262,
+39689=>21263,
+39690=>21264,
+39691=>21265,
+39692=>21266,
+39694=>21267,
+39696=>21268,
+39697=>21269,
+39698=>21270,
+39700=>21271,
+39701=>21272,
+39702=>21273,
+39703=>21274,
+39704=>21275,
+39705=>21276,
+39707=>21277,
+39708=>21278,
+39709=>21279,
+39710=>21280,
+39712=>21281,
+39713=>21282,
+39716=>21283,
+39718=>21284,
+39720=>21285,
+39722=>21286,
+39723=>21287,
+39724=>21288,
+39725=>21289,
+39728=>21290,
+39731=>21291,
+39732=>21292,
+39733=>21293,
+39734=>21294,
+39735=>21295,
+39736=>21296,
+39737=>21297,
+39738=>21298,
+39741=>21299,
+39742=>21300,
+39743=>21301,
+39744=>21302,
+39750=>21303,
+39754=>21304,
+39755=>21305,
+39756=>21306,
+39760=>21307,
+39762=>21308,
+39763=>21309,
+39765=>21310,
+39766=>21311,
+39767=>21312,
+39769=>21313,
+39771=>21314,
+39772=>21315,
+39773=>21316,
+39774=>21317,
+39775=>21318,
+39776=>21319,
+39777=>21320,
+39778=>21321,
+39779=>21322,
+39780=>21323,
+39781=>21324,
+39782=>21325,
+39783=>21326,
+39784=>21327,
+39785=>21328,
+39786=>21329,
+39787=>21330,
+39788=>21331,
+39789=>21332,
+39790=>21333,
+39792=>21334,
+39793=>21335,
+39794=>21336,
+39795=>21337,
+39797=>21338,
+39798=>21339,
+39800=>21340,
+39801=>21341,
+39802=>21342,
+39803=>21343,
+39804=>21344,
+39805=>21345,
+39806=>21346,
+39807=>21347,
+39808=>21348,
+39810=>21349,
+39812=>21350,
+39813=>21351,
+39814=>21352,
+39815=>21353,
+39816=>21354,
+39817=>21355,
+39818=>21356,
+39819=>21357,
+39820=>21358,
+39821=>21359,
+39823=>21360,
+39827=>21361,
+39828=>21362,
+39829=>21363,
+39830=>21364,
+39831=>21365,
+39832=>21366,
+39833=>21367,
+39835=>21368,
+39836=>21369,
+39839=>21370,
+39840=>21371,
+39841=>21372,
+39842=>21373,
+39843=>21374,
+39844=>21375,
+39845=>21376,
+39846=>21377,
+39847=>21378,
+39848=>21379,
+39849=>21380,
+39852=>21381,
+39855=>21382,
+39856=>21383,
+39857=>21384,
+39858=>21385,
+39859=>21386,
+39860=>21387,
+39861=>21388,
+39862=>21389,
+39863=>21390,
+39864=>21391,
+39865=>21392,
+39866=>21393,
+39867=>21394,
+39868=>21395,
+39869=>21396,
+39870=>21397,
+39871=>21398,
+39874=>21399,
+39875=>21400,
+39876=>21401,
+39877=>21402,
+39878=>21403,
+39880=>21404,
+39883=>21405,
+39884=>21406,
+39885=>21407,
+39886=>21408,
+39887=>21409,
+39888=>21410,
+39889=>21411,
+39890=>21412,
+39891=>21413,
+39893=>21414,
+39895=>21415,
+39896=>21416,
+39897=>21417,
+39898=>21418,
+39900=>21419,
+39902=>21420,
+39903=>21421,
+39904=>21422,
+39907=>21423,
+39909=>21424,
+39910=>21425,
+39913=>21426,
+39916=>21427,
+39917=>21428,
+39918=>21429,
+39919=>21430,
+39921=>21431,
+39922=>21432,
+39923=>21433,
+39925=>21434,
+39926=>21435,
+39927=>21436,
+39928=>21437,
+39929=>21438,
+39930=>21439,
+39931=>21440,
+39932=>21441,
+39934=>21442,
+39936=>21443,
+39937=>21444,
+39938=>21445,
+39939=>21446,
+39940=>21447,
+39941=>21448,
+39942=>21449,
+39943=>21450,
+39946=>21451,
+39947=>21452,
+39948=>21453,
+39950=>21454,
+39951=>21455,
+39953=>21456,
+39956=>21457,
+39957=>21458,
+39958=>21459,
+39959=>21460,
+39960=>21461,
+39961=>21462,
+39962=>21463,
+39963=>21464,
+39964=>21465,
+39965=>21466,
+39966=>21467,
+39967=>21468,
+39969=>21469,
+39970=>21470,
+39972=>21471,
+39974=>21472,
+39975=>21473,
+39978=>21474,
+39979=>21475,
+39980=>21476,
+39982=>21477,
+39983=>21478,
+39984=>21479,
+39988=>21480,
+39990=>21481,
+39992=>21482,
+39994=>21483,
+39996=>21484,
+39997=>21485,
+39999=>21486,
+40000=>21487,
+40001=>21488,
+40002=>21489,
+40003=>21490,
+40004=>21491,
+40006=>21492,
+40007=>21493,
+40010=>21494,
+40011=>21495,
+40012=>21496,
+40013=>21497,
+40014=>21498,
+40015=>21499,
+40016=>21500,
+40017=>21501,
+40019=>21502,
+40021=>21503,
+40025=>21504,
+40026=>21505,
+40027=>21506,
+40028=>21507,
+40030=>21508,
+40032=>21509,
+40033=>21510,
+40034=>21511,
+40035=>21512,
+40036=>21513,
+40037=>21514,
+40038=>21515,
+40040=>21516,
+40041=>21517,
+40042=>21518,
+40043=>21519,
+40044=>21520,
+40046=>21521,
+40047=>21522,
+40048=>21523,
+40049=>21524,
+40050=>21525,
+40051=>21526,
+40052=>21527,
+40053=>21528,
+40054=>21529,
+40055=>21530,
+40057=>21531,
+40059=>21532,
+40061=>21533,
+40062=>21534,
+40064=>21535,
+40067=>21536,
+40068=>21537,
+40073=>21538,
+40074=>21539,
+40076=>21540,
+40079=>21541,
+40083=>21542,
+40086=>21543,
+40087=>21544,
+40088=>21545,
+40089=>21546,
+40093=>21547,
+40106=>21548,
+40108=>21549,
+40111=>21550,
+40121=>21551,
+40126=>21552,
+40127=>21553,
+40128=>21554,
+40129=>21555,
+40130=>21556,
+40136=>21557,
+40137=>21558,
+40145=>21559,
+40146=>21560,
+40154=>21561,
+40155=>21562,
+40160=>21563,
+40161=>21564,
+40163=>21565,
+40164=>21566,
+40166=>21567,
+40167=>21568,
+40168=>21569,
+40170=>21570,
+40171=>21571,
+40173=>21572,
+40174=>21573,
+40175=>21574,
+40176=>21575,
+40177=>21576,
+40178=>21577,
+40181=>21578,
+40183=>21579,
+40184=>21580,
+40185=>21581,
+40186=>21582,
+40187=>21583,
+40188=>21584,
+40189=>21585,
+40190=>21586,
+40191=>21587,
+40192=>21588,
+40193=>21589,
+40194=>21590,
+40195=>21591,
+40196=>21592,
+40197=>21593,
+40200=>21594,
+40202=>21595,
+40203=>21596,
+40204=>21597,
+40205=>21598,
+40206=>21599,
+40207=>21600,
+40208=>21601,
+40209=>21602,
+40210=>21603,
+40211=>21604,
+40212=>21605,
+40214=>21606,
+40215=>21607,
+40216=>21608,
+40217=>21609,
+40218=>21610,
+40220=>21611,
+40222=>21612,
+40224=>21613,
+40225=>21614,
+40226=>21615,
+40228=>21616,
+40229=>21617,
+40231=>21618,
+40233=>21619,
+40234=>21620,
+40235=>21621,
+40236=>21622,
+40237=>21623,
+40238=>21624,
+40241=>21625,
+40242=>21626,
+40243=>21627,
+40244=>21628,
+40245=>21629,
+40246=>21630,
+40247=>21631,
+40248=>21632,
+40249=>21633,
+40250=>21634,
+40252=>21635,
+40253=>21636,
+40254=>21637,
+40256=>21638,
+40257=>21639,
+40259=>21640,
+40260=>21641,
+40261=>21642,
+40262=>21643,
+40263=>21644,
+40264=>21645,
+40265=>21646,
+40266=>21647,
+40267=>21648,
+40268=>21649,
+40269=>21650,
+40270=>21651,
+40271=>21652,
+40272=>21653,
+40276=>21654,
+40277=>21655,
+40278=>21656,
+40279=>21657,
+40280=>21658,
+40281=>21659,
+40282=>21660,
+40283=>21661,
+40286=>21662,
+40287=>21663,
+40290=>21664,
+40291=>21665,
+40292=>21666,
+40293=>21667,
+40294=>21668,
+40295=>21669,
+40296=>21670,
+40297=>21671,
+40299=>21672,
+40301=>21673,
+40302=>21674,
+40304=>21675,
+40305=>21676,
+40307=>21677,
+40308=>21678,
+40309=>21679,
+40310=>21680,
+40311=>21681,
+40312=>21682,
+40313=>21683,
+40314=>21684,
+40315=>21685,
+40316=>21686,
+40317=>21687,
+40318=>21688,
+40319=>21689,
+40320=>21690,
+40321=>21691,
+40322=>21692,
+40323=>21693,
+40324=>21694,
+40325=>21695,
+40326=>21696,
+40328=>21697,
+40330=>21698,
+40331=>21699,
+40332=>21700,
+40333=>21701,
+40334=>21702,
+40335=>21703,
+40336=>21704,
+40337=>21705,
+40338=>21706,
+40340=>21707,
+40341=>21708,
+40342=>21709,
+40343=>21710,
+40345=>21711,
+40347=>21712,
+40348=>21713,
+40349=>21714,
+40350=>21715,
+40351=>21716,
+40352=>21717,
+40353=>21718,
+40354=>21719,
+40355=>21720,
+40356=>21721,
+40358=>21722,
+40359=>21723,
+40360=>21724,
+40362=>21725,
+40363=>21726,
+40364=>21727,
+40365=>21728,
+40366=>21729,
+40368=>21730,
+40369=>21731,
+40370=>21732,
+40371=>21733,
+40373=>21734,
+40374=>21735,
+40375=>21736,
+40376=>21737,
+40377=>21738,
+40378=>21739,
+40381=>21740,
+40382=>21741,
+40383=>21742,
+40385=>21743,
+40387=>21744,
+40389=>21745,
+40390=>21746,
+40391=>21747,
+40392=>21748,
+40393=>21749,
+40394=>21750,
+40395=>21751,
+40396=>21752,
+40397=>21753,
+40398=>21754,
+40399=>21755,
+40400=>21756,
+40401=>21757,
+40402=>21758,
+40404=>21759,
+40405=>21760,
+40406=>21761,
+40408=>21762,
+40411=>21763,
+40412=>21764,
+40413=>21765,
+40414=>21766,
+40415=>21767,
+40416=>21768,
+40417=>21769,
+40418=>21770,
+40419=>21771,
+40420=>21772,
+40423=>21773,
+40424=>21774,
+40425=>21775,
+40426=>21776,
+40427=>21777,
+40428=>21778,
+40429=>21779,
+40430=>21780,
+40432=>21781,
+40433=>21782,
+40436=>21783,
+40437=>21784,
+40438=>21785,
+40439=>21786,
+40443=>21787,
+40444=>21788,
+40445=>21789,
+40446=>21790,
+40447=>21791,
+40448=>21792,
+40449=>21793,
+40450=>21794,
+40451=>21795,
+40452=>21796,
+40453=>21797,
+40454=>21798,
+40455=>21799,
+40456=>21800,
+40457=>21801,
+40458=>21802,
+40459=>21803,
+40461=>21804,
+40462=>21805,
+40463=>21806,
+40464=>21807,
+40465=>21808,
+40466=>21809,
+40467=>21810,
+40468=>21811,
+40470=>21812,
+40471=>21813,
+40472=>21814,
+40473=>21815,
+40476=>21816,
+40484=>21817,
+40487=>21818,
+40494=>21819,
+40496=>21820,
+40500=>21821,
+40507=>21822,
+40508=>21823,
+40512=>21824,
+40525=>21825,
+40528=>21826,
+40530=>21827,
+40531=>21828,
+40532=>21829,
+40534=>21830,
+40537=>21831,
+40541=>21832,
+40543=>21833,
+40544=>21834,
+40545=>21835,
+40546=>21836,
+40549=>21837,
+40558=>21838,
+40559=>21839,
+40562=>21840,
+40564=>21841,
+40566=>21842,
+40567=>21843,
+40568=>21844,
+40571=>21845,
+40576=>21846,
+40577=>21847,
+40579=>21848,
+40580=>21849,
+40581=>21850,
+40582=>21851,
+40585=>21852,
+40586=>21853,
+40588=>21854,
+40589=>21855,
+40590=>21856,
+40591=>21857,
+40592=>21858,
+40593=>21859,
+40596=>21860,
+40597=>21861,
+40598=>21862,
+40600=>21863,
+40601=>21864,
+40602=>21865,
+40603=>21866,
+40604=>21867,
+40606=>21868,
+40608=>21869,
+40609=>21870,
+40610=>21871,
+40611=>21872,
+40612=>21873,
+40615=>21874,
+40616=>21875,
+40618=>21876,
+40619=>21877,
+40620=>21878,
+40621=>21879,
+40622=>21880,
+40624=>21881,
+40625=>21882,
+40626=>21883,
+40627=>21884,
+40630=>21885,
+40631=>21886,
+40633=>21887,
+40634=>21888,
+40636=>21889,
+40639=>21890,
+40640=>21891,
+40641=>21892,
+40642=>21893,
+12232=>21894,
+40643=>21894,
+40645=>21895,
+40646=>21896,
+40647=>21897,
+40648=>21898,
+40650=>21899,
+40651=>21900,
+40656=>21901,
+40658=>21902,
+40659=>21903,
+40661=>21904,
+40662=>21905,
+40663=>21906,
+40665=>21907,
+40666=>21908,
+40673=>21909,
+40675=>21910,
+40676=>21911,
+40678=>21912,
+40683=>21913,
+40684=>21914,
+40685=>21915,
+40686=>21916,
+40688=>21917,
+40689=>21918,
+40691=>21919,
+40693=>21920,
+40694=>21921,
+40696=>21922,
+40698=>21923,
+40704=>21924,
+40705=>21925,
+40706=>21926,
+40707=>21927,
+40708=>21928,
+40709=>21929,
+40710=>21930,
+40711=>21931,
+40712=>21932,
+40714=>21933,
+40716=>21934,
+40719=>21935,
+40721=>21936,
+40722=>21937,
+40724=>21938,
+40726=>21939,
+40728=>21940,
+40730=>21941,
+40731=>21942,
+40732=>21943,
+40733=>21944,
+40734=>21945,
+40735=>21946,
+40737=>21947,
+40739=>21948,
+40740=>21949,
+40741=>21950,
+40742=>21951,
+40743=>21952,
+40744=>21953,
+40745=>21954,
+40746=>21955,
+40747=>21956,
+40749=>21957,
+40750=>21958,
+40752=>21959,
+40753=>21960,
+40754=>21961,
+40755=>21962,
+40756=>21963,
+40757=>21964,
+40758=>21965,
+40760=>21966,
+40762=>21967,
+40764=>21968,
+40767=>21969,
+40768=>21970,
+40769=>21971,
+40770=>21972,
+40771=>21973,
+40773=>21974,
+40774=>21975,
+40775=>21976,
+40776=>21977,
+40777=>21978,
+40780=>21979,
+40781=>21980,
+40782=>21981,
+40787=>21982,
+40789=>21983,
+40790=>21984,
+40791=>21985,
+40792=>21986,
+40794=>21987,
+40795=>21988,
+40797=>21989,
+40798=>21990,
+40802=>21991,
+40804=>21992,
+40805=>21993,
+40807=>21994,
+40808=>21995,
+40809=>21996,
+40811=>21997,
+40813=>21998,
+40814=>21999,
+40815=>22000,
+40816=>22001,
+40817=>22002,
+40819=>22003,
+40820=>22004,
+40821=>22005,
+40822=>22006,
+40824=>22007,
+40825=>22008,
+40826=>22009,
+40827=>22010,
+40828=>22011,
+40829=>22012,
+40830=>22013,
+40833=>22014,
+40834=>22015,
+40846=>22016,
+40847=>22017,
+40849=>22018,
+40850=>22019,
+40851=>22020,
+40854=>22021,
+40855=>22022,
+40856=>22023,
+40861=>22024,
+40862=>22025,
+40865=>22026,
+40866=>22027,
+40867=>22028,
+40868=>22029,
+40869=>22030,
+63788=>22031,
+64013=>22032,
+64014=>22033,
+64015=>22034,
+64017=>22035,
+64019=>22036,
+64020=>22037,
+64024=>22038,
+64031=>22039,
+64032=>22040,
+64033=>22041,
+64035=>22042,
+64036=>22043,
+64039=>22044,
+64040=>22045,
+64041=>22046,
+11905=>22047,
+59413=>22047,
+131207=>22048,
+59414=>22048,
+131209=>22049,
+59415=>22049,
+131276=>22050,
+59416=>22050,
+11908=>22051,
+59417=>22051,
+13427=>22052,
+59418=>22052,
+13383=>22053,
+59419=>22053,
+11912=>22054,
+59420=>22054,
+11915=>22055,
+59421=>22055,
+40884=>22056,
+59422=>22056,
+13726=>22057,
+59423=>22057,
+13850=>22058,
+59424=>22058,
+13838=>22059,
+59425=>22059,
+11916=>22060,
+59426=>22060,
+11927=>22061,
+59427=>22061,
+14702=>22062,
+59428=>22062,
+14616=>22063,
+59429=>22063,
+40885=>22064,
+59430=>22064,
+14799=>22065,
+59431=>22065,
+14815=>22066,
+59432=>22066,
+14963=>22067,
+59433=>22067,
+14800=>22068,
+59434=>22068,
+40886=>22069,
+59435=>22069,
+40887=>22070,
+59436=>22070,
+15182=>22071,
+59437=>22071,
+15470=>22072,
+59438=>22072,
+15584=>22073,
+59439=>22073,
+11943=>22074,
+59440=>22074,
+136663=>22075,
+59441=>22075,
+40888=>22076,
+59442=>22076,
+11946=>22077,
+59443=>22077,
+16470=>22078,
+59444=>22078,
+16735=>22079,
+59445=>22079,
+11950=>22080,
+59446=>22080,
+17207=>22081,
+59447=>22081,
+11955=>22082,
+59448=>22082,
+11958=>22083,
+59449=>22083,
+11959=>22084,
+59450=>22084,
+141711=>22085,
+59451=>22085,
+17329=>22086,
+59452=>22086,
+17324=>22087,
+59453=>22087,
+11963=>22088,
+59454=>22088,
+17373=>22089,
+59455=>22089,
+17622=>22090,
+59456=>22090,
+18017=>22091,
+59457=>22091,
+17996=>22092,
+59458=>22092,
+40889=>22093,
+132361=>22093,
+59459=>22093,
+18211=>22094,
+59460=>22094,
+18217=>22095,
+59461=>22095,
+18300=>22096,
+59462=>22096,
+18317=>22097,
+59463=>22097,
+11978=>22098,
+59464=>22098,
+18759=>22099,
+59465=>22099,
+18810=>22100,
+59466=>22100,
+18813=>22101,
+59467=>22101,
+18818=>22102,
+59468=>22102,
+18819=>22103,
+59469=>22103,
+18821=>22104,
+59470=>22104,
+18822=>22105,
+59471=>22105,
+18847=>22106,
+59472=>22106,
+18843=>22107,
+59473=>22107,
+18871=>22108,
+59474=>22108,
+18870=>22109,
+59475=>22109,
+40890=>22110,
+133533=>22110,
+59476=>22110,
+147966=>22111,
+59477=>22111,
+19619=>22112,
+59478=>22112,
+19615=>22113,
+59479=>22113,
+19616=>22114,
+59480=>22114,
+19617=>22115,
+59481=>22115,
+19575=>22116,
+59482=>22116,
+19618=>22117,
+59483=>22117,
+19731=>22118,
+59484=>22118,
+19732=>22119,
+59485=>22119,
+19733=>22120,
+59486=>22120,
+19734=>22121,
+59487=>22121,
+19735=>22122,
+59488=>22122,
+19736=>22123,
+59489=>22123,
+19737=>22124,
+59490=>22124,
+19886=>22125,
+59491=>22125,
+40891=>22126,
+59492=>22126,
+8364=>22353,
+59244=>22353,
+165=>22354,
+12351=>22357,
+12436=>22375,
+12535=>22390,
+12537=>22391,
+12536=>22392,
+12538=>22393,
+12339=>22395,
+12340=>22396,
+12341=>22397,
+12344=>22398,
+12345=>22399,
+12346=>22400,
+12586=>22401,
+12587=>22402,
+12588=>22403,
+12704=>22404,
+12705=>22405,
+12706=>22406,
+12707=>22407,
+12708=>22408,
+12709=>22409,
+12710=>22410,
+12711=>22411,
+12712=>22412,
+12713=>22413,
+12714=>22414,
+12715=>22415,
+12716=>22416,
+12717=>22417,
+12718=>22418,
+12719=>22419,
+12720=>22420,
+12721=>22421,
+12722=>22422,
+12723=>22423,
+12724=>22424,
+12725=>22425,
+12726=>22426,
+12727=>22427,
+11904=>22428,
+11906=>22429,
+11907=>22430,
+11909=>22431,
+11910=>22432,
+11911=>22433,
+11913=>22434,
+11914=>22435,
+11917=>22436,
+11918=>22437,
+11919=>22438,
+11920=>22439,
+11921=>22440,
+11922=>22441,
+11923=>22442,
+11924=>22443,
+11925=>22444,
+11926=>22445,
+11928=>22446,
+11929=>22447,
+11931=>22448,
+11932=>22449,
+11933=>22450,
+11934=>22451,
+11935=>22452,
+11936=>22453,
+11937=>22454,
+11938=>22455,
+11939=>22456,
+11940=>22457,
+11941=>22458,
+11942=>22459,
+11944=>22460,
+11945=>22461,
+11947=>22462,
+11948=>22463,
+11949=>22464,
+11951=>22465,
+11952=>22466,
+11953=>22467,
+11954=>22468,
+11956=>22469,
+11957=>22470,
+11960=>22471,
+11961=>22472,
+11962=>22473,
+11964=>22474,
+11965=>22475,
+11966=>22476,
+11967=>22477,
+11968=>22478,
+11969=>22479,
+11970=>22480,
+11971=>22481,
+11972=>22482,
+11973=>22483,
+11974=>22484,
+11975=>22485,
+11976=>22486,
+11977=>22487,
+11979=>22488,
+11980=>22489,
+11981=>22490,
+11982=>22491,
+11983=>22492,
+11984=>22493,
+11985=>22494,
+11986=>22495,
+11987=>22496,
+11988=>22497,
+11989=>22498,
+11990=>22499,
+11991=>22500,
+11992=>22501,
+11993=>22502,
+11994=>22503,
+11995=>22504,
+11996=>22505,
+11997=>22506,
+11998=>22507,
+11999=>22508,
+12000=>22509,
+12001=>22510,
+12002=>22511,
+12003=>22512,
+12004=>22513,
+12005=>22514,
+12006=>22515,
+12007=>22516,
+12008=>22517,
+12009=>22518,
+12010=>22519,
+12011=>22520,
+12012=>22521,
+12013=>22522,
+12014=>22523,
+12015=>22524,
+12016=>22525,
+12017=>22526,
+12018=>22527,
+12019=>22528,
+13312=>22529,
+13313=>22530,
+13314=>22531,
+13315=>22532,
+13316=>22533,
+13317=>22534,
+13318=>22535,
+13319=>22536,
+13320=>22537,
+13321=>22538,
+13322=>22539,
+13323=>22540,
+13324=>22541,
+13325=>22542,
+13326=>22543,
+13327=>22544,
+13328=>22545,
+13329=>22546,
+13330=>22547,
+13331=>22548,
+13332=>22549,
+13333=>22550,
+13334=>22551,
+13335=>22552,
+13336=>22553,
+13337=>22554,
+13338=>22555,
+13339=>22556,
+13340=>22557,
+13341=>22558,
+13342=>22559,
+13343=>22560,
+13344=>22561,
+13345=>22562,
+13346=>22563,
+13347=>22564,
+13348=>22565,
+13349=>22566,
+13350=>22567,
+13351=>22568,
+13352=>22569,
+13353=>22570,
+13354=>22571,
+13355=>22572,
+13356=>22573,
+13357=>22574,
+13358=>22575,
+13359=>22576,
+13360=>22577,
+13361=>22578,
+13362=>22579,
+13363=>22580,
+13364=>22581,
+13365=>22582,
+13366=>22583,
+13367=>22584,
+13368=>22585,
+13369=>22586,
+13370=>22587,
+13371=>22588,
+13372=>22589,
+13373=>22590,
+13374=>22591,
+13375=>22592,
+13376=>22593,
+13377=>22594,
+13378=>22595,
+13379=>22596,
+13380=>22597,
+13381=>22598,
+13382=>22599,
+13384=>22600,
+13385=>22601,
+13386=>22602,
+13387=>22603,
+13388=>22604,
+13389=>22605,
+13390=>22606,
+13391=>22607,
+13392=>22608,
+13393=>22609,
+13394=>22610,
+13395=>22611,
+13396=>22612,
+13397=>22613,
+13398=>22614,
+13399=>22615,
+13400=>22616,
+13401=>22617,
+13402=>22618,
+13403=>22619,
+13404=>22620,
+13405=>22621,
+13406=>22622,
+13407=>22623,
+13408=>22624,
+13409=>22625,
+13410=>22626,
+13411=>22627,
+13412=>22628,
+13413=>22629,
+13414=>22630,
+13415=>22631,
+13416=>22632,
+13417=>22633,
+13418=>22634,
+13419=>22635,
+13420=>22636,
+13421=>22637,
+13422=>22638,
+13423=>22639,
+13424=>22640,
+13425=>22641,
+13426=>22642,
+13428=>22643,
+13429=>22644,
+13430=>22645,
+13431=>22646,
+13432=>22647,
+13433=>22648,
+13434=>22649,
+13435=>22650,
+13436=>22651,
+13437=>22652,
+13438=>22653,
+13439=>22654,
+13440=>22655,
+13441=>22656,
+13442=>22657,
+13443=>22658,
+13444=>22659,
+13445=>22660,
+13446=>22661,
+13447=>22662,
+13448=>22663,
+13449=>22664,
+13450=>22665,
+13451=>22666,
+13452=>22667,
+13453=>22668,
+13454=>22669,
+13455=>22670,
+13456=>22671,
+13457=>22672,
+13458=>22673,
+13459=>22674,
+13460=>22675,
+13461=>22676,
+13462=>22677,
+13463=>22678,
+13464=>22679,
+13465=>22680,
+13466=>22681,
+13467=>22682,
+13468=>22683,
+13469=>22684,
+13470=>22685,
+13471=>22686,
+13472=>22687,
+13473=>22688,
+13474=>22689,
+13475=>22690,
+13476=>22691,
+13477=>22692,
+13478=>22693,
+13479=>22694,
+13480=>22695,
+13481=>22696,
+13482=>22697,
+13483=>22698,
+13484=>22699,
+13485=>22700,
+13486=>22701,
+13487=>22702,
+13488=>22703,
+13489=>22704,
+13490=>22705,
+13491=>22706,
+13492=>22707,
+13493=>22708,
+13494=>22709,
+13495=>22710,
+13496=>22711,
+13497=>22712,
+13498=>22713,
+13499=>22714,
+13500=>22715,
+13501=>22716,
+13502=>22717,
+13503=>22718,
+13504=>22719,
+13505=>22720,
+13506=>22721,
+13507=>22722,
+13508=>22723,
+13509=>22724,
+13510=>22725,
+13511=>22726,
+13512=>22727,
+13513=>22728,
+13514=>22729,
+13515=>22730,
+13516=>22731,
+13517=>22732,
+13518=>22733,
+13519=>22734,
+13520=>22735,
+13521=>22736,
+13522=>22737,
+13523=>22738,
+13524=>22739,
+13525=>22740,
+13526=>22741,
+13527=>22742,
+13528=>22743,
+13529=>22744,
+13530=>22745,
+13531=>22746,
+13532=>22747,
+13533=>22748,
+13534=>22749,
+13535=>22750,
+13536=>22751,
+13537=>22752,
+13538=>22753,
+13539=>22754,
+13540=>22755,
+13541=>22756,
+13542=>22757,
+13543=>22758,
+13544=>22759,
+13545=>22760,
+13546=>22761,
+13547=>22762,
+13548=>22763,
+13549=>22764,
+13550=>22765,
+13551=>22766,
+13552=>22767,
+13553=>22768,
+13554=>22769,
+13555=>22770,
+13556=>22771,
+13557=>22772,
+13558=>22773,
+13559=>22774,
+13560=>22775,
+13561=>22776,
+13562=>22777,
+13563=>22778,
+13564=>22779,
+13565=>22780,
+13566=>22781,
+13567=>22782,
+13568=>22783,
+13569=>22784,
+13570=>22785,
+13571=>22786,
+13572=>22787,
+13573=>22788,
+13574=>22789,
+13575=>22790,
+13576=>22791,
+13577=>22792,
+13578=>22793,
+13579=>22794,
+13580=>22795,
+13581=>22796,
+13582=>22797,
+13583=>22798,
+13584=>22799,
+13585=>22800,
+13586=>22801,
+13587=>22802,
+13588=>22803,
+13589=>22804,
+13590=>22805,
+13591=>22806,
+13592=>22807,
+13593=>22808,
+13594=>22809,
+13595=>22810,
+13596=>22811,
+13597=>22812,
+13598=>22813,
+13599=>22814,
+13600=>22815,
+13601=>22816,
+13602=>22817,
+13603=>22818,
+13604=>22819,
+13605=>22820,
+13606=>22821,
+13607=>22822,
+13608=>22823,
+13609=>22824,
+13610=>22825,
+13611=>22826,
+13612=>22827,
+13613=>22828,
+13614=>22829,
+13615=>22830,
+13616=>22831,
+13617=>22832,
+13618=>22833,
+13619=>22834,
+13620=>22835,
+13621=>22836,
+13622=>22837,
+13623=>22838,
+13624=>22839,
+13625=>22840,
+13626=>22841,
+13627=>22842,
+13628=>22843,
+13629=>22844,
+13630=>22845,
+13631=>22846,
+13632=>22847,
+13633=>22848,
+13634=>22849,
+13635=>22850,
+13636=>22851,
+13637=>22852,
+13638=>22853,
+13639=>22854,
+13640=>22855,
+13641=>22856,
+13642=>22857,
+13643=>22858,
+13644=>22859,
+13645=>22860,
+13646=>22861,
+13647=>22862,
+13648=>22863,
+13649=>22864,
+13650=>22865,
+13651=>22866,
+13652=>22867,
+13653=>22868,
+13654=>22869,
+13655=>22870,
+13656=>22871,
+13657=>22872,
+13658=>22873,
+13659=>22874,
+13660=>22875,
+13661=>22876,
+13662=>22877,
+13663=>22878,
+13664=>22879,
+13665=>22880,
+13666=>22881,
+13667=>22882,
+13668=>22883,
+13669=>22884,
+13670=>22885,
+13671=>22886,
+13672=>22887,
+13673=>22888,
+13674=>22889,
+13675=>22890,
+13676=>22891,
+13677=>22892,
+13678=>22893,
+13679=>22894,
+13680=>22895,
+13681=>22896,
+13682=>22897,
+13683=>22898,
+13684=>22899,
+13685=>22900,
+13686=>22901,
+13687=>22902,
+13688=>22903,
+13689=>22904,
+13690=>22905,
+13691=>22906,
+13692=>22907,
+13693=>22908,
+13694=>22909,
+13695=>22910,
+13696=>22911,
+13697=>22912,
+13698=>22913,
+13699=>22914,
+13700=>22915,
+13701=>22916,
+13702=>22917,
+13703=>22918,
+13704=>22919,
+13705=>22920,
+13706=>22921,
+13707=>22922,
+13708=>22923,
+13709=>22924,
+13710=>22925,
+13711=>22926,
+13712=>22927,
+13713=>22928,
+13714=>22929,
+13715=>22930,
+13716=>22931,
+13717=>22932,
+13718=>22933,
+13719=>22934,
+13720=>22935,
+13721=>22936,
+13722=>22937,
+13723=>22938,
+13724=>22939,
+13725=>22940,
+13727=>22941,
+13728=>22942,
+13729=>22943,
+13730=>22944,
+13731=>22945,
+13732=>22946,
+13733=>22947,
+13734=>22948,
+13735=>22949,
+13736=>22950,
+13737=>22951,
+13738=>22952,
+13739=>22953,
+13740=>22954,
+13741=>22955,
+13742=>22956,
+13743=>22957,
+13744=>22958,
+13745=>22959,
+13746=>22960,
+13747=>22961,
+13748=>22962,
+13749=>22963,
+13750=>22964,
+13751=>22965,
+13752=>22966,
+13753=>22967,
+13754=>22968,
+13755=>22969,
+13756=>22970,
+13757=>22971,
+13758=>22972,
+13759=>22973,
+13760=>22974,
+13761=>22975,
+13762=>22976,
+13763=>22977,
+13764=>22978,
+13765=>22979,
+13766=>22980,
+13767=>22981,
+13768=>22982,
+13769=>22983,
+13770=>22984,
+13771=>22985,
+13772=>22986,
+13773=>22987,
+13774=>22988,
+13775=>22989,
+13776=>22990,
+13777=>22991,
+13778=>22992,
+13779=>22993,
+13780=>22994,
+13781=>22995,
+13782=>22996,
+13783=>22997,
+13784=>22998,
+13785=>22999,
+13786=>23000,
+13787=>23001,
+13788=>23002,
+13789=>23003,
+13790=>23004,
+13791=>23005,
+13792=>23006,
+13793=>23007,
+13794=>23008,
+13795=>23009,
+13796=>23010,
+13797=>23011,
+13798=>23012,
+13799=>23013,
+13800=>23014,
+13801=>23015,
+13802=>23016,
+13803=>23017,
+13804=>23018,
+13805=>23019,
+13806=>23020,
+13807=>23021,
+13808=>23022,
+13809=>23023,
+13810=>23024,
+13811=>23025,
+13812=>23026,
+13813=>23027,
+13814=>23028,
+13815=>23029,
+13816=>23030,
+13817=>23031,
+13818=>23032,
+13819=>23033,
+13820=>23034,
+13821=>23035,
+13822=>23036,
+13823=>23037,
+13824=>23038,
+13825=>23039,
+13826=>23040,
+13827=>23041,
+13828=>23042,
+13829=>23043,
+13830=>23044,
+13831=>23045,
+13832=>23046,
+13833=>23047,
+13834=>23048,
+13835=>23049,
+13836=>23050,
+13837=>23051,
+13839=>23052,
+13840=>23053,
+13841=>23054,
+13842=>23055,
+13843=>23056,
+13844=>23057,
+13845=>23058,
+13846=>23059,
+13847=>23060,
+13848=>23061,
+13849=>23062,
+13851=>23063,
+13852=>23064,
+13853=>23065,
+13854=>23066,
+13855=>23067,
+13856=>23068,
+13857=>23069,
+13858=>23070,
+13859=>23071,
+13860=>23072,
+13861=>23073,
+13862=>23074,
+13863=>23075,
+13864=>23076,
+13865=>23077,
+13866=>23078,
+13867=>23079,
+13868=>23080,
+13869=>23081,
+13870=>23082,
+13871=>23083,
+13872=>23084,
+13873=>23085,
+13874=>23086,
+13875=>23087,
+13876=>23088,
+13877=>23089,
+13878=>23090,
+13879=>23091,
+13880=>23092,
+13881=>23093,
+13882=>23094,
+13883=>23095,
+13884=>23096,
+13885=>23097,
+13886=>23098,
+13887=>23099,
+13888=>23100,
+13889=>23101,
+13890=>23102,
+13891=>23103,
+13892=>23104,
+13893=>23105,
+13894=>23106,
+13895=>23107,
+13896=>23108,
+13897=>23109,
+13898=>23110,
+13899=>23111,
+13900=>23112,
+13901=>23113,
+13902=>23114,
+13903=>23115,
+13904=>23116,
+13905=>23117,
+13906=>23118,
+13907=>23119,
+13908=>23120,
+13909=>23121,
+13910=>23122,
+13911=>23123,
+13912=>23124,
+13913=>23125,
+13914=>23126,
+13915=>23127,
+13916=>23128,
+13917=>23129,
+13918=>23130,
+13919=>23131,
+13920=>23132,
+13921=>23133,
+13922=>23134,
+13923=>23135,
+13924=>23136,
+13925=>23137,
+13926=>23138,
+13927=>23139,
+13928=>23140,
+13929=>23141,
+13930=>23142,
+13931=>23143,
+13932=>23144,
+13933=>23145,
+13934=>23146,
+13935=>23147,
+13936=>23148,
+13937=>23149,
+13938=>23150,
+13939=>23151,
+13940=>23152,
+13941=>23153,
+13942=>23154,
+13943=>23155,
+13944=>23156,
+13945=>23157,
+13946=>23158,
+13947=>23159,
+13948=>23160,
+13949=>23161,
+13950=>23162,
+13951=>23163,
+13952=>23164,
+13953=>23165,
+13954=>23166,
+13955=>23167,
+13956=>23168,
+13957=>23169,
+13958=>23170,
+13959=>23171,
+13960=>23172,
+13961=>23173,
+13962=>23174,
+13963=>23175,
+13964=>23176,
+13965=>23177,
+13966=>23178,
+13967=>23179,
+13968=>23180,
+13969=>23181,
+13970=>23182,
+13971=>23183,
+13972=>23184,
+13973=>23185,
+13974=>23186,
+13975=>23187,
+13976=>23188,
+13977=>23189,
+13978=>23190,
+13979=>23191,
+13980=>23192,
+13981=>23193,
+13982=>23194,
+13983=>23195,
+13984=>23196,
+13985=>23197,
+13986=>23198,
+13987=>23199,
+13988=>23200,
+13989=>23201,
+13990=>23202,
+13991=>23203,
+13992=>23204,
+13993=>23205,
+13994=>23206,
+13995=>23207,
+13996=>23208,
+13997=>23209,
+13998=>23210,
+13999=>23211,
+14000=>23212,
+14001=>23213,
+14002=>23214,
+14003=>23215,
+14004=>23216,
+14005=>23217,
+14006=>23218,
+14007=>23219,
+14008=>23220,
+14009=>23221,
+14010=>23222,
+14011=>23223,
+14012=>23224,
+14013=>23225,
+14014=>23226,
+14015=>23227,
+14016=>23228,
+14017=>23229,
+14018=>23230,
+14019=>23231,
+14020=>23232,
+14021=>23233,
+14022=>23234,
+14023=>23235,
+14024=>23236,
+14025=>23237,
+14026=>23238,
+14027=>23239,
+14028=>23240,
+14029=>23241,
+14030=>23242,
+14031=>23243,
+14032=>23244,
+14033=>23245,
+14034=>23246,
+14035=>23247,
+14036=>23248,
+14037=>23249,
+14038=>23250,
+14039=>23251,
+14040=>23252,
+14041=>23253,
+14042=>23254,
+14043=>23255,
+14044=>23256,
+14045=>23257,
+14046=>23258,
+14047=>23259,
+14048=>23260,
+14049=>23261,
+14050=>23262,
+14051=>23263,
+14052=>23264,
+14053=>23265,
+14054=>23266,
+14055=>23267,
+14056=>23268,
+14057=>23269,
+14058=>23270,
+14059=>23271,
+14060=>23272,
+14061=>23273,
+14062=>23274,
+14063=>23275,
+14064=>23276,
+14065=>23277,
+14066=>23278,
+14067=>23279,
+14068=>23280,
+14069=>23281,
+14070=>23282,
+14071=>23283,
+14072=>23284,
+14073=>23285,
+14074=>23286,
+14075=>23287,
+14076=>23288,
+14077=>23289,
+14078=>23290,
+14079=>23291,
+14080=>23292,
+14081=>23293,
+14082=>23294,
+14083=>23295,
+14084=>23296,
+14085=>23297,
+14086=>23298,
+14087=>23299,
+14088=>23300,
+14089=>23301,
+14090=>23302,
+14091=>23303,
+14092=>23304,
+14093=>23305,
+14094=>23306,
+14095=>23307,
+14096=>23308,
+14097=>23309,
+14098=>23310,
+14099=>23311,
+14100=>23312,
+14101=>23313,
+14102=>23314,
+14103=>23315,
+14104=>23316,
+14105=>23317,
+14106=>23318,
+14107=>23319,
+14108=>23320,
+14109=>23321,
+14110=>23322,
+14111=>23323,
+14112=>23324,
+14113=>23325,
+14114=>23326,
+14115=>23327,
+14116=>23328,
+14117=>23329,
+14118=>23330,
+14119=>23331,
+14120=>23332,
+14121=>23333,
+14122=>23334,
+14123=>23335,
+14124=>23336,
+14125=>23337,
+14126=>23338,
+14127=>23339,
+14128=>23340,
+14129=>23341,
+14130=>23342,
+14131=>23343,
+14132=>23344,
+14133=>23345,
+14134=>23346,
+14135=>23347,
+14136=>23348,
+14137=>23349,
+14138=>23350,
+14139=>23351,
+14140=>23352,
+14141=>23353,
+14142=>23354,
+14143=>23355,
+14144=>23356,
+14145=>23357,
+14146=>23358,
+14147=>23359,
+14148=>23360,
+14149=>23361,
+14150=>23362,
+14151=>23363,
+14152=>23364,
+14153=>23365,
+14154=>23366,
+14155=>23367,
+14156=>23368,
+14157=>23369,
+14158=>23370,
+14159=>23371,
+14160=>23372,
+14161=>23373,
+14162=>23374,
+14163=>23375,
+14164=>23376,
+14165=>23377,
+14166=>23378,
+14167=>23379,
+14168=>23380,
+14169=>23381,
+14170=>23382,
+14171=>23383,
+14172=>23384,
+14173=>23385,
+14174=>23386,
+14175=>23387,
+14176=>23388,
+14177=>23389,
+14178=>23390,
+14179=>23391,
+14180=>23392,
+14181=>23393,
+14182=>23394,
+14183=>23395,
+14184=>23396,
+14185=>23397,
+14186=>23398,
+14187=>23399,
+14188=>23400,
+14189=>23401,
+14190=>23402,
+14191=>23403,
+14192=>23404,
+14193=>23405,
+14194=>23406,
+14195=>23407,
+14196=>23408,
+14197=>23409,
+14198=>23410,
+14199=>23411,
+14200=>23412,
+14201=>23413,
+14202=>23414,
+14203=>23415,
+14204=>23416,
+14205=>23417,
+14206=>23418,
+14207=>23419,
+14208=>23420,
+14209=>23421,
+14210=>23422,
+14211=>23423,
+14212=>23424,
+14213=>23425,
+14214=>23426,
+14215=>23427,
+14216=>23428,
+14217=>23429,
+14218=>23430,
+14219=>23431,
+14220=>23432,
+14221=>23433,
+14222=>23434,
+14223=>23435,
+14224=>23436,
+14225=>23437,
+14226=>23438,
+14227=>23439,
+14228=>23440,
+14229=>23441,
+14230=>23442,
+14231=>23443,
+14232=>23444,
+14233=>23445,
+14234=>23446,
+14235=>23447,
+14236=>23448,
+14237=>23449,
+14238=>23450,
+14239=>23451,
+14240=>23452,
+14241=>23453,
+14242=>23454,
+14243=>23455,
+14244=>23456,
+14245=>23457,
+14246=>23458,
+14247=>23459,
+14248=>23460,
+14249=>23461,
+14250=>23462,
+14251=>23463,
+14252=>23464,
+14253=>23465,
+14254=>23466,
+14255=>23467,
+14256=>23468,
+14257=>23469,
+14258=>23470,
+14259=>23471,
+14260=>23472,
+14261=>23473,
+14262=>23474,
+14263=>23475,
+14264=>23476,
+14265=>23477,
+14266=>23478,
+14267=>23479,
+14268=>23480,
+14269=>23481,
+14270=>23482,
+14271=>23483,
+14272=>23484,
+14273=>23485,
+14274=>23486,
+14275=>23487,
+14276=>23488,
+14277=>23489,
+14278=>23490,
+14279=>23491,
+14280=>23492,
+14281=>23493,
+14282=>23494,
+14283=>23495,
+14284=>23496,
+14285=>23497,
+14286=>23498,
+14287=>23499,
+14288=>23500,
+14289=>23501,
+14290=>23502,
+14291=>23503,
+14292=>23504,
+14293=>23505,
+14294=>23506,
+14295=>23507,
+14296=>23508,
+14297=>23509,
+14298=>23510,
+14299=>23511,
+14300=>23512,
+14301=>23513,
+14302=>23514,
+14303=>23515,
+14304=>23516,
+14305=>23517,
+14306=>23518,
+14307=>23519,
+14308=>23520,
+14309=>23521,
+14310=>23522,
+14311=>23523,
+14312=>23524,
+14313=>23525,
+14314=>23526,
+14315=>23527,
+14316=>23528,
+14317=>23529,
+14318=>23530,
+14319=>23531,
+14320=>23532,
+14321=>23533,
+14322=>23534,
+14323=>23535,
+14324=>23536,
+14325=>23537,
+14326=>23538,
+14327=>23539,
+14328=>23540,
+14329=>23541,
+14330=>23542,
+14331=>23543,
+14332=>23544,
+14333=>23545,
+14334=>23546,
+14335=>23547,
+14336=>23548,
+14337=>23549,
+14338=>23550,
+14339=>23551,
+14340=>23552,
+14341=>23553,
+14342=>23554,
+14343=>23555,
+14344=>23556,
+14345=>23557,
+14346=>23558,
+14347=>23559,
+14348=>23560,
+14349=>23561,
+14350=>23562,
+14351=>23563,
+14352=>23564,
+14353=>23565,
+14354=>23566,
+14355=>23567,
+14356=>23568,
+14357=>23569,
+14358=>23570,
+14359=>23571,
+14360=>23572,
+14361=>23573,
+14362=>23574,
+14363=>23575,
+14364=>23576,
+14365=>23577,
+14366=>23578,
+14367=>23579,
+14368=>23580,
+14369=>23581,
+14370=>23582,
+14371=>23583,
+14372=>23584,
+14373=>23585,
+14374=>23586,
+14375=>23587,
+14376=>23588,
+14377=>23589,
+14378=>23590,
+14379=>23591,
+14380=>23592,
+14381=>23593,
+14382=>23594,
+14383=>23595,
+14384=>23596,
+14385=>23597,
+14386=>23598,
+14387=>23599,
+14388=>23600,
+14389=>23601,
+14390=>23602,
+14391=>23603,
+14392=>23604,
+14393=>23605,
+14394=>23606,
+14395=>23607,
+14396=>23608,
+14397=>23609,
+14398=>23610,
+14399=>23611,
+14400=>23612,
+14401=>23613,
+14402=>23614,
+14403=>23615,
+14404=>23616,
+14405=>23617,
+14406=>23618,
+14407=>23619,
+14408=>23620,
+14409=>23621,
+14410=>23622,
+14411=>23623,
+14412=>23624,
+14413=>23625,
+14414=>23626,
+14415=>23627,
+14416=>23628,
+14417=>23629,
+14418=>23630,
+14419=>23631,
+14420=>23632,
+14421=>23633,
+14422=>23634,
+14423=>23635,
+14424=>23636,
+14425=>23637,
+14426=>23638,
+14427=>23639,
+14428=>23640,
+14429=>23641,
+14430=>23642,
+14431=>23643,
+14432=>23644,
+14433=>23645,
+14434=>23646,
+14435=>23647,
+14436=>23648,
+14437=>23649,
+14438=>23650,
+14439=>23651,
+14440=>23652,
+14441=>23653,
+14442=>23654,
+14443=>23655,
+14444=>23656,
+14445=>23657,
+14446=>23658,
+14447=>23659,
+14448=>23660,
+14449=>23661,
+14450=>23662,
+14451=>23663,
+14452=>23664,
+14453=>23665,
+14454=>23666,
+14455=>23667,
+14456=>23668,
+14457=>23669,
+14458=>23670,
+14459=>23671,
+14460=>23672,
+14461=>23673,
+14462=>23674,
+14463=>23675,
+14464=>23676,
+14465=>23677,
+14466=>23678,
+14467=>23679,
+14468=>23680,
+14469=>23681,
+14470=>23682,
+14471=>23683,
+14472=>23684,
+14473=>23685,
+14474=>23686,
+14475=>23687,
+14476=>23688,
+14477=>23689,
+14478=>23690,
+14479=>23691,
+14480=>23692,
+14481=>23693,
+14482=>23694,
+14483=>23695,
+14484=>23696,
+14485=>23697,
+14486=>23698,
+14487=>23699,
+14488=>23700,
+14489=>23701,
+14490=>23702,
+14491=>23703,
+14492=>23704,
+14493=>23705,
+14494=>23706,
+14495=>23707,
+14496=>23708,
+14497=>23709,
+14498=>23710,
+14499=>23711,
+14500=>23712,
+14501=>23713,
+14502=>23714,
+14503=>23715,
+14504=>23716,
+14505=>23717,
+14506=>23718,
+14507=>23719,
+14508=>23720,
+14509=>23721,
+14510=>23722,
+14511=>23723,
+14512=>23724,
+14513=>23725,
+14514=>23726,
+14515=>23727,
+14516=>23728,
+14517=>23729,
+14518=>23730,
+14519=>23731,
+14520=>23732,
+14521=>23733,
+14522=>23734,
+14523=>23735,
+14524=>23736,
+14525=>23737,
+14526=>23738,
+14527=>23739,
+14528=>23740,
+14529=>23741,
+14530=>23742,
+14531=>23743,
+14532=>23744,
+14533=>23745,
+14534=>23746,
+14535=>23747,
+14536=>23748,
+14537=>23749,
+14538=>23750,
+14539=>23751,
+14540=>23752,
+14541=>23753,
+14542=>23754,
+14543=>23755,
+14544=>23756,
+14545=>23757,
+14546=>23758,
+14547=>23759,
+14548=>23760,
+14549=>23761,
+14550=>23762,
+14551=>23763,
+14552=>23764,
+14553=>23765,
+14554=>23766,
+14555=>23767,
+14556=>23768,
+14557=>23769,
+14558=>23770,
+14559=>23771,
+14560=>23772,
+14561=>23773,
+14562=>23774,
+14563=>23775,
+14564=>23776,
+14565=>23777,
+14566=>23778,
+14567=>23779,
+14568=>23780,
+14569=>23781,
+14570=>23782,
+14571=>23783,
+14572=>23784,
+14573=>23785,
+14574=>23786,
+14575=>23787,
+14576=>23788,
+14577=>23789,
+14578=>23790,
+14579=>23791,
+14580=>23792,
+14581=>23793,
+14582=>23794,
+14583=>23795,
+14584=>23796,
+14585=>23797,
+14586=>23798,
+14587=>23799,
+14588=>23800,
+14589=>23801,
+14590=>23802,
+14591=>23803,
+14592=>23804,
+14593=>23805,
+14594=>23806,
+14595=>23807,
+14596=>23808,
+14597=>23809,
+14598=>23810,
+14599=>23811,
+14600=>23812,
+14601=>23813,
+14602=>23814,
+14603=>23815,
+14604=>23816,
+14605=>23817,
+14606=>23818,
+14607=>23819,
+14608=>23820,
+14609=>23821,
+14610=>23822,
+14611=>23823,
+14612=>23824,
+14613=>23825,
+14614=>23826,
+14615=>23827,
+14617=>23828,
+14618=>23829,
+14619=>23830,
+14620=>23831,
+14621=>23832,
+14622=>23833,
+14623=>23834,
+14624=>23835,
+14625=>23836,
+14626=>23837,
+14627=>23838,
+14628=>23839,
+14629=>23840,
+14630=>23841,
+14631=>23842,
+14632=>23843,
+14633=>23844,
+14634=>23845,
+14635=>23846,
+14636=>23847,
+14637=>23848,
+14638=>23849,
+14639=>23850,
+14640=>23851,
+14641=>23852,
+14642=>23853,
+14643=>23854,
+14644=>23855,
+14645=>23856,
+14646=>23857,
+14647=>23858,
+14648=>23859,
+14649=>23860,
+14650=>23861,
+14651=>23862,
+14652=>23863,
+14653=>23864,
+14654=>23865,
+14655=>23866,
+14656=>23867,
+14657=>23868,
+14658=>23869,
+14659=>23870,
+14660=>23871,
+14661=>23872,
+14662=>23873,
+14663=>23874,
+14664=>23875,
+14665=>23876,
+14666=>23877,
+14667=>23878,
+14668=>23879,
+14669=>23880,
+14670=>23881,
+14671=>23882,
+14672=>23883,
+14673=>23884,
+14674=>23885,
+14675=>23886,
+14676=>23887,
+14677=>23888,
+14678=>23889,
+14679=>23890,
+14680=>23891,
+14681=>23892,
+14682=>23893,
+14683=>23894,
+14684=>23895,
+14685=>23896,
+14686=>23897,
+14687=>23898,
+14688=>23899,
+14689=>23900,
+14690=>23901,
+14691=>23902,
+14692=>23903,
+14693=>23904,
+14694=>23905,
+14695=>23906,
+14696=>23907,
+14697=>23908,
+14698=>23909,
+14699=>23910,
+14700=>23911,
+14701=>23912,
+14703=>23913,
+14704=>23914,
+14705=>23915,
+14706=>23916,
+14707=>23917,
+14708=>23918,
+14709=>23919,
+14710=>23920,
+14711=>23921,
+14712=>23922,
+14713=>23923,
+14714=>23924,
+14715=>23925,
+14716=>23926,
+14717=>23927,
+14718=>23928,
+14719=>23929,
+14720=>23930,
+14721=>23931,
+14722=>23932,
+14723=>23933,
+14724=>23934,
+14725=>23935,
+14726=>23936,
+14727=>23937,
+14728=>23938,
+14729=>23939,
+14730=>23940,
+14731=>23941,
+14732=>23942,
+14733=>23943,
+14734=>23944,
+14735=>23945,
+14736=>23946,
+14737=>23947,
+14738=>23948,
+14739=>23949,
+14740=>23950,
+14741=>23951,
+14742=>23952,
+14743=>23953,
+14744=>23954,
+14745=>23955,
+14746=>23956,
+14747=>23957,
+14748=>23958,
+14749=>23959,
+14750=>23960,
+14751=>23961,
+14752=>23962,
+14753=>23963,
+14754=>23964,
+14755=>23965,
+14756=>23966,
+14757=>23967,
+14758=>23968,
+14759=>23969,
+14760=>23970,
+14761=>23971,
+14762=>23972,
+14763=>23973,
+14764=>23974,
+14765=>23975,
+14766=>23976,
+14767=>23977,
+14768=>23978,
+14769=>23979,
+14770=>23980,
+14771=>23981,
+14772=>23982,
+14773=>23983,
+14774=>23984,
+14775=>23985,
+14776=>23986,
+14777=>23987,
+14778=>23988,
+14779=>23989,
+14780=>23990,
+14781=>23991,
+14782=>23992,
+14783=>23993,
+14784=>23994,
+14785=>23995,
+14786=>23996,
+14787=>23997,
+14788=>23998,
+14789=>23999,
+14790=>24000,
+14791=>24001,
+14792=>24002,
+14793=>24003,
+14794=>24004,
+14795=>24005,
+14796=>24006,
+14797=>24007,
+14798=>24008,
+14801=>24009,
+14802=>24010,
+14803=>24011,
+14804=>24012,
+14805=>24013,
+14806=>24014,
+14807=>24015,
+14808=>24016,
+14809=>24017,
+14810=>24018,
+14811=>24019,
+14812=>24020,
+14813=>24021,
+14814=>24022,
+14816=>24023,
+14817=>24024,
+14818=>24025,
+14819=>24026,
+14820=>24027,
+14821=>24028,
+14822=>24029,
+14823=>24030,
+14824=>24031,
+14825=>24032,
+14826=>24033,
+14827=>24034,
+14828=>24035,
+14829=>24036,
+14830=>24037,
+14831=>24038,
+14832=>24039,
+14833=>24040,
+14834=>24041,
+14835=>24042,
+14836=>24043,
+14837=>24044,
+14838=>24045,
+14839=>24046,
+14840=>24047,
+14841=>24048,
+14842=>24049,
+14843=>24050,
+14844=>24051,
+14845=>24052,
+14846=>24053,
+14847=>24054,
+14848=>24055,
+14849=>24056,
+14850=>24057,
+14851=>24058,
+14852=>24059,
+14853=>24060,
+14854=>24061,
+14855=>24062,
+14856=>24063,
+14857=>24064,
+14858=>24065,
+14859=>24066,
+14860=>24067,
+14861=>24068,
+14862=>24069,
+14863=>24070,
+14864=>24071,
+14865=>24072,
+14866=>24073,
+14867=>24074,
+14868=>24075,
+14869=>24076,
+14870=>24077,
+14871=>24078,
+14872=>24079,
+14873=>24080,
+14874=>24081,
+14875=>24082,
+14876=>24083,
+14877=>24084,
+14878=>24085,
+14879=>24086,
+14880=>24087,
+14881=>24088,
+14882=>24089,
+14883=>24090,
+14884=>24091,
+14885=>24092,
+14886=>24093,
+14887=>24094,
+14888=>24095,
+14889=>24096,
+14890=>24097,
+14891=>24098,
+14892=>24099,
+14893=>24100,
+14894=>24101,
+14895=>24102,
+14896=>24103,
+14897=>24104,
+14898=>24105,
+14899=>24106,
+14900=>24107,
+14901=>24108,
+14902=>24109,
+14903=>24110,
+14904=>24111,
+14905=>24112,
+14906=>24113,
+14907=>24114,
+14908=>24115,
+14909=>24116,
+14910=>24117,
+14911=>24118,
+14912=>24119,
+14913=>24120,
+14914=>24121,
+14915=>24122,
+14916=>24123,
+14917=>24124,
+14918=>24125,
+14919=>24126,
+14920=>24127,
+14921=>24128,
+14922=>24129,
+14923=>24130,
+14924=>24131,
+14925=>24132,
+14926=>24133,
+14927=>24134,
+14928=>24135,
+14929=>24136,
+14930=>24137,
+14931=>24138,
+14932=>24139,
+14933=>24140,
+14934=>24141,
+14935=>24142,
+14936=>24143,
+14937=>24144,
+14938=>24145,
+14939=>24146,
+14940=>24147,
+14941=>24148,
+14942=>24149,
+14943=>24150,
+14944=>24151,
+14945=>24152,
+14946=>24153,
+14947=>24154,
+14948=>24155,
+14949=>24156,
+14950=>24157,
+14951=>24158,
+14952=>24159,
+14953=>24160,
+14954=>24161,
+14955=>24162,
+14956=>24163,
+14957=>24164,
+14958=>24165,
+14959=>24166,
+14960=>24167,
+14961=>24168,
+14962=>24169,
+14964=>24170,
+14965=>24171,
+14966=>24172,
+14967=>24173,
+14968=>24174,
+14969=>24175,
+14970=>24176,
+14971=>24177,
+14972=>24178,
+14973=>24179,
+14974=>24180,
+14975=>24181,
+14976=>24182,
+14977=>24183,
+14978=>24184,
+14979=>24185,
+14980=>24186,
+14981=>24187,
+14982=>24188,
+14983=>24189,
+14984=>24190,
+14985=>24191,
+14986=>24192,
+14987=>24193,
+14988=>24194,
+14989=>24195,
+14990=>24196,
+14991=>24197,
+14992=>24198,
+14993=>24199,
+14994=>24200,
+14995=>24201,
+14996=>24202,
+14997=>24203,
+14998=>24204,
+14999=>24205,
+15000=>24206,
+15001=>24207,
+15002=>24208,
+15003=>24209,
+15004=>24210,
+15005=>24211,
+15006=>24212,
+15007=>24213,
+15008=>24214,
+15009=>24215,
+15010=>24216,
+15011=>24217,
+15012=>24218,
+15013=>24219,
+15014=>24220,
+15015=>24221,
+15016=>24222,
+15017=>24223,
+15018=>24224,
+15019=>24225,
+15020=>24226,
+15021=>24227,
+15022=>24228,
+15023=>24229,
+15024=>24230,
+15025=>24231,
+15026=>24232,
+15027=>24233,
+15028=>24234,
+15029=>24235,
+15030=>24236,
+15031=>24237,
+15032=>24238,
+15033=>24239,
+15034=>24240,
+15035=>24241,
+15036=>24242,
+15037=>24243,
+15038=>24244,
+15039=>24245,
+15040=>24246,
+15041=>24247,
+15042=>24248,
+15043=>24249,
+15044=>24250,
+15045=>24251,
+15046=>24252,
+15047=>24253,
+15048=>24254,
+15049=>24255,
+15050=>24256,
+15051=>24257,
+15052=>24258,
+15053=>24259,
+15054=>24260,
+15055=>24261,
+15056=>24262,
+15057=>24263,
+15058=>24264,
+15059=>24265,
+15060=>24266,
+15061=>24267,
+15062=>24268,
+15063=>24269,
+15064=>24270,
+15065=>24271,
+15066=>24272,
+15067=>24273,
+15068=>24274,
+15069=>24275,
+15070=>24276,
+15071=>24277,
+15072=>24278,
+15073=>24279,
+15074=>24280,
+15075=>24281,
+15076=>24282,
+15077=>24283,
+15078=>24284,
+15079=>24285,
+15080=>24286,
+15081=>24287,
+15082=>24288,
+15083=>24289,
+15084=>24290,
+15085=>24291,
+15086=>24292,
+15087=>24293,
+15088=>24294,
+15089=>24295,
+15090=>24296,
+15091=>24297,
+15092=>24298,
+15093=>24299,
+15094=>24300,
+15095=>24301,
+15096=>24302,
+15097=>24303,
+15098=>24304,
+15099=>24305,
+15100=>24306,
+15101=>24307,
+15102=>24308,
+15103=>24309,
+15104=>24310,
+15105=>24311,
+15106=>24312,
+15107=>24313,
+15108=>24314,
+15109=>24315,
+15110=>24316,
+15111=>24317,
+15112=>24318,
+15113=>24319,
+15114=>24320,
+15115=>24321,
+15116=>24322,
+15117=>24323,
+15118=>24324,
+15119=>24325,
+15120=>24326,
+15121=>24327,
+15122=>24328,
+15123=>24329,
+15124=>24330,
+15125=>24331,
+15126=>24332,
+15127=>24333,
+15128=>24334,
+15129=>24335,
+15130=>24336,
+15131=>24337,
+15132=>24338,
+15133=>24339,
+15134=>24340,
+15135=>24341,
+15136=>24342,
+15137=>24343,
+15138=>24344,
+15139=>24345,
+15140=>24346,
+15141=>24347,
+15142=>24348,
+15143=>24349,
+15144=>24350,
+15145=>24351,
+15146=>24352,
+15147=>24353,
+15148=>24354,
+15149=>24355,
+15150=>24356,
+15151=>24357,
+15152=>24358,
+15153=>24359,
+15154=>24360,
+15155=>24361,
+15156=>24362,
+15157=>24363,
+15158=>24364,
+15159=>24365,
+15160=>24366,
+15161=>24367,
+15162=>24368,
+15163=>24369,
+15164=>24370,
+15165=>24371,
+15166=>24372,
+15167=>24373,
+15168=>24374,
+15169=>24375,
+15170=>24376,
+15171=>24377,
+15172=>24378,
+15173=>24379,
+15174=>24380,
+15175=>24381,
+15176=>24382,
+15177=>24383,
+15178=>24384,
+15179=>24385,
+15180=>24386,
+15181=>24387,
+15183=>24388,
+15184=>24389,
+15185=>24390,
+15186=>24391,
+15187=>24392,
+15188=>24393,
+15189=>24394,
+15190=>24395,
+15191=>24396,
+15192=>24397,
+15193=>24398,
+15194=>24399,
+15195=>24400,
+15196=>24401,
+15197=>24402,
+15198=>24403,
+15199=>24404,
+15200=>24405,
+15201=>24406,
+15202=>24407,
+15203=>24408,
+15204=>24409,
+15205=>24410,
+15206=>24411,
+15207=>24412,
+15208=>24413,
+15209=>24414,
+15210=>24415,
+15211=>24416,
+15212=>24417,
+15213=>24418,
+15214=>24419,
+15215=>24420,
+15216=>24421,
+15217=>24422,
+15218=>24423,
+15219=>24424,
+15220=>24425,
+15221=>24426,
+15222=>24427,
+15223=>24428,
+15224=>24429,
+15225=>24430,
+15226=>24431,
+15227=>24432,
+15228=>24433,
+15229=>24434,
+15230=>24435,
+15231=>24436,
+15232=>24437,
+15233=>24438,
+15234=>24439,
+15235=>24440,
+15236=>24441,
+15237=>24442,
+15238=>24443,
+15239=>24444,
+15240=>24445,
+15241=>24446,
+15242=>24447,
+15243=>24448,
+15244=>24449,
+15245=>24450,
+15246=>24451,
+15247=>24452,
+15248=>24453,
+15249=>24454,
+15250=>24455,
+15251=>24456,
+15252=>24457,
+15253=>24458,
+15254=>24459,
+15255=>24460,
+15256=>24461,
+15257=>24462,
+15258=>24463,
+15259=>24464,
+15260=>24465,
+15261=>24466,
+15262=>24467,
+15263=>24468,
+15264=>24469,
+15265=>24470,
+15266=>24471,
+15267=>24472,
+15268=>24473,
+15269=>24474,
+15270=>24475,
+15271=>24476,
+15272=>24477,
+15273=>24478,
+15274=>24479,
+15275=>24480,
+15276=>24481,
+15277=>24482,
+15278=>24483,
+15279=>24484,
+15280=>24485,
+15281=>24486,
+15282=>24487,
+15283=>24488,
+15284=>24489,
+15285=>24490,
+15286=>24491,
+15287=>24492,
+15288=>24493,
+15289=>24494,
+15290=>24495,
+15291=>24496,
+15292=>24497,
+15293=>24498,
+15294=>24499,
+15295=>24500,
+15296=>24501,
+15297=>24502,
+15298=>24503,
+15299=>24504,
+15300=>24505,
+15301=>24506,
+15302=>24507,
+15303=>24508,
+15304=>24509,
+15305=>24510,
+15306=>24511,
+15307=>24512,
+15308=>24513,
+15309=>24514,
+15310=>24515,
+15311=>24516,
+15312=>24517,
+15313=>24518,
+15314=>24519,
+15315=>24520,
+15316=>24521,
+15317=>24522,
+15318=>24523,
+15319=>24524,
+15320=>24525,
+15321=>24526,
+15322=>24527,
+15323=>24528,
+15324=>24529,
+15325=>24530,
+15326=>24531,
+15327=>24532,
+15328=>24533,
+15329=>24534,
+15330=>24535,
+15331=>24536,
+15332=>24537,
+15333=>24538,
+15334=>24539,
+15335=>24540,
+15336=>24541,
+15337=>24542,
+15338=>24543,
+15339=>24544,
+15340=>24545,
+15341=>24546,
+15342=>24547,
+15343=>24548,
+15344=>24549,
+15345=>24550,
+15346=>24551,
+15347=>24552,
+15348=>24553,
+15349=>24554,
+15350=>24555,
+15351=>24556,
+15352=>24557,
+15353=>24558,
+15354=>24559,
+15355=>24560,
+15356=>24561,
+15357=>24562,
+15358=>24563,
+15359=>24564,
+15360=>24565,
+15361=>24566,
+15362=>24567,
+15363=>24568,
+15364=>24569,
+15365=>24570,
+15366=>24571,
+15367=>24572,
+15368=>24573,
+15369=>24574,
+15370=>24575,
+15371=>24576,
+15372=>24577,
+15373=>24578,
+15374=>24579,
+15375=>24580,
+15376=>24581,
+15377=>24582,
+15378=>24583,
+15379=>24584,
+15380=>24585,
+15381=>24586,
+15382=>24587,
+15383=>24588,
+15384=>24589,
+15385=>24590,
+15386=>24591,
+15387=>24592,
+15388=>24593,
+15389=>24594,
+15390=>24595,
+15391=>24596,
+15392=>24597,
+15393=>24598,
+15394=>24599,
+15395=>24600,
+15396=>24601,
+15397=>24602,
+15398=>24603,
+15399=>24604,
+15400=>24605,
+15401=>24606,
+15402=>24607,
+15403=>24608,
+15404=>24609,
+15405=>24610,
+15406=>24611,
+15407=>24612,
+15408=>24613,
+15409=>24614,
+15410=>24615,
+15411=>24616,
+15412=>24617,
+15413=>24618,
+15414=>24619,
+15415=>24620,
+15416=>24621,
+15417=>24622,
+15418=>24623,
+15419=>24624,
+15420=>24625,
+15421=>24626,
+15422=>24627,
+15423=>24628,
+15424=>24629,
+15425=>24630,
+15426=>24631,
+15427=>24632,
+15428=>24633,
+15429=>24634,
+15430=>24635,
+15431=>24636,
+15432=>24637,
+15433=>24638,
+15434=>24639,
+15435=>24640,
+15436=>24641,
+15437=>24642,
+15438=>24643,
+15439=>24644,
+15440=>24645,
+15441=>24646,
+15442=>24647,
+15443=>24648,
+15444=>24649,
+15445=>24650,
+15446=>24651,
+15447=>24652,
+15448=>24653,
+15449=>24654,
+15450=>24655,
+15451=>24656,
+15452=>24657,
+15453=>24658,
+15454=>24659,
+15455=>24660,
+15456=>24661,
+15457=>24662,
+15458=>24663,
+15459=>24664,
+15460=>24665,
+15461=>24666,
+15462=>24667,
+15463=>24668,
+15464=>24669,
+15465=>24670,
+15466=>24671,
+15467=>24672,
+15468=>24673,
+15469=>24674,
+15471=>24675,
+15472=>24676,
+15473=>24677,
+15474=>24678,
+15475=>24679,
+15476=>24680,
+15477=>24681,
+15478=>24682,
+15479=>24683,
+15480=>24684,
+15481=>24685,
+15482=>24686,
+15483=>24687,
+15484=>24688,
+15485=>24689,
+15486=>24690,
+15487=>24691,
+15488=>24692,
+15489=>24693,
+15490=>24694,
+15491=>24695,
+15492=>24696,
+15493=>24697,
+15494=>24698,
+15495=>24699,
+15496=>24700,
+15497=>24701,
+15498=>24702,
+15499=>24703,
+15500=>24704,
+15501=>24705,
+15502=>24706,
+15503=>24707,
+15504=>24708,
+15505=>24709,
+15506=>24710,
+15507=>24711,
+15508=>24712,
+15509=>24713,
+15510=>24714,
+15511=>24715,
+15512=>24716,
+15513=>24717,
+15514=>24718,
+15515=>24719,
+15516=>24720,
+15517=>24721,
+15518=>24722,
+15519=>24723,
+15520=>24724,
+15521=>24725,
+15522=>24726,
+15523=>24727,
+15524=>24728,
+15525=>24729,
+15526=>24730,
+15527=>24731,
+15528=>24732,
+15529=>24733,
+15530=>24734,
+15531=>24735,
+15532=>24736,
+15533=>24737,
+15534=>24738,
+15535=>24739,
+15536=>24740,
+15537=>24741,
+15538=>24742,
+15539=>24743,
+15540=>24744,
+15541=>24745,
+15542=>24746,
+15543=>24747,
+15544=>24748,
+15545=>24749,
+15546=>24750,
+15547=>24751,
+15548=>24752,
+15549=>24753,
+15550=>24754,
+15551=>24755,
+15552=>24756,
+15553=>24757,
+15554=>24758,
+15555=>24759,
+15556=>24760,
+15557=>24761,
+15558=>24762,
+15559=>24763,
+15560=>24764,
+15561=>24765,
+15562=>24766,
+15563=>24767,
+15564=>24768,
+15565=>24769,
+15566=>24770,
+15567=>24771,
+15568=>24772,
+15569=>24773,
+15570=>24774,
+15571=>24775,
+15572=>24776,
+15573=>24777,
+15574=>24778,
+15575=>24779,
+15576=>24780,
+15577=>24781,
+15578=>24782,
+15579=>24783,
+15580=>24784,
+15581=>24785,
+15582=>24786,
+15583=>24787,
+15585=>24788,
+15586=>24789,
+15587=>24790,
+15588=>24791,
+15589=>24792,
+15590=>24793,
+15591=>24794,
+15592=>24795,
+15593=>24796,
+15594=>24797,
+15595=>24798,
+15596=>24799,
+15597=>24800,
+15598=>24801,
+15599=>24802,
+15600=>24803,
+15601=>24804,
+15602=>24805,
+15603=>24806,
+15604=>24807,
+15605=>24808,
+15606=>24809,
+15607=>24810,
+15608=>24811,
+15609=>24812,
+15610=>24813,
+15611=>24814,
+15612=>24815,
+15613=>24816,
+15614=>24817,
+15615=>24818,
+15616=>24819,
+15617=>24820,
+15618=>24821,
+15619=>24822,
+15620=>24823,
+15621=>24824,
+15622=>24825,
+15623=>24826,
+15624=>24827,
+15625=>24828,
+15626=>24829,
+15627=>24830,
+15628=>24831,
+15629=>24832,
+15630=>24833,
+15631=>24834,
+15632=>24835,
+15633=>24836,
+15634=>24837,
+15635=>24838,
+15636=>24839,
+15637=>24840,
+15638=>24841,
+15639=>24842,
+15640=>24843,
+15641=>24844,
+15642=>24845,
+15643=>24846,
+15644=>24847,
+15645=>24848,
+15646=>24849,
+15647=>24850,
+15648=>24851,
+15649=>24852,
+15650=>24853,
+15651=>24854,
+15652=>24855,
+15653=>24856,
+15654=>24857,
+15655=>24858,
+15656=>24859,
+15657=>24860,
+15658=>24861,
+15659=>24862,
+15660=>24863,
+15661=>24864,
+15662=>24865,
+15663=>24866,
+15664=>24867,
+15665=>24868,
+15666=>24869,
+15667=>24870,
+15668=>24871,
+15669=>24872,
+15670=>24873,
+15671=>24874,
+15672=>24875,
+15673=>24876,
+15674=>24877,
+15675=>24878,
+15676=>24879,
+15677=>24880,
+15678=>24881,
+15679=>24882,
+15680=>24883,
+15681=>24884,
+15682=>24885,
+15683=>24886,
+15684=>24887,
+15685=>24888,
+15686=>24889,
+15687=>24890,
+15688=>24891,
+15689=>24892,
+15690=>24893,
+15691=>24894,
+15692=>24895,
+15693=>24896,
+15694=>24897,
+15695=>24898,
+15696=>24899,
+15697=>24900,
+15698=>24901,
+15699=>24902,
+15700=>24903,
+15701=>24904,
+15702=>24905,
+15703=>24906,
+15704=>24907,
+15705=>24908,
+15706=>24909,
+15707=>24910,
+15708=>24911,
+15709=>24912,
+15710=>24913,
+15711=>24914,
+15712=>24915,
+15713=>24916,
+15714=>24917,
+15715=>24918,
+15716=>24919,
+15717=>24920,
+15718=>24921,
+15719=>24922,
+15720=>24923,
+15721=>24924,
+15722=>24925,
+15723=>24926,
+15724=>24927,
+15725=>24928,
+15726=>24929,
+15727=>24930,
+15728=>24931,
+15729=>24932,
+15730=>24933,
+15731=>24934,
+15732=>24935,
+15733=>24936,
+15734=>24937,
+15735=>24938,
+15736=>24939,
+15737=>24940,
+15738=>24941,
+15739=>24942,
+15740=>24943,
+15741=>24944,
+15742=>24945,
+15743=>24946,
+15744=>24947,
+15745=>24948,
+15746=>24949,
+15747=>24950,
+15748=>24951,
+15749=>24952,
+15750=>24953,
+15751=>24954,
+15752=>24955,
+15753=>24956,
+15754=>24957,
+15755=>24958,
+15756=>24959,
+15757=>24960,
+15758=>24961,
+15759=>24962,
+15760=>24963,
+15761=>24964,
+15762=>24965,
+15763=>24966,
+15764=>24967,
+15765=>24968,
+15766=>24969,
+15767=>24970,
+15768=>24971,
+15769=>24972,
+15770=>24973,
+15771=>24974,
+15772=>24975,
+15773=>24976,
+15774=>24977,
+15775=>24978,
+15776=>24979,
+15777=>24980,
+15778=>24981,
+15779=>24982,
+15780=>24983,
+15781=>24984,
+15782=>24985,
+15783=>24986,
+15784=>24987,
+15785=>24988,
+15786=>24989,
+15787=>24990,
+15788=>24991,
+15789=>24992,
+15790=>24993,
+15791=>24994,
+15792=>24995,
+15793=>24996,
+15794=>24997,
+15795=>24998,
+15796=>24999,
+15797=>25000,
+15798=>25001,
+15799=>25002,
+15800=>25003,
+15801=>25004,
+15802=>25005,
+15803=>25006,
+15804=>25007,
+15805=>25008,
+15806=>25009,
+15807=>25010,
+15808=>25011,
+15809=>25012,
+15810=>25013,
+15811=>25014,
+15812=>25015,
+15813=>25016,
+15814=>25017,
+15815=>25018,
+15816=>25019,
+15817=>25020,
+15818=>25021,
+15819=>25022,
+15820=>25023,
+15821=>25024,
+15822=>25025,
+15823=>25026,
+15824=>25027,
+15825=>25028,
+15826=>25029,
+15827=>25030,
+15828=>25031,
+15829=>25032,
+15830=>25033,
+15831=>25034,
+15832=>25035,
+15833=>25036,
+15834=>25037,
+15835=>25038,
+15836=>25039,
+15837=>25040,
+15838=>25041,
+15839=>25042,
+15840=>25043,
+15841=>25044,
+15842=>25045,
+15843=>25046,
+15844=>25047,
+15845=>25048,
+15846=>25049,
+15847=>25050,
+15848=>25051,
+15849=>25052,
+15850=>25053,
+15851=>25054,
+15852=>25055,
+15853=>25056,
+15854=>25057,
+15855=>25058,
+15856=>25059,
+15857=>25060,
+15858=>25061,
+15859=>25062,
+15860=>25063,
+15861=>25064,
+15862=>25065,
+15863=>25066,
+15864=>25067,
+15865=>25068,
+15866=>25069,
+15867=>25070,
+15868=>25071,
+15869=>25072,
+15870=>25073,
+15871=>25074,
+15872=>25075,
+15873=>25076,
+15874=>25077,
+15875=>25078,
+15876=>25079,
+15877=>25080,
+15878=>25081,
+15879=>25082,
+15880=>25083,
+15881=>25084,
+15882=>25085,
+15883=>25086,
+15884=>25087,
+15885=>25088,
+15886=>25089,
+15887=>25090,
+15888=>25091,
+15889=>25092,
+15890=>25093,
+15891=>25094,
+15892=>25095,
+15893=>25096,
+15894=>25097,
+15895=>25098,
+15896=>25099,
+15897=>25100,
+15898=>25101,
+15899=>25102,
+15900=>25103,
+15901=>25104,
+15902=>25105,
+15903=>25106,
+15904=>25107,
+15905=>25108,
+15906=>25109,
+15907=>25110,
+15908=>25111,
+15909=>25112,
+15910=>25113,
+15911=>25114,
+15912=>25115,
+15913=>25116,
+15914=>25117,
+15915=>25118,
+15916=>25119,
+15917=>25120,
+15918=>25121,
+15919=>25122,
+15920=>25123,
+15921=>25124,
+15922=>25125,
+15923=>25126,
+15924=>25127,
+15925=>25128,
+15926=>25129,
+15927=>25130,
+15928=>25131,
+15929=>25132,
+15930=>25133,
+15931=>25134,
+15932=>25135,
+15933=>25136,
+15934=>25137,
+15935=>25138,
+15936=>25139,
+15937=>25140,
+15938=>25141,
+15939=>25142,
+15940=>25143,
+15941=>25144,
+15942=>25145,
+15943=>25146,
+15944=>25147,
+15945=>25148,
+15946=>25149,
+15947=>25150,
+15948=>25151,
+15949=>25152,
+15950=>25153,
+15951=>25154,
+15952=>25155,
+15953=>25156,
+15954=>25157,
+15955=>25158,
+15956=>25159,
+15957=>25160,
+15958=>25161,
+15959=>25162,
+15960=>25163,
+15961=>25164,
+15962=>25165,
+15963=>25166,
+15964=>25167,
+15965=>25168,
+15966=>25169,
+15967=>25170,
+15968=>25171,
+15969=>25172,
+15970=>25173,
+15971=>25174,
+15972=>25175,
+15973=>25176,
+15974=>25177,
+15975=>25178,
+15976=>25179,
+15977=>25180,
+15978=>25181,
+15979=>25182,
+15980=>25183,
+15981=>25184,
+15982=>25185,
+15983=>25186,
+15984=>25187,
+15985=>25188,
+15986=>25189,
+15987=>25190,
+15988=>25191,
+15989=>25192,
+15990=>25193,
+15991=>25194,
+15992=>25195,
+15993=>25196,
+15994=>25197,
+15995=>25198,
+15996=>25199,
+15997=>25200,
+15998=>25201,
+15999=>25202,
+16000=>25203,
+16001=>25204,
+16002=>25205,
+16003=>25206,
+16004=>25207,
+16005=>25208,
+16006=>25209,
+16007=>25210,
+16008=>25211,
+16009=>25212,
+16010=>25213,
+16011=>25214,
+16012=>25215,
+16013=>25216,
+16014=>25217,
+16015=>25218,
+16016=>25219,
+16017=>25220,
+16018=>25221,
+16019=>25222,
+16020=>25223,
+16021=>25224,
+16022=>25225,
+16023=>25226,
+16024=>25227,
+16025=>25228,
+16026=>25229,
+16027=>25230,
+16028=>25231,
+16029=>25232,
+16030=>25233,
+16031=>25234,
+16032=>25235,
+16033=>25236,
+16034=>25237,
+16035=>25238,
+16036=>25239,
+16037=>25240,
+16038=>25241,
+16039=>25242,
+16040=>25243,
+16041=>25244,
+16042=>25245,
+16043=>25246,
+16044=>25247,
+16045=>25248,
+16046=>25249,
+16047=>25250,
+16048=>25251,
+16049=>25252,
+16050=>25253,
+16051=>25254,
+16052=>25255,
+16053=>25256,
+16054=>25257,
+16055=>25258,
+16056=>25259,
+16057=>25260,
+16058=>25261,
+16059=>25262,
+16060=>25263,
+16061=>25264,
+16062=>25265,
+16063=>25266,
+16064=>25267,
+16065=>25268,
+16066=>25269,
+16067=>25270,
+16068=>25271,
+16069=>25272,
+16070=>25273,
+16071=>25274,
+16072=>25275,
+16073=>25276,
+16074=>25277,
+16075=>25278,
+16076=>25279,
+16077=>25280,
+16078=>25281,
+16079=>25282,
+16080=>25283,
+16081=>25284,
+16082=>25285,
+16083=>25286,
+16084=>25287,
+16085=>25288,
+16086=>25289,
+16087=>25290,
+16088=>25291,
+16089=>25292,
+16090=>25293,
+16091=>25294,
+16092=>25295,
+16093=>25296,
+16094=>25297,
+16095=>25298,
+16096=>25299,
+16097=>25300,
+16098=>25301,
+16099=>25302,
+16100=>25303,
+16101=>25304,
+16102=>25305,
+16103=>25306,
+16104=>25307,
+16105=>25308,
+16106=>25309,
+16107=>25310,
+16108=>25311,
+16109=>25312,
+16110=>25313,
+16111=>25314,
+16112=>25315,
+16113=>25316,
+16114=>25317,
+16115=>25318,
+16116=>25319,
+16117=>25320,
+16118=>25321,
+16119=>25322,
+16120=>25323,
+16121=>25324,
+16122=>25325,
+16123=>25326,
+16124=>25327,
+16125=>25328,
+16126=>25329,
+16127=>25330,
+16128=>25331,
+16129=>25332,
+16130=>25333,
+16131=>25334,
+16132=>25335,
+16133=>25336,
+16134=>25337,
+16135=>25338,
+16136=>25339,
+16137=>25340,
+16138=>25341,
+16139=>25342,
+16140=>25343,
+16141=>25344,
+16142=>25345,
+16143=>25346,
+16144=>25347,
+16145=>25348,
+16146=>25349,
+16147=>25350,
+16148=>25351,
+16149=>25352,
+16150=>25353,
+16151=>25354,
+16152=>25355,
+16153=>25356,
+16154=>25357,
+16155=>25358,
+16156=>25359,
+16157=>25360,
+16158=>25361,
+16159=>25362,
+16160=>25363,
+16161=>25364,
+16162=>25365,
+16163=>25366,
+16164=>25367,
+16165=>25368,
+16166=>25369,
+16167=>25370,
+16168=>25371,
+16169=>25372,
+16170=>25373,
+16171=>25374,
+16172=>25375,
+16173=>25376,
+16174=>25377,
+16175=>25378,
+16176=>25379,
+16177=>25380,
+16178=>25381,
+16179=>25382,
+16180=>25383,
+16181=>25384,
+16182=>25385,
+16183=>25386,
+16184=>25387,
+16185=>25388,
+16186=>25389,
+16187=>25390,
+16188=>25391,
+16189=>25392,
+16190=>25393,
+16191=>25394,
+16192=>25395,
+16193=>25396,
+16194=>25397,
+16195=>25398,
+16196=>25399,
+16197=>25400,
+16198=>25401,
+16199=>25402,
+16200=>25403,
+16201=>25404,
+16202=>25405,
+16203=>25406,
+16204=>25407,
+16205=>25408,
+16206=>25409,
+16207=>25410,
+16208=>25411,
+16209=>25412,
+16210=>25413,
+16211=>25414,
+16212=>25415,
+16213=>25416,
+16214=>25417,
+16215=>25418,
+16216=>25419,
+16217=>25420,
+16218=>25421,
+16219=>25422,
+16220=>25423,
+16221=>25424,
+16222=>25425,
+16223=>25426,
+16224=>25427,
+16225=>25428,
+16226=>25429,
+16227=>25430,
+16228=>25431,
+16229=>25432,
+16230=>25433,
+16231=>25434,
+16232=>25435,
+16233=>25436,
+16234=>25437,
+16235=>25438,
+16236=>25439,
+16237=>25440,
+16238=>25441,
+16239=>25442,
+16240=>25443,
+16241=>25444,
+16242=>25445,
+16243=>25446,
+16244=>25447,
+16245=>25448,
+16246=>25449,
+16247=>25450,
+16248=>25451,
+16249=>25452,
+16250=>25453,
+16251=>25454,
+16252=>25455,
+16253=>25456,
+16254=>25457,
+16255=>25458,
+16256=>25459,
+16257=>25460,
+16258=>25461,
+16259=>25462,
+16260=>25463,
+16261=>25464,
+16262=>25465,
+16263=>25466,
+16264=>25467,
+16265=>25468,
+16266=>25469,
+16267=>25470,
+16268=>25471,
+16269=>25472,
+16270=>25473,
+16271=>25474,
+16272=>25475,
+16273=>25476,
+16274=>25477,
+16275=>25478,
+16276=>25479,
+16277=>25480,
+16278=>25481,
+16279=>25482,
+16280=>25483,
+16281=>25484,
+16282=>25485,
+16283=>25486,
+16284=>25487,
+16285=>25488,
+16286=>25489,
+16287=>25490,
+16288=>25491,
+16289=>25492,
+16290=>25493,
+16291=>25494,
+16292=>25495,
+16293=>25496,
+16294=>25497,
+16295=>25498,
+16296=>25499,
+16297=>25500,
+16298=>25501,
+16299=>25502,
+16300=>25503,
+16301=>25504,
+16302=>25505,
+16303=>25506,
+16304=>25507,
+16305=>25508,
+16306=>25509,
+16307=>25510,
+16308=>25511,
+16309=>25512,
+16310=>25513,
+16311=>25514,
+16312=>25515,
+16313=>25516,
+16314=>25517,
+16315=>25518,
+16316=>25519,
+16317=>25520,
+16318=>25521,
+16319=>25522,
+16320=>25523,
+16321=>25524,
+16322=>25525,
+16323=>25526,
+16324=>25527,
+16325=>25528,
+16326=>25529,
+16327=>25530,
+16328=>25531,
+16329=>25532,
+16330=>25533,
+16331=>25534,
+16332=>25535,
+16333=>25536,
+16334=>25537,
+16335=>25538,
+16336=>25539,
+16337=>25540,
+16338=>25541,
+16339=>25542,
+16340=>25543,
+16341=>25544,
+16342=>25545,
+16343=>25546,
+16344=>25547,
+16345=>25548,
+16346=>25549,
+16347=>25550,
+16348=>25551,
+16349=>25552,
+16350=>25553,
+16351=>25554,
+16352=>25555,
+16353=>25556,
+16354=>25557,
+16355=>25558,
+16356=>25559,
+16357=>25560,
+16358=>25561,
+16359=>25562,
+16360=>25563,
+16361=>25564,
+16362=>25565,
+16363=>25566,
+16364=>25567,
+16365=>25568,
+16366=>25569,
+16367=>25570,
+16368=>25571,
+16369=>25572,
+16370=>25573,
+16371=>25574,
+16372=>25575,
+16373=>25576,
+16374=>25577,
+16375=>25578,
+16376=>25579,
+16377=>25580,
+16378=>25581,
+16379=>25582,
+16380=>25583,
+16381=>25584,
+16382=>25585,
+16383=>25586,
+16384=>25587,
+16385=>25588,
+16386=>25589,
+16387=>25590,
+16388=>25591,
+16389=>25592,
+16390=>25593,
+16391=>25594,
+16392=>25595,
+16393=>25596,
+16394=>25597,
+16395=>25598,
+16396=>25599,
+16397=>25600,
+16398=>25601,
+16399=>25602,
+16400=>25603,
+16401=>25604,
+16402=>25605,
+16403=>25606,
+16404=>25607,
+16405=>25608,
+16406=>25609,
+16407=>25610,
+16408=>25611,
+16409=>25612,
+16410=>25613,
+16411=>25614,
+16412=>25615,
+16413=>25616,
+16414=>25617,
+16415=>25618,
+16416=>25619,
+16417=>25620,
+16418=>25621,
+16419=>25622,
+16420=>25623,
+16421=>25624,
+16422=>25625,
+16423=>25626,
+16424=>25627,
+16425=>25628,
+16426=>25629,
+16427=>25630,
+16428=>25631,
+16429=>25632,
+16430=>25633,
+16431=>25634,
+16432=>25635,
+16433=>25636,
+16434=>25637,
+16435=>25638,
+16436=>25639,
+16437=>25640,
+16438=>25641,
+16439=>25642,
+16440=>25643,
+16441=>25644,
+16442=>25645,
+16443=>25646,
+16444=>25647,
+16445=>25648,
+16446=>25649,
+16447=>25650,
+16448=>25651,
+16449=>25652,
+16450=>25653,
+16451=>25654,
+16452=>25655,
+16453=>25656,
+16454=>25657,
+16455=>25658,
+16456=>25659,
+16457=>25660,
+16458=>25661,
+16459=>25662,
+16460=>25663,
+16461=>25664,
+16462=>25665,
+16463=>25666,
+16464=>25667,
+16465=>25668,
+16466=>25669,
+16467=>25670,
+16468=>25671,
+16469=>25672,
+16471=>25673,
+16472=>25674,
+16473=>25675,
+16474=>25676,
+16475=>25677,
+16476=>25678,
+16477=>25679,
+16478=>25680,
+16479=>25681,
+16480=>25682,
+16481=>25683,
+16482=>25684,
+16483=>25685,
+16484=>25686,
+16485=>25687,
+16486=>25688,
+16487=>25689,
+16488=>25690,
+16489=>25691,
+16490=>25692,
+16491=>25693,
+16492=>25694,
+16493=>25695,
+16494=>25696,
+16495=>25697,
+16496=>25698,
+16497=>25699,
+16498=>25700,
+16499=>25701,
+16500=>25702,
+16501=>25703,
+16502=>25704,
+16503=>25705,
+16504=>25706,
+16505=>25707,
+16506=>25708,
+16507=>25709,
+16508=>25710,
+16509=>25711,
+16510=>25712,
+16511=>25713,
+16512=>25714,
+16513=>25715,
+16514=>25716,
+16515=>25717,
+16516=>25718,
+16517=>25719,
+16518=>25720,
+16519=>25721,
+16520=>25722,
+16521=>25723,
+16522=>25724,
+16523=>25725,
+16524=>25726,
+16525=>25727,
+16526=>25728,
+16527=>25729,
+16528=>25730,
+16529=>25731,
+16530=>25732,
+16531=>25733,
+16532=>25734,
+16533=>25735,
+16534=>25736,
+16535=>25737,
+16536=>25738,
+16537=>25739,
+16538=>25740,
+16539=>25741,
+16540=>25742,
+16541=>25743,
+16542=>25744,
+16543=>25745,
+16544=>25746,
+16545=>25747,
+16546=>25748,
+16547=>25749,
+16548=>25750,
+16549=>25751,
+16550=>25752,
+16551=>25753,
+16552=>25754,
+16553=>25755,
+16554=>25756,
+16555=>25757,
+16556=>25758,
+16557=>25759,
+16558=>25760,
+16559=>25761,
+16560=>25762,
+16561=>25763,
+16562=>25764,
+16563=>25765,
+16564=>25766,
+16565=>25767,
+16566=>25768,
+16567=>25769,
+16568=>25770,
+16569=>25771,
+16570=>25772,
+16571=>25773,
+16572=>25774,
+16573=>25775,
+16574=>25776,
+16575=>25777,
+16576=>25778,
+16577=>25779,
+16578=>25780,
+16579=>25781,
+16580=>25782,
+16581=>25783,
+16582=>25784,
+16583=>25785,
+16584=>25786,
+16585=>25787,
+16586=>25788,
+16587=>25789,
+16588=>25790,
+16589=>25791,
+16590=>25792,
+16591=>25793,
+16592=>25794,
+16593=>25795,
+16594=>25796,
+16595=>25797,
+16596=>25798,
+16597=>25799,
+16598=>25800,
+16599=>25801,
+16600=>25802,
+16601=>25803,
+16602=>25804,
+16603=>25805,
+16604=>25806,
+16605=>25807,
+16606=>25808,
+16607=>25809,
+16608=>25810,
+16609=>25811,
+16610=>25812,
+16611=>25813,
+16612=>25814,
+16613=>25815,
+16614=>25816,
+16615=>25817,
+16616=>25818,
+16617=>25819,
+16618=>25820,
+16619=>25821,
+16620=>25822,
+16621=>25823,
+16622=>25824,
+16623=>25825,
+16624=>25826,
+16625=>25827,
+16626=>25828,
+16627=>25829,
+16628=>25830,
+16629=>25831,
+16630=>25832,
+16631=>25833,
+16632=>25834,
+16633=>25835,
+16634=>25836,
+16635=>25837,
+16636=>25838,
+16637=>25839,
+16638=>25840,
+16639=>25841,
+16640=>25842,
+16641=>25843,
+16642=>25844,
+16643=>25845,
+16644=>25846,
+16645=>25847,
+16646=>25848,
+16647=>25849,
+16648=>25850,
+16649=>25851,
+16650=>25852,
+16651=>25853,
+16652=>25854,
+16653=>25855,
+16654=>25856,
+16655=>25857,
+16656=>25858,
+16657=>25859,
+16658=>25860,
+16659=>25861,
+16660=>25862,
+16661=>25863,
+16662=>25864,
+16663=>25865,
+16664=>25866,
+16665=>25867,
+16666=>25868,
+16667=>25869,
+16668=>25870,
+16669=>25871,
+16670=>25872,
+16671=>25873,
+16672=>25874,
+16673=>25875,
+16674=>25876,
+16675=>25877,
+16676=>25878,
+16677=>25879,
+16678=>25880,
+16679=>25881,
+16680=>25882,
+16681=>25883,
+16682=>25884,
+16683=>25885,
+16684=>25886,
+16685=>25887,
+16686=>25888,
+16687=>25889,
+16688=>25890,
+16689=>25891,
+16690=>25892,
+16691=>25893,
+16692=>25894,
+16693=>25895,
+16694=>25896,
+16695=>25897,
+16696=>25898,
+16697=>25899,
+16698=>25900,
+16699=>25901,
+16700=>25902,
+16701=>25903,
+16702=>25904,
+16703=>25905,
+16704=>25906,
+16705=>25907,
+16706=>25908,
+16707=>25909,
+16708=>25910,
+16709=>25911,
+16710=>25912,
+16711=>25913,
+16712=>25914,
+16713=>25915,
+16714=>25916,
+16715=>25917,
+16716=>25918,
+16717=>25919,
+16718=>25920,
+16719=>25921,
+16720=>25922,
+16721=>25923,
+16722=>25924,
+16723=>25925,
+16724=>25926,
+16725=>25927,
+16726=>25928,
+16727=>25929,
+16728=>25930,
+16729=>25931,
+16730=>25932,
+16731=>25933,
+16732=>25934,
+16733=>25935,
+16734=>25936,
+16736=>25937,
+16737=>25938,
+16738=>25939,
+16739=>25940,
+16740=>25941,
+16741=>25942,
+16742=>25943,
+16743=>25944,
+16744=>25945,
+16745=>25946,
+16746=>25947,
+16747=>25948,
+16748=>25949,
+16749=>25950,
+16750=>25951,
+16751=>25952,
+16752=>25953,
+16753=>25954,
+16754=>25955,
+16755=>25956,
+16756=>25957,
+16757=>25958,
+16758=>25959,
+16759=>25960,
+16760=>25961,
+16761=>25962,
+16762=>25963,
+16763=>25964,
+16764=>25965,
+16765=>25966,
+16766=>25967,
+16767=>25968,
+16768=>25969,
+16769=>25970,
+16770=>25971,
+16771=>25972,
+16772=>25973,
+16773=>25974,
+16774=>25975,
+16775=>25976,
+16776=>25977,
+16777=>25978,
+16778=>25979,
+16779=>25980,
+16780=>25981,
+16781=>25982,
+16782=>25983,
+16783=>25984,
+16784=>25985,
+16785=>25986,
+16786=>25987,
+16787=>25988,
+16788=>25989,
+16789=>25990,
+16790=>25991,
+16791=>25992,
+16792=>25993,
+16793=>25994,
+16794=>25995,
+16795=>25996,
+16796=>25997,
+16797=>25998,
+16798=>25999,
+16799=>26000,
+16800=>26001,
+16801=>26002,
+16802=>26003,
+16803=>26004,
+16804=>26005,
+16805=>26006,
+16806=>26007,
+16807=>26008,
+16808=>26009,
+16809=>26010,
+16810=>26011,
+16811=>26012,
+16812=>26013,
+16813=>26014,
+16814=>26015,
+16815=>26016,
+16816=>26017,
+16817=>26018,
+16818=>26019,
+16819=>26020,
+16820=>26021,
+16821=>26022,
+16822=>26023,
+16823=>26024,
+16824=>26025,
+16825=>26026,
+16826=>26027,
+16827=>26028,
+16828=>26029,
+16829=>26030,
+16830=>26031,
+16831=>26032,
+16832=>26033,
+16833=>26034,
+16834=>26035,
+16835=>26036,
+16836=>26037,
+16837=>26038,
+16838=>26039,
+16839=>26040,
+16840=>26041,
+16841=>26042,
+16842=>26043,
+16843=>26044,
+16844=>26045,
+16845=>26046,
+16846=>26047,
+16847=>26048,
+16848=>26049,
+16849=>26050,
+16850=>26051,
+16851=>26052,
+16852=>26053,
+16853=>26054,
+16854=>26055,
+16855=>26056,
+16856=>26057,
+16857=>26058,
+16858=>26059,
+16859=>26060,
+16860=>26061,
+16861=>26062,
+16862=>26063,
+16863=>26064,
+16864=>26065,
+16865=>26066,
+16866=>26067,
+16867=>26068,
+16868=>26069,
+16869=>26070,
+16870=>26071,
+16871=>26072,
+16872=>26073,
+16873=>26074,
+16874=>26075,
+16875=>26076,
+16876=>26077,
+16877=>26078,
+16878=>26079,
+16879=>26080,
+16880=>26081,
+16881=>26082,
+16882=>26083,
+16883=>26084,
+16884=>26085,
+16885=>26086,
+16886=>26087,
+16887=>26088,
+16888=>26089,
+16889=>26090,
+16890=>26091,
+16891=>26092,
+16892=>26093,
+16893=>26094,
+16894=>26095,
+16895=>26096,
+16896=>26097,
+16897=>26098,
+16898=>26099,
+16899=>26100,
+16900=>26101,
+16901=>26102,
+16902=>26103,
+16903=>26104,
+16904=>26105,
+16905=>26106,
+16906=>26107,
+16907=>26108,
+16908=>26109,
+16909=>26110,
+16910=>26111,
+16911=>26112,
+16912=>26113,
+16913=>26114,
+16914=>26115,
+16915=>26116,
+16916=>26117,
+16917=>26118,
+16918=>26119,
+16919=>26120,
+16920=>26121,
+16921=>26122,
+16922=>26123,
+16923=>26124,
+16924=>26125,
+16925=>26126,
+16926=>26127,
+16927=>26128,
+16928=>26129,
+16929=>26130,
+16930=>26131,
+16931=>26132,
+16932=>26133,
+16933=>26134,
+16934=>26135,
+16935=>26136,
+16936=>26137,
+16937=>26138,
+16938=>26139,
+16939=>26140,
+16940=>26141,
+16941=>26142,
+16942=>26143,
+16943=>26144,
+16944=>26145,
+16945=>26146,
+16946=>26147,
+16947=>26148,
+16948=>26149,
+16949=>26150,
+16950=>26151,
+16951=>26152,
+16952=>26153,
+16953=>26154,
+16954=>26155,
+16955=>26156,
+16956=>26157,
+16957=>26158,
+16958=>26159,
+16959=>26160,
+16960=>26161,
+16961=>26162,
+16962=>26163,
+16963=>26164,
+16964=>26165,
+16965=>26166,
+16966=>26167,
+16967=>26168,
+16968=>26169,
+16969=>26170,
+16970=>26171,
+16971=>26172,
+16972=>26173,
+16973=>26174,
+16974=>26175,
+16975=>26176,
+16976=>26177,
+16977=>26178,
+16978=>26179,
+16979=>26180,
+16980=>26181,
+16981=>26182,
+16982=>26183,
+16983=>26184,
+16984=>26185,
+16985=>26186,
+16986=>26187,
+16987=>26188,
+16988=>26189,
+16989=>26190,
+16990=>26191,
+16991=>26192,
+16992=>26193,
+16993=>26194,
+16994=>26195,
+16995=>26196,
+16996=>26197,
+16997=>26198,
+16998=>26199,
+16999=>26200,
+17000=>26201,
+17001=>26202,
+17002=>26203,
+17003=>26204,
+17004=>26205,
+17005=>26206,
+17006=>26207,
+17007=>26208,
+17008=>26209,
+17009=>26210,
+17010=>26211,
+17011=>26212,
+17012=>26213,
+17013=>26214,
+17014=>26215,
+17015=>26216,
+17016=>26217,
+17017=>26218,
+17018=>26219,
+17019=>26220,
+17020=>26221,
+17021=>26222,
+17022=>26223,
+17023=>26224,
+17024=>26225,
+17025=>26226,
+17026=>26227,
+17027=>26228,
+17028=>26229,
+17029=>26230,
+17030=>26231,
+17031=>26232,
+17032=>26233,
+17033=>26234,
+17034=>26235,
+17035=>26236,
+17036=>26237,
+17037=>26238,
+17038=>26239,
+17039=>26240,
+17040=>26241,
+17041=>26242,
+17042=>26243,
+17043=>26244,
+17044=>26245,
+17045=>26246,
+17046=>26247,
+17047=>26248,
+17048=>26249,
+17049=>26250,
+17050=>26251,
+17051=>26252,
+17052=>26253,
+17053=>26254,
+17054=>26255,
+17055=>26256,
+17056=>26257,
+17057=>26258,
+17058=>26259,
+17059=>26260,
+17060=>26261,
+17061=>26262,
+17062=>26263,
+17063=>26264,
+17064=>26265,
+17065=>26266,
+17066=>26267,
+17067=>26268,
+17068=>26269,
+17069=>26270,
+17070=>26271,
+17071=>26272,
+17072=>26273,
+17073=>26274,
+17074=>26275,
+17075=>26276,
+17076=>26277,
+17077=>26278,
+17078=>26279,
+17079=>26280,
+17080=>26281,
+17081=>26282,
+17082=>26283,
+17083=>26284,
+17084=>26285,
+17085=>26286,
+17086=>26287,
+17087=>26288,
+17088=>26289,
+17089=>26290,
+17090=>26291,
+17091=>26292,
+17092=>26293,
+17093=>26294,
+17094=>26295,
+17095=>26296,
+17096=>26297,
+17097=>26298,
+17098=>26299,
+17099=>26300,
+17100=>26301,
+17101=>26302,
+17102=>26303,
+17103=>26304,
+17104=>26305,
+17105=>26306,
+17106=>26307,
+17107=>26308,
+17108=>26309,
+17109=>26310,
+17110=>26311,
+17111=>26312,
+17112=>26313,
+17113=>26314,
+17114=>26315,
+17115=>26316,
+17116=>26317,
+17117=>26318,
+17118=>26319,
+17119=>26320,
+17120=>26321,
+17121=>26322,
+17122=>26323,
+17123=>26324,
+17124=>26325,
+17125=>26326,
+17126=>26327,
+17127=>26328,
+17128=>26329,
+17129=>26330,
+17130=>26331,
+17131=>26332,
+17132=>26333,
+17133=>26334,
+17134=>26335,
+17135=>26336,
+17136=>26337,
+17137=>26338,
+17138=>26339,
+17139=>26340,
+17140=>26341,
+17141=>26342,
+17142=>26343,
+17143=>26344,
+17144=>26345,
+17145=>26346,
+17146=>26347,
+17147=>26348,
+17148=>26349,
+17149=>26350,
+17150=>26351,
+17151=>26352,
+17152=>26353,
+17153=>26354,
+17154=>26355,
+17155=>26356,
+17156=>26357,
+17157=>26358,
+17158=>26359,
+17159=>26360,
+17160=>26361,
+17161=>26362,
+17162=>26363,
+17163=>26364,
+17164=>26365,
+17165=>26366,
+17166=>26367,
+17167=>26368,
+17168=>26369,
+17169=>26370,
+17170=>26371,
+17171=>26372,
+17172=>26373,
+17173=>26374,
+17174=>26375,
+17175=>26376,
+17176=>26377,
+17177=>26378,
+17178=>26379,
+17179=>26380,
+17180=>26381,
+17181=>26382,
+17182=>26383,
+17183=>26384,
+17184=>26385,
+17185=>26386,
+17186=>26387,
+17187=>26388,
+17188=>26389,
+17189=>26390,
+17190=>26391,
+17191=>26392,
+17192=>26393,
+17193=>26394,
+17194=>26395,
+17195=>26396,
+17196=>26397,
+17197=>26398,
+17198=>26399,
+17199=>26400,
+17200=>26401,
+17201=>26402,
+17202=>26403,
+17203=>26404,
+17204=>26405,
+17205=>26406,
+17206=>26407,
+17208=>26408,
+17209=>26409,
+17210=>26410,
+17211=>26411,
+17212=>26412,
+17213=>26413,
+17214=>26414,
+17215=>26415,
+17216=>26416,
+17217=>26417,
+17218=>26418,
+17219=>26419,
+17220=>26420,
+17221=>26421,
+17222=>26422,
+17223=>26423,
+17224=>26424,
+17225=>26425,
+17226=>26426,
+17227=>26427,
+17228=>26428,
+17229=>26429,
+17230=>26430,
+17231=>26431,
+17232=>26432,
+17233=>26433,
+17234=>26434,
+17235=>26435,
+17236=>26436,
+17237=>26437,
+17238=>26438,
+17239=>26439,
+17240=>26440,
+17241=>26441,
+17242=>26442,
+17243=>26443,
+17244=>26444,
+17245=>26445,
+17246=>26446,
+17247=>26447,
+17248=>26448,
+17249=>26449,
+17250=>26450,
+17251=>26451,
+17252=>26452,
+17253=>26453,
+17254=>26454,
+17255=>26455,
+17256=>26456,
+17257=>26457,
+17258=>26458,
+17259=>26459,
+17260=>26460,
+17261=>26461,
+17262=>26462,
+17263=>26463,
+17264=>26464,
+17265=>26465,
+17266=>26466,
+17267=>26467,
+17268=>26468,
+17269=>26469,
+17270=>26470,
+17271=>26471,
+17272=>26472,
+17273=>26473,
+17274=>26474,
+17275=>26475,
+17276=>26476,
+17277=>26477,
+17278=>26478,
+17279=>26479,
+17280=>26480,
+17281=>26481,
+17282=>26482,
+17283=>26483,
+17284=>26484,
+17285=>26485,
+17286=>26486,
+17287=>26487,
+17288=>26488,
+17289=>26489,
+17290=>26490,
+17291=>26491,
+17292=>26492,
+17293=>26493,
+17294=>26494,
+17295=>26495,
+17296=>26496,
+17297=>26497,
+17298=>26498,
+17299=>26499,
+17300=>26500,
+17301=>26501,
+17302=>26502,
+17303=>26503,
+17304=>26504,
+17305=>26505,
+17306=>26506,
+17307=>26507,
+17308=>26508,
+17309=>26509,
+17310=>26510,
+17311=>26511,
+17312=>26512,
+17313=>26513,
+17314=>26514,
+17315=>26515,
+17316=>26516,
+17317=>26517,
+17318=>26518,
+17319=>26519,
+17320=>26520,
+17321=>26521,
+17322=>26522,
+17323=>26523,
+17325=>26524,
+17326=>26525,
+17327=>26526,
+17328=>26527,
+17330=>26528,
+17331=>26529,
+17332=>26530,
+17333=>26531,
+17334=>26532,
+17335=>26533,
+17336=>26534,
+17337=>26535,
+17338=>26536,
+17339=>26537,
+17340=>26538,
+17341=>26539,
+17342=>26540,
+17343=>26541,
+17344=>26542,
+17345=>26543,
+17346=>26544,
+17347=>26545,
+17348=>26546,
+17349=>26547,
+17350=>26548,
+17351=>26549,
+17352=>26550,
+17353=>26551,
+17354=>26552,
+17355=>26553,
+17356=>26554,
+17357=>26555,
+17358=>26556,
+17359=>26557,
+17360=>26558,
+17361=>26559,
+17362=>26560,
+17363=>26561,
+17364=>26562,
+17365=>26563,
+17366=>26564,
+17367=>26565,
+17368=>26566,
+17369=>26567,
+17370=>26568,
+17371=>26569,
+17372=>26570,
+17374=>26571,
+17375=>26572,
+17376=>26573,
+17377=>26574,
+17378=>26575,
+17379=>26576,
+17380=>26577,
+17381=>26578,
+17382=>26579,
+17383=>26580,
+17384=>26581,
+17385=>26582,
+17386=>26583,
+17387=>26584,
+17388=>26585,
+17389=>26586,
+17390=>26587,
+17391=>26588,
+17392=>26589,
+17393=>26590,
+17394=>26591,
+17395=>26592,
+17396=>26593,
+17397=>26594,
+17398=>26595,
+17399=>26596,
+17400=>26597,
+17401=>26598,
+17402=>26599,
+17403=>26600,
+17404=>26601,
+17405=>26602,
+17406=>26603,
+17407=>26604,
+17408=>26605,
+17409=>26606,
+17410=>26607,
+17411=>26608,
+17412=>26609,
+17413=>26610,
+17414=>26611,
+17415=>26612,
+17416=>26613,
+17417=>26614,
+17418=>26615,
+17419=>26616,
+17420=>26617,
+17421=>26618,
+17422=>26619,
+17423=>26620,
+17424=>26621,
+17425=>26622,
+17426=>26623,
+17427=>26624,
+17428=>26625,
+17429=>26626,
+17430=>26627,
+17431=>26628,
+17432=>26629,
+17433=>26630,
+17434=>26631,
+17435=>26632,
+17436=>26633,
+17437=>26634,
+17438=>26635,
+17439=>26636,
+17440=>26637,
+17441=>26638,
+17442=>26639,
+17443=>26640,
+17444=>26641,
+17445=>26642,
+17446=>26643,
+17447=>26644,
+17448=>26645,
+17449=>26646,
+17450=>26647,
+17451=>26648,
+17452=>26649,
+17453=>26650,
+17454=>26651,
+17455=>26652,
+17456=>26653,
+17457=>26654,
+17458=>26655,
+17459=>26656,
+17460=>26657,
+17461=>26658,
+17462=>26659,
+17463=>26660,
+17464=>26661,
+17465=>26662,
+17466=>26663,
+17467=>26664,
+17468=>26665,
+17469=>26666,
+17470=>26667,
+17471=>26668,
+17472=>26669,
+17473=>26670,
+17474=>26671,
+17475=>26672,
+17476=>26673,
+17477=>26674,
+17478=>26675,
+17479=>26676,
+17480=>26677,
+17481=>26678,
+17482=>26679,
+17483=>26680,
+17484=>26681,
+17485=>26682,
+17486=>26683,
+17487=>26684,
+17488=>26685,
+17489=>26686,
+17490=>26687,
+17491=>26688,
+17492=>26689,
+17493=>26690,
+17494=>26691,
+17495=>26692,
+17496=>26693,
+17497=>26694,
+17498=>26695,
+17499=>26696,
+17500=>26697,
+17501=>26698,
+17502=>26699,
+17503=>26700,
+17504=>26701,
+17505=>26702,
+17506=>26703,
+17507=>26704,
+17508=>26705,
+17509=>26706,
+17510=>26707,
+17511=>26708,
+17512=>26709,
+17513=>26710,
+17514=>26711,
+17515=>26712,
+17516=>26713,
+17517=>26714,
+17518=>26715,
+17519=>26716,
+17520=>26717,
+17521=>26718,
+17522=>26719,
+17523=>26720,
+17524=>26721,
+17525=>26722,
+17526=>26723,
+17527=>26724,
+17528=>26725,
+17529=>26726,
+17530=>26727,
+17531=>26728,
+17532=>26729,
+17533=>26730,
+17534=>26731,
+17535=>26732,
+17536=>26733,
+17537=>26734,
+17538=>26735,
+17539=>26736,
+17540=>26737,
+17541=>26738,
+17542=>26739,
+17543=>26740,
+17544=>26741,
+17545=>26742,
+17546=>26743,
+17547=>26744,
+17548=>26745,
+17549=>26746,
+17550=>26747,
+17551=>26748,
+17552=>26749,
+17553=>26750,
+17554=>26751,
+17555=>26752,
+17556=>26753,
+17557=>26754,
+17558=>26755,
+17559=>26756,
+17560=>26757,
+17561=>26758,
+17562=>26759,
+17563=>26760,
+17564=>26761,
+17565=>26762,
+17566=>26763,
+17567=>26764,
+17568=>26765,
+17569=>26766,
+17570=>26767,
+17571=>26768,
+17572=>26769,
+17573=>26770,
+17574=>26771,
+17575=>26772,
+17576=>26773,
+17577=>26774,
+17578=>26775,
+17579=>26776,
+17580=>26777,
+17581=>26778,
+17582=>26779,
+17583=>26780,
+17584=>26781,
+17585=>26782,
+17586=>26783,
+17587=>26784,
+17588=>26785,
+17589=>26786,
+17590=>26787,
+17591=>26788,
+17592=>26789,
+17593=>26790,
+17594=>26791,
+17595=>26792,
+17596=>26793,
+17597=>26794,
+17598=>26795,
+17599=>26796,
+17600=>26797,
+17601=>26798,
+17602=>26799,
+17603=>26800,
+17604=>26801,
+17605=>26802,
+17606=>26803,
+17607=>26804,
+17608=>26805,
+17609=>26806,
+17610=>26807,
+17611=>26808,
+17612=>26809,
+17613=>26810,
+17614=>26811,
+17615=>26812,
+17616=>26813,
+17617=>26814,
+17618=>26815,
+17619=>26816,
+17620=>26817,
+17621=>26818,
+17623=>26819,
+17624=>26820,
+17625=>26821,
+17626=>26822,
+17627=>26823,
+17628=>26824,
+17629=>26825,
+17630=>26826,
+17631=>26827,
+17632=>26828,
+17633=>26829,
+17634=>26830,
+17635=>26831,
+17636=>26832,
+17637=>26833,
+17638=>26834,
+17639=>26835,
+17640=>26836,
+17641=>26837,
+17642=>26838,
+17643=>26839,
+17644=>26840,
+17645=>26841,
+17646=>26842,
+17647=>26843,
+17648=>26844,
+17649=>26845,
+17650=>26846,
+17651=>26847,
+17652=>26848,
+17653=>26849,
+17654=>26850,
+17655=>26851,
+17656=>26852,
+17657=>26853,
+17658=>26854,
+17659=>26855,
+17660=>26856,
+17661=>26857,
+17662=>26858,
+17663=>26859,
+17664=>26860,
+17665=>26861,
+17666=>26862,
+17667=>26863,
+17668=>26864,
+17669=>26865,
+17670=>26866,
+17671=>26867,
+17672=>26868,
+17673=>26869,
+17674=>26870,
+17675=>26871,
+17676=>26872,
+17677=>26873,
+17678=>26874,
+17679=>26875,
+17680=>26876,
+17681=>26877,
+17682=>26878,
+17683=>26879,
+17684=>26880,
+17685=>26881,
+17686=>26882,
+17687=>26883,
+17688=>26884,
+17689=>26885,
+17690=>26886,
+17691=>26887,
+17692=>26888,
+17693=>26889,
+17694=>26890,
+17695=>26891,
+17696=>26892,
+17697=>26893,
+17698=>26894,
+17699=>26895,
+17700=>26896,
+17701=>26897,
+17702=>26898,
+17703=>26899,
+17704=>26900,
+17705=>26901,
+17706=>26902,
+17707=>26903,
+17708=>26904,
+17709=>26905,
+17710=>26906,
+17711=>26907,
+17712=>26908,
+17713=>26909,
+17714=>26910,
+17715=>26911,
+17716=>26912,
+17717=>26913,
+17718=>26914,
+17719=>26915,
+17720=>26916,
+17721=>26917,
+17722=>26918,
+17723=>26919,
+17724=>26920,
+17725=>26921,
+17726=>26922,
+17727=>26923,
+17728=>26924,
+17729=>26925,
+17730=>26926,
+17731=>26927,
+17732=>26928,
+17733=>26929,
+17734=>26930,
+17735=>26931,
+17736=>26932,
+17737=>26933,
+17738=>26934,
+17739=>26935,
+17740=>26936,
+17741=>26937,
+17742=>26938,
+17743=>26939,
+17744=>26940,
+17745=>26941,
+17746=>26942,
+17747=>26943,
+17748=>26944,
+17749=>26945,
+17750=>26946,
+17751=>26947,
+17752=>26948,
+17753=>26949,
+17754=>26950,
+17755=>26951,
+17756=>26952,
+17757=>26953,
+17758=>26954,
+17759=>26955,
+17760=>26956,
+17761=>26957,
+17762=>26958,
+17763=>26959,
+17764=>26960,
+17765=>26961,
+17766=>26962,
+17767=>26963,
+17768=>26964,
+17769=>26965,
+17770=>26966,
+17771=>26967,
+17772=>26968,
+17773=>26969,
+17774=>26970,
+17775=>26971,
+17776=>26972,
+17777=>26973,
+17778=>26974,
+17779=>26975,
+17780=>26976,
+17781=>26977,
+17782=>26978,
+17783=>26979,
+17784=>26980,
+17785=>26981,
+17786=>26982,
+17787=>26983,
+17788=>26984,
+17789=>26985,
+17790=>26986,
+17791=>26987,
+17792=>26988,
+17793=>26989,
+17794=>26990,
+17795=>26991,
+17796=>26992,
+17797=>26993,
+17798=>26994,
+17799=>26995,
+17800=>26996,
+17801=>26997,
+17802=>26998,
+17803=>26999,
+17804=>27000,
+17805=>27001,
+17806=>27002,
+17807=>27003,
+17808=>27004,
+17809=>27005,
+17810=>27006,
+17811=>27007,
+17812=>27008,
+17813=>27009,
+17814=>27010,
+17815=>27011,
+17816=>27012,
+17817=>27013,
+17818=>27014,
+17819=>27015,
+17820=>27016,
+17821=>27017,
+17822=>27018,
+17823=>27019,
+17824=>27020,
+17825=>27021,
+17826=>27022,
+17827=>27023,
+17828=>27024,
+17829=>27025,
+17830=>27026,
+17831=>27027,
+17832=>27028,
+17833=>27029,
+17834=>27030,
+17835=>27031,
+17836=>27032,
+17837=>27033,
+17838=>27034,
+17839=>27035,
+17840=>27036,
+17841=>27037,
+17842=>27038,
+17843=>27039,
+17844=>27040,
+17845=>27041,
+17846=>27042,
+17847=>27043,
+17848=>27044,
+17849=>27045,
+17850=>27046,
+17851=>27047,
+17852=>27048,
+17853=>27049,
+17854=>27050,
+17855=>27051,
+17856=>27052,
+17857=>27053,
+17858=>27054,
+17859=>27055,
+17860=>27056,
+17861=>27057,
+17862=>27058,
+17863=>27059,
+17864=>27060,
+17865=>27061,
+17866=>27062,
+17867=>27063,
+17868=>27064,
+17869=>27065,
+17870=>27066,
+17871=>27067,
+17872=>27068,
+17873=>27069,
+17874=>27070,
+17875=>27071,
+17876=>27072,
+17877=>27073,
+17878=>27074,
+17879=>27075,
+17880=>27076,
+17881=>27077,
+17882=>27078,
+17883=>27079,
+17884=>27080,
+17885=>27081,
+17886=>27082,
+17887=>27083,
+17888=>27084,
+17889=>27085,
+17890=>27086,
+17891=>27087,
+17892=>27088,
+17893=>27089,
+17894=>27090,
+17895=>27091,
+17896=>27092,
+17897=>27093,
+17898=>27094,
+17899=>27095,
+17900=>27096,
+17901=>27097,
+17902=>27098,
+17903=>27099,
+17904=>27100,
+17905=>27101,
+17906=>27102,
+17907=>27103,
+17908=>27104,
+17909=>27105,
+17910=>27106,
+17911=>27107,
+17912=>27108,
+17913=>27109,
+17914=>27110,
+17915=>27111,
+17916=>27112,
+17917=>27113,
+17918=>27114,
+17919=>27115,
+17920=>27116,
+17921=>27117,
+17922=>27118,
+17923=>27119,
+17924=>27120,
+17925=>27121,
+17926=>27122,
+17927=>27123,
+17928=>27124,
+17929=>27125,
+17930=>27126,
+17931=>27127,
+17932=>27128,
+17933=>27129,
+17934=>27130,
+17935=>27131,
+17936=>27132,
+17937=>27133,
+17938=>27134,
+17939=>27135,
+17940=>27136,
+17941=>27137,
+17942=>27138,
+17943=>27139,
+17944=>27140,
+17945=>27141,
+17946=>27142,
+17947=>27143,
+17948=>27144,
+17949=>27145,
+17950=>27146,
+17951=>27147,
+17952=>27148,
+17953=>27149,
+17954=>27150,
+17955=>27151,
+17956=>27152,
+17957=>27153,
+17958=>27154,
+17959=>27155,
+17960=>27156,
+17961=>27157,
+17962=>27158,
+17963=>27159,
+17964=>27160,
+17965=>27161,
+17966=>27162,
+17967=>27163,
+17968=>27164,
+17969=>27165,
+17970=>27166,
+17971=>27167,
+17972=>27168,
+17973=>27169,
+17974=>27170,
+17975=>27171,
+17976=>27172,
+17977=>27173,
+17978=>27174,
+17979=>27175,
+17980=>27176,
+17981=>27177,
+17982=>27178,
+17983=>27179,
+17984=>27180,
+17985=>27181,
+17986=>27182,
+17987=>27183,
+17988=>27184,
+17989=>27185,
+17990=>27186,
+17991=>27187,
+17992=>27188,
+17993=>27189,
+17994=>27190,
+17995=>27191,
+17997=>27192,
+17998=>27193,
+17999=>27194,
+18000=>27195,
+18001=>27196,
+18002=>27197,
+18003=>27198,
+18004=>27199,
+18005=>27200,
+18006=>27201,
+18007=>27202,
+18008=>27203,
+18009=>27204,
+18010=>27205,
+18011=>27206,
+18012=>27207,
+18013=>27208,
+18014=>27209,
+18015=>27210,
+18016=>27211,
+18018=>27212,
+18019=>27213,
+18020=>27214,
+18021=>27215,
+18022=>27216,
+18023=>27217,
+18024=>27218,
+18025=>27219,
+18026=>27220,
+18027=>27221,
+18028=>27222,
+18029=>27223,
+18030=>27224,
+18031=>27225,
+18032=>27226,
+18033=>27227,
+18034=>27228,
+18035=>27229,
+18036=>27230,
+18037=>27231,
+18038=>27232,
+18039=>27233,
+18040=>27234,
+18041=>27235,
+18042=>27236,
+18043=>27237,
+18044=>27238,
+18045=>27239,
+18046=>27240,
+18047=>27241,
+18048=>27242,
+18049=>27243,
+18050=>27244,
+18051=>27245,
+18052=>27246,
+18053=>27247,
+18054=>27248,
+18055=>27249,
+18056=>27250,
+18057=>27251,
+18058=>27252,
+18059=>27253,
+18060=>27254,
+18061=>27255,
+18062=>27256,
+18063=>27257,
+18064=>27258,
+18065=>27259,
+18066=>27260,
+18067=>27261,
+18068=>27262,
+18069=>27263,
+18070=>27264,
+18071=>27265,
+18072=>27266,
+18073=>27267,
+18074=>27268,
+18075=>27269,
+18076=>27270,
+18077=>27271,
+18078=>27272,
+18079=>27273,
+18080=>27274,
+18081=>27275,
+18082=>27276,
+18083=>27277,
+18084=>27278,
+18085=>27279,
+18086=>27280,
+18087=>27281,
+18088=>27282,
+18089=>27283,
+18090=>27284,
+18091=>27285,
+18092=>27286,
+18093=>27287,
+18094=>27288,
+18095=>27289,
+18096=>27290,
+18097=>27291,
+18098=>27292,
+18099=>27293,
+18100=>27294,
+18101=>27295,
+18102=>27296,
+18103=>27297,
+18104=>27298,
+18105=>27299,
+18106=>27300,
+18107=>27301,
+18108=>27302,
+18109=>27303,
+18110=>27304,
+18111=>27305,
+18112=>27306,
+18113=>27307,
+18114=>27308,
+18115=>27309,
+18116=>27310,
+18117=>27311,
+18118=>27312,
+18119=>27313,
+18120=>27314,
+18121=>27315,
+18122=>27316,
+18123=>27317,
+18124=>27318,
+18125=>27319,
+18126=>27320,
+18127=>27321,
+18128=>27322,
+18129=>27323,
+18130=>27324,
+18131=>27325,
+18132=>27326,
+18133=>27327,
+18134=>27328,
+18135=>27329,
+18136=>27330,
+18137=>27331,
+18138=>27332,
+18139=>27333,
+18140=>27334,
+18141=>27335,
+18142=>27336,
+18143=>27337,
+18144=>27338,
+18145=>27339,
+18146=>27340,
+18147=>27341,
+18148=>27342,
+18149=>27343,
+18150=>27344,
+18151=>27345,
+18152=>27346,
+18153=>27347,
+18154=>27348,
+18155=>27349,
+18156=>27350,
+18157=>27351,
+18158=>27352,
+18159=>27353,
+18160=>27354,
+18161=>27355,
+18162=>27356,
+18163=>27357,
+18164=>27358,
+18165=>27359,
+18166=>27360,
+18167=>27361,
+18168=>27362,
+18169=>27363,
+18170=>27364,
+18171=>27365,
+18172=>27366,
+18173=>27367,
+18174=>27368,
+18175=>27369,
+18176=>27370,
+18177=>27371,
+18178=>27372,
+18179=>27373,
+18180=>27374,
+18181=>27375,
+18182=>27376,
+18183=>27377,
+18184=>27378,
+18185=>27379,
+18186=>27380,
+18187=>27381,
+18188=>27382,
+18189=>27383,
+18190=>27384,
+18191=>27385,
+18192=>27386,
+18193=>27387,
+18194=>27388,
+18195=>27389,
+18196=>27390,
+18197=>27391,
+18198=>27392,
+18199=>27393,
+18200=>27394,
+18201=>27395,
+18202=>27396,
+18203=>27397,
+18204=>27398,
+18205=>27399,
+18206=>27400,
+18207=>27401,
+18208=>27402,
+18209=>27403,
+18210=>27404,
+18212=>27405,
+18213=>27406,
+18214=>27407,
+18215=>27408,
+18216=>27409,
+18218=>27410,
+18219=>27411,
+18220=>27412,
+18221=>27413,
+18222=>27414,
+18223=>27415,
+18224=>27416,
+18225=>27417,
+18226=>27418,
+18227=>27419,
+18228=>27420,
+18229=>27421,
+18230=>27422,
+18231=>27423,
+18232=>27424,
+18233=>27425,
+18234=>27426,
+18235=>27427,
+18236=>27428,
+18237=>27429,
+18238=>27430,
+18239=>27431,
+18240=>27432,
+18241=>27433,
+18242=>27434,
+18243=>27435,
+18244=>27436,
+18245=>27437,
+18246=>27438,
+18247=>27439,
+18248=>27440,
+18249=>27441,
+18250=>27442,
+18251=>27443,
+18252=>27444,
+18253=>27445,
+18254=>27446,
+18255=>27447,
+18256=>27448,
+18257=>27449,
+18258=>27450,
+18259=>27451,
+18260=>27452,
+18261=>27453,
+18262=>27454,
+18263=>27455,
+18264=>27456,
+18265=>27457,
+18266=>27458,
+18267=>27459,
+18268=>27460,
+18269=>27461,
+18270=>27462,
+18271=>27463,
+18272=>27464,
+18273=>27465,
+18274=>27466,
+18275=>27467,
+18276=>27468,
+18277=>27469,
+18278=>27470,
+18279=>27471,
+18280=>27472,
+18281=>27473,
+18282=>27474,
+18283=>27475,
+18284=>27476,
+18285=>27477,
+18286=>27478,
+18287=>27479,
+18288=>27480,
+18289=>27481,
+18290=>27482,
+18291=>27483,
+18292=>27484,
+18293=>27485,
+18294=>27486,
+18295=>27487,
+18296=>27488,
+18297=>27489,
+18298=>27490,
+18299=>27491,
+18301=>27492,
+18302=>27493,
+18303=>27494,
+18304=>27495,
+18305=>27496,
+18306=>27497,
+18307=>27498,
+18308=>27499,
+18309=>27500,
+18310=>27501,
+18311=>27502,
+18312=>27503,
+18313=>27504,
+18314=>27505,
+18315=>27506,
+18316=>27507,
+18318=>27508,
+18319=>27509,
+18320=>27510,
+18321=>27511,
+18322=>27512,
+18323=>27513,
+18324=>27514,
+18325=>27515,
+18326=>27516,
+18327=>27517,
+18328=>27518,
+18329=>27519,
+18330=>27520,
+18331=>27521,
+18332=>27522,
+18333=>27523,
+18334=>27524,
+18335=>27525,
+18336=>27526,
+18337=>27527,
+18338=>27528,
+18339=>27529,
+18340=>27530,
+18341=>27531,
+18342=>27532,
+18343=>27533,
+18344=>27534,
+18345=>27535,
+18346=>27536,
+18347=>27537,
+18348=>27538,
+18349=>27539,
+18350=>27540,
+18351=>27541,
+18352=>27542,
+18353=>27543,
+18354=>27544,
+18355=>27545,
+18356=>27546,
+18357=>27547,
+18358=>27548,
+18359=>27549,
+18360=>27550,
+18361=>27551,
+18362=>27552,
+18363=>27553,
+18364=>27554,
+18365=>27555,
+18366=>27556,
+18367=>27557,
+18368=>27558,
+18369=>27559,
+18370=>27560,
+18371=>27561,
+18372=>27562,
+18373=>27563,
+18374=>27564,
+18375=>27565,
+18376=>27566,
+18377=>27567,
+18378=>27568,
+18379=>27569,
+18380=>27570,
+18381=>27571,
+18382=>27572,
+18383=>27573,
+18384=>27574,
+18385=>27575,
+18386=>27576,
+18387=>27577,
+18388=>27578,
+18389=>27579,
+18390=>27580,
+18391=>27581,
+18392=>27582,
+18393=>27583,
+18394=>27584,
+18395=>27585,
+18396=>27586,
+18397=>27587,
+18398=>27588,
+18399=>27589,
+18400=>27590,
+18401=>27591,
+18402=>27592,
+18403=>27593,
+18404=>27594,
+18405=>27595,
+18406=>27596,
+18407=>27597,
+18408=>27598,
+18409=>27599,
+18410=>27600,
+18411=>27601,
+18412=>27602,
+18413=>27603,
+18414=>27604,
+18415=>27605,
+18416=>27606,
+18417=>27607,
+18418=>27608,
+18419=>27609,
+18420=>27610,
+18421=>27611,
+18422=>27612,
+18423=>27613,
+18424=>27614,
+18425=>27615,
+18426=>27616,
+18427=>27617,
+18428=>27618,
+18429=>27619,
+18430=>27620,
+18431=>27621,
+18432=>27622,
+18433=>27623,
+18434=>27624,
+18435=>27625,
+18436=>27626,
+18437=>27627,
+18438=>27628,
+18439=>27629,
+18440=>27630,
+18441=>27631,
+18442=>27632,
+18443=>27633,
+18444=>27634,
+18445=>27635,
+18446=>27636,
+18447=>27637,
+18448=>27638,
+18449=>27639,
+18450=>27640,
+18451=>27641,
+18452=>27642,
+18453=>27643,
+18454=>27644,
+18455=>27645,
+18456=>27646,
+18457=>27647,
+18458=>27648,
+18459=>27649,
+18460=>27650,
+18461=>27651,
+18462=>27652,
+18463=>27653,
+18464=>27654,
+18465=>27655,
+18466=>27656,
+18467=>27657,
+18468=>27658,
+18469=>27659,
+18470=>27660,
+18471=>27661,
+18472=>27662,
+18473=>27663,
+18474=>27664,
+18475=>27665,
+18476=>27666,
+18477=>27667,
+18478=>27668,
+18479=>27669,
+18480=>27670,
+18481=>27671,
+18482=>27672,
+18483=>27673,
+18484=>27674,
+18485=>27675,
+18486=>27676,
+18487=>27677,
+18488=>27678,
+18489=>27679,
+18490=>27680,
+18491=>27681,
+18492=>27682,
+18493=>27683,
+18494=>27684,
+18495=>27685,
+18496=>27686,
+18497=>27687,
+18498=>27688,
+18499=>27689,
+18500=>27690,
+18501=>27691,
+18502=>27692,
+18503=>27693,
+18504=>27694,
+18505=>27695,
+18506=>27696,
+18507=>27697,
+18508=>27698,
+18509=>27699,
+18510=>27700,
+18511=>27701,
+18512=>27702,
+18513=>27703,
+18514=>27704,
+18515=>27705,
+18516=>27706,
+18517=>27707,
+18518=>27708,
+18519=>27709,
+18520=>27710,
+18521=>27711,
+18522=>27712,
+18523=>27713,
+18524=>27714,
+18525=>27715,
+18526=>27716,
+18527=>27717,
+18528=>27718,
+18529=>27719,
+18530=>27720,
+18531=>27721,
+18532=>27722,
+18533=>27723,
+18534=>27724,
+18535=>27725,
+18536=>27726,
+18537=>27727,
+18538=>27728,
+18539=>27729,
+18540=>27730,
+18541=>27731,
+18542=>27732,
+18543=>27733,
+18544=>27734,
+18545=>27735,
+18546=>27736,
+18547=>27737,
+18548=>27738,
+18549=>27739,
+18550=>27740,
+18551=>27741,
+18552=>27742,
+18553=>27743,
+18554=>27744,
+18555=>27745,
+18556=>27746,
+18557=>27747,
+18558=>27748,
+18559=>27749,
+18560=>27750,
+18561=>27751,
+18562=>27752,
+18563=>27753,
+18564=>27754,
+18565=>27755,
+18566=>27756,
+18567=>27757,
+18568=>27758,
+18569=>27759,
+18570=>27760,
+18571=>27761,
+18572=>27762,
+18573=>27763,
+18574=>27764,
+18575=>27765,
+18576=>27766,
+18577=>27767,
+18578=>27768,
+18579=>27769,
+18580=>27770,
+18581=>27771,
+18582=>27772,
+18583=>27773,
+18584=>27774,
+18585=>27775,
+18586=>27776,
+18587=>27777,
+18588=>27778,
+18589=>27779,
+18590=>27780,
+18591=>27781,
+18592=>27782,
+18593=>27783,
+18594=>27784,
+18595=>27785,
+18596=>27786,
+18597=>27787,
+18598=>27788,
+18599=>27789,
+18600=>27790,
+18601=>27791,
+18602=>27792,
+18603=>27793,
+18604=>27794,
+18605=>27795,
+18606=>27796,
+18607=>27797,
+18608=>27798,
+18609=>27799,
+18610=>27800,
+18611=>27801,
+18612=>27802,
+18613=>27803,
+18614=>27804,
+18615=>27805,
+18616=>27806,
+18617=>27807,
+18618=>27808,
+18619=>27809,
+18620=>27810,
+18621=>27811,
+18622=>27812,
+18623=>27813,
+18624=>27814,
+18625=>27815,
+18626=>27816,
+18627=>27817,
+18628=>27818,
+18629=>27819,
+18630=>27820,
+18631=>27821,
+18632=>27822,
+18633=>27823,
+18634=>27824,
+18635=>27825,
+18636=>27826,
+18637=>27827,
+18638=>27828,
+18639=>27829,
+18640=>27830,
+18641=>27831,
+18642=>27832,
+18643=>27833,
+18644=>27834,
+18645=>27835,
+18646=>27836,
+18647=>27837,
+18648=>27838,
+18649=>27839,
+18650=>27840,
+18651=>27841,
+18652=>27842,
+18653=>27843,
+18654=>27844,
+18655=>27845,
+18656=>27846,
+18657=>27847,
+18658=>27848,
+18659=>27849,
+18660=>27850,
+18661=>27851,
+18662=>27852,
+18663=>27853,
+18664=>27854,
+18665=>27855,
+18666=>27856,
+18667=>27857,
+18668=>27858,
+18669=>27859,
+18670=>27860,
+18671=>27861,
+18672=>27862,
+18673=>27863,
+18674=>27864,
+18675=>27865,
+18676=>27866,
+18677=>27867,
+18678=>27868,
+18679=>27869,
+18680=>27870,
+18681=>27871,
+18682=>27872,
+18683=>27873,
+18684=>27874,
+18685=>27875,
+18686=>27876,
+18687=>27877,
+18688=>27878,
+18689=>27879,
+18690=>27880,
+18691=>27881,
+18692=>27882,
+18693=>27883,
+18694=>27884,
+18695=>27885,
+18696=>27886,
+18697=>27887,
+18698=>27888,
+18699=>27889,
+18700=>27890,
+18701=>27891,
+18702=>27892,
+18703=>27893,
+18704=>27894,
+18705=>27895,
+18706=>27896,
+18707=>27897,
+18708=>27898,
+18709=>27899,
+18710=>27900,
+18711=>27901,
+18712=>27902,
+18713=>27903,
+18714=>27904,
+18715=>27905,
+18716=>27906,
+18717=>27907,
+18718=>27908,
+18719=>27909,
+18720=>27910,
+18721=>27911,
+18722=>27912,
+18723=>27913,
+18724=>27914,
+18725=>27915,
+18726=>27916,
+18727=>27917,
+18728=>27918,
+18729=>27919,
+18730=>27920,
+18731=>27921,
+18732=>27922,
+18733=>27923,
+18734=>27924,
+18735=>27925,
+18736=>27926,
+18737=>27927,
+18738=>27928,
+18739=>27929,
+18740=>27930,
+18741=>27931,
+18742=>27932,
+18743=>27933,
+18744=>27934,
+18745=>27935,
+18746=>27936,
+18747=>27937,
+18748=>27938,
+18749=>27939,
+18750=>27940,
+18751=>27941,
+18752=>27942,
+18753=>27943,
+18754=>27944,
+18755=>27945,
+18756=>27946,
+18757=>27947,
+18758=>27948,
+18760=>27949,
+18761=>27950,
+18762=>27951,
+18763=>27952,
+18764=>27953,
+18765=>27954,
+18766=>27955,
+18767=>27956,
+18768=>27957,
+18769=>27958,
+18770=>27959,
+18771=>27960,
+18772=>27961,
+18773=>27962,
+18774=>27963,
+18775=>27964,
+18776=>27965,
+18777=>27966,
+18778=>27967,
+18779=>27968,
+18780=>27969,
+18781=>27970,
+18782=>27971,
+18783=>27972,
+18784=>27973,
+18785=>27974,
+18786=>27975,
+18787=>27976,
+18788=>27977,
+18789=>27978,
+18790=>27979,
+18791=>27980,
+18792=>27981,
+18793=>27982,
+18794=>27983,
+18795=>27984,
+18796=>27985,
+18797=>27986,
+18798=>27987,
+18799=>27988,
+18800=>27989,
+18801=>27990,
+18802=>27991,
+18803=>27992,
+18804=>27993,
+18805=>27994,
+18806=>27995,
+18807=>27996,
+18808=>27997,
+18809=>27998,
+18811=>27999,
+18812=>28000,
+18814=>28001,
+18815=>28002,
+18816=>28003,
+18817=>28004,
+18820=>28005,
+18823=>28006,
+18824=>28007,
+18825=>28008,
+18826=>28009,
+18827=>28010,
+18828=>28011,
+18829=>28012,
+18830=>28013,
+18831=>28014,
+18832=>28015,
+18833=>28016,
+18834=>28017,
+18835=>28018,
+18836=>28019,
+18837=>28020,
+18838=>28021,
+18839=>28022,
+18840=>28023,
+18841=>28024,
+18842=>28025,
+18844=>28026,
+18845=>28027,
+18846=>28028,
+18848=>28029,
+18849=>28030,
+18850=>28031,
+18851=>28032,
+18852=>28033,
+18853=>28034,
+18854=>28035,
+18855=>28036,
+18856=>28037,
+18857=>28038,
+18858=>28039,
+18859=>28040,
+18860=>28041,
+18861=>28042,
+18862=>28043,
+18863=>28044,
+18864=>28045,
+18865=>28046,
+18866=>28047,
+18867=>28048,
+18868=>28049,
+18869=>28050,
+18872=>28051,
+18873=>28052,
+18874=>28053,
+18875=>28054,
+18876=>28055,
+18877=>28056,
+18878=>28057,
+18879=>28058,
+18880=>28059,
+18881=>28060,
+18882=>28061,
+18883=>28062,
+18884=>28063,
+18885=>28064,
+18886=>28065,
+18887=>28066,
+18888=>28067,
+18889=>28068,
+18890=>28069,
+18891=>28070,
+18892=>28071,
+18893=>28072,
+18894=>28073,
+18895=>28074,
+18896=>28075,
+18897=>28076,
+18898=>28077,
+18899=>28078,
+18900=>28079,
+18901=>28080,
+18902=>28081,
+18903=>28082,
+18904=>28083,
+18905=>28084,
+18906=>28085,
+18907=>28086,
+18908=>28087,
+18909=>28088,
+18910=>28089,
+18911=>28090,
+18912=>28091,
+18913=>28092,
+18914=>28093,
+18915=>28094,
+18916=>28095,
+18917=>28096,
+18918=>28097,
+18919=>28098,
+18920=>28099,
+18921=>28100,
+18922=>28101,
+18923=>28102,
+18924=>28103,
+18925=>28104,
+18926=>28105,
+18927=>28106,
+18928=>28107,
+18929=>28108,
+18930=>28109,
+18931=>28110,
+18932=>28111,
+18933=>28112,
+18934=>28113,
+18935=>28114,
+18936=>28115,
+18937=>28116,
+18938=>28117,
+18939=>28118,
+18940=>28119,
+18941=>28120,
+18942=>28121,
+18943=>28122,
+18944=>28123,
+18945=>28124,
+18946=>28125,
+18947=>28126,
+18948=>28127,
+18949=>28128,
+18950=>28129,
+18951=>28130,
+18952=>28131,
+18953=>28132,
+18954=>28133,
+18955=>28134,
+18956=>28135,
+18957=>28136,
+18958=>28137,
+18959=>28138,
+18960=>28139,
+18961=>28140,
+18962=>28141,
+18963=>28142,
+18964=>28143,
+18965=>28144,
+18966=>28145,
+18967=>28146,
+18968=>28147,
+18969=>28148,
+18970=>28149,
+18971=>28150,
+18972=>28151,
+18973=>28152,
+18974=>28153,
+18975=>28154,
+18976=>28155,
+18977=>28156,
+18978=>28157,
+18979=>28158,
+18980=>28159,
+18981=>28160,
+18982=>28161,
+18983=>28162,
+18984=>28163,
+18985=>28164,
+18986=>28165,
+18987=>28166,
+18988=>28167,
+18989=>28168,
+18990=>28169,
+18991=>28170,
+18992=>28171,
+18993=>28172,
+18994=>28173,
+18995=>28174,
+18996=>28175,
+18997=>28176,
+18998=>28177,
+18999=>28178,
+19000=>28179,
+19001=>28180,
+19002=>28181,
+19003=>28182,
+19004=>28183,
+19005=>28184,
+19006=>28185,
+19007=>28186,
+19008=>28187,
+19009=>28188,
+19010=>28189,
+19011=>28190,
+19012=>28191,
+19013=>28192,
+19014=>28193,
+19015=>28194,
+19016=>28195,
+19017=>28196,
+19018=>28197,
+19019=>28198,
+19020=>28199,
+19021=>28200,
+19022=>28201,
+19023=>28202,
+19024=>28203,
+19025=>28204,
+19026=>28205,
+19027=>28206,
+19028=>28207,
+19029=>28208,
+19030=>28209,
+19031=>28210,
+19032=>28211,
+19033=>28212,
+19034=>28213,
+19035=>28214,
+19036=>28215,
+19037=>28216,
+19038=>28217,
+19039=>28218,
+19040=>28219,
+19041=>28220,
+19042=>28221,
+19043=>28222,
+19044=>28223,
+19045=>28224,
+19046=>28225,
+19047=>28226,
+19048=>28227,
+19049=>28228,
+19050=>28229,
+19051=>28230,
+19052=>28231,
+19053=>28232,
+19054=>28233,
+19055=>28234,
+19056=>28235,
+19057=>28236,
+19058=>28237,
+19059=>28238,
+19060=>28239,
+19061=>28240,
+19062=>28241,
+19063=>28242,
+19064=>28243,
+19065=>28244,
+19066=>28245,
+19067=>28246,
+19068=>28247,
+19069=>28248,
+19070=>28249,
+19071=>28250,
+19072=>28251,
+19073=>28252,
+19074=>28253,
+19075=>28254,
+19076=>28255,
+19077=>28256,
+19078=>28257,
+19079=>28258,
+19080=>28259,
+19081=>28260,
+19082=>28261,
+19083=>28262,
+19084=>28263,
+19085=>28264,
+19086=>28265,
+19087=>28266,
+19088=>28267,
+19089=>28268,
+19090=>28269,
+19091=>28270,
+19092=>28271,
+19093=>28272,
+19094=>28273,
+19095=>28274,
+19096=>28275,
+19097=>28276,
+19098=>28277,
+19099=>28278,
+19100=>28279,
+19101=>28280,
+19102=>28281,
+19103=>28282,
+19104=>28283,
+19105=>28284,
+19106=>28285,
+19107=>28286,
+19108=>28287,
+19109=>28288,
+19110=>28289,
+19111=>28290,
+19112=>28291,
+19113=>28292,
+19114=>28293,
+19115=>28294,
+19116=>28295,
+19117=>28296,
+19118=>28297,
+19119=>28298,
+19120=>28299,
+19121=>28300,
+19122=>28301,
+19123=>28302,
+19124=>28303,
+19125=>28304,
+19126=>28305,
+19127=>28306,
+19128=>28307,
+19129=>28308,
+19130=>28309,
+19131=>28310,
+19132=>28311,
+19133=>28312,
+19134=>28313,
+19135=>28314,
+19136=>28315,
+19137=>28316,
+19138=>28317,
+19139=>28318,
+19140=>28319,
+19141=>28320,
+19142=>28321,
+19143=>28322,
+19144=>28323,
+19145=>28324,
+19146=>28325,
+19147=>28326,
+19148=>28327,
+19149=>28328,
+19150=>28329,
+19151=>28330,
+19152=>28331,
+19153=>28332,
+19154=>28333,
+19155=>28334,
+19156=>28335,
+19157=>28336,
+19158=>28337,
+19159=>28338,
+19160=>28339,
+19161=>28340,
+19162=>28341,
+19163=>28342,
+19164=>28343,
+19165=>28344,
+19166=>28345,
+19167=>28346,
+19168=>28347,
+19169=>28348,
+19170=>28349,
+19171=>28350,
+19172=>28351,
+19173=>28352,
+19174=>28353,
+19175=>28354,
+19176=>28355,
+19177=>28356,
+19178=>28357,
+19179=>28358,
+19180=>28359,
+19181=>28360,
+19182=>28361,
+19183=>28362,
+19184=>28363,
+19185=>28364,
+19186=>28365,
+19187=>28366,
+19188=>28367,
+19189=>28368,
+19190=>28369,
+19191=>28370,
+19192=>28371,
+19193=>28372,
+19194=>28373,
+19195=>28374,
+19196=>28375,
+19197=>28376,
+19198=>28377,
+19199=>28378,
+19200=>28379,
+19201=>28380,
+19202=>28381,
+19203=>28382,
+19204=>28383,
+19205=>28384,
+19206=>28385,
+19207=>28386,
+19208=>28387,
+19209=>28388,
+19210=>28389,
+19211=>28390,
+19212=>28391,
+19213=>28392,
+19214=>28393,
+19215=>28394,
+19216=>28395,
+19217=>28396,
+19218=>28397,
+19219=>28398,
+19220=>28399,
+19221=>28400,
+19222=>28401,
+19223=>28402,
+19224=>28403,
+19225=>28404,
+19226=>28405,
+19227=>28406,
+19228=>28407,
+19229=>28408,
+19230=>28409,
+19231=>28410,
+19232=>28411,
+19233=>28412,
+19234=>28413,
+19235=>28414,
+19236=>28415,
+19237=>28416,
+19238=>28417,
+19239=>28418,
+19240=>28419,
+19241=>28420,
+19242=>28421,
+19243=>28422,
+19244=>28423,
+19245=>28424,
+19246=>28425,
+19247=>28426,
+19248=>28427,
+19249=>28428,
+19250=>28429,
+19251=>28430,
+19252=>28431,
+19253=>28432,
+19254=>28433,
+19255=>28434,
+19256=>28435,
+19257=>28436,
+19258=>28437,
+19259=>28438,
+19260=>28439,
+19261=>28440,
+19262=>28441,
+19263=>28442,
+19264=>28443,
+19265=>28444,
+19266=>28445,
+19267=>28446,
+19268=>28447,
+19269=>28448,
+19270=>28449,
+19271=>28450,
+19272=>28451,
+19273=>28452,
+19274=>28453,
+19275=>28454,
+19276=>28455,
+19277=>28456,
+19278=>28457,
+19279=>28458,
+19280=>28459,
+19281=>28460,
+19282=>28461,
+19283=>28462,
+19284=>28463,
+19285=>28464,
+19286=>28465,
+19287=>28466,
+19288=>28467,
+19289=>28468,
+19290=>28469,
+19291=>28470,
+19292=>28471,
+19293=>28472,
+19294=>28473,
+19295=>28474,
+19296=>28475,
+19297=>28476,
+19298=>28477,
+19299=>28478,
+19300=>28479,
+19301=>28480,
+19302=>28481,
+19303=>28482,
+19304=>28483,
+19305=>28484,
+19306=>28485,
+19307=>28486,
+19308=>28487,
+19309=>28488,
+19310=>28489,
+19311=>28490,
+19312=>28491,
+19313=>28492,
+19314=>28493,
+19315=>28494,
+19316=>28495,
+19317=>28496,
+19318=>28497,
+19319=>28498,
+19320=>28499,
+19321=>28500,
+19322=>28501,
+19323=>28502,
+19324=>28503,
+19325=>28504,
+19326=>28505,
+19327=>28506,
+19328=>28507,
+19329=>28508,
+19330=>28509,
+19331=>28510,
+19332=>28511,
+19333=>28512,
+19334=>28513,
+19335=>28514,
+19336=>28515,
+19337=>28516,
+19338=>28517,
+19339=>28518,
+19340=>28519,
+19341=>28520,
+19342=>28521,
+19343=>28522,
+19344=>28523,
+19345=>28524,
+19346=>28525,
+19347=>28526,
+19348=>28527,
+19349=>28528,
+19350=>28529,
+19351=>28530,
+19352=>28531,
+19353=>28532,
+19354=>28533,
+19355=>28534,
+19356=>28535,
+19357=>28536,
+19358=>28537,
+19359=>28538,
+19360=>28539,
+19361=>28540,
+19362=>28541,
+19363=>28542,
+19364=>28543,
+19365=>28544,
+19366=>28545,
+19367=>28546,
+19368=>28547,
+19369=>28548,
+19370=>28549,
+19371=>28550,
+19372=>28551,
+19373=>28552,
+19374=>28553,
+19375=>28554,
+19376=>28555,
+19377=>28556,
+19378=>28557,
+19379=>28558,
+19380=>28559,
+19381=>28560,
+19382=>28561,
+19383=>28562,
+19384=>28563,
+19385=>28564,
+19386=>28565,
+19387=>28566,
+19388=>28567,
+19389=>28568,
+19390=>28569,
+19391=>28570,
+19392=>28571,
+19393=>28572,
+19394=>28573,
+19395=>28574,
+19396=>28575,
+19397=>28576,
+19398=>28577,
+19399=>28578,
+19400=>28579,
+19401=>28580,
+19402=>28581,
+19403=>28582,
+19404=>28583,
+19405=>28584,
+19406=>28585,
+19407=>28586,
+19408=>28587,
+19409=>28588,
+19410=>28589,
+19411=>28590,
+19412=>28591,
+19413=>28592,
+19414=>28593,
+19415=>28594,
+19416=>28595,
+19417=>28596,
+19418=>28597,
+19419=>28598,
+19420=>28599,
+19421=>28600,
+19422=>28601,
+19423=>28602,
+19424=>28603,
+19425=>28604,
+19426=>28605,
+19427=>28606,
+19428=>28607,
+19429=>28608,
+19430=>28609,
+19431=>28610,
+19432=>28611,
+19433=>28612,
+19434=>28613,
+19435=>28614,
+19436=>28615,
+19437=>28616,
+19438=>28617,
+19439=>28618,
+19440=>28619,
+19441=>28620,
+19442=>28621,
+19443=>28622,
+19444=>28623,
+19445=>28624,
+19446=>28625,
+19447=>28626,
+19448=>28627,
+19449=>28628,
+19450=>28629,
+19451=>28630,
+19452=>28631,
+19453=>28632,
+19454=>28633,
+19455=>28634,
+19456=>28635,
+19457=>28636,
+19458=>28637,
+19459=>28638,
+19460=>28639,
+19461=>28640,
+19462=>28641,
+19463=>28642,
+19464=>28643,
+19465=>28644,
+19466=>28645,
+19467=>28646,
+19468=>28647,
+19469=>28648,
+19470=>28649,
+19471=>28650,
+19472=>28651,
+19473=>28652,
+19474=>28653,
+19475=>28654,
+19476=>28655,
+19477=>28656,
+19478=>28657,
+19479=>28658,
+19480=>28659,
+19481=>28660,
+19482=>28661,
+19483=>28662,
+19484=>28663,
+19485=>28664,
+19486=>28665,
+19487=>28666,
+19488=>28667,
+19489=>28668,
+19490=>28669,
+19491=>28670,
+19492=>28671,
+19493=>28672,
+19494=>28673,
+19495=>28674,
+19496=>28675,
+19497=>28676,
+19498=>28677,
+19499=>28678,
+19500=>28679,
+19501=>28680,
+19502=>28681,
+19503=>28682,
+19504=>28683,
+19505=>28684,
+19506=>28685,
+19507=>28686,
+19508=>28687,
+19509=>28688,
+19510=>28689,
+19511=>28690,
+19512=>28691,
+19513=>28692,
+19514=>28693,
+19515=>28694,
+19516=>28695,
+19517=>28696,
+19518=>28697,
+19519=>28698,
+19520=>28699,
+19521=>28700,
+19522=>28701,
+19523=>28702,
+19524=>28703,
+19525=>28704,
+19526=>28705,
+19527=>28706,
+19528=>28707,
+19529=>28708,
+19530=>28709,
+19531=>28710,
+19532=>28711,
+19533=>28712,
+19534=>28713,
+19535=>28714,
+19536=>28715,
+19537=>28716,
+19538=>28717,
+19539=>28718,
+19540=>28719,
+19541=>28720,
+19542=>28721,
+19543=>28722,
+19544=>28723,
+19545=>28724,
+19546=>28725,
+19547=>28726,
+19548=>28727,
+19549=>28728,
+19550=>28729,
+19551=>28730,
+19552=>28731,
+19553=>28732,
+19554=>28733,
+19555=>28734,
+19556=>28735,
+19557=>28736,
+19558=>28737,
+19559=>28738,
+19560=>28739,
+19561=>28740,
+19562=>28741,
+19563=>28742,
+19564=>28743,
+19565=>28744,
+19566=>28745,
+19567=>28746,
+19568=>28747,
+19569=>28748,
+19570=>28749,
+19571=>28750,
+19572=>28751,
+19573=>28752,
+19574=>28753,
+19576=>28754,
+19577=>28755,
+19578=>28756,
+19579=>28757,
+19580=>28758,
+19581=>28759,
+19582=>28760,
+19583=>28761,
+19584=>28762,
+19585=>28763,
+19586=>28764,
+19587=>28765,
+19588=>28766,
+19589=>28767,
+19590=>28768,
+19591=>28769,
+19592=>28770,
+19593=>28771,
+19594=>28772,
+19595=>28773,
+19596=>28774,
+19597=>28775,
+19598=>28776,
+19599=>28777,
+19600=>28778,
+19601=>28779,
+19602=>28780,
+19603=>28781,
+19604=>28782,
+19605=>28783,
+19606=>28784,
+19607=>28785,
+19608=>28786,
+19609=>28787,
+19610=>28788,
+19611=>28789,
+19612=>28790,
+19613=>28791,
+19614=>28792,
+19620=>28793,
+19621=>28794,
+19622=>28795,
+19623=>28796,
+19624=>28797,
+19625=>28798,
+19626=>28799,
+19627=>28800,
+19628=>28801,
+19629=>28802,
+19630=>28803,
+19631=>28804,
+19632=>28805,
+19633=>28806,
+19634=>28807,
+19635=>28808,
+19636=>28809,
+19637=>28810,
+19638=>28811,
+19639=>28812,
+19640=>28813,
+19641=>28814,
+19642=>28815,
+19643=>28816,
+19644=>28817,
+19645=>28818,
+19646=>28819,
+19647=>28820,
+19648=>28821,
+19649=>28822,
+19650=>28823,
+19651=>28824,
+19652=>28825,
+19653=>28826,
+19654=>28827,
+19655=>28828,
+19656=>28829,
+19657=>28830,
+19658=>28831,
+19659=>28832,
+19660=>28833,
+19661=>28834,
+19662=>28835,
+19663=>28836,
+19664=>28837,
+19665=>28838,
+19666=>28839,
+19667=>28840,
+19668=>28841,
+19669=>28842,
+19670=>28843,
+19671=>28844,
+19672=>28845,
+19673=>28846,
+19674=>28847,
+19675=>28848,
+19676=>28849,
+19677=>28850,
+19678=>28851,
+19679=>28852,
+19680=>28853,
+19681=>28854,
+19682=>28855,
+19683=>28856,
+19684=>28857,
+19685=>28858,
+19686=>28859,
+19687=>28860,
+19688=>28861,
+19689=>28862,
+19690=>28863,
+19691=>28864,
+19692=>28865,
+19693=>28866,
+19694=>28867,
+19695=>28868,
+19696=>28869,
+19697=>28870,
+19698=>28871,
+19699=>28872,
+19700=>28873,
+19701=>28874,
+19702=>28875,
+19703=>28876,
+19704=>28877,
+19705=>28878,
+19706=>28879,
+19707=>28880,
+19708=>28881,
+19709=>28882,
+19710=>28883,
+19711=>28884,
+19712=>28885,
+19713=>28886,
+19714=>28887,
+19715=>28888,
+19716=>28889,
+19717=>28890,
+19718=>28891,
+19719=>28892,
+19720=>28893,
+19721=>28894,
+19722=>28895,
+19723=>28896,
+19724=>28897,
+19725=>28898,
+19726=>28899,
+19727=>28900,
+19728=>28901,
+19729=>28902,
+19730=>28903,
+19738=>28904,
+19739=>28905,
+19740=>28906,
+19741=>28907,
+19742=>28908,
+19743=>28909,
+19744=>28910,
+19745=>28911,
+19746=>28912,
+19747=>28913,
+19748=>28914,
+19749=>28915,
+19750=>28916,
+19751=>28917,
+19752=>28918,
+19753=>28919,
+19754=>28920,
+19755=>28921,
+19756=>28922,
+19757=>28923,
+19758=>28924,
+19759=>28925,
+19760=>28926,
+19761=>28927,
+19762=>28928,
+19763=>28929,
+19764=>28930,
+19765=>28931,
+19766=>28932,
+19767=>28933,
+19768=>28934,
+19769=>28935,
+19770=>28936,
+19771=>28937,
+19772=>28938,
+19773=>28939,
+19774=>28940,
+19775=>28941,
+19776=>28942,
+19777=>28943,
+19778=>28944,
+19779=>28945,
+19780=>28946,
+19781=>28947,
+19782=>28948,
+19783=>28949,
+19784=>28950,
+19785=>28951,
+19786=>28952,
+19787=>28953,
+19788=>28954,
+19789=>28955,
+19790=>28956,
+19791=>28957,
+19792=>28958,
+19793=>28959,
+19794=>28960,
+19795=>28961,
+19796=>28962,
+19797=>28963,
+19798=>28964,
+19799=>28965,
+19800=>28966,
+19801=>28967,
+19802=>28968,
+19803=>28969,
+19804=>28970,
+19805=>28971,
+19806=>28972,
+19807=>28973,
+19808=>28974,
+19809=>28975,
+19810=>28976,
+19811=>28977,
+19812=>28978,
+19813=>28979,
+19814=>28980,
+19815=>28981,
+19816=>28982,
+19817=>28983,
+19818=>28984,
+19819=>28985,
+19820=>28986,
+19821=>28987,
+19822=>28988,
+19823=>28989,
+19824=>28990,
+19825=>28991,
+19826=>28992,
+19827=>28993,
+19828=>28994,
+19829=>28995,
+19830=>28996,
+19831=>28997,
+19832=>28998,
+19833=>28999,
+19834=>29000,
+19835=>29001,
+19836=>29002,
+19837=>29003,
+19838=>29004,
+19839=>29005,
+19840=>29006,
+19841=>29007,
+19842=>29008,
+19843=>29009,
+19844=>29010,
+19845=>29011,
+19846=>29012,
+19847=>29013,
+19848=>29014,
+19849=>29015,
+19850=>29016,
+19851=>29017,
+19852=>29018,
+19853=>29019,
+19854=>29020,
+19855=>29021,
+19856=>29022,
+19857=>29023,
+19858=>29024,
+19859=>29025,
+19860=>29026,
+19861=>29027,
+19862=>29028,
+19863=>29029,
+19864=>29030,
+19865=>29031,
+19866=>29032,
+19867=>29033,
+19868=>29034,
+19869=>29035,
+19870=>29036,
+19871=>29037,
+19872=>29038,
+19873=>29039,
+19874=>29040,
+19875=>29041,
+19876=>29042,
+19877=>29043,
+19878=>29044,
+19879=>29045,
+19880=>29046,
+19881=>29047,
+19882=>29048,
+19883=>29049,
+19884=>29050,
+19885=>29051,
+19887=>29052,
+19888=>29053,
+19889=>29054,
+19890=>29055,
+19891=>29056,
+19892=>29057,
+19893=>29058,
+40960=>29064,
+40961=>29065,
+40962=>29066,
+40963=>29067,
+40964=>29068,
+40965=>29069,
+40966=>29070,
+40967=>29071,
+40968=>29072,
+40969=>29073,
+40970=>29074,
+40971=>29075,
+40972=>29076,
+40973=>29077,
+40974=>29078,
+40975=>29079,
+40976=>29080,
+40977=>29081,
+40978=>29082,
+40979=>29083,
+40980=>29084,
+40981=>29085,
+40982=>29086,
+40983=>29087,
+40984=>29088,
+40985=>29089,
+40986=>29090,
+40987=>29091,
+40988=>29092,
+40989=>29093,
+40990=>29094,
+40991=>29095,
+40992=>29096,
+40993=>29097,
+40994=>29098,
+40995=>29099,
+40996=>29100,
+40997=>29101,
+40998=>29102,
+40999=>29103,
+41000=>29104,
+41001=>29105,
+41002=>29106,
+41003=>29107,
+41004=>29108,
+41005=>29109,
+41006=>29110,
+41007=>29111,
+41008=>29112,
+41009=>29113,
+41010=>29114,
+41011=>29115,
+41012=>29116,
+41013=>29117,
+41014=>29118,
+41015=>29119,
+41016=>29120,
+41017=>29121,
+41018=>29122,
+41019=>29123,
+41020=>29124,
+41021=>29125,
+41022=>29126,
+41023=>29127,
+41024=>29128,
+41025=>29129,
+41026=>29130,
+41027=>29131,
+41028=>29132,
+41029=>29133,
+41030=>29134,
+41031=>29135,
+41032=>29136,
+41033=>29137,
+41034=>29138,
+41035=>29139,
+41036=>29140,
+41037=>29141,
+41038=>29142,
+41039=>29143,
+41040=>29144,
+41041=>29145,
+41042=>29146,
+41043=>29147,
+41044=>29148,
+41045=>29149,
+41046=>29150,
+41047=>29151,
+41048=>29152,
+41049=>29153,
+41050=>29154,
+41051=>29155,
+41052=>29156,
+41053=>29157,
+41054=>29158,
+41055=>29159,
+41056=>29160,
+41057=>29161,
+41058=>29162,
+41059=>29163,
+41060=>29164,
+41061=>29165,
+41062=>29166,
+41063=>29167,
+41064=>29168,
+41065=>29169,
+41066=>29170,
+41067=>29171,
+41068=>29172,
+41069=>29173,
+41070=>29174,
+41071=>29175,
+41072=>29176,
+41073=>29177,
+41074=>29178,
+41075=>29179,
+41076=>29180,
+41077=>29181,
+41078=>29182,
+41079=>29183,
+41080=>29184,
+41081=>29185,
+41082=>29186,
+41083=>29187,
+41084=>29188,
+41085=>29189,
+41086=>29190,
+41087=>29191,
+41088=>29192,
+41089=>29193,
+41090=>29194,
+41091=>29195,
+41092=>29196,
+41093=>29197,
+41094=>29198,
+41095=>29199,
+41096=>29200,
+41097=>29201,
+41098=>29202,
+41099=>29203,
+41100=>29204,
+41101=>29205,
+41102=>29206,
+41103=>29207,
+41104=>29208,
+41105=>29209,
+41106=>29210,
+41107=>29211,
+41108=>29212,
+41109=>29213,
+41110=>29214,
+41111=>29215,
+41112=>29216,
+41113=>29217,
+41114=>29218,
+41115=>29219,
+41116=>29220,
+41117=>29221,
+41118=>29222,
+41119=>29223,
+41120=>29224,
+41121=>29225,
+41122=>29226,
+41123=>29227,
+41124=>29228,
+41125=>29229,
+41126=>29230,
+41127=>29231,
+41128=>29232,
+41129=>29233,
+41130=>29234,
+41131=>29235,
+41132=>29236,
+41133=>29237,
+41134=>29238,
+41135=>29239,
+41136=>29240,
+41137=>29241,
+41138=>29242,
+41139=>29243,
+41140=>29244,
+41141=>29245,
+41142=>29246,
+41143=>29247,
+41144=>29248,
+41145=>29249,
+41146=>29250,
+41147=>29251,
+41148=>29252,
+41149=>29253,
+41150=>29254,
+41151=>29255,
+41152=>29256,
+41153=>29257,
+41154=>29258,
+41155=>29259,
+41156=>29260,
+41157=>29261,
+41158=>29262,
+41159=>29263,
+41160=>29264,
+41161=>29265,
+41162=>29266,
+41163=>29267,
+41164=>29268,
+41165=>29269,
+41166=>29270,
+41167=>29271,
+41168=>29272,
+41169=>29273,
+41170=>29274,
+41171=>29275,
+41172=>29276,
+41173=>29277,
+41174=>29278,
+41175=>29279,
+41176=>29280,
+41177=>29281,
+41178=>29282,
+41179=>29283,
+41180=>29284,
+41181=>29285,
+41182=>29286,
+41183=>29287,
+41184=>29288,
+41185=>29289,
+41186=>29290,
+41187=>29291,
+41188=>29292,
+41189=>29293,
+41190=>29294,
+41191=>29295,
+41192=>29296,
+41193=>29297,
+41194=>29298,
+41195=>29299,
+41196=>29300,
+41197=>29301,
+41198=>29302,
+41199=>29303,
+41200=>29304,
+41201=>29305,
+41202=>29306,
+41203=>29307,
+41204=>29308,
+41205=>29309,
+41206=>29310,
+41207=>29311,
+41208=>29312,
+41209=>29313,
+41210=>29314,
+41211=>29315,
+41212=>29316,
+41213=>29317,
+41214=>29318,
+41215=>29319,
+41216=>29320,
+41217=>29321,
+41218=>29322,
+41219=>29323,
+41220=>29324,
+41221=>29325,
+41222=>29326,
+41223=>29327,
+41224=>29328,
+41225=>29329,
+41226=>29330,
+41227=>29331,
+41228=>29332,
+41229=>29333,
+41230=>29334,
+41231=>29335,
+41232=>29336,
+41233=>29337,
+41234=>29338,
+41235=>29339,
+41236=>29340,
+41237=>29341,
+41238=>29342,
+41239=>29343,
+41240=>29344,
+41241=>29345,
+41242=>29346,
+41243=>29347,
+41244=>29348,
+41245=>29349,
+41246=>29350,
+41247=>29351,
+41248=>29352,
+41249=>29353,
+41250=>29354,
+41251=>29355,
+41252=>29356,
+41253=>29357,
+41254=>29358,
+41255=>29359,
+41256=>29360,
+41257=>29361,
+41258=>29362,
+41259=>29363,
+41260=>29364,
+41261=>29365,
+41262=>29366,
+41263=>29367,
+41264=>29368,
+41265=>29369,
+41266=>29370,
+41267=>29371,
+41268=>29372,
+41269=>29373,
+41270=>29374,
+41271=>29375,
+41272=>29376,
+41273=>29377,
+41274=>29378,
+41275=>29379,
+41276=>29380,
+41277=>29381,
+41278=>29382,
+41279=>29383,
+41280=>29384,
+41281=>29385,
+41282=>29386,
+41283=>29387,
+41284=>29388,
+41285=>29389,
+41286=>29390,
+41287=>29391,
+41288=>29392,
+41289=>29393,
+41290=>29394,
+41291=>29395,
+41292=>29396,
+41293=>29397,
+41294=>29398,
+41295=>29399,
+41296=>29400,
+41297=>29401,
+41298=>29402,
+41299=>29403,
+41300=>29404,
+41301=>29405,
+41302=>29406,
+41303=>29407,
+41304=>29408,
+41305=>29409,
+41306=>29410,
+41307=>29411,
+41308=>29412,
+41309=>29413,
+41310=>29414,
+41311=>29415,
+41312=>29416,
+41313=>29417,
+41314=>29418,
+41315=>29419,
+41316=>29420,
+41317=>29421,
+41318=>29422,
+41319=>29423,
+41320=>29424,
+41321=>29425,
+41322=>29426,
+41323=>29427,
+41324=>29428,
+41325=>29429,
+41326=>29430,
+41327=>29431,
+41328=>29432,
+41329=>29433,
+41330=>29434,
+41331=>29435,
+41332=>29436,
+41333=>29437,
+41334=>29438,
+41335=>29439,
+41336=>29440,
+41337=>29441,
+41338=>29442,
+41339=>29443,
+41340=>29444,
+41341=>29445,
+41342=>29446,
+41343=>29447,
+41344=>29448,
+41345=>29449,
+41346=>29450,
+41347=>29451,
+41348=>29452,
+41349=>29453,
+41350=>29454,
+41351=>29455,
+41352=>29456,
+41353=>29457,
+41354=>29458,
+41355=>29459,
+41356=>29460,
+41357=>29461,
+41358=>29462,
+41359=>29463,
+41360=>29464,
+41361=>29465,
+41362=>29466,
+41363=>29467,
+41364=>29468,
+41365=>29469,
+41366=>29470,
+41367=>29471,
+41368=>29472,
+41369=>29473,
+41370=>29474,
+41371=>29475,
+41372=>29476,
+41373=>29477,
+41374=>29478,
+41375=>29479,
+41376=>29480,
+41377=>29481,
+41378=>29482,
+41379=>29483,
+41380=>29484,
+41381=>29485,
+41382=>29486,
+41383=>29487,
+41384=>29488,
+41385=>29489,
+41386=>29490,
+41387=>29491,
+41388=>29492,
+41389=>29493,
+41390=>29494,
+41391=>29495,
+41392=>29496,
+41393=>29497,
+41394=>29498,
+41395=>29499,
+41396=>29500,
+41397=>29501,
+41398=>29502,
+41399=>29503,
+41400=>29504,
+41401=>29505,
+41402=>29506,
+41403=>29507,
+41404=>29508,
+41405=>29509,
+41406=>29510,
+41407=>29511,
+41408=>29512,
+41409=>29513,
+41410=>29514,
+41411=>29515,
+41412=>29516,
+41413=>29517,
+41414=>29518,
+41415=>29519,
+41416=>29520,
+41417=>29521,
+41418=>29522,
+41419=>29523,
+41420=>29524,
+41421=>29525,
+41422=>29526,
+41423=>29527,
+41424=>29528,
+41425=>29529,
+41426=>29530,
+41427=>29531,
+41428=>29532,
+41429=>29533,
+41430=>29534,
+41431=>29535,
+41432=>29536,
+41433=>29537,
+41434=>29538,
+41435=>29539,
+41436=>29540,
+41437=>29541,
+41438=>29542,
+41439=>29543,
+41440=>29544,
+41441=>29545,
+41442=>29546,
+41443=>29547,
+41444=>29548,
+41445=>29549,
+41446=>29550,
+41447=>29551,
+41448=>29552,
+41449=>29553,
+41450=>29554,
+41451=>29555,
+41452=>29556,
+41453=>29557,
+41454=>29558,
+41455=>29559,
+41456=>29560,
+41457=>29561,
+41458=>29562,
+41459=>29563,
+41460=>29564,
+41461=>29565,
+41462=>29566,
+41463=>29567,
+41464=>29568,
+41465=>29569,
+41466=>29570,
+41467=>29571,
+41468=>29572,
+41469=>29573,
+41470=>29574,
+41471=>29575,
+41472=>29576,
+41473=>29577,
+41474=>29578,
+41475=>29579,
+41476=>29580,
+41477=>29581,
+41478=>29582,
+41479=>29583,
+41480=>29584,
+41481=>29585,
+41482=>29586,
+41483=>29587,
+41484=>29588,
+41485=>29589,
+41486=>29590,
+41487=>29591,
+41488=>29592,
+41489=>29593,
+41490=>29594,
+41491=>29595,
+41492=>29596,
+41493=>29597,
+41494=>29598,
+41495=>29599,
+41496=>29600,
+41497=>29601,
+41498=>29602,
+41499=>29603,
+41500=>29604,
+41501=>29605,
+41502=>29606,
+41503=>29607,
+41504=>29608,
+41505=>29609,
+41506=>29610,
+41507=>29611,
+41508=>29612,
+41509=>29613,
+41510=>29614,
+41511=>29615,
+41512=>29616,
+41513=>29617,
+41514=>29618,
+41515=>29619,
+41516=>29620,
+41517=>29621,
+41518=>29622,
+41519=>29623,
+41520=>29624,
+41521=>29625,
+41522=>29626,
+41523=>29627,
+41524=>29628,
+41525=>29629,
+41526=>29630,
+41527=>29631,
+41528=>29632,
+41529=>29633,
+41530=>29634,
+41531=>29635,
+41532=>29636,
+41533=>29637,
+41534=>29638,
+41535=>29639,
+41536=>29640,
+41537=>29641,
+41538=>29642,
+41539=>29643,
+41540=>29644,
+41541=>29645,
+41542=>29646,
+41543=>29647,
+41544=>29648,
+41545=>29649,
+41546=>29650,
+41547=>29651,
+41548=>29652,
+41549=>29653,
+41550=>29654,
+41551=>29655,
+41552=>29656,
+41553=>29657,
+41554=>29658,
+41555=>29659,
+41556=>29660,
+41557=>29661,
+41558=>29662,
+41559=>29663,
+41560=>29664,
+41561=>29665,
+41562=>29666,
+41563=>29667,
+41564=>29668,
+41565=>29669,
+41566=>29670,
+41567=>29671,
+41568=>29672,
+41569=>29673,
+41570=>29674,
+41571=>29675,
+41572=>29676,
+41573=>29677,
+41574=>29678,
+41575=>29679,
+41576=>29680,
+41577=>29681,
+41578=>29682,
+41579=>29683,
+41580=>29684,
+41581=>29685,
+41582=>29686,
+41583=>29687,
+41584=>29688,
+41585=>29689,
+41586=>29690,
+41587=>29691,
+41588=>29692,
+41589=>29693,
+41590=>29694,
+41591=>29695,
+41592=>29696,
+41593=>29697,
+41594=>29698,
+41595=>29699,
+41596=>29700,
+41597=>29701,
+41598=>29702,
+41599=>29703,
+41600=>29704,
+41601=>29705,
+41602=>29706,
+41603=>29707,
+41604=>29708,
+41605=>29709,
+41606=>29710,
+41607=>29711,
+41608=>29712,
+41609=>29713,
+41610=>29714,
+41611=>29715,
+41612=>29716,
+41613=>29717,
+41614=>29718,
+41615=>29719,
+41616=>29720,
+41617=>29721,
+41618=>29722,
+41619=>29723,
+41620=>29724,
+41621=>29725,
+41622=>29726,
+41623=>29727,
+41624=>29728,
+41625=>29729,
+41626=>29730,
+41627=>29731,
+41628=>29732,
+41629=>29733,
+41630=>29734,
+41631=>29735,
+41632=>29736,
+41633=>29737,
+41634=>29738,
+41635=>29739,
+41636=>29740,
+41637=>29741,
+41638=>29742,
+41639=>29743,
+41640=>29744,
+41641=>29745,
+41642=>29746,
+41643=>29747,
+41644=>29748,
+41645=>29749,
+41646=>29750,
+41647=>29751,
+41648=>29752,
+41649=>29753,
+41650=>29754,
+41651=>29755,
+41652=>29756,
+41653=>29757,
+41654=>29758,
+41655=>29759,
+41656=>29760,
+41657=>29761,
+41658=>29762,
+41659=>29763,
+41660=>29764,
+41661=>29765,
+41662=>29766,
+41663=>29767,
+41664=>29768,
+41665=>29769,
+41666=>29770,
+41667=>29771,
+41668=>29772,
+41669=>29773,
+41670=>29774,
+41671=>29775,
+41672=>29776,
+41673=>29777,
+41674=>29778,
+41675=>29779,
+41676=>29780,
+41677=>29781,
+41678=>29782,
+41679=>29783,
+41680=>29784,
+41681=>29785,
+41682=>29786,
+41683=>29787,
+41684=>29788,
+41685=>29789,
+41686=>29790,
+41687=>29791,
+41688=>29792,
+41689=>29793,
+41690=>29794,
+41691=>29795,
+41692=>29796,
+41693=>29797,
+41694=>29798,
+41695=>29799,
+41696=>29800,
+41697=>29801,
+41698=>29802,
+41699=>29803,
+41700=>29804,
+41701=>29805,
+41702=>29806,
+41703=>29807,
+41704=>29808,
+41705=>29809,
+41706=>29810,
+41707=>29811,
+41708=>29812,
+41709=>29813,
+41710=>29814,
+41711=>29815,
+41712=>29816,
+41713=>29817,
+41714=>29818,
+41715=>29819,
+41716=>29820,
+41717=>29821,
+41718=>29822,
+41719=>29823,
+41720=>29824,
+41721=>29825,
+41722=>29826,
+41723=>29827,
+41724=>29828,
+41725=>29829,
+41726=>29830,
+41727=>29831,
+41728=>29832,
+41729=>29833,
+41730=>29834,
+41731=>29835,
+41732=>29836,
+41733=>29837,
+41734=>29838,
+41735=>29839,
+41736=>29840,
+41737=>29841,
+41738=>29842,
+41739=>29843,
+41740=>29844,
+41741=>29845,
+41742=>29846,
+41743=>29847,
+41744=>29848,
+41745=>29849,
+41746=>29850,
+41747=>29851,
+41748=>29852,
+41749=>29853,
+41750=>29854,
+41751=>29855,
+41752=>29856,
+41753=>29857,
+41754=>29858,
+41755=>29859,
+41756=>29860,
+41757=>29861,
+41758=>29862,
+41759=>29863,
+41760=>29864,
+41761=>29865,
+41762=>29866,
+41763=>29867,
+41764=>29868,
+41765=>29869,
+41766=>29870,
+41767=>29871,
+41768=>29872,
+41769=>29873,
+41770=>29874,
+41771=>29875,
+41772=>29876,
+41773=>29877,
+41774=>29878,
+41775=>29879,
+41776=>29880,
+41777=>29881,
+41778=>29882,
+41779=>29883,
+41780=>29884,
+41781=>29885,
+41782=>29886,
+41783=>29887,
+41784=>29888,
+41785=>29889,
+41786=>29890,
+41787=>29891,
+41788=>29892,
+41789=>29893,
+41790=>29894,
+41791=>29895,
+41792=>29896,
+41793=>29897,
+41794=>29898,
+41795=>29899,
+41796=>29900,
+41797=>29901,
+41798=>29902,
+41799=>29903,
+41800=>29904,
+41801=>29905,
+41802=>29906,
+41803=>29907,
+41804=>29908,
+41805=>29909,
+41806=>29910,
+41807=>29911,
+41808=>29912,
+41809=>29913,
+41810=>29914,
+41811=>29915,
+41812=>29916,
+41813=>29917,
+41814=>29918,
+41815=>29919,
+41816=>29920,
+41817=>29921,
+41818=>29922,
+41819=>29923,
+41820=>29924,
+41821=>29925,
+41822=>29926,
+41823=>29927,
+41824=>29928,
+41825=>29929,
+41826=>29930,
+41827=>29931,
+41828=>29932,
+41829=>29933,
+41830=>29934,
+41831=>29935,
+41832=>29936,
+41833=>29937,
+41834=>29938,
+41835=>29939,
+41836=>29940,
+41837=>29941,
+41838=>29942,
+41839=>29943,
+41840=>29944,
+41841=>29945,
+41842=>29946,
+41843=>29947,
+41844=>29948,
+41845=>29949,
+41846=>29950,
+41847=>29951,
+41848=>29952,
+41849=>29953,
+41850=>29954,
+41851=>29955,
+41852=>29956,
+41853=>29957,
+41854=>29958,
+41855=>29959,
+41856=>29960,
+41857=>29961,
+41858=>29962,
+41859=>29963,
+41860=>29964,
+41861=>29965,
+41862=>29966,
+41863=>29967,
+41864=>29968,
+41865=>29969,
+41866=>29970,
+41867=>29971,
+41868=>29972,
+41869=>29973,
+41870=>29974,
+41871=>29975,
+41872=>29976,
+41873=>29977,
+41874=>29978,
+41875=>29979,
+41876=>29980,
+41877=>29981,
+41878=>29982,
+41879=>29983,
+41880=>29984,
+41881=>29985,
+41882=>29986,
+41883=>29987,
+41884=>29988,
+41885=>29989,
+41886=>29990,
+41887=>29991,
+41888=>29992,
+41889=>29993,
+41890=>29994,
+41891=>29995,
+41892=>29996,
+41893=>29997,
+41894=>29998,
+41895=>29999,
+41896=>30000,
+41897=>30001,
+41898=>30002,
+41899=>30003,
+41900=>30004,
+41901=>30005,
+41902=>30006,
+41903=>30007,
+41904=>30008,
+41905=>30009,
+41906=>30010,
+41907=>30011,
+41908=>30012,
+41909=>30013,
+41910=>30014,
+41911=>30015,
+41912=>30016,
+41913=>30017,
+41914=>30018,
+41915=>30019,
+41916=>30020,
+41917=>30021,
+41918=>30022,
+41919=>30023,
+41920=>30024,
+41921=>30025,
+41922=>30026,
+41923=>30027,
+41924=>30028,
+41925=>30029,
+41926=>30030,
+41927=>30031,
+41928=>30032,
+41929=>30033,
+41930=>30034,
+41931=>30035,
+41932=>30036,
+41933=>30037,
+41934=>30038,
+41935=>30039,
+41936=>30040,
+41937=>30041,
+41938=>30042,
+41939=>30043,
+41940=>30044,
+41941=>30045,
+41942=>30046,
+41943=>30047,
+41944=>30048,
+41945=>30049,
+41946=>30050,
+41947=>30051,
+41948=>30052,
+41949=>30053,
+41950=>30054,
+41951=>30055,
+41952=>30056,
+41953=>30057,
+41954=>30058,
+41955=>30059,
+41956=>30060,
+41957=>30061,
+41958=>30062,
+41959=>30063,
+41960=>30064,
+41961=>30065,
+41962=>30066,
+41963=>30067,
+41964=>30068,
+41965=>30069,
+41966=>30070,
+41967=>30071,
+41968=>30072,
+41969=>30073,
+41970=>30074,
+41971=>30075,
+41972=>30076,
+41973=>30077,
+41974=>30078,
+41975=>30079,
+41976=>30080,
+41977=>30081,
+41978=>30082,
+41979=>30083,
+41980=>30084,
+41981=>30085,
+41982=>30086,
+41983=>30087,
+41984=>30088,
+41985=>30089,
+41986=>30090,
+41987=>30091,
+41988=>30092,
+41989=>30093,
+41990=>30094,
+41991=>30095,
+41992=>30096,
+41993=>30097,
+41994=>30098,
+41995=>30099,
+41996=>30100,
+41997=>30101,
+41998=>30102,
+41999=>30103,
+42000=>30104,
+42001=>30105,
+42002=>30106,
+42003=>30107,
+42004=>30108,
+42005=>30109,
+42006=>30110,
+42007=>30111,
+42008=>30112,
+42009=>30113,
+42010=>30114,
+42011=>30115,
+42012=>30116,
+42013=>30117,
+42014=>30118,
+42015=>30119,
+42016=>30120,
+42017=>30121,
+42018=>30122,
+42019=>30123,
+42020=>30124,
+42021=>30125,
+42022=>30126,
+42023=>30127,
+42024=>30128,
+42025=>30129,
+42026=>30130,
+42027=>30131,
+42028=>30132,
+42029=>30133,
+42030=>30134,
+42031=>30135,
+42032=>30136,
+42033=>30137,
+42034=>30138,
+42035=>30139,
+42036=>30140,
+42037=>30141,
+42038=>30142,
+42039=>30143,
+42040=>30144,
+42041=>30145,
+42042=>30146,
+42043=>30147,
+42044=>30148,
+42045=>30149,
+42046=>30150,
+42047=>30151,
+42048=>30152,
+42049=>30153,
+42050=>30154,
+42051=>30155,
+42052=>30156,
+42053=>30157,
+42054=>30158,
+42055=>30159,
+42056=>30160,
+42057=>30161,
+42058=>30162,
+42059=>30163,
+42060=>30164,
+42061=>30165,
+42062=>30166,
+42063=>30167,
+42064=>30168,
+42065=>30169,
+42066=>30170,
+42067=>30171,
+42068=>30172,
+42069=>30173,
+42070=>30174,
+42071=>30175,
+42072=>30176,
+42073=>30177,
+42074=>30178,
+42075=>30179,
+42076=>30180,
+42077=>30181,
+42078=>30182,
+42079=>30183,
+42080=>30184,
+42081=>30185,
+42082=>30186,
+42083=>30187,
+42084=>30188,
+42085=>30189,
+42086=>30190,
+42087=>30191,
+42088=>30192,
+42089=>30193,
+42090=>30194,
+42091=>30195,
+42092=>30196,
+42093=>30197,
+42094=>30198,
+42095=>30199,
+42096=>30200,
+42097=>30201,
+42098=>30202,
+42099=>30203,
+42100=>30204,
+42101=>30205,
+42102=>30206,
+42103=>30207,
+42104=>30208,
+42105=>30209,
+42106=>30210,
+42107=>30211,
+42108=>30212,
+42109=>30213,
+42110=>30214,
+42111=>30215,
+42112=>30216,
+42113=>30217,
+42114=>30218,
+42115=>30219,
+42116=>30220,
+42117=>30221,
+42118=>30222,
+42119=>30223,
+42120=>30224,
+42121=>30225,
+42122=>30226,
+42123=>30227,
+42124=>30228,
+42128=>30229,
+42129=>30230,
+42130=>30231,
+42131=>30232,
+42132=>30233,
+42133=>30234,
+42134=>30235,
+42135=>30236,
+42136=>30237,
+42137=>30238,
+42138=>30239,
+42139=>30240,
+42140=>30241,
+42141=>30242,
+42142=>30243,
+42143=>30244,
+42144=>30245,
+42145=>30246,
+42146=>30247,
+42147=>30248,
+42148=>30249,
+42149=>30250,
+42150=>30251,
+42151=>30252,
+42152=>30253,
+42153=>30254,
+42154=>30255,
+42155=>30256,
+42156=>30257,
+42157=>30258,
+42158=>30259,
+42159=>30260,
+42160=>30261,
+42161=>30262,
+42162=>30263,
+42163=>30264,
+42164=>30265,
+42165=>30266,
+42166=>30267,
+42167=>30268,
+42168=>30269,
+42169=>30270,
+42170=>30271,
+42171=>30272,
+42172=>30273,
+42173=>30274,
+42174=>30275,
+42175=>30276,
+42176=>30277,
+42177=>30278,
+42178=>30279,
+42179=>30280,
+42180=>30281,
+42181=>30282,
+42182=>30283,
+);
+?>
diff --git a/admin/exportclases/fonts/uni2cid_aj16.php b/admin/exportclases/fonts/uni2cid_aj16.php
new file mode 100644
index 0000000..9b20c34
--- /dev/null
+++ b/admin/exportclases/fonts/uni2cid_aj16.php
@@ -0,0 +1,15705 @@
+<?php
+// unicode to cid conversion table is from
+// ftp://ftp.oreilly.com/pub/examples/nutshell/cjkv/adobe/
+// cid2code.txt in aj16.tar.Z
+$cidinfo['uni2cid'] = array(
+160=>1,
+32=>1,
+33=>2,
+34=>3,
+35=>4,
+36=>5,
+37=>6,
+38=>7,
+39=>8,
+40=>9,
+41=>10,
+42=>11,
+43=>12,
+44=>13,
+8209=>14,
+45=>14,
+46=>15,
+47=>16,
+48=>17,
+49=>18,
+50=>19,
+51=>20,
+52=>21,
+53=>22,
+54=>23,
+55=>24,
+56=>25,
+57=>26,
+58=>27,
+59=>28,
+60=>29,
+61=>30,
+62=>31,
+63=>32,
+64=>33,
+65=>34,
+66=>35,
+67=>36,
+68=>37,
+69=>38,
+70=>39,
+71=>40,
+72=>41,
+73=>42,
+74=>43,
+75=>44,
+76=>45,
+77=>46,
+78=>47,
+79=>48,
+80=>49,
+81=>50,
+82=>51,
+83=>52,
+84=>53,
+85=>54,
+86=>55,
+87=>56,
+88=>57,
+89=>58,
+90=>59,
+91=>60,
+165=>61,
+93=>62,
+94=>63,
+818=>64,
+95=>64,
+768=>65,
+96=>65,
+97=>66,
+98=>67,
+99=>68,
+100=>69,
+101=>70,
+102=>71,
+103=>72,
+104=>73,
+105=>74,
+106=>75,
+107=>76,
+108=>77,
+109=>78,
+110=>79,
+111=>80,
+112=>81,
+113=>82,
+114=>83,
+115=>84,
+116=>85,
+117=>86,
+118=>87,
+119=>88,
+120=>89,
+121=>90,
+122=>91,
+123=>92,
+166=>93,
+125=>94,
+732=>95,
+771=>95,
+700=>96,
+8217=>96,
+92=>97,
+699=>98,
+8216=>98,
+124=>99,
+126=>100,
+8764=>100,
+161=>101,
+162=>102,
+163=>103,
+8260=>104,
+402=>105,
+164=>107,
+8220=>108,
+171=>109,
+8249=>110,
+8250=>111,
+64257=>112,
+64258=>113,
+8210=>114,
+8211=>114,
+183=>117,
+8729=>117,
+8226=>119,
+8218=>120,
+8222=>121,
+8221=>122,
+187=>123,
+191=>126,
+769=>127,
+710=>128,
+770=>128,
+175=>129,
+772=>129,
+774=>130,
+775=>131,
+776=>132,
+730=>133,
+778=>133,
+184=>134,
+807=>134,
+779=>135,
+808=>136,
+780=>137,
+822=>138,
+8212=>138,
+198=>139,
+170=>140,
+321=>141,
+216=>142,
+338=>143,
+186=>144,
+230=>145,
+305=>146,
+322=>147,
+248=>148,
+339=>149,
+223=>150,
+173=>151,
+169=>152,
+172=>153,
+174=>154,
+178=>157,
+179=>158,
+181=>159,
+185=>160,
+188=>161,
+189=>162,
+190=>163,
+192=>164,
+193=>165,
+194=>166,
+195=>167,
+196=>168,
+197=>169,
+199=>170,
+200=>171,
+201=>172,
+202=>173,
+203=>174,
+204=>175,
+205=>176,
+206=>177,
+207=>178,
+208=>179,
+209=>180,
+210=>181,
+211=>182,
+212=>183,
+213=>184,
+214=>185,
+217=>187,
+218=>188,
+219=>189,
+220=>190,
+221=>191,
+222=>192,
+224=>193,
+225=>194,
+226=>195,
+227=>196,
+228=>197,
+229=>198,
+231=>199,
+232=>200,
+233=>201,
+234=>202,
+235=>203,
+236=>204,
+237=>205,
+238=>206,
+239=>207,
+240=>208,
+241=>209,
+242=>210,
+243=>211,
+244=>212,
+245=>213,
+246=>214,
+249=>216,
+250=>217,
+251=>218,
+252=>219,
+253=>220,
+254=>221,
+255=>222,
+352=>223,
+376=>224,
+381=>225,
+773=>226,
+8254=>226,
+353=>227,
+8482=>228,
+382=>229,
+8194=>231,
+65512=>323,
+65377=>327,
+65378=>328,
+65379=>329,
+65380=>330,
+65381=>331,
+65382=>332,
+65383=>333,
+65384=>334,
+65385=>335,
+65386=>336,
+65387=>337,
+65388=>338,
+65389=>339,
+65390=>340,
+65391=>341,
+65392=>342,
+65393=>343,
+65394=>344,
+65395=>345,
+65396=>346,
+65397=>347,
+65398=>348,
+65399=>349,
+65400=>350,
+65401=>351,
+65402=>352,
+65403=>353,
+65404=>354,
+65405=>355,
+65406=>356,
+65407=>357,
+65408=>358,
+65409=>359,
+65410=>360,
+65411=>361,
+65412=>362,
+65413=>363,
+65414=>364,
+65415=>365,
+65416=>366,
+65417=>367,
+65418=>368,
+65419=>369,
+65420=>370,
+65421=>371,
+65422=>372,
+65423=>373,
+65424=>374,
+65425=>375,
+65426=>376,
+65427=>377,
+65428=>378,
+65429=>379,
+65430=>380,
+65431=>381,
+65432=>382,
+65433=>383,
+65434=>384,
+65435=>385,
+65436=>386,
+65437=>387,
+65438=>388,
+65439=>389,
+8195=>633,
+12288=>633,
+12289=>634,
+12290=>635,
+65292=>636,
+65294=>637,
+12539=>638,
+65306=>639,
+65307=>640,
+65311=>641,
+65281=>642,
+12443=>643,
+12444=>644,
+180=>645,
+65344=>646,
+168=>647,
+65342=>648,
+65507=>649,
+65343=>650,
+12541=>651,
+12542=>652,
+12445=>653,
+12446=>654,
+12291=>655,
+20189=>656,
+12293=>657,
+12294=>658,
+12295=>659,
+12540=>660,
+8213=>661,
+8208=>662,
+65295=>663,
+65340=>664,
+12316=>665,
+65374=>665,
+8214=>666,
+65372=>667,
+8230=>668,
+8229=>669,
+65288=>674,
+65289=>675,
+12308=>676,
+12309=>677,
+65339=>678,
+65341=>679,
+65371=>680,
+65373=>681,
+12296=>682,
+12297=>683,
+12298=>684,
+12299=>685,
+12300=>686,
+12301=>687,
+12302=>688,
+12303=>689,
+12304=>690,
+12305=>691,
+65291=>692,
+8722=>693,
+65293=>693,
+177=>694,
+215=>695,
+247=>696,
+65309=>697,
+8800=>698,
+65308=>699,
+65310=>700,
+8806=>701,
+8807=>702,
+8734=>703,
+8756=>704,
+9794=>705,
+9792=>706,
+176=>707,
+8242=>708,
+8243=>709,
+8451=>710,
+65509=>711,
+65284=>712,
+65504=>713,
+65505=>714,
+65285=>715,
+65283=>716,
+65286=>717,
+65290=>718,
+65312=>719,
+167=>720,
+9734=>721,
+9733=>722,
+9675=>723,
+9679=>724,
+9678=>725,
+9671=>726,
+9670=>727,
+9633=>728,
+9632=>729,
+9651=>730,
+9650=>731,
+9661=>732,
+9660=>733,
+8251=>734,
+12306=>735,
+8594=>736,
+8592=>737,
+8593=>738,
+8595=>739,
+12307=>740,
+8712=>741,
+8715=>742,
+8838=>743,
+8839=>744,
+8834=>745,
+8835=>746,
+8746=>747,
+8745=>748,
+8743=>749,
+8744=>750,
+65506=>751,
+8658=>752,
+8660=>753,
+8704=>754,
+8707=>755,
+8736=>756,
+8869=>757,
+8978=>758,
+8706=>759,
+8711=>760,
+8801=>761,
+8786=>762,
+8810=>763,
+8811=>764,
+8730=>765,
+8765=>766,
+8733=>767,
+8757=>768,
+8747=>769,
+8748=>770,
+8491=>771,
+8240=>772,
+9839=>773,
+9837=>774,
+9834=>775,
+8224=>776,
+8225=>777,
+182=>778,
+9711=>779,
+65296=>780,
+65297=>781,
+65298=>782,
+65299=>783,
+65300=>784,
+65301=>785,
+65302=>786,
+65303=>787,
+65304=>788,
+65305=>789,
+65313=>790,
+65314=>791,
+65315=>792,
+65316=>793,
+65317=>794,
+65318=>795,
+65319=>796,
+65320=>797,
+65321=>798,
+65322=>799,
+65323=>800,
+65324=>801,
+65325=>802,
+65326=>803,
+65327=>804,
+65328=>805,
+65329=>806,
+65330=>807,
+65331=>808,
+65332=>809,
+65333=>810,
+65334=>811,
+65335=>812,
+65336=>813,
+65337=>814,
+65338=>815,
+65345=>816,
+65346=>817,
+65347=>818,
+65348=>819,
+65349=>820,
+65350=>821,
+65351=>822,
+65352=>823,
+65353=>824,
+65354=>825,
+65355=>826,
+65356=>827,
+65357=>828,
+65358=>829,
+65359=>830,
+65360=>831,
+65361=>832,
+65362=>833,
+65363=>834,
+65364=>835,
+65365=>836,
+65366=>837,
+65367=>838,
+65368=>839,
+65369=>840,
+65370=>841,
+12353=>842,
+12354=>843,
+12355=>844,
+12356=>845,
+12357=>846,
+12358=>847,
+12359=>848,
+12360=>849,
+12361=>850,
+12362=>851,
+12363=>852,
+12364=>853,
+12365=>854,
+12366=>855,
+12367=>856,
+12368=>857,
+12369=>858,
+12370=>859,
+12371=>860,
+12372=>861,
+12373=>862,
+12374=>863,
+12375=>864,
+12376=>865,
+12377=>866,
+12378=>867,
+12379=>868,
+12380=>869,
+12381=>870,
+12382=>871,
+12383=>872,
+12384=>873,
+12385=>874,
+12386=>875,
+12387=>876,
+12388=>877,
+12389=>878,
+12390=>879,
+12391=>880,
+12392=>881,
+12393=>882,
+12394=>883,
+12395=>884,
+12396=>885,
+12397=>886,
+12398=>887,
+12399=>888,
+12400=>889,
+12401=>890,
+12402=>891,
+12403=>892,
+12404=>893,
+12405=>894,
+12406=>895,
+12407=>896,
+12408=>897,
+12409=>898,
+12410=>899,
+12411=>900,
+12412=>901,
+12413=>902,
+12414=>903,
+12415=>904,
+12416=>905,
+12417=>906,
+12418=>907,
+12419=>908,
+12420=>909,
+12421=>910,
+12422=>911,
+12423=>912,
+12424=>913,
+12425=>914,
+12426=>915,
+12427=>916,
+12428=>917,
+12429=>918,
+12430=>919,
+12431=>920,
+12432=>921,
+12433=>922,
+12434=>923,
+12435=>924,
+12449=>925,
+12450=>926,
+12451=>927,
+12452=>928,
+12453=>929,
+12454=>930,
+12455=>931,
+12456=>932,
+12457=>933,
+12458=>934,
+12459=>935,
+12460=>936,
+12461=>937,
+12462=>938,
+12463=>939,
+12464=>940,
+12465=>941,
+12466=>942,
+12467=>943,
+12468=>944,
+12469=>945,
+12470=>946,
+12471=>947,
+12472=>948,
+12473=>949,
+12474=>950,
+12475=>951,
+12476=>952,
+12477=>953,
+12478=>954,
+12479=>955,
+12480=>956,
+12481=>957,
+12482=>958,
+12483=>959,
+12484=>960,
+12485=>961,
+12486=>962,
+12487=>963,
+12488=>964,
+12489=>965,
+12490=>966,
+12491=>967,
+12492=>968,
+12493=>969,
+12494=>970,
+12495=>971,
+12496=>972,
+12497=>973,
+12498=>974,
+12499=>975,
+12500=>976,
+12501=>977,
+12502=>978,
+12503=>979,
+12504=>980,
+12505=>981,
+12506=>982,
+12507=>983,
+12508=>984,
+12509=>985,
+12510=>986,
+12511=>987,
+12512=>988,
+12513=>989,
+12514=>990,
+12515=>991,
+12516=>992,
+12517=>993,
+12518=>994,
+12519=>995,
+12520=>996,
+12521=>997,
+12522=>998,
+12523=>999,
+12524=>1000,
+12525=>1001,
+12526=>1002,
+12527=>1003,
+12528=>1004,
+12529=>1005,
+12530=>1006,
+12531=>1007,
+12532=>1008,
+12533=>1009,
+12534=>1010,
+913=>1011,
+914=>1012,
+915=>1013,
+916=>1014,
+917=>1015,
+918=>1016,
+919=>1017,
+920=>1018,
+921=>1019,
+922=>1020,
+923=>1021,
+924=>1022,
+925=>1023,
+926=>1024,
+927=>1025,
+928=>1026,
+929=>1027,
+931=>1028,
+932=>1029,
+933=>1030,
+934=>1031,
+935=>1032,
+936=>1033,
+937=>1034,
+945=>1035,
+946=>1036,
+947=>1037,
+948=>1038,
+949=>1039,
+950=>1040,
+951=>1041,
+952=>1042,
+953=>1043,
+954=>1044,
+955=>1045,
+956=>1046,
+957=>1047,
+958=>1048,
+959=>1049,
+960=>1050,
+961=>1051,
+963=>1052,
+964=>1053,
+965=>1054,
+966=>1055,
+967=>1056,
+968=>1057,
+969=>1058,
+1040=>1059,
+1041=>1060,
+1042=>1061,
+1043=>1062,
+1044=>1063,
+1045=>1064,
+1025=>1065,
+1046=>1066,
+1047=>1067,
+1048=>1068,
+1049=>1069,
+1050=>1070,
+1051=>1071,
+1052=>1072,
+1053=>1073,
+1054=>1074,
+1055=>1075,
+1056=>1076,
+1057=>1077,
+1058=>1078,
+1059=>1079,
+1060=>1080,
+1061=>1081,
+1062=>1082,
+1063=>1083,
+1064=>1084,
+1065=>1085,
+1066=>1086,
+1067=>1087,
+1068=>1088,
+1069=>1089,
+1070=>1090,
+1071=>1091,
+1072=>1092,
+1073=>1093,
+1074=>1094,
+1075=>1095,
+1076=>1096,
+1077=>1097,
+1105=>1098,
+1078=>1099,
+1079=>1100,
+1080=>1101,
+1081=>1102,
+1082=>1103,
+1083=>1104,
+1084=>1105,
+1085=>1106,
+1086=>1107,
+1087=>1108,
+1088=>1109,
+1089=>1110,
+1090=>1111,
+1091=>1112,
+1092=>1113,
+1093=>1114,
+1094=>1115,
+1095=>1116,
+1096=>1117,
+1097=>1118,
+1098=>1119,
+1099=>1120,
+1100=>1121,
+1101=>1122,
+1102=>1123,
+1103=>1124,
+20124=>1125,
+21782=>1126,
+23043=>1127,
+38463=>1128,
+21696=>1129,
+24859=>1130,
+25384=>1131,
+23030=>1132,
+36898=>1133,
+33909=>1134,
+33564=>1135,
+31312=>1136,
+24746=>1137,
+25569=>1138,
+28197=>1139,
+26093=>1140,
+33894=>1141,
+33446=>1142,
+39925=>1143,
+26771=>1144,
+22311=>1145,
+26017=>1146,
+25201=>1147,
+23451=>1148,
+22992=>1149,
+34427=>1150,
+39156=>1151,
+32098=>1152,
+32190=>1153,
+39822=>1154,
+25110=>1155,
+31903=>1156,
+34999=>1157,
+23433=>1158,
+24245=>1159,
+25353=>1160,
+26263=>1161,
+26696=>1162,
+38343=>1163,
+38797=>1164,
+26447=>1165,
+20197=>1166,
+20234=>1167,
+20301=>1168,
+20381=>1169,
+20553=>1170,
+22258=>1171,
+22839=>1172,
+22996=>1173,
+23041=>1174,
+23561=>1175,
+24799=>1176,
+24847=>1177,
+24944=>1178,
+26131=>1179,
+26885=>1180,
+28858=>1181,
+30031=>1182,
+30064=>1183,
+31227=>1184,
+32173=>1185,
+32239=>1186,
+32963=>1187,
+33806=>1188,
+12176=>1189,
+34915=>1189,
+35586=>1190,
+36949=>1191,
+36986=>1192,
+21307=>1193,
+20117=>1194,
+20133=>1195,
+22495=>1196,
+32946=>1197,
+37057=>1198,
+30959=>1199,
+12032=>1200,
+19968=>1200,
+22769=>1201,
+28322=>1202,
+36920=>1203,
+31282=>1204,
+33576=>1205,
+33419=>1206,
+39983=>1207,
+20801=>1208,
+21360=>1209,
+21693=>1210,
+21729=>1211,
+22240=>1212,
+23035=>1213,
+24341=>1214,
+39154=>1215,
+28139=>1216,
+32996=>1217,
+34093=>1218,
+38498=>1219,
+38512=>1220,
+38560=>1221,
+38907=>1222,
+21515=>1223,
+21491=>1224,
+23431=>1225,
+28879=>1226,
+12155=>1227,
+32701=>1227,
+36802=>1228,
+12204=>1229,
+38632=>1229,
+21359=>1230,
+40284=>1231,
+31418=>1232,
+19985=>1233,
+30867=>1234,
+12165=>1235,
+33276=>1235,
+28198=>1236,
+22040=>1237,
+21764=>1238,
+27421=>1239,
+34074=>1240,
+39995=>1241,
+23013=>1242,
+21417=>1243,
+28006=>1244,
+12128=>1245,
+29916=>1245,
+38287=>1246,
+22082=>1247,
+20113=>1248,
+36939=>1249,
+38642=>1250,
+33615=>1251,
+39180=>1252,
+21473=>1253,
+21942=>1254,
+23344=>1255,
+24433=>1256,
+26144=>1257,
+26355=>1258,
+26628=>1259,
+27704=>1260,
+27891=>1261,
+27945=>1262,
+29787=>1263,
+30408=>1264,
+31310=>1265,
+38964=>1266,
+33521=>1267,
+34907=>1268,
+35424=>1269,
+37613=>1270,
+28082=>1271,
+30123=>1272,
+30410=>1273,
+39365=>1274,
+24742=>1275,
+35585=>1276,
+36234=>1277,
+38322=>1278,
+27022=>1279,
+21421=>1280,
+20870=>1281,
+22290=>1282,
+22576=>1283,
+22852=>1284,
+23476=>1285,
+24310=>1286,
+24616=>1287,
+25513=>1288,
+25588=>1289,
+27839=>1290,
+28436=>1291,
+28814=>1292,
+28948=>1293,
+29017=>1294,
+29141=>1295,
+29503=>1296,
+32257=>1297,
+33398=>1298,
+33489=>1299,
+34199=>1300,
+36960=>1301,
+37467=>1302,
+40219=>1303,
+22633=>1304,
+26044=>1305,
+27738=>1306,
+29989=>1307,
+20985=>1308,
+22830=>1309,
+22885=>1310,
+24448=>1311,
+24540=>1312,
+25276=>1313,
+26106=>1314,
+27178=>1315,
+27431=>1316,
+27572=>1317,
+29579=>1318,
+32705=>1319,
+35158=>1320,
+40236=>1321,
+40206=>1322,
+12009=>1323,
+40644=>1323,
+23713=>1324,
+27798=>1325,
+33659=>1326,
+20740=>1327,
+23627=>1328,
+25014=>1329,
+33222=>1330,
+26742=>1331,
+29281=>1332,
+12036=>1333,
+20057=>1333,
+20474=>1334,
+21368=>1335,
+24681=>1336,
+28201=>1337,
+31311=>1338,
+12211=>1339,
+38899=>1339,
+19979=>1340,
+21270=>1341,
+20206=>1342,
+20309=>1343,
+20285=>1344,
+20385=>1345,
+20339=>1346,
+21152=>1347,
+21487=>1348,
+22025=>1349,
+22799=>1350,
+23233=>1351,
+23478=>1352,
+23521=>1353,
+31185=>1354,
+26247=>1355,
+26524=>1356,
+26550=>1357,
+27468=>1358,
+27827=>1359,
+12117=>1360,
+28779=>1360,
+29634=>1361,
+31117=>1362,
+12146=>1363,
+31166=>1363,
+31292=>1364,
+31623=>1365,
+33457=>1366,
+33499=>1367,
+33540=>1368,
+33655=>1369,
+33775=>1370,
+33747=>1371,
+34662=>1372,
+35506=>1373,
+22057=>1374,
+36008=>1375,
+36838=>1376,
+36942=>1377,
+38686=>1378,
+34442=>1379,
+20420=>1380,
+23784=>1381,
+25105=>1382,
+12123=>1383,
+29273=>1383,
+30011=>1384,
+33253=>1385,
+33469=>1386,
+34558=>1387,
+36032=>1388,
+38597=>1389,
+39187=>1390,
+39381=>1391,
+20171=>1392,
+20250=>1393,
+35299=>1394,
+22238=>1395,
+22602=>1396,
+22730=>1397,
+24315=>1398,
+24555=>1399,
+24618=>1400,
+24724=>1401,
+24674=>1402,
+25040=>1403,
+25106=>1404,
+25296=>1405,
+25913=>1406,
+39745=>1407,
+26214=>1408,
+26800=>1409,
+28023=>1410,
+28784=>1411,
+30028=>1412,
+30342=>1413,
+32117=>1414,
+33445=>1415,
+34809=>1416,
+38283=>1417,
+38542=>1418,
+12185=>1419,
+35997=>1419,
+20977=>1420,
+21182=>1421,
+22806=>1422,
+21683=>1423,
+23475=>1424,
+23830=>1425,
+24936=>1426,
+27010=>1427,
+28079=>1428,
+30861=>1429,
+33995=>1430,
+34903=>1431,
+35442=>1432,
+37799=>1433,
+39608=>1434,
+28012=>1435,
+39336=>1436,
+34521=>1437,
+22435=>1438,
+26623=>1439,
+34510=>1440,
+37390=>1441,
+21123=>1442,
+22151=>1443,
+21508=>1444,
+24275=>1445,
+25313=>1446,
+25785=>1447,
+26684=>1448,
+26680=>1449,
+27579=>1450,
+29554=>1451,
+30906=>1452,
+31339=>1453,
+35226=>1454,
+12179=>1455,
+35282=>1455,
+36203=>1456,
+36611=>1457,
+37101=>1458,
+38307=>1459,
+38548=>1460,
+12208=>1461,
+38761=>1461,
+23398=>1462,
+23731=>1463,
+27005=>1464,
+38989=>1465,
+38990=>1466,
+25499=>1467,
+31520=>1468,
+27179=>1469,
+27263=>1470,
+26806=>1471,
+39949=>1472,
+28511=>1473,
+21106=>1474,
+21917=>1475,
+24688=>1476,
+25324=>1477,
+27963=>1478,
+28167=>1479,
+28369=>1480,
+33883=>1481,
+35088=>1482,
+36676=>1483,
+19988=>1484,
+39993=>1485,
+21494=>1486,
+26907=>1487,
+27194=>1488,
+38788=>1489,
+26666=>1490,
+20828=>1491,
+31427=>1492,
+33970=>1493,
+37340=>1494,
+37772=>1495,
+22107=>1496,
+40232=>1497,
+26658=>1498,
+33541=>1499,
+33841=>1500,
+31909=>1501,
+21000=>1502,
+33477=>1503,
+12129=>1504,
+29926=>1504,
+20094=>1505,
+20355=>1506,
+20896=>1507,
+23506=>1508,
+21002=>1509,
+21208=>1510,
+21223=>1511,
+24059=>1512,
+21914=>1513,
+22570=>1514,
+23014=>1515,
+23436=>1516,
+23448=>1517,
+23515=>1518,
+12082=>1519,
+24178=>1519,
+24185=>1520,
+24739=>1521,
+24863=>1522,
+24931=>1523,
+25022=>1524,
+25563=>1525,
+25954=>1526,
+26577=>1527,
+26707=>1528,
+26874=>1529,
+27454=>1530,
+27475=>1531,
+27735=>1532,
+28450=>1533,
+28567=>1534,
+28485=>1535,
+29872=>1536,
+12130=>1537,
+29976=>1537,
+30435=>1538,
+30475=>1539,
+31487=>1540,
+31649=>1541,
+31777=>1542,
+32233=>1543,
+12152=>1544,
+32566=>1544,
+32752=>1545,
+32925=>1546,
+33382=>1547,
+33694=>1548,
+35251=>1549,
+35532=>1550,
+36011=>1551,
+36996=>1552,
+37969=>1553,
+38291=>1554,
+38289=>1555,
+38306=>1556,
+38501=>1557,
+38867=>1558,
+39208=>1559,
+33304=>1560,
+20024=>1561,
+21547=>1562,
+23736=>1563,
+24012=>1564,
+29609=>1565,
+30284=>1566,
+30524=>1567,
+23721=>1568,
+32747=>1569,
+36107=>1570,
+38593=>1571,
+38929=>1572,
+38996=>1573,
+39000=>1574,
+20225=>1575,
+20238=>1576,
+21361=>1577,
+21916=>1578,
+22120=>1579,
+22522=>1580,
+22855=>1581,
+23305=>1582,
+23492=>1583,
+23696=>1584,
+24076=>1585,
+24190=>1586,
+24524=>1587,
+25582=>1588,
+26426=>1589,
+26071=>1590,
+26082=>1591,
+26399=>1592,
+26827=>1593,
+26820=>1594,
+27231=>1595,
+24112=>1596,
+27589=>1597,
+27671=>1598,
+27773=>1599,
+30079=>1600,
+31048=>1601,
+23395=>1602,
+31232=>1603,
+32000=>1604,
+24509=>1605,
+35215=>1606,
+35352=>1607,
+36020=>1608,
+36215=>1609,
+36556=>1610,
+36637=>1611,
+39138=>1612,
+39438=>1613,
+12004=>1614,
+12225=>1614,
+39740=>1614,
+12018=>1615,
+20096=>1615,
+20605=>1616,
+20736=>1617,
+22931=>1618,
+23452=>1619,
+25135=>1620,
+25216=>1621,
+25836=>1622,
+27450=>1623,
+29344=>1624,
+30097=>1625,
+31047=>1626,
+32681=>1627,
+34811=>1628,
+35516=>1629,
+35696=>1630,
+25516=>1631,
+33738=>1632,
+38816=>1633,
+21513=>1634,
+21507=>1635,
+21931=>1636,
+26708=>1637,
+27224=>1638,
+35440=>1639,
+30759=>1640,
+26485=>1641,
+12233=>1642,
+40653=>1642,
+21364=>1643,
+23458=>1644,
+33050=>1645,
+34384=>1646,
+36870=>1647,
+19992=>1648,
+20037=>1649,
+20167=>1650,
+20241=>1651,
+21450=>1652,
+21560=>1653,
+23470=>1654,
+12088=>1655,
+24339=>1655,
+24613=>1656,
+25937=>1657,
+26429=>1658,
+27714=>1659,
+27762=>1660,
+27875=>1661,
+28792=>1662,
+29699=>1663,
+31350=>1664,
+31406=>1665,
+31496=>1666,
+32026=>1667,
+31998=>1668,
+32102=>1669,
+26087=>1670,
+12124=>1671,
+29275=>1671,
+21435=>1672,
+23621=>1673,
+24040=>1674,
+25298=>1675,
+25312=>1676,
+25369=>1677,
+28192=>1678,
+34394=>1679,
+35377=>1680,
+36317=>1681,
+37624=>1682,
+28417=>1683,
+31142=>1684,
+12226=>1685,
+39770=>1685,
+20136=>1686,
+20139=>1687,
+20140=>1688,
+20379=>1689,
+20384=>1690,
+20689=>1691,
+20807=>1692,
+31478=>1693,
+20849=>1694,
+20982=>1695,
+21332=>1696,
+21281=>1697,
+21375=>1698,
+21483=>1699,
+21932=>1700,
+22659=>1701,
+23777=>1702,
+24375=>1703,
+24394=>1704,
+24623=>1705,
+24656=>1706,
+24685=>1707,
+25375=>1708,
+25945=>1709,
+27211=>1710,
+27841=>1711,
+29378=>1712,
+29421=>1713,
+30703=>1714,
+33016=>1715,
+33029=>1716,
+33288=>1717,
+34126=>1718,
+37111=>1719,
+37857=>1720,
+38911=>1721,
+39255=>1722,
+39514=>1723,
+20208=>1724,
+20957=>1725,
+23597=>1726,
+26241=>1727,
+26989=>1728,
+23616=>1729,
+26354=>1730,
+26997=>1731,
+12127=>1732,
+29577=>1732,
+26704=>1733,
+31873=>1734,
+20677=>1735,
+21220=>1736,
+22343=>1737,
+12081=>1738,
+24062=>1738,
+37670=>1739,
+12100=>1740,
+26020=>1740,
+27427=>1741,
+27453=>1742,
+29748=>1743,
+31105=>1744,
+31165=>1745,
+31563=>1746,
+32202=>1747,
+33465=>1748,
+33740=>1749,
+34943=>1750,
+35167=>1751,
+35641=>1752,
+36817=>1753,
+12198=>1754,
+37329=>1754,
+21535=>1755,
+37504=>1756,
+20061=>1757,
+20534=>1758,
+21477=>1759,
+21306=>1760,
+29399=>1761,
+29590=>1762,
+30697=>1763,
+33510=>1764,
+36527=>1765,
+39366=>1766,
+39368=>1767,
+39378=>1768,
+20855=>1769,
+24858=>1770,
+34398=>1771,
+21936=>1772,
+31354=>1773,
+20598=>1774,
+23507=>1775,
+36935=>1776,
+38533=>1777,
+20018=>1778,
+27355=>1779,
+37351=>1780,
+23633=>1781,
+23624=>1782,
+25496=>1783,
+31391=>1784,
+27795=>1785,
+38772=>1786,
+36705=>1787,
+31402=>1788,
+29066=>1789,
+38536=>1790,
+31874=>1791,
+26647=>1792,
+32368=>1793,
+26705=>1794,
+37740=>1795,
+21234=>1796,
+21531=>1797,
+34219=>1798,
+35347=>1799,
+32676=>1800,
+36557=>1801,
+37089=>1802,
+21350=>1803,
+34952=>1804,
+31041=>1805,
+20418=>1806,
+20670=>1807,
+21009=>1808,
+20804=>1809,
+21843=>1810,
+22317=>1811,
+29674=>1812,
+22411=>1813,
+22865=>1814,
+24418=>1815,
+24452=>1816,
+24693=>1817,
+24950=>1818,
+24935=>1819,
+25001=>1820,
+25522=>1821,
+25658=>1822,
+25964=>1823,
+26223=>1824,
+26690=>1825,
+28179=>1826,
+30054=>1827,
+31293=>1828,
+31995=>1829,
+32076=>1830,
+32153=>1831,
+32331=>1832,
+32619=>1833,
+33550=>1834,
+33610=>1835,
+34509=>1836,
+35336=>1837,
+35427=>1838,
+35686=>1839,
+36605=>1840,
+38938=>1841,
+40335=>1842,
+33464=>1843,
+36814=>1844,
+39912=>1845,
+21127=>1846,
+25119=>1847,
+25731=>1848,
+28608=>1849,
+38553=>1850,
+26689=>1851,
+20625=>1852,
+12107=>1853,
+27424=>1853,
+27770=>1854,
+28500=>1855,
+12147=>1856,
+31348=>1856,
+32080=>1857,
+12174=>1858,
+34880=>1858,
+35363=>1859,
+12105=>1860,
+26376=>1860,
+20214=>1861,
+20537=>1862,
+20518=>1863,
+20581=>1864,
+20860=>1865,
+21048=>1866,
+21091=>1867,
+21927=>1868,
+22287=>1869,
+22533=>1870,
+23244=>1871,
+24314=>1872,
+25010=>1873,
+25080=>1874,
+25331=>1875,
+25458=>1876,
+26908=>1877,
+27177=>1878,
+29309=>1879,
+12125=>1880,
+29356=>1880,
+29486=>1881,
+30740=>1882,
+30831=>1883,
+32121=>1884,
+30476=>1885,
+32937=>1886,
+12178=>1887,
+35211=>1887,
+35609=>1888,
+36066=>1889,
+36562=>1890,
+36963=>1891,
+37749=>1892,
+38522=>1893,
+38997=>1894,
+39443=>1895,
+40568=>1896,
+20803=>1897,
+21407=>1898,
+21427=>1899,
+24187=>1900,
+24358=>1901,
+28187=>1902,
+28304=>1903,
+12126=>1904,
+29572=>1904,
+29694=>1905,
+32067=>1906,
+33335=>1907,
+12180=>1908,
+35328=>1908,
+35578=>1909,
+38480=>1910,
+20046=>1911,
+20491=>1912,
+21476=>1913,
+21628=>1914,
+22266=>1915,
+22993=>1916,
+23396=>1917,
+12080=>1918,
+24049=>1918,
+24235=>1919,
+24359=>1920,
+12094=>1921,
+25144=>1921,
+25925=>1922,
+26543=>1923,
+28246=>1924,
+29392=>1925,
+31946=>1926,
+34996=>1927,
+32929=>1928,
+32993=>1929,
+33776=>1930,
+11969=>1931,
+34382=>1931,
+35463=>1932,
+36328=>1933,
+37431=>1934,
+38599=>1935,
+39015=>1936,
+12238=>1937,
+40723=>1937,
+20116=>1938,
+20114=>1939,
+20237=>1940,
+21320=>1941,
+21577=>1942,
+21566=>1943,
+23087=>1944,
+24460=>1945,
+24481=>1946,
+24735=>1947,
+26791=>1948,
+27278=>1949,
+29786=>1950,
+30849=>1951,
+35486=>1952,
+35492=>1953,
+35703=>1954,
+37264=>1955,
+20062=>1956,
+39881=>1957,
+20132=>1958,
+20348=>1959,
+20399=>1960,
+20505=>1961,
+20502=>1962,
+20809=>1963,
+20844=>1964,
+21151=>1965,
+21177=>1966,
+21246=>1967,
+21402=>1968,
+12061=>1969,
+21475=>1969,
+21521=>1970,
+21518=>1971,
+21897=>1972,
+22353=>1973,
+22434=>1974,
+22909=>1975,
+23380=>1976,
+23389=>1977,
+23439=>1978,
+12079=>1979,
+24037=>1979,
+24039=>1980,
+24055=>1981,
+24184=>1982,
+24195=>1983,
+24218=>1984,
+24247=>1985,
+24344=>1986,
+24658=>1987,
+24908=>1988,
+25239=>1989,
+25304=>1990,
+25511=>1991,
+25915=>1992,
+26114=>1993,
+26179=>1994,
+26356=>1995,
+26477=>1996,
+26657=>1997,
+26775=>1998,
+27083=>1999,
+27743=>2000,
+27946=>2001,
+28009=>2002,
+28207=>2003,
+28317=>2004,
+30002=>2005,
+30343=>2006,
+30828=>2007,
+31295=>2008,
+31968=>2009,
+32005=>2010,
+32024=>2011,
+32094=>2012,
+32177=>2013,
+32789=>2014,
+32771=>2015,
+32943=>2016,
+32945=>2017,
+33108=>2018,
+33167=>2019,
+33322=>2020,
+33618=>2021,
+12175=>2022,
+34892=>2022,
+34913=>2023,
+35611=>2024,
+36002=>2025,
+36092=>2026,
+37066=>2027,
+37237=>2028,
+37489=>2029,
+30783=>2030,
+37628=>2031,
+38308=>2032,
+38477=>2033,
+38917=>2034,
+12217=>2035,
+39321=>2035,
+12220=>2036,
+39640=>2036,
+40251=>2037,
+21083=>2038,
+21163=>2039,
+21495=>2040,
+21512=>2041,
+22741=>2042,
+25335=>2043,
+28640=>2044,
+35946=>2045,
+36703=>2046,
+40633=>2047,
+20811=>2048,
+21051=>2049,
+21578=>2050,
+22269=>2051,
+31296=>2052,
+37239=>2053,
+40288=>2054,
+12234=>2055,
+40658=>2055,
+29508=>2056,
+28425=>2057,
+33136=>2058,
+29969=>2059,
+24573=>2060,
+24794=>2061,
+12219=>2062,
+39592=>2062,
+29403=>2063,
+36796=>2064,
+27492=>2065,
+38915=>2066,
+20170=>2067,
+22256=>2068,
+22372=>2069,
+22718=>2070,
+23130=>2071,
+24680=>2072,
+25031=>2073,
+26127=>2074,
+26118=>2075,
+26681=>2076,
+26801=>2077,
+28151=>2078,
+30165=>2079,
+32058=>2080,
+12169=>2081,
+33390=>2081,
+39746=>2082,
+20123=>2083,
+20304=>2084,
+21449=>2085,
+21766=>2086,
+23919=>2087,
+24038=>2088,
+24046=>2089,
+26619=>2090,
+27801=>2091,
+29811=>2092,
+30722=>2093,
+35408=>2094,
+37782=>2095,
+35039=>2096,
+22352=>2097,
+24231=>2098,
+25387=>2099,
+20661=>2100,
+20652=>2101,
+20877=>2102,
+26368=>2103,
+21705=>2104,
+22622=>2105,
+22971=>2106,
+23472=>2107,
+24425=>2108,
+25165=>2109,
+25505=>2110,
+26685=>2111,
+27507=>2112,
+28168=>2113,
+28797=>2114,
+37319=>2115,
+29312=>2116,
+30741=>2117,
+30758=>2118,
+31085=>2119,
+25998=>2120,
+32048=>2121,
+33756=>2122,
+35009=>2123,
+36617=>2124,
+38555=>2125,
+21092=>2126,
+22312=>2127,
+26448=>2128,
+32618=>2129,
+36001=>2130,
+20916=>2131,
+22338=>2132,
+38442=>2133,
+22586=>2134,
+27018=>2135,
+32948=>2136,
+21682=>2137,
+23822=>2138,
+22524=>2139,
+30869=>2140,
+40442=>2141,
+20316=>2142,
+21066=>2143,
+21643=>2144,
+25662=>2145,
+26152=>2146,
+26388=>2147,
+26613=>2148,
+31364=>2149,
+31574=>2150,
+32034=>2151,
+37679=>2152,
+26716=>2153,
+39853=>2154,
+31545=>2155,
+21273=>2156,
+20874=>2157,
+21047=>2158,
+23519=>2159,
+25334=>2160,
+25774=>2161,
+25830=>2162,
+26413=>2163,
+27578=>2164,
+34217=>2165,
+38609=>2166,
+30352=>2167,
+39894=>2168,
+25420=>2169,
+37638=>2170,
+39851=>2171,
+12139=>2172,
+30399=>2172,
+26194=>2173,
+19977=>2174,
+20632=>2175,
+21442=>2176,
+12077=>2177,
+23665=>2177,
+24808=>2178,
+25746=>2179,
+25955=>2180,
+26719=>2181,
+29158=>2182,
+29642=>2183,
+29987=>2184,
+31639=>2185,
+32386=>2186,
+34453=>2187,
+35715=>2188,
+36059=>2189,
+37240=>2190,
+39184=>2191,
+26028=>2192,
+26283=>2193,
+27531=>2194,
+20181=>2195,
+20180=>2196,
+20282=>2197,
+20351=>2198,
+21050=>2199,
+21496=>2200,
+21490=>2201,
+21987=>2202,
+22235=>2203,
+12064=>2204,
+22763=>2204,
+22987=>2205,
+22985=>2206,
+23039=>2207,
+12070=>2208,
+23376=>2208,
+23629=>2209,
+24066=>2210,
+24107=>2211,
+24535=>2212,
+24605=>2213,
+25351=>2214,
+12096=>2215,
+25903=>2215,
+23388=>2216,
+26031=>2217,
+26045=>2218,
+26088=>2219,
+26525=>2220,
+12108=>2221,
+27490=>2221,
+27515=>2222,
+12114=>2223,
+27663=>2223,
+29509=>2224,
+31049=>2225,
+31169=>2226,
+12151=>2227,
+31992=>2227,
+32025=>2228,
+32043=>2229,
+32930=>2230,
+33026=>2231,
+12164=>2232,
+33267=>2232,
+35222=>2233,
+35422=>2234,
+35433=>2235,
+35430=>2236,
+35468=>2237,
+35566=>2238,
+36039=>2239,
+36060=>2240,
+38604=>2241,
+39164=>2242,
+12013=>2243,
+27503=>2243,
+20107=>2244,
+20284=>2245,
+20365=>2246,
+20816=>2247,
+23383=>2248,
+23546=>2249,
+24904=>2250,
+25345=>2251,
+26178=>2252,
+27425=>2253,
+28363=>2254,
+27835=>2255,
+29246=>2256,
+29885=>2257,
+30164=>2258,
+30913=>2259,
+12144=>2260,
+31034=>2260,
+12157=>2261,
+32780=>2261,
+12159=>2262,
+32819=>2262,
+12163=>2263,
+33258=>2263,
+33940=>2264,
+36766=>2265,
+27728=>2266,
+12229=>2267,
+40575=>2267,
+24335=>2268,
+35672=>2269,
+40235=>2270,
+31482=>2271,
+36600=>2272,
+23437=>2273,
+38635=>2274,
+19971=>2275,
+21489=>2276,
+22519=>2277,
+22833=>2278,
+23241=>2279,
+23460=>2280,
+24713=>2281,
+28287=>2282,
+28422=>2283,
+30142=>2284,
+36074=>2285,
+23455=>2286,
+34048=>2287,
+31712=>2288,
+20594=>2289,
+26612=>2290,
+33437=>2291,
+23649=>2292,
+34122=>2293,
+32286=>2294,
+33294=>2295,
+20889=>2296,
+23556=>2297,
+25448=>2298,
+36198=>2299,
+26012=>2300,
+29038=>2301,
+31038=>2302,
+32023=>2303,
+32773=>2304,
+35613=>2305,
+12190=>2306,
+36554=>2306,
+36974=>2307,
+34503=>2308,
+37034=>2309,
+20511=>2310,
+21242=>2311,
+23610=>2312,
+26451=>2313,
+28796=>2314,
+29237=>2315,
+37196=>2316,
+37320=>2317,
+37675=>2318,
+33509=>2319,
+23490=>2320,
+24369=>2321,
+24825=>2322,
+20027=>2323,
+21462=>2324,
+23432=>2325,
+12095=>2326,
+25163=>2326,
+26417=>2327,
+27530=>2328,
+29417=>2329,
+29664=>2330,
+31278=>2331,
+33131=>2332,
+36259=>2333,
+37202=>2334,
+12216=>2335,
+39318=>2335,
+20754=>2336,
+21463=>2337,
+21610=>2338,
+23551=>2339,
+25480=>2340,
+27193=>2341,
+32172=>2342,
+38656=>2343,
+22234=>2344,
+21454=>2345,
+21608=>2346,
+23447=>2347,
+23601=>2348,
+24030=>2349,
+20462=>2350,
+24833=>2351,
+25342=>2352,
+27954=>2353,
+31168=>2354,
+31179=>2355,
+32066=>2356,
+32333=>2357,
+32722=>2358,
+33261=>2359,
+12168=>2360,
+33311=>2360,
+33936=>2361,
+34886=>2362,
+35186=>2363,
+35728=>2364,
+36468=>2365,
+36655=>2366,
+36913=>2367,
+37195=>2368,
+37228=>2369,
+38598=>2370,
+37276=>2371,
+20160=>2372,
+20303=>2373,
+20805=>2374,
+12055=>2375,
+21313=>2375,
+24467=>2376,
+25102=>2377,
+26580=>2378,
+27713=>2379,
+28171=>2380,
+29539=>2381,
+32294=>2382,
+37325=>2383,
+37507=>2384,
+21460=>2385,
+22809=>2386,
+23487=>2387,
+28113=>2388,
+31069=>2389,
+32302=>2390,
+31899=>2391,
+22654=>2392,
+29087=>2393,
+20986=>2394,
+34899=>2395,
+36848=>2396,
+20426=>2397,
+23803=>2398,
+26149=>2399,
+30636=>2400,
+31459=>2401,
+33308=>2402,
+39423=>2403,
+20934=>2404,
+24490=>2405,
+26092=>2406,
+26991=>2407,
+27529=>2408,
+28147=>2409,
+28310=>2410,
+28516=>2411,
+30462=>2412,
+32020=>2413,
+24033=>2414,
+36981=>2415,
+37255=>2416,
+38918=>2417,
+20966=>2418,
+21021=>2419,
+25152=>2420,
+26257=>2421,
+26329=>2422,
+28186=>2423,
+24246=>2424,
+32210=>2425,
+32626=>2426,
+26360=>2427,
+34223=>2428,
+34295=>2429,
+35576=>2430,
+21161=>2431,
+21465=>2432,
+12069=>2433,
+22899=>2433,
+24207=>2434,
+24464=>2435,
+24661=>2436,
+37604=>2437,
+38500=>2438,
+20663=>2439,
+20767=>2440,
+21213=>2441,
+21280=>2442,
+21319=>2443,
+21484=>2444,
+21736=>2445,
+21830=>2446,
+21809=>2447,
+22039=>2448,
+22888=>2449,
+22974=>2450,
+23100=>2451,
+23477=>2452,
+23558=>2453,
+12073=>2454,
+23567=>2454,
+23569=>2455,
+23578=>2456,
+24196=>2457,
+24202=>2458,
+24288=>2459,
+24432=>2460,
+25215=>2461,
+25220=>2462,
+25307=>2463,
+25484=>2464,
+25463=>2465,
+26119=>2466,
+26124=>2467,
+26157=>2468,
+26230=>2469,
+26494=>2470,
+26786=>2471,
+27167=>2472,
+27189=>2473,
+27836=>2474,
+28040=>2475,
+28169=>2476,
+28248=>2477,
+28988=>2478,
+28966=>2479,
+29031=>2480,
+30151=>2481,
+30465=>2482,
+30813=>2483,
+30977=>2484,
+31077=>2485,
+31216=>2486,
+31456=>2487,
+31505=>2488,
+31911=>2489,
+32057=>2490,
+32918=>2491,
+33750=>2492,
+33931=>2493,
+34121=>2494,
+34909=>2495,
+35059=>2496,
+35359=>2497,
+35388=>2498,
+35412=>2499,
+35443=>2500,
+35937=>2501,
+36062=>2502,
+37284=>2503,
+37478=>2504,
+37758=>2505,
+37912=>2506,
+38556=>2507,
+38808=>2508,
+19978=>2509,
+19976=>2510,
+19998=>2511,
+20055=>2512,
+20887=>2513,
+21104=>2514,
+22478=>2515,
+22580=>2516,
+22732=>2517,
+23330=>2518,
+24120=>2519,
+24773=>2520,
+25854=>2521,
+26465=>2522,
+26454=>2523,
+27972=>2524,
+29366=>2525,
+30067=>2526,
+31331=>2527,
+33976=>2528,
+35698=>2529,
+37304=>2530,
+37664=>2531,
+22065=>2532,
+22516=>2533,
+39166=>2534,
+25325=>2535,
+26893=>2536,
+27542=>2537,
+29165=>2538,
+32340=>2539,
+32887=>2540,
+12170=>2541,
+33394=>2541,
+35302=>2542,
+12215=>2543,
+39135=>2543,
+34645=>2544,
+36785=>2545,
+23611=>2546,
+20280=>2547,
+20449=>2548,
+20405=>2549,
+21767=>2550,
+23072=>2551,
+23517=>2552,
+23529=>2553,
+12092=>2554,
+24515=>2554,
+24910=>2555,
+25391=>2556,
+26032=>2557,
+26187=>2558,
+26862=>2559,
+27035=>2560,
+28024=>2561,
+28145=>2562,
+30003=>2563,
+30137=>2564,
+30495=>2565,
+31070=>2566,
+31206=>2567,
+32051=>2568,
+12162=>2569,
+33251=>2569,
+33455=>2570,
+34218=>2571,
+35242=>2572,
+35386=>2573,
+12189=>2574,
+36523=>2574,
+12191=>2575,
+36763=>2575,
+36914=>2576,
+37341=>2577,
+38663=>2578,
+12040=>2579,
+20154=>2579,
+20161=>2580,
+20995=>2581,
+22645=>2582,
+22764=>2583,
+23563=>2584,
+29978=>2585,
+23613=>2586,
+33102=>2587,
+35338=>2588,
+36805=>2589,
+38499=>2590,
+38765=>2591,
+31525=>2592,
+35535=>2593,
+38920=>2594,
+37218=>2595,
+22259=>2596,
+21416=>2597,
+36887=>2598,
+21561=>2599,
+22402=>2600,
+24101=>2601,
+25512=>2602,
+12116=>2603,
+27700=>2603,
+28810=>2604,
+30561=>2605,
+31883=>2606,
+32736=>2607,
+34928=>2608,
+36930=>2609,
+37204=>2610,
+37648=>2611,
+37656=>2612,
+38543=>2613,
+29790=>2614,
+39620=>2615,
+23815=>2616,
+23913=>2617,
+25968=>2618,
+26530=>2619,
+36264=>2620,
+38619=>2621,
+25454=>2622,
+26441=>2623,
+26905=>2624,
+33733=>2625,
+38935=>2626,
+38592=>2627,
+35070=>2628,
+28548=>2629,
+25722=>2630,
+12072=>2631,
+23544=>2631,
+19990=>2632,
+28716=>2633,
+30045=>2634,
+26159=>2635,
+20932=>2636,
+21046=>2637,
+21218=>2638,
+22995=>2639,
+24449=>2640,
+24615=>2641,
+25104=>2642,
+25919=>2643,
+25972=>2644,
+26143=>2645,
+26228=>2646,
+26866=>2647,
+26646=>2648,
+27491=>2649,
+28165=>2650,
+29298=>2651,
+12131=>2652,
+29983=>2652,
+30427=>2653,
+31934=>2654,
+32854=>2655,
+22768=>2656,
+35069=>2657,
+11972=>2658,
+35199=>2658,
+35488=>2659,
+35475=>2660,
+35531=>2661,
+36893=>2662,
+37266=>2663,
+11992=>2664,
+38738=>2664,
+38745=>2665,
+12011=>2666,
+25993=>2666,
+31246=>2667,
+33030=>2668,
+38587=>2669,
+24109=>2670,
+24796=>2671,
+25114=>2672,
+26021=>2673,
+26132=>2674,
+26512=>2675,
+12143=>2676,
+30707=>2676,
+31309=>2677,
+31821=>2678,
+32318=>2679,
+33034=>2680,
+36012=>2681,
+12186=>2682,
+36196=>2682,
+36321=>2683,
+36447=>2684,
+30889=>2685,
+20999=>2686,
+25305=>2687,
+25509=>2688,
+25666=>2689,
+25240=>2690,
+35373=>2691,
+31363=>2692,
+31680=>2693,
+35500=>2694,
+38634=>2695,
+32118=>2696,
+12166=>2697,
+33292=>2697,
+34633=>2698,
+20185=>2699,
+20808=>2700,
+21315=>2701,
+21344=>2702,
+23459=>2703,
+23554=>2704,
+23574=>2705,
+24029=>2706,
+25126=>2707,
+25159=>2708,
+25776=>2709,
+26643=>2710,
+26676=>2711,
+27849=>2712,
+27973=>2713,
+27927=>2714,
+26579=>2715,
+28508=>2716,
+29006=>2717,
+29053=>2718,
+26059=>2719,
+31359=>2720,
+31661=>2721,
+32218=>2722,
+32330=>2723,
+32680=>2724,
+33146=>2725,
+12167=>2726,
+33307=>2726,
+33337=>2727,
+34214=>2728,
+35438=>2729,
+36046=>2730,
+36341=>2731,
+36984=>2732,
+36983=>2733,
+37549=>2734,
+37521=>2735,
+38275=>2736,
+39854=>2737,
+21069=>2738,
+21892=>2739,
+28472=>2740,
+28982=>2741,
+20840=>2742,
+31109=>2743,
+32341=>2744,
+33203=>2745,
+31950=>2746,
+22092=>2747,
+22609=>2748,
+23720=>2749,
+25514=>2750,
+26366=>2751,
+26365=>2752,
+26970=>2753,
+29401=>2754,
+30095=>2755,
+30094=>2756,
+30990=>2757,
+31062=>2758,
+31199=>2759,
+31895=>2760,
+32032=>2761,
+32068=>2762,
+34311=>2763,
+35380=>2764,
+38459=>2765,
+36961=>2766,
+12239=>2767,
+40736=>2767,
+20711=>2768,
+21109=>2769,
+21452=>2770,
+21474=>2771,
+20489=>2772,
+21930=>2773,
+22766=>2774,
+22863=>2775,
+29245=>2776,
+23435=>2777,
+23652=>2778,
+21277=>2779,
+24803=>2780,
+24819=>2781,
+25436=>2782,
+25475=>2783,
+25407=>2784,
+25531=>2785,
+25805=>2786,
+26089=>2787,
+26361=>2788,
+24035=>2789,
+27085=>2790,
+27133=>2791,
+28437=>2792,
+29157=>2793,
+20105=>2794,
+30185=>2795,
+30456=>2796,
+31379=>2797,
+31967=>2798,
+32207=>2799,
+32156=>2800,
+32865=>2801,
+33609=>2802,
+33624=>2803,
+33900=>2804,
+33980=>2805,
+34299=>2806,
+35013=>2807,
+12187=>2808,
+36208=>2808,
+36865=>2809,
+36973=>2810,
+37783=>2811,
+38684=>2812,
+39442=>2813,
+20687=>2814,
+22679=>2815,
+24974=>2816,
+33235=>2817,
+34101=>2818,
+36104=>2819,
+36896=>2820,
+20419=>2821,
+20596=>2822,
+21063=>2823,
+21363=>2824,
+24687=>2825,
+25417=>2826,
+26463=>2827,
+28204=>2828,
+12188=>2829,
+36275=>2829,
+36895=>2830,
+20439=>2831,
+23646=>2832,
+36042=>2833,
+26063=>2834,
+32154=>2835,
+21330=>2836,
+34966=>2837,
+20854=>2838,
+25539=>2839,
+23384=>2840,
+23403=>2841,
+23562=>2842,
+25613=>2843,
+26449=>2844,
+36956=>2845,
+20182=>2846,
+22810=>2847,
+22826=>2848,
+27760=>2849,
+35409=>2850,
+21822=>2851,
+22549=>2852,
+22949=>2853,
+24816=>2854,
+25171=>2855,
+26561=>2856,
+33333=>2857,
+26965=>2858,
+38464=>2859,
+39364=>2860,
+39464=>2861,
+20307=>2862,
+22534=>2863,
+23550=>2864,
+32784=>2865,
+23729=>2866,
+24111=>2867,
+24453=>2868,
+24608=>2869,
+24907=>2870,
+25140=>2871,
+26367=>2872,
+27888=>2873,
+28382=>2874,
+32974=>2875,
+33151=>2876,
+33492=>2877,
+34955=>2878,
+36024=>2879,
+36864=>2880,
+36910=>2881,
+38538=>2882,
+40667=>2883,
+39899=>2884,
+20195=>2885,
+21488=>2886,
+12068=>2887,
+22823=>2887,
+31532=>2888,
+37261=>2889,
+38988=>2890,
+40441=>2891,
+28381=>2892,
+28711=>2893,
+21331=>2894,
+21828=>2895,
+23429=>2896,
+25176=>2897,
+25246=>2898,
+25299=>2899,
+27810=>2900,
+28655=>2901,
+29730=>2902,
+35351=>2903,
+37944=>2904,
+28609=>2905,
+35582=>2906,
+33592=>2907,
+20967=>2908,
+34552=>2909,
+21482=>2910,
+21481=>2911,
+20294=>2912,
+36948=>2913,
+12192=>2914,
+36784=>2914,
+22890=>2915,
+33073=>2916,
+24061=>2917,
+31466=>2918,
+36799=>2919,
+26842=>2920,
+12181=>2921,
+35895=>2921,
+29432=>2922,
+40008=>2923,
+27197=>2924,
+35504=>2925,
+20025=>2926,
+21336=>2927,
+22022=>2928,
+22374=>2929,
+25285=>2930,
+25506=>2931,
+26086=>2932,
+27470=>2933,
+28129=>2934,
+28251=>2935,
+28845=>2936,
+30701=>2937,
+31471=>2938,
+31658=>2939,
+32187=>2940,
+32829=>2941,
+32966=>2942,
+34507=>2943,
+35477=>2944,
+37723=>2945,
+22243=>2946,
+22727=>2947,
+24382=>2948,
+26029=>2949,
+26262=>2950,
+27264=>2951,
+27573=>2952,
+30007=>2953,
+35527=>2954,
+20516=>2955,
+30693=>2956,
+22320=>2957,
+24347=>2958,
+24677=>2959,
+26234=>2960,
+27744=>2961,
+30196=>2962,
+31258=>2963,
+32622=>2964,
+33268=>2965,
+34584=>2966,
+36933=>2967,
+39347=>2968,
+31689=>2969,
+30044=>2970,
+12149=>2971,
+31481=>2971,
+31569=>2972,
+33988=>2973,
+36880=>2974,
+31209=>2975,
+31378=>2976,
+33590=>2977,
+23265=>2978,
+30528=>2979,
+20013=>2980,
+20210=>2981,
+23449=>2982,
+24544=>2983,
+25277=>2984,
+26172=>2985,
+26609=>2986,
+27880=>2987,
+12173=>2988,
+34411=>2988,
+34935=>2989,
+35387=>2990,
+37198=>2991,
+37619=>2992,
+39376=>2993,
+27159=>2994,
+28710=>2995,
+29482=>2996,
+33511=>2997,
+33879=>2998,
+36015=>2999,
+19969=>3000,
+20806=>3001,
+20939=>3002,
+21899=>3003,
+23541=>3004,
+24086=>3005,
+24115=>3006,
+24193=>3007,
+24340=>3008,
+24373=>3009,
+24427=>3010,
+24500=>3011,
+25074=>3012,
+25361=>3013,
+26274=>3014,
+26397=>3015,
+28526=>3016,
+29266=>3017,
+30010=>3018,
+30522=>3019,
+32884=>3020,
+33081=>3021,
+33144=>3022,
+34678=>3023,
+35519=>3024,
+35548=>3025,
+36229=>3026,
+36339=>3027,
+37530=>3028,
+11985=>3029,
+12199=>3029,
+38263=>3029,
+38914=>3030,
+12227=>3031,
+40165=>3031,
+21189=>3032,
+25431=>3033,
+30452=>3034,
+26389=>3035,
+27784=>3036,
+29645=>3037,
+36035=>3038,
+37806=>3039,
+38515=>3040,
+27941=>3041,
+22684=>3042,
+26894=>3043,
+27084=>3044,
+36861=>3045,
+37786=>3046,
+30171=>3047,
+36890=>3048,
+22618=>3049,
+26626=>3050,
+25524=>3051,
+27131=>3052,
+20291=>3053,
+28460=>3054,
+26584=>3055,
+36795=>3056,
+34086=>3057,
+32180=>3058,
+37716=>3059,
+26943=>3060,
+28528=>3061,
+22378=>3062,
+22775=>3063,
+23340=>3064,
+32044=>3065,
+12118=>3066,
+29226=>3066,
+21514=>3067,
+37347=>3068,
+40372=>3069,
+20141=>3070,
+20302=>3071,
+20572=>3072,
+20597=>3073,
+21059=>3074,
+35998=>3075,
+21576=>3076,
+22564=>3077,
+23450=>3078,
+24093=>3079,
+24213=>3080,
+24237=>3081,
+24311=>3082,
+24351=>3083,
+24716=>3084,
+25269=>3085,
+25402=>3086,
+25552=>3087,
+26799=>3088,
+27712=>3089,
+30855=>3090,
+31118=>3091,
+31243=>3092,
+32224=>3093,
+33351=>3094,
+35330=>3095,
+35558=>3096,
+36420=>3097,
+36883=>3098,
+37048=>3099,
+37165=>3100,
+37336=>3101,
+12237=>3102,
+40718=>3102,
+27877=>3103,
+25688=>3104,
+25826=>3105,
+25973=>3106,
+28404=>3107,
+30340=>3108,
+31515=>3109,
+36969=>3110,
+37841=>3111,
+28346=>3112,
+21746=>3113,
+24505=>3114,
+25764=>3115,
+36685=>3116,
+36845=>3117,
+37444=>3118,
+20856=>3119,
+22635=>3120,
+22825=>3121,
+23637=>3122,
+24215=>3123,
+28155=>3124,
+32399=>3125,
+29980=>3126,
+36028=>3127,
+36578=>3128,
+39003=>3129,
+28857=>3130,
+20253=>3131,
+27583=>3132,
+28593=>3133,
+12133=>3134,
+30000=>3134,
+38651=>3135,
+20814=>3136,
+21520=>3137,
+22581=>3138,
+22615=>3139,
+22956=>3140,
+23648=>3141,
+24466=>3142,
+12099=>3143,
+26007=>3143,
+26460=>3144,
+28193=>3145,
+30331=>3146,
+33759=>3147,
+36077=>3148,
+36884=>3149,
+37117=>3150,
+37709=>3151,
+30757=>3152,
+30778=>3153,
+21162=>3154,
+24230=>3155,
+12063=>3156,
+22303=>3156,
+22900=>3157,
+24594=>3158,
+20498=>3159,
+20826=>3160,
+20908=>3161,
+20941=>3162,
+12049=>3163,
+20992=>3163,
+21776=>3164,
+22612=>3165,
+22616=>3166,
+22871=>3167,
+23445=>3168,
+23798=>3169,
+23947=>3170,
+24764=>3171,
+25237=>3172,
+25645=>3173,
+26481=>3174,
+26691=>3175,
+26812=>3176,
+26847=>3177,
+30423=>3178,
+28120=>3179,
+28271=>3180,
+28059=>3181,
+28783=>3182,
+29128=>3183,
+24403=>3184,
+30168=>3185,
+31095=>3186,
+31561=>3187,
+31572=>3188,
+31570=>3189,
+31958=>3190,
+32113=>3191,
+21040=>3192,
+33891=>3193,
+34153=>3194,
+34276=>3195,
+35342=>3196,
+35588=>3197,
+12182=>3198,
+35910=>3198,
+36367=>3199,
+36867=>3200,
+36879=>3201,
+37913=>3202,
+38518=>3203,
+38957=>3204,
+39472=>3205,
+38360=>3206,
+20685=>3207,
+21205=>3208,
+21516=>3209,
+22530=>3210,
+23566=>3211,
+24999=>3212,
+25758=>3213,
+27934=>3214,
+30643=>3215,
+31461=>3216,
+33012=>3217,
+33796=>3218,
+36947=>3219,
+37509=>3220,
+23776=>3221,
+40199=>3222,
+21311=>3223,
+24471=>3224,
+24499=>3225,
+28060=>3226,
+29305=>3227,
+30563=>3228,
+31167=>3229,
+31716=>3230,
+27602=>3231,
+29420=>3232,
+35501=>3233,
+26627=>3234,
+27233=>3235,
+20984=>3236,
+31361=>3237,
+26932=>3238,
+23626=>3239,
+40182=>3240,
+33515=>3241,
+23493=>3242,
+12195=>3243,
+37193=>3243,
+28702=>3244,
+22136=>3245,
+23663=>3246,
+24775=>3247,
+25958=>3248,
+27788=>3249,
+35930=>3250,
+36929=>3251,
+38931=>3252,
+21585=>3253,
+26311=>3254,
+37389=>3255,
+22856=>3256,
+37027=>3257,
+20869=>3258,
+20045=>3259,
+20970=>3260,
+34201=>3261,
+35598=>3262,
+28760=>3263,
+25466=>3264,
+37707=>3265,
+26978=>3266,
+39348=>3267,
+32260=>3268,
+30071=>3269,
+21335=>3270,
+26976=>3271,
+36575=>3272,
+38627=>3273,
+27741=>3274,
+12038=>3275,
+20108=>3275,
+23612=>3276,
+24336=>3277,
+36841=>3278,
+21250=>3279,
+36049=>3280,
+12161=>3281,
+32905=>3281,
+34425=>3282,
+24319=>3283,
+12103=>3284,
+26085=>3284,
+20083=>3285,
+12042=>3286,
+20837=>3286,
+22914=>3287,
+23615=>3288,
+38894=>3289,
+20219=>3290,
+22922=>3291,
+24525=>3292,
+35469=>3293,
+28641=>3294,
+31152=>3295,
+31074=>3296,
+23527=>3297,
+33905=>3298,
+29483=>3299,
+29105=>3300,
+24180=>3301,
+24565=>3302,
+25467=>3303,
+25754=>3304,
+29123=>3305,
+31896=>3306,
+20035=>3307,
+24316=>3308,
+20043=>3309,
+22492=>3310,
+22178=>3311,
+24745=>3312,
+28611=>3313,
+32013=>3314,
+33021=>3315,
+33075=>3316,
+33215=>3317,
+36786=>3318,
+35223=>3319,
+34468=>3320,
+24052=>3321,
+25226=>3322,
+25773=>3323,
+35207=>3324,
+26487=>3325,
+27874=>3326,
+27966=>3327,
+29750=>3328,
+30772=>3329,
+23110=>3330,
+32629=>3331,
+33453=>3332,
+12218=>3333,
+39340=>3333,
+20467=>3334,
+24259=>3335,
+25309=>3336,
+25490=>3337,
+25943=>3338,
+26479=>3339,
+30403=>3340,
+29260=>3341,
+32972=>3342,
+32954=>3343,
+36649=>3344,
+37197=>3345,
+20493=>3346,
+22521=>3347,
+23186=>3348,
+26757=>3349,
+26995=>3350,
+29028=>3351,
+29437=>3352,
+36023=>3353,
+22770=>3354,
+36064=>3355,
+38506=>3356,
+36889=>3357,
+34687=>3358,
+31204=>3359,
+30695=>3360,
+33833=>3361,
+20271=>3362,
+21093=>3363,
+21338=>3364,
+25293=>3365,
+26575=>3366,
+27850=>3367,
+12137=>3368,
+30333=>3368,
+31636=>3369,
+31893=>3370,
+33334=>3371,
+34180=>3372,
+36843=>3373,
+26333=>3374,
+28448=>3375,
+29190=>3376,
+32283=>3377,
+33707=>3378,
+39361=>3379,
+12008=>3380,
+40614=>3380,
+20989=>3381,
+31665=>3382,
+30834=>3383,
+31672=>3384,
+32903=>3385,
+31560=>3386,
+27368=>3387,
+24161=>3388,
+32908=>3389,
+30033=>3390,
+30048=>3391,
+12043=>3392,
+20843=>3392,
+37474=>3393,
+28300=>3394,
+30330=>3395,
+37271=>3396,
+39658=>3397,
+20240=>3398,
+32624=>3399,
+25244=>3400,
+31567=>3401,
+38309=>3402,
+40169=>3403,
+22138=>3404,
+22617=>3405,
+34532=>3406,
+38588=>3407,
+20276=>3408,
+21028=>3409,
+21322=>3410,
+21453=>3411,
+21467=>3412,
+24070=>3413,
+25644=>3414,
+26001=>3415,
+26495=>3416,
+27710=>3417,
+27726=>3418,
+29256=>3419,
+29359=>3420,
+29677=>3421,
+30036=>3422,
+32321=>3423,
+33324=>3424,
+34281=>3425,
+36009=>3426,
+31684=>3427,
+12196=>3428,
+37318=>3428,
+29033=>3429,
+38930=>3430,
+39151=>3431,
+25405=>3432,
+26217=>3433,
+30058=>3434,
+30436=>3435,
+30928=>3436,
+34115=>3437,
+34542=>3438,
+21290=>3439,
+21329=>3440,
+21542=>3441,
+22915=>3442,
+24199=>3443,
+24444=>3444,
+24754=>3445,
+25161=>3446,
+25209=>3447,
+25259=>3448,
+26000=>3449,
+12112=>3450,
+27604=>3450,
+27852=>3451,
+30130=>3452,
+12138=>3453,
+30382=>3453,
+30865=>3454,
+31192=>3455,
+32203=>3456,
+32631=>3457,
+32933=>3458,
+34987=>3459,
+35513=>3460,
+36027=>3461,
+36991=>3462,
+12206=>3463,
+38750=>3463,
+12214=>3464,
+39131=>3464,
+27147=>3465,
+31800=>3466,
+20633=>3467,
+23614=>3468,
+24494=>3469,
+26503=>3470,
+27608=>3471,
+29749=>3472,
+30473=>3473,
+32654=>3474,
+12240=>3475,
+40763=>3475,
+26570=>3476,
+31255=>3477,
+21305=>3478,
+12134=>3479,
+30091=>3479,
+39661=>3480,
+24422=>3481,
+33181=>3482,
+33777=>3483,
+32920=>3484,
+24380=>3485,
+24517=>3486,
+30050=>3487,
+31558=>3488,
+36924=>3489,
+26727=>3490,
+23019=>3491,
+23195=>3492,
+32016=>3493,
+30334=>3494,
+35628=>3495,
+20469=>3496,
+24426=>3497,
+27161=>3498,
+27703=>3499,
+28418=>3500,
+29922=>3501,
+31080=>3502,
+34920=>3503,
+35413=>3504,
+35961=>3505,
+24287=>3506,
+25551=>3507,
+30149=>3508,
+31186=>3509,
+33495=>3510,
+37672=>3511,
+37618=>3512,
+33948=>3513,
+34541=>3514,
+39981=>3515,
+21697=>3516,
+24428=>3517,
+25996=>3518,
+27996=>3519,
+28693=>3520,
+36007=>3521,
+36051=>3522,
+38971=>3523,
+25935=>3524,
+29942=>3525,
+19981=>3526,
+20184=>3527,
+22496=>3528,
+22827=>3529,
+23142=>3530,
+23500=>3531,
+20904=>3532,
+24067=>3533,
+24220=>3534,
+24598=>3535,
+25206=>3536,
+25975=>3537,
+26023=>3538,
+26222=>3539,
+28014=>3540,
+12119=>3541,
+29238=>3541,
+31526=>3542,
+33104=>3543,
+33178=>3544,
+33433=>3545,
+35676=>3546,
+36000=>3547,
+36070=>3548,
+36212=>3549,
+12201=>3550,
+38428=>3550,
+38468=>3551,
+20398=>3552,
+25771=>3553,
+27494=>3554,
+33310=>3555,
+33889=>3556,
+34154=>3557,
+37096=>3558,
+23553=>3559,
+26963=>3560,
+12213=>3561,
+39080=>3561,
+33914=>3562,
+34135=>3563,
+20239=>3564,
+21103=>3565,
+24489=>3566,
+24133=>3567,
+26381=>3568,
+31119=>3569,
+33145=>3570,
+35079=>3571,
+35206=>3572,
+28149=>3573,
+24343=>3574,
+25173=>3575,
+27832=>3576,
+20175=>3577,
+29289=>3578,
+39826=>3579,
+20998=>3580,
+21563=>3581,
+22132=>3582,
+22707=>3583,
+24996=>3584,
+25198=>3585,
+28954=>3586,
+22894=>3587,
+31881=>3588,
+31966=>3589,
+32027=>3590,
+38640=>3591,
+12098=>3592,
+25991=>3592,
+32862=>3593,
+19993=>3594,
+20341=>3595,
+20853=>3596,
+22592=>3597,
+24163=>3598,
+24179=>3599,
+24330=>3600,
+26564=>3601,
+20006=>3602,
+34109=>3603,
+38281=>3604,
+38491=>3605,
+12150=>3606,
+31859=>3606,
+12212=>3607,
+38913=>3607,
+20731=>3608,
+22721=>3609,
+30294=>3610,
+30887=>3611,
+21029=>3612,
+30629=>3613,
+34065=>3614,
+31622=>3615,
+20559=>3616,
+22793=>3617,
+12122=>3618,
+29255=>3618,
+31687=>3619,
+32232=>3620,
+36794=>3621,
+36820=>3622,
+36941=>3623,
+20415=>3624,
+21193=>3625,
+23081=>3626,
+24321=>3627,
+38829=>3628,
+20445=>3629,
+33303=>3630,
+37610=>3631,
+22275=>3632,
+25429=>3633,
+27497=>3634,
+29995=>3635,
+35036=>3636,
+36628=>3637,
+31298=>3638,
+21215=>3639,
+22675=>3640,
+24917=>3641,
+25098=>3642,
+26286=>3643,
+11935=>3644,
+27597=>3644,
+31807=>3645,
+33769=>3646,
+20515=>3647,
+20472=>3648,
+21253=>3649,
+21574=>3650,
+22577=>3651,
+22857=>3652,
+23453=>3653,
+23792=>3654,
+23791=>3655,
+23849=>3656,
+24214=>3657,
+25265=>3658,
+25447=>3659,
+25918=>3660,
+12101=>3661,
+26041=>3661,
+26379=>3662,
+27861=>3663,
+27873=>3664,
+28921=>3665,
+30770=>3666,
+32299=>3667,
+32990=>3668,
+33459=>3669,
+33804=>3670,
+34028=>3671,
+34562=>3672,
+35090=>3673,
+35370=>3674,
+35914=>3675,
+37030=>3676,
+37586=>3677,
+39165=>3678,
+40179=>3679,
+40300=>3680,
+20047=>3681,
+20129=>3682,
+20621=>3683,
+21078=>3684,
+22346=>3685,
+22952=>3686,
+24125=>3687,
+24536=>3688,
+24537=>3689,
+25151=>3690,
+26292=>3691,
+26395=>3692,
+26576=>3693,
+26834=>3694,
+20882=>3695,
+32033=>3696,
+32938=>3697,
+33192=>3698,
+35584=>3699,
+35980=>3700,
+36031=>3701,
+37502=>3702,
+38450=>3703,
+21536=>3704,
+38956=>3705,
+21271=>3706,
+20693=>3707,
+12056=>3708,
+21340=>3708,
+22696=>3709,
+25778=>3710,
+26420=>3711,
+29287=>3712,
+30566=>3713,
+31302=>3714,
+37350=>3715,
+21187=>3716,
+27809=>3717,
+27526=>3718,
+22528=>3719,
+24140=>3720,
+22868=>3721,
+26412=>3722,
+32763=>3723,
+20961=>3724,
+30406=>3725,
+25705=>3726,
+30952=>3727,
+39764=>3728,
+12231=>3729,
+40635=>3729,
+22475=>3730,
+22969=>3731,
+26151=>3732,
+26522=>3733,
+27598=>3734,
+21737=>3735,
+27097=>3736,
+24149=>3737,
+33180=>3738,
+26517=>3739,
+39850=>3740,
+26622=>3741,
+40018=>3742,
+26717=>3743,
+20134=>3744,
+20451=>3745,
+12060=>3746,
+21448=>3746,
+25273=>3747,
+26411=>3748,
+27819=>3749,
+36804=>3750,
+20397=>3751,
+32365=>3752,
+40639=>3753,
+19975=>3754,
+24930=>3755,
+28288=>3756,
+28459=>3757,
+34067=>3758,
+21619=>3759,
+26410=>3760,
+39749=>3761,
+11922=>3762,
+24051=>3762,
+31637=>3763,
+23724=>3764,
+23494=>3765,
+34588=>3766,
+28234=>3767,
+34001=>3768,
+31252=>3769,
+33032=>3770,
+22937=>3771,
+31885=>3772,
+11936=>3773,
+27665=>3773,
+30496=>3774,
+21209=>3775,
+22818=>3776,
+28961=>3777,
+29279=>3778,
+12141=>3779,
+30683=>3779,
+38695=>3780,
+40289=>3781,
+26891=>3782,
+23167=>3783,
+23064=>3784,
+20901=>3785,
+21517=>3786,
+21629=>3787,
+26126=>3788,
+30431=>3789,
+36855=>3790,
+37528=>3791,
+40180=>3792,
+23018=>3793,
+29277=>3794,
+28357=>3795,
+20813=>3796,
+26825=>3797,
+32191=>3798,
+32236=>3799,
+12207=>3800,
+38754=>3800,
+40634=>3801,
+25720=>3802,
+27169=>3803,
+33538=>3804,
+22916=>3805,
+23391=>3806,
+12113=>3807,
+27611=>3807,
+29467=>3808,
+30450=>3809,
+32178=>3810,
+32791=>3811,
+33945=>3812,
+20786=>3813,
+12106=>3814,
+26408=>3814,
+40665=>3815,
+12140=>3816,
+30446=>3816,
+26466=>3817,
+21247=>3818,
+39173=>3819,
+23588=>3820,
+25147=>3821,
+31870=>3822,
+36016=>3823,
+21839=>3824,
+24758=>3825,
+32011=>3826,
+12200=>3827,
+38272=>3827,
+21249=>3828,
+20063=>3829,
+20918=>3830,
+22812=>3831,
+29242=>3832,
+32822=>3833,
+37326=>3834,
+24357=>3835,
+12142=>3836,
+30690=>3836,
+21380=>3837,
+24441=>3838,
+32004=>3839,
+34220=>3840,
+35379=>3841,
+36493=>3842,
+38742=>3843,
+26611=>3844,
+34222=>3845,
+37971=>3846,
+24841=>3847,
+24840=>3848,
+27833=>3849,
+30290=>3850,
+35565=>3851,
+36664=>3852,
+21807=>3853,
+20305=>3854,
+20778=>3855,
+21191=>3856,
+21451=>3857,
+23461=>3858,
+24189=>3859,
+24736=>3860,
+24962=>3861,
+25558=>3862,
+26377=>3863,
+26586=>3864,
+28263=>3865,
+28044=>3866,
+29494=>3867,
+29495=>3868,
+30001=>3869,
+31056=>3870,
+35029=>3871,
+35480=>3872,
+36938=>3873,
+12194=>3874,
+37009=>3874,
+37109=>3875,
+38596=>3876,
+34701=>3877,
+12067=>3878,
+22805=>3878,
+20104=>3879,
+20313=>3880,
+19982=>3881,
+35465=>3882,
+36671=>3883,
+38928=>3884,
+20653=>3885,
+24188=>3886,
+22934=>3887,
+23481=>3888,
+24248=>3889,
+25562=>3890,
+25594=>3891,
+25793=>3892,
+26332=>3893,
+26954=>3894,
+27096=>3895,
+27915=>3896,
+28342=>3897,
+29076=>3898,
+12132=>3899,
+29992=>3899,
+31407=>3900,
+12154=>3901,
+32650=>3901,
+32768=>3902,
+33865=>3903,
+33993=>3904,
+35201=>3905,
+35617=>3906,
+36362=>3907,
+36965=>3908,
+38525=>3909,
+39178=>3910,
+24958=>3911,
+25233=>3912,
+27442=>3913,
+27779=>3914,
+28020=>3915,
+32716=>3916,
+32764=>3917,
+28096=>3918,
+32645=>3919,
+34746=>3920,
+35064=>3921,
+26469=>3922,
+33713=>3923,
+38972=>3924,
+38647=>3925,
+27931=>3926,
+32097=>3927,
+33853=>3928,
+37226=>3929,
+20081=>3930,
+21365=>3931,
+23888=>3932,
+27396=>3933,
+28651=>3934,
+34253=>3935,
+34349=>3936,
+35239=>3937,
+21033=>3938,
+21519=>3939,
+23653=>3940,
+26446=>3941,
+26792=>3942,
+29702=>3943,
+29827=>3944,
+30178=>3945,
+35023=>3946,
+35041=>3947,
+12197=>3948,
+37324=>3948,
+38626=>3949,
+38520=>3950,
+24459=>3951,
+29575=>3952,
+12148=>3953,
+31435=>3953,
+33870=>3954,
+25504=>3955,
+30053=>3956,
+21129=>3957,
+27969=>3958,
+28316=>3959,
+29705=>3960,
+30041=>3961,
+30827=>3962,
+31890=>3963,
+38534=>3964,
+12015=>3965,
+31452=>3965,
+12243=>3966,
+40845=>3966,
+20406=>3967,
+24942=>3968,
+26053=>3969,
+34396=>3970,
+20102=>3971,
+20142=>3972,
+20698=>3973,
+20001=>3974,
+20940=>3975,
+23534=>3976,
+26009=>3977,
+26753=>3978,
+28092=>3979,
+29471=>3980,
+30274=>3981,
+30637=>3982,
+31260=>3983,
+31975=>3984,
+33391=>3985,
+35538=>3986,
+36988=>3987,
+37327=>3988,
+38517=>3989,
+38936=>3990,
+12050=>3991,
+21147=>3991,
+32209=>3992,
+20523=>3993,
+21400=>3994,
+26519=>3995,
+28107=>3996,
+29136=>3997,
+29747=>3998,
+33256=>3999,
+36650=>4000,
+38563=>4001,
+40023=>4002,
+40607=>4003,
+29792=>4004,
+22593=>4005,
+28057=>4006,
+32047=>4007,
+39006=>4008,
+20196=>4009,
+20278=>4010,
+20363=>4011,
+20919=>4012,
+21169=>4013,
+23994=>4014,
+24604=>4015,
+29618=>4016,
+31036=>4017,
+33491=>4018,
+37428=>4019,
+38583=>4020,
+38646=>4021,
+38666=>4022,
+40599=>4023,
+40802=>4024,
+26278=>4025,
+27508=>4026,
+21015=>4027,
+21155=>4028,
+28872=>4029,
+35010=>4030,
+24265=>4031,
+24651=>4032,
+24976=>4033,
+28451=>4034,
+29001=>4035,
+31806=>4036,
+32244=>4037,
+32879=>4038,
+34030=>4039,
+36899=>4040,
+37676=>4041,
+21570=>4042,
+39791=>4043,
+27347=>4044,
+28809=>4045,
+36034=>4046,
+36335=>4047,
+38706=>4048,
+21172=>4049,
+23105=>4050,
+24266=>4051,
+24324=>4052,
+26391=>4053,
+27004=>4054,
+27028=>4055,
+28010=>4056,
+28431=>4057,
+29282=>4058,
+29436=>4059,
+31725=>4060,
+12156=>4061,
+32769=>4061,
+32894=>4062,
+34635=>4063,
+37070=>4064,
+20845=>4065,
+40595=>4066,
+31108=>4067,
+32907=>4068,
+37682=>4069,
+35542=>4070,
+20525=>4071,
+21644=>4072,
+35441=>4073,
+27498=>4074,
+36036=>4075,
+33031=>4076,
+24785=>4077,
+26528=>4078,
+40434=>4079,
+20121=>4080,
+20120=>4081,
+39952=>4082,
+35435=>4083,
+34241=>4084,
+34152=>4085,
+26880=>4086,
+28286=>4087,
+30871=>4088,
+33109=>4089,
+24332=>4090,
+19984=>4091,
+19989=>4092,
+20010=>4093,
+20017=>4094,
+12034=>4095,
+20022=>4095,
+20028=>4096,
+12035=>4097,
+20031=>4097,
+20034=>4098,
+20054=>4099,
+20056=>4100,
+20098=>4101,
+12037=>4102,
+20101=>4102,
+35947=>4103,
+20106=>4104,
+33298=>4105,
+24333=>4106,
+20110=>4107,
+20126=>4108,
+20127=>4109,
+12039=>4110,
+20128=>4110,
+20130=>4111,
+20144=>4112,
+20147=>4113,
+20150=>4114,
+20174=>4115,
+20173=>4116,
+20164=>4117,
+20166=>4118,
+20162=>4119,
+20183=>4120,
+20190=>4121,
+20205=>4122,
+20191=>4123,
+20215=>4124,
+20233=>4125,
+20314=>4126,
+20272=>4127,
+20315=>4128,
+20317=>4129,
+20311=>4130,
+20295=>4131,
+20342=>4132,
+20360=>4133,
+20367=>4134,
+20376=>4135,
+20347=>4136,
+20329=>4137,
+20336=>4138,
+20369=>4139,
+20335=>4140,
+20358=>4141,
+20374=>4142,
+20760=>4143,
+20436=>4144,
+20447=>4145,
+20430=>4146,
+20440=>4147,
+20443=>4148,
+20433=>4149,
+20442=>4150,
+20432=>4151,
+20452=>4152,
+20453=>4153,
+20506=>4154,
+20520=>4155,
+20500=>4156,
+20522=>4157,
+20517=>4158,
+20485=>4159,
+20252=>4160,
+20470=>4161,
+20513=>4162,
+20521=>4163,
+20524=>4164,
+20478=>4165,
+20463=>4166,
+20497=>4167,
+20486=>4168,
+20547=>4169,
+20551=>4170,
+26371=>4171,
+20565=>4172,
+20560=>4173,
+20552=>4174,
+20570=>4175,
+20566=>4176,
+20588=>4177,
+20600=>4178,
+20608=>4179,
+20634=>4180,
+20613=>4181,
+20660=>4182,
+20658=>4183,
+20681=>4184,
+20682=>4185,
+20659=>4186,
+20674=>4187,
+20694=>4188,
+20702=>4189,
+20709=>4190,
+20717=>4191,
+20707=>4192,
+20718=>4193,
+20729=>4194,
+20725=>4195,
+20745=>4196,
+20737=>4197,
+20738=>4198,
+20758=>4199,
+20757=>4200,
+20756=>4201,
+20762=>4202,
+20769=>4203,
+20794=>4204,
+20791=>4205,
+20796=>4206,
+20795=>4207,
+12041=>4208,
+20799=>4208,
+11918=>4209,
+20800=>4209,
+20818=>4210,
+20812=>4211,
+20820=>4212,
+20834=>4213,
+31480=>4214,
+20841=>4215,
+20842=>4216,
+20846=>4217,
+20864=>4218,
+12044=>4219,
+20866=>4219,
+22232=>4220,
+20876=>4221,
+20873=>4222,
+20879=>4223,
+20881=>4224,
+20883=>4225,
+20885=>4226,
+12045=>4227,
+20886=>4227,
+20900=>4228,
+20902=>4229,
+20898=>4230,
+20905=>4231,
+20906=>4232,
+12046=>4233,
+20907=>4233,
+20915=>4234,
+20913=>4235,
+20914=>4236,
+20912=>4237,
+20917=>4238,
+20925=>4239,
+20933=>4240,
+20937=>4241,
+20955=>4242,
+12047=>4243,
+20960=>4243,
+34389=>4244,
+20969=>4245,
+20973=>4246,
+20976=>4247,
+12048=>4248,
+20981=>4248,
+20990=>4249,
+20996=>4250,
+21003=>4251,
+21012=>4252,
+21006=>4253,
+21031=>4254,
+21034=>4255,
+21038=>4256,
+21043=>4257,
+21049=>4258,
+21071=>4259,
+21060=>4260,
+21067=>4261,
+21068=>4262,
+21086=>4263,
+21076=>4264,
+21098=>4265,
+21108=>4266,
+21097=>4267,
+21107=>4268,
+21119=>4269,
+21117=>4270,
+21133=>4271,
+21140=>4272,
+21138=>4273,
+21105=>4274,
+21128=>4275,
+21137=>4276,
+36776=>4277,
+36775=>4278,
+21164=>4279,
+21165=>4280,
+21180=>4281,
+21173=>4282,
+21185=>4283,
+21197=>4284,
+21207=>4285,
+21214=>4286,
+21219=>4287,
+21222=>4288,
+39149=>4289,
+21216=>4290,
+21235=>4291,
+21237=>4292,
+21240=>4293,
+12051=>4294,
+21241=>4294,
+21254=>4295,
+21256=>4296,
+30008=>4297,
+21261=>4298,
+21264=>4299,
+21263=>4300,
+21269=>4301,
+12052=>4301,
+21274=>4302,
+12053=>4302,
+21283=>4303,
+21295=>4304,
+21297=>4305,
+21299=>4306,
+12054=>4307,
+21304=>4307,
+21312=>4308,
+21318=>4309,
+21317=>4310,
+19991=>4311,
+21321=>4312,
+21325=>4313,
+20950=>4314,
+21342=>4315,
+12057=>4316,
+21353=>4316,
+21358=>4317,
+22808=>4318,
+21371=>4319,
+21367=>4320,
+12058=>4321,
+21378=>4321,
+21398=>4322,
+21408=>4323,
+21414=>4324,
+21413=>4325,
+21422=>4326,
+21424=>4327,
+12059=>4328,
+21430=>4328,
+21443=>4329,
+31762=>4330,
+38617=>4331,
+21471=>4332,
+26364=>4333,
+29166=>4334,
+21486=>4335,
+21480=>4336,
+21485=>4337,
+21498=>4338,
+21505=>4339,
+21565=>4340,
+21568=>4341,
+21548=>4342,
+21549=>4343,
+21564=>4344,
+21550=>4345,
+21558=>4346,
+21545=>4347,
+21533=>4348,
+21582=>4349,
+21647=>4350,
+21621=>4351,
+21646=>4352,
+21599=>4353,
+21617=>4354,
+21623=>4355,
+21616=>4356,
+21650=>4357,
+21627=>4358,
+21632=>4359,
+21622=>4360,
+21636=>4361,
+21648=>4362,
+21638=>4363,
+21703=>4364,
+21666=>4365,
+21688=>4366,
+21669=>4367,
+21676=>4368,
+21700=>4369,
+21704=>4370,
+21672=>4371,
+21675=>4372,
+21698=>4373,
+21668=>4374,
+21694=>4375,
+21692=>4376,
+21720=>4377,
+21733=>4378,
+21734=>4379,
+21775=>4380,
+21780=>4381,
+21757=>4382,
+21742=>4383,
+21741=>4384,
+21754=>4385,
+21730=>4386,
+21817=>4387,
+21824=>4388,
+21859=>4389,
+21836=>4390,
+21806=>4391,
+21852=>4392,
+21829=>4393,
+21846=>4394,
+21847=>4395,
+21816=>4396,
+21811=>4397,
+21853=>4398,
+21913=>4399,
+21888=>4400,
+21679=>4401,
+21898=>4402,
+21919=>4403,
+21883=>4404,
+21886=>4405,
+21912=>4406,
+21918=>4407,
+21934=>4408,
+21884=>4409,
+21891=>4410,
+21929=>4411,
+21895=>4412,
+21928=>4413,
+21978=>4414,
+21957=>4415,
+21983=>4416,
+21956=>4417,
+21980=>4418,
+21988=>4419,
+21972=>4420,
+22036=>4421,
+22007=>4422,
+22038=>4423,
+22014=>4424,
+22013=>4425,
+22043=>4426,
+22009=>4427,
+22094=>4428,
+22096=>4429,
+29151=>4430,
+22068=>4431,
+22070=>4432,
+22066=>4433,
+22072=>4434,
+22123=>4435,
+22116=>4436,
+22063=>4437,
+22124=>4438,
+22122=>4439,
+22150=>4440,
+22144=>4441,
+22154=>4442,
+22176=>4443,
+22164=>4444,
+22159=>4445,
+22181=>4446,
+22190=>4447,
+22198=>4448,
+22196=>4449,
+22210=>4450,
+22204=>4451,
+22209=>4452,
+22211=>4453,
+22208=>4454,
+22216=>4455,
+22222=>4456,
+22225=>4457,
+22227=>4458,
+12062=>4459,
+22231=>4459,
+22254=>4460,
+22265=>4461,
+22272=>4462,
+22271=>4463,
+22276=>4464,
+22281=>4465,
+22280=>4466,
+22283=>4467,
+22285=>4468,
+22291=>4469,
+22296=>4470,
+22294=>4471,
+21959=>4472,
+22300=>4473,
+22310=>4474,
+22327=>4475,
+22328=>4476,
+22350=>4477,
+22331=>4478,
+22336=>4479,
+22351=>4480,
+22377=>4481,
+22464=>4482,
+22408=>4483,
+22369=>4484,
+22399=>4485,
+22409=>4486,
+22419=>4487,
+22432=>4488,
+22451=>4489,
+22436=>4490,
+22442=>4491,
+22448=>4492,
+22467=>4493,
+22470=>4494,
+22484=>4495,
+22482=>4496,
+22483=>4497,
+22538=>4498,
+22486=>4499,
+22499=>4500,
+22539=>4501,
+22553=>4502,
+22557=>4503,
+22642=>4504,
+22561=>4505,
+22626=>4506,
+22603=>4507,
+22640=>4508,
+27584=>4509,
+22610=>4510,
+22589=>4511,
+22649=>4512,
+22661=>4513,
+22713=>4514,
+22687=>4515,
+22699=>4516,
+22714=>4517,
+22750=>4518,
+22715=>4519,
+22712=>4520,
+22702=>4521,
+22725=>4522,
+22739=>4523,
+22737=>4524,
+22743=>4525,
+22745=>4526,
+22744=>4527,
+22757=>4528,
+22748=>4529,
+22756=>4530,
+22751=>4531,
+22767=>4532,
+22778=>4533,
+22777=>4534,
+22779=>4535,
+22780=>4536,
+22781=>4537,
+22786=>4538,
+12065=>4538,
+22794=>4539,
+12066=>4539,
+22800=>4540,
+22811=>4541,
+26790=>4542,
+22821=>4543,
+22828=>4544,
+22829=>4545,
+22834=>4546,
+22840=>4547,
+22846=>4548,
+31442=>4549,
+22869=>4550,
+22864=>4551,
+22862=>4552,
+22874=>4553,
+22872=>4554,
+22882=>4555,
+22880=>4556,
+22887=>4557,
+22892=>4558,
+22889=>4559,
+22904=>4560,
+22913=>4561,
+22941=>4562,
+20318=>4563,
+20395=>4564,
+22947=>4565,
+22962=>4566,
+22982=>4567,
+23016=>4568,
+23004=>4569,
+22925=>4570,
+23001=>4571,
+23002=>4572,
+23077=>4573,
+23071=>4574,
+23057=>4575,
+23068=>4576,
+23049=>4577,
+23066=>4578,
+23104=>4579,
+23148=>4580,
+23113=>4581,
+23093=>4582,
+23094=>4583,
+23138=>4584,
+23146=>4585,
+23194=>4586,
+23228=>4587,
+23230=>4588,
+23243=>4589,
+23234=>4590,
+23229=>4591,
+23267=>4592,
+23255=>4593,
+23270=>4594,
+23273=>4595,
+23254=>4596,
+23290=>4597,
+23291=>4598,
+23308=>4599,
+23307=>4600,
+23318=>4601,
+23346=>4602,
+23248=>4603,
+23338=>4604,
+23350=>4605,
+23358=>4606,
+23363=>4607,
+23365=>4608,
+23360=>4609,
+23377=>4610,
+23381=>4611,
+23386=>4612,
+23387=>4613,
+23397=>4614,
+23401=>4615,
+23408=>4616,
+23411=>4617,
+23413=>4618,
+23416=>4619,
+25992=>4620,
+23418=>4621,
+12071=>4622,
+23424=>4622,
+23427=>4623,
+23462=>4624,
+23480=>4625,
+23491=>4626,
+23495=>4627,
+23497=>4628,
+23508=>4629,
+23504=>4630,
+23524=>4631,
+23526=>4632,
+23522=>4633,
+23518=>4634,
+23525=>4635,
+23531=>4636,
+23536=>4637,
+23542=>4638,
+23539=>4639,
+23557=>4640,
+23559=>4641,
+23560=>4642,
+23565=>4643,
+23571=>4644,
+23584=>4645,
+11920=>4646,
+12074=>4646,
+23586=>4646,
+23592=>4647,
+12075=>4648,
+23608=>4648,
+23609=>4649,
+23617=>4650,
+23622=>4651,
+23630=>4652,
+23635=>4653,
+23632=>4654,
+23631=>4655,
+23409=>4656,
+23660=>4657,
+12076=>4658,
+23662=>4658,
+20066=>4659,
+23670=>4660,
+23673=>4661,
+23692=>4662,
+23697=>4663,
+23700=>4664,
+22939=>4665,
+23723=>4666,
+23739=>4667,
+23734=>4668,
+23740=>4669,
+23735=>4670,
+23749=>4671,
+23742=>4672,
+23751=>4673,
+23769=>4674,
+23785=>4675,
+23805=>4676,
+23802=>4677,
+23789=>4678,
+23948=>4679,
+23786=>4680,
+23819=>4681,
+23829=>4682,
+23831=>4683,
+23900=>4684,
+23839=>4685,
+23835=>4686,
+23825=>4687,
+23828=>4688,
+23842=>4689,
+23834=>4690,
+23833=>4691,
+23832=>4692,
+23884=>4693,
+23890=>4694,
+23886=>4695,
+23883=>4696,
+23916=>4697,
+23923=>4698,
+23926=>4699,
+23943=>4700,
+23940=>4701,
+23938=>4702,
+23970=>4703,
+23965=>4704,
+23980=>4705,
+23982=>4706,
+23997=>4707,
+23952=>4708,
+23991=>4709,
+23996=>4710,
+24009=>4711,
+24013=>4712,
+24019=>4713,
+24018=>4714,
+24022=>4715,
+12078=>4716,
+24027=>4716,
+24043=>4717,
+24050=>4718,
+24053=>4719,
+24075=>4720,
+24090=>4721,
+24089=>4722,
+24081=>4723,
+24091=>4724,
+24118=>4725,
+24119=>4726,
+24132=>4727,
+24131=>4728,
+24128=>4729,
+24142=>4730,
+24151=>4731,
+24148=>4732,
+24159=>4733,
+24162=>4734,
+24164=>4735,
+24135=>4736,
+24181=>4737,
+24182=>4738,
+11923=>4739,
+12083=>4739,
+24186=>4739,
+40636=>4740,
+12084=>4741,
+24191=>4741,
+24224=>4742,
+24257=>4743,
+24258=>4744,
+24264=>4745,
+24272=>4746,
+24271=>4747,
+24278=>4748,
+24291=>4749,
+24285=>4750,
+24282=>4751,
+24283=>4752,
+24290=>4753,
+24289=>4754,
+24296=>4755,
+24297=>4756,
+24300=>4757,
+24305=>4758,
+24307=>4759,
+24304=>4760,
+12085=>4761,
+24308=>4761,
+24312=>4762,
+12086=>4763,
+24318=>4763,
+24323=>4764,
+24329=>4765,
+24413=>4766,
+24412=>4767,
+12087=>4768,
+24331=>4768,
+24337=>4769,
+24342=>4770,
+24361=>4771,
+24365=>4772,
+24376=>4773,
+24385=>4774,
+24392=>4775,
+24396=>4776,
+24398=>4777,
+24367=>4778,
+11924=>4779,
+24401=>4779,
+24406=>4780,
+24407=>4781,
+24409=>4782,
+12090=>4783,
+24417=>4783,
+24429=>4784,
+12091=>4785,
+24435=>4785,
+24439=>4786,
+24451=>4787,
+24450=>4788,
+24447=>4789,
+24458=>4790,
+24456=>4791,
+24465=>4792,
+24455=>4793,
+24478=>4794,
+24473=>4795,
+24472=>4796,
+24480=>4797,
+24488=>4798,
+24493=>4799,
+24508=>4800,
+24534=>4801,
+24571=>4802,
+24548=>4803,
+24568=>4804,
+24561=>4805,
+24541=>4806,
+24755=>4807,
+24575=>4808,
+24609=>4809,
+24672=>4810,
+24601=>4811,
+24592=>4812,
+24617=>4813,
+24590=>4814,
+24625=>4815,
+24603=>4816,
+24597=>4817,
+24619=>4818,
+24614=>4819,
+24591=>4820,
+24634=>4821,
+24666=>4822,
+24641=>4823,
+24682=>4824,
+24695=>4825,
+24671=>4826,
+24650=>4827,
+24646=>4828,
+24653=>4829,
+24675=>4830,
+24643=>4831,
+24676=>4832,
+24642=>4833,
+24684=>4834,
+24683=>4835,
+24665=>4836,
+24705=>4837,
+24717=>4838,
+24807=>4839,
+24707=>4840,
+24730=>4841,
+24708=>4842,
+24731=>4843,
+24726=>4844,
+24727=>4845,
+24722=>4846,
+24743=>4847,
+24715=>4848,
+24801=>4849,
+24760=>4850,
+24800=>4851,
+24787=>4852,
+24756=>4853,
+24560=>4854,
+24765=>4855,
+24774=>4856,
+24757=>4857,
+24792=>4858,
+24909=>4859,
+24853=>4860,
+24838=>4861,
+24822=>4862,
+24823=>4863,
+24832=>4864,
+24820=>4865,
+24826=>4866,
+24835=>4867,
+24865=>4868,
+24827=>4869,
+24817=>4870,
+24845=>4871,
+24846=>4872,
+24903=>4873,
+24894=>4874,
+24872=>4875,
+24871=>4876,
+24906=>4877,
+24895=>4878,
+24892=>4879,
+24876=>4880,
+24884=>4881,
+24893=>4882,
+24898=>4883,
+24900=>4884,
+24947=>4885,
+24951=>4886,
+24920=>4887,
+24921=>4888,
+24922=>4889,
+24939=>4890,
+24948=>4891,
+24943=>4892,
+24933=>4893,
+24945=>4894,
+24927=>4895,
+24925=>4896,
+24915=>4897,
+24949=>4898,
+24985=>4899,
+24982=>4900,
+24967=>4901,
+25004=>4902,
+24980=>4903,
+24986=>4904,
+24970=>4905,
+24977=>4906,
+25003=>4907,
+25006=>4908,
+25036=>4909,
+25034=>4910,
+25033=>4911,
+25079=>4912,
+25032=>4913,
+25027=>4914,
+25030=>4915,
+25018=>4916,
+25035=>4917,
+32633=>4918,
+25037=>4919,
+25062=>4920,
+25059=>4921,
+25078=>4922,
+25082=>4923,
+25076=>4924,
+25087=>4925,
+25085=>4926,
+25084=>4927,
+25086=>4928,
+25088=>4929,
+12093=>4930,
+25096=>4930,
+25097=>4931,
+25101=>4932,
+25100=>4933,
+25108=>4934,
+25115=>4935,
+25118=>4936,
+25121=>4937,
+25130=>4938,
+25134=>4939,
+25136=>4940,
+25138=>4941,
+25139=>4942,
+25153=>4943,
+25166=>4944,
+25182=>4945,
+25187=>4946,
+25179=>4947,
+25184=>4948,
+25192=>4949,
+25212=>4950,
+25218=>4951,
+25225=>4952,
+25214=>4953,
+25234=>4954,
+25235=>4955,
+25238=>4956,
+25300=>4957,
+25219=>4958,
+25236=>4959,
+25303=>4960,
+25297=>4961,
+25275=>4962,
+25295=>4963,
+25343=>4964,
+25286=>4965,
+25812=>4966,
+25288=>4967,
+25308=>4968,
+25292=>4969,
+25290=>4970,
+25282=>4971,
+25287=>4972,
+25243=>4973,
+25289=>4974,
+25356=>4975,
+25326=>4976,
+25329=>4977,
+25383=>4978,
+25346=>4979,
+25352=>4980,
+25327=>4981,
+25333=>4982,
+25424=>4983,
+25406=>4984,
+25421=>4985,
+25628=>4986,
+25423=>4987,
+25494=>4988,
+25486=>4989,
+25472=>4990,
+25515=>4991,
+25462=>4992,
+25507=>4993,
+25487=>4994,
+25481=>4995,
+25503=>4996,
+25525=>4997,
+25451=>4998,
+25449=>4999,
+25534=>5000,
+25577=>5001,
+25536=>5002,
+25542=>5003,
+25571=>5004,
+25545=>5005,
+25554=>5006,
+25590=>5007,
+25540=>5008,
+25622=>5009,
+25652=>5010,
+25606=>5011,
+25619=>5012,
+25638=>5013,
+25654=>5014,
+25885=>5015,
+25623=>5016,
+25640=>5017,
+25615=>5018,
+25703=>5019,
+25711=>5020,
+25718=>5021,
+25678=>5022,
+25898=>5023,
+25749=>5024,
+25747=>5025,
+25765=>5026,
+25769=>5027,
+25736=>5028,
+25788=>5029,
+25818=>5030,
+25810=>5031,
+25797=>5032,
+25799=>5033,
+25787=>5034,
+25816=>5035,
+25794=>5036,
+25841=>5037,
+25831=>5038,
+33289=>5039,
+25824=>5040,
+25825=>5041,
+25260=>5042,
+25827=>5043,
+25839=>5044,
+25900=>5045,
+25846=>5046,
+25844=>5047,
+25842=>5048,
+25850=>5049,
+25856=>5050,
+25853=>5051,
+25880=>5052,
+25884=>5053,
+25861=>5054,
+25892=>5055,
+25891=>5056,
+25899=>5057,
+12097=>5058,
+25908=>5058,
+11929=>5059,
+25909=>5059,
+25911=>5060,
+25910=>5061,
+25912=>5062,
+30027=>5063,
+25928=>5064,
+25942=>5065,
+25941=>5066,
+25933=>5067,
+25944=>5068,
+25950=>5069,
+25949=>5070,
+25970=>5071,
+25976=>5072,
+25986=>5073,
+25987=>5074,
+35722=>5075,
+26011=>5076,
+26015=>5077,
+26027=>5078,
+26039=>5079,
+26051=>5080,
+26054=>5081,
+26049=>5082,
+26052=>5083,
+26060=>5084,
+26066=>5085,
+26075=>5086,
+26073=>5087,
+12102=>5088,
+26080=>5088,
+11931=>5089,
+26081=>5089,
+26097=>5090,
+26482=>5091,
+26122=>5092,
+26115=>5093,
+26107=>5094,
+26483=>5095,
+26165=>5096,
+26166=>5097,
+26164=>5098,
+26140=>5099,
+26191=>5100,
+26180=>5101,
+26185=>5102,
+26177=>5103,
+26206=>5104,
+26205=>5105,
+26212=>5106,
+26215=>5107,
+26216=>5108,
+26207=>5109,
+26210=>5110,
+26224=>5111,
+26243=>5112,
+26248=>5113,
+26254=>5114,
+26249=>5115,
+26244=>5116,
+26264=>5117,
+26269=>5118,
+26305=>5119,
+26297=>5120,
+26313=>5121,
+26302=>5122,
+26300=>5123,
+26308=>5124,
+26296=>5125,
+26326=>5126,
+26330=>5127,
+26336=>5128,
+26175=>5129,
+26342=>5130,
+26345=>5131,
+12104=>5132,
+26352=>5132,
+26357=>5133,
+26359=>5134,
+26383=>5135,
+26390=>5136,
+26398=>5137,
+26406=>5138,
+26407=>5139,
+38712=>5140,
+26414=>5141,
+26431=>5142,
+26422=>5143,
+26433=>5144,
+26424=>5145,
+26423=>5146,
+26438=>5147,
+26462=>5148,
+26464=>5149,
+26457=>5150,
+26467=>5151,
+26468=>5152,
+26505=>5153,
+26480=>5154,
+26537=>5155,
+26492=>5156,
+26474=>5157,
+26508=>5158,
+26507=>5159,
+26534=>5160,
+26529=>5161,
+26501=>5162,
+26551=>5163,
+26607=>5164,
+26548=>5165,
+26604=>5166,
+26547=>5167,
+26601=>5168,
+26552=>5169,
+26596=>5170,
+26590=>5171,
+26589=>5172,
+26594=>5173,
+26606=>5174,
+26553=>5175,
+26574=>5176,
+26566=>5177,
+26599=>5178,
+27292=>5179,
+26654=>5180,
+26694=>5181,
+26665=>5182,
+26688=>5183,
+26701=>5184,
+26674=>5185,
+26702=>5186,
+26803=>5187,
+26667=>5188,
+26713=>5189,
+26723=>5190,
+26743=>5191,
+26751=>5192,
+26783=>5193,
+26767=>5194,
+26797=>5195,
+26772=>5196,
+26781=>5197,
+26779=>5198,
+26755=>5199,
+27310=>5200,
+26809=>5201,
+26740=>5202,
+26805=>5203,
+26784=>5204,
+26810=>5205,
+26895=>5206,
+26765=>5207,
+26750=>5208,
+26881=>5209,
+26826=>5210,
+26888=>5211,
+26840=>5212,
+26914=>5213,
+26918=>5214,
+26849=>5215,
+26892=>5216,
+26829=>5217,
+26836=>5218,
+26855=>5219,
+26837=>5220,
+26934=>5221,
+26898=>5222,
+26884=>5223,
+26839=>5224,
+26851=>5225,
+26917=>5226,
+26873=>5227,
+26848=>5228,
+26863=>5229,
+26920=>5230,
+26922=>5231,
+26906=>5232,
+26915=>5233,
+26913=>5234,
+26822=>5235,
+27001=>5236,
+26999=>5237,
+26972=>5238,
+27000=>5239,
+26987=>5240,
+26964=>5241,
+27006=>5242,
+26990=>5243,
+26937=>5244,
+26996=>5245,
+26941=>5246,
+26969=>5247,
+26928=>5248,
+26977=>5249,
+26974=>5250,
+26973=>5251,
+27009=>5252,
+26986=>5253,
+27058=>5254,
+27054=>5255,
+27088=>5256,
+27071=>5257,
+27073=>5258,
+27091=>5259,
+27070=>5260,
+27086=>5261,
+23528=>5262,
+27082=>5263,
+27101=>5264,
+27067=>5265,
+27075=>5266,
+27047=>5267,
+27182=>5268,
+27025=>5269,
+27040=>5270,
+27036=>5271,
+27029=>5272,
+27060=>5273,
+27102=>5274,
+27112=>5275,
+27138=>5276,
+27163=>5277,
+27135=>5278,
+27402=>5279,
+27129=>5280,
+27122=>5281,
+27111=>5282,
+27141=>5283,
+27057=>5284,
+27166=>5285,
+27117=>5286,
+27156=>5287,
+27115=>5288,
+27146=>5289,
+27154=>5290,
+27329=>5291,
+27171=>5292,
+27155=>5293,
+27204=>5294,
+27148=>5295,
+27250=>5296,
+27190=>5297,
+27256=>5298,
+27207=>5299,
+27234=>5300,
+27225=>5301,
+27238=>5302,
+27208=>5303,
+27192=>5304,
+27170=>5305,
+27280=>5306,
+27277=>5307,
+27296=>5308,
+27268=>5309,
+27298=>5310,
+27299=>5311,
+27287=>5312,
+34327=>5313,
+27323=>5314,
+27331=>5315,
+27330=>5316,
+27320=>5317,
+27315=>5318,
+27308=>5319,
+27358=>5320,
+27345=>5321,
+27359=>5322,
+27306=>5323,
+27354=>5324,
+27370=>5325,
+27387=>5326,
+27397=>5327,
+34326=>5328,
+27386=>5329,
+27410=>5330,
+27414=>5331,
+39729=>5332,
+27423=>5333,
+27448=>5334,
+27447=>5335,
+30428=>5336,
+27449=>5337,
+39150=>5338,
+27463=>5339,
+27459=>5340,
+27465=>5341,
+27472=>5342,
+27481=>5343,
+27476=>5344,
+27483=>5345,
+27487=>5346,
+27489=>5347,
+27512=>5348,
+12109=>5349,
+27513=>5349,
+27519=>5350,
+27520=>5351,
+27524=>5352,
+27523=>5353,
+27533=>5354,
+27544=>5355,
+27541=>5356,
+27550=>5357,
+27556=>5358,
+27562=>5359,
+27563=>5360,
+27567=>5361,
+27570=>5362,
+27569=>5363,
+12110=>5364,
+27571=>5364,
+27575=>5365,
+27580=>5366,
+27590=>5367,
+12111=>5368,
+27595=>5368,
+27603=>5369,
+27615=>5370,
+27628=>5371,
+27627=>5372,
+27635=>5373,
+27631=>5374,
+40638=>5375,
+27656=>5376,
+27667=>5377,
+12115=>5378,
+27668=>5378,
+27675=>5379,
+27684=>5380,
+27683=>5381,
+27742=>5382,
+27733=>5383,
+27746=>5384,
+27754=>5385,
+27778=>5386,
+27789=>5387,
+27802=>5388,
+27777=>5389,
+27803=>5390,
+27774=>5391,
+27752=>5392,
+27763=>5393,
+27794=>5394,
+27792=>5395,
+27844=>5396,
+27889=>5397,
+27859=>5398,
+27837=>5399,
+27863=>5400,
+27845=>5401,
+27869=>5402,
+27822=>5403,
+27825=>5404,
+27838=>5405,
+27834=>5406,
+27867=>5407,
+27887=>5408,
+27865=>5409,
+27882=>5410,
+27935=>5411,
+34893=>5412,
+27958=>5413,
+27947=>5414,
+27965=>5415,
+27960=>5416,
+27929=>5417,
+27957=>5418,
+27955=>5419,
+27922=>5420,
+27916=>5421,
+28003=>5422,
+28051=>5423,
+28004=>5424,
+27994=>5425,
+28025=>5426,
+27993=>5427,
+28046=>5428,
+28053=>5429,
+28644=>5430,
+28037=>5431,
+28153=>5432,
+28181=>5433,
+28170=>5434,
+28085=>5435,
+28103=>5436,
+28134=>5437,
+28088=>5438,
+28102=>5439,
+28140=>5440,
+28126=>5441,
+28108=>5442,
+28136=>5443,
+28114=>5444,
+28101=>5445,
+28154=>5446,
+28121=>5447,
+28132=>5448,
+28117=>5449,
+28138=>5450,
+28142=>5451,
+28205=>5452,
+28270=>5453,
+28206=>5454,
+28185=>5455,
+28274=>5456,
+28255=>5457,
+28222=>5458,
+28195=>5459,
+28267=>5460,
+28203=>5461,
+28278=>5462,
+28237=>5463,
+28191=>5464,
+28227=>5465,
+28218=>5466,
+28238=>5467,
+28196=>5468,
+28415=>5469,
+28189=>5470,
+28216=>5471,
+28290=>5472,
+28330=>5473,
+28312=>5474,
+28361=>5475,
+28343=>5476,
+28371=>5477,
+28349=>5478,
+28335=>5479,
+28356=>5480,
+28338=>5481,
+28372=>5482,
+28373=>5483,
+28303=>5484,
+28325=>5485,
+28354=>5486,
+28319=>5487,
+28481=>5488,
+28433=>5489,
+28748=>5490,
+28396=>5491,
+28408=>5492,
+28414=>5493,
+28479=>5494,
+28402=>5495,
+28465=>5496,
+28399=>5497,
+28466=>5498,
+28364=>5499,
+28478=>5500,
+28435=>5501,
+28407=>5502,
+28550=>5503,
+28538=>5504,
+28536=>5505,
+28545=>5506,
+28544=>5507,
+28527=>5508,
+28507=>5509,
+28659=>5510,
+28525=>5511,
+28546=>5512,
+28540=>5513,
+28504=>5514,
+28558=>5515,
+28561=>5516,
+28610=>5517,
+28518=>5518,
+28595=>5519,
+28579=>5520,
+28577=>5521,
+28580=>5522,
+28601=>5523,
+28614=>5524,
+28586=>5525,
+28639=>5526,
+28629=>5527,
+28652=>5528,
+28628=>5529,
+28632=>5530,
+28657=>5531,
+28654=>5532,
+28635=>5533,
+28681=>5534,
+28683=>5535,
+28666=>5536,
+28689=>5537,
+28673=>5538,
+28687=>5539,
+28670=>5540,
+28699=>5541,
+28698=>5542,
+28532=>5543,
+28701=>5544,
+28696=>5545,
+28703=>5546,
+28720=>5547,
+28734=>5548,
+28722=>5549,
+28753=>5550,
+28771=>5551,
+28825=>5552,
+28818=>5553,
+28847=>5554,
+28913=>5555,
+28844=>5556,
+28856=>5557,
+28851=>5558,
+28846=>5559,
+28895=>5560,
+28875=>5561,
+28893=>5562,
+28889=>5563,
+28937=>5564,
+28925=>5565,
+28956=>5566,
+28953=>5567,
+29029=>5568,
+29013=>5569,
+29064=>5570,
+29030=>5571,
+29026=>5572,
+29004=>5573,
+29014=>5574,
+29036=>5575,
+29071=>5576,
+29179=>5577,
+29060=>5578,
+29077=>5579,
+29096=>5580,
+29100=>5581,
+29143=>5582,
+29113=>5583,
+29118=>5584,
+29138=>5585,
+29129=>5586,
+29140=>5587,
+29134=>5588,
+29152=>5589,
+29164=>5590,
+29159=>5591,
+29173=>5592,
+29180=>5593,
+29177=>5594,
+29183=>5595,
+29197=>5596,
+29200=>5597,
+29211=>5598,
+29224=>5599,
+29229=>5600,
+29228=>5601,
+29232=>5602,
+29234=>5603,
+12120=>5604,
+29243=>5604,
+29244=>5605,
+12121=>5606,
+29247=>5606,
+29248=>5607,
+29254=>5608,
+29259=>5609,
+29272=>5610,
+29300=>5611,
+29310=>5612,
+29314=>5613,
+29313=>5614,
+29319=>5615,
+29330=>5616,
+29334=>5617,
+29346=>5618,
+29351=>5619,
+29369=>5620,
+29362=>5621,
+29379=>5622,
+29382=>5623,
+29380=>5624,
+29390=>5625,
+29394=>5626,
+29410=>5627,
+29408=>5628,
+29409=>5629,
+29433=>5630,
+29431=>5631,
+20495=>5632,
+29463=>5633,
+29450=>5634,
+29468=>5635,
+29462=>5636,
+29469=>5637,
+29492=>5638,
+29487=>5639,
+29481=>5640,
+29477=>5641,
+29502=>5642,
+29518=>5643,
+29519=>5644,
+40664=>5645,
+29527=>5646,
+29546=>5647,
+29544=>5648,
+29552=>5649,
+29560=>5650,
+29557=>5651,
+29563=>5652,
+29562=>5653,
+29640=>5654,
+29619=>5655,
+29646=>5656,
+29627=>5657,
+29632=>5658,
+29669=>5659,
+29678=>5660,
+29662=>5661,
+29858=>5662,
+29701=>5663,
+29807=>5664,
+29733=>5665,
+29688=>5666,
+29746=>5667,
+29754=>5668,
+29781=>5669,
+29759=>5670,
+29791=>5671,
+29785=>5672,
+29761=>5673,
+29788=>5674,
+29801=>5675,
+29808=>5676,
+29795=>5677,
+29802=>5678,
+29814=>5679,
+29822=>5680,
+29835=>5681,
+29854=>5682,
+29863=>5683,
+29898=>5684,
+29903=>5685,
+29908=>5686,
+29681=>5687,
+29920=>5688,
+29923=>5689,
+29927=>5690,
+29929=>5691,
+29934=>5692,
+29938=>5693,
+29936=>5694,
+29937=>5695,
+29944=>5696,
+29943=>5697,
+29956=>5698,
+29955=>5699,
+29957=>5700,
+29964=>5701,
+29966=>5702,
+29965=>5703,
+29973=>5704,
+29971=>5705,
+29982=>5706,
+29990=>5707,
+29996=>5708,
+30012=>5709,
+30020=>5710,
+30029=>5711,
+30026=>5712,
+30025=>5713,
+30043=>5714,
+30022=>5715,
+30042=>5716,
+30057=>5717,
+30052=>5718,
+30055=>5719,
+30059=>5720,
+30061=>5721,
+30072=>5722,
+30070=>5723,
+30086=>5724,
+30087=>5725,
+30068=>5726,
+30090=>5727,
+30089=>5728,
+30082=>5729,
+30100=>5730,
+30106=>5731,
+30109=>5732,
+30117=>5733,
+30115=>5734,
+30146=>5735,
+30131=>5736,
+30147=>5737,
+30133=>5738,
+30141=>5739,
+30136=>5740,
+30140=>5741,
+30129=>5742,
+30157=>5743,
+30154=>5744,
+30162=>5745,
+30169=>5746,
+30179=>5747,
+30174=>5748,
+30206=>5749,
+30207=>5750,
+30204=>5751,
+30209=>5752,
+30192=>5753,
+30202=>5754,
+30194=>5755,
+30195=>5756,
+30219=>5757,
+30221=>5758,
+30217=>5759,
+30239=>5760,
+30247=>5761,
+30240=>5762,
+30241=>5763,
+30242=>5764,
+30244=>5765,
+30260=>5766,
+30256=>5767,
+30267=>5768,
+30279=>5769,
+30280=>5770,
+30278=>5771,
+30300=>5772,
+30296=>5773,
+30305=>5774,
+30306=>5775,
+30312=>5776,
+30313=>5777,
+30314=>5778,
+30311=>5779,
+30316=>5780,
+30320=>5781,
+30322=>5782,
+12136=>5783,
+30326=>5783,
+30328=>5784,
+30332=>5785,
+30336=>5786,
+30339=>5787,
+30344=>5788,
+30347=>5789,
+30350=>5790,
+30358=>5791,
+30355=>5792,
+30361=>5793,
+30362=>5794,
+30384=>5795,
+30388=>5796,
+30392=>5797,
+30393=>5798,
+30394=>5799,
+30402=>5800,
+30413=>5801,
+30422=>5802,
+30418=>5803,
+30430=>5804,
+30433=>5805,
+30437=>5806,
+30439=>5807,
+30442=>5808,
+34351=>5809,
+30459=>5810,
+30472=>5811,
+30471=>5812,
+30468=>5813,
+30505=>5814,
+30500=>5815,
+30494=>5816,
+30501=>5817,
+30502=>5818,
+30491=>5819,
+30519=>5820,
+30520=>5821,
+30535=>5822,
+30554=>5823,
+30568=>5824,
+30571=>5825,
+30555=>5826,
+30565=>5827,
+30591=>5828,
+30590=>5829,
+30585=>5830,
+30606=>5831,
+30603=>5832,
+30609=>5833,
+30624=>5834,
+30622=>5835,
+30640=>5836,
+30646=>5837,
+30649=>5838,
+30655=>5839,
+30652=>5840,
+30653=>5841,
+30651=>5842,
+30663=>5843,
+30669=>5844,
+30679=>5845,
+30682=>5846,
+30684=>5847,
+30691=>5848,
+30702=>5849,
+30716=>5850,
+30732=>5851,
+30738=>5852,
+31014=>5853,
+30752=>5854,
+31018=>5855,
+30789=>5856,
+30862=>5857,
+30836=>5858,
+30854=>5859,
+30844=>5860,
+30874=>5861,
+30860=>5862,
+30883=>5863,
+30901=>5864,
+30890=>5865,
+30895=>5866,
+30929=>5867,
+30918=>5868,
+30923=>5869,
+30932=>5870,
+30910=>5871,
+30908=>5872,
+30917=>5873,
+30922=>5874,
+30956=>5875,
+30951=>5876,
+30938=>5877,
+30973=>5878,
+30964=>5879,
+30983=>5880,
+30994=>5881,
+30993=>5882,
+31001=>5883,
+31020=>5884,
+31019=>5885,
+31040=>5886,
+31072=>5887,
+31063=>5888,
+31071=>5889,
+31066=>5890,
+31061=>5891,
+31059=>5892,
+31098=>5893,
+31103=>5894,
+31114=>5895,
+31133=>5896,
+31143=>5897,
+40779=>5898,
+31146=>5899,
+31150=>5900,
+31155=>5901,
+31161=>5902,
+31162=>5903,
+31177=>5904,
+31189=>5905,
+31207=>5906,
+31212=>5907,
+31201=>5908,
+31203=>5909,
+31240=>5910,
+31245=>5911,
+31256=>5912,
+31257=>5913,
+31264=>5914,
+31263=>5915,
+31104=>5916,
+31281=>5917,
+31291=>5918,
+31294=>5919,
+31287=>5920,
+31299=>5921,
+31319=>5922,
+31305=>5923,
+31329=>5924,
+31330=>5925,
+31337=>5926,
+40861=>5927,
+31344=>5928,
+31353=>5929,
+31357=>5930,
+31368=>5931,
+31383=>5932,
+31381=>5933,
+31384=>5934,
+31382=>5935,
+31401=>5936,
+31432=>5937,
+31408=>5938,
+31414=>5939,
+31429=>5940,
+31428=>5941,
+31423=>5942,
+36995=>5943,
+31431=>5944,
+31434=>5945,
+31437=>5946,
+31439=>5947,
+31445=>5948,
+31443=>5949,
+31449=>5950,
+31450=>5951,
+31453=>5952,
+31457=>5953,
+31458=>5954,
+31462=>5955,
+31469=>5956,
+31472=>5957,
+31490=>5958,
+31503=>5959,
+31498=>5960,
+31494=>5961,
+31539=>5962,
+31512=>5963,
+31513=>5964,
+31518=>5965,
+31541=>5966,
+31528=>5967,
+31542=>5968,
+31568=>5969,
+31610=>5970,
+31492=>5971,
+31565=>5972,
+31499=>5973,
+31564=>5974,
+31557=>5975,
+31605=>5976,
+31589=>5977,
+31604=>5978,
+31591=>5979,
+31600=>5980,
+31601=>5981,
+31596=>5982,
+31598=>5983,
+31645=>5984,
+31640=>5985,
+31647=>5986,
+31629=>5987,
+31644=>5988,
+31642=>5989,
+31627=>5990,
+31634=>5991,
+31631=>5992,
+31581=>5993,
+31641=>5994,
+31691=>5995,
+31681=>5996,
+31692=>5997,
+31695=>5998,
+31668=>5999,
+31686=>6000,
+31709=>6001,
+31721=>6002,
+31761=>6003,
+31764=>6004,
+31718=>6005,
+31717=>6006,
+31840=>6007,
+31744=>6008,
+31751=>6009,
+31763=>6010,
+31731=>6011,
+31735=>6012,
+31767=>6013,
+31757=>6014,
+31734=>6015,
+31779=>6016,
+31783=>6017,
+31786=>6018,
+31775=>6019,
+31799=>6020,
+31787=>6021,
+31805=>6022,
+31820=>6023,
+31811=>6024,
+31828=>6025,
+31823=>6026,
+31808=>6027,
+31824=>6028,
+31832=>6029,
+31839=>6030,
+31844=>6031,
+31830=>6032,
+31845=>6033,
+31852=>6034,
+31861=>6035,
+31875=>6036,
+31888=>6037,
+31908=>6038,
+31917=>6039,
+31906=>6040,
+31915=>6041,
+31905=>6042,
+31912=>6043,
+31923=>6044,
+31922=>6045,
+31921=>6046,
+31918=>6047,
+31929=>6048,
+31933=>6049,
+31936=>6050,
+31941=>6051,
+31938=>6052,
+31960=>6053,
+31954=>6054,
+31964=>6055,
+31970=>6056,
+39739=>6057,
+31983=>6058,
+31986=>6059,
+31988=>6060,
+31990=>6061,
+31994=>6062,
+32006=>6063,
+32002=>6064,
+32028=>6065,
+32021=>6066,
+32010=>6067,
+32069=>6068,
+32075=>6069,
+32046=>6070,
+32050=>6071,
+32063=>6072,
+32053=>6073,
+32070=>6074,
+32115=>6075,
+32086=>6076,
+32078=>6077,
+32114=>6078,
+32104=>6079,
+32110=>6080,
+32079=>6081,
+32099=>6082,
+32147=>6083,
+32137=>6084,
+32091=>6085,
+32143=>6086,
+32125=>6087,
+32155=>6088,
+32186=>6089,
+32174=>6090,
+32163=>6091,
+32181=>6092,
+32199=>6093,
+32189=>6094,
+32171=>6095,
+32317=>6096,
+32162=>6097,
+32175=>6098,
+32220=>6099,
+32184=>6100,
+32159=>6101,
+32176=>6102,
+32216=>6103,
+32221=>6104,
+32228=>6105,
+32222=>6106,
+32251=>6107,
+32242=>6108,
+32225=>6109,
+32261=>6110,
+32266=>6111,
+32291=>6112,
+32289=>6113,
+32274=>6114,
+32305=>6115,
+32287=>6116,
+32265=>6117,
+32267=>6118,
+32290=>6119,
+32326=>6120,
+32358=>6121,
+32315=>6122,
+32309=>6123,
+32313=>6124,
+32323=>6125,
+32311=>6126,
+32306=>6127,
+32314=>6128,
+32359=>6129,
+32349=>6130,
+32342=>6131,
+32350=>6132,
+32345=>6133,
+32346=>6134,
+32377=>6135,
+32362=>6136,
+32361=>6137,
+32380=>6138,
+32379=>6139,
+32387=>6140,
+32213=>6141,
+32381=>6142,
+36782=>6143,
+32383=>6144,
+32392=>6145,
+32393=>6146,
+32396=>6147,
+32402=>6148,
+32400=>6149,
+32403=>6150,
+32404=>6151,
+32406=>6152,
+32398=>6153,
+32411=>6154,
+32412=>6155,
+32568=>6156,
+32570=>6157,
+32581=>6158,
+32588=>6159,
+32589=>6160,
+32590=>6161,
+32592=>6162,
+12153=>6163,
+32593=>6163,
+32597=>6164,
+32596=>6165,
+32600=>6166,
+32607=>6167,
+32608=>6168,
+32616=>6169,
+32617=>6170,
+32615=>6171,
+32632=>6172,
+32642=>6173,
+32646=>6174,
+32643=>6175,
+32648=>6176,
+32647=>6177,
+32652=>6178,
+32660=>6179,
+32670=>6180,
+32669=>6181,
+32666=>6182,
+32675=>6183,
+32687=>6184,
+32690=>6185,
+32697=>6186,
+32686=>6187,
+32694=>6188,
+32696=>6189,
+35697=>6190,
+32709=>6191,
+32710=>6192,
+32714=>6193,
+32725=>6194,
+32724=>6195,
+32737=>6196,
+32742=>6197,
+32745=>6198,
+32755=>6199,
+32761=>6200,
+39132=>6201,
+32774=>6202,
+32772=>6203,
+32779=>6204,
+12158=>6205,
+32786=>6205,
+32792=>6206,
+32793=>6207,
+32796=>6208,
+32801=>6209,
+32808=>6210,
+32831=>6211,
+32827=>6212,
+32842=>6213,
+32838=>6214,
+32850=>6215,
+32856=>6216,
+32858=>6217,
+32863=>6218,
+32866=>6219,
+32872=>6220,
+32883=>6221,
+32882=>6222,
+32880=>6223,
+32886=>6224,
+32889=>6225,
+32893=>6226,
+12160=>6227,
+32895=>6227,
+32900=>6228,
+32902=>6229,
+32901=>6230,
+32923=>6231,
+32915=>6232,
+32922=>6233,
+32941=>6234,
+20880=>6235,
+32940=>6236,
+32987=>6237,
+32997=>6238,
+32985=>6239,
+32989=>6240,
+32964=>6241,
+32986=>6242,
+32982=>6243,
+33033=>6244,
+33007=>6245,
+33009=>6246,
+33051=>6247,
+33065=>6248,
+33059=>6249,
+33071=>6250,
+33099=>6251,
+38539=>6252,
+33094=>6253,
+33086=>6254,
+33107=>6255,
+33105=>6256,
+33020=>6257,
+33137=>6258,
+33134=>6259,
+33125=>6260,
+33126=>6261,
+33140=>6262,
+33155=>6263,
+33160=>6264,
+33162=>6265,
+33152=>6266,
+33154=>6267,
+33184=>6268,
+33173=>6269,
+33188=>6270,
+33187=>6271,
+33119=>6272,
+33171=>6273,
+33193=>6274,
+33200=>6275,
+33205=>6276,
+33214=>6277,
+33208=>6278,
+33213=>6279,
+33216=>6280,
+33218=>6281,
+33210=>6282,
+33225=>6283,
+33229=>6284,
+33233=>6285,
+33241=>6286,
+33240=>6287,
+33224=>6288,
+33242=>6289,
+33247=>6290,
+33248=>6291,
+33255=>6292,
+33274=>6293,
+33275=>6294,
+33278=>6295,
+33281=>6296,
+33282=>6297,
+33285=>6298,
+33287=>6299,
+33290=>6300,
+33293=>6301,
+33296=>6302,
+33302=>6303,
+33321=>6304,
+33323=>6305,
+33336=>6306,
+33331=>6307,
+33344=>6308,
+33369=>6309,
+33368=>6310,
+33373=>6311,
+33370=>6312,
+33375=>6313,
+33380=>6314,
+33378=>6315,
+33384=>6316,
+33386=>6317,
+33387=>6318,
+33326=>6319,
+33393=>6320,
+33399=>6321,
+12171=>6322,
+33400=>6322,
+33406=>6323,
+33421=>6324,
+33426=>6325,
+33451=>6326,
+33439=>6327,
+33467=>6328,
+33452=>6329,
+33505=>6330,
+33507=>6331,
+33503=>6332,
+33490=>6333,
+33524=>6334,
+33523=>6335,
+33530=>6336,
+33683=>6337,
+33539=>6338,
+33531=>6339,
+33529=>6340,
+33502=>6341,
+33542=>6342,
+33500=>6343,
+33545=>6344,
+33497=>6345,
+33589=>6346,
+33588=>6347,
+33558=>6348,
+33586=>6349,
+33585=>6350,
+33600=>6351,
+33593=>6352,
+33616=>6353,
+33605=>6354,
+33583=>6355,
+33579=>6356,
+33559=>6357,
+33560=>6358,
+33669=>6359,
+33690=>6360,
+33706=>6361,
+33695=>6362,
+33698=>6363,
+33686=>6364,
+33571=>6365,
+33678=>6366,
+33671=>6367,
+33674=>6368,
+33660=>6369,
+33717=>6370,
+33651=>6371,
+33653=>6372,
+33696=>6373,
+33673=>6374,
+33704=>6375,
+33780=>6376,
+33811=>6377,
+33771=>6378,
+33742=>6379,
+33789=>6380,
+33795=>6381,
+33752=>6382,
+33803=>6383,
+33729=>6384,
+33783=>6385,
+33799=>6386,
+33760=>6387,
+33778=>6388,
+33805=>6389,
+33826=>6390,
+33824=>6391,
+33725=>6392,
+33848=>6393,
+34054=>6394,
+33787=>6395,
+33901=>6396,
+33834=>6397,
+33852=>6398,
+34138=>6399,
+33924=>6400,
+33911=>6401,
+33899=>6402,
+33965=>6403,
+33902=>6404,
+33922=>6405,
+33897=>6406,
+33862=>6407,
+33836=>6408,
+33903=>6409,
+33913=>6410,
+33845=>6411,
+33994=>6412,
+33890=>6413,
+33977=>6414,
+33983=>6415,
+33951=>6416,
+34009=>6417,
+33997=>6418,
+33979=>6419,
+34010=>6420,
+34000=>6421,
+33985=>6422,
+33990=>6423,
+34006=>6424,
+33953=>6425,
+34081=>6426,
+34047=>6427,
+34036=>6428,
+34071=>6429,
+34072=>6430,
+34092=>6431,
+34079=>6432,
+34069=>6433,
+34068=>6434,
+34044=>6435,
+34112=>6436,
+34147=>6437,
+34136=>6438,
+34120=>6439,
+34113=>6440,
+34306=>6441,
+34123=>6442,
+34133=>6443,
+34176=>6444,
+34212=>6445,
+34184=>6446,
+34193=>6447,
+34186=>6448,
+34216=>6449,
+34157=>6450,
+34196=>6451,
+34203=>6452,
+34282=>6453,
+34183=>6454,
+34204=>6455,
+34167=>6456,
+34174=>6457,
+34192=>6458,
+34249=>6459,
+34234=>6460,
+34255=>6461,
+34233=>6462,
+34256=>6463,
+34261=>6464,
+34269=>6465,
+34277=>6466,
+34268=>6467,
+34297=>6468,
+34314=>6469,
+34323=>6470,
+34315=>6471,
+34302=>6472,
+34298=>6473,
+34310=>6474,
+34338=>6475,
+34330=>6476,
+34352=>6477,
+34367=>6478,
+12172=>6479,
+34381=>6479,
+20053=>6480,
+34388=>6481,
+34399=>6482,
+34407=>6483,
+34417=>6484,
+34451=>6485,
+34467=>6486,
+34473=>6487,
+34474=>6488,
+34443=>6489,
+34444=>6490,
+34486=>6491,
+34479=>6492,
+34500=>6493,
+34502=>6494,
+34480=>6495,
+34505=>6496,
+34851=>6497,
+34475=>6498,
+34516=>6499,
+34526=>6500,
+34537=>6501,
+34540=>6502,
+34527=>6503,
+34523=>6504,
+34543=>6505,
+34578=>6506,
+34566=>6507,
+34568=>6508,
+34560=>6509,
+34563=>6510,
+34555=>6511,
+34577=>6512,
+34569=>6513,
+34573=>6514,
+34553=>6515,
+34570=>6516,
+34612=>6517,
+34623=>6518,
+34615=>6519,
+34619=>6520,
+34597=>6521,
+34601=>6522,
+34586=>6523,
+34656=>6524,
+34655=>6525,
+34680=>6526,
+34636=>6527,
+34638=>6528,
+34676=>6529,
+34647=>6530,
+34664=>6531,
+34670=>6532,
+34649=>6533,
+34643=>6534,
+34659=>6535,
+34666=>6536,
+34821=>6537,
+34722=>6538,
+34719=>6539,
+34690=>6540,
+34735=>6541,
+34763=>6542,
+34749=>6543,
+34752=>6544,
+34768=>6545,
+38614=>6546,
+34731=>6547,
+34756=>6548,
+34739=>6549,
+34759=>6550,
+34758=>6551,
+34747=>6552,
+34799=>6553,
+34802=>6554,
+34784=>6555,
+34831=>6556,
+34829=>6557,
+34814=>6558,
+34806=>6559,
+34807=>6560,
+34830=>6561,
+34770=>6562,
+34833=>6563,
+34838=>6564,
+34837=>6565,
+34850=>6566,
+34849=>6567,
+34865=>6568,
+34870=>6569,
+34873=>6570,
+34855=>6571,
+34875=>6572,
+34884=>6573,
+34882=>6574,
+34898=>6575,
+34905=>6576,
+34910=>6577,
+34914=>6578,
+34923=>6579,
+34945=>6580,
+34942=>6581,
+34974=>6582,
+34933=>6583,
+34941=>6584,
+34997=>6585,
+34930=>6586,
+34946=>6587,
+34967=>6588,
+34962=>6589,
+34990=>6590,
+34969=>6591,
+34978=>6592,
+34957=>6593,
+34980=>6594,
+34992=>6595,
+35007=>6596,
+34993=>6597,
+35011=>6598,
+35012=>6599,
+35028=>6600,
+35032=>6601,
+35033=>6602,
+35037=>6603,
+35065=>6604,
+35074=>6605,
+35068=>6606,
+35060=>6607,
+35048=>6608,
+35058=>6609,
+35076=>6610,
+35084=>6611,
+35082=>6612,
+35091=>6613,
+35139=>6614,
+35102=>6615,
+35109=>6616,
+35114=>6617,
+35115=>6618,
+35137=>6619,
+35140=>6620,
+35131=>6621,
+35126=>6622,
+35128=>6623,
+35148=>6624,
+35101=>6625,
+35168=>6626,
+35166=>6627,
+35174=>6628,
+35172=>6629,
+35181=>6630,
+35178=>6631,
+35183=>6632,
+35188=>6633,
+35191=>6634,
+12177=>6635,
+35198=>6635,
+35203=>6636,
+35208=>6637,
+35210=>6638,
+35219=>6639,
+35224=>6640,
+35233=>6641,
+35241=>6642,
+35238=>6643,
+35244=>6644,
+35247=>6645,
+35250=>6646,
+35258=>6647,
+35261=>6648,
+35263=>6649,
+35264=>6650,
+35290=>6651,
+35292=>6652,
+35293=>6653,
+35303=>6654,
+35316=>6655,
+35320=>6656,
+35331=>6657,
+35350=>6658,
+35344=>6659,
+35340=>6660,
+35355=>6661,
+35357=>6662,
+35365=>6663,
+35382=>6664,
+35393=>6665,
+35419=>6666,
+35410=>6667,
+35398=>6668,
+35400=>6669,
+35452=>6670,
+35437=>6671,
+35436=>6672,
+35426=>6673,
+35461=>6674,
+35458=>6675,
+35460=>6676,
+35496=>6677,
+35489=>6678,
+35473=>6679,
+35493=>6680,
+35494=>6681,
+35482=>6682,
+35491=>6683,
+35524=>6684,
+35533=>6685,
+35522=>6686,
+35546=>6687,
+35563=>6688,
+35571=>6689,
+35559=>6690,
+35556=>6691,
+35569=>6692,
+35604=>6693,
+35552=>6694,
+35554=>6695,
+35575=>6696,
+35550=>6697,
+35547=>6698,
+35596=>6699,
+35591=>6700,
+35610=>6701,
+35553=>6702,
+35606=>6703,
+35600=>6704,
+35607=>6705,
+35616=>6706,
+35635=>6707,
+38827=>6708,
+35622=>6709,
+35627=>6710,
+35646=>6711,
+35624=>6712,
+35649=>6713,
+35660=>6714,
+35663=>6715,
+35662=>6716,
+35657=>6717,
+35670=>6718,
+35675=>6719,
+35674=>6720,
+35691=>6721,
+35679=>6722,
+35692=>6723,
+35695=>6724,
+35700=>6725,
+35709=>6726,
+35712=>6727,
+35724=>6728,
+35726=>6729,
+35730=>6730,
+35731=>6731,
+35734=>6732,
+35737=>6733,
+35738=>6734,
+35898=>6735,
+35905=>6736,
+35903=>6737,
+35912=>6738,
+35916=>6739,
+35918=>6740,
+35920=>6741,
+12183=>6742,
+35925=>6742,
+35938=>6743,
+35948=>6744,
+12184=>6745,
+35960=>6745,
+35962=>6746,
+35970=>6747,
+35977=>6748,
+35973=>6749,
+35978=>6750,
+35981=>6751,
+35982=>6752,
+35988=>6753,
+35964=>6754,
+35992=>6755,
+25117=>6756,
+36013=>6757,
+36010=>6758,
+36029=>6759,
+36018=>6760,
+36019=>6761,
+36014=>6762,
+36022=>6763,
+36040=>6764,
+36033=>6765,
+36068=>6766,
+36067=>6767,
+36058=>6768,
+36093=>6769,
+36090=>6770,
+36091=>6771,
+36100=>6772,
+36101=>6773,
+36106=>6774,
+36103=>6775,
+36111=>6776,
+36109=>6777,
+36112=>6778,
+40782=>6779,
+36115=>6780,
+36045=>6781,
+36116=>6782,
+36118=>6783,
+36199=>6784,
+36205=>6785,
+36209=>6786,
+36211=>6787,
+36225=>6788,
+36249=>6789,
+36290=>6790,
+36286=>6791,
+36282=>6792,
+36303=>6793,
+36314=>6794,
+36310=>6795,
+36300=>6796,
+36315=>6797,
+36299=>6798,
+36330=>6799,
+36331=>6800,
+36319=>6801,
+36323=>6802,
+36348=>6803,
+36360=>6804,
+36361=>6805,
+36351=>6806,
+36381=>6807,
+36382=>6808,
+36368=>6809,
+36383=>6810,
+36418=>6811,
+36405=>6812,
+36400=>6813,
+36404=>6814,
+36426=>6815,
+36423=>6816,
+36425=>6817,
+36428=>6818,
+36432=>6819,
+36424=>6820,
+36441=>6821,
+36452=>6822,
+36448=>6823,
+36394=>6824,
+36451=>6825,
+36437=>6826,
+36470=>6827,
+36466=>6828,
+36476=>6829,
+36481=>6830,
+36487=>6831,
+36485=>6832,
+36484=>6833,
+36491=>6834,
+36490=>6835,
+36499=>6836,
+36497=>6837,
+36500=>6838,
+36505=>6839,
+36522=>6840,
+36513=>6841,
+36524=>6842,
+36528=>6843,
+36550=>6844,
+36529=>6845,
+36542=>6846,
+36549=>6847,
+36552=>6848,
+36555=>6849,
+36571=>6850,
+36579=>6851,
+36604=>6852,
+36603=>6853,
+36587=>6854,
+36606=>6855,
+36618=>6856,
+36613=>6857,
+36629=>6858,
+36626=>6859,
+36633=>6860,
+36627=>6861,
+36636=>6862,
+36639=>6863,
+36635=>6864,
+36620=>6865,
+36646=>6866,
+36659=>6867,
+36667=>6868,
+36665=>6869,
+36677=>6870,
+36674=>6871,
+36670=>6872,
+36684=>6873,
+36681=>6874,
+36678=>6875,
+36686=>6876,
+36695=>6877,
+36700=>6878,
+36706=>6879,
+36707=>6880,
+36708=>6881,
+36764=>6882,
+36767=>6883,
+36771=>6884,
+36781=>6885,
+36783=>6886,
+36791=>6887,
+36826=>6888,
+36837=>6889,
+36834=>6890,
+36842=>6891,
+36847=>6892,
+36999=>6893,
+36852=>6894,
+36869=>6895,
+36857=>6896,
+36858=>6897,
+36881=>6898,
+36885=>6899,
+36897=>6900,
+36877=>6901,
+36894=>6902,
+36886=>6903,
+36875=>6904,
+36903=>6905,
+36918=>6906,
+36917=>6907,
+36921=>6908,
+36856=>6909,
+36943=>6910,
+36944=>6911,
+36945=>6912,
+36946=>6913,
+36878=>6914,
+36937=>6915,
+36926=>6916,
+36950=>6917,
+36952=>6918,
+36958=>6919,
+36968=>6920,
+36975=>6921,
+36982=>6922,
+38568=>6923,
+36978=>6924,
+36994=>6925,
+36989=>6926,
+36993=>6927,
+36992=>6928,
+37002=>6929,
+37001=>6930,
+37007=>6931,
+37032=>6932,
+37039=>6933,
+37041=>6934,
+37045=>6935,
+37090=>6936,
+37092=>6937,
+25160=>6938,
+37083=>6939,
+37122=>6940,
+37138=>6941,
+37145=>6942,
+37170=>6943,
+37168=>6944,
+37194=>6945,
+37206=>6946,
+37208=>6947,
+37219=>6948,
+37221=>6949,
+37225=>6950,
+37235=>6951,
+37234=>6952,
+37259=>6953,
+37257=>6954,
+37250=>6955,
+37282=>6956,
+37291=>6957,
+37295=>6958,
+37290=>6959,
+37301=>6960,
+37300=>6961,
+37306=>6962,
+37312=>6963,
+37313=>6964,
+37321=>6965,
+37323=>6966,
+37328=>6967,
+37334=>6968,
+37343=>6969,
+37345=>6970,
+37339=>6971,
+37372=>6972,
+37365=>6973,
+37366=>6974,
+37406=>6975,
+37375=>6976,
+37396=>6977,
+37420=>6978,
+37397=>6979,
+37393=>6980,
+37470=>6981,
+37463=>6982,
+37445=>6983,
+37449=>6984,
+37476=>6985,
+37448=>6986,
+37525=>6987,
+37439=>6988,
+37451=>6989,
+37456=>6990,
+37532=>6991,
+37526=>6992,
+37523=>6993,
+37531=>6994,
+37466=>6995,
+37583=>6996,
+37561=>6997,
+37559=>6998,
+37609=>6999,
+37647=>7000,
+37626=>7001,
+37700=>7002,
+37678=>7003,
+37657=>7004,
+37666=>7005,
+37658=>7006,
+37667=>7007,
+37690=>7008,
+37685=>7009,
+37691=>7010,
+37724=>7011,
+37728=>7012,
+37756=>7013,
+37742=>7014,
+37718=>7015,
+37808=>7016,
+37804=>7017,
+37805=>7018,
+37780=>7019,
+37817=>7020,
+37846=>7021,
+37847=>7022,
+37864=>7023,
+37861=>7024,
+37848=>7025,
+37827=>7026,
+37853=>7027,
+37840=>7028,
+37832=>7029,
+37860=>7030,
+37914=>7031,
+37908=>7032,
+37907=>7033,
+37891=>7034,
+37895=>7035,
+37904=>7036,
+37942=>7037,
+37931=>7038,
+37941=>7039,
+37921=>7040,
+37946=>7041,
+37953=>7042,
+37970=>7043,
+37956=>7044,
+37979=>7045,
+37984=>7046,
+37986=>7047,
+37982=>7048,
+37994=>7049,
+37417=>7050,
+38000=>7051,
+38005=>7052,
+38007=>7053,
+38013=>7054,
+37978=>7055,
+38012=>7056,
+38014=>7057,
+38017=>7058,
+38015=>7059,
+38274=>7060,
+38279=>7061,
+38282=>7062,
+38292=>7063,
+38294=>7064,
+38296=>7065,
+38297=>7066,
+38304=>7067,
+38312=>7068,
+38311=>7069,
+38317=>7070,
+38332=>7071,
+38331=>7072,
+38329=>7073,
+38334=>7074,
+38346=>7075,
+28662=>7076,
+38339=>7077,
+38349=>7078,
+38348=>7079,
+38357=>7080,
+38356=>7081,
+38358=>7082,
+38364=>7083,
+38369=>7084,
+38373=>7085,
+38370=>7086,
+38433=>7087,
+38440=>7088,
+38446=>7089,
+38447=>7090,
+38466=>7091,
+38476=>7092,
+38479=>7093,
+38475=>7094,
+38519=>7095,
+38492=>7096,
+38494=>7097,
+38493=>7098,
+38495=>7099,
+38502=>7100,
+38514=>7101,
+38508=>7102,
+38541=>7103,
+38552=>7104,
+38549=>7105,
+38551=>7106,
+38570=>7107,
+38567=>7108,
+38577=>7109,
+38578=>7110,
+38576=>7111,
+38580=>7112,
+12202=>7113,
+38582=>7113,
+38584=>7114,
+12203=>7115,
+38585=>7115,
+38606=>7116,
+38603=>7117,
+38601=>7118,
+38605=>7119,
+35149=>7120,
+38620=>7121,
+38669=>7122,
+38613=>7123,
+38649=>7124,
+38660=>7125,
+38662=>7126,
+38664=>7127,
+38675=>7128,
+38670=>7129,
+38673=>7130,
+38671=>7131,
+38678=>7132,
+38681=>7133,
+38692=>7134,
+38698=>7135,
+38704=>7136,
+38713=>7137,
+38717=>7138,
+38718=>7139,
+38724=>7140,
+38726=>7141,
+38728=>7142,
+38722=>7143,
+38729=>7144,
+38748=>7145,
+38752=>7146,
+38756=>7147,
+38758=>7148,
+38760=>7149,
+21202=>7150,
+38763=>7151,
+38769=>7152,
+38777=>7153,
+38789=>7154,
+38780=>7155,
+38785=>7156,
+38778=>7157,
+38790=>7158,
+38795=>7159,
+38799=>7160,
+38800=>7161,
+38812=>7162,
+38824=>7163,
+38822=>7164,
+38819=>7165,
+38835=>7166,
+38836=>7167,
+38851=>7168,
+38854=>7169,
+38856=>7170,
+12209=>7171,
+38859=>7171,
+38876=>7172,
+12210=>7173,
+38893=>7173,
+40783=>7174,
+38898=>7175,
+31455=>7176,
+38902=>7177,
+38901=>7178,
+38927=>7179,
+38924=>7180,
+38968=>7181,
+38948=>7182,
+38945=>7183,
+38967=>7184,
+38973=>7185,
+38982=>7186,
+38991=>7187,
+38987=>7188,
+39019=>7189,
+39023=>7190,
+39024=>7191,
+39025=>7192,
+39028=>7193,
+39027=>7194,
+39082=>7195,
+39087=>7196,
+39089=>7197,
+39094=>7198,
+39108=>7199,
+39107=>7200,
+39110=>7201,
+39145=>7202,
+39147=>7203,
+39171=>7204,
+39177=>7205,
+39186=>7206,
+39188=>7207,
+39192=>7208,
+39201=>7209,
+39197=>7210,
+39198=>7211,
+39204=>7212,
+39200=>7213,
+39212=>7214,
+39214=>7215,
+39229=>7216,
+39230=>7217,
+39234=>7218,
+39241=>7219,
+39237=>7220,
+39248=>7221,
+39243=>7222,
+39249=>7223,
+39250=>7224,
+39244=>7225,
+39253=>7226,
+39319=>7227,
+39320=>7228,
+39333=>7229,
+39341=>7230,
+39342=>7231,
+39356=>7232,
+39391=>7233,
+39387=>7234,
+39389=>7235,
+39384=>7236,
+39377=>7237,
+39405=>7238,
+39406=>7239,
+39409=>7240,
+39410=>7241,
+39419=>7242,
+39416=>7243,
+39425=>7244,
+39439=>7245,
+39429=>7246,
+39394=>7247,
+39449=>7248,
+39467=>7249,
+39479=>7250,
+39493=>7251,
+39490=>7252,
+39488=>7253,
+39491=>7254,
+39486=>7255,
+39509=>7256,
+39501=>7257,
+39515=>7258,
+39511=>7259,
+39519=>7260,
+39522=>7261,
+39525=>7262,
+39524=>7263,
+39529=>7264,
+39531=>7265,
+39530=>7266,
+39597=>7267,
+39600=>7268,
+39612=>7269,
+39616=>7270,
+39631=>7271,
+39633=>7272,
+39635=>7273,
+39636=>7274,
+39646=>7275,
+12221=>7276,
+39647=>7276,
+39650=>7277,
+39651=>7278,
+39654=>7279,
+39663=>7280,
+39659=>7281,
+39662=>7282,
+39668=>7283,
+39665=>7284,
+39671=>7285,
+39675=>7286,
+39686=>7287,
+39704=>7288,
+39706=>7289,
+39711=>7290,
+39714=>7291,
+39715=>7292,
+12222=>7293,
+39717=>7293,
+39719=>7294,
+39720=>7295,
+39721=>7296,
+39722=>7297,
+39726=>7298,
+12223=>7299,
+39727=>7299,
+39730=>7300,
+12224=>7300,
+39748=>7301,
+39747=>7302,
+39759=>7303,
+39757=>7304,
+39758=>7305,
+39761=>7306,
+39768=>7307,
+39796=>7308,
+39827=>7309,
+39811=>7310,
+39825=>7311,
+39830=>7312,
+39831=>7313,
+39839=>7314,
+39840=>7315,
+39848=>7316,
+39860=>7317,
+39872=>7318,
+39882=>7319,
+39865=>7320,
+39878=>7321,
+39887=>7322,
+39889=>7323,
+39890=>7324,
+39907=>7325,
+39906=>7326,
+39908=>7327,
+39892=>7328,
+39905=>7329,
+39994=>7330,
+39922=>7331,
+39921=>7332,
+39920=>7333,
+39957=>7334,
+39956=>7335,
+39945=>7336,
+39955=>7337,
+39948=>7338,
+39942=>7339,
+39944=>7340,
+39954=>7341,
+39946=>7342,
+39940=>7343,
+39982=>7344,
+39963=>7345,
+39973=>7346,
+39972=>7347,
+39969=>7348,
+39984=>7349,
+40007=>7350,
+39986=>7351,
+40006=>7352,
+39998=>7353,
+40026=>7354,
+40032=>7355,
+40039=>7356,
+40054=>7357,
+40056=>7358,
+40167=>7359,
+40172=>7360,
+40176=>7361,
+40201=>7362,
+40200=>7363,
+40171=>7364,
+40195=>7365,
+40198=>7366,
+40234=>7367,
+40230=>7368,
+40367=>7369,
+40227=>7370,
+40223=>7371,
+40260=>7372,
+40213=>7373,
+40210=>7374,
+40257=>7375,
+40255=>7376,
+40254=>7377,
+40262=>7378,
+40264=>7379,
+40285=>7380,
+40286=>7381,
+40292=>7382,
+40273=>7383,
+40272=>7384,
+40281=>7385,
+40306=>7386,
+40329=>7387,
+40327=>7388,
+40363=>7389,
+40303=>7390,
+40314=>7391,
+40346=>7392,
+40356=>7393,
+40361=>7394,
+40370=>7395,
+40388=>7396,
+40385=>7397,
+40379=>7398,
+40376=>7399,
+40378=>7400,
+40390=>7401,
+40399=>7402,
+40386=>7403,
+40409=>7404,
+40403=>7405,
+40440=>7406,
+40422=>7407,
+40429=>7408,
+40431=>7409,
+40445=>7410,
+40474=>7411,
+40475=>7412,
+40478=>7413,
+12228=>7414,
+40565=>7414,
+40569=>7415,
+40573=>7416,
+40577=>7417,
+40584=>7418,
+40587=>7419,
+40588=>7420,
+40594=>7421,
+40597=>7422,
+40593=>7423,
+40605=>7424,
+12230=>7425,
+40613=>7425,
+40617=>7426,
+40632=>7427,
+40618=>7428,
+40621=>7429,
+38753=>7430,
+40652=>7431,
+40654=>7432,
+40655=>7433,
+40656=>7434,
+40660=>7435,
+40668=>7436,
+40670=>7437,
+40669=>7438,
+40672=>7439,
+40677=>7440,
+40680=>7441,
+40687=>7442,
+40692=>7443,
+40694=>7444,
+40695=>7445,
+12235=>7446,
+40697=>7446,
+40699=>7447,
+40700=>7448,
+12236=>7449,
+40701=>7449,
+40711=>7450,
+40712=>7451,
+30391=>7452,
+40725=>7453,
+40737=>7454,
+40748=>7455,
+40766=>7456,
+40778=>7457,
+12241=>7457,
+40786=>7458,
+12242=>7458,
+40788=>7459,
+40803=>7460,
+40799=>7461,
+40800=>7462,
+40801=>7463,
+40806=>7464,
+40807=>7465,
+40812=>7466,
+40810=>7467,
+40823=>7468,
+40818=>7469,
+40822=>7470,
+40853=>7471,
+40860=>7472,
+12244=>7472,
+40864=>7473,
+12245=>7473,
+22575=>7474,
+27079=>7475,
+36953=>7476,
+29796=>7477,
+9472=>7479,
+9473=>7480,
+9474=>7481,
+9475=>7482,
+9476=>7483,
+9477=>7484,
+9478=>7485,
+9479=>7486,
+9480=>7487,
+9481=>7488,
+9482=>7489,
+9483=>7490,
+9484=>7491,
+9485=>7492,
+9486=>7493,
+9487=>7494,
+9488=>7495,
+9489=>7496,
+9490=>7497,
+9491=>7498,
+9492=>7499,
+9493=>7500,
+9494=>7501,
+9495=>7502,
+9496=>7503,
+9497=>7504,
+9498=>7505,
+9499=>7506,
+9500=>7507,
+9501=>7508,
+9502=>7509,
+9503=>7510,
+9504=>7511,
+9505=>7512,
+9506=>7513,
+9507=>7514,
+9508=>7515,
+9509=>7516,
+9510=>7517,
+9511=>7518,
+9512=>7519,
+9513=>7520,
+9514=>7521,
+9515=>7522,
+9516=>7523,
+9517=>7524,
+9518=>7525,
+9519=>7526,
+9520=>7527,
+9521=>7528,
+9522=>7529,
+9523=>7530,
+9524=>7531,
+9525=>7532,
+9526=>7533,
+9527=>7534,
+9528=>7535,
+9529=>7536,
+9530=>7537,
+9531=>7538,
+9532=>7539,
+9533=>7540,
+9534=>7541,
+9535=>7542,
+9536=>7543,
+9537=>7544,
+9538=>7545,
+9539=>7546,
+9540=>7547,
+9541=>7548,
+9542=>7549,
+9543=>7550,
+9544=>7551,
+9545=>7552,
+9546=>7553,
+9547=>7554,
+9312=>7555,
+9313=>7556,
+9314=>7557,
+9315=>7558,
+9316=>7559,
+9317=>7560,
+9318=>7561,
+9319=>7562,
+9320=>7563,
+9321=>7564,
+9322=>7565,
+9323=>7566,
+9324=>7567,
+9325=>7568,
+9326=>7569,
+9327=>7570,
+9328=>7571,
+9329=>7572,
+9330=>7573,
+9331=>7574,
+8544=>7575,
+8545=>7576,
+8546=>7577,
+8547=>7578,
+8548=>7579,
+8549=>7580,
+8550=>7581,
+8551=>7582,
+8552=>7583,
+8553=>7584,
+13129=>7585,
+13076=>7586,
+13133=>7588,
+13095=>7590,
+13110=>7592,
+13137=>7593,
+13069=>7595,
+13094=>7596,
+13099=>7598,
+13130=>7599,
+13212=>7601,
+13213=>7602,
+13214=>7603,
+13198=>7604,
+13199=>7605,
+13252=>7606,
+13217=>7607,
+12317=>7608,
+12319=>7609,
+8470=>7610,
+13261=>7611,
+12964=>7613,
+12965=>7614,
+12966=>7615,
+12967=>7616,
+12968=>7617,
+12849=>7618,
+12850=>7619,
+12857=>7620,
+13182=>7621,
+13181=>7622,
+13180=>7623,
+8750=>7624,
+8721=>7625,
+8735=>7629,
+8895=>7630,
+21854=>7633,
+167133=>7641,
+28976=>7644,
+40407=>7646,
+64054=>7651,
+22169=>7654,
+15694=>7655,
+20448=>7660,
+36544=>7663,
+194797=>7665,
+153716=>7670,
+32363=>7671,
+33606=>7672,
+167670=>7673,
+40572=>7677,
+26171=>7680,
+40628=>7682,
+26629=>7687,
+23650=>7693,
+194780=>7695,
+32353=>7697,
+64070=>7700,
+34083=>7706,
+37292=>7707,
+34796=>7715,
+25620=>7724,
+39506=>7727,
+64074=>7732,
+194692=>7734,
+31774=>7739,
+64016=>7746,
+25681=>7747,
+63980=>7750,
+22625=>7751,
+39002=>7752,
+194679=>7754,
+31153=>7758,
+28678=>7760,
+22218=>7770,
+21085=>7774,
+28497=>7776,
+37297=>7777,
+64106=>7788,
+38960=>7795,
+40629=>7797,
+33802=>7807,
+63939=>7808,
+63890=>7809,
+63891=>7810,
+63897=>7811,
+34847=>7813,
+194575=>7814,
+194771=>7816,
+194584=>7817,
+137754=>7825,
+23643=>7826,
+25890=>7831,
+26618=>7834,
+26766=>7836,
+148432=>7838,
+194848=>7839,
+34110=>7861,
+30562=>7877,
+65041=>7887,
+65042=>7888,
+65075=>7890,
+65073=>7892,
+65074=>7893,
+8285=>7897,
+65049=>7897,
+8282=>7898,
+65072=>7898,
+65077=>7899,
+65078=>7900,
+65081=>7901,
+65082=>7902,
+65095=>7903,
+65096=>7904,
+65079=>7905,
+65080=>7906,
+65087=>7907,
+65088=>7908,
+65085=>7909,
+65086=>7910,
+65089=>7911,
+65090=>7912,
+65091=>7913,
+65092=>7914,
+65083=>7915,
+65084=>7916,
+12436=>7958,
+12437=>7959,
+12438=>7960,
+22099=>7963,
+65508=>8005,
+65287=>8006,
+65282=>8007,
+9665=>8009,
+9655=>8010,
+8681=>8011,
+8679=>8012,
+8678=>8013,
+8680=>8014,
+9634=>8015,
+9831=>8016,
+9825=>8017,
+9828=>8018,
+9826=>8019,
+13216=>8020,
+13218=>8021,
+13220=>8022,
+13221=>8023,
+13207=>8024,
+8467=>8025,
+13208=>8026,
+13235=>8027,
+13234=>8028,
+13233=>8029,
+13232=>8030,
+13189=>8031,
+13190=>8032,
+13191=>8033,
+13259=>8034,
+13200=>8035,
+13268=>8036,
+13206=>8037,
+13090=>8038,
+13078=>8039,
+13080=>8040,
+13077=>8041,
+13059=>8042,
+13091=>8043,
+13143=>8044,
+13122=>8045,
+13113=>8046,
+13115=>8047,
+13056=>8048,
+13105=>8049,
+13127=>8050,
+13086=>8051,
+13098=>8052,
+13183=>8054,
+8481=>8055,
+9742=>8056,
+12342=>8057,
+12320=>8058,
+9352=>8062,
+9353=>8063,
+9354=>8064,
+9355=>8065,
+9356=>8066,
+9357=>8067,
+9358=>8068,
+9359=>8069,
+9360=>8070,
+9332=>8071,
+9333=>8072,
+9334=>8073,
+9335=>8074,
+9336=>8075,
+9337=>8076,
+9338=>8077,
+9339=>8078,
+9340=>8079,
+9341=>8080,
+9342=>8081,
+9343=>8082,
+9344=>8083,
+9345=>8084,
+9346=>8085,
+9347=>8086,
+9348=>8087,
+9349=>8088,
+9350=>8089,
+9351=>8090,
+12881=>8091,
+8560=>8092,
+8561=>8093,
+8562=>8094,
+8563=>8095,
+8564=>8096,
+8565=>8097,
+8566=>8098,
+8567=>8099,
+8568=>8100,
+8569=>8101,
+12882=>8102,
+12883=>8103,
+12884=>8104,
+12885=>8105,
+12886=>8106,
+12887=>8107,
+12888=>8108,
+12889=>8109,
+12890=>8110,
+12891=>8111,
+9372=>8112,
+9373=>8113,
+9374=>8114,
+9375=>8115,
+9376=>8116,
+9377=>8117,
+9378=>8118,
+9379=>8119,
+9380=>8120,
+9381=>8121,
+9382=>8122,
+9383=>8123,
+9384=>8124,
+9385=>8125,
+9386=>8126,
+9387=>8127,
+9388=>8128,
+9389=>8129,
+9390=>8130,
+9391=>8131,
+9392=>8132,
+9393=>8133,
+9394=>8134,
+9395=>8135,
+9396=>8136,
+9397=>8137,
+12867=>8138,
+12861=>8139,
+12863=>8140,
+12852=>8141,
+12856=>8142,
+12851=>8143,
+12860=>8144,
+12866=>8145,
+12862=>8146,
+12854=>8147,
+12853=>8148,
+12859=>8149,
+12864=>8150,
+12858=>8151,
+12976=>8152,
+12973=>8153,
+12969=>8154,
+12975=>8155,
+12948=>8156,
+12970=>8157,
+12952=>8158,
+12971=>8159,
+12946=>8160,
+12945=>8161,
+12947=>8162,
+12972=>8163,
+12974=>8164,
+12950=>8165,
+9131=>8174,
+9132=>8175,
+9133=>8176,
+9127=>8178,
+9128=>8179,
+9129=>8180,
+13260=>8182,
+13061=>8183,
+13215=>8186,
+13219=>8187,
+13222=>8188,
+12958=>8191,
+13192=>8192,
+13193=>8193,
+13256=>8194,
+8749=>8195,
+12848=>8197,
+12842=>8198,
+12843=>8199,
+12844=>8200,
+12845=>8201,
+12846=>8202,
+12847=>8203,
+12855=>8204,
+12865=>8205,
+10145=>8206,
+11013=>8207,
+11014=>8208,
+11015=>8209,
+9673=>8210,
+9824=>8211,
+9829=>8212,
+9827=>8213,
+9830=>8214,
+9728=>8215,
+9729=>8216,
+9730=>8217,
+9731=>8218,
+9758=>8219,
+9756=>8220,
+9757=>8221,
+9759=>8222,
+12953=>8223,
+9450=>8224,
+8554=>8225,
+8555=>8226,
+9601=>8230,
+9602=>8231,
+9603=>8232,
+9604=>8233,
+9605=>8234,
+9606=>8235,
+9607=>8236,
+9608=>8237,
+9615=>8238,
+9614=>8239,
+9613=>8240,
+9612=>8241,
+9611=>8242,
+9610=>8243,
+9609=>8244,
+9620=>8245,
+9621=>8246,
+9581=>8247,
+9582=>8248,
+9584=>8249,
+9583=>8250,
+9552=>8251,
+9566=>8252,
+9578=>8253,
+9569=>8254,
+9698=>8255,
+9699=>8256,
+9701=>8257,
+9700=>8258,
+9585=>8261,
+9586=>8262,
+9587=>8263,
+65040=>8268,
+20956=>8284,
+29081=>8285,
+10102=>8286,
+10103=>8287,
+10104=>8288,
+10105=>8289,
+10106=>8290,
+10107=>8291,
+10108=>8292,
+10109=>8293,
+10110=>8294,
+8570=>8298,
+8571=>8299,
+8575=>8303,
+8458=>8304,
+8457=>8305,
+8507=>8307,
+12292=>8308,
+8646=>8309,
+8644=>8310,
+8645=>8311,
+12535=>8313,
+12536=>8314,
+12537=>8315,
+12538=>8316,
+12957=>8319,
+13179=>8323,
+13107=>8327,
+13134=>8328,
+32394=>8359,
+35100=>8360,
+37704=>8361,
+37512=>8362,
+34012=>8363,
+20425=>8364,
+28859=>8365,
+26161=>8366,
+26824=>8367,
+37625=>8368,
+26363=>8369,
+24389=>8370,
+12033=>8371,
+20008=>8371,
+20193=>8372,
+20220=>8373,
+20224=>8374,
+20227=>8375,
+20281=>8376,
+20310=>8377,
+20370=>8378,
+20362=>8379,
+20378=>8380,
+20372=>8381,
+20429=>8382,
+20544=>8383,
+20514=>8384,
+20479=>8385,
+20510=>8386,
+20550=>8387,
+20592=>8388,
+20546=>8389,
+20628=>8390,
+20724=>8391,
+20696=>8392,
+20810=>8393,
+20836=>8394,
+20893=>8395,
+20926=>8396,
+20972=>8397,
+21013=>8398,
+21148=>8399,
+21158=>8400,
+21184=>8401,
+21211=>8402,
+21248=>8403,
+21284=>8405,
+21362=>8406,
+21395=>8407,
+21426=>8408,
+21469=>8409,
+64014=>8410,
+21660=>8411,
+21642=>8412,
+21673=>8413,
+21759=>8414,
+21894=>8415,
+22361=>8416,
+22373=>8417,
+22444=>8418,
+22472=>8419,
+22471=>8420,
+64015=>8421,
+22686=>8423,
+22706=>8424,
+22795=>8425,
+22867=>8426,
+22875=>8427,
+22877=>8428,
+22883=>8429,
+22948=>8430,
+22970=>8431,
+23382=>8432,
+23488=>8433,
+29999=>8434,
+23512=>8435,
+23582=>8437,
+23718=>8438,
+23738=>8439,
+23797=>8440,
+23847=>8441,
+23891=>8442,
+23874=>8444,
+23917=>8445,
+23992=>8446,
+23993=>8447,
+24016=>8448,
+24353=>8449,
+24372=>8450,
+24423=>8451,
+24503=>8452,
+24542=>8453,
+24669=>8454,
+24709=>8455,
+24714=>8456,
+24798=>8457,
+24789=>8458,
+24864=>8459,
+24818=>8460,
+24849=>8461,
+24887=>8462,
+24880=>8463,
+24984=>8464,
+25107=>8465,
+25254=>8466,
+25589=>8467,
+25696=>8468,
+25757=>8469,
+25806=>8470,
+25934=>8471,
+26112=>8472,
+26133=>8473,
+26121=>8474,
+26158=>8475,
+26148=>8477,
+26213=>8478,
+26199=>8479,
+26201=>8480,
+64018=>8481,
+26227=>8482,
+26265=>8483,
+26272=>8484,
+26290=>8485,
+26303=>8486,
+26362=>8487,
+26382=>8488,
+26470=>8490,
+26555=>8491,
+26706=>8492,
+26560=>8493,
+26692=>8495,
+26831=>8496,
+64019=>8497,
+26984=>8498,
+64020=>8499,
+27032=>8500,
+27106=>8501,
+27184=>8502,
+27243=>8503,
+27206=>8504,
+27251=>8505,
+27262=>8506,
+27362=>8507,
+27364=>8508,
+27606=>8509,
+27711=>8510,
+27740=>8511,
+27782=>8512,
+27759=>8513,
+27866=>8514,
+27908=>8515,
+28039=>8516,
+28015=>8517,
+28054=>8518,
+28076=>8519,
+28111=>8520,
+28152=>8521,
+28146=>8522,
+28156=>8523,
+28217=>8524,
+28252=>8525,
+28199=>8526,
+28220=>8527,
+28351=>8528,
+28552=>8529,
+28597=>8530,
+28661=>8531,
+28677=>8532,
+28679=>8533,
+28712=>8534,
+28805=>8535,
+28843=>8536,
+28943=>8537,
+28932=>8538,
+29020=>8539,
+28998=>8540,
+28999=>8541,
+29121=>8543,
+29182=>8544,
+29361=>8545,
+29374=>8546,
+29476=>8547,
+64022=>8548,
+29559=>8549,
+29629=>8550,
+29641=>8551,
+29654=>8552,
+29667=>8553,
+29650=>8554,
+29703=>8555,
+29685=>8556,
+29734=>8557,
+29738=>8558,
+29737=>8559,
+29742=>8560,
+29833=>8562,
+29855=>8563,
+29953=>8564,
+30063=>8565,
+30338=>8566,
+30364=>8567,
+30366=>8568,
+30363=>8569,
+30374=>8570,
+64023=>8571,
+30534=>8572,
+21167=>8573,
+30753=>8574,
+30798=>8575,
+30820=>8576,
+30842=>8577,
+31024=>8578,
+64024=>8579,
+64025=>8580,
+64026=>8581,
+31124=>8582,
+64027=>8583,
+31131=>8584,
+31441=>8585,
+31463=>8586,
+64028=>8587,
+31467=>8588,
+31646=>8589,
+64029=>8590,
+32072=>8591,
+32183=>8593,
+32160=>8594,
+32214=>8595,
+32338=>8596,
+32583=>8597,
+32673=>8598,
+64030=>8599,
+33537=>8600,
+33634=>8601,
+33663=>8602,
+33735=>8603,
+33782=>8604,
+33864=>8605,
+33972=>8606,
+34131=>8607,
+34137=>8608,
+34155=>8609,
+64031=>8610,
+34224=>8611,
+64032=>8612,
+64033=>8613,
+34823=>8614,
+35061=>8615,
+35346=>8616,
+35383=>8617,
+35449=>8618,
+35495=>8619,
+35518=>8620,
+35551=>8621,
+64034=>8622,
+35574=>8623,
+35667=>8624,
+35711=>8625,
+36080=>8626,
+36084=>8627,
+36114=>8628,
+36214=>8629,
+64035=>8630,
+36559=>8631,
+64037=>8633,
+36967=>8634,
+37086=>8635,
+64038=>8636,
+37141=>8637,
+37159=>8638,
+37338=>8639,
+37335=>8640,
+37342=>8641,
+37357=>8642,
+37358=>8643,
+37348=>8644,
+37349=>8645,
+37382=>8646,
+37392=>8647,
+37386=>8648,
+37434=>8649,
+37440=>8650,
+37436=>8651,
+37454=>8652,
+37465=>8653,
+37457=>8654,
+37433=>8655,
+37479=>8656,
+37543=>8657,
+37495=>8658,
+37496=>8659,
+37607=>8660,
+37591=>8661,
+37593=>8662,
+37584=>8663,
+64039=>8664,
+37589=>8665,
+37600=>8666,
+37587=>8667,
+37669=>8668,
+37665=>8669,
+37627=>8670,
+64040=>8671,
+37662=>8672,
+37631=>8673,
+37661=>8674,
+37634=>8675,
+37744=>8676,
+37719=>8677,
+37796=>8678,
+37830=>8679,
+37854=>8680,
+37880=>8681,
+37937=>8682,
+37957=>8683,
+37960=>8684,
+38290=>8685,
+64041=>8687,
+38557=>8688,
+38575=>8689,
+38707=>8690,
+38715=>8691,
+38723=>8692,
+38733=>8693,
+38735=>8694,
+12205=>8695,
+38737=>8695,
+38999=>8697,
+39013=>8698,
+64042=>8699,
+64043=>8700,
+39207=>8701,
+64044=>8702,
+39326=>8703,
+39502=>8704,
+39641=>8705,
+39644=>8706,
+39797=>8707,
+39794=>8708,
+39823=>8709,
+39857=>8710,
+39867=>8711,
+39936=>8712,
+40304=>8713,
+40299=>8714,
+64045=>8715,
+40473=>8716,
+40657=>8717,
+8364=>9354,
+8486=>9355,
+64256=>9358,
+64259=>9359,
+64260=>9360,
+257=>9361,
+299=>9362,
+363=>9363,
+275=>9364,
+333=>9365,
+256=>9366,
+298=>9367,
+362=>9368,
+274=>9369,
+332=>9370,
+8539=>9371,
+8540=>9372,
+8541=>9373,
+8542=>9374,
+8531=>9375,
+8532=>9376,
+8304=>9377,
+8308=>9378,
+8309=>9379,
+8310=>9380,
+8311=>9381,
+8312=>9382,
+8313=>9383,
+8320=>9384,
+8321=>9385,
+8322=>9386,
+8323=>9387,
+8324=>9388,
+8325=>9389,
+8326=>9390,
+8327=>9391,
+8328=>9392,
+8329=>9393,
+461=>9394,
+282=>9395,
+7868=>9397,
+463=>9398,
+296=>9400,
+465=>9401,
+467=>9403,
+366=>9404,
+360=>9405,
+462=>9406,
+283=>9407,
+7869=>9409,
+464=>9410,
+297=>9412,
+466=>9413,
+468=>9415,
+367=>9416,
+361=>9417,
+593=>9418,
+8049=>9419,
+8048=>9420,
+509=>9421,
+596=>9423,
+601=>9426,
+602=>9429,
+603=>9432,
+8051=>9433,
+8050=>9434,
+567=>9435,
+331=>9436,
+629=>9437,
+652=>9438,
+658=>9441,
+643=>9442,
+720=>9443,
+8534=>9785,
+8535=>9786,
+8536=>9787,
+8537=>9788,
+8538=>9789,
+12832=>10126,
+12833=>10127,
+12834=>10128,
+12835=>10129,
+12836=>10130,
+12837=>10131,
+12838=>10132,
+12839=>10133,
+12840=>10134,
+12841=>10135,
+12892=>10244,
+12893=>10245,
+12894=>10246,
+12895=>10247,
+12977=>10248,
+12978=>10249,
+12979=>10250,
+12980=>10251,
+12981=>10252,
+12982=>10253,
+12983=>10254,
+12984=>10255,
+12985=>10256,
+12986=>10257,
+12987=>10258,
+12988=>10259,
+12989=>10260,
+12990=>10261,
+12991=>10262,
+9424=>10313,
+9425=>10314,
+9426=>10315,
+9427=>10316,
+9428=>10317,
+9429=>10318,
+9430=>10319,
+9431=>10320,
+9432=>10321,
+9433=>10322,
+9434=>10323,
+9435=>10324,
+9436=>10325,
+9437=>10326,
+9438=>10327,
+9439=>10328,
+9440=>10329,
+9441=>10330,
+9442=>10331,
+9443=>10332,
+9444=>10333,
+9445=>10334,
+9446=>10335,
+9447=>10336,
+9448=>10337,
+9449=>10338,
+9398=>10339,
+9399=>10340,
+9400=>10341,
+9401=>10342,
+9402=>10343,
+9403=>10344,
+9404=>10345,
+9405=>10346,
+9406=>10347,
+9407=>10348,
+9408=>10349,
+9409=>10350,
+9410=>10351,
+9411=>10352,
+9412=>10353,
+9413=>10354,
+9414=>10355,
+9415=>10356,
+9416=>10357,
+9417=>10358,
+9418=>10359,
+9419=>10360,
+9420=>10361,
+9421=>10362,
+9422=>10363,
+9423=>10364,
+13008=>10413,
+13009=>10414,
+13010=>10415,
+13011=>10416,
+13012=>10417,
+13013=>10418,
+13014=>10419,
+13015=>10420,
+13016=>10421,
+13017=>10422,
+13018=>10423,
+13019=>10424,
+13020=>10425,
+13021=>10426,
+13022=>10427,
+13023=>10428,
+13024=>10429,
+13025=>10430,
+13026=>10431,
+13027=>10432,
+13028=>10433,
+13029=>10434,
+13030=>10435,
+13031=>10436,
+13032=>10437,
+13033=>10438,
+13034=>10439,
+13035=>10440,
+13036=>10441,
+13037=>10442,
+13038=>10443,
+13039=>10444,
+13040=>10445,
+13041=>10446,
+13042=>10447,
+13043=>10448,
+13044=>10449,
+13045=>10450,
+13046=>10451,
+13047=>10452,
+13048=>10453,
+13049=>10454,
+13050=>10455,
+13051=>10456,
+13052=>10457,
+13053=>10458,
+13054=>10459,
+12928=>10461,
+12929=>10462,
+12930=>10463,
+12931=>10464,
+12932=>10465,
+12933=>10466,
+12934=>10467,
+12935=>10468,
+12936=>10469,
+12937=>10470,
+12944=>10471,
+12938=>10472,
+12939=>10473,
+12940=>10474,
+12941=>10475,
+12942=>10476,
+12943=>10477,
+12959=>10479,
+12960=>10486,
+12961=>10487,
+12955=>10488,
+12954=>10489,
+12963=>10490,
+12962=>10491,
+12951=>10492,
+12956=>10494,
+12949=>10495,
+9676=>10502,
+9471=>10503,
+10111=>10514,
+9451=>10515,
+9452=>10516,
+9453=>10517,
+9454=>10518,
+9455=>10519,
+9456=>10520,
+9457=>10521,
+9458=>10522,
+9459=>10523,
+9460=>10524,
+8414=>11035,
+13274=>11851,
+8448=>11855,
+13250=>11856,
+8453=>11859,
+13169=>11861,
+13197=>11864,
+13211=>11865,
+13271=>11869,
+13272=>11870,
+13057=>11874,
+13058=>11875,
+13060=>11876,
+13062=>11877,
+13064=>11879,
+13063=>11881,
+13066=>11882,
+13065=>11884,
+13067=>11886,
+13068=>11888,
+13070=>11889,
+13071=>11890,
+13072=>11891,
+13073=>11892,
+13074=>11893,
+13075=>11894,
+13079=>11896,
+13081=>11898,
+13082=>11900,
+13083=>11901,
+13084=>11902,
+13085=>11903,
+13087=>11904,
+13088=>11905,
+13089=>11906,
+13092=>11907,
+13093=>11909,
+13096=>11912,
+13097=>11913,
+13101=>11915,
+13102=>11918,
+13103=>11919,
+13104=>11920,
+13106=>11921,
+13108=>11924,
+13109=>11925,
+13116=>11926,
+13111=>11930,
+13112=>11932,
+13114=>11933,
+13117=>11934,
+13121=>11935,
+13118=>11936,
+13119=>11937,
+13120=>11938,
+13123=>11939,
+13124=>11940,
+13125=>11941,
+13126=>11942,
+13128=>11943,
+13131=>11944,
+13132=>11945,
+13135=>11946,
+13136=>11947,
+13138=>11950,
+13140=>11951,
+13139=>11954,
+13141=>11955,
+13142=>11956,
+8501=>12089,
+976=>12090,
+8714=>12091,
+8463=>12092,
+981=>12094,
+987=>12095,
+977=>12096,
+9832=>12098,
+9833=>12099,
+9836=>12100,
+12347=>12106,
+12339=>12108,
+12340=>12109,
+12341=>12110,
+8252=>12111,
+8265=>12112,
+8723=>12118,
+8771=>12120,
+8818=>12121,
+8819=>12122,
+12312=>12129,
+12313=>12130,
+65375=>12131,
+65376=>12132,
+9115=>12143,
+9117=>12144,
+9118=>12145,
+9120=>12146,
+9121=>12151,
+9123=>12152,
+9124=>12153,
+9126=>12154,
+9116=>12167,
+9119=>12167,
+9122=>12167,
+9125=>12167,
+9130=>12167,
+9986=>12176,
+12349=>12179,
+12447=>12181,
+8709=>12184,
+8864=>12185,
+8854=>12186,
+8856=>12187,
+8853=>12188,
+8855=>12189,
+9888=>12192,
+9664=>12194,
+9654=>12195,
+8656=>12200,
+8596=>12201,
+8600=>12202,
+8601=>12203,
+8598=>12204,
+8599=>12205,
+8652=>12206,
+8651=>12207,
+12336=>12218,
+8967=>12219,
+10048=>12228,
+10047=>12229,
+9643=>12237,
+9642=>12239,
+10010=>12241,
+9702=>12254,
+10070=>12259,
+65093=>12639,
+65094=>12640,
+64103=>13320,
+64098=>13321,
+32227=>13322,
+12232=>13323,
+40643=>13323,
+28331=>13324,
+64082=>13325,
+64061=>13326,
+64069=>13327,
+64062=>13328,
+27114=>13329,
+28212=>13330,
+64096=>13331,
+64071=>13332,
+64056=>13333,
+64066=>13334,
+64078=>13335,
+34395=>13336,
+64105=>13337,
+64052=>13338,
+64099=>13339,
+25581=>13340,
+25802=>13341,
+30799=>13342,
+64084=>13343,
+63856=>13344,
+64077=>13345,
+64097=>13346,
+64072=>13347,
+64076=>13348,
+64091=>13349,
+64092=>13350,
+64081=>13351,
+64067=>13352,
+64090=>13353,
+28041=>13354,
+29376=>13355,
+194885=>13357,
+64086=>13358,
+64080=>13359,
+64049=>13360,
+64059=>13361,
+24034=>13362,
+64063=>13363,
+64101=>13364,
+21373=>13365,
+64055=>13366,
+64095=>13367,
+24501=>13368,
+64064=>13369,
+64083=>13371,
+64085=>13373,
+64104=>13374,
+64068=>13375,
+64089=>13376,
+26202=>13377,
+64053=>13378,
+64075=>13379,
+64100=>13380,
+64065=>13381,
+64048=>13382,
+64057=>13384,
+64051=>13385,
+27493=>13386,
+64058=>13387,
+27599=>13388,
+64050=>13389,
+25150=>13390,
+64079=>13391,
+63773=>13392,
+63964=>13393,
+63798=>13394,
+28122=>13395,
+63952=>13396,
+26310=>13397,
+27511=>13398,
+64087=>13399,
+37706=>13400,
+37636=>13402,
+133390=>13523,
+35999=>13644,
+11991=>13645,
+11965=>13646,
+158033=>13646,
+37555=>13652,
+38321=>13653,
+194812=>13656,
+194965=>13670,
+194794=>13679,
+26478=>13681,
+11974=>13682,
+194594=>13684,
+156194=>13691,
+13314=>13698,
+26083=>13701,
+134071=>13706,
+171339=>13717,
+194611=>13719,
+24378=>13720,
+11945=>13729,
+20465=>13731,
+63753=>13739,
+11964=>13747,
+194732=>13750,
+26435=>13751,
+133732=>13755,
+35329=>13756,
+25142=>13757,
+21555=>13760,
+23067=>13761,
+25221=>13765,
+194819=>13768,
+21567=>13775,
+27506=>13785,
+29986=>13790,
+19256=>13791,
+24063=>13794,
+194827=>13801,
+29626=>13802,
+134047=>13803,
+194600=>13807,
+194849=>13809,
+194623=>13815,
+194675=>13832,
+11916=>13833,
+11917=>13834,
+23577=>13835,
+131083=>13839,
+23426=>13840,
+194642=>13841,
+11997=>13847,
+11999=>13848,
+39136=>13848,
+11998=>13849,
+169599=>13849,
+14221=>13850,
+11927=>13852,
+14586=>13852,
+194887=>13854,
+11909=>13856,
+20155=>13856,
+131490=>13857,
+13599=>13865,
+194738=>13867,
+11971=>13870,
+35200=>13870,
+31237=>13875,
+35498=>13880,
+32085=>13882,
+28568=>13884,
+25591=>13892,
+30246=>13893,
+11978=>13898,
+163767=>13898,
+146686=>13904,
+13351=>13910,
+33067=>13913,
+194842=>13916,
+11950=>13922,
+154327=>13922,
+194714=>13928,
+194831=>13932,
+22305=>13952,
+135741=>13953,
+194586=>13954,
+64003=>13956,
+21534=>13964,
+15240=>13965,
+20839=>13966,
+63839=>13971,
+20023=>13981,
+11946=>13995,
+150804=>13995,
+24421=>13996,
+23020=>13997,
+194658=>13998,
+24217=>14000,
+13416=>14047,
+40884=>14048,
+21200=>14056,
+38376=>14061,
+26625=>14066,
+195024=>14068,
+195039=>14069,
+153215=>14075,
+11959=>14078,
+36534=>14083,
+63775=>14084,
+63875=>14088,
+31867=>14094,
+63906=>14095,
+63898=>14097,
+11961=>14099,
+32770=>14099,
+157360=>14100,
+11911=>14105,
+132648=>14105,
+131210=>14108,
+133508=>14109,
+194604=>14109,
+11915=>14110,
+13630=>14110,
+21589=>14115,
+22841=>14117,
+23414=>14120,
+194669=>14121,
+23572=>14122,
+14306=>14123,
+23782=>14124,
+20040=>14126,
+194742=>14129,
+158105=>14134,
+25371=>14135,
+26211=>14138,
+194779=>14140,
+27126=>14143,
+27014=>14144,
+27596=>14148,
+28183=>14150,
+27818=>14153,
+11942=>14157,
+20012=>14157,
+29935=>14160,
+30069=>14161,
+30188=>14162,
+30286=>14163,
+16305=>14164,
+30570=>14165,
+30633=>14166,
+31571=>14173,
+16996=>14176,
+194924=>14180,
+32328=>14183,
+132415=>14188,
+11955=>14189,
+156266=>14189,
+33089=>14194,
+17491=>14195,
+33401=>14197,
+11966=>14197,
+64094=>14198,
+11967=>14198,
+64093=>14199,
+11968=>14199,
+20857=>14201,
+33626=>14202,
+17701=>14206,
+34292=>14208,
+131248=>14209,
+34429=>14214,
+13358=>14216,
+35014=>14217,
+18406=>14224,
+36808=>14233,
+166279=>14253,
+167447=>14256,
+38969=>14259,
+39432=>14266,
+39903=>14271,
+148206=>14282,
+21385=>14288,
+64017=>14290,
+194785=>14291,
+146622=>14293,
+132625=>14294,
+19972=>14296,
+19973=>14297,
+19999=>14298,
+20011=>14299,
+20015=>14300,
+20016=>14301,
+20032=>14302,
+20033=>14303,
+20036=>14304,
+11907=>14305,
+20058=>14305,
+20095=>14306,
+20109=>14307,
+20118=>14308,
+20153=>14309,
+20176=>14310,
+20192=>14311,
+20221=>14312,
+20223=>14313,
+20235=>14314,
+20245=>14315,
+20320=>14316,
+20283=>14317,
+20297=>14318,
+20308=>14319,
+20346=>14320,
+20349=>14321,
+20350=>14322,
+20375=>14323,
+20414=>14324,
+20431=>14325,
+20477=>14326,
+20480=>14327,
+20481=>14328,
+20496=>14329,
+20507=>14330,
+20519=>14331,
+20526=>14332,
+20567=>14333,
+20582=>14334,
+20586=>14335,
+20539=>14336,
+20623=>14337,
+20630=>14338,
+20636=>14339,
+20684=>14340,
+20710=>14341,
+20713=>14342,
+20719=>14343,
+20744=>14344,
+20747=>14345,
+20752=>14346,
+20763=>14347,
+20766=>14348,
+20831=>14349,
+20897=>14350,
+20924=>14351,
+20974=>14353,
+20980=>14354,
+20993=>14355,
+11913=>14356,
+20994=>14356,
+21011=>14357,
+21065=>14358,
+21089=>14359,
+21094=>14360,
+21139=>14361,
+21192=>14362,
+21232=>14363,
+21258=>14364,
+21259=>14365,
+21310=>14366,
+21324=>14367,
+21323=>14368,
+21345=>14369,
+21356=>14370,
+21419=>14371,
+21466=>14372,
+21478=>14373,
+21493=>14374,
+21543=>14375,
+21581=>14376,
+21606=>14377,
+21611=>14378,
+21620=>14379,
+21645=>14380,
+21654=>14381,
+21665=>14382,
+21677=>14383,
+21689=>14384,
+21695=>14385,
+21702=>14386,
+21709=>14387,
+21774=>14388,
+21803=>14389,
+21813=>14390,
+21834=>14391,
+21856=>14392,
+21896=>14394,
+21902=>14395,
+22024=>14396,
+22030=>14397,
+22031=>14398,
+22071=>14399,
+22079=>14400,
+22089=>14401,
+22091=>14402,
+22095=>14403,
+22118=>14404,
+22121=>14405,
+22127=>14406,
+22129=>14407,
+22130=>14408,
+22165=>14409,
+22170=>14410,
+22188=>14411,
+22189=>14412,
+22193=>14413,
+22217=>14414,
+22237=>14415,
+22244=>14416,
+22282=>14417,
+22293=>14418,
+22307=>14419,
+22319=>14420,
+22323=>14421,
+22324=>14422,
+22348=>14423,
+22384=>14424,
+22412=>14425,
+22428=>14426,
+22456=>14427,
+22502=>14428,
+22509=>14429,
+22517=>14430,
+22518=>14431,
+22527=>14432,
+22537=>14433,
+22560=>14434,
+22578=>14435,
+22652=>14436,
+22656=>14437,
+22697=>14438,
+22734=>14439,
+22736=>14440,
+22740=>14441,
+22746=>14442,
+22761=>14443,
+22796=>14444,
+22820=>14445,
+22831=>14446,
+22881=>14447,
+22893=>14448,
+22986=>14449,
+22994=>14450,
+23005=>14451,
+23011=>14452,
+23012=>14453,
+23044=>14454,
+23052=>14455,
+23075=>14456,
+23111=>14457,
+23125=>14458,
+23139=>14459,
+23149=>14460,
+23166=>14461,
+23198=>14462,
+23207=>14463,
+23212=>14464,
+23219=>14465,
+23264=>14466,
+23296=>14467,
+23321=>14468,
+23333=>14469,
+23341=>14470,
+23361=>14471,
+23420=>14472,
+23422=>14473,
+23423=>14474,
+23434=>14475,
+11919=>14476,
+23587=>14476,
+23595=>14477,
+23600=>14478,
+23651=>14479,
+23657=>14480,
+23676=>14481,
+23755=>14482,
+23762=>14483,
+23796=>14484,
+23844=>14485,
+23846=>14486,
+23875=>14487,
+23878=>14488,
+23882=>14489,
+23954=>14490,
+23956=>14491,
+23961=>14492,
+23968=>14493,
+24024=>14494,
+24032=>14495,
+24056=>14496,
+24064=>14497,
+24082=>14498,
+24084=>14499,
+24085=>14500,
+24088=>14501,
+24110=>14502,
+24152=>14503,
+24171=>14504,
+24172=>14505,
+24232=>14506,
+24234=>14507,
+24254=>14508,
+24255=>14509,
+24274=>14511,
+24327=>14512,
+24334=>14513,
+24348=>14514,
+24349=>14515,
+24354=>14516,
+24360=>14517,
+24374=>14518,
+24379=>14519,
+24384=>14520,
+12089=>14521,
+24400=>14521,
+24408=>14522,
+24420=>14523,
+24457=>14524,
+24476=>14525,
+24487=>14526,
+24484=>14527,
+24495=>14528,
+24504=>14529,
+11926=>14530,
+24516=>14530,
+24521=>14531,
+24545=>14532,
+24553=>14533,
+24557=>14534,
+24572=>14535,
+24599=>14536,
+24602=>14537,
+24627=>14538,
+24673=>14539,
+24703=>14540,
+24734=>14541,
+24740=>14542,
+24752=>14543,
+24779=>14544,
+24795=>14545,
+24824=>14546,
+24850=>14547,
+24851=>14548,
+24852=>14549,
+24860=>14550,
+24956=>14551,
+24973=>14552,
+24991=>14553,
+25000=>14554,
+25026=>14555,
+25055=>14556,
+25109=>14557,
+25129=>14558,
+25155=>14559,
+25158=>14560,
+11928=>14561,
+25164=>14561,
+25169=>14562,
+25174=>14563,
+25284=>14564,
+25340=>14565,
+25354=>14566,
+25357=>14567,
+25368=>14568,
+25401=>14569,
+25410=>14570,
+25411=>14571,
+25445=>14572,
+25460=>14573,
+25469=>14574,
+25476=>14575,
+25479=>14576,
+25488=>14577,
+25502=>14578,
+25553=>14579,
+25564=>14580,
+25609=>14581,
+25616=>14582,
+25634=>14583,
+25684=>14584,
+25691=>14585,
+25709=>14586,
+25723=>14587,
+25790=>14588,
+25791=>14589,
+25829=>14590,
+25847=>14591,
+25851=>14592,
+25860=>14593,
+25878=>14594,
+25881=>14595,
+25927=>14596,
+25959=>14597,
+25985=>14598,
+25989=>14599,
+26050=>14600,
+26096=>14601,
+26098=>14602,
+26156=>14603,
+26188=>14604,
+26203=>14605,
+26204=>14606,
+26209=>14607,
+26219=>14608,
+26276=>14610,
+26312=>14611,
+26348=>14612,
+26373=>14613,
+26387=>14614,
+26419=>14615,
+26440=>14616,
+26444=>14617,
+26486=>14618,
+26491=>14619,
+26544=>14620,
+26546=>14621,
+26617=>14622,
+26583=>14623,
+26585=>14624,
+26608=>14625,
+26668=>14626,
+26672=>14627,
+26673=>14628,
+26715=>14629,
+26738=>14630,
+26741=>14631,
+26746=>14632,
+26756=>14633,
+26789=>14634,
+26802=>14635,
+26832=>14636,
+26838=>14637,
+26856=>14638,
+26861=>14639,
+26864=>14640,
+26865=>14641,
+26876=>14642,
+26897=>14643,
+26899=>14644,
+26933=>14645,
+26939=>14646,
+26967=>14647,
+26979=>14648,
+26994=>14649,
+27007=>14650,
+27008=>14651,
+27046=>14652,
+27053=>14653,
+27063=>14654,
+27094=>14655,
+27095=>14656,
+27137=>14657,
+27151=>14658,
+27157=>14659,
+27176=>14660,
+27188=>14661,
+27198=>14662,
+27205=>14663,
+27216=>14664,
+27217=>14665,
+27222=>14666,
+27227=>14667,
+27267=>14668,
+27273=>14669,
+27281=>14670,
+27293=>14671,
+27294=>14672,
+27295=>14673,
+27356=>14674,
+27367=>14675,
+27372=>14676,
+27422=>14677,
+27428=>14678,
+27445=>14679,
+27462=>14680,
+27478=>14681,
+27488=>14682,
+27522=>14683,
+27582=>14684,
+27617=>14685,
+27633=>14686,
+27664=>14687,
+27699=>14688,
+27701=>14689,
+11937=>14689,
+11938=>14690,
+27737=>14691,
+27766=>14692,
+27771=>14693,
+27781=>14694,
+27797=>14695,
+27804=>14696,
+27856=>14697,
+27860=>14698,
+27862=>14699,
+27872=>14700,
+27883=>14701,
+27884=>14702,
+27886=>14703,
+27914=>14704,
+27918=>14705,
+27921=>14706,
+27950=>14707,
+27991=>14708,
+27998=>14709,
+28005=>14710,
+28034=>14711,
+28095=>14712,
+28100=>14713,
+28106=>14714,
+28118=>14715,
+28137=>14716,
+28194=>14717,
+28241=>14718,
+28359=>14719,
+28362=>14720,
+28366=>14721,
+28413=>14722,
+28442=>14723,
+28458=>14724,
+28463=>14725,
+28467=>14726,
+28506=>14727,
+28510=>14728,
+28514=>14729,
+28541=>14730,
+28555=>14731,
+28557=>14732,
+28562=>14733,
+28564=>14734,
+28570=>14735,
+28583=>14736,
+28584=>14737,
+28598=>14738,
+28634=>14739,
+28638=>14740,
+28729=>14742,
+28732=>14743,
+28756=>14745,
+28765=>14746,
+28766=>14747,
+28772=>14748,
+11939=>14749,
+28780=>14749,
+28798=>14750,
+28801=>14751,
+28821=>14752,
+28855=>14753,
+28883=>14754,
+28884=>14755,
+28888=>14756,
+28892=>14757,
+28935=>14758,
+28960=>14759,
+28977=>14760,
+29002=>14761,
+29010=>14762,
+29024=>14763,
+29049=>14764,
+29074=>14765,
+29131=>14767,
+29139=>14768,
+29142=>14769,
+29184=>14770,
+29213=>14771,
+29227=>14772,
+29240=>14773,
+29249=>14774,
+29267=>14775,
+29269=>14776,
+29270=>14777,
+29276=>14778,
+29325=>14779,
+11944=>14780,
+29357=>14780,
+29364=>14781,
+29383=>14782,
+29435=>14783,
+29444=>14784,
+29445=>14785,
+29480=>14786,
+29489=>14787,
+29507=>14788,
+29548=>14789,
+29564=>14790,
+29571=>14791,
+29573=>14792,
+29574=>14793,
+29589=>14794,
+29598=>14795,
+29599=>14796,
+29600=>14797,
+29606=>14798,
+29611=>14799,
+29621=>14800,
+29623=>14801,
+29628=>14802,
+29647=>14803,
+29657=>14804,
+29673=>14805,
+29684=>14806,
+29693=>14807,
+29700=>14808,
+29706=>14809,
+29722=>14810,
+29723=>14811,
+29732=>14812,
+29736=>14813,
+29740=>14814,
+29743=>14815,
+29744=>14816,
+29745=>14817,
+29753=>14818,
+29764=>14819,
+29767=>14820,
+29771=>14821,
+29773=>14822,
+29777=>14823,
+29783=>14824,
+29798=>14825,
+29803=>14826,
+29809=>14827,
+29824=>14828,
+29829=>14829,
+29830=>14830,
+29831=>14831,
+29840=>14832,
+29848=>14833,
+29852=>14834,
+29856=>14835,
+29859=>14836,
+29864=>14837,
+29867=>14838,
+29877=>14839,
+29887=>14840,
+29896=>14841,
+29914=>14842,
+29918=>14843,
+30030=>14844,
+30073=>14845,
+30081=>14846,
+30096=>14847,
+12135=>14848,
+30098=>14848,
+30099=>14849,
+30132=>14850,
+30180=>14851,
+30201=>14852,
+30208=>14853,
+30218=>14854,
+30229=>14855,
+30230=>14856,
+30233=>14857,
+30238=>14858,
+30253=>14859,
+30261=>14860,
+30275=>14861,
+30283=>14862,
+30309=>14863,
+30317=>14864,
+30319=>14865,
+30321=>14866,
+30324=>14867,
+30372=>14868,
+30373=>14869,
+30405=>14870,
+30412=>14871,
+30444=>14872,
+30460=>14873,
+30516=>14874,
+30518=>14875,
+30556=>14876,
+30559=>14877,
+30560=>14878,
+30578=>14879,
+30589=>14880,
+30613=>14881,
+30634=>14882,
+30694=>14883,
+30704=>14884,
+30708=>14885,
+30726=>14886,
+30754=>14887,
+30765=>14888,
+30766=>14889,
+30768=>14890,
+30773=>14891,
+30824=>14892,
+30878=>14893,
+30920=>14894,
+30924=>14895,
+30926=>14896,
+30948=>14897,
+30944=>14898,
+30945=>14899,
+30962=>14900,
+30967=>14901,
+30971=>14902,
+31025=>14903,
+11949=>14905,
+31035=>14905,
+31037=>14906,
+31045=>14907,
+31067=>14908,
+31068=>14909,
+31115=>14910,
+31126=>14911,
+31128=>14912,
+12145=>14913,
+31160=>14913,
+31163=>14914,
+31178=>14915,
+31194=>14916,
+31235=>14917,
+31241=>14918,
+31249=>14919,
+31262=>14920,
+31277=>14921,
+31289=>14922,
+31301=>14923,
+31308=>14924,
+31325=>14925,
+31341=>14927,
+31352=>14928,
+31392=>14929,
+31395=>14930,
+31411=>14931,
+31419=>14932,
+31420=>14933,
+31430=>14934,
+31495=>14935,
+31508=>14936,
+31527=>14937,
+31537=>14938,
+31559=>14939,
+31566=>14940,
+31584=>14941,
+31593=>14942,
+31597=>14943,
+31602=>14944,
+31633=>14945,
+31663=>14946,
+31703=>14947,
+31705=>14948,
+31755=>14949,
+31759=>14950,
+31776=>14951,
+31782=>14952,
+31793=>14953,
+31798=>14954,
+31825=>14955,
+31833=>14956,
+31847=>14957,
+31854=>14958,
+31856=>14959,
+31932=>14960,
+31935=>14961,
+31944=>14962,
+31945=>14963,
+31959=>14964,
+31961=>14965,
+31965=>14966,
+31979=>14967,
+32007=>14968,
+32008=>14969,
+32009=>14970,
+32019=>14971,
+32029=>14972,
+32035=>14973,
+32065=>14974,
+32083=>14975,
+32089=>14976,
+32093=>14977,
+32122=>14978,
+32134=>14979,
+32139=>14980,
+32140=>14981,
+32204=>14982,
+32235=>14983,
+32241=>14984,
+32249=>14985,
+32264=>14986,
+32273=>14987,
+32277=>14988,
+32288=>14989,
+32327=>14990,
+32354=>14991,
+32366=>14992,
+32371=>14993,
+32397=>14994,
+32401=>14995,
+32408=>14996,
+32580=>14997,
+32591=>14998,
+11947=>14999,
+11954=>14999,
+32594=>14999,
+11953=>15000,
+32595=>15000,
+32609=>15001,
+32657=>15002,
+32703=>15003,
+32718=>15004,
+32735=>15005,
+32741=>15006,
+32748=>15007,
+32750=>15008,
+32751=>15009,
+32762=>15010,
+32782=>15011,
+32785=>15012,
+32788=>15013,
+32804=>15014,
+32806=>15015,
+32826=>15016,
+32828=>15017,
+32864=>15018,
+32881=>15019,
+32885=>15020,
+32926=>15021,
+32934=>15022,
+32939=>15023,
+32983=>15024,
+32984=>15025,
+33046=>15026,
+33048=>15027,
+33082=>15028,
+33098=>15029,
+33100=>15030,
+33153=>15031,
+33156=>15032,
+33204=>15033,
+33231=>15034,
+33273=>15035,
+33283=>15036,
+33313=>15037,
+33330=>15038,
+33332=>15039,
+33350=>15040,
+33355=>15041,
+33359=>15042,
+33422=>15043,
+33454=>15044,
+33463=>15045,
+33470=>15046,
+33478=>15047,
+33534=>15048,
+33603=>15049,
+33617=>15050,
+33621=>15051,
+33670=>15052,
+33677=>15053,
+33682=>15054,
+33688=>15055,
+33705=>15056,
+33727=>15057,
+33728=>15058,
+33770=>15059,
+33807=>15060,
+33809=>15061,
+33866=>15062,
+33910=>15063,
+33960=>15064,
+33967=>15065,
+33984=>15066,
+33986=>15067,
+34032=>15068,
+34045=>15069,
+34060=>15070,
+34100=>15071,
+34142=>15072,
+34191=>15073,
+34231=>15074,
+34254=>15075,
+34221=>15076,
+34322=>15077,
+34345=>15078,
+34386=>15079,
+34403=>15080,
+34412=>15081,
+34415=>15082,
+34426=>15083,
+34445=>15084,
+34449=>15085,
+34456=>15086,
+34471=>15087,
+34472=>15088,
+34554=>15089,
+34557=>15090,
+34571=>15091,
+34579=>15092,
+34585=>15093,
+34590=>15094,
+34600=>15095,
+34622=>15096,
+34673=>15097,
+34696=>15098,
+34713=>15099,
+34732=>15100,
+34733=>15101,
+34741=>15102,
+34774=>15103,
+34795=>15104,
+34797=>15105,
+34817=>15106,
+34822=>15108,
+34827=>15109,
+34836=>15110,
+34844=>15111,
+34902=>15112,
+34911=>15113,
+11970=>15114,
+34916=>15114,
+34968=>15115,
+34986=>15116,
+35005=>15117,
+35006=>15118,
+35018=>15119,
+35026=>15120,
+35035=>15121,
+35056=>15122,
+35057=>15123,
+35078=>15124,
+35096=>15125,
+35097=>15126,
+35098=>15127,
+35111=>15128,
+35120=>15129,
+35134=>15130,
+35195=>15131,
+35284=>15132,
+35286=>15133,
+35301=>15134,
+35313=>15135,
+35335=>15136,
+35343=>15137,
+35349=>15138,
+35362=>15139,
+35406=>15140,
+35455=>15141,
+35572=>15142,
+35615=>15143,
+35639=>15144,
+35651=>15145,
+35652=>15146,
+35668=>15147,
+35740=>15148,
+35742=>15149,
+35911=>15150,
+35924=>15151,
+35955=>15152,
+36004=>15153,
+36057=>15154,
+36065=>15155,
+36088=>15156,
+36094=>15157,
+36123=>15158,
+36201=>15159,
+36204=>15160,
+36228=>15161,
+36237=>15162,
+36245=>15163,
+36262=>15164,
+36294=>15165,
+36302=>15166,
+36324=>15167,
+36332=>15168,
+36384=>15169,
+36427=>15170,
+36460=>15171,
+36464=>15172,
+36474=>15173,
+36498=>15174,
+36526=>15175,
+36531=>15176,
+36561=>15177,
+36564=>15178,
+36601=>15179,
+36631=>15180,
+36662=>15181,
+36774=>15182,
+12193=>15183,
+36789=>15183,
+11981=>15184,
+36790=>15184,
+36832=>15186,
+36836=>15187,
+36854=>15188,
+36866=>15189,
+36908=>15190,
+36932=>15191,
+37000=>15192,
+37013=>15193,
+37017=>15194,
+37019=>15195,
+37026=>15196,
+37044=>15197,
+37079=>15198,
+37085=>15199,
+37108=>15200,
+37143=>15201,
+37148=>15202,
+37169=>15203,
+37178=>15204,
+37181=>15205,
+37192=>15206,
+37211=>15207,
+37217=>15208,
+37220=>15209,
+37262=>15210,
+37278=>15211,
+37288=>15212,
+37293=>15213,
+37294=>15214,
+37298=>15215,
+37308=>15216,
+37360=>15217,
+37367=>15218,
+37371=>15219,
+37383=>15220,
+37416=>15221,
+37427=>15222,
+37432=>15223,
+37443=>15224,
+37447=>15225,
+37455=>15226,
+37472=>15227,
+37570=>15228,
+37579=>15229,
+37580=>15230,
+37599=>15231,
+37645=>15232,
+37653=>15233,
+37663=>15234,
+37671=>15235,
+37703=>15236,
+37714=>15237,
+37738=>15239,
+37741=>15240,
+37787=>15241,
+37818=>15242,
+37801=>15243,
+37825=>15244,
+37834=>15245,
+37858=>15246,
+37882=>15247,
+37885=>15248,
+37903=>15249,
+37940=>15250,
+37951=>15251,
+37973=>15252,
+37995=>15253,
+38002=>15254,
+11986=>15255,
+38264=>15255,
+38310=>15256,
+38313=>15257,
+38324=>15259,
+38333=>15260,
+38362=>15261,
+11983=>15262,
+11990=>15262,
+38429=>15262,
+38465=>15263,
+38488=>15264,
+38532=>15265,
+38564=>15266,
+38569=>15267,
+38610=>15268,
+195060=>15269,
+38622=>15270,
+38633=>15271,
+38641=>15272,
+38658=>15273,
+38665=>15274,
+38746=>15275,
+38755=>15276,
+38766=>15277,
+38771=>15278,
+38810=>15279,
+38818=>15280,
+38837=>15281,
+38838=>15282,
+38873=>15283,
+38878=>15284,
+38900=>15285,
+38922=>15286,
+38926=>15287,
+38942=>15288,
+38947=>15289,
+38955=>15290,
+38974=>15291,
+38994=>15292,
+38995=>15293,
+39001=>15294,
+39020=>15295,
+39096=>15296,
+39098=>15297,
+39103=>15298,
+39112=>15299,
+39141=>15300,
+39218=>15301,
+39219=>15302,
+39232=>15303,
+39245=>15304,
+39260=>15305,
+39263=>15306,
+39345=>15307,
+39353=>15308,
+39354=>15309,
+39369=>15310,
+39426=>15311,
+39446=>15312,
+39460=>15313,
+39463=>15314,
+39469=>15315,
+39470=>15316,
+39478=>15317,
+39480=>15318,
+39498=>15319,
+39510=>15320,
+39605=>15321,
+39606=>15322,
+39673=>15323,
+39683=>15324,
+39712=>15325,
+39731=>15326,
+39732=>15327,
+39795=>15328,
+39801=>15329,
+39847=>15330,
+39873=>15331,
+39879=>15332,
+39895=>15333,
+39911=>15334,
+39915=>15335,
+39927=>15336,
+39930=>15337,
+39933=>15338,
+39947=>15339,
+39975=>15340,
+39978=>15341,
+39990=>15342,
+40001=>15343,
+40019=>15344,
+40035=>15345,
+40048=>15346,
+40055=>15347,
+40194=>15348,
+40258=>15349,
+40263=>15350,
+40291=>15351,
+40297=>15352,
+40316=>15353,
+40318=>15354,
+40333=>15355,
+40369=>15356,
+40387=>15357,
+40391=>15358,
+40406=>15359,
+40415=>15360,
+40427=>15361,
+40436=>15362,
+40469=>15363,
+40477=>15364,
+40612=>15365,
+40616=>15366,
+40620=>15367,
+40679=>15368,
+40686=>15369,
+40720=>15370,
+40722=>15371,
+40727=>15372,
+40729=>15373,
+40751=>15374,
+40759=>15375,
+40761=>15376,
+40769=>15377,
+40773=>15378,
+40791=>15379,
+40808=>15380,
+40817=>15381,
+40821=>15382,
+40848=>15383,
+40852=>15384,
+40866=>15385,
+13317=>15387,
+194564=>15388,
+22048=>15389,
+24267=>15390,
+11925=>15391,
+144954=>15393,
+28665=>15395,
+28390=>15396,
+29107=>15397,
+11940=>15398,
+64073=>15398,
+11980=>15403,
+64102=>15403,
+23986=>15405,
+20435=>15407,
+20697=>15408,
+20720=>15409,
+20931=>15410,
+22134=>15411,
+27220=>15412,
+27905=>15413,
+28112=>15414,
+28226=>15415,
+28377=>15416,
+29668=>15417,
+29729=>15418,
+30060=>15419,
+30801=>15420,
+34805=>15421,
+144382=>15422,
+29608=>15423,
+15091=>15424,
+13531=>15425,
+17420=>15426,
+16010=>15427,
+40893=>15429,
+19432=>15430,
+40892=>15431,
+16090=>15432,
+15138=>15433,
+40894=>15434,
+17786=>15435,
+16531=>15436,
+18021=>15438,
+16643=>15439,
+17043=>15440,
+18094=>15441,
+13448=>15442,
+140809=>15443,
+63584=>15444,
+63585=>15445,
+63586=>15446,
+63610=>15447,
+63615=>15448,
+8836=>15472,
+8837=>15473,
+8842=>15474,
+8843=>15475,
+8713=>15476,
+8965=>15478,
+8966=>15479,
+8741=>15489,
+8742=>15490,
+8802=>15505,
+8773=>15507,
+8776=>15508,
+8822=>15509,
+8823=>15510,
+8487=>15515,
+8922=>15725,
+8923=>15726,
+8533=>15727,
+8984=>15728,
+7742=>15729,
+7743=>15730,
+504=>15731,
+505=>15732,
+470=>15733,
+472=>15734,
+474=>15735,
+476=>15736,
+260=>15737,
+728=>15738,
+317=>15739,
+346=>15740,
+350=>15741,
+356=>15742,
+377=>15743,
+379=>15744,
+261=>15745,
+731=>15746,
+318=>15747,
+347=>15748,
+711=>15749,
+351=>15750,
+357=>15751,
+378=>15752,
+733=>15753,
+380=>15754,
+340=>15755,
+258=>15756,
+313=>15757,
+262=>15758,
+268=>15759,
+280=>15760,
+270=>15761,
+323=>15762,
+327=>15763,
+336=>15764,
+344=>15765,
+368=>15766,
+354=>15767,
+341=>15768,
+259=>15769,
+314=>15770,
+263=>15771,
+269=>15772,
+281=>15773,
+271=>15774,
+273=>15775,
+324=>15776,
+328=>15777,
+337=>15778,
+345=>15779,
+369=>15780,
+355=>15781,
+729=>15782,
+264=>15783,
+284=>15784,
+292=>15785,
+308=>15786,
+348=>15787,
+364=>15788,
+265=>15789,
+285=>15790,
+293=>15791,
+309=>15792,
+349=>15793,
+365=>15794,
+625=>15795,
+651=>15796,
+638=>15797,
+620=>15798,
+622=>15799,
+633=>15800,
+648=>15801,
+598=>15802,
+627=>15803,
+637=>15804,
+642=>15805,
+656=>15806,
+635=>15807,
+621=>15808,
+607=>15809,
+626=>15810,
+669=>15811,
+654=>15812,
+609=>15813,
+624=>15814,
+641=>15815,
+295=>15816,
+661=>15817,
+660=>15818,
+614=>15819,
+664=>15820,
+450=>15821,
+595=>15822,
+599=>15823,
+644=>15824,
+608=>15825,
+403=>15826,
+616=>15827,
+649=>15828,
+600=>15829,
+604=>15830,
+606=>15831,
+592=>15832,
+623=>15833,
+650=>15834,
+612=>15835,
+594=>15836,
+653=>15837,
+613=>15838,
+674=>15839,
+673=>15840,
+597=>15841,
+657=>15842,
+634=>15843,
+615=>15844,
+865=>15845,
+712=>15846,
+716=>15847,
+721=>15848,
+8255=>15849,
+783=>15850,
+741=>15851,
+742=>15852,
+743=>15853,
+744=>15854,
+745=>15855,
+805=>15858,
+812=>15859,
+825=>15860,
+796=>15861,
+799=>15862,
+800=>15863,
+829=>15864,
+809=>15865,
+815=>15866,
+734=>15867,
+804=>15868,
+816=>15869,
+828=>15870,
+820=>15871,
+797=>15872,
+798=>15873,
+792=>15874,
+793=>15875,
+810=>15876,
+826=>15877,
+827=>15878,
+794=>15879,
+610=>15883,
+611=>15884,
+618=>15885,
+628=>15886,
+630=>15887,
+632=>15888,
+640=>15889,
+655=>15890,
+665=>15891,
+668=>15892,
+671=>15893,
+688=>15894,
+690=>15895,
+695=>15896,
+705=>15897,
+736=>15898,
+737=>15899,
+8862=>15906,
+12348=>16194,
+12543=>16195,
+12310=>16197,
+12311=>16198,
+9838=>16199,
+9835=>16200,
+10548=>16201,
+10549=>16202,
+10687=>16203,
+12448=>16205,
+10746=>16207,
+10747=>16208,
+962=>16222,
+9461=>16223,
+9462=>16224,
+9463=>16225,
+9464=>16226,
+9465=>16227,
+9466=>16228,
+9467=>16229,
+9468=>16230,
+9469=>16231,
+9470=>16232,
+9750=>16233,
+9751=>16234,
+9649=>16235,
+12784=>16236,
+12785=>16237,
+12786=>16238,
+12787=>16239,
+12788=>16240,
+12789=>16241,
+12790=>16242,
+12791=>16243,
+12792=>16244,
+12793=>16245,
+12794=>16247,
+12795=>16248,
+12796=>16249,
+12797=>16250,
+12798=>16251,
+12799=>16252,
+9150=>16253,
+9151=>16254,
+9152=>16255,
+9153=>16256,
+9154=>16257,
+9155=>16258,
+9156=>16259,
+9157=>16260,
+9158=>16261,
+9159=>16262,
+9160=>16263,
+9161=>16264,
+9162=>16265,
+9163=>16266,
+9164=>16267,
+10003=>16270,
+9251=>16272,
+9166=>16273,
+9680=>16274,
+9681=>16275,
+9682=>16276,
+9683=>16277,
+8263=>16278,
+8264=>16279,
+8273=>16281,
+8258=>16282,
+12688=>16283,
+12689=>16284,
+12690=>16285,
+12691=>16286,
+12692=>16287,
+12693=>16288,
+12694=>16289,
+12695=>16290,
+12696=>16291,
+12697=>16292,
+12698=>16293,
+12699=>16294,
+12700=>16295,
+12701=>16296,
+12702=>16297,
+12703=>16298,
+9136=>16312,
+9137=>16313,
+9842=>16314,
+9843=>16315,
+9844=>16316,
+9845=>16317,
+9846=>16318,
+9847=>16319,
+9848=>16320,
+9849=>16321,
+9850=>16322,
+9851=>16323,
+9852=>16324,
+9853=>16325,
+12441=>16326,
+12442=>16327,
+8413=>16328,
+20296=>16779,
+20319=>16780,
+20330=>16781,
+20332=>16782,
+20494=>16783,
+20504=>16784,
+20545=>16785,
+20722=>16786,
+20688=>16787,
+20742=>16788,
+20739=>16789,
+20789=>16790,
+20821=>16791,
+20823=>16792,
+13493=>16793,
+20938=>16794,
+20962=>16795,
+21079=>16796,
+21196=>16797,
+21206=>16798,
+21243=>16799,
+21276=>16800,
+21347=>16801,
+21405=>16802,
+21522=>16803,
+21631=>16804,
+21640=>16805,
+21840=>16806,
+21889=>16807,
+21933=>16808,
+21966=>16809,
+22075=>16810,
+22174=>16811,
+22185=>16812,
+22195=>16813,
+22391=>16814,
+22396=>16815,
+135963=>16816,
+22479=>16817,
+22500=>16818,
+22628=>16819,
+22665=>16820,
+136302=>16821,
+22738=>16822,
+22752=>16823,
+34369=>16824,
+22923=>16825,
+22930=>16826,
+22979=>16827,
+23059=>16828,
+23143=>16829,
+23159=>16830,
+23172=>16831,
+23236=>16832,
+137405=>16833,
+23421=>16834,
+23443=>16835,
+23570=>16836,
+64060=>16837,
+136884=>16838,
+23674=>16839,
+23695=>16840,
+23711=>16841,
+23715=>16842,
+23722=>16843,
+23760=>16844,
+138804=>16845,
+23821=>16846,
+23879=>16847,
+23937=>16848,
+23972=>16849,
+23975=>16850,
+24011=>16851,
+24158=>16852,
+24313=>16853,
+24320=>16854,
+24322=>16855,
+24355=>16856,
+24381=>16857,
+24404=>16858,
+24445=>16859,
+24589=>16860,
+24596=>16861,
+24600=>16862,
+24629=>16863,
+24647=>16864,
+24733=>16865,
+24788=>16866,
+24797=>16867,
+24875=>16868,
+25020=>16869,
+25017=>16870,
+25122=>16871,
+25178=>16872,
+25199=>16873,
+25302=>16874,
+25468=>16875,
+25573=>16876,
+25721=>16877,
+25796=>16878,
+25808=>16879,
+25897=>16880,
+26013=>16881,
+26170=>16882,
+26146=>16883,
+26155=>16884,
+26160=>16885,
+26163=>16886,
+26184=>16887,
+143812=>16888,
+26231=>16889,
+26232=>16890,
+26253=>16891,
+26299=>16892,
+26331=>16893,
+26344=>16894,
+26439=>16895,
+26497=>16896,
+26515=>16897,
+26520=>16898,
+26523=>16899,
+26620=>16900,
+26653=>16901,
+26787=>16902,
+26890=>16903,
+26953=>16904,
+144836=>16905,
+26946=>16906,
+26980=>16907,
+27045=>16908,
+27087=>16909,
+15286=>16910,
+15299=>16911,
+27113=>16912,
+27125=>16913,
+145215=>16914,
+27195=>16915,
+145251=>16916,
+27284=>16917,
+27301=>16918,
+15375=>16919,
+27419=>16920,
+27436=>16921,
+27495=>16922,
+27561=>16923,
+27565=>16924,
+27607=>16925,
+27647=>16926,
+27653=>16927,
+27764=>16928,
+27800=>16929,
+27899=>16930,
+27846=>16931,
+27953=>16932,
+27961=>16933,
+27967=>16934,
+27992=>16935,
+28052=>16936,
+28074=>16937,
+28123=>16938,
+28125=>16939,
+28228=>16940,
+28254=>16941,
+28337=>16942,
+28353=>16943,
+28432=>16944,
+28505=>16945,
+28513=>16946,
+28542=>16947,
+28556=>16948,
+28576=>16949,
+28604=>16950,
+28615=>16951,
+28618=>16952,
+28656=>16953,
+28750=>16954,
+28789=>16955,
+28836=>16956,
+28900=>16957,
+28971=>16958,
+28958=>16959,
+28974=>16960,
+29009=>16961,
+29032=>16962,
+29061=>16963,
+29063=>16964,
+29114=>16965,
+29124=>16966,
+29205=>16967,
+15935=>16968,
+29339=>16969,
+149489=>16970,
+29479=>16971,
+29520=>16972,
+29542=>16973,
+29602=>16974,
+29739=>16975,
+29766=>16976,
+29794=>16977,
+29805=>16978,
+29862=>16979,
+29865=>16980,
+29897=>16981,
+29951=>16982,
+29975=>16983,
+16242=>16984,
+30158=>16985,
+30210=>16986,
+30216=>16987,
+30308=>16988,
+30337=>16989,
+30365=>16990,
+30378=>16991,
+30390=>16992,
+30414=>16993,
+30420=>16994,
+30438=>16995,
+30449=>16996,
+30474=>16997,
+30489=>16998,
+30541=>16999,
+30542=>17000,
+30586=>17001,
+30592=>17002,
+30612=>17003,
+30688=>17004,
+152718=>17005,
+30787=>17006,
+30830=>17007,
+30896=>17008,
+152846=>17009,
+30893=>17010,
+30976=>17011,
+31004=>17012,
+31022=>17013,
+31028=>17014,
+31046=>17015,
+31097=>17016,
+31176=>17017,
+153457=>17018,
+31188=>17019,
+31198=>17020,
+31211=>17021,
+31213=>17022,
+31365=>17023,
+154052=>17024,
+31438=>17025,
+31485=>17026,
+31506=>17027,
+31533=>17028,
+31547=>17029,
+31599=>17030,
+31745=>17031,
+31795=>17032,
+155041=>17033,
+31853=>17034,
+31865=>17035,
+31887=>17036,
+31892=>17037,
+31904=>17038,
+31957=>17039,
+32049=>17040,
+32092=>17041,
+32131=>17042,
+32166=>17043,
+32194=>17044,
+32296=>17045,
+32663=>17046,
+32731=>17047,
+32821=>17048,
+32823=>17049,
+32970=>17050,
+32992=>17051,
+33011=>17052,
+33120=>17053,
+33127=>17054,
+33128=>17055,
+33133=>17056,
+33211=>17057,
+33226=>17058,
+33239=>17059,
+17499=>17060,
+33376=>17061,
+33396=>17062,
+158463=>17063,
+33441=>17064,
+33443=>17065,
+33444=>17066,
+33449=>17067,
+33471=>17068,
+33493=>17069,
+33533=>17070,
+33536=>17071,
+33570=>17072,
+33581=>17073,
+33594=>17074,
+33607=>17075,
+33661=>17076,
+33703=>17077,
+33743=>17078,
+33745=>17079,
+33761=>17080,
+33793=>17081,
+33798=>17082,
+33887=>17083,
+33904=>17084,
+33907=>17085,
+33925=>17086,
+33950=>17087,
+33978=>17088,
+159296=>17089,
+34098=>17090,
+34078=>17091,
+34095=>17092,
+34148=>17093,
+34170=>17094,
+34188=>17095,
+34210=>17096,
+34251=>17097,
+34285=>17098,
+34303=>17099,
+34308=>17100,
+34309=>17101,
+34320=>17102,
+159988=>17103,
+34328=>17104,
+34360=>17105,
+34391=>17106,
+34402=>17107,
+17821=>17108,
+34421=>17109,
+34488=>17110,
+34556=>17111,
+34695=>17112,
+17898=>17113,
+34826=>17114,
+34832=>17115,
+35022=>17116,
+161412=>17117,
+35122=>17118,
+35129=>17119,
+35136=>17120,
+35220=>17121,
+35318=>17122,
+35399=>17123,
+35421=>17124,
+35425=>17125,
+35445=>17126,
+35536=>17127,
+35654=>17128,
+35673=>17129,
+35689=>17130,
+35741=>17131,
+35913=>17132,
+35944=>17133,
+36271=>17134,
+36305=>17135,
+36311=>17136,
+36387=>17137,
+36413=>17138,
+36475=>17139,
+164471=>17140,
+18500=>17141,
+36602=>17142,
+36638=>17143,
+36653=>17144,
+36692=>17145,
+164813=>17146,
+36840=>17147,
+36846=>17148,
+36872=>17149,
+36909=>17150,
+37015=>17151,
+37043=>17152,
+37054=>17153,
+37060=>17154,
+37061=>17155,
+37063=>17156,
+37103=>17157,
+37140=>17158,
+37142=>17159,
+37154=>17160,
+37155=>17161,
+37167=>17162,
+37172=>17163,
+37251=>17164,
+37361=>17165,
+37705=>17166,
+37732=>17167,
+37733=>17168,
+37795=>17169,
+37855=>17170,
+37892=>17171,
+37939=>17172,
+37962=>17173,
+37987=>17174,
+38001=>17175,
+38286=>17176,
+38303=>17177,
+38316=>17178,
+38326=>17179,
+38347=>17180,
+38352=>17181,
+38355=>17182,
+18864=>17183,
+38366=>17184,
+38565=>17185,
+38639=>17186,
+38734=>17187,
+38805=>17188,
+38830=>17189,
+38842=>17190,
+38849=>17191,
+38857=>17192,
+38875=>17193,
+38998=>17194,
+39143=>17195,
+39256=>17196,
+39427=>17197,
+39617=>17198,
+39619=>17199,
+39630=>17200,
+39638=>17201,
+39682=>17202,
+39688=>17203,
+19479=>17204,
+39725=>17205,
+39774=>17206,
+39782=>17207,
+39812=>17208,
+39818=>17209,
+39838=>17210,
+39886=>17211,
+39909=>17212,
+39928=>17213,
+39971=>17214,
+40015=>17215,
+40016=>17216,
+40037=>17217,
+40221=>17218,
+40222=>17219,
+40259=>17220,
+40274=>17221,
+40330=>17222,
+40342=>17223,
+40384=>17224,
+40364=>17225,
+40380=>17226,
+172432=>17227,
+40423=>17228,
+40455=>17229,
+40606=>17230,
+40623=>17231,
+40855=>17232,
+131209=>17233,
+19970=>17234,
+19983=>17235,
+19986=>17236,
+20009=>17237,
+20014=>17238,
+20039=>17239,
+131234=>17240,
+20049=>17241,
+13318=>17242,
+131236=>17243,
+20073=>17244,
+20125=>17245,
+13356=>17246,
+20156=>17247,
+20163=>17248,
+20168=>17249,
+20203=>17250,
+20186=>17251,
+20209=>17252,
+20213=>17253,
+20246=>17254,
+20324=>17255,
+20279=>17256,
+20286=>17257,
+20312=>17258,
+131603=>17259,
+20343=>17260,
+20344=>17261,
+20354=>17262,
+20357=>17263,
+20454=>17264,
+20402=>17265,
+20421=>17266,
+20427=>17267,
+20434=>17268,
+13418=>17269,
+20466=>17270,
+20499=>17271,
+20508=>17272,
+20558=>17273,
+20563=>17274,
+20579=>17275,
+20643=>17276,
+20616=>17277,
+20626=>17278,
+20627=>17279,
+20629=>17280,
+20650=>17281,
+131883=>17282,
+20657=>17283,
+20666=>17284,
+20667=>17285,
+20676=>17286,
+20679=>17287,
+20723=>17288,
+131969=>17289,
+20686=>17290,
+131953=>17291,
+20692=>17292,
+20705=>17293,
+13458=>17294,
+132089=>17295,
+20759=>17296,
+132170=>17297,
+20832=>17298,
+132361=>17299,
+20851=>17300,
+20867=>17301,
+20875=>17302,
+13500=>17303,
+20888=>17304,
+20899=>17305,
+20909=>17306,
+13511=>17307,
+132566=>17308,
+20979=>17309,
+21010=>17310,
+21014=>17311,
+132943=>17312,
+21077=>17313,
+21084=>17314,
+21100=>17315,
+21111=>17316,
+21124=>17317,
+21122=>17318,
+133127=>17319,
+21144=>17320,
+133178=>17321,
+21156=>17322,
+21178=>17323,
+21179=>17324,
+21194=>17325,
+21201=>17326,
+133305=>17327,
+21239=>17328,
+21301=>17329,
+21314=>17330,
+133500=>17331,
+133533=>17332,
+21351=>17333,
+21370=>17334,
+21412=>17335,
+21428=>17336,
+133843=>17337,
+21431=>17338,
+21440=>17339,
+133917=>17340,
+13661=>17341,
+13662=>17342,
+21461=>17343,
+13667=>17344,
+21492=>17345,
+21540=>17346,
+21544=>17347,
+13678=>17348,
+21571=>17349,
+21602=>17350,
+21612=>17351,
+21653=>17352,
+21664=>17353,
+21670=>17354,
+21678=>17355,
+21687=>17356,
+21690=>17357,
+21699=>17358,
+134469=>17359,
+21740=>17360,
+21743=>17361,
+21745=>17362,
+21747=>17363,
+21760=>17364,
+21761=>17365,
+21769=>17366,
+21820=>17367,
+21825=>17368,
+13734=>17369,
+21831=>17370,
+13736=>17371,
+21860=>17372,
+134625=>17373,
+21885=>17374,
+21890=>17375,
+21905=>17376,
+13765=>17377,
+21970=>17378,
+134805=>17379,
+134765=>17380,
+21951=>17381,
+21961=>17382,
+21964=>17383,
+21969=>17384,
+21981=>17385,
+13786=>17386,
+21986=>17387,
+134756=>17388,
+21993=>17389,
+22056=>17390,
+135007=>17391,
+22023=>17392,
+22032=>17393,
+22064=>17394,
+13812=>17395,
+22077=>17396,
+22080=>17397,
+22087=>17398,
+22110=>17399,
+22112=>17400,
+22125=>17401,
+13829=>17402,
+22152=>17403,
+22156=>17404,
+22173=>17405,
+22184=>17406,
+22194=>17407,
+22213=>17408,
+22221=>17409,
+22239=>17410,
+22248=>17411,
+22262=>17412,
+22263=>17413,
+135681=>17414,
+135765=>17415,
+22313=>17416,
+135803=>17417,
+22341=>17418,
+22342=>17419,
+22349=>17420,
+135796=>17421,
+22376=>17422,
+22383=>17423,
+22387=>17424,
+22388=>17425,
+22389=>17426,
+22395=>17427,
+135908=>17428,
+135895=>17429,
+22426=>17430,
+22429=>17431,
+22430=>17432,
+22440=>17433,
+22487=>17434,
+135933=>17435,
+22476=>17436,
+135990=>17437,
+136004=>17438,
+22494=>17439,
+22512=>17440,
+13898=>17441,
+22520=>17442,
+22523=>17443,
+22525=>17444,
+22532=>17445,
+22558=>17446,
+22567=>17447,
+22585=>17448,
+136132=>17449,
+22601=>17450,
+22604=>17451,
+22631=>17452,
+22666=>17453,
+22667=>17454,
+22669=>17455,
+22671=>17456,
+22672=>17457,
+22676=>17458,
+22685=>17459,
+22698=>17460,
+22705=>17461,
+136301=>17462,
+22723=>17463,
+22733=>17464,
+22754=>17465,
+22771=>17466,
+22772=>17467,
+22789=>17468,
+22790=>17469,
+22797=>17470,
+22804=>17471,
+136663=>17472,
+13969=>17473,
+22845=>17474,
+13977=>17475,
+22854=>17476,
+13974=>17477,
+158761=>17478,
+22879=>17479,
+136775=>17480,
+22901=>17481,
+22902=>17482,
+22908=>17483,
+22943=>17484,
+22958=>17485,
+22972=>17486,
+22984=>17487,
+22989=>17488,
+23006=>17489,
+23015=>17490,
+23022=>17491,
+136966=>17492,
+137026=>17493,
+14031=>17494,
+23053=>17495,
+23063=>17496,
+23079=>17497,
+23085=>17498,
+23141=>17499,
+23162=>17500,
+23179=>17501,
+23196=>17502,
+23199=>17503,
+23200=>17504,
+23202=>17505,
+23217=>17506,
+23221=>17507,
+23226=>17508,
+23231=>17509,
+23258=>17510,
+23260=>17511,
+23269=>17512,
+23280=>17513,
+23278=>17514,
+23285=>17515,
+23304=>17516,
+23319=>17517,
+23348=>17518,
+23372=>17519,
+23378=>17520,
+23400=>17521,
+23407=>17522,
+23425=>17523,
+23428=>17524,
+137667=>17525,
+23446=>17526,
+23468=>17527,
+14177=>17528,
+14178=>17529,
+23502=>17530,
+23510=>17531,
+14188=>17532,
+14187=>17533,
+23537=>17534,
+23549=>17535,
+14197=>17536,
+23555=>17537,
+23593=>17538,
+138326=>17539,
+23647=>17540,
+23655=>17541,
+23656=>17542,
+23664=>17543,
+138541=>17544,
+138565=>17545,
+138616=>17546,
+138594=>17547,
+23688=>17548,
+23690=>17549,
+14273=>17550,
+138657=>17551,
+138652=>17552,
+23712=>17553,
+23714=>17554,
+23719=>17555,
+138642=>17556,
+23725=>17557,
+23733=>17558,
+138679=>17559,
+23753=>17560,
+138720=>17561,
+138803=>17562,
+23814=>17563,
+23824=>17564,
+23851=>17565,
+23837=>17566,
+23840=>17567,
+23857=>17568,
+23865=>17569,
+14312=>17570,
+23905=>17571,
+23914=>17572,
+14324=>17573,
+23920=>17574,
+139038=>17575,
+14333=>17576,
+23944=>17577,
+14336=>17578,
+23959=>17579,
+23984=>17580,
+23988=>17581,
+139126=>17582,
+24017=>17583,
+24023=>17584,
+139258=>17585,
+24036=>17586,
+24041=>17587,
+14383=>17588,
+14390=>17589,
+14400=>17590,
+24095=>17591,
+24126=>17592,
+24137=>17593,
+14428=>17594,
+24150=>17595,
+14433=>17596,
+24173=>17597,
+24174=>17598,
+139643=>17599,
+24229=>17600,
+24236=>17601,
+24249=>17602,
+24262=>17603,
+24281=>17604,
+140062=>17605,
+24317=>17606,
+24328=>17607,
+140205=>17608,
+24350=>17609,
+24391=>17610,
+24419=>17611,
+24434=>17612,
+24446=>17613,
+24463=>17614,
+24482=>17615,
+24519=>17616,
+24523=>17617,
+24530=>17618,
+24531=>17619,
+24532=>17620,
+24546=>17621,
+24558=>17622,
+24559=>17623,
+24563=>17624,
+14615=>17625,
+24610=>17626,
+24612=>17627,
+14618=>17628,
+24652=>17629,
+24725=>17630,
+24744=>17631,
+141043=>17632,
+24753=>17633,
+24766=>17634,
+24776=>17635,
+24793=>17636,
+24814=>17637,
+24821=>17638,
+24848=>17639,
+24857=>17640,
+24862=>17641,
+24890=>17642,
+14703=>17643,
+24897=>17644,
+24902=>17645,
+24928=>17646,
+141403=>17647,
+24978=>17648,
+24979=>17649,
+24983=>17650,
+24997=>17651,
+25005=>17652,
+141483=>17653,
+25045=>17654,
+25053=>17655,
+25077=>17656,
+141711=>17657,
+25123=>17658,
+25170=>17659,
+25185=>17660,
+25188=>17661,
+25211=>17662,
+25197=>17663,
+25203=>17664,
+25241=>17665,
+25301=>17666,
+142008=>17667,
+25341=>17668,
+25347=>17669,
+25360=>17670,
+142159=>17671,
+142160=>17672,
+25394=>17673,
+25397=>17674,
+25403=>17675,
+25404=>17676,
+25409=>17677,
+25412=>17678,
+25422=>17679,
+142150=>17680,
+25433=>17681,
+142365=>17682,
+142246=>17683,
+25452=>17684,
+25497=>17685,
+142372=>17686,
+25492=>17687,
+25533=>17688,
+25556=>17689,
+25557=>17690,
+25568=>17691,
+25579=>17692,
+25580=>17693,
+25586=>17694,
+25630=>17695,
+25637=>17696,
+25641=>17697,
+25647=>17698,
+25690=>17699,
+25693=>17700,
+25715=>17701,
+25725=>17702,
+25735=>17703,
+25745=>17704,
+25759=>17705,
+25803=>17706,
+25804=>17707,
+25813=>17708,
+25815=>17709,
+142817=>17710,
+25828=>17711,
+25855=>17712,
+14958=>17713,
+25871=>17714,
+25876=>17715,
+14963=>17716,
+25886=>17717,
+25906=>17718,
+25924=>17719,
+25940=>17720,
+25963=>17721,
+25978=>17722,
+25988=>17723,
+25994=>17724,
+26034=>17725,
+26037=>17726,
+26040=>17727,
+26047=>17728,
+26057=>17729,
+26068=>17730,
+15062=>17731,
+26105=>17732,
+26108=>17733,
+26116=>17734,
+26120=>17735,
+26145=>17736,
+26154=>17737,
+26181=>17738,
+26193=>17739,
+26190=>17740,
+15082=>17741,
+143811=>17742,
+143861=>17743,
+143798=>17744,
+26218=>17745,
+26220=>17746,
+26221=>17747,
+26235=>17748,
+26240=>17749,
+26256=>17750,
+26258=>17751,
+15118=>17752,
+26285=>17753,
+26289=>17754,
+26293=>17755,
+15130=>17756,
+15132=>17757,
+15063=>17758,
+26369=>17759,
+26386=>17760,
+144242=>17761,
+26393=>17762,
+144339=>17763,
+144338=>17764,
+26445=>17765,
+26452=>17766,
+26461=>17767,
+144336=>17768,
+144356=>17769,
+144341=>17770,
+26484=>17771,
+144346=>17772,
+26514=>17773,
+144351=>17774,
+33635=>17775,
+26640=>17776,
+26563=>17777,
+26568=>17778,
+26578=>17779,
+26587=>17780,
+26615=>17781,
+144458=>17782,
+144465=>17783,
+144459=>17784,
+26648=>17785,
+26655=>17786,
+26669=>17787,
+144485=>17788,
+26675=>17789,
+26683=>17790,
+26686=>17791,
+26693=>17792,
+26697=>17793,
+26700=>17794,
+26709=>17795,
+26711=>17796,
+15223=>17797,
+26731=>17798,
+26734=>17799,
+26748=>17800,
+26754=>17801,
+26768=>17802,
+26774=>17803,
+15213=>17804,
+26776=>17805,
+26777=>17806,
+26778=>17807,
+26780=>17808,
+26794=>17809,
+26795=>17810,
+26804=>17811,
+26811=>17812,
+26875=>17813,
+144612=>17814,
+144730=>17815,
+26819=>17816,
+26821=>17817,
+26828=>17818,
+26841=>17819,
+26852=>17820,
+26853=>17821,
+26860=>17822,
+26871=>17823,
+26883=>17824,
+26887=>17825,
+15239=>17826,
+144788=>17827,
+15245=>17828,
+26950=>17829,
+26985=>17830,
+26988=>17831,
+27002=>17832,
+27026=>17833,
+15268=>17834,
+27030=>17835,
+27056=>17836,
+27066=>17837,
+27068=>17838,
+27072=>17839,
+27089=>17840,
+144953=>17841,
+144967=>17842,
+144952=>17843,
+27107=>17844,
+27118=>17845,
+27119=>17846,
+27123=>17847,
+15309=>17848,
+27124=>17849,
+27134=>17850,
+27153=>17851,
+27162=>17852,
+27165=>17853,
+145180=>17854,
+27186=>17855,
+27187=>17856,
+27199=>17857,
+27209=>17858,
+27258=>17859,
+27214=>17860,
+27218=>17861,
+27236=>17862,
+145164=>17863,
+27275=>17864,
+15344=>17865,
+27297=>17866,
+145252=>17867,
+27307=>17868,
+27325=>17869,
+27334=>17870,
+27348=>17871,
+27344=>17872,
+27357=>17873,
+145407=>17874,
+145383=>17875,
+27377=>17876,
+27378=>17877,
+27379=>17878,
+27389=>17879,
+145444=>17880,
+27403=>17881,
+27407=>17882,
+27408=>17883,
+27409=>17884,
+145469=>17885,
+27415=>17886,
+15398=>17887,
+27439=>17888,
+27466=>17889,
+27480=>17890,
+27500=>17891,
+27509=>17892,
+11934=>17893,
+27514=>17893,
+27521=>17894,
+27547=>17895,
+27566=>17896,
+146072=>17897,
+27581=>17898,
+27591=>17899,
+27592=>17900,
+27593=>17901,
+27610=>17902,
+27622=>17903,
+27623=>17904,
+27630=>17905,
+27650=>17906,
+27658=>17907,
+27662=>17908,
+27702=>17909,
+146559=>17910,
+27725=>17911,
+27739=>17912,
+27757=>17913,
+27780=>17914,
+27785=>17915,
+15555=>17916,
+27796=>17917,
+27799=>17918,
+27821=>17919,
+27842=>17920,
+15570=>17921,
+27868=>17922,
+27881=>17923,
+27885=>17924,
+146688=>17925,
+27904=>17926,
+27940=>17927,
+27942=>17928,
+27943=>17929,
+27751=>17930,
+27951=>17931,
+27964=>17932,
+27995=>17933,
+28000=>17934,
+28016=>17935,
+28032=>17936,
+28033=>17937,
+28042=>17938,
+28045=>17939,
+28049=>17940,
+28056=>17941,
+146752=>17942,
+146938=>17943,
+146937=>17944,
+146899=>17945,
+28075=>17946,
+28078=>17947,
+28084=>17948,
+28098=>17949,
+27956=>17950,
+28104=>17951,
+28110=>17952,
+28127=>17953,
+28150=>17954,
+28214=>17955,
+28190=>17956,
+15633=>17957,
+28210=>17958,
+28232=>17959,
+28233=>17960,
+28235=>17961,
+28236=>17962,
+28239=>17963,
+28243=>17964,
+28244=>17965,
+28247=>17966,
+28259=>17967,
+15646=>17968,
+28307=>17969,
+28327=>17970,
+28340=>17971,
+28355=>17972,
+28469=>17973,
+28395=>17974,
+28409=>17975,
+28411=>17976,
+28426=>17977,
+28428=>17978,
+28440=>17979,
+28453=>17980,
+28470=>17981,
+28476=>17982,
+147326=>17983,
+28498=>17984,
+28503=>17985,
+28512=>17986,
+28520=>17987,
+28560=>17988,
+28566=>17989,
+28606=>17990,
+28575=>17991,
+28581=>17992,
+28591=>17993,
+15716=>17994,
+28616=>17995,
+28617=>17996,
+28649=>17997,
+147606=>17998,
+28668=>17999,
+28672=>18000,
+28682=>18001,
+28707=>18002,
+147715=>18003,
+28730=>18004,
+28739=>18005,
+28743=>18006,
+28747=>18007,
+15770=>18008,
+28773=>18009,
+28777=>18010,
+28782=>18011,
+28790=>18012,
+28806=>18013,
+28823=>18014,
+147910=>18015,
+28831=>18016,
+28849=>18017,
+147966=>18018,
+28908=>18019,
+28874=>18020,
+28881=>18021,
+28931=>18022,
+28934=>18023,
+28936=>18024,
+28940=>18025,
+15808=>18026,
+28975=>18027,
+29008=>18028,
+29011=>18029,
+29022=>18030,
+15828=>18031,
+29078=>18032,
+29056=>18033,
+29083=>18034,
+29088=>18035,
+29090=>18036,
+29102=>18037,
+29103=>18038,
+148412=>18039,
+29145=>18040,
+29148=>18041,
+29191=>18042,
+15877=>18043,
+29236=>18044,
+29241=>18045,
+29250=>18046,
+29271=>18047,
+29283=>18048,
+149033=>18049,
+29294=>18050,
+29295=>18051,
+29304=>18052,
+29311=>18053,
+29326=>18054,
+149157=>18055,
+29358=>18056,
+29360=>18057,
+29377=>18058,
+15968=>18059,
+29388=>18060,
+15974=>18061,
+15976=>18062,
+29427=>18063,
+29434=>18064,
+29447=>18065,
+29458=>18066,
+29464=>18067,
+29465=>18068,
+16003=>18069,
+29497=>18070,
+29484=>18071,
+29491=>18072,
+29501=>18073,
+29522=>18074,
+16020=>18075,
+29547=>18076,
+149654=>18077,
+29550=>18078,
+29551=>18079,
+29553=>18080,
+29569=>18081,
+29578=>18082,
+29588=>18083,
+29592=>18084,
+29596=>18085,
+29605=>18086,
+29625=>18087,
+29631=>18088,
+29637=>18089,
+29643=>18090,
+29665=>18091,
+29671=>18092,
+29689=>18093,
+29715=>18094,
+29690=>18095,
+29697=>18096,
+29779=>18097,
+29760=>18098,
+29763=>18099,
+29778=>18100,
+29789=>18101,
+29825=>18102,
+29832=>18103,
+150093=>18104,
+29842=>18105,
+29847=>18106,
+29849=>18107,
+29857=>18108,
+29861=>18109,
+29866=>18110,
+29881=>18111,
+29883=>18112,
+29882=>18113,
+29910=>18114,
+29912=>18115,
+29931=>18116,
+150358=>18117,
+29946=>18118,
+150383=>18119,
+29984=>18120,
+29988=>18121,
+29994=>18122,
+16215=>18123,
+150550=>18124,
+30013=>18125,
+30014=>18126,
+30016=>18127,
+30024=>18128,
+30032=>18129,
+30034=>18130,
+30066=>18131,
+30065=>18132,
+30074=>18133,
+30077=>18134,
+30078=>18135,
+30092=>18136,
+16245=>18137,
+30114=>18138,
+16247=>18139,
+30128=>18140,
+30135=>18141,
+30143=>18142,
+30144=>18143,
+30150=>18144,
+30159=>18145,
+30163=>18146,
+30173=>18147,
+30175=>18148,
+30176=>18149,
+30183=>18150,
+30190=>18151,
+30193=>18152,
+30211=>18153,
+30232=>18154,
+30215=>18155,
+30223=>18156,
+16302=>18157,
+151054=>18158,
+30227=>18159,
+30235=>18160,
+30236=>18161,
+151095=>18162,
+30245=>18163,
+30248=>18164,
+30268=>18165,
+30259=>18166,
+151146=>18167,
+16329=>18168,
+30273=>18169,
+151179=>18170,
+30281=>18171,
+30293=>18172,
+16343=>18173,
+30318=>18174,
+30357=>18175,
+30369=>18176,
+30368=>18177,
+30375=>18178,
+30376=>18179,
+30383=>18180,
+151626=>18181,
+30409=>18182,
+151637=>18183,
+30440=>18184,
+151842=>18185,
+30487=>18186,
+30490=>18187,
+30509=>18188,
+30517=>18189,
+151977=>18190,
+16441=>18191,
+152037=>18192,
+152013=>18193,
+30552=>18194,
+152094=>18195,
+30588=>18196,
+152140=>18197,
+16472=>18198,
+30618=>18199,
+30623=>18200,
+30626=>18201,
+30628=>18202,
+30686=>18203,
+30687=>18204,
+30692=>18205,
+30698=>18206,
+30700=>18207,
+30715=>18208,
+152622=>18209,
+30725=>18210,
+30729=>18211,
+30733=>18212,
+30745=>18213,
+30764=>18214,
+30791=>18215,
+30826=>18216,
+152793=>18217,
+30858=>18218,
+30868=>18219,
+30884=>18220,
+30877=>18221,
+30879=>18222,
+30907=>18223,
+30933=>18224,
+30950=>18225,
+30969=>18226,
+30970=>18227,
+30974=>18228,
+152999=>18229,
+30992=>18230,
+31003=>18231,
+31013=>18232,
+31050=>18233,
+31064=>18234,
+16645=>18235,
+31079=>18236,
+31090=>18237,
+31125=>18238,
+31137=>18239,
+31145=>18240,
+31156=>18241,
+31170=>18242,
+31175=>18243,
+31180=>18244,
+31181=>18245,
+31190=>18246,
+16712=>18247,
+153513=>18248,
+153524=>18249,
+16719=>18250,
+31242=>18251,
+31253=>18252,
+31259=>18253,
+16739=>18254,
+31288=>18255,
+31303=>18256,
+31318=>18257,
+31321=>18258,
+31324=>18259,
+31327=>18260,
+31335=>18261,
+31338=>18262,
+31349=>18263,
+31362=>18264,
+31370=>18265,
+31376=>18266,
+31404=>18267,
+154068=>18268,
+16820=>18269,
+31417=>18270,
+31422=>18271,
+16831=>18272,
+31436=>18273,
+31464=>18274,
+31476=>18275,
+154340=>18276,
+154339=>18277,
+154353=>18278,
+31549=>18279,
+31530=>18280,
+31534=>18281,
+31535=>18282,
+16870=>18283,
+16883=>18284,
+31615=>18285,
+31553=>18286,
+16878=>18287,
+31573=>18288,
+31609=>18289,
+31588=>18290,
+31590=>18291,
+31603=>18292,
+154546=>18293,
+16903=>18294,
+31632=>18295,
+31643=>18296,
+16910=>18297,
+31669=>18298,
+31676=>18299,
+31685=>18300,
+31690=>18301,
+154699=>18302,
+154724=>18303,
+31700=>18304,
+31702=>18305,
+31706=>18306,
+31722=>18307,
+31728=>18308,
+31747=>18309,
+31758=>18310,
+31813=>18311,
+31818=>18312,
+31831=>18313,
+31838=>18314,
+31841=>18315,
+31849=>18316,
+31855=>18317,
+155182=>18318,
+155222=>18319,
+155237=>18320,
+31910=>18321,
+155234=>18322,
+31926=>18323,
+31927=>18324,
+155352=>18325,
+31940=>18326,
+155330=>18327,
+31949=>18328,
+155368=>18329,
+155427=>18330,
+31974=>18331,
+155484=>18332,
+31989=>18333,
+32003=>18334,
+17094=>18335,
+32018=>18336,
+32030=>18337,
+155616=>18338,
+155604=>18339,
+32061=>18340,
+32062=>18341,
+32064=>18342,
+32071=>18343,
+155660=>18344,
+155643=>18345,
+17110=>18346,
+32090=>18347,
+32106=>18348,
+32112=>18349,
+17117=>18350,
+32127=>18351,
+155671=>18352,
+32136=>18353,
+32151=>18354,
+155744=>18355,
+32157=>18356,
+32167=>18357,
+32170=>18358,
+32182=>18359,
+32192=>18360,
+32215=>18361,
+32217=>18362,
+32230=>18363,
+17154=>18364,
+155885=>18365,
+64088=>18366,
+32272=>18367,
+32279=>18368,
+32285=>18369,
+32295=>18370,
+32300=>18371,
+32325=>18372,
+32373=>18373,
+32382=>18374,
+32390=>18375,
+32391=>18376,
+17195=>18377,
+32410=>18378,
+17219=>18379,
+32572=>18380,
+32571=>18381,
+32574=>18382,
+32579=>18383,
+13505=>18384,
+156272=>18385,
+156294=>18386,
+32611=>18387,
+32612=>18388,
+32621=>18389,
+32637=>18390,
+32638=>18391,
+32656=>18392,
+20859=>18393,
+146702=>18394,
+32662=>18395,
+32668=>18396,
+32685=>18397,
+156674=>18398,
+32707=>18399,
+32719=>18400,
+32739=>18401,
+32754=>18402,
+32778=>18403,
+32776=>18404,
+32790=>18405,
+32812=>18406,
+32816=>18407,
+32835=>18408,
+32870=>18409,
+32891=>18410,
+32921=>18411,
+32924=>18412,
+32932=>18413,
+32935=>18414,
+32952=>18415,
+157310=>18416,
+32965=>18417,
+32981=>18418,
+32998=>18419,
+33037=>18420,
+33013=>18421,
+33019=>18422,
+17390=>18423,
+33077=>18424,
+33054=>18425,
+17392=>18426,
+33060=>18427,
+33063=>18428,
+33068=>18429,
+157469=>18430,
+33085=>18431,
+17416=>18432,
+33129=>18433,
+17431=>18434,
+17436=>18435,
+33157=>18436,
+17442=>18437,
+33176=>18438,
+33202=>18439,
+33217=>18440,
+33219=>18441,
+33238=>18442,
+33243=>18443,
+157917=>18444,
+33252=>18445,
+157930=>18446,
+33260=>18447,
+33277=>18448,
+33279=>18449,
+158063=>18450,
+33284=>18451,
+158173=>18452,
+33305=>18453,
+33314=>18454,
+158238=>18455,
+33340=>18456,
+33353=>18457,
+33349=>18458,
+158296=>18459,
+17526=>18460,
+17530=>18461,
+33367=>18462,
+158348=>18463,
+33372=>18464,
+33379=>18465,
+158391=>18466,
+17553=>18467,
+33405=>18468,
+33407=>18469,
+33411=>18470,
+33418=>18471,
+33427=>18472,
+33447=>18473,
+33448=>18474,
+33458=>18475,
+33460=>18476,
+33466=>18477,
+33468=>18478,
+33506=>18479,
+33512=>18480,
+33527=>18481,
+33543=>18482,
+33544=>18483,
+33548=>18484,
+33620=>18485,
+33563=>18486,
+33565=>18487,
+33584=>18488,
+33596=>18489,
+33604=>18490,
+33623=>18491,
+17598=>18492,
+17620=>18493,
+17587=>18494,
+33684=>18495,
+33685=>18496,
+33691=>18497,
+33693=>18498,
+33737=>18499,
+33744=>18500,
+33748=>18501,
+33757=>18502,
+33765=>18503,
+33785=>18504,
+33813=>18505,
+158835=>18506,
+33815=>18507,
+33849=>18508,
+33871=>18509,
+33873=>18510,
+33874=>18511,
+33881=>18512,
+33882=>18513,
+33884=>18514,
+158941=>18515,
+33893=>18516,
+33912=>18517,
+33916=>18518,
+33921=>18519,
+17677=>18520,
+33943=>18521,
+33958=>18522,
+33982=>18523,
+17672=>18524,
+33998=>18525,
+33999=>18526,
+34003=>18527,
+159333=>18528,
+34023=>18529,
+34026=>18530,
+34031=>18531,
+34033=>18532,
+34042=>18533,
+34075=>18534,
+34084=>18535,
+34085=>18536,
+34091=>18537,
+34127=>18538,
+34159=>18539,
+17731=>18540,
+34129=>18541,
+34145=>18542,
+34146=>18543,
+159636=>18544,
+34171=>18545,
+34173=>18546,
+34175=>18547,
+34177=>18548,
+34182=>18549,
+34195=>18550,
+34205=>18551,
+34207=>18552,
+159736=>18553,
+159734=>18554,
+159735=>18555,
+34236=>18556,
+34247=>18557,
+34250=>18558,
+34264=>18559,
+34265=>18560,
+34271=>18561,
+34273=>18562,
+34278=>18563,
+34294=>18564,
+34304=>18565,
+34321=>18566,
+34334=>18567,
+34337=>18568,
+34340=>18569,
+34343=>18570,
+160013=>18571,
+34361=>18572,
+34364=>18573,
+160057=>18574,
+34368=>18575,
+34387=>18576,
+34390=>18577,
+34423=>18578,
+34439=>18579,
+34441=>18580,
+34460=>18581,
+34461=>18582,
+34481=>18583,
+34483=>18584,
+34497=>18585,
+34499=>18586,
+34513=>18587,
+34517=>18588,
+34519=>18589,
+34531=>18590,
+34534=>18591,
+17848=>18592,
+34565=>18593,
+34567=>18594,
+34574=>18595,
+34576=>18596,
+34591=>18597,
+34593=>18598,
+34595=>18599,
+34609=>18600,
+34618=>18601,
+34624=>18602,
+34627=>18603,
+34641=>18604,
+34648=>18605,
+34660=>18606,
+34661=>18607,
+34674=>18608,
+34684=>18609,
+160731=>18610,
+160730=>18611,
+34727=>18612,
+34697=>18613,
+34699=>18614,
+34707=>18615,
+34720=>18616,
+160766=>18617,
+17893=>18618,
+34750=>18619,
+160784=>18620,
+34753=>18621,
+34766=>18622,
+34783=>18623,
+160841=>18624,
+34787=>18625,
+34789=>18626,
+34790=>18627,
+34794=>18628,
+34835=>18629,
+34856=>18630,
+34862=>18631,
+34866=>18632,
+34876=>18633,
+17935=>18634,
+34890=>18635,
+34904=>18636,
+161301=>18637,
+161300=>18638,
+34921=>18639,
+161329=>18640,
+34927=>18641,
+34976=>18642,
+35004=>18643,
+35008=>18644,
+161427=>18645,
+35025=>18646,
+35027=>18647,
+17985=>18648,
+35073=>18649,
+161550=>18650,
+35127=>18651,
+161571=>18652,
+35138=>18653,
+35141=>18654,
+35145=>18655,
+161618=>18656,
+35170=>18657,
+35209=>18658,
+35216=>18659,
+35231=>18660,
+35248=>18661,
+35255=>18662,
+35288=>18663,
+35307=>18664,
+18081=>18665,
+35315=>18666,
+35325=>18667,
+35327=>18668,
+18095=>18669,
+35345=>18670,
+35348=>18671,
+162181=>18672,
+35361=>18673,
+35381=>18674,
+35390=>18675,
+35397=>18676,
+35405=>18677,
+35416=>18678,
+35502=>18679,
+35472=>18680,
+35511=>18681,
+35543=>18682,
+35580=>18683,
+162436=>18684,
+35594=>18685,
+35589=>18686,
+35597=>18687,
+35612=>18688,
+35629=>18689,
+18188=>18690,
+35665=>18691,
+35678=>18692,
+35702=>18693,
+35713=>18694,
+35723=>18695,
+35732=>18696,
+35733=>18697,
+35897=>18698,
+162739=>18699,
+35901=>18700,
+162750=>18701,
+162759=>18702,
+35909=>18703,
+35919=>18704,
+35927=>18705,
+35945=>18706,
+35949=>18707,
+163000=>18708,
+35987=>18709,
+35986=>18710,
+35993=>18711,
+18276=>18712,
+35995=>18713,
+36054=>18714,
+36053=>18715,
+163232=>18716,
+36081=>18717,
+163344=>18718,
+36105=>18719,
+36110=>18720,
+36296=>18721,
+36313=>18722,
+36364=>18723,
+18429=>18724,
+36349=>18725,
+36358=>18726,
+163978=>18727,
+36372=>18728,
+36374=>18729,
+36385=>18730,
+36386=>18731,
+36391=>18732,
+164027=>18733,
+18454=>18734,
+36406=>18735,
+36409=>18736,
+36436=>18737,
+36450=>18738,
+36461=>18739,
+36463=>18740,
+36504=>18741,
+36510=>18742,
+36533=>18743,
+36539=>18744,
+164482=>18745,
+18510=>18746,
+164595=>18747,
+36608=>18748,
+36616=>18749,
+36651=>18750,
+36672=>18751,
+36682=>18752,
+36696=>18753,
+164876=>18754,
+36772=>18755,
+36788=>18756,
+164949=>18757,
+36801=>18758,
+36806=>18759,
+64036=>18760,
+36810=>18761,
+36813=>18762,
+36819=>18763,
+36821=>18764,
+36849=>18765,
+36853=>18766,
+36859=>18767,
+36876=>18768,
+36919=>18769,
+165227=>18770,
+36931=>18771,
+36957=>18772,
+165320=>18773,
+165321=>18774,
+36997=>18775,
+37004=>18776,
+37008=>18777,
+37025=>18778,
+18613=>18779,
+37040=>18780,
+37046=>18781,
+37059=>18782,
+37064=>18783,
+165591=>18784,
+37084=>18785,
+37087=>18786,
+165626=>18787,
+37110=>18788,
+37106=>18789,
+37120=>18790,
+37099=>18791,
+37118=>18792,
+37119=>18793,
+37124=>18794,
+37126=>18795,
+37144=>18796,
+37150=>18797,
+37175=>18798,
+37177=>18799,
+37190=>18800,
+37191=>18801,
+37207=>18802,
+37209=>18803,
+37236=>18804,
+37241=>18805,
+37253=>18806,
+37299=>18807,
+37302=>18808,
+37315=>18809,
+37316=>18810,
+166217=>18811,
+166214=>18812,
+37356=>18813,
+37377=>18814,
+37398=>18815,
+37399=>18816,
+166251=>18817,
+37442=>18818,
+37450=>18819,
+37462=>18820,
+37473=>18821,
+37477=>18822,
+37480=>18823,
+166280=>18824,
+37500=>18825,
+37501=>18826,
+37503=>18827,
+37513=>18828,
+37517=>18829,
+37527=>18830,
+37529=>18831,
+37535=>18832,
+37547=>18833,
+166330=>18834,
+166331=>18835,
+37554=>18836,
+37567=>18837,
+37568=>18838,
+37574=>18839,
+37582=>18840,
+37605=>18841,
+37649=>18842,
+166430=>18843,
+166441=>18844,
+37623=>18845,
+37673=>18846,
+166513=>18847,
+166467=>18848,
+37713=>18849,
+37722=>18850,
+37739=>18851,
+37745=>18852,
+37747=>18853,
+37793=>18854,
+166553=>18855,
+166605=>18856,
+37768=>18857,
+37771=>18858,
+37775=>18859,
+37790=>18860,
+37877=>18861,
+166628=>18862,
+166621=>18863,
+37873=>18864,
+37831=>18865,
+37852=>18866,
+37863=>18867,
+37897=>18868,
+37910=>18869,
+37911=>18870,
+37883=>18871,
+37938=>18872,
+37947=>18873,
+166849=>18874,
+166895=>18875,
+37997=>18876,
+37999=>18877,
+38265=>18878,
+38278=>18879,
+38284=>18880,
+38285=>18881,
+167184=>18882,
+167281=>18883,
+38344=>18884,
+167419=>18885,
+167455=>18886,
+38444=>18887,
+38451=>18888,
+38452=>18889,
+167478=>18890,
+38460=>18891,
+38497=>18892,
+167561=>18893,
+38530=>18894,
+167659=>18895,
+38554=>18896,
+167730=>18897,
+18919=>18898,
+38579=>18899,
+38586=>18900,
+38589=>18901,
+18938=>18902,
+167928=>18903,
+38616=>18904,
+38618=>18905,
+38621=>18906,
+18948=>18907,
+38676=>18908,
+38691=>18909,
+18985=>18910,
+38710=>18911,
+38721=>18912,
+38727=>18913,
+38743=>18914,
+38747=>18915,
+38762=>18916,
+168608=>18917,
+168625=>18918,
+38806=>18919,
+38814=>18920,
+38833=>18921,
+38834=>18922,
+38846=>18923,
+38860=>18924,
+38865=>18925,
+38868=>18926,
+38872=>18927,
+38881=>18928,
+38897=>18929,
+38916=>18930,
+38925=>18931,
+38932=>18932,
+38934=>18933,
+19132=>18934,
+169104=>18935,
+38962=>18936,
+38963=>18937,
+38949=>18938,
+38983=>18939,
+39014=>18940,
+39083=>18941,
+39085=>18942,
+39088=>18943,
+169423=>18944,
+39095=>18945,
+39099=>18946,
+39100=>18947,
+39106=>18948,
+39111=>18949,
+39115=>18950,
+39137=>18951,
+39139=>18952,
+39146=>18953,
+39152=>18954,
+39153=>18955,
+39155=>18956,
+39176=>18957,
+19259=>18958,
+169712=>18959,
+39190=>18960,
+39191=>18961,
+169753=>18962,
+39194=>18963,
+39195=>18964,
+39196=>18965,
+169808=>18966,
+39217=>18967,
+39226=>18968,
+39227=>18969,
+39228=>18970,
+39233=>18971,
+39238=>18972,
+39246=>18973,
+39264=>18974,
+39331=>18975,
+39334=>18976,
+39357=>18977,
+39359=>18978,
+39363=>18979,
+39380=>18980,
+39385=>18981,
+39390=>18982,
+170182=>18983,
+39408=>18984,
+39417=>18985,
+39420=>18986,
+39434=>18987,
+39441=>18988,
+39450=>18989,
+39456=>18990,
+39473=>18991,
+39492=>18992,
+39500=>18993,
+39512=>18994,
+19394=>18995,
+39599=>18996,
+19402=>18997,
+39607=>18998,
+19410=>18999,
+39609=>19000,
+170610=>19001,
+39622=>19002,
+39632=>19003,
+39634=>19004,
+39637=>19005,
+39648=>19006,
+39653=>19007,
+39657=>19008,
+39692=>19009,
+39696=>19010,
+39698=>19011,
+39702=>19012,
+39708=>19013,
+39723=>19014,
+39741=>19015,
+19488=>19016,
+39755=>19017,
+39779=>19018,
+39781=>19019,
+39787=>19020,
+39788=>19021,
+39798=>19022,
+39799=>19023,
+39846=>19024,
+39852=>19025,
+171483=>19026,
+39858=>19027,
+39864=>19028,
+39870=>19029,
+39923=>19030,
+39896=>19031,
+39901=>19032,
+39914=>19033,
+39919=>19034,
+39918=>19035,
+171541=>19036,
+171658=>19037,
+171593=>19038,
+39958=>19039,
+39960=>19040,
+39961=>19041,
+39962=>19042,
+39965=>19043,
+39970=>19044,
+39977=>19045,
+171716=>19046,
+39985=>19047,
+39991=>19048,
+40005=>19049,
+40028=>19050,
+171753=>19051,
+40009=>19052,
+40010=>19053,
+171739=>19054,
+40020=>19055,
+40024=>19056,
+40027=>19057,
+40029=>19058,
+40031=>19059,
+40041=>19060,
+40042=>19061,
+40043=>19062,
+40045=>19063,
+40046=>19064,
+40050=>19065,
+40053=>19066,
+40058=>19067,
+40166=>19068,
+40178=>19069,
+40203=>19070,
+171982=>19071,
+171991=>19071,
+40209=>19072,
+40215=>19073,
+40216=>19074,
+172079=>19075,
+19652=>19076,
+172058=>19077,
+40242=>19078,
+19665=>19079,
+40266=>19080,
+40287=>19081,
+40290=>19082,
+172281=>19083,
+172162=>19084,
+40307=>19085,
+40310=>19086,
+40311=>19087,
+40324=>19088,
+40345=>19089,
+40353=>19090,
+40383=>19091,
+40373=>19092,
+40377=>19093,
+40381=>19094,
+40393=>19095,
+40410=>19096,
+40416=>19097,
+40419=>19098,
+19719=>19099,
+40458=>19100,
+40450=>19101,
+40461=>19102,
+40476=>19103,
+40571=>19104,
+139800=>19105,
+40576=>19106,
+40581=>19107,
+40603=>19108,
+172940=>19109,
+40637=>19110,
+173111=>19111,
+40671=>19112,
+40703=>19113,
+40706=>19114,
+19831=>19115,
+40707=>19116,
+40762=>19117,
+40765=>19118,
+40774=>19119,
+40787=>19120,
+40789=>19121,
+40792=>19122,
+173553=>19123,
+40797=>19124,
+173570=>19125,
+40809=>19126,
+40813=>19127,
+40816=>19128,
+173746=>19129,
+11948=>19130,
+13844=>19131,
+14509=>19132,
+15820=>19133,
+16348=>19134,
+17854=>19135,
+17936=>19136,
+19326=>19137,
+19512=>19138,
+19681=>19139,
+19980=>19140,
+20003=>19141,
+20004=>19142,
+20089=>19143,
+20211=>19144,
+20236=>19145,
+20249=>19146,
+20267=>19147,
+20270=>19148,
+20273=>19149,
+20356=>19150,
+20382=>19151,
+20407=>19152,
+20484=>19153,
+20492=>19154,
+20556=>19155,
+20575=>19156,
+20578=>19157,
+20599=>19158,
+20622=>19159,
+20638=>19160,
+20642=>19161,
+20675=>19162,
+20712=>19163,
+20721=>19164,
+20734=>19165,
+20743=>19166,
+20748=>19167,
+20749=>19168,
+20750=>19169,
+20787=>19170,
+20792=>19171,
+20852=>19172,
+20868=>19173,
+20920=>19174,
+20922=>19175,
+20936=>19176,
+20943=>19177,
+20945=>19178,
+20947=>19179,
+20948=>19180,
+20952=>19181,
+20959=>19182,
+20997=>19183,
+21030=>19184,
+21032=>19185,
+21035=>19186,
+21041=>19187,
+21042=>19188,
+21045=>19189,
+21052=>19190,
+21082=>19191,
+21088=>19192,
+21102=>19193,
+21112=>19194,
+21113=>19195,
+21130=>19196,
+21132=>19197,
+21217=>19198,
+21225=>19199,
+21233=>19200,
+21251=>19201,
+21265=>19202,
+21279=>19203,
+21293=>19204,
+21298=>19205,
+21309=>19206,
+21349=>19207,
+21357=>19208,
+21369=>19209,
+21374=>19210,
+21396=>19211,
+21401=>19212,
+21418=>19213,
+21423=>19214,
+21434=>19215,
+21441=>19216,
+21444=>19217,
+21445=>19218,
+21472=>19219,
+21523=>19220,
+21546=>19221,
+21553=>19222,
+21556=>19223,
+21557=>19224,
+21580=>19225,
+21671=>19226,
+21674=>19227,
+21681=>19228,
+21691=>19229,
+21710=>19230,
+21738=>19231,
+21756=>19232,
+21765=>19233,
+21768=>19234,
+21781=>19235,
+21799=>19236,
+21802=>19237,
+21814=>19238,
+21841=>19239,
+21862=>19240,
+21903=>19241,
+21906=>19242,
+21908=>19243,
+21924=>19244,
+21938=>19245,
+21955=>19246,
+21958=>19247,
+21971=>19248,
+21979=>19249,
+21996=>19250,
+21998=>19251,
+22001=>19252,
+22006=>19253,
+22008=>19254,
+22021=>19255,
+22029=>19256,
+22033=>19257,
+22034=>19258,
+22060=>19259,
+22069=>19260,
+22073=>19261,
+22093=>19262,
+22100=>19263,
+22149=>19264,
+22175=>19265,
+22182=>19266,
+22199=>19267,
+22220=>19268,
+22223=>19269,
+22233=>19270,
+22241=>19271,
+22251=>19272,
+22253=>19273,
+22257=>19274,
+22279=>19275,
+22284=>19276,
+22298=>19277,
+22299=>19278,
+22301=>19279,
+22316=>19280,
+22318=>19281,
+22333=>19282,
+22334=>19283,
+22367=>19284,
+22379=>19285,
+22381=>19286,
+22394=>19287,
+22403=>19288,
+22423=>19289,
+22446=>19290,
+22485=>19291,
+22503=>19292,
+22541=>19293,
+22566=>19294,
+22605=>19295,
+22607=>19296,
+22623=>19297,
+22637=>19298,
+22655=>19299,
+22657=>19300,
+22680=>19301,
+22716=>19302,
+22815=>19303,
+22819=>19304,
+22873=>19305,
+22905=>19306,
+22935=>19307,
+22959=>19308,
+22963=>19309,
+23007=>19310,
+23025=>19311,
+23032=>19312,
+23218=>19313,
+23224=>19314,
+23274=>19315,
+23286=>19316,
+23323=>19317,
+23325=>19318,
+23329=>19319,
+23352=>19320,
+23479=>19321,
+23511=>19322,
+23520=>19323,
+23583=>19324,
+23594=>19325,
+23596=>19326,
+23606=>19327,
+23641=>19328,
+23644=>19329,
+23661=>19330,
+23773=>19331,
+23809=>19332,
+23860=>19333,
+23869=>19334,
+23897=>19335,
+23934=>19336,
+23939=>19337,
+24007=>19338,
+24057=>19339,
+24104=>19340,
+24114=>19341,
+24117=>19342,
+24155=>19343,
+24168=>19344,
+24170=>19345,
+24183=>19346,
+24192=>19347,
+24203=>19348,
+24243=>19349,
+24253=>19350,
+24273=>19351,
+24276=>19352,
+24277=>19353,
+24397=>19354,
+24492=>19355,
+24554=>19356,
+24583=>19357,
+24649=>19358,
+24660=>19359,
+24679=>19360,
+24763=>19361,
+24772=>19362,
+24829=>19363,
+24842=>19364,
+24854=>19365,
+24874=>19366,
+24886=>19367,
+24926=>19368,
+24932=>19369,
+24955=>19370,
+24957=>19371,
+24959=>19372,
+24989=>19373,
+25016=>19374,
+25052=>19375,
+25058=>19376,
+25061=>19377,
+25064=>19378,
+25092=>19379,
+25095=>19380,
+25137=>19381,
+25145=>19382,
+25149=>19383,
+25210=>19384,
+25232=>19385,
+25256=>19386,
+25306=>19387,
+25332=>19388,
+25366=>19389,
+25386=>19390,
+25398=>19391,
+25414=>19392,
+25419=>19393,
+25427=>19394,
+25457=>19395,
+25461=>19396,
+25471=>19397,
+25474=>19398,
+25482=>19399,
+25518=>19400,
+25519=>19401,
+25578=>19402,
+25592=>19403,
+25593=>19404,
+25618=>19405,
+25624=>19406,
+25632=>19407,
+25636=>19408,
+25642=>19409,
+25653=>19410,
+25661=>19411,
+25663=>19412,
+25682=>19413,
+25695=>19414,
+25716=>19415,
+25744=>19416,
+25752=>19417,
+25753=>19418,
+25772=>19419,
+25779=>19420,
+25837=>19421,
+25840=>19422,
+25883=>19423,
+25887=>19424,
+25902=>19425,
+25929=>19426,
+25952=>19427,
+26002=>19428,
+26005=>19429,
+26036=>19430,
+26046=>19431,
+26056=>19432,
+26062=>19433,
+26064=>19434,
+26079=>19435,
+26238=>19436,
+26251=>19437,
+26252=>19438,
+26291=>19439,
+26304=>19440,
+26319=>19441,
+26405=>19442,
+26421=>19443,
+26453=>19444,
+26496=>19445,
+26511=>19446,
+26513=>19447,
+26532=>19448,
+26545=>19449,
+26549=>19450,
+26558=>19451,
+26664=>19452,
+26758=>19453,
+26859=>19454,
+26869=>19455,
+26903=>19456,
+26931=>19457,
+26936=>19458,
+26971=>19459,
+26981=>19460,
+27048=>19461,
+27051=>19462,
+27055=>19463,
+27109=>19464,
+27121=>19465,
+27210=>19466,
+27221=>19467,
+27239=>19468,
+27249=>19469,
+27311=>19470,
+27336=>19471,
+27337=>19472,
+27395=>19473,
+27451=>19474,
+27455=>19475,
+27517=>19476,
+27518=>19477,
+27568=>19478,
+27639=>19479,
+27641=>19480,
+27652=>19481,
+27657=>19482,
+27661=>19483,
+27692=>19484,
+27722=>19485,
+27730=>19486,
+27732=>19487,
+27769=>19488,
+27820=>19489,
+27828=>19490,
+27858=>19491,
+28001=>19492,
+28028=>19493,
+28089=>19494,
+28144=>19495,
+28229=>19496,
+28275=>19497,
+28283=>19498,
+28285=>19499,
+28297=>19500,
+28348=>19501,
+28378=>19502,
+28379=>19503,
+28454=>19504,
+28457=>19505,
+28464=>19506,
+28551=>19507,
+28573=>19508,
+28590=>19509,
+28599=>19510,
+28685=>19511,
+28704=>19512,
+28745=>19513,
+28824=>19514,
+28848=>19515,
+28885=>19516,
+28886=>19517,
+28997=>19518,
+29106=>19519,
+29172=>19520,
+29207=>19521,
+29215=>19522,
+29251=>19523,
+29263=>19524,
+29264=>19525,
+29274=>19526,
+29280=>19527,
+29288=>19528,
+29303=>19529,
+29316=>19530,
+29385=>19531,
+29413=>19532,
+29428=>19533,
+29442=>19534,
+29451=>19535,
+29470=>19536,
+29474=>19537,
+29498=>19538,
+29499=>19539,
+29517=>19540,
+29528=>19541,
+29543=>19542,
+29810=>19543,
+29871=>19544,
+29919=>19545,
+29924=>19546,
+29940=>19547,
+29947=>19548,
+29974=>19549,
+29985=>19550,
+30015=>19551,
+30046=>19552,
+30105=>19553,
+30116=>19554,
+30145=>19555,
+30148=>19556,
+30156=>19557,
+30167=>19558,
+30172=>19559,
+30177=>19560,
+30191=>19561,
+30212=>19562,
+30220=>19563,
+30237=>19564,
+30258=>19565,
+30264=>19566,
+30277=>19567,
+30282=>19568,
+30303=>19569,
+30381=>19570,
+30397=>19571,
+30425=>19572,
+30443=>19573,
+30448=>19574,
+30457=>19575,
+30464=>19576,
+30478=>19577,
+30498=>19578,
+30504=>19579,
+30511=>19580,
+30521=>19581,
+30526=>19582,
+30533=>19583,
+30538=>19584,
+30543=>19585,
+30558=>19586,
+30564=>19587,
+30567=>19588,
+30572=>19589,
+30596=>19590,
+30604=>19591,
+30605=>19592,
+30614=>19593,
+30631=>19594,
+30639=>19595,
+30647=>19596,
+30654=>19597,
+30665=>19598,
+30673=>19599,
+30681=>19600,
+30705=>19601,
+30775=>19602,
+30812=>19603,
+30846=>19604,
+30872=>19605,
+30881=>19606,
+30897=>19607,
+30899=>19608,
+30921=>19609,
+30931=>19610,
+30988=>19611,
+31007=>19612,
+31015=>19613,
+31016=>19614,
+31039=>19615,
+31042=>19616,
+31060=>19617,
+31083=>19618,
+31100=>19619,
+31147=>19620,
+31172=>19621,
+31210=>19622,
+31234=>19623,
+31244=>19624,
+31280=>19625,
+31290=>19626,
+31300=>19627,
+31360=>19628,
+31366=>19629,
+31380=>19630,
+31413=>19631,
+31421=>19632,
+31486=>19633,
+31531=>19634,
+31607=>19635,
+31648=>19636,
+31660=>19637,
+31664=>19638,
+31720=>19639,
+31730=>19640,
+31736=>19641,
+31740=>19642,
+31742=>19643,
+31753=>19644,
+31784=>19645,
+31791=>19646,
+31810=>19647,
+31826=>19648,
+31827=>19649,
+31835=>19650,
+31836=>19651,
+31837=>19652,
+31858=>19653,
+31869=>19654,
+31879=>19655,
+31902=>19656,
+31930=>19657,
+31943=>19658,
+31955=>19659,
+31962=>19660,
+32060=>19661,
+32077=>19662,
+32130=>19663,
+32133=>19664,
+32141=>19665,
+32145=>19666,
+32158=>19667,
+32179=>19668,
+32185=>19669,
+32208=>19670,
+32229=>19671,
+32245=>19672,
+32246=>19673,
+32303=>19674,
+32310=>19675,
+32324=>19676,
+32367=>19677,
+32376=>19678,
+32385=>19679,
+32573=>19680,
+32603=>19681,
+32605=>19682,
+32613=>19683,
+32625=>19684,
+32639=>19685,
+32640=>19686,
+32651=>19687,
+32674=>19688,
+32765=>19689,
+32766=>19690,
+32767=>19691,
+32775=>19692,
+32781=>19693,
+32798=>19694,
+32825=>19695,
+32904=>19696,
+32910=>19697,
+32975=>19698,
+32980=>19699,
+33005=>19700,
+33008=>19701,
+33015=>19702,
+33018=>19703,
+33022=>19704,
+33027=>19705,
+33047=>19706,
+33072=>19707,
+33111=>19708,
+33135=>19709,
+33139=>19710,
+33163=>19711,
+33168=>19712,
+33179=>19713,
+33182=>19714,
+33227=>19715,
+33237=>19716,
+33245=>19717,
+33246=>19718,
+33249=>19719,
+33263=>19720,
+33270=>19721,
+33280=>19722,
+33291=>19723,
+33299=>19724,
+33300=>19725,
+33306=>19726,
+33338=>19727,
+33348=>19728,
+33389=>19729,
+33412=>19730,
+33417=>19731,
+33425=>19732,
+33450=>19733,
+33456=>19734,
+33488=>19735,
+33514=>19736,
+33519=>19737,
+33526=>19738,
+33622=>19739,
+33656=>19740,
+33784=>19741,
+33788=>19742,
+33880=>19743,
+33939=>19744,
+33969=>19745,
+33981=>19746,
+34043=>19747,
+34118=>19748,
+34134=>19749,
+34141=>19750,
+34181=>19751,
+34200=>19752,
+34370=>19753,
+34374=>19754,
+34496=>19755,
+34580=>19756,
+34594=>19757,
+34606=>19758,
+34617=>19759,
+34653=>19760,
+34683=>19761,
+34700=>19762,
+34702=>19763,
+34711=>19764,
+34712=>19765,
+34718=>19766,
+34723=>19767,
+34734=>19768,
+34751=>19769,
+34761=>19770,
+34778=>19771,
+34840=>19772,
+34843=>19773,
+34861=>19774,
+34874=>19775,
+34885=>19776,
+34891=>19777,
+34894=>19778,
+34901=>19779,
+34906=>19780,
+34926=>19781,
+34970=>19782,
+34971=>19783,
+34972=>19784,
+35021=>19785,
+35040=>19786,
+35055=>19787,
+35086=>19788,
+35087=>19789,
+35110=>19790,
+35125=>19791,
+35162=>19792,
+35164=>19793,
+35179=>19794,
+35184=>19795,
+35196=>19796,
+35237=>19797,
+35253=>19798,
+35260=>19799,
+35285=>19800,
+35401=>19801,
+35415=>19802,
+35431=>19803,
+35454=>19804,
+35462=>19805,
+35478=>19806,
+35510=>19807,
+35529=>19808,
+35537=>19809,
+35549=>19810,
+35564=>19811,
+35573=>19812,
+35590=>19813,
+35599=>19814,
+35601=>19815,
+35653=>19816,
+35666=>19817,
+35693=>19818,
+35704=>19819,
+35708=>19820,
+35710=>19821,
+35717=>19822,
+35743=>19823,
+35915=>19824,
+35923=>19825,
+35963=>19826,
+36026=>19827,
+36037=>19828,
+36041=>19829,
+36050=>19830,
+36076=>19831,
+36085=>19832,
+36087=>19833,
+36097=>19834,
+36099=>19835,
+36119=>19836,
+36124=>19837,
+36206=>19838,
+36241=>19839,
+36255=>19840,
+36267=>19841,
+36274=>19842,
+36309=>19843,
+36327=>19844,
+36337=>19845,
+36338=>19846,
+36340=>19847,
+36353=>19848,
+36363=>19849,
+36390=>19850,
+36401=>19851,
+36416=>19852,
+36417=>19853,
+36429=>19854,
+36431=>19855,
+36444=>19856,
+36449=>19857,
+36457=>19858,
+36465=>19859,
+36469=>19860,
+36471=>19861,
+36489=>19862,
+36496=>19863,
+36501=>19864,
+36506=>19865,
+36519=>19866,
+36521=>19867,
+36525=>19868,
+36584=>19869,
+36592=>19870,
+36615=>19871,
+36632=>19872,
+36645=>19873,
+36647=>19874,
+36652=>19875,
+36661=>19876,
+36666=>19877,
+36675=>19878,
+36679=>19879,
+36689=>19880,
+36693=>19881,
+36768=>19882,
+36769=>19883,
+36770=>19884,
+36773=>19885,
+36868=>19886,
+36891=>19887,
+36911=>19888,
+36940=>19889,
+36955=>19890,
+36976=>19891,
+36980=>19892,
+36985=>19893,
+37003=>19894,
+37016=>19895,
+37024=>19896,
+37042=>19897,
+37053=>19898,
+37065=>19899,
+37104=>19900,
+37125=>19901,
+37157=>19902,
+37210=>19903,
+37223=>19904,
+37242=>19905,
+37258=>19906,
+37265=>19907,
+37269=>19908,
+37296=>19909,
+37307=>19910,
+37309=>19911,
+37314=>19912,
+37317=>19913,
+37376=>19914,
+37385=>19915,
+37411=>19916,
+37494=>19917,
+37518=>19918,
+37551=>19919,
+37563=>19920,
+37564=>19921,
+37569=>19922,
+37571=>19923,
+37573=>19924,
+37576=>19925,
+37652=>19926,
+37683=>19927,
+37686=>19928,
+37720=>19929,
+37759=>19930,
+37762=>19931,
+37770=>19932,
+37819=>19933,
+37836=>19934,
+37862=>19935,
+37881=>19936,
+37890=>19937,
+37901=>19938,
+37902=>19939,
+37934=>19940,
+37964=>19941,
+38280=>19942,
+38305=>19943,
+38335=>19944,
+38342=>19945,
+38345=>19946,
+38353=>19947,
+38354=>19948,
+38368=>19949,
+38372=>19950,
+38374=>19951,
+38436=>19952,
+38449=>19953,
+38456=>19954,
+38461=>19955,
+38484=>19956,
+38516=>19957,
+38523=>19958,
+38527=>19959,
+38529=>19960,
+38531=>19961,
+38537=>19962,
+38550=>19963,
+38574=>19964,
+38659=>19965,
+38683=>19966,
+38689=>19967,
+38690=>19968,
+38696=>19969,
+38705=>19970,
+38759=>19971,
+38774=>19972,
+38781=>19973,
+38783=>19974,
+38809=>19975,
+38815=>19976,
+38828=>19977,
+38841=>19978,
+38861=>19979,
+38880=>19980,
+38895=>19981,
+38919=>19982,
+38950=>19983,
+38958=>19984,
+39010=>19985,
+39011=>19986,
+39092=>19987,
+39109=>19988,
+39170=>19989,
+39185=>19990,
+39189=>19991,
+39221=>19992,
+39240=>19993,
+39252=>19994,
+39262=>19995,
+39393=>19996,
+39436=>19997,
+39440=>19998,
+39459=>19999,
+39489=>20000,
+39505=>20001,
+39613=>20002,
+39614=>20003,
+39681=>20004,
+39689=>20005,
+39691=>20006,
+39693=>20007,
+39694=>20008,
+39705=>20009,
+39733=>20010,
+39752=>20011,
+39765=>20012,
+39784=>20013,
+39808=>20014,
+39814=>20015,
+39824=>20016,
+39837=>20017,
+39856=>20018,
+39871=>20019,
+39880=>20020,
+39935=>20021,
+39938=>20022,
+39964=>20023,
+39989=>20024,
+40004=>20025,
+40022=>20026,
+40033=>20027,
+40040=>20028,
+40240=>20029,
+40253=>20030,
+40298=>20031,
+40315=>20032,
+40421=>20033,
+40425=>20034,
+40435=>20035,
+40570=>20036,
+40578=>20037,
+40579=>20038,
+40580=>20039,
+40624=>20040,
+40676=>20041,
+40688=>20042,
+40690=>20043,
+40713=>20044,
+40719=>20045,
+40724=>20046,
+40731=>20047,
+40738=>20048,
+40742=>20049,
+40746=>20050,
+40747=>20051,
+40756=>20052,
+40794=>20053,
+40815=>20054,
+40862=>20055,
+40869=>20056,
+131317=>20057,
+151044=>20058,
+151538=>20059,
+163187=>20060,
+194581=>20061,
+194630=>20062,
+194713=>20063,
+194726=>20064,
+194789=>20065,
+195038=>20066,
+13790=>20067,
+40895=>20068,
+40896=>20069,
+40897=>20070,
+40898=>20071,
+172722=>20072,
+131416=>20075,
+132529=>20080,
+132844=>20083,
+134488=>20090,
+154060=>20112,
+14756=>20122,
+14776=>20123,
+142914=>20124,
+14940=>20127,
+133064=>20128,
+143339=>20130,
+162228=>20133,
+15044=>20135,
+15051=>20136,
+14981=>20142,
+15347=>20151,
+27384=>20152,
+15665=>20158,
+147531=>20168,
+15936=>20170,
+14497=>20171,
+158878=>20206,
+18207=>20219,
+162876=>20220,
+18462=>20225,
+39709=>20297,
+39724=>20298,
+20482=>20299,
+20958=>20300,
+21255=>20301,
+23532=>20302,
+63784=>20303,
+26142=>20304,
+63785=>20305,
+28746=>20306,
+64021=>20307,
+21857=>20308,
+27706=>20309,
+31328=>20310,
+156492=>20311,
+34819=>20312,
+38315=>20313,
+38741=>20314,
+171581=>20315,
+173594=>20316,
+900=>20317,
+901=>20318,
+272=>20322,
+294=>20323,
+306=>20324,
+319=>20325,
+330=>20326,
+358=>20327,
+307=>20328,
+312=>20329,
+320=>20330,
+329=>20331,
+359=>20332,
+266=>20333,
+278=>20334,
+286=>20335,
+290=>20336,
+288=>20337,
+304=>20338,
+302=>20339,
+310=>20340,
+315=>20342,
+325=>20343,
+342=>20344,
+370=>20345,
+471=>20346,
+475=>20347,
+473=>20348,
+469=>20349,
+372=>20350,
+374=>20351,
+267=>20352,
+279=>20353,
+501=>20354,
+287=>20355,
+289=>20356,
+303=>20357,
+311=>20358,
+316=>20360,
+326=>20361,
+343=>20362,
+371=>20363,
+373=>20364,
+375=>20365,
+8494=>20366,
+8710=>20367,
+8719=>20368,
+8804=>20369,
+8805=>20370,
+9674=>20371,
+902=>20427,
+904=>20428,
+905=>20429,
+906=>20430,
+938=>20431,
+908=>20432,
+910=>20433,
+939=>20434,
+911=>20435,
+940=>20436,
+941=>20437,
+942=>20438,
+943=>20439,
+970=>20440,
+912=>20441,
+972=>20442,
+973=>20443,
+971=>20444,
+944=>20445,
+974=>20446,
+1026=>20447,
+1027=>20448,
+1028=>20449,
+1029=>20450,
+1030=>20451,
+1031=>20452,
+1032=>20453,
+1033=>20454,
+1034=>20455,
+1035=>20456,
+1036=>20457,
+1038=>20458,
+1039=>20459,
+1106=>20460,
+1107=>20461,
+1108=>20462,
+1109=>20463,
+1110=>20464,
+1111=>20465,
+1112=>20466,
+1113=>20467,
+1114=>20468,
+1115=>20469,
+1116=>20470,
+1118=>20471,
+1119=>20472,
+9361=>20587,
+9362=>20588,
+20021=>21075,
+20060=>21076,
+20067=>21077,
+20072=>21078,
+20084=>21079,
+20085=>21080,
+20119=>21081,
+20143=>21082,
+20187=>21083,
+20194=>21084,
+20200=>21085,
+20207=>21086,
+20222=>21087,
+20226=>21088,
+20232=>21089,
+20242=>21090,
+20247=>21091,
+20275=>21092,
+20277=>21093,
+20288=>21094,
+20290=>21095,
+20299=>21096,
+20300=>21097,
+20306=>21098,
+20323=>21099,
+20334=>21100,
+20337=>21101,
+20345=>21102,
+20353=>21103,
+20361=>21104,
+20364=>21105,
+20366=>21106,
+20368=>21107,
+20371=>21108,
+20377=>21109,
+20383=>21110,
+20409=>21111,
+20411=>21112,
+20412=>21113,
+20413=>21114,
+20416=>21115,
+20417=>21116,
+20422=>21117,
+20424=>21118,
+20428=>21119,
+20444=>21120,
+20450=>21121,
+20464=>21122,
+20476=>21123,
+20487=>21124,
+20490=>21125,
+20503=>21126,
+20509=>21127,
+20528=>21128,
+20530=>21129,
+20531=>21130,
+20533=>21131,
+20549=>21132,
+20554=>21133,
+20561=>21134,
+20562=>21135,
+20569=>21136,
+20576=>21137,
+20583=>21138,
+20589=>21139,
+20593=>21140,
+20609=>21141,
+20611=>21142,
+20612=>21143,
+20614=>21144,
+20618=>21145,
+20624=>21146,
+20635=>21147,
+20639=>21148,
+20640=>21149,
+20641=>21150,
+20655=>21151,
+20656=>21152,
+20665=>21153,
+20669=>21154,
+20672=>21155,
+20691=>21156,
+20700=>21157,
+20701=>21158,
+20703=>21159,
+20706=>21160,
+20708=>21161,
+20726=>21162,
+20730=>21163,
+20761=>21165,
+20764=>21166,
+20765=>21167,
+20771=>21168,
+20775=>21169,
+20776=>21170,
+20780=>21171,
+20781=>21172,
+20783=>21173,
+20785=>21174,
+20788=>21175,
+20793=>21176,
+20802=>21177,
+20815=>21178,
+20819=>21179,
+20824=>21180,
+20838=>21181,
+20862=>21182,
+20878=>21183,
+20927=>21184,
+20930=>21185,
+20946=>21186,
+20949=>21187,
+20965=>21188,
+20978=>21189,
+20983=>21190,
+21016=>21191,
+21026=>21192,
+21061=>21193,
+21080=>21194,
+21087=>21195,
+21120=>21196,
+21125=>21197,
+21141=>21198,
+21142=>21199,
+21143=>21200,
+21146=>21201,
+21157=>21202,
+21159=>21203,
+21168=>21204,
+21174=>21205,
+21175=>21206,
+21176=>21207,
+21181=>21208,
+21188=>21209,
+21190=>21210,
+21199=>21211,
+21204=>21212,
+21212=>21213,
+21221=>21214,
+21224=>21215,
+21226=>21216,
+21228=>21217,
+21236=>21218,
+21238=>21219,
+21260=>21220,
+21267=>21221,
+21272=>21222,
+21275=>21223,
+21278=>21224,
+21285=>21225,
+21287=>21226,
+21288=>21227,
+21289=>21228,
+21291=>21229,
+21292=>21230,
+21296=>21231,
+21308=>21232,
+21337=>21233,
+21339=>21234,
+21379=>21236,
+21383=>21237,
+21384=>21238,
+21390=>21239,
+21409=>21240,
+21429=>21241,
+21432=>21242,
+21437=>21243,
+21455=>21244,
+21458=>21245,
+21459=>21246,
+21470=>21247,
+21479=>21249,
+21506=>21250,
+21530=>21251,
+21537=>21252,
+21551=>21253,
+21572=>21254,
+21575=>21255,
+21583=>21256,
+21598=>21257,
+21604=>21258,
+21607=>21259,
+21609=>21260,
+21613=>21261,
+21614=>21262,
+21633=>21263,
+21635=>21264,
+21637=>21265,
+21641=>21266,
+21649=>21267,
+21663=>21268,
+21706=>21269,
+21728=>21270,
+21750=>21271,
+21758=>21272,
+21772=>21273,
+21773=>21274,
+21810=>21275,
+21819=>21276,
+21821=>21277,
+21833=>21278,
+21837=>21279,
+21848=>21280,
+21850=>21281,
+21851=>21282,
+21887=>21283,
+21907=>21284,
+21911=>21285,
+21923=>21286,
+21953=>21287,
+21963=>21288,
+21975=>21289,
+21976=>21290,
+21982=>21291,
+22015=>21292,
+22026=>21294,
+22041=>21295,
+22067=>21296,
+22076=>21297,
+22081=>21298,
+22083=>21299,
+22084=>21300,
+22086=>21301,
+22113=>21302,
+22114=>21303,
+22115=>21304,
+22133=>21305,
+22148=>21306,
+22155=>21307,
+22183=>21308,
+22187=>21309,
+22206=>21310,
+22219=>21311,
+22224=>21312,
+22236=>21313,
+22245=>21314,
+22246=>21315,
+22247=>21316,
+22273=>21317,
+22274=>21318,
+22289=>21319,
+22304=>21320,
+22306=>21321,
+22308=>21322,
+22309=>21323,
+22314=>21324,
+22335=>21325,
+22354=>21326,
+22370=>21327,
+22375=>21328,
+22382=>21329,
+22385=>21330,
+22393=>21331,
+22398=>21332,
+22401=>21333,
+22420=>21334,
+22425=>21335,
+22431=>21336,
+22433=>21337,
+22421=>21338,
+22439=>21339,
+22441=>21340,
+22461=>21341,
+22493=>21342,
+22505=>21343,
+22526=>21344,
+22531=>21345,
+22536=>21346,
+22497=>21347,
+22540=>21348,
+22555=>21349,
+22559=>21350,
+22573=>21351,
+22591=>21352,
+22608=>21353,
+22613=>21354,
+22632=>21355,
+22648=>21356,
+22663=>21357,
+22664=>21358,
+22668=>21359,
+22678=>21360,
+22688=>21361,
+22689=>21362,
+22690=>21363,
+22694=>21364,
+22724=>21365,
+22722=>21366,
+22728=>21367,
+22742=>21368,
+22749=>21369,
+22753=>21370,
+22802=>21372,
+22803=>21373,
+22813=>21374,
+22817=>21375,
+22824=>21376,
+22832=>21377,
+22835=>21378,
+22837=>21379,
+22838=>21380,
+22847=>21381,
+22851=>21382,
+22866=>21383,
+22878=>21384,
+22891=>21385,
+22895=>21386,
+22898=>21387,
+22907=>21388,
+22924=>21389,
+22926=>21390,
+22933=>21391,
+22951=>21392,
+22957=>21393,
+22960=>21394,
+22967=>21395,
+22977=>21396,
+22980=>21397,
+23023=>21398,
+23026=>21399,
+23028=>21400,
+23031=>21401,
+23040=>21402,
+23054=>21403,
+23058=>21404,
+23070=>21405,
+23076=>21406,
+23080=>21407,
+23082=>21408,
+23088=>21409,
+23108=>21410,
+23109=>21411,
+23112=>21412,
+23116=>21413,
+23120=>21414,
+23134=>21415,
+23163=>21416,
+23184=>21417,
+23187=>21418,
+23190=>21419,
+23193=>21420,
+23227=>21421,
+23238=>21422,
+23240=>21423,
+23247=>21424,
+23293=>21425,
+23297=>21426,
+23371=>21427,
+23390=>21428,
+23406=>21429,
+23430=>21430,
+23438=>21431,
+23440=>21432,
+23441=>21433,
+23444=>21434,
+23464=>21435,
+23465=>21436,
+23469=>21437,
+23471=>21438,
+23473=>21439,
+23474=>21440,
+23482=>21441,
+23484=>21442,
+23489=>21443,
+23501=>21444,
+23503=>21445,
+23513=>21446,
+23514=>21447,
+23535=>21448,
+23540=>21449,
+23564=>21450,
+23575=>21451,
+23590=>21452,
+23598=>21453,
+23602=>21454,
+23605=>21455,
+23642=>21456,
+23668=>21457,
+23669=>21458,
+23675=>21459,
+23677=>21460,
+23687=>21461,
+23698=>21462,
+23709=>21463,
+23730=>21464,
+23732=>21465,
+23767=>21466,
+23790=>21467,
+23793=>21468,
+23794=>21469,
+23826=>21470,
+23843=>21471,
+23871=>21472,
+23880=>21473,
+23893=>21474,
+23889=>21475,
+23903=>21476,
+23904=>21477,
+23906=>21478,
+23908=>21479,
+23929=>21480,
+23930=>21481,
+23935=>21482,
+23946=>21483,
+23955=>21484,
+23957=>21485,
+23963=>21486,
+23967=>21487,
+23979=>21488,
+24003=>21489,
+24014=>21490,
+24025=>21491,
+24071=>21492,
+24077=>21493,
+24096=>21494,
+24139=>21495,
+24144=>21496,
+24145=>21497,
+24156=>21498,
+24176=>21499,
+24206=>21500,
+24226=>21501,
+24228=>21502,
+24241=>21503,
+24268=>21504,
+24270=>21505,
+24284=>21506,
+24286=>21507,
+24293=>21508,
+24299=>21509,
+24326=>21510,
+24345=>21511,
+24356=>21512,
+24363=>21513,
+24364=>21514,
+24366=>21515,
+24368=>21516,
+24383=>21517,
+24388=>21518,
+24411=>21519,
+24416=>21520,
+24431=>21521,
+24436=>21522,
+24437=>21523,
+24440=>21524,
+24442=>21525,
+24461=>21526,
+24470=>21527,
+24477=>21528,
+24491=>21529,
+24496=>21530,
+24497=>21531,
+24520=>21532,
+24528=>21533,
+24529=>21534,
+24552=>21535,
+24556=>21536,
+24562=>21537,
+24566=>21538,
+24570=>21539,
+24586=>21540,
+24595=>21541,
+24607=>21542,
+24621=>21543,
+24640=>21544,
+24648=>21545,
+24657=>21546,
+24662=>21547,
+24663=>21548,
+24689=>21549,
+24702=>21550,
+24706=>21551,
+24710=>21552,
+24712=>21553,
+24718=>21554,
+24721=>21555,
+24723=>21556,
+24728=>21557,
+24738=>21559,
+24741=>21560,
+24759=>21561,
+24770=>21562,
+24777=>21563,
+24778=>21564,
+24782=>21565,
+24783=>21566,
+24802=>21567,
+24805=>21568,
+24828=>21569,
+24834=>21570,
+24839=>21571,
+24844=>21572,
+24855=>21573,
+24866=>21574,
+24881=>21575,
+24885=>21576,
+24889=>21577,
+24901=>21578,
+24905=>21579,
+24940=>21580,
+24946=>21581,
+24952=>21582,
+24960=>21583,
+24961=>21584,
+24963=>21585,
+24964=>21586,
+24971=>21587,
+24988=>21588,
+24992=>21589,
+25002=>21590,
+25024=>21591,
+25025=>21592,
+25038=>21593,
+25039=>21594,
+25054=>21595,
+25057=>21596,
+25063=>21597,
+25065=>21598,
+25068=>21599,
+25069=>21600,
+25071=>21601,
+25089=>21602,
+25091=>21603,
+25116=>21604,
+25120=>21605,
+25127=>21606,
+25131=>21607,
+25154=>21608,
+25156=>21609,
+25168=>21610,
+25172=>21611,
+25180=>21612,
+25213=>21613,
+25229=>21614,
+25230=>21615,
+25231=>21616,
+25267=>21617,
+25270=>21618,
+25271=>21619,
+25274=>21620,
+25278=>21621,
+25279=>21622,
+25294=>21623,
+25322=>21624,
+25330=>21625,
+25348=>21626,
+25355=>21627,
+25363=>21628,
+25385=>21629,
+25389=>21630,
+25418=>21631,
+25426=>21632,
+25428=>21633,
+25432=>21634,
+25435=>21635,
+25446=>21636,
+25453=>21637,
+25464=>21638,
+25493=>21639,
+25498=>21640,
+25508=>21641,
+25510=>21642,
+25517=>21643,
+25537=>21644,
+25541=>21645,
+25544=>21646,
+25550=>21647,
+25555=>21648,
+25587=>21649,
+25610=>21650,
+25648=>21651,
+25675=>21652,
+25679=>21653,
+25683=>21654,
+25692=>21655,
+25697=>21656,
+25699=>21657,
+25733=>21658,
+25743=>21659,
+25755=>21660,
+25761=>21661,
+25763=>21662,
+25766=>21663,
+25768=>21664,
+25789=>21665,
+25801=>21666,
+25809=>21667,
+25833=>21668,
+25834=>21669,
+25845=>21670,
+25857=>21671,
+25864=>21672,
+25865=>21673,
+25866=>21674,
+25875=>21675,
+25894=>21676,
+25905=>21677,
+25914=>21678,
+25916=>21679,
+25917=>21680,
+25923=>21681,
+25936=>21682,
+25938=>21683,
+25951=>21684,
+25981=>21685,
+26008=>21686,
+26016=>21687,
+26019=>21688,
+26022=>21689,
+26030=>21690,
+26035=>21691,
+26070=>21692,
+26072=>21693,
+26100=>21695,
+26101=>21696,
+26110=>21697,
+26111=>21698,
+26125=>21699,
+26129=>21700,
+26130=>21701,
+26134=>21702,
+26141=>21703,
+26147=>21704,
+26150=>21705,
+26153=>21706,
+26169=>21707,
+26167=>21708,
+26176=>21709,
+26182=>21710,
+26186=>21711,
+26200=>21712,
+26208=>21713,
+26229=>21714,
+26239=>21715,
+26233=>21716,
+26236=>21717,
+26266=>21718,
+26267=>21719,
+26268=>21720,
+26271=>21721,
+26306=>21723,
+26307=>21724,
+26316=>21725,
+26318=>21726,
+26324=>21727,
+26335=>21728,
+26347=>21729,
+26350=>21730,
+26375=>21731,
+26396=>21732,
+26400=>21733,
+26402=>21734,
+26430=>21735,
+26437=>21736,
+26476=>21737,
+26500=>21738,
+26510=>21739,
+26518=>21740,
+26521=>21741,
+26556=>21742,
+26557=>21743,
+26562=>21744,
+26565=>21745,
+26569=>21746,
+26588=>21747,
+26593=>21748,
+26598=>21749,
+26610=>21750,
+26614=>21751,
+26644=>21752,
+26649=>21753,
+26663=>21754,
+26671=>21755,
+26687=>21756,
+26698=>21757,
+26712=>21758,
+26735=>21759,
+26736=>21760,
+26737=>21761,
+26745=>21762,
+26747=>21763,
+26760=>21764,
+26785=>21765,
+26793=>21766,
+26798=>21767,
+26833=>21768,
+26835=>21769,
+26844=>21770,
+26845=>21771,
+26858=>21772,
+26870=>21773,
+26877=>21774,
+26886=>21775,
+26889=>21776,
+26896=>21777,
+26902=>21778,
+26929=>21779,
+26949=>21780,
+26958=>21781,
+26982=>21782,
+26992=>21783,
+26993=>21784,
+27003=>21785,
+27021=>21786,
+27041=>21787,
+27064=>21788,
+27077=>21789,
+27080=>21790,
+27136=>21792,
+27139=>21793,
+27168=>21794,
+27172=>21795,
+27191=>21796,
+27242=>21798,
+27265=>21799,
+27270=>21800,
+27271=>21801,
+27291=>21802,
+27312=>21803,
+27313=>21804,
+27316=>21805,
+27326=>21806,
+27327=>21807,
+27340=>21808,
+27349=>21809,
+27350=>21810,
+27376=>21811,
+27388=>21812,
+27394=>21813,
+27398=>21814,
+27399=>21815,
+27401=>21816,
+27432=>21817,
+27435=>21818,
+27446=>21819,
+27469=>21820,
+27474=>21821,
+27485=>21822,
+27499=>21823,
+27502=>21824,
+27504=>21825,
+27525=>21826,
+27543=>21827,
+27551=>21828,
+27552=>21829,
+27554=>21830,
+27555=>21831,
+27560=>21832,
+27564=>21833,
+27576=>21834,
+27577=>21835,
+27587=>21836,
+27588=>21837,
+27619=>21838,
+27666=>21839,
+27673=>21840,
+27679=>21841,
+27686=>21842,
+27687=>21843,
+27688=>21844,
+27694=>21845,
+27707=>21846,
+27723=>21847,
+27727=>21848,
+27755=>21849,
+27768=>21850,
+27783=>21851,
+27807=>21852,
+27824=>21853,
+27826=>21854,
+27853=>21855,
+27855=>21856,
+27857=>21857,
+27879=>21858,
+27890=>21859,
+27892=>21860,
+27911=>21861,
+27919=>21862,
+27923=>21863,
+27930=>21864,
+27944=>21865,
+27999=>21866,
+28007=>21867,
+28050=>21868,
+28055=>21869,
+28087=>21870,
+28093=>21871,
+28128=>21872,
+28130=>21873,
+28133=>21874,
+28143=>21875,
+28148=>21876,
+28160=>21877,
+28164=>21878,
+28219=>21879,
+28242=>21880,
+28253=>21881,
+28258=>21882,
+28264=>21883,
+28301=>21884,
+28313=>21885,
+28320=>21886,
+28333=>21887,
+28334=>21888,
+28339=>21889,
+28347=>21890,
+28352=>21891,
+28360=>21892,
+28365=>21893,
+28367=>21894,
+28397=>21895,
+28398=>21896,
+28420=>21897,
+28424=>21898,
+28429=>21899,
+28438=>21900,
+28443=>21901,
+28475=>21902,
+28461=>21903,
+28495=>21904,
+28499=>21905,
+28509=>21906,
+28524=>21907,
+28547=>21908,
+28563=>21909,
+28582=>21910,
+28592=>21911,
+28613=>21912,
+28648=>21913,
+28669=>21914,
+28695=>21915,
+28719=>21916,
+28724=>21917,
+28727=>21918,
+28740=>21919,
+28744=>21920,
+28757=>21921,
+28820=>21922,
+28822=>21923,
+28827=>21924,
+28852=>21925,
+28922=>21926,
+28933=>21927,
+28939=>21928,
+28973=>21929,
+28984=>21930,
+28993=>21931,
+29003=>21932,
+29015=>21934,
+29018=>21935,
+29068=>21936,
+29082=>21937,
+29104=>21938,
+29119=>21939,
+29120=>21940,
+29132=>21941,
+29146=>21942,
+29176=>21943,
+29192=>21944,
+29193=>21945,
+29203=>21946,
+29210=>21947,
+29220=>21948,
+29231=>21949,
+29253=>21950,
+29262=>21951,
+29278=>21952,
+29291=>21953,
+29297=>21954,
+29307=>21955,
+29308=>21956,
+29321=>21957,
+29331=>21958,
+29352=>21959,
+29397=>21960,
+29398=>21961,
+29400=>21962,
+29407=>21963,
+29438=>21964,
+29453=>21965,
+29459=>21966,
+29490=>21967,
+29493=>21968,
+29526=>21969,
+29533=>21970,
+29534=>21971,
+29535=>21972,
+29536=>21973,
+29545=>21974,
+29561=>21975,
+29568=>21976,
+29582=>21977,
+29584=>21978,
+29587=>21979,
+29591=>21980,
+29610=>21981,
+29613=>21982,
+29638=>21983,
+29644=>21984,
+29651=>21985,
+29661=>21986,
+29670=>21987,
+29687=>21988,
+29691=>21989,
+29695=>21990,
+29696=>21991,
+29713=>21992,
+29741=>21993,
+29799=>21994,
+29800=>21995,
+29806=>21996,
+29839=>21997,
+29841=>21998,
+29850=>21999,
+29870=>22000,
+29873=>22001,
+29874=>22002,
+29900=>22003,
+29904=>22004,
+29907=>22005,
+29915=>22007,
+29928=>22008,
+29930=>22009,
+29948=>22011,
+29958=>22012,
+29970=>22013,
+29991=>22014,
+29993=>22015,
+30006=>22016,
+30009=>22017,
+30019=>22018,
+30023=>22019,
+30039=>22020,
+30047=>22021,
+30049=>22022,
+30075=>22023,
+30076=>22024,
+30085=>22025,
+30101=>22026,
+30108=>22027,
+30138=>22028,
+30226=>22029,
+30243=>22030,
+30249=>22031,
+30265=>22032,
+30266=>22033,
+30272=>22034,
+30276=>22035,
+30297=>22036,
+30341=>22037,
+30348=>22038,
+30349=>22039,
+30367=>22040,
+30370=>22041,
+30371=>22042,
+30401=>22043,
+30411=>22044,
+30432=>22046,
+30454=>22047,
+30470=>22048,
+30482=>22049,
+30484=>22050,
+30485=>22051,
+30492=>22052,
+30510=>22053,
+30525=>22054,
+30530=>22055,
+30546=>22056,
+30550=>22057,
+30551=>22058,
+30576=>22059,
+30579=>22060,
+30580=>22061,
+30638=>22064,
+30641=>22065,
+30645=>22066,
+30659=>22067,
+30674=>22068,
+30677=>22069,
+30712=>22070,
+30734=>22071,
+30737=>22072,
+30749=>22073,
+30755=>22074,
+30788=>22075,
+30792=>22076,
+30796=>22077,
+30802=>22078,
+30814=>22079,
+30816=>22080,
+30817=>22081,
+30819=>22082,
+30863=>22083,
+30888=>22084,
+30892=>22085,
+30898=>22086,
+30909=>22087,
+30911=>22088,
+30919=>22089,
+30930=>22090,
+30934=>22091,
+30939=>22092,
+30943=>22093,
+30954=>22094,
+30963=>22095,
+30966=>22096,
+30975=>22097,
+30982=>22098,
+31002=>22099,
+31006=>22100,
+31008=>22101,
+31017=>22102,
+31021=>22103,
+31029=>22104,
+31044=>22105,
+31051=>22106,
+31055=>22107,
+31057=>22108,
+31081=>22109,
+31099=>22110,
+31102=>22111,
+31116=>22112,
+31121=>22113,
+31123=>22114,
+31132=>22115,
+31144=>22116,
+31151=>22117,
+31183=>22118,
+31197=>22119,
+31200=>22120,
+31202=>22121,
+31205=>22122,
+31217=>22123,
+31224=>22124,
+31228=>22125,
+31239=>22126,
+31265=>22127,
+31271=>22128,
+31275=>22129,
+31279=>22130,
+31284=>22131,
+31285=>22132,
+31304=>22133,
+31317=>22134,
+31333=>22135,
+31358=>22136,
+31371=>22137,
+31377=>22138,
+31390=>22139,
+31433=>22140,
+31451=>22141,
+31465=>22142,
+31468=>22143,
+31473=>22144,
+31483=>22145,
+31519=>22146,
+31523=>22147,
+31529=>22148,
+31536=>22149,
+31540=>22150,
+31551=>22151,
+31552=>22152,
+31594=>22153,
+31620=>22154,
+31625=>22155,
+31630=>22156,
+31638=>22157,
+31653=>22158,
+31666=>22159,
+31670=>22160,
+31674=>22161,
+31675=>22162,
+31677=>22163,
+31682=>22164,
+31688=>22165,
+31707=>22166,
+31732=>22167,
+31733=>22168,
+31737=>22169,
+31738=>22170,
+31746=>22171,
+31748=>22172,
+31750=>22173,
+31756=>22174,
+31769=>22175,
+31771=>22176,
+31781=>22177,
+31788=>22178,
+31796=>22179,
+31801=>22180,
+31802=>22181,
+31814=>22182,
+31829=>22183,
+31834=>22184,
+31843=>22185,
+31868=>22187,
+31878=>22188,
+31920=>22189,
+31931=>22190,
+31951=>22191,
+31956=>22192,
+31977=>22193,
+32015=>22194,
+32017=>22195,
+32022=>22196,
+32038=>22197,
+32042=>22198,
+32045=>22199,
+32081=>22200,
+32087=>22201,
+32101=>22202,
+32103=>22203,
+32120=>22204,
+32123=>22205,
+32129=>22206,
+32150=>22207,
+32195=>22208,
+32196=>22209,
+32197=>22210,
+32198=>22211,
+32205=>22212,
+32206=>22213,
+32256=>22214,
+32226=>22215,
+32234=>22216,
+32237=>22217,
+32250=>22218,
+32284=>22219,
+32301=>22220,
+32307=>22221,
+32319=>22222,
+32334=>22223,
+32336=>22224,
+32344=>22225,
+32351=>22226,
+32357=>22227,
+32405=>22228,
+32413=>22229,
+32414=>22230,
+32575=>22231,
+32604=>22232,
+32614=>22233,
+32653=>22235,
+32655=>22236,
+32678=>22237,
+32682=>22238,
+32692=>22239,
+32700=>22240,
+32704=>22241,
+32712=>22242,
+32744=>22243,
+32783=>22244,
+32787=>22245,
+32797=>22246,
+32799=>22247,
+32800=>22248,
+32814=>22249,
+32820=>22250,
+32830=>22251,
+32832=>22252,
+32836=>22253,
+32868=>22254,
+32877=>22255,
+32897=>22256,
+32953=>22257,
+32968=>22258,
+32973=>22259,
+32978=>22260,
+33006=>22261,
+33010=>22262,
+33014=>22263,
+33017=>22264,
+33035=>22265,
+33052=>22266,
+33056=>22267,
+33084=>22268,
+33093=>22269,
+33095=>22270,
+33106=>22271,
+33121=>22272,
+33143=>22273,
+33158=>22274,
+33166=>22275,
+33174=>22276,
+33186=>22277,
+33198=>22278,
+33221=>22279,
+33230=>22280,
+33259=>22281,
+33264=>22282,
+33265=>22283,
+33266=>22284,
+33269=>22285,
+33272=>22286,
+33295=>22288,
+33309=>22289,
+33320=>22290,
+33347=>22291,
+33358=>22292,
+33361=>22293,
+33366=>22294,
+33383=>22295,
+33403=>22296,
+33408=>22297,
+33409=>22298,
+33415=>22299,
+33428=>22300,
+33430=>22301,
+33432=>22302,
+33434=>22303,
+33435=>22304,
+33440=>22305,
+33498=>22306,
+33504=>22307,
+33508=>22308,
+33517=>22309,
+33546=>22310,
+33547=>22311,
+33566=>22312,
+33567=>22313,
+33569=>22314,
+33580=>22315,
+33582=>22316,
+33587=>22317,
+33591=>22318,
+33597=>22319,
+33602=>22320,
+33613=>22321,
+33614=>22322,
+33648=>22323,
+33664=>22324,
+33666=>22325,
+33668=>22326,
+33689=>22327,
+33692=>22328,
+33702=>22329,
+33708=>22330,
+33726=>22331,
+33619=>22332,
+33768=>22333,
+33817=>22334,
+33709=>22335,
+33839=>22336,
+33861=>22337,
+33863=>22338,
+33869=>22339,
+33878=>22340,
+33888=>22342,
+33892=>22343,
+33895=>22344,
+33898=>22345,
+33908=>22346,
+33917=>22347,
+33938=>22348,
+33941=>22349,
+33961=>22350,
+33962=>22351,
+33991=>22352,
+33992=>22353,
+33996=>22354,
+34034=>22355,
+34039=>22356,
+34050=>22357,
+34051=>22358,
+34055=>22359,
+34062=>22360,
+34064=>22361,
+34076=>22362,
+34082=>22363,
+34087=>22364,
+34090=>22365,
+34099=>22366,
+34102=>22367,
+34111=>22368,
+34128=>22369,
+34130=>22370,
+34140=>22371,
+34143=>22373,
+34144=>22374,
+34169=>22375,
+34185=>22376,
+34187=>22377,
+34208=>22378,
+34213=>22379,
+34215=>22380,
+34228=>22381,
+34230=>22382,
+34232=>22383,
+34237=>22384,
+34238=>22385,
+34239=>22386,
+34242=>22387,
+34266=>22388,
+34272=>22389,
+34280=>22390,
+34291=>22391,
+34300=>22392,
+34317=>22393,
+34318=>22394,
+34329=>22395,
+34331=>22396,
+34358=>22397,
+34362=>22398,
+34365=>22399,
+34392=>22400,
+34393=>22401,
+34397=>22402,
+34400=>22403,
+34401=>22404,
+34404=>22405,
+34409=>22406,
+34422=>22407,
+34454=>22408,
+34458=>22409,
+34465=>22410,
+34470=>22411,
+34477=>22412,
+34484=>22413,
+34485=>22414,
+34487=>22415,
+34489=>22416,
+34495=>22417,
+34501=>22418,
+34514=>22419,
+34522=>22420,
+34524=>22421,
+34528=>22422,
+34533=>22423,
+34535=>22424,
+34440=>22425,
+34564=>22426,
+34575=>22427,
+34607=>22428,
+34610=>22429,
+34620=>22430,
+34621=>22431,
+34629=>22432,
+34637=>22433,
+34657=>22434,
+34671=>22435,
+34691=>22436,
+34692=>22437,
+34693=>22438,
+34694=>22439,
+34704=>22440,
+34709=>22441,
+34737=>22443,
+34760=>22444,
+34762=>22445,
+34773=>22446,
+34777=>22447,
+34780=>22448,
+34786=>22449,
+34788=>22450,
+34801=>22451,
+34803=>22452,
+34808=>22453,
+34810=>22454,
+34815=>22455,
+34825=>22456,
+34841=>22457,
+34834=>22458,
+34842=>22459,
+34846=>22460,
+34864=>22461,
+34869=>22462,
+34881=>22463,
+34883=>22464,
+34888=>22465,
+34889=>22466,
+34897=>22468,
+34908=>22469,
+34912=>22470,
+34929=>22471,
+34937=>22472,
+34939=>22473,
+34944=>22474,
+34975=>22475,
+34984=>22476,
+35002=>22477,
+35019=>22478,
+35020=>22479,
+35038=>22480,
+35047=>22481,
+35063=>22482,
+35085=>22483,
+35093=>22484,
+35094=>22485,
+35104=>22486,
+35112=>22487,
+35121=>22488,
+35130=>22489,
+35142=>22490,
+35151=>22491,
+35154=>22492,
+35159=>22493,
+35163=>22494,
+35169=>22495,
+35171=>22496,
+35182=>22497,
+35187=>22498,
+35189=>22499,
+35194=>22500,
+35197=>22501,
+35213=>22502,
+35221=>22503,
+35227=>22504,
+35228=>22505,
+35232=>22506,
+35252=>22507,
+35254=>22508,
+35287=>22509,
+35305=>22510,
+35309=>22511,
+35321=>22512,
+35332=>22513,
+35333=>22514,
+35358=>22515,
+35360=>22516,
+35364=>22517,
+35366=>22518,
+35371=>22519,
+35372=>22520,
+35375=>22521,
+35389=>22522,
+35392=>22523,
+35395=>22524,
+35411=>22525,
+35414=>22526,
+35420=>22527,
+35429=>22528,
+35446=>22529,
+35447=>22530,
+35450=>22531,
+35451=>22532,
+35456=>22533,
+35459=>22534,
+35467=>22535,
+35471=>22536,
+35474=>22537,
+35479=>22538,
+35481=>22539,
+35487=>22540,
+35497=>22541,
+35503=>22542,
+35507=>22543,
+35515=>22544,
+35523=>22545,
+35526=>22546,
+35528=>22547,
+35530=>22548,
+35539=>22549,
+35540=>22550,
+35541=>22551,
+35568=>22552,
+35583=>22553,
+35595=>22554,
+35614=>22555,
+35632=>22556,
+35644=>22557,
+35650=>22558,
+35656=>22559,
+35661=>22560,
+35683=>22561,
+35705=>22562,
+35716=>22563,
+35725=>22564,
+35727=>22565,
+35896=>22566,
+35902=>22567,
+35921=>22568,
+35928=>22569,
+35931=>22570,
+35933=>22571,
+35929=>22572,
+35939=>22573,
+35940=>22574,
+35942=>22575,
+35957=>22576,
+35958=>22577,
+35966=>22578,
+35974=>22579,
+35975=>22580,
+35979=>22581,
+35984=>22582,
+35996=>22584,
+36025=>22585,
+36038=>22586,
+36043=>22587,
+36047=>22588,
+36061=>22589,
+36072=>22590,
+36079=>22591,
+36082=>22592,
+36095=>22593,
+36197=>22594,
+36223=>22595,
+36226=>22596,
+36232=>22597,
+36240=>22598,
+36254=>22599,
+36256=>22600,
+36268=>22601,
+36277=>22602,
+36279=>22603,
+36281=>22604,
+36283=>22605,
+36288=>22606,
+36293=>22607,
+36295=>22608,
+36298=>22609,
+36308=>22610,
+36325=>22611,
+36336=>22612,
+36284=>22613,
+36356=>22614,
+36357=>22615,
+36369=>22616,
+36403=>22617,
+36407=>22618,
+36408=>22619,
+36430=>22620,
+36443=>22621,
+36445=>22622,
+36446=>22623,
+36473=>22624,
+36482=>22625,
+36483=>22626,
+36507=>22627,
+36509=>22628,
+36514=>22629,
+36538=>22630,
+36545=>22631,
+36547=>22632,
+36548=>22633,
+36551=>22634,
+36572=>22635,
+36590=>22636,
+36593=>22637,
+36599=>22638,
+36589=>22639,
+36610=>22640,
+36623=>22641,
+36624=>22642,
+36630=>22643,
+36640=>22644,
+36641=>22645,
+36643=>22646,
+36648=>22647,
+36654=>22648,
+36660=>22649,
+36663=>22650,
+36673=>22651,
+36687=>22652,
+36690=>22653,
+36691=>22654,
+36701=>22655,
+36702=>22656,
+36709=>22657,
+36765=>22658,
+36792=>22659,
+36798=>22660,
+36800=>22661,
+36811=>22662,
+36816=>22663,
+36818=>22664,
+36835=>22665,
+36862=>22666,
+36888=>22667,
+36904=>22668,
+36905=>22669,
+36906=>22670,
+36915=>22671,
+36916=>22672,
+36927=>22673,
+36962=>22674,
+36966=>22675,
+36972=>22676,
+37006=>22677,
+37029=>22678,
+37068=>22679,
+37077=>22680,
+37080=>22681,
+37081=>22682,
+37093=>22683,
+37074=>22684,
+37128=>22685,
+37133=>22686,
+37136=>22687,
+37146=>22688,
+37152=>22689,
+37161=>22690,
+37166=>22691,
+37174=>22692,
+37180=>22693,
+37187=>22694,
+37199=>22695,
+37203=>22696,
+37229=>22697,
+37243=>22698,
+37249=>22699,
+37254=>22700,
+37267=>22701,
+37268=>22702,
+37272=>22703,
+37281=>22704,
+37286=>22705,
+37311=>22706,
+37331=>22707,
+37332=>22708,
+37337=>22709,
+37353=>22710,
+37354=>22711,
+37359=>22712,
+37369=>22713,
+37373=>22714,
+37380=>22715,
+37381=>22716,
+37388=>22717,
+37394=>22718,
+37395=>22719,
+37400=>22720,
+37404=>22721,
+37405=>22722,
+37412=>22723,
+37413=>22724,
+37414=>22725,
+37422=>22726,
+37423=>22727,
+37424=>22728,
+37429=>22729,
+37430=>22730,
+37438=>22731,
+37446=>22732,
+37453=>22733,
+37464=>22734,
+37468=>22735,
+37469=>22736,
+37481=>22737,
+37486=>22738,
+37487=>22739,
+37488=>22740,
+37493=>22741,
+37497=>22742,
+37499=>22743,
+37514=>22744,
+37522=>22745,
+37536=>22746,
+37540=>22747,
+37541=>22748,
+37544=>22749,
+37558=>22750,
+37560=>22751,
+37562=>22752,
+37565=>22753,
+37575=>22754,
+37581=>22755,
+37592=>22756,
+37596=>22757,
+37597=>22758,
+37601=>22759,
+37603=>22760,
+37608=>22761,
+37612=>22762,
+37614=>22763,
+37616=>22764,
+37632=>22765,
+37640=>22766,
+37660=>22767,
+37668=>22768,
+37674=>22769,
+37684=>22770,
+37687=>22771,
+37712=>22772,
+37717=>22773,
+37726=>22774,
+37735=>22775,
+37737=>22776,
+37743=>22777,
+37748=>22778,
+37750=>22779,
+37754=>22780,
+37757=>22781,
+37760=>22782,
+37761=>22783,
+37773=>22784,
+37778=>22785,
+37781=>22786,
+37784=>22787,
+37798=>22789,
+37800=>22790,
+37803=>22791,
+37812=>22792,
+37813=>22793,
+37814=>22794,
+37828=>22795,
+37829=>22796,
+37833=>22797,
+37835=>22798,
+37837=>22799,
+37843=>22800,
+37849=>22801,
+37879=>22802,
+37889=>22803,
+37896=>22804,
+37909=>22805,
+37919=>22806,
+37935=>22807,
+37949=>22808,
+37955=>22809,
+37977=>22810,
+37980=>22811,
+37983=>22812,
+37985=>22813,
+37992=>22814,
+37998=>22815,
+38020=>22816,
+38019=>22817,
+38270=>22818,
+38276=>22819,
+38301=>22820,
+38302=>22821,
+38330=>22822,
+38361=>22823,
+38365=>22824,
+38367=>22825,
+38430=>22826,
+38434=>22827,
+38437=>22828,
+38438=>22829,
+38455=>22830,
+38457=>22831,
+38458=>22832,
+38482=>22833,
+38486=>22834,
+38487=>22835,
+38510=>22836,
+38524=>22837,
+38526=>22838,
+38545=>22839,
+38559=>22840,
+38566=>22841,
+38602=>22842,
+38623=>22844,
+38650=>22845,
+38661=>22846,
+38682=>22847,
+38685=>22848,
+38730=>22850,
+38744=>22851,
+38775=>22852,
+38776=>22853,
+38779=>22854,
+38784=>22855,
+38793=>22856,
+38807=>22857,
+38840=>22858,
+38844=>22859,
+38847=>22860,
+38852=>22861,
+38853=>22862,
+38855=>22863,
+38858=>22864,
+38862=>22865,
+38864=>22866,
+38871=>22867,
+38877=>22868,
+38884=>22869,
+38903=>22870,
+38904=>22871,
+38906=>22872,
+38937=>22873,
+38940=>22874,
+38944=>22875,
+38959=>22876,
+38965=>22877,
+38980=>22878,
+38986=>22879,
+38993=>22880,
+39018=>22881,
+39086=>22882,
+39116=>22883,
+39142=>22884,
+39158=>22885,
+39175=>22886,
+39199=>22887,
+39202=>22888,
+39206=>22889,
+39211=>22890,
+39220=>22891,
+39225=>22892,
+39239=>22893,
+39257=>22894,
+39259=>22895,
+39323=>22896,
+39325=>22897,
+39327=>22898,
+39344=>22899,
+39346=>22900,
+39349=>22901,
+39379=>22902,
+39386=>22903,
+39388=>22904,
+39399=>22905,
+39402=>22906,
+39403=>22907,
+39404=>22908,
+39412=>22909,
+39413=>22910,
+39421=>22911,
+39422=>22912,
+39428=>22913,
+39435=>22914,
+39454=>22915,
+39458=>22916,
+39475=>22917,
+39477=>22918,
+39495=>22919,
+39499=>22921,
+39508=>22922,
+39517=>22923,
+39594=>22924,
+39596=>22925,
+39598=>22926,
+39602=>22927,
+39604=>22928,
+39611=>22929,
+39615=>22930,
+39624=>22931,
+39639=>22932,
+39643=>22933,
+39652=>22934,
+39655=>22935,
+39660=>22936,
+39666=>22937,
+39667=>22938,
+39669=>22939,
+39674=>22940,
+39677=>22941,
+39679=>22942,
+39680=>22943,
+39684=>22944,
+39685=>22945,
+39707=>22946,
+39718=>22947,
+39735=>22949,
+39737=>22950,
+39738=>22951,
+39756=>22952,
+39766=>22953,
+39767=>22954,
+39771=>22955,
+39777=>22956,
+39786=>22957,
+39789=>22958,
+39790=>22959,
+39800=>22960,
+39807=>22961,
+39813=>22962,
+39815=>22963,
+39817=>22964,
+39819=>22965,
+39821=>22966,
+39828=>22967,
+39834=>22968,
+39849=>22969,
+39863=>22970,
+39868=>22971,
+39888=>22972,
+39929=>22973,
+39951=>22974,
+39953=>22975,
+39966=>22976,
+39974=>22977,
+39976=>22978,
+39997=>22979,
+40003=>22980,
+40014=>22981,
+40030=>22982,
+40059=>22983,
+40183=>22984,
+40185=>22985,
+40220=>22986,
+40239=>22987,
+40243=>22988,
+40244=>22989,
+40250=>22990,
+40252=>22991,
+40261=>22992,
+40275=>22993,
+40276=>22994,
+40293=>22995,
+40323=>22996,
+40326=>22997,
+40334=>22998,
+40338=>22999,
+40339=>23000,
+40341=>23001,
+40343=>23002,
+40344=>23003,
+40362=>23004,
+40366=>23005,
+40394=>23007,
+40404=>23008,
+40405=>23009,
+40414=>23010,
+40430=>23011,
+40432=>23012,
+40446=>23013,
+40462=>23014,
+40464=>23015,
+40465=>23016,
+40466=>23017,
+40470=>23018,
+40583=>23019,
+40590=>23020,
+40591=>23021,
+40598=>23022,
+40600=>23023,
+40622=>23024,
+40627=>23025,
+40646=>23026,
+40648=>23027,
+40651=>23028,
+40661=>23029,
+40684=>23030,
+40685=>23031,
+40689=>23032,
+40693=>23033,
+40696=>23034,
+40721=>23035,
+40726=>23036,
+40730=>23037,
+40735=>23038,
+40753=>23039,
+40754=>23040,
+40764=>23041,
+40767=>23042,
+40771=>23043,
+40772=>23044,
+40775=>23045,
+40790=>23046,
+40798=>23047,
+40814=>23048,
+40819=>23049,
+40826=>23050,
+40829=>23051,
+40847=>23052,
+40849=>23053,
+40850=>23054,
+40854=>23055,
+40865=>23056,
+40867=>23057,
+);
+?>
diff --git a/admin/exportclases/fonts/uni2cid_ak12.php b/admin/exportclases/fonts/uni2cid_ak12.php
new file mode 100644
index 0000000..6a84006
--- /dev/null
+++ b/admin/exportclases/fonts/uni2cid_ak12.php
@@ -0,0 +1,17530 @@
+<?php
+// unicode to cid conversion table is from
+// ftp://ftp.oreilly.com/pub/examples/nutshell/cjkv/adobe/
+// cid2code.txt in ak12.tar.Z
+$cidinfo['uni2cid'] = array(
+32=>1,
+33=>2,
+34=>3,
+35=>4,
+36=>5,
+37=>6,
+38=>7,
+39=>8,
+40=>9,
+41=>10,
+42=>11,
+43=>12,
+44=>13,
+45=>14,
+46=>15,
+47=>16,
+48=>17,
+49=>18,
+50=>19,
+51=>20,
+52=>21,
+53=>22,
+54=>23,
+55=>24,
+56=>25,
+57=>26,
+58=>27,
+59=>28,
+60=>29,
+61=>30,
+62=>31,
+63=>32,
+64=>33,
+65=>34,
+66=>35,
+67=>36,
+68=>37,
+69=>38,
+70=>39,
+71=>40,
+72=>41,
+73=>42,
+74=>43,
+75=>44,
+76=>45,
+77=>46,
+78=>47,
+79=>48,
+80=>49,
+81=>50,
+82=>51,
+83=>52,
+84=>53,
+85=>54,
+86=>55,
+87=>56,
+88=>57,
+89=>58,
+90=>59,
+91=>60,
+92=>61,
+93=>62,
+94=>63,
+95=>64,
+96=>65,
+97=>66,
+98=>67,
+99=>68,
+100=>69,
+101=>70,
+102=>71,
+103=>72,
+104=>73,
+105=>74,
+106=>75,
+107=>76,
+108=>77,
+109=>78,
+110=>79,
+111=>80,
+112=>81,
+113=>82,
+114=>83,
+115=>84,
+116=>85,
+117=>86,
+118=>87,
+119=>88,
+120=>89,
+121=>90,
+122=>91,
+123=>92,
+124=>93,
+125=>94,
+126=>95,
+8361=>96,
+8208=>97,
+169=>98,
+12644=>101,
+12288=>101,
+12289=>102,
+12290=>103,
+183=>104,
+12539=>104,
+8229=>105,
+8943=>106,
+8230=>106,
+168=>107,
+12291=>108,
+8211=>109,
+8212=>110,
+8214=>111,
+65340=>112,
+65374=>113,
+8216=>114,
+8217=>115,
+8220=>116,
+8221=>117,
+12308=>118,
+12309=>119,
+12296=>120,
+12297=>121,
+12298=>122,
+12299=>123,
+12300=>124,
+12301=>125,
+12302=>126,
+12303=>127,
+12304=>128,
+12305=>129,
+177=>130,
+215=>131,
+247=>132,
+8800=>133,
+8804=>134,
+8805=>135,
+8734=>136,
+8756=>137,
+176=>138,
+8242=>139,
+8243=>140,
+8451=>141,
+8491=>142,
+65504=>143,
+65505=>144,
+65509=>145,
+9794=>146,
+9792=>147,
+8736=>148,
+8869=>149,
+8978=>150,
+8706=>151,
+8711=>152,
+8801=>153,
+8786=>154,
+167=>155,
+8251=>156,
+9734=>157,
+9733=>158,
+9675=>159,
+9679=>160,
+9678=>161,
+9671=>162,
+9670=>163,
+9633=>164,
+9632=>165,
+9651=>166,
+9650=>167,
+9661=>168,
+9660=>169,
+8594=>170,
+8592=>171,
+8593=>172,
+8595=>173,
+8596=>174,
+12307=>175,
+171=>176,
+187=>177,
+8730=>178,
+8765=>179,
+8733=>180,
+8757=>181,
+8747=>182,
+8748=>183,
+8712=>184,
+8715=>185,
+8838=>186,
+8839=>187,
+8834=>188,
+8835=>189,
+8746=>190,
+8745=>191,
+8743=>192,
+8744=>193,
+65506=>194,
+8658=>195,
+8660=>196,
+8704=>197,
+8707=>198,
+180=>199,
+732=>200,
+711=>201,
+728=>202,
+733=>203,
+730=>204,
+729=>205,
+184=>206,
+731=>207,
+161=>208,
+191=>209,
+8758=>210,
+8750=>211,
+8721=>212,
+8719=>213,
+164=>214,
+8457=>215,
+8240=>216,
+9665=>217,
+9664=>218,
+9655=>219,
+9654=>220,
+9828=>221,
+9824=>222,
+9825=>223,
+9829=>224,
+9831=>225,
+9827=>226,
+9673=>227,
+9672=>228,
+9635=>229,
+9680=>230,
+9681=>231,
+9618=>232,
+9636=>233,
+9637=>234,
+9640=>235,
+9639=>236,
+9638=>237,
+9641=>238,
+9832=>239,
+9743=>240,
+9742=>241,
+9756=>242,
+9758=>243,
+182=>244,
+8224=>245,
+8225=>246,
+8597=>247,
+8599=>248,
+8601=>249,
+8598=>250,
+8600=>251,
+9837=>252,
+9833=>253,
+9834=>254,
+9836=>255,
+12927=>256,
+12828=>257,
+8470=>258,
+13255=>259,
+8482=>260,
+13250=>261,
+13272=>262,
+8481=>263,
+65281=>264,
+65282=>265,
+65283=>266,
+65284=>267,
+65285=>268,
+65286=>269,
+65287=>270,
+65288=>271,
+65289=>272,
+65290=>273,
+65291=>274,
+65292=>275,
+65293=>276,
+65294=>277,
+65295=>278,
+65296=>279,
+65297=>280,
+65298=>281,
+65299=>282,
+65300=>283,
+65301=>284,
+65302=>285,
+65303=>286,
+65304=>287,
+65305=>288,
+65306=>289,
+65307=>290,
+65308=>291,
+65309=>292,
+65310=>293,
+65311=>294,
+65312=>295,
+65313=>296,
+65314=>297,
+65315=>298,
+65316=>299,
+65317=>300,
+65318=>301,
+65319=>302,
+65320=>303,
+65321=>304,
+65322=>305,
+65323=>306,
+65324=>307,
+65325=>308,
+65326=>309,
+65327=>310,
+65328=>311,
+65329=>312,
+65330=>313,
+65331=>314,
+65332=>315,
+65333=>316,
+65334=>317,
+65335=>318,
+65336=>319,
+65337=>320,
+65338=>321,
+65339=>322,
+65510=>323,
+65341=>324,
+65342=>325,
+65343=>326,
+65344=>327,
+65345=>328,
+65346=>329,
+65347=>330,
+65348=>331,
+65349=>332,
+65350=>333,
+65351=>334,
+65352=>335,
+65353=>336,
+65354=>337,
+65355=>338,
+65356=>339,
+65357=>340,
+65358=>341,
+65359=>342,
+65360=>343,
+65361=>344,
+65362=>345,
+65363=>346,
+65364=>347,
+65365=>348,
+65366=>349,
+65367=>350,
+65368=>351,
+65369=>352,
+65370=>353,
+65371=>354,
+65372=>355,
+65373=>356,
+65507=>357,
+12593=>358,
+12594=>359,
+12595=>360,
+12596=>361,
+12597=>362,
+12598=>363,
+12599=>364,
+12600=>365,
+12601=>366,
+12602=>367,
+12603=>368,
+12604=>369,
+12605=>370,
+12606=>371,
+12607=>372,
+12608=>373,
+12609=>374,
+12610=>375,
+12611=>376,
+12612=>377,
+12613=>378,
+12614=>379,
+12615=>380,
+12616=>381,
+12617=>382,
+12618=>383,
+12619=>384,
+12620=>385,
+12621=>386,
+12622=>387,
+12623=>388,
+12624=>389,
+12625=>390,
+12626=>391,
+12627=>392,
+12628=>393,
+12629=>394,
+12630=>395,
+12631=>396,
+12632=>397,
+12633=>398,
+12634=>399,
+12635=>400,
+12636=>401,
+12637=>402,
+12638=>403,
+12639=>404,
+12640=>405,
+12641=>406,
+12642=>407,
+12643=>408,
+12645=>409,
+12646=>410,
+12647=>411,
+12648=>412,
+12649=>413,
+12650=>414,
+12651=>415,
+12652=>416,
+12653=>417,
+12654=>418,
+12655=>419,
+12656=>420,
+12657=>421,
+12658=>422,
+12659=>423,
+12660=>424,
+12661=>425,
+12662=>426,
+12663=>427,
+12664=>428,
+12665=>429,
+12666=>430,
+12667=>431,
+12668=>432,
+12669=>433,
+12670=>434,
+12671=>435,
+12672=>436,
+12673=>437,
+12674=>438,
+12675=>439,
+12676=>440,
+12677=>441,
+12678=>442,
+12679=>443,
+12680=>444,
+12681=>445,
+12682=>446,
+12683=>447,
+12684=>448,
+12685=>449,
+12686=>450,
+8560=>451,
+8561=>452,
+8562=>453,
+8563=>454,
+8564=>455,
+8565=>456,
+8566=>457,
+8567=>458,
+8568=>459,
+8569=>460,
+8544=>461,
+8545=>462,
+8546=>463,
+8547=>464,
+8548=>465,
+8549=>466,
+8550=>467,
+8551=>468,
+8552=>469,
+8553=>470,
+913=>471,
+914=>472,
+915=>473,
+916=>474,
+917=>475,
+918=>476,
+919=>477,
+920=>478,
+921=>479,
+922=>480,
+923=>481,
+924=>482,
+925=>483,
+926=>484,
+927=>485,
+928=>486,
+929=>487,
+931=>488,
+932=>489,
+933=>490,
+934=>491,
+935=>492,
+936=>493,
+937=>494,
+945=>495,
+946=>496,
+947=>497,
+948=>498,
+949=>499,
+950=>500,
+951=>501,
+952=>502,
+953=>503,
+954=>504,
+955=>505,
+956=>506,
+957=>507,
+958=>508,
+959=>509,
+960=>510,
+961=>511,
+963=>512,
+964=>513,
+965=>514,
+966=>515,
+967=>516,
+968=>517,
+969=>518,
+9472=>519,
+9474=>520,
+9484=>521,
+9488=>522,
+9496=>523,
+9492=>524,
+9500=>525,
+9516=>526,
+9508=>527,
+9524=>528,
+9532=>529,
+9473=>530,
+9475=>531,
+9487=>532,
+9491=>533,
+9499=>534,
+9495=>535,
+9507=>536,
+9523=>537,
+9515=>538,
+9531=>539,
+9547=>540,
+9504=>541,
+9519=>542,
+9512=>543,
+9527=>544,
+9535=>545,
+9501=>546,
+9520=>547,
+9509=>548,
+9528=>549,
+9538=>550,
+9490=>551,
+9489=>552,
+9498=>553,
+9497=>554,
+9494=>555,
+9493=>556,
+9486=>557,
+9485=>558,
+9502=>559,
+9503=>560,
+9505=>561,
+9506=>562,
+9510=>563,
+9511=>564,
+9513=>565,
+9514=>566,
+9517=>567,
+9518=>568,
+9521=>569,
+9522=>570,
+9525=>571,
+9526=>572,
+9529=>573,
+9530=>574,
+9533=>575,
+9534=>576,
+9536=>577,
+9537=>578,
+9539=>579,
+9540=>580,
+9541=>581,
+9542=>582,
+9543=>583,
+9544=>584,
+9545=>585,
+9546=>586,
+13205=>587,
+13206=>588,
+13207=>589,
+8467=>590,
+13208=>591,
+13252=>592,
+13219=>593,
+13220=>594,
+13221=>595,
+13222=>596,
+13209=>597,
+13210=>598,
+13211=>599,
+13212=>600,
+13213=>601,
+13214=>602,
+13215=>603,
+13216=>604,
+13217=>605,
+13218=>606,
+13258=>607,
+13197=>608,
+13198=>609,
+13199=>610,
+13263=>611,
+13192=>612,
+13193=>613,
+13256=>614,
+13223=>615,
+13224=>616,
+13232=>617,
+13233=>618,
+13234=>619,
+13235=>620,
+13236=>621,
+13237=>622,
+13238=>623,
+13239=>624,
+13240=>625,
+13241=>626,
+13184=>627,
+13185=>628,
+13186=>629,
+13187=>630,
+13188=>631,
+13242=>632,
+13243=>633,
+13244=>634,
+13245=>635,
+13246=>636,
+13247=>637,
+13200=>638,
+13201=>639,
+13202=>640,
+13203=>641,
+13204=>642,
+8486=>643,
+13248=>644,
+13249=>645,
+13194=>646,
+13195=>647,
+13196=>648,
+13270=>649,
+13253=>650,
+13229=>651,
+13230=>652,
+13231=>653,
+13275=>654,
+13225=>655,
+13226=>656,
+13227=>657,
+13228=>658,
+13277=>659,
+13264=>660,
+13267=>661,
+13251=>662,
+13257=>663,
+13276=>664,
+13254=>665,
+198=>666,
+208=>667,
+170=>668,
+294=>669,
+306=>670,
+319=>671,
+321=>672,
+216=>673,
+338=>674,
+186=>675,
+222=>676,
+358=>677,
+330=>678,
+12896=>679,
+12897=>680,
+12898=>681,
+12899=>682,
+12900=>683,
+12901=>684,
+12902=>685,
+12903=>686,
+12904=>687,
+12905=>688,
+12906=>689,
+12907=>690,
+12908=>691,
+12909=>692,
+12910=>693,
+12911=>694,
+12912=>695,
+12913=>696,
+12914=>697,
+12915=>698,
+12916=>699,
+12917=>700,
+12918=>701,
+12919=>702,
+12920=>703,
+12921=>704,
+12922=>705,
+12923=>706,
+9424=>707,
+9425=>708,
+9426=>709,
+9427=>710,
+9428=>711,
+9429=>712,
+9430=>713,
+9431=>714,
+9432=>715,
+9433=>716,
+9434=>717,
+9435=>718,
+9436=>719,
+9437=>720,
+9438=>721,
+9439=>722,
+9440=>723,
+9441=>724,
+9442=>725,
+9443=>726,
+9444=>727,
+9445=>728,
+9446=>729,
+9447=>730,
+9448=>731,
+9449=>732,
+9312=>733,
+9313=>734,
+9314=>735,
+9315=>736,
+9316=>737,
+9317=>738,
+9318=>739,
+9319=>740,
+9320=>741,
+9321=>742,
+9322=>743,
+9323=>744,
+9324=>745,
+9325=>746,
+9326=>747,
+189=>748,
+8531=>749,
+8532=>750,
+188=>751,
+190=>752,
+8539=>753,
+8540=>754,
+8541=>755,
+8542=>756,
+230=>757,
+273=>758,
+240=>759,
+295=>760,
+305=>761,
+307=>762,
+312=>763,
+320=>764,
+322=>765,
+248=>766,
+339=>767,
+223=>768,
+254=>769,
+359=>770,
+331=>771,
+329=>772,
+12800=>773,
+12801=>774,
+12802=>775,
+12803=>776,
+12804=>777,
+12805=>778,
+12806=>779,
+12807=>780,
+12808=>781,
+12809=>782,
+12810=>783,
+12811=>784,
+12812=>785,
+12813=>786,
+12814=>787,
+12815=>788,
+12816=>789,
+12817=>790,
+12818=>791,
+12819=>792,
+12820=>793,
+12821=>794,
+12822=>795,
+12823=>796,
+12824=>797,
+12825=>798,
+12826=>799,
+12827=>800,
+9372=>801,
+9373=>802,
+9374=>803,
+9375=>804,
+9376=>805,
+9377=>806,
+9378=>807,
+9379=>808,
+9380=>809,
+9381=>810,
+9382=>811,
+9383=>812,
+9384=>813,
+9385=>814,
+9386=>815,
+9387=>816,
+9388=>817,
+9389=>818,
+9390=>819,
+9391=>820,
+9392=>821,
+9393=>822,
+9394=>823,
+9395=>824,
+9396=>825,
+9397=>826,
+9332=>827,
+9333=>828,
+9334=>829,
+9335=>830,
+9336=>831,
+9337=>832,
+9338=>833,
+9339=>834,
+9340=>835,
+9341=>836,
+9342=>837,
+9343=>838,
+9344=>839,
+9345=>840,
+9346=>841,
+185=>842,
+178=>843,
+179=>844,
+8308=>845,
+8319=>846,
+8321=>847,
+8322=>848,
+8323=>849,
+8324=>850,
+12353=>851,
+12354=>852,
+12355=>853,
+12356=>854,
+12357=>855,
+12358=>856,
+12359=>857,
+12360=>858,
+12361=>859,
+12362=>860,
+12363=>861,
+12364=>862,
+12365=>863,
+12366=>864,
+12367=>865,
+12368=>866,
+12369=>867,
+12370=>868,
+12371=>869,
+12372=>870,
+12373=>871,
+12374=>872,
+12375=>873,
+12376=>874,
+12377=>875,
+12378=>876,
+12379=>877,
+12380=>878,
+12381=>879,
+12382=>880,
+12383=>881,
+12384=>882,
+12385=>883,
+12386=>884,
+12387=>885,
+12388=>886,
+12389=>887,
+12390=>888,
+12391=>889,
+12392=>890,
+12393=>891,
+12394=>892,
+12395=>893,
+12396=>894,
+12397=>895,
+12398=>896,
+12399=>897,
+12400=>898,
+12401=>899,
+12402=>900,
+12403=>901,
+12404=>902,
+12405=>903,
+12406=>904,
+12407=>905,
+12408=>906,
+12409=>907,
+12410=>908,
+12411=>909,
+12412=>910,
+12413=>911,
+12414=>912,
+12415=>913,
+12416=>914,
+12417=>915,
+12418=>916,
+12419=>917,
+12420=>918,
+12421=>919,
+12422=>920,
+12423=>921,
+12424=>922,
+12425=>923,
+12426=>924,
+12427=>925,
+12428=>926,
+12429=>927,
+12430=>928,
+12431=>929,
+12432=>930,
+12433=>931,
+12434=>932,
+12435=>933,
+12449=>934,
+12450=>935,
+12451=>936,
+12452=>937,
+12453=>938,
+12454=>939,
+12455=>940,
+12456=>941,
+12457=>942,
+12458=>943,
+12459=>944,
+12460=>945,
+12461=>946,
+12462=>947,
+12463=>948,
+12464=>949,
+12465=>950,
+12466=>951,
+12467=>952,
+12468=>953,
+12469=>954,
+12470=>955,
+12471=>956,
+12472=>957,
+12473=>958,
+12474=>959,
+12475=>960,
+12476=>961,
+12477=>962,
+12478=>963,
+12479=>964,
+12480=>965,
+12481=>966,
+12482=>967,
+12483=>968,
+12484=>969,
+12485=>970,
+12486=>971,
+12487=>972,
+12488=>973,
+12489=>974,
+12490=>975,
+12491=>976,
+12492=>977,
+12493=>978,
+12494=>979,
+12495=>980,
+12496=>981,
+12497=>982,
+12498=>983,
+12499=>984,
+12500=>985,
+12501=>986,
+12502=>987,
+12503=>988,
+12504=>989,
+12505=>990,
+12506=>991,
+12507=>992,
+12508=>993,
+12509=>994,
+12510=>995,
+12511=>996,
+12512=>997,
+12513=>998,
+12514=>999,
+12515=>1000,
+12516=>1001,
+12517=>1002,
+12518=>1003,
+12519=>1004,
+12520=>1005,
+12521=>1006,
+12522=>1007,
+12523=>1008,
+12524=>1009,
+12525=>1010,
+12526=>1011,
+12527=>1012,
+12528=>1013,
+12529=>1014,
+12530=>1015,
+12531=>1016,
+12532=>1017,
+12533=>1018,
+12534=>1019,
+1040=>1020,
+1041=>1021,
+1042=>1022,
+1043=>1023,
+1044=>1024,
+1045=>1025,
+1025=>1026,
+1046=>1027,
+1047=>1028,
+1048=>1029,
+1049=>1030,
+1050=>1031,
+1051=>1032,
+1052=>1033,
+1053=>1034,
+1054=>1035,
+1055=>1036,
+1056=>1037,
+1057=>1038,
+1058=>1039,
+1059=>1040,
+1060=>1041,
+1061=>1042,
+1062=>1043,
+1063=>1044,
+1064=>1045,
+1065=>1046,
+1066=>1047,
+1067=>1048,
+1068=>1049,
+1069=>1050,
+1070=>1051,
+1071=>1052,
+1072=>1053,
+1073=>1054,
+1074=>1055,
+1075=>1056,
+1076=>1057,
+1077=>1058,
+1105=>1059,
+1078=>1060,
+1079=>1061,
+1080=>1062,
+1081=>1063,
+1082=>1064,
+1083=>1065,
+1084=>1066,
+1085=>1067,
+1086=>1068,
+1087=>1069,
+1088=>1070,
+1089=>1071,
+1090=>1072,
+1091=>1073,
+1092=>1074,
+1093=>1075,
+1094=>1076,
+1095=>1077,
+1096=>1078,
+1097=>1079,
+1098=>1080,
+1099=>1081,
+1100=>1082,
+1101=>1083,
+1102=>1084,
+1103=>1085,
+44032=>1086,
+44033=>1087,
+44036=>1088,
+44039=>1089,
+44040=>1090,
+44041=>1091,
+44042=>1092,
+44048=>1093,
+44049=>1094,
+44050=>1095,
+44051=>1096,
+44052=>1097,
+44053=>1098,
+44054=>1099,
+44055=>1100,
+44057=>1101,
+44058=>1102,
+44059=>1103,
+44060=>1104,
+44061=>1105,
+44064=>1106,
+44068=>1107,
+44076=>1108,
+44077=>1109,
+44079=>1110,
+44080=>1111,
+44081=>1112,
+44088=>1113,
+44089=>1114,
+44092=>1115,
+44096=>1116,
+44107=>1117,
+44109=>1118,
+44116=>1119,
+44120=>1120,
+44124=>1121,
+44144=>1122,
+44145=>1123,
+44148=>1124,
+44151=>1125,
+44152=>1126,
+44154=>1127,
+44160=>1128,
+44161=>1129,
+44163=>1130,
+44164=>1131,
+44165=>1132,
+44166=>1133,
+44169=>1134,
+44170=>1135,
+44171=>1136,
+44172=>1137,
+44176=>1138,
+44180=>1139,
+44188=>1140,
+44189=>1141,
+44191=>1142,
+44192=>1143,
+44193=>1144,
+44200=>1145,
+44201=>1146,
+44202=>1147,
+44204=>1148,
+44207=>1149,
+44208=>1150,
+44216=>1151,
+44217=>1152,
+44219=>1153,
+44220=>1154,
+44221=>1155,
+44225=>1156,
+44228=>1157,
+44232=>1158,
+44236=>1159,
+44245=>1160,
+44247=>1161,
+44256=>1162,
+44257=>1163,
+44260=>1164,
+44263=>1165,
+44264=>1166,
+44266=>1167,
+44268=>1168,
+44271=>1169,
+44272=>1170,
+44273=>1171,
+44275=>1172,
+44277=>1173,
+44278=>1174,
+44284=>1175,
+44285=>1176,
+44288=>1177,
+44292=>1178,
+44294=>1179,
+44300=>1180,
+44301=>1181,
+44303=>1182,
+44305=>1183,
+44312=>1184,
+44316=>1185,
+44320=>1186,
+44329=>1187,
+44332=>1188,
+44333=>1189,
+44340=>1190,
+44341=>1191,
+44344=>1192,
+44348=>1193,
+44356=>1194,
+44357=>1195,
+44359=>1196,
+44361=>1197,
+44368=>1198,
+44372=>1199,
+44376=>1200,
+44385=>1201,
+44387=>1202,
+44396=>1203,
+44397=>1204,
+44400=>1205,
+44403=>1206,
+44404=>1207,
+44405=>1208,
+44406=>1209,
+44411=>1210,
+44412=>1211,
+44413=>1212,
+44415=>1213,
+44417=>1214,
+44418=>1215,
+44424=>1216,
+44425=>1217,
+44428=>1218,
+44432=>1219,
+44444=>1220,
+44445=>1221,
+44452=>1222,
+44471=>1223,
+44480=>1224,
+44481=>1225,
+44484=>1226,
+44488=>1227,
+44496=>1228,
+44497=>1229,
+44499=>1230,
+44508=>1231,
+44512=>1232,
+44516=>1233,
+44536=>1234,
+44537=>1235,
+44540=>1236,
+44543=>1237,
+44544=>1238,
+44545=>1239,
+44552=>1240,
+44553=>1241,
+44555=>1242,
+44557=>1243,
+44564=>1244,
+44592=>1245,
+44593=>1246,
+44596=>1247,
+44599=>1248,
+44600=>1249,
+44602=>1250,
+44608=>1251,
+44609=>1252,
+44611=>1253,
+44613=>1254,
+44614=>1255,
+44618=>1256,
+44620=>1257,
+44621=>1258,
+44622=>1259,
+44624=>1260,
+44628=>1261,
+44630=>1262,
+44636=>1263,
+44637=>1264,
+44639=>1265,
+44640=>1266,
+44641=>1267,
+44645=>1268,
+44648=>1269,
+44649=>1270,
+44652=>1271,
+44656=>1272,
+44664=>1273,
+44665=>1274,
+44667=>1275,
+44668=>1276,
+44669=>1277,
+44676=>1278,
+44677=>1279,
+44684=>1280,
+44732=>1281,
+44733=>1282,
+44734=>1283,
+44736=>1284,
+44740=>1285,
+44748=>1286,
+44749=>1287,
+44751=>1288,
+44752=>1289,
+44753=>1290,
+44760=>1291,
+44761=>1292,
+44764=>1293,
+44776=>1294,
+44779=>1295,
+44781=>1296,
+44788=>1297,
+44792=>1298,
+44796=>1299,
+44807=>1300,
+44808=>1301,
+44813=>1302,
+44816=>1303,
+44844=>1304,
+44845=>1305,
+44848=>1306,
+44850=>1307,
+44852=>1308,
+44860=>1309,
+44861=>1310,
+44863=>1311,
+44865=>1312,
+44866=>1313,
+44867=>1314,
+44872=>1315,
+44873=>1316,
+44880=>1317,
+44892=>1318,
+44893=>1319,
+44900=>1320,
+44901=>1321,
+44921=>1322,
+44928=>1323,
+44932=>1324,
+44936=>1325,
+44944=>1326,
+44945=>1327,
+44949=>1328,
+44956=>1329,
+44984=>1330,
+44985=>1331,
+44988=>1332,
+44992=>1333,
+44999=>1334,
+45000=>1335,
+45001=>1336,
+45003=>1337,
+45005=>1338,
+45006=>1339,
+45012=>1340,
+45020=>1341,
+45032=>1342,
+45033=>1343,
+45040=>1344,
+45041=>1345,
+45044=>1346,
+45048=>1347,
+45056=>1348,
+45057=>1349,
+45060=>1350,
+45068=>1351,
+45072=>1352,
+45076=>1353,
+45084=>1354,
+45085=>1355,
+45096=>1356,
+45124=>1357,
+45125=>1358,
+45128=>1359,
+45130=>1360,
+45132=>1361,
+45134=>1362,
+45139=>1363,
+45140=>1364,
+45141=>1365,
+45143=>1366,
+45145=>1367,
+45149=>1368,
+45180=>1369,
+45181=>1370,
+45184=>1371,
+45188=>1372,
+45196=>1373,
+45197=>1374,
+45199=>1375,
+45201=>1376,
+45208=>1377,
+45209=>1378,
+45210=>1379,
+45212=>1380,
+45215=>1381,
+45216=>1382,
+45217=>1383,
+45218=>1384,
+45224=>1385,
+45225=>1386,
+45227=>1387,
+45228=>1388,
+45229=>1389,
+45230=>1390,
+45231=>1391,
+45233=>1392,
+45235=>1393,
+45236=>1394,
+45237=>1395,
+45240=>1396,
+45244=>1397,
+45252=>1398,
+45253=>1399,
+45255=>1400,
+45256=>1401,
+45257=>1402,
+45264=>1403,
+45265=>1404,
+45268=>1405,
+45272=>1406,
+45280=>1407,
+45285=>1408,
+45320=>1409,
+45321=>1410,
+45323=>1411,
+45324=>1412,
+45328=>1413,
+45330=>1414,
+45331=>1415,
+45336=>1416,
+45337=>1417,
+45339=>1418,
+45340=>1419,
+45341=>1420,
+45347=>1421,
+45348=>1422,
+45349=>1423,
+45352=>1424,
+45356=>1425,
+45364=>1426,
+45365=>1427,
+45367=>1428,
+45368=>1429,
+45369=>1430,
+45376=>1431,
+45377=>1432,
+45380=>1433,
+45384=>1434,
+45392=>1435,
+45393=>1436,
+45396=>1437,
+45397=>1438,
+45400=>1439,
+45404=>1440,
+45408=>1441,
+45432=>1442,
+45433=>1443,
+45436=>1444,
+45440=>1445,
+45442=>1446,
+45448=>1447,
+45449=>1448,
+45451=>1449,
+45453=>1450,
+45458=>1451,
+45459=>1452,
+45460=>1453,
+45464=>1454,
+45468=>1455,
+45480=>1456,
+45516=>1457,
+45520=>1458,
+45524=>1459,
+45532=>1460,
+45533=>1461,
+45535=>1462,
+45544=>1463,
+45545=>1464,
+45548=>1465,
+45552=>1466,
+45561=>1467,
+45563=>1468,
+45565=>1469,
+45572=>1470,
+45573=>1471,
+45576=>1472,
+45579=>1473,
+45580=>1474,
+45588=>1475,
+45589=>1476,
+45591=>1477,
+45593=>1478,
+45600=>1479,
+45620=>1480,
+45628=>1481,
+45656=>1482,
+45660=>1483,
+45664=>1484,
+45672=>1485,
+45673=>1486,
+45684=>1487,
+45685=>1488,
+45692=>1489,
+45700=>1490,
+45701=>1491,
+45705=>1492,
+45712=>1493,
+45713=>1494,
+45716=>1495,
+45720=>1496,
+45721=>1497,
+45722=>1498,
+45728=>1499,
+45729=>1500,
+45731=>1501,
+45733=>1502,
+45734=>1503,
+45738=>1504,
+45740=>1505,
+45744=>1506,
+45748=>1507,
+45768=>1508,
+45769=>1509,
+45772=>1510,
+45776=>1511,
+45778=>1512,
+45784=>1513,
+45785=>1514,
+45787=>1515,
+45789=>1516,
+45794=>1517,
+45796=>1518,
+45797=>1519,
+45798=>1520,
+45800=>1521,
+45803=>1522,
+45804=>1523,
+45805=>1524,
+45806=>1525,
+45807=>1526,
+45811=>1527,
+45812=>1528,
+45813=>1529,
+45815=>1530,
+45816=>1531,
+45817=>1532,
+45818=>1533,
+45819=>1534,
+45823=>1535,
+45824=>1536,
+45825=>1537,
+45828=>1538,
+45832=>1539,
+45840=>1540,
+45841=>1541,
+45843=>1542,
+45844=>1543,
+45845=>1544,
+45852=>1545,
+45908=>1546,
+45909=>1547,
+45910=>1548,
+45912=>1549,
+45915=>1550,
+45916=>1551,
+45918=>1552,
+45919=>1553,
+45924=>1554,
+45925=>1555,
+45927=>1556,
+45929=>1557,
+45931=>1558,
+45934=>1559,
+45936=>1560,
+45937=>1561,
+45940=>1562,
+45944=>1563,
+45952=>1564,
+45953=>1565,
+45955=>1566,
+45956=>1567,
+45957=>1568,
+45964=>1569,
+45968=>1570,
+45972=>1571,
+45984=>1572,
+45985=>1573,
+45992=>1574,
+45996=>1575,
+46020=>1576,
+46021=>1577,
+46024=>1578,
+46027=>1579,
+46028=>1580,
+46030=>1581,
+46032=>1582,
+46036=>1583,
+46037=>1584,
+46039=>1585,
+46041=>1586,
+46043=>1587,
+46045=>1588,
+46048=>1589,
+46052=>1590,
+46056=>1591,
+46076=>1592,
+46096=>1593,
+46104=>1594,
+46108=>1595,
+46112=>1596,
+46120=>1597,
+46121=>1598,
+46123=>1599,
+46132=>1600,
+46160=>1601,
+46161=>1602,
+46164=>1603,
+46168=>1604,
+46176=>1605,
+46177=>1606,
+46179=>1607,
+46181=>1608,
+46188=>1609,
+46208=>1610,
+46216=>1611,
+46237=>1612,
+46244=>1613,
+46248=>1614,
+46252=>1615,
+46261=>1616,
+46263=>1617,
+46265=>1618,
+46272=>1619,
+46276=>1620,
+46280=>1621,
+46288=>1622,
+46293=>1623,
+46300=>1624,
+46301=>1625,
+46304=>1626,
+46307=>1627,
+46308=>1628,
+46310=>1629,
+46316=>1630,
+46317=>1631,
+46319=>1632,
+46321=>1633,
+46328=>1634,
+46356=>1635,
+46357=>1636,
+46360=>1637,
+46363=>1638,
+46364=>1639,
+46372=>1640,
+46373=>1641,
+46375=>1642,
+46376=>1643,
+46377=>1644,
+46378=>1645,
+46384=>1646,
+46385=>1647,
+46388=>1648,
+46392=>1649,
+46400=>1650,
+46401=>1651,
+46403=>1652,
+46404=>1653,
+46405=>1654,
+46411=>1655,
+46412=>1656,
+46413=>1657,
+46416=>1658,
+46420=>1659,
+46428=>1660,
+46429=>1661,
+46431=>1662,
+46432=>1663,
+46433=>1664,
+46496=>1665,
+46497=>1666,
+46500=>1667,
+46504=>1668,
+46506=>1669,
+46507=>1670,
+46512=>1671,
+46513=>1672,
+46515=>1673,
+46516=>1674,
+46517=>1675,
+46523=>1676,
+46524=>1677,
+46525=>1678,
+46528=>1679,
+46532=>1680,
+46540=>1681,
+46541=>1682,
+46543=>1683,
+46544=>1684,
+46545=>1685,
+46552=>1686,
+46572=>1687,
+46608=>1688,
+46609=>1689,
+46612=>1690,
+46616=>1691,
+46629=>1692,
+46636=>1693,
+46644=>1694,
+46664=>1695,
+46692=>1696,
+46696=>1697,
+46748=>1698,
+46749=>1699,
+46752=>1700,
+46756=>1701,
+46763=>1702,
+46764=>1703,
+46769=>1704,
+46804=>1705,
+46832=>1706,
+46836=>1707,
+46840=>1708,
+46848=>1709,
+46849=>1710,
+46853=>1711,
+46888=>1712,
+46889=>1713,
+46892=>1714,
+46895=>1715,
+46896=>1716,
+46904=>1717,
+46905=>1718,
+46907=>1719,
+46916=>1720,
+46920=>1721,
+46924=>1722,
+46932=>1723,
+46933=>1724,
+46944=>1725,
+46948=>1726,
+46952=>1727,
+46960=>1728,
+46961=>1729,
+46963=>1730,
+46965=>1731,
+46972=>1732,
+46973=>1733,
+46976=>1734,
+46980=>1735,
+46988=>1736,
+46989=>1737,
+46991=>1738,
+46992=>1739,
+46993=>1740,
+46994=>1741,
+46998=>1742,
+46999=>1743,
+47000=>1744,
+47001=>1745,
+47004=>1746,
+47008=>1747,
+47016=>1748,
+47017=>1749,
+47019=>1750,
+47020=>1751,
+47021=>1752,
+47028=>1753,
+47029=>1754,
+47032=>1755,
+47047=>1756,
+47049=>1757,
+47084=>1758,
+47085=>1759,
+47088=>1760,
+47092=>1761,
+47100=>1762,
+47101=>1763,
+47103=>1764,
+47104=>1765,
+47105=>1766,
+47111=>1767,
+47112=>1768,
+47113=>1769,
+47116=>1770,
+47120=>1771,
+47128=>1772,
+47129=>1773,
+47131=>1774,
+47133=>1775,
+47140=>1776,
+47141=>1777,
+47144=>1778,
+47148=>1779,
+47156=>1780,
+47157=>1781,
+47159=>1782,
+47160=>1783,
+47161=>1784,
+47168=>1785,
+47172=>1786,
+47185=>1787,
+47187=>1788,
+47196=>1789,
+47197=>1790,
+47200=>1791,
+47204=>1792,
+47212=>1793,
+47213=>1794,
+47215=>1795,
+47217=>1796,
+47224=>1797,
+47228=>1798,
+47245=>1799,
+47272=>1800,
+47280=>1801,
+47284=>1802,
+47288=>1803,
+47296=>1804,
+47297=>1805,
+47299=>1806,
+47301=>1807,
+47308=>1808,
+47312=>1809,
+47316=>1810,
+47325=>1811,
+47327=>1812,
+47329=>1813,
+47336=>1814,
+47337=>1815,
+47340=>1816,
+47344=>1817,
+47352=>1818,
+47353=>1819,
+47355=>1820,
+47357=>1821,
+47364=>1822,
+47384=>1823,
+47392=>1824,
+47420=>1825,
+47421=>1826,
+47424=>1827,
+47428=>1828,
+47436=>1829,
+47439=>1830,
+47441=>1831,
+47448=>1832,
+47449=>1833,
+47452=>1834,
+47456=>1835,
+47464=>1836,
+47465=>1837,
+47467=>1838,
+47469=>1839,
+47476=>1840,
+47477=>1841,
+47480=>1842,
+47484=>1843,
+47492=>1844,
+47493=>1845,
+47495=>1846,
+47497=>1847,
+47498=>1848,
+47501=>1849,
+47502=>1850,
+47532=>1851,
+47533=>1852,
+47536=>1853,
+47540=>1854,
+47548=>1855,
+47549=>1856,
+47551=>1857,
+47553=>1858,
+47560=>1859,
+47561=>1860,
+47564=>1861,
+47566=>1862,
+47567=>1863,
+47568=>1864,
+47569=>1865,
+47570=>1866,
+47576=>1867,
+47577=>1868,
+47579=>1869,
+47581=>1870,
+47582=>1871,
+47585=>1872,
+47587=>1873,
+47588=>1874,
+47589=>1875,
+47592=>1876,
+47596=>1877,
+47604=>1878,
+47605=>1879,
+47607=>1880,
+47608=>1881,
+47609=>1882,
+47610=>1883,
+47616=>1884,
+47617=>1885,
+47624=>1886,
+47637=>1887,
+47672=>1888,
+47673=>1889,
+47676=>1890,
+47680=>1891,
+47682=>1892,
+47688=>1893,
+47689=>1894,
+47691=>1895,
+47693=>1896,
+47694=>1897,
+47699=>1898,
+47700=>1899,
+47701=>1900,
+47704=>1901,
+47708=>1902,
+47716=>1903,
+47717=>1904,
+47719=>1905,
+47720=>1906,
+47721=>1907,
+47728=>1908,
+47729=>1909,
+47732=>1910,
+47736=>1911,
+47747=>1912,
+47748=>1913,
+47749=>1914,
+47751=>1915,
+47756=>1916,
+47784=>1917,
+47785=>1918,
+47787=>1919,
+47788=>1920,
+47792=>1921,
+47794=>1922,
+47800=>1923,
+47801=>1924,
+47803=>1925,
+47805=>1926,
+47812=>1927,
+47816=>1928,
+47832=>1929,
+47833=>1930,
+47868=>1931,
+47872=>1932,
+47876=>1933,
+47885=>1934,
+47887=>1935,
+47889=>1936,
+47896=>1937,
+47900=>1938,
+47904=>1939,
+47913=>1940,
+47915=>1941,
+47924=>1942,
+47925=>1943,
+47926=>1944,
+47928=>1945,
+47931=>1946,
+47932=>1947,
+47933=>1948,
+47934=>1949,
+47940=>1950,
+47941=>1951,
+47943=>1952,
+47945=>1953,
+47949=>1954,
+47951=>1955,
+47952=>1956,
+47956=>1957,
+47960=>1958,
+47969=>1959,
+47971=>1960,
+47980=>1961,
+48008=>1962,
+48012=>1963,
+48016=>1964,
+48036=>1965,
+48040=>1966,
+48044=>1967,
+48052=>1968,
+48055=>1969,
+48064=>1970,
+48068=>1971,
+48072=>1972,
+48080=>1973,
+48083=>1974,
+48120=>1975,
+48121=>1976,
+48124=>1977,
+48127=>1978,
+48128=>1979,
+48130=>1980,
+48136=>1981,
+48137=>1982,
+48139=>1983,
+48140=>1984,
+48141=>1985,
+48143=>1986,
+48145=>1987,
+48148=>1988,
+48149=>1989,
+48150=>1990,
+48151=>1991,
+48152=>1992,
+48155=>1993,
+48156=>1994,
+48157=>1995,
+48158=>1996,
+48159=>1997,
+48164=>1998,
+48165=>1999,
+48167=>2000,
+48169=>2001,
+48173=>2002,
+48176=>2003,
+48177=>2004,
+48180=>2005,
+48184=>2006,
+48192=>2007,
+48193=>2008,
+48195=>2009,
+48196=>2010,
+48197=>2011,
+48201=>2012,
+48204=>2013,
+48205=>2014,
+48208=>2015,
+48221=>2016,
+48260=>2017,
+48261=>2018,
+48264=>2019,
+48267=>2020,
+48268=>2021,
+48270=>2022,
+48276=>2023,
+48277=>2024,
+48279=>2025,
+48281=>2026,
+48282=>2027,
+48288=>2028,
+48289=>2029,
+48292=>2030,
+48295=>2031,
+48296=>2032,
+48304=>2033,
+48305=>2034,
+48307=>2035,
+48308=>2036,
+48309=>2037,
+48316=>2038,
+48317=>2039,
+48320=>2040,
+48324=>2041,
+48333=>2042,
+48335=>2043,
+48336=>2044,
+48337=>2045,
+48341=>2046,
+48344=>2047,
+48348=>2048,
+48372=>2049,
+48373=>2050,
+48374=>2051,
+48376=>2052,
+48380=>2053,
+48388=>2054,
+48389=>2055,
+48391=>2056,
+48393=>2057,
+48400=>2058,
+48404=>2059,
+48420=>2060,
+48428=>2061,
+48448=>2062,
+48456=>2063,
+48457=>2064,
+48460=>2065,
+48464=>2066,
+48472=>2067,
+48473=>2068,
+48484=>2069,
+48488=>2070,
+48512=>2071,
+48513=>2072,
+48516=>2073,
+48519=>2074,
+48520=>2075,
+48521=>2076,
+48522=>2077,
+48528=>2078,
+48529=>2079,
+48531=>2080,
+48533=>2081,
+48537=>2082,
+48538=>2083,
+48540=>2084,
+48548=>2085,
+48560=>2086,
+48568=>2087,
+48596=>2088,
+48597=>2089,
+48600=>2090,
+48604=>2091,
+48617=>2092,
+48624=>2093,
+48628=>2094,
+48632=>2095,
+48640=>2096,
+48643=>2097,
+48645=>2098,
+48652=>2099,
+48653=>2100,
+48656=>2101,
+48660=>2102,
+48668=>2103,
+48669=>2104,
+48671=>2105,
+48708=>2106,
+48709=>2107,
+48712=>2108,
+48716=>2109,
+48718=>2110,
+48724=>2111,
+48725=>2112,
+48727=>2113,
+48729=>2114,
+48730=>2115,
+48731=>2116,
+48736=>2117,
+48737=>2118,
+48740=>2119,
+48744=>2120,
+48746=>2121,
+48752=>2122,
+48753=>2123,
+48755=>2124,
+48756=>2125,
+48757=>2126,
+48763=>2127,
+48764=>2128,
+48765=>2129,
+48768=>2130,
+48772=>2131,
+48780=>2132,
+48781=>2133,
+48783=>2134,
+48784=>2135,
+48785=>2136,
+48792=>2137,
+48793=>2138,
+48808=>2139,
+48848=>2140,
+48849=>2141,
+48852=>2142,
+48855=>2143,
+48856=>2144,
+48864=>2145,
+48867=>2146,
+48868=>2147,
+48869=>2148,
+48876=>2149,
+48897=>2150,
+48904=>2151,
+48905=>2152,
+48920=>2153,
+48921=>2154,
+48923=>2155,
+48924=>2156,
+48925=>2157,
+48960=>2158,
+48961=>2159,
+48964=>2160,
+48968=>2161,
+48976=>2162,
+48977=>2163,
+48981=>2164,
+49044=>2165,
+49072=>2166,
+49093=>2167,
+49100=>2168,
+49101=>2169,
+49104=>2170,
+49108=>2171,
+49116=>2172,
+49119=>2173,
+49121=>2174,
+49212=>2175,
+49233=>2176,
+49240=>2177,
+49244=>2178,
+49248=>2179,
+49256=>2180,
+49257=>2181,
+49296=>2182,
+49297=>2183,
+49300=>2184,
+49304=>2185,
+49312=>2186,
+49313=>2187,
+49315=>2188,
+49317=>2189,
+49324=>2190,
+49325=>2191,
+49327=>2192,
+49328=>2193,
+49331=>2194,
+49332=>2195,
+49333=>2196,
+49334=>2197,
+49340=>2198,
+49341=>2199,
+49343=>2200,
+49344=>2201,
+49345=>2202,
+49349=>2203,
+49352=>2204,
+49353=>2205,
+49356=>2206,
+49360=>2207,
+49368=>2208,
+49369=>2209,
+49371=>2210,
+49372=>2211,
+49373=>2212,
+49380=>2213,
+49381=>2214,
+49384=>2215,
+49388=>2216,
+49396=>2217,
+49397=>2218,
+49399=>2219,
+49401=>2220,
+49408=>2221,
+49412=>2222,
+49416=>2223,
+49424=>2224,
+49429=>2225,
+49436=>2226,
+49437=>2227,
+49438=>2228,
+49439=>2229,
+49440=>2230,
+49443=>2231,
+49444=>2232,
+49446=>2233,
+49447=>2234,
+49452=>2235,
+49453=>2236,
+49455=>2237,
+49456=>2238,
+49457=>2239,
+49462=>2240,
+49464=>2241,
+49465=>2242,
+49468=>2243,
+49472=>2244,
+49480=>2245,
+49481=>2246,
+49483=>2247,
+49484=>2248,
+49485=>2249,
+49492=>2250,
+49493=>2251,
+49496=>2252,
+49500=>2253,
+49508=>2254,
+49509=>2255,
+49511=>2256,
+49512=>2257,
+49513=>2258,
+49520=>2259,
+49524=>2260,
+49528=>2261,
+49541=>2262,
+49548=>2263,
+49549=>2264,
+49550=>2265,
+49552=>2266,
+49556=>2267,
+49558=>2268,
+49564=>2269,
+49565=>2270,
+49567=>2271,
+49569=>2272,
+49573=>2273,
+49576=>2274,
+49577=>2275,
+49580=>2276,
+49584=>2277,
+49597=>2278,
+49604=>2279,
+49608=>2280,
+49612=>2281,
+49620=>2282,
+49623=>2283,
+49624=>2284,
+49632=>2285,
+49636=>2286,
+49640=>2287,
+49648=>2288,
+49649=>2289,
+49651=>2290,
+49660=>2291,
+49661=>2292,
+49664=>2293,
+49668=>2294,
+49676=>2295,
+49677=>2296,
+49679=>2297,
+49681=>2298,
+49688=>2299,
+49689=>2300,
+49692=>2301,
+49695=>2302,
+49696=>2303,
+49704=>2304,
+49705=>2305,
+49707=>2306,
+49709=>2307,
+49711=>2308,
+49713=>2309,
+49714=>2310,
+49716=>2311,
+49736=>2312,
+49744=>2313,
+49745=>2314,
+49748=>2315,
+49752=>2316,
+49760=>2317,
+49765=>2318,
+49772=>2319,
+49773=>2320,
+49776=>2321,
+49780=>2322,
+49788=>2323,
+49789=>2324,
+49791=>2325,
+49793=>2326,
+49800=>2327,
+49801=>2328,
+49808=>2329,
+49816=>2330,
+49819=>2331,
+49821=>2332,
+49828=>2333,
+49829=>2334,
+49832=>2335,
+49836=>2336,
+49837=>2337,
+49844=>2338,
+49845=>2339,
+49847=>2340,
+49849=>2341,
+49884=>2342,
+49885=>2343,
+49888=>2344,
+49891=>2345,
+49892=>2346,
+49899=>2347,
+49900=>2348,
+49901=>2349,
+49903=>2350,
+49905=>2351,
+49910=>2352,
+49912=>2353,
+49913=>2354,
+49915=>2355,
+49916=>2356,
+49920=>2357,
+49928=>2358,
+49929=>2359,
+49932=>2360,
+49933=>2361,
+49939=>2362,
+49940=>2363,
+49941=>2364,
+49944=>2365,
+49948=>2366,
+49956=>2367,
+49957=>2368,
+49960=>2369,
+49961=>2370,
+49989=>2371,
+50024=>2372,
+50025=>2373,
+50028=>2374,
+50032=>2375,
+50034=>2376,
+50040=>2377,
+50041=>2378,
+50044=>2379,
+50045=>2380,
+50052=>2381,
+50056=>2382,
+50060=>2383,
+50112=>2384,
+50136=>2385,
+50137=>2386,
+50140=>2387,
+50143=>2388,
+50144=>2389,
+50146=>2390,
+50152=>2391,
+50153=>2392,
+50157=>2393,
+50164=>2394,
+50165=>2395,
+50168=>2396,
+50184=>2397,
+50192=>2398,
+50212=>2399,
+50220=>2400,
+50224=>2401,
+50228=>2402,
+50236=>2403,
+50237=>2404,
+50248=>2405,
+50276=>2406,
+50277=>2407,
+50280=>2408,
+50284=>2409,
+50292=>2410,
+50293=>2411,
+50297=>2412,
+50304=>2413,
+50324=>2414,
+50332=>2415,
+50360=>2416,
+50364=>2417,
+50409=>2418,
+50416=>2419,
+50417=>2420,
+50420=>2421,
+50424=>2422,
+50426=>2423,
+50431=>2424,
+50432=>2425,
+50433=>2426,
+50444=>2427,
+50448=>2428,
+50452=>2429,
+50460=>2430,
+50472=>2431,
+50473=>2432,
+50476=>2433,
+50480=>2434,
+50488=>2435,
+50489=>2436,
+50491=>2437,
+50493=>2438,
+50500=>2439,
+50501=>2440,
+50504=>2441,
+50505=>2442,
+50506=>2443,
+50508=>2444,
+50509=>2445,
+50510=>2446,
+50515=>2447,
+50516=>2448,
+50517=>2449,
+50519=>2450,
+50520=>2451,
+50521=>2452,
+50525=>2453,
+50526=>2454,
+50528=>2455,
+50529=>2456,
+50532=>2457,
+50536=>2458,
+50544=>2459,
+50545=>2460,
+50547=>2461,
+50548=>2462,
+50549=>2463,
+50556=>2464,
+50557=>2465,
+50560=>2466,
+50564=>2467,
+50567=>2468,
+50572=>2469,
+50573=>2470,
+50575=>2471,
+50577=>2472,
+50581=>2473,
+50583=>2474,
+50584=>2475,
+50588=>2476,
+50592=>2477,
+50601=>2478,
+50612=>2479,
+50613=>2480,
+50616=>2481,
+50617=>2482,
+50619=>2483,
+50620=>2484,
+50621=>2485,
+50622=>2486,
+50628=>2487,
+50629=>2488,
+50630=>2489,
+50631=>2490,
+50632=>2491,
+50633=>2492,
+50634=>2493,
+50636=>2494,
+50638=>2495,
+50640=>2496,
+50641=>2497,
+50644=>2498,
+50648=>2499,
+50656=>2500,
+50657=>2501,
+50659=>2502,
+50661=>2503,
+50668=>2504,
+50669=>2505,
+50670=>2506,
+50672=>2507,
+50676=>2508,
+50678=>2509,
+50679=>2510,
+50684=>2511,
+50685=>2512,
+50686=>2513,
+50687=>2514,
+50688=>2515,
+50689=>2516,
+50693=>2517,
+50694=>2518,
+50695=>2519,
+50696=>2520,
+50700=>2521,
+50704=>2522,
+50712=>2523,
+50713=>2524,
+50715=>2525,
+50716=>2526,
+50724=>2527,
+50725=>2528,
+50728=>2529,
+50732=>2530,
+50733=>2531,
+50734=>2532,
+50736=>2533,
+50739=>2534,
+50740=>2535,
+50741=>2536,
+50743=>2537,
+50745=>2538,
+50747=>2539,
+50752=>2540,
+50753=>2541,
+50756=>2542,
+50760=>2543,
+50768=>2544,
+50769=>2545,
+50771=>2546,
+50772=>2547,
+50773=>2548,
+50780=>2549,
+50781=>2550,
+50784=>2551,
+50796=>2552,
+50799=>2553,
+50801=>2554,
+50808=>2555,
+50809=>2556,
+50812=>2557,
+50816=>2558,
+50824=>2559,
+50825=>2560,
+50827=>2561,
+50829=>2562,
+50836=>2563,
+50837=>2564,
+50840=>2565,
+50844=>2566,
+50852=>2567,
+50853=>2568,
+50855=>2569,
+50857=>2570,
+50864=>2571,
+50865=>2572,
+50868=>2573,
+50872=>2574,
+50873=>2575,
+50874=>2576,
+50880=>2577,
+50881=>2578,
+50883=>2579,
+50885=>2580,
+50892=>2581,
+50893=>2582,
+50896=>2583,
+50900=>2584,
+50908=>2585,
+50909=>2586,
+50912=>2587,
+50913=>2588,
+50920=>2589,
+50921=>2590,
+50924=>2591,
+50928=>2592,
+50936=>2593,
+50937=>2594,
+50941=>2595,
+50948=>2596,
+50949=>2597,
+50952=>2598,
+50956=>2599,
+50964=>2600,
+50965=>2601,
+50967=>2602,
+50969=>2603,
+50976=>2604,
+50977=>2605,
+50980=>2606,
+50984=>2607,
+50992=>2608,
+50993=>2609,
+50995=>2610,
+50997=>2611,
+50999=>2612,
+51004=>2613,
+51005=>2614,
+51008=>2615,
+51012=>2616,
+51018=>2617,
+51020=>2618,
+51021=>2619,
+51023=>2620,
+51025=>2621,
+51026=>2622,
+51027=>2623,
+51028=>2624,
+51029=>2625,
+51030=>2626,
+51031=>2627,
+51032=>2628,
+51036=>2629,
+51040=>2630,
+51048=>2631,
+51051=>2632,
+51060=>2633,
+51061=>2634,
+51064=>2635,
+51068=>2636,
+51069=>2637,
+51070=>2638,
+51075=>2639,
+51076=>2640,
+51077=>2641,
+51079=>2642,
+51080=>2643,
+51081=>2644,
+51082=>2645,
+51086=>2646,
+51088=>2647,
+51089=>2648,
+51092=>2649,
+51094=>2650,
+51095=>2651,
+51096=>2652,
+51098=>2653,
+51104=>2654,
+51105=>2655,
+51107=>2656,
+51108=>2657,
+51109=>2658,
+51110=>2659,
+51116=>2660,
+51117=>2661,
+51120=>2662,
+51124=>2663,
+51132=>2664,
+51133=>2665,
+51135=>2666,
+51136=>2667,
+51137=>2668,
+51144=>2669,
+51145=>2670,
+51148=>2671,
+51150=>2672,
+51152=>2673,
+51160=>2674,
+51165=>2675,
+51172=>2676,
+51176=>2677,
+51180=>2678,
+51200=>2679,
+51201=>2680,
+51204=>2681,
+51208=>2682,
+51210=>2683,
+51216=>2684,
+51217=>2685,
+51219=>2686,
+51221=>2687,
+51222=>2688,
+51228=>2689,
+51229=>2690,
+51232=>2691,
+51236=>2692,
+51244=>2693,
+51245=>2694,
+51247=>2695,
+51249=>2696,
+51256=>2697,
+51260=>2698,
+51264=>2699,
+51272=>2700,
+51273=>2701,
+51276=>2702,
+51277=>2703,
+51284=>2704,
+51312=>2705,
+51313=>2706,
+51316=>2707,
+51320=>2708,
+51322=>2709,
+51328=>2710,
+51329=>2711,
+51331=>2712,
+51333=>2713,
+51334=>2714,
+51335=>2715,
+51339=>2716,
+51340=>2717,
+51341=>2718,
+51348=>2719,
+51357=>2720,
+51359=>2721,
+51361=>2722,
+51368=>2723,
+51388=>2724,
+51389=>2725,
+51396=>2726,
+51400=>2727,
+51404=>2728,
+51412=>2729,
+51413=>2730,
+51415=>2731,
+51417=>2732,
+51424=>2733,
+51425=>2734,
+51428=>2735,
+51445=>2736,
+51452=>2737,
+51453=>2738,
+51456=>2739,
+51460=>2740,
+51461=>2741,
+51462=>2742,
+51468=>2743,
+51469=>2744,
+51471=>2745,
+51473=>2746,
+51480=>2747,
+51500=>2748,
+51508=>2749,
+51536=>2750,
+51537=>2751,
+51540=>2752,
+51544=>2753,
+51552=>2754,
+51553=>2755,
+51555=>2756,
+51564=>2757,
+51568=>2758,
+51572=>2759,
+51580=>2760,
+51592=>2761,
+51593=>2762,
+51596=>2763,
+51600=>2764,
+51608=>2765,
+51609=>2766,
+51611=>2767,
+51613=>2768,
+51648=>2769,
+51649=>2770,
+51652=>2771,
+51655=>2772,
+51656=>2773,
+51658=>2774,
+51664=>2775,
+51665=>2776,
+51667=>2777,
+51669=>2778,
+51670=>2779,
+51673=>2780,
+51674=>2781,
+51676=>2782,
+51677=>2783,
+51680=>2784,
+51682=>2785,
+51684=>2786,
+51687=>2787,
+51692=>2788,
+51693=>2789,
+51695=>2790,
+51696=>2791,
+51697=>2792,
+51704=>2793,
+51705=>2794,
+51708=>2795,
+51712=>2796,
+51720=>2797,
+51721=>2798,
+51723=>2799,
+51724=>2800,
+51725=>2801,
+51732=>2802,
+51736=>2803,
+51753=>2804,
+51788=>2805,
+51789=>2806,
+51792=>2807,
+51796=>2808,
+51804=>2809,
+51805=>2810,
+51807=>2811,
+51808=>2812,
+51809=>2813,
+51816=>2814,
+51837=>2815,
+51844=>2816,
+51864=>2817,
+51900=>2818,
+51901=>2819,
+51904=>2820,
+51908=>2821,
+51916=>2822,
+51917=>2823,
+51919=>2824,
+51921=>2825,
+51923=>2826,
+51928=>2827,
+51929=>2828,
+51936=>2829,
+51948=>2830,
+51956=>2831,
+51976=>2832,
+51984=>2833,
+51988=>2834,
+51992=>2835,
+52000=>2836,
+52001=>2837,
+52033=>2838,
+52040=>2839,
+52041=>2840,
+52044=>2841,
+52048=>2842,
+52056=>2843,
+52057=>2844,
+52061=>2845,
+52068=>2846,
+52088=>2847,
+52089=>2848,
+52124=>2849,
+52152=>2850,
+52180=>2851,
+52196=>2852,
+52199=>2853,
+52201=>2854,
+52236=>2855,
+52237=>2856,
+52240=>2857,
+52244=>2858,
+52252=>2859,
+52253=>2860,
+52257=>2861,
+52258=>2862,
+52263=>2863,
+52264=>2864,
+52265=>2865,
+52268=>2866,
+52270=>2867,
+52272=>2868,
+52280=>2869,
+52281=>2870,
+52283=>2871,
+52284=>2872,
+52285=>2873,
+52286=>2874,
+52292=>2875,
+52293=>2876,
+52296=>2877,
+52300=>2878,
+52308=>2879,
+52309=>2880,
+52311=>2881,
+52312=>2882,
+52313=>2883,
+52320=>2884,
+52324=>2885,
+52326=>2886,
+52328=>2887,
+52336=>2888,
+52341=>2889,
+52376=>2890,
+52377=>2891,
+52380=>2892,
+52384=>2893,
+52392=>2894,
+52393=>2895,
+52395=>2896,
+52396=>2897,
+52397=>2898,
+52404=>2899,
+52405=>2900,
+52408=>2901,
+52412=>2902,
+52420=>2903,
+52421=>2904,
+52423=>2905,
+52425=>2906,
+52432=>2907,
+52436=>2908,
+52452=>2909,
+52460=>2910,
+52464=>2911,
+52481=>2912,
+52488=>2913,
+52489=>2914,
+52492=>2915,
+52496=>2916,
+52504=>2917,
+52505=>2918,
+52507=>2919,
+52509=>2920,
+52516=>2921,
+52520=>2922,
+52524=>2923,
+52537=>2924,
+52572=>2925,
+52576=>2926,
+52580=>2927,
+52588=>2928,
+52589=>2929,
+52591=>2930,
+52593=>2931,
+52600=>2932,
+52616=>2933,
+52628=>2934,
+52629=>2935,
+52632=>2936,
+52636=>2937,
+52644=>2938,
+52645=>2939,
+52647=>2940,
+52649=>2941,
+52656=>2942,
+52676=>2943,
+52684=>2944,
+52688=>2945,
+52712=>2946,
+52716=>2947,
+52720=>2948,
+52728=>2949,
+52729=>2950,
+52731=>2951,
+52733=>2952,
+52740=>2953,
+52744=>2954,
+52748=>2955,
+52756=>2956,
+52761=>2957,
+52768=>2958,
+52769=>2959,
+52772=>2960,
+52776=>2961,
+52784=>2962,
+52785=>2963,
+52787=>2964,
+52789=>2965,
+52824=>2966,
+52825=>2967,
+52828=>2968,
+52831=>2969,
+52832=>2970,
+52833=>2971,
+52840=>2972,
+52841=>2973,
+52843=>2974,
+52845=>2975,
+52852=>2976,
+52853=>2977,
+52856=>2978,
+52860=>2979,
+52868=>2980,
+52869=>2981,
+52871=>2982,
+52873=>2983,
+52880=>2984,
+52881=>2985,
+52884=>2986,
+52888=>2987,
+52896=>2988,
+52897=>2989,
+52899=>2990,
+52900=>2991,
+52901=>2992,
+52908=>2993,
+52909=>2994,
+52929=>2995,
+52964=>2996,
+52965=>2997,
+52968=>2998,
+52971=>2999,
+52972=>3000,
+52980=>3001,
+52981=>3002,
+52983=>3003,
+52984=>3004,
+52985=>3005,
+52992=>3006,
+52993=>3007,
+52996=>3008,
+53000=>3009,
+53008=>3010,
+53009=>3011,
+53011=>3012,
+53013=>3013,
+53020=>3014,
+53024=>3015,
+53028=>3016,
+53036=>3017,
+53037=>3018,
+53039=>3019,
+53040=>3020,
+53041=>3021,
+53048=>3022,
+53076=>3023,
+53077=>3024,
+53080=>3025,
+53084=>3026,
+53092=>3027,
+53093=>3028,
+53095=>3029,
+53097=>3030,
+53104=>3031,
+53105=>3032,
+53108=>3033,
+53112=>3034,
+53120=>3035,
+53125=>3036,
+53132=>3037,
+53153=>3038,
+53160=>3039,
+53168=>3040,
+53188=>3041,
+53216=>3042,
+53217=>3043,
+53220=>3044,
+53224=>3045,
+53232=>3046,
+53233=>3047,
+53235=>3048,
+53237=>3049,
+53244=>3050,
+53248=>3051,
+53252=>3052,
+53265=>3053,
+53272=>3054,
+53293=>3055,
+53300=>3056,
+53301=>3057,
+53304=>3058,
+53308=>3059,
+53316=>3060,
+53317=>3061,
+53319=>3062,
+53321=>3063,
+53328=>3064,
+53332=>3065,
+53336=>3066,
+53344=>3067,
+53356=>3068,
+53357=>3069,
+53360=>3070,
+53364=>3071,
+53372=>3072,
+53373=>3073,
+53377=>3074,
+53412=>3075,
+53413=>3076,
+53416=>3077,
+53420=>3078,
+53428=>3079,
+53429=>3080,
+53431=>3081,
+53433=>3082,
+53440=>3083,
+53441=>3084,
+53444=>3085,
+53448=>3086,
+53449=>3087,
+53456=>3088,
+53457=>3089,
+53459=>3090,
+53460=>3091,
+53461=>3092,
+53468=>3093,
+53469=>3094,
+53472=>3095,
+53476=>3096,
+53484=>3097,
+53485=>3098,
+53487=>3099,
+53488=>3100,
+53489=>3101,
+53496=>3102,
+53517=>3103,
+53552=>3104,
+53553=>3105,
+53556=>3106,
+53560=>3107,
+53562=>3108,
+53568=>3109,
+53569=>3110,
+53571=>3111,
+53572=>3112,
+53573=>3113,
+53580=>3114,
+53581=>3115,
+53584=>3116,
+53588=>3117,
+53596=>3118,
+53597=>3119,
+53599=>3120,
+53601=>3121,
+53608=>3122,
+53612=>3123,
+53628=>3124,
+53636=>3125,
+53640=>3126,
+53664=>3127,
+53665=>3128,
+53668=>3129,
+53672=>3130,
+53680=>3131,
+53681=>3132,
+53683=>3133,
+53685=>3134,
+53690=>3135,
+53692=>3136,
+53696=>3137,
+53720=>3138,
+53748=>3139,
+53752=>3140,
+53767=>3141,
+53769=>3142,
+53776=>3143,
+53804=>3144,
+53805=>3145,
+53808=>3146,
+53812=>3147,
+53820=>3148,
+53821=>3149,
+53823=>3150,
+53825=>3151,
+53832=>3152,
+53852=>3153,
+53860=>3154,
+53888=>3155,
+53889=>3156,
+53892=>3157,
+53896=>3158,
+53904=>3159,
+53905=>3160,
+53909=>3161,
+53916=>3162,
+53920=>3163,
+53924=>3164,
+53932=>3165,
+53937=>3166,
+53944=>3167,
+53945=>3168,
+53948=>3169,
+53951=>3170,
+53952=>3171,
+53954=>3172,
+53960=>3173,
+53961=>3174,
+53963=>3175,
+53972=>3176,
+53976=>3177,
+53980=>3178,
+53988=>3179,
+53989=>3180,
+54000=>3181,
+54001=>3182,
+54004=>3183,
+54008=>3184,
+54016=>3185,
+54017=>3186,
+54019=>3187,
+54021=>3188,
+54028=>3189,
+54029=>3190,
+54030=>3191,
+54032=>3192,
+54036=>3193,
+54038=>3194,
+54044=>3195,
+54045=>3196,
+54047=>3197,
+54048=>3198,
+54049=>3199,
+54053=>3200,
+54056=>3201,
+54057=>3202,
+54060=>3203,
+54064=>3204,
+54072=>3205,
+54073=>3206,
+54075=>3207,
+54076=>3208,
+54077=>3209,
+54084=>3210,
+54085=>3211,
+54140=>3212,
+54141=>3213,
+54144=>3214,
+54148=>3215,
+54156=>3216,
+54157=>3217,
+54159=>3218,
+54160=>3219,
+54161=>3220,
+54168=>3221,
+54169=>3222,
+54172=>3223,
+54176=>3224,
+54184=>3225,
+54185=>3226,
+54187=>3227,
+54189=>3228,
+54196=>3229,
+54200=>3230,
+54204=>3231,
+54212=>3232,
+54213=>3233,
+54216=>3234,
+54217=>3235,
+54224=>3236,
+54232=>3237,
+54241=>3238,
+54243=>3239,
+54252=>3240,
+54253=>3241,
+54256=>3242,
+54260=>3243,
+54268=>3244,
+54269=>3245,
+54271=>3246,
+54273=>3247,
+54280=>3248,
+54301=>3249,
+54336=>3250,
+54340=>3251,
+54364=>3252,
+54368=>3253,
+54372=>3254,
+54381=>3255,
+54383=>3256,
+54392=>3257,
+54393=>3258,
+54396=>3259,
+54399=>3260,
+54400=>3261,
+54402=>3262,
+54408=>3263,
+54409=>3264,
+54411=>3265,
+54413=>3266,
+54420=>3267,
+54441=>3268,
+54476=>3269,
+54480=>3270,
+54484=>3271,
+54492=>3272,
+54495=>3273,
+54504=>3274,
+54508=>3275,
+54512=>3276,
+54520=>3277,
+54523=>3278,
+54525=>3279,
+54532=>3280,
+54536=>3281,
+54540=>3282,
+54548=>3283,
+54549=>3284,
+54551=>3285,
+54588=>3286,
+54589=>3287,
+54592=>3288,
+54596=>3289,
+54604=>3290,
+54605=>3291,
+54607=>3292,
+54609=>3293,
+54616=>3294,
+54617=>3295,
+54620=>3296,
+54624=>3297,
+54629=>3298,
+54632=>3299,
+54633=>3300,
+54635=>3301,
+54637=>3302,
+54644=>3303,
+54645=>3304,
+54648=>3305,
+54652=>3306,
+54660=>3307,
+54661=>3308,
+54663=>3309,
+54664=>3310,
+54665=>3311,
+54672=>3312,
+54693=>3313,
+54728=>3314,
+54729=>3315,
+54732=>3316,
+54736=>3317,
+54738=>3318,
+54744=>3319,
+54745=>3320,
+54747=>3321,
+54749=>3322,
+54756=>3323,
+54757=>3324,
+54760=>3325,
+54764=>3326,
+54772=>3327,
+54773=>3328,
+54775=>3329,
+54777=>3330,
+54784=>3331,
+54785=>3332,
+54788=>3333,
+54792=>3334,
+54800=>3335,
+54801=>3336,
+54803=>3337,
+54804=>3338,
+54805=>3339,
+54812=>3340,
+54816=>3341,
+54820=>3342,
+54829=>3343,
+54840=>3344,
+54841=>3345,
+54844=>3346,
+54848=>3347,
+54853=>3348,
+54856=>3349,
+54857=>3350,
+54859=>3351,
+54861=>3352,
+54865=>3353,
+54868=>3354,
+54869=>3355,
+54872=>3356,
+54876=>3357,
+54887=>3358,
+54889=>3359,
+54896=>3360,
+54897=>3361,
+54900=>3362,
+54915=>3363,
+54917=>3364,
+54924=>3365,
+54925=>3366,
+54928=>3367,
+54932=>3368,
+54941=>3369,
+54943=>3370,
+54945=>3371,
+54952=>3372,
+54956=>3373,
+54960=>3374,
+54969=>3375,
+54971=>3376,
+54980=>3377,
+54981=>3378,
+54984=>3379,
+54988=>3380,
+54993=>3381,
+54996=>3382,
+54999=>3383,
+55001=>3384,
+55008=>3385,
+55012=>3386,
+55016=>3387,
+55024=>3388,
+55029=>3389,
+55036=>3390,
+55037=>3391,
+55040=>3392,
+55044=>3393,
+55057=>3394,
+55064=>3395,
+55065=>3396,
+55068=>3397,
+55072=>3398,
+55080=>3399,
+55081=>3400,
+55083=>3401,
+55085=>3402,
+55092=>3403,
+55093=>3404,
+55096=>3405,
+55100=>3406,
+55108=>3407,
+55111=>3408,
+55113=>3409,
+55120=>3410,
+55121=>3411,
+55124=>3412,
+55126=>3413,
+55127=>3414,
+55128=>3415,
+55129=>3416,
+55136=>3417,
+55137=>3418,
+55139=>3419,
+55141=>3420,
+55145=>3421,
+55148=>3422,
+55152=>3423,
+55156=>3424,
+55164=>3425,
+55165=>3426,
+55169=>3427,
+55176=>3428,
+55177=>3429,
+55180=>3430,
+55184=>3431,
+55192=>3432,
+55193=>3433,
+55195=>3434,
+55197=>3435,
+20285=>3436,
+20339=>3437,
+20551=>3438,
+20729=>3439,
+21152=>3440,
+21487=>3441,
+21621=>3442,
+21733=>3443,
+22025=>3444,
+23233=>3445,
+23478=>3446,
+26247=>3447,
+26550=>3448,
+26551=>3449,
+26607=>3450,
+27468=>3451,
+29634=>3452,
+30146=>3453,
+31292=>3454,
+33499=>3455,
+33540=>3456,
+34903=>3457,
+34952=>3458,
+35382=>3459,
+36040=>3460,
+63747=>3460,
+36303=>3461,
+36603=>3462,
+36838=>3463,
+39381=>3464,
+21051=>3465,
+21364=>3466,
+21508=>3467,
+24682=>3468,
+24932=>3469,
+27580=>3470,
+29647=>3471,
+33050=>3472,
+35258=>3473,
+12179=>3474,
+35282=>3474,
+38307=>3475,
+20355=>3476,
+21002=>3477,
+22718=>3478,
+22904=>3479,
+23014=>3480,
+12082=>3481,
+24178=>3481,
+24185=>3482,
+25031=>3483,
+25536=>3484,
+26438=>3485,
+26604=>3486,
+26751=>3487,
+28567=>3488,
+30286=>3489,
+30475=>3490,
+30965=>3491,
+31240=>3492,
+31487=>3493,
+31777=>3494,
+32925=>3495,
+12169=>3496,
+33390=>3496,
+33393=>3497,
+35563=>3498,
+38291=>3499,
+20075=>3500,
+21917=>3501,
+26359=>3502,
+28212=>3503,
+30883=>3504,
+31469=>3505,
+33883=>3506,
+35088=>3507,
+34638=>3508,
+38824=>3509,
+21208=>3510,
+22350=>3511,
+22570=>3512,
+23884=>3513,
+24863=>3514,
+25022=>3515,
+25121=>3516,
+25954=>3517,
+26577=>3518,
+27204=>3519,
+28187=>3520,
+12130=>3521,
+29976=>3521,
+30131=>3522,
+30435=>3523,
+30640=>3524,
+32058=>3525,
+37039=>3526,
+37969=>3527,
+37970=>3528,
+40853=>3529,
+21283=>3530,
+23724=>3531,
+30002=>3532,
+32987=>3533,
+37440=>3534,
+38296=>3535,
+21083=>3536,
+22536=>3537,
+23004=>3538,
+23713=>3539,
+23831=>3540,
+24247=>3541,
+24378=>3542,
+24394=>3543,
+24951=>3544,
+27743=>3545,
+30074=>3546,
+30086=>3547,
+31968=>3548,
+32115=>3549,
+32177=>3550,
+32652=>3551,
+33108=>3552,
+33313=>3553,
+34193=>3554,
+35137=>3555,
+35611=>3556,
+37628=>3557,
+38477=>3558,
+64009=>3558,
+40007=>3559,
+20171=>3560,
+20215=>3561,
+20491=>3562,
+20977=>3563,
+22607=>3564,
+24887=>3565,
+24894=>3566,
+24936=>3567,
+25913=>3568,
+27114=>3569,
+28433=>3570,
+30117=>3571,
+30342=>3572,
+30422=>3573,
+31623=>3574,
+33445=>3575,
+33995=>3576,
+37799=>3577,
+38283=>3578,
+21888=>3579,
+23458=>3580,
+22353=>3581,
+31923=>3582,
+32697=>3583,
+37301=>3584,
+20520=>3585,
+21435=>3586,
+23621=>3587,
+24040=>3588,
+25298=>3589,
+25454=>3590,
+25818=>3591,
+25831=>3592,
+28192=>3593,
+28844=>3594,
+31067=>3595,
+36317=>3596,
+36382=>3597,
+36989=>3598,
+37445=>3599,
+37624=>3600,
+20094=>3601,
+20214=>3602,
+20581=>3603,
+12081=>3604,
+24062=>3604,
+24314=>3605,
+24838=>3606,
+26967=>3607,
+33137=>3608,
+34388=>3609,
+36423=>3610,
+37749=>3611,
+39467=>3612,
+20062=>3613,
+20625=>3614,
+26480=>3615,
+26688=>3616,
+20745=>3617,
+21133=>3618,
+21138=>3619,
+27298=>3620,
+30652=>3621,
+37392=>3622,
+40660=>3623,
+21163=>3624,
+24623=>3625,
+36850=>3626,
+20552=>3627,
+25001=>3628,
+25581=>3629,
+25802=>3630,
+26684=>3631,
+27268=>3632,
+28608=>3633,
+33160=>3634,
+35233=>3635,
+38548=>3636,
+22533=>3637,
+29309=>3638,
+12125=>3639,
+29356=>3639,
+29956=>3640,
+32121=>3641,
+32365=>3642,
+32937=>3643,
+12178=>3644,
+35211=>3644,
+64010=>3644,
+35700=>3645,
+36963=>3646,
+40273=>3647,
+25225=>3648,
+27770=>3649,
+28500=>3650,
+32080=>3651,
+32570=>3652,
+35363=>3653,
+20860=>3654,
+24906=>3655,
+31645=>3656,
+35609=>3657,
+37463=>3658,
+37772=>3659,
+20140=>3660,
+20435=>3661,
+20510=>3662,
+20670=>3663,
+20742=>3664,
+21185=>3665,
+21197=>3666,
+21375=>3667,
+22384=>3668,
+22659=>3669,
+24218=>3670,
+24465=>3671,
+24950=>3672,
+25004=>3673,
+25806=>3674,
+25964=>3675,
+26223=>3676,
+26299=>3677,
+26356=>3678,
+63745=>3678,
+26775=>3679,
+28039=>3680,
+28805=>3681,
+28913=>3682,
+29855=>3683,
+29861=>3684,
+29898=>3685,
+30169=>3686,
+30828=>3687,
+30956=>3688,
+31455=>3689,
+31478=>3690,
+32069=>3691,
+32147=>3692,
+32789=>3693,
+32831=>3694,
+33051=>3695,
+33686=>3696,
+35686=>3697,
+36629=>3698,
+36885=>3699,
+37857=>3700,
+38915=>3701,
+38968=>3702,
+39514=>3703,
+39912=>3704,
+20418=>3705,
+21843=>3706,
+22586=>3707,
+22865=>3708,
+63753=>3708,
+23395=>3709,
+23622=>3710,
+24760=>3711,
+25106=>3712,
+26690=>3713,
+26800=>3714,
+26856=>3715,
+28330=>3716,
+30028=>3717,
+30328=>3718,
+30926=>3719,
+31293=>3720,
+31995=>3721,
+32363=>3722,
+32380=>3723,
+35336=>3724,
+35489=>3725,
+35903=>3726,
+38542=>3727,
+40388=>3728,
+21476=>3729,
+21481=>3730,
+21578=>3731,
+21617=>3732,
+22266=>3733,
+22993=>3734,
+23396=>3735,
+23611=>3736,
+24235=>3737,
+25335=>3738,
+25911=>3739,
+25925=>3740,
+25970=>3741,
+26272=>3742,
+26543=>3743,
+27073=>3744,
+27837=>3745,
+30204=>3746,
+30352=>3747,
+30590=>3748,
+31295=>3749,
+32660=>3750,
+32771=>3751,
+32929=>3752,
+33167=>3753,
+33510=>3754,
+33533=>3755,
+33776=>3756,
+34241=>3757,
+34865=>3758,
+34996=>3759,
+35493=>3760,
+36764=>3761,
+37678=>3762,
+38599=>3763,
+39015=>3764,
+12220=>3765,
+39640=>3765,
+12238=>3766,
+40723=>3766,
+21741=>3767,
+26011=>3768,
+26354=>3769,
+26767=>3770,
+31296=>3771,
+12181=>3772,
+35895=>3772,
+40288=>3773,
+22256=>3774,
+22372=>3775,
+23825=>3776,
+26118=>3777,
+26801=>3778,
+26829=>3779,
+28414=>3780,
+29736=>3781,
+34974=>3782,
+39908=>3783,
+27752=>3784,
+12219=>3785,
+39592=>3785,
+20379=>3786,
+20844=>3787,
+20849=>3788,
+21151=>3789,
+23380=>3790,
+12079=>3791,
+24037=>3791,
+24656=>3792,
+24685=>3793,
+25329=>3794,
+25511=>3795,
+25915=>3796,
+29657=>3797,
+31354=>3798,
+34467=>3799,
+36002=>3800,
+38799=>3801,
+20018=>3802,
+63749=>3802,
+23521=>3803,
+12093=>3804,
+25096=>3804,
+26524=>3805,
+12128=>3806,
+29916=>3806,
+31185=>3807,
+33747=>3808,
+35463=>3809,
+35506=>3810,
+36328=>3811,
+36942=>3812,
+37707=>3813,
+38982=>3814,
+24275=>3815,
+64011=>3815,
+27112=>3816,
+34303=>3817,
+37101=>3818,
+20896=>3819,
+23448=>3820,
+23532=>3821,
+24931=>3822,
+26874=>3823,
+27454=>3824,
+28748=>3825,
+29743=>3826,
+29912=>3827,
+31649=>3828,
+32592=>3829,
+33733=>3830,
+35264=>3831,
+36011=>3832,
+38364=>3833,
+39208=>3834,
+21038=>3835,
+24669=>3836,
+25324=>3837,
+36866=>3838,
+20362=>3839,
+20809=>3840,
+21281=>3841,
+22745=>3842,
+24291=>3843,
+26336=>3844,
+27960=>3845,
+28826=>3846,
+29378=>3847,
+29654=>3848,
+31568=>3849,
+33009=>3850,
+37979=>3851,
+21350=>3852,
+25499=>3853,
+32619=>3854,
+20054=>3855,
+20608=>3856,
+22602=>3857,
+22750=>3858,
+24618=>3859,
+24871=>3860,
+25296=>3861,
+27088=>3862,
+39745=>3863,
+23439=>3864,
+32024=>3865,
+32945=>3866,
+36703=>3867,
+20132=>3868,
+20689=>3869,
+21676=>3870,
+21932=>3871,
+23308=>3872,
+23968=>3873,
+24039=>3874,
+25898=>3875,
+25934=>3876,
+26657=>3877,
+27211=>3878,
+29409=>3879,
+30350=>3880,
+30703=>3881,
+32094=>3882,
+32761=>3883,
+33184=>3884,
+34126=>3885,
+34527=>3886,
+36611=>3887,
+36686=>3888,
+37066=>3889,
+39171=>3890,
+39509=>3891,
+39851=>3892,
+19992=>3893,
+20037=>3894,
+20061=>3895,
+20167=>3896,
+20465=>3897,
+20855=>3898,
+21246=>3899,
+21312=>3900,
+12061=>3901,
+21475=>3901,
+21477=>3902,
+63750=>3902,
+21646=>3903,
+22036=>3904,
+22389=>3905,
+22434=>3906,
+23495=>3907,
+23943=>3908,
+24272=>3909,
+25084=>3910,
+25304=>3911,
+25937=>3912,
+26552=>3913,
+26601=>3914,
+27083=>3915,
+27472=>3916,
+27590=>3917,
+27628=>3918,
+27714=>3919,
+28317=>3920,
+28792=>3921,
+29399=>3922,
+29590=>3923,
+29699=>3924,
+30655=>3925,
+30697=>3926,
+31350=>3927,
+32127=>3928,
+32777=>3929,
+12165=>3930,
+33276=>3930,
+33285=>3931,
+33290=>3932,
+33503=>3933,
+34914=>3934,
+35635=>3935,
+36092=>3936,
+36544=>3937,
+36881=>3938,
+37041=>3939,
+37476=>3940,
+37558=>3941,
+39378=>3942,
+39493=>3943,
+40169=>3944,
+40407=>3945,
+12244=>3946,
+40860=>3946,
+63751=>3946,
+63752=>3946,
+22283=>3947,
+23616=>3948,
+33738=>3949,
+38816=>3950,
+38827=>3951,
+40628=>3952,
+21531=>3953,
+31384=>3954,
+32676=>3955,
+35033=>3956,
+36557=>3957,
+37089=>3958,
+22528=>3959,
+23624=>3960,
+25496=>3961,
+31391=>3962,
+23470=>3963,
+12088=>3964,
+24339=>3964,
+31353=>3965,
+31406=>3966,
+33422=>3967,
+36524=>3968,
+20518=>3969,
+21048=>3970,
+21240=>3971,
+21367=>3972,
+22280=>3973,
+25331=>3974,
+25458=>3975,
+27402=>3976,
+28099=>3977,
+30519=>3978,
+21413=>3979,
+29527=>3980,
+34152=>3981,
+36470=>3982,
+38357=>3983,
+26426=>3984,
+27331=>3985,
+28528=>3986,
+35437=>3987,
+36556=>3988,
+39243=>3989,
+26231=>3990,
+27512=>3991,
+36020=>3992,
+12225=>3993,
+39740=>3993,
+21483=>3994,
+22317=>3995,
+22862=>3996,
+25542=>3997,
+27131=>3998,
+29674=>3999,
+30789=>4000,
+31418=>4001,
+31429=>4002,
+31998=>4003,
+33909=>4004,
+35215=>4005,
+36211=>4006,
+36917=>4007,
+38312=>4008,
+21243=>4009,
+22343=>4010,
+30023=>4011,
+31584=>4012,
+33740=>4013,
+37406=>4014,
+27224=>4015,
+20811=>4016,
+21067=>4017,
+21127=>4018,
+25119=>4019,
+26840=>4020,
+26997=>4021,
+38553=>4022,
+20677=>4023,
+21156=>4024,
+21220=>4025,
+25027=>4026,
+12100=>4027,
+26020=>4027,
+26681=>4028,
+27135=>4029,
+29822=>4030,
+31563=>4031,
+33465=>4032,
+33771=>4033,
+35250=>4034,
+35641=>4035,
+36817=>4036,
+39241=>4037,
+20170=>4038,
+22935=>4039,
+25810=>4040,
+26129=>4041,
+27278=>4042,
+29748=>4043,
+31105=>4044,
+31165=>4045,
+33449=>4046,
+34942=>4047,
+34943=>4048,
+35167=>4049,
+37670=>4050,
+20235=>4051,
+21450=>4052,
+24613=>4053,
+25201=>4054,
+27762=>4055,
+32026=>4056,
+32102=>4057,
+20120=>4058,
+20834=>4059,
+30684=>4060,
+32943=>4061,
+20225=>4062,
+20238=>4063,
+20854=>4064,
+20864=>4065,
+21980=>4066,
+22120=>4067,
+22331=>4068,
+22522=>4069,
+22524=>4070,
+22804=>4071,
+22855=>4072,
+22931=>4073,
+23492=>4074,
+23696=>4075,
+23822=>4076,
+12080=>4077,
+24049=>4077,
+24190=>4078,
+24524=>4079,
+25216=>4080,
+26071=>4081,
+26083=>4082,
+26398=>4083,
+26399=>4084,
+26462=>4085,
+26827=>4086,
+26820=>4087,
+27231=>4088,
+27450=>4089,
+27683=>4090,
+27773=>4091,
+27778=>4092,
+28103=>4093,
+29592=>4094,
+29734=>4095,
+29738=>4096,
+29826=>4097,
+29859=>4098,
+30072=>4099,
+30079=>4100,
+30849=>4101,
+30959=>4102,
+31041=>4103,
+31047=>4104,
+31048=>4105,
+31098=>4106,
+31637=>4107,
+32000=>4108,
+32186=>4109,
+32648=>4110,
+32774=>4111,
+32813=>4112,
+32908=>4113,
+35352=>4114,
+35663=>4115,
+35912=>4116,
+63744=>4116,
+36215=>4117,
+37665=>4118,
+37668=>4119,
+39138=>4120,
+39249=>4121,
+39438=>4122,
+39439=>4123,
+39525=>4124,
+40594=>4125,
+32202=>4126,
+20342=>4127,
+21513=>4128,
+25326=>4129,
+26708=>4130,
+12198=>4131,
+37329=>4131,
+63754=>4131,
+21931=>4132,
+20794=>4133,
+23068=>4134,
+25062=>4135,
+25295=>4136,
+63835=>4136,
+25343=>4137,
+37027=>4138,
+35582=>4139,
+63837=>4139,
+26262=>4140,
+29014=>4141,
+38627=>4142,
+25423=>4143,
+25466=>4144,
+21335=>4145,
+26511=>4146,
+26976=>4147,
+28275=>4148,
+30007=>4149,
+32013=>4150,
+34930=>4151,
+22218=>4152,
+23064=>4153,
+20035=>4154,
+20839=>4155,
+22856=>4156,
+63756=>4156,
+26608=>4157,
+32784=>4158,
+12069=>4159,
+22899=>4159,
+63873=>4159,
+24180=>4160,
+63886=>4160,
+25754=>4161,
+63889=>4161,
+31178=>4162,
+63893=>4162,
+24565=>4163,
+63907=>4163,
+24684=>4164,
+25288=>4165,
+25467=>4166,
+63908=>4166,
+23527=>4167,
+63839=>4167,
+63914=>4167,
+23511=>4168,
+21162=>4169,
+22900=>4170,
+24361=>4171,
+24594=>4172,
+63840=>4172,
+29785=>4173,
+39377=>4174,
+28611=>4175,
+33215=>4176,
+36786=>4177,
+24817=>4178,
+33126=>4179,
+23615=>4180,
+63933=>4180,
+23273=>4181,
+35365=>4182,
+26491=>4183,
+63944=>4183,
+32016=>4184,
+63951=>4184,
+33021=>4185,
+23612=>4186,
+27877=>4187,
+63971=>4187,
+21311=>4188,
+63979=>4188,
+28346=>4189,
+63980=>4189,
+22810=>4190,
+33590=>4191,
+63998=>4191,
+20025=>4192,
+63838=>4192,
+20150=>4193,
+20294=>4194,
+21934=>4195,
+22296=>4196,
+22727=>4197,
+24406=>4198,
+26039=>4199,
+26086=>4200,
+27264=>4201,
+27573=>4202,
+28237=>4203,
+30701=>4204,
+31471=>4205,
+31774=>4206,
+32222=>4207,
+34507=>4208,
+34962=>4209,
+37170=>4210,
+37723=>4211,
+25787=>4212,
+28606=>4213,
+29562=>4214,
+30136=>4215,
+36948=>4216,
+21846=>4217,
+22349=>4218,
+25018=>4219,
+25812=>4220,
+26311=>4221,
+28129=>4222,
+28251=>4223,
+28525=>4224,
+28601=>4225,
+30192=>4226,
+32835=>4227,
+33213=>4228,
+34113=>4229,
+35203=>4230,
+35527=>4231,
+35674=>4232,
+37663=>4233,
+27795=>4234,
+30035=>4235,
+31572=>4236,
+36367=>4237,
+36957=>4238,
+21776=>4239,
+22530=>4240,
+22616=>4241,
+24162=>4242,
+25095=>4243,
+25758=>4244,
+26848=>4245,
+30070=>4246,
+31958=>4247,
+64003=>4247,
+34739=>4248,
+40680=>4249,
+20195=>4250,
+22408=>4251,
+22382=>4252,
+12068=>4253,
+22823=>4253,
+23565=>4254,
+23729=>4255,
+24118=>4256,
+24453=>4257,
+25140=>4258,
+25825=>4259,
+29619=>4260,
+33274=>4261,
+34955=>4262,
+36024=>4263,
+38538=>4264,
+40667=>4265,
+23429=>4266,
+64004=>4266,
+24503=>4267,
+24755=>4268,
+20498=>4269,
+12049=>4270,
+20992=>4270,
+21040=>4271,
+22294=>4272,
+22581=>4273,
+22615=>4274,
+23566=>4275,
+23648=>4276,
+23798=>4277,
+23947=>4278,
+24230=>4279,
+64001=>4279,
+24466=>4280,
+24764=>4281,
+25361=>4282,
+25481=>4283,
+25623=>4284,
+26691=>4285,
+26873=>4286,
+27330=>4287,
+28120=>4288,
+28193=>4289,
+28372=>4290,
+28644=>4291,
+29182=>4292,
+30428=>4293,
+30585=>4294,
+31153=>4295,
+31291=>4296,
+33796=>4297,
+35241=>4298,
+36077=>4299,
+36339=>4300,
+36424=>4301,
+36867=>4302,
+36884=>4303,
+36947=>4304,
+37117=>4305,
+37709=>4306,
+38518=>4307,
+38876=>4308,
+27602=>4309,
+28678=>4310,
+29272=>4311,
+29346=>4312,
+29544=>4313,
+30563=>4314,
+31167=>4315,
+31716=>4316,
+32411=>4317,
+35712=>4318,
+63834=>4318,
+22697=>4319,
+24775=>4320,
+25958=>4321,
+26109=>4322,
+26302=>4323,
+27788=>4324,
+28958=>4325,
+29129=>4326,
+35930=>4327,
+38931=>4328,
+20077=>4329,
+31361=>4330,
+20189=>4331,
+20908=>4332,
+20941=>4333,
+21205=>4334,
+21516=>4335,
+24999=>4336,
+26481=>4337,
+26704=>4338,
+26847=>4339,
+27934=>4340,
+64005=>4340,
+28540=>4341,
+30140=>4342,
+30643=>4343,
+31461=>4344,
+33012=>4345,
+33891=>4346,
+37509=>4347,
+20828=>4348,
+12099=>4349,
+26007=>4349,
+26460=>4350,
+26515=>4351,
+30168=>4352,
+31431=>4353,
+33651=>4354,
+12182=>4355,
+35910=>4355,
+36887=>4356,
+38957=>4357,
+23663=>4358,
+33216=>4359,
+33434=>4360,
+36929=>4361,
+36975=>4362,
+37389=>4363,
+24471=>4364,
+23965=>4365,
+27225=>4366,
+29128=>4367,
+30331=>4368,
+31561=>4369,
+34276=>4370,
+35588=>4371,
+37159=>4372,
+39472=>4373,
+21895=>4374,
+63755=>4374,
+25078=>4375,
+63757=>4375,
+30313=>4376,
+63758=>4376,
+32645=>4377,
+63759=>4377,
+34367=>4378,
+63760=>4378,
+34746=>4379,
+63761=>4379,
+35064=>4380,
+63762=>4380,
+37007=>4381,
+63763=>4381,
+27931=>4382,
+63765=>4382,
+28889=>4383,
+63766=>4383,
+29662=>4384,
+63767=>4384,
+32097=>4385,
+33853=>4386,
+63768=>4386,
+37226=>4387,
+63769=>4387,
+39409=>4388,
+63770=>4388,
+20098=>4389,
+63771=>4389,
+21365=>4390,
+63772=>4390,
+27396=>4391,
+63773=>4391,
+27410=>4392,
+28734=>4393,
+29211=>4394,
+63774=>4394,
+34349=>4395,
+63775=>4395,
+40478=>4396,
+63776=>4396,
+21068=>4397,
+36771=>4398,
+23888=>4399,
+63777=>4399,
+25829=>4400,
+25900=>4401,
+27414=>4402,
+28651=>4403,
+63778=>4403,
+31811=>4404,
+32412=>4405,
+34253=>4406,
+63779=>4406,
+35172=>4407,
+63780=>4407,
+35261=>4408,
+25289=>4409,
+63781=>4409,
+33240=>4410,
+63782=>4410,
+34847=>4411,
+63783=>4411,
+24266=>4412,
+63784=>4412,
+26391=>4413,
+63785=>4413,
+28010=>4414,
+63786=>4414,
+29436=>4415,
+63787=>4415,
+29701=>4416,
+29807=>4417,
+34690=>4418,
+37086=>4419,
+63788=>4419,
+20358=>4420,
+63789=>4420,
+23821=>4421,
+24480=>4422,
+33802=>4423,
+20919=>4424,
+63790=>4424,
+25504=>4425,
+63861=>4425,
+30053=>4426,
+63862=>4426,
+20142=>4427,
+63863=>4427,
+20486=>4428,
+20841=>4429,
+63864=>4429,
+20937=>4430,
+63865=>4430,
+26753=>4431,
+63866=>4431,
+27153=>4432,
+31918=>4433,
+31921=>4434,
+31975=>4435,
+63867=>4435,
+33391=>4436,
+63868=>4436,
+35538=>4437,
+63869=>4437,
+36635=>4438,
+37327=>4439,
+63870=>4439,
+20406=>4440,
+20791=>4441,
+21237=>4442,
+63871=>4442,
+21570=>4443,
+63872=>4443,
+24300=>4444,
+63874=>4444,
+24942=>4445,
+25150=>4446,
+26053=>4447,
+63875=>4447,
+27354=>4448,
+28670=>4449,
+63876=>4449,
+31018=>4450,
+63877=>4450,
+34268=>4451,
+34851=>4452,
+38317=>4453,
+63878=>4453,
+39522=>4454,
+39530=>4455,
+63879=>4455,
+40599=>4456,
+63880=>4456,
+40654=>4457,
+63881=>4457,
+12050=>4458,
+21147=>4458,
+63882=>4458,
+26310=>4459,
+63883=>4459,
+27511=>4460,
+63884=>4460,
+28701=>4461,
+31019=>4462,
+36706=>4463,
+63885=>4463,
+38722=>4464,
+24976=>4465,
+63887=>4465,
+25088=>4466,
+63888=>4466,
+25891=>4467,
+28451=>4468,
+63890=>4468,
+29001=>4469,
+63891=>4469,
+29833=>4470,
+63892=>4470,
+32244=>4471,
+63894=>4471,
+32879=>4472,
+63895=>4472,
+34030=>4473,
+63897=>4473,
+36646=>4474,
+63896=>4474,
+36899=>4475,
+63898=>4475,
+37706=>4476,
+63899=>4476,
+20925=>4477,
+21015=>4478,
+63900=>4478,
+21155=>4479,
+63901=>4479,
+27916=>4480,
+28872=>4481,
+63903=>4481,
+35010=>4482,
+63904=>4482,
+24265=>4483,
+63906=>4483,
+25986=>4484,
+27566=>4485,
+63909=>4485,
+28610=>4486,
+31806=>4487,
+63910=>4487,
+29557=>4488,
+63911=>4488,
+20196=>4489,
+63912=>4489,
+20278=>4490,
+22265=>4491,
+63913=>4491,
+23738=>4492,
+23994=>4493,
+63915=>4493,
+24604=>4494,
+63916=>4494,
+29618=>4495,
+63917=>4495,
+31533=>4496,
+32666=>4497,
+63919=>4497,
+32718=>4498,
+32838=>4499,
+63920=>4499,
+36894=>4500,
+37428=>4501,
+63921=>4501,
+38646=>4502,
+63922=>4502,
+38728=>4503,
+63923=>4503,
+38936=>4504,
+63924=>4504,
+40801=>4505,
+20363=>4506,
+63925=>4506,
+28583=>4507,
+31150=>4508,
+63926=>4508,
+37300=>4509,
+63927=>4509,
+38583=>4510,
+63928=>4510,
+21214=>4511,
+63791=>4511,
+25736=>4512,
+25796=>4513,
+63792=>4513,
+27347=>4514,
+63793=>4514,
+28510=>4515,
+28696=>4516,
+29200=>4517,
+63794=>4517,
+30439=>4518,
+63795=>4518,
+12156=>4519,
+32769=>4519,
+63796=>4519,
+34310=>4520,
+63797=>4520,
+34396=>4521,
+63798=>4521,
+36335=>4522,
+63799=>4522,
+36613=>4523,
+38706=>4524,
+63800=>4524,
+39791=>4525,
+63801=>4525,
+40442=>4526,
+63802=>4526,
+12228=>4527,
+40565=>4527,
+30860=>4528,
+63803=>4528,
+31103=>4529,
+63804=>4529,
+32160=>4530,
+63805=>4530,
+33737=>4531,
+63806=>4531,
+37636=>4532,
+63807=>4532,
+12229=>4533,
+40575=>4533,
+63808=>4533,
+40595=>4534,
+35542=>4535,
+63809=>4535,
+22751=>4536,
+63810=>4536,
+24324=>4537,
+63811=>4537,
+26407=>4538,
+28711=>4539,
+29903=>4540,
+31840=>4541,
+63812=>4541,
+32894=>4542,
+63813=>4542,
+20769=>4543,
+28712=>4544,
+29282=>4545,
+63814=>4545,
+30922=>4546,
+63815=>4546,
+36034=>4547,
+63816=>4547,
+36058=>4548,
+36084=>4549,
+38647=>4550,
+63817=>4550,
+20102=>4551,
+63930=>4551,
+20698=>4552,
+63931=>4552,
+23534=>4553,
+63932=>4553,
+24278=>4554,
+26009=>4555,
+63934=>4555,
+29134=>4556,
+63936=>4556,
+30274=>4557,
+63937=>4557,
+30637=>4558,
+32842=>4559,
+34044=>4560,
+63938=>4560,
+36988=>4561,
+63939=>4561,
+39719=>4562,
+12243=>4563,
+40845=>4563,
+63940=>4563,
+22744=>4564,
+63818=>4564,
+23105=>4565,
+23650=>4566,
+63819=>4566,
+27155=>4567,
+63820=>4567,
+28122=>4568,
+63821=>4568,
+28431=>4569,
+63822=>4569,
+30267=>4570,
+32047=>4571,
+63823=>4571,
+32311=>4572,
+63824=>4572,
+34078=>4573,
+35128=>4574,
+37860=>4575,
+38475=>4576,
+63825=>4576,
+21129=>4577,
+63943=>4577,
+26066=>4578,
+26611=>4579,
+63945=>4579,
+27060=>4580,
+27969=>4581,
+63946=>4581,
+28316=>4582,
+63947=>4582,
+28687=>4583,
+29705=>4584,
+63948=>4584,
+29792=>4585,
+30041=>4586,
+63949=>4586,
+30244=>4587,
+30827=>4588,
+63950=>4588,
+35628=>4589,
+39006=>4590,
+63952=>4590,
+20845=>4591,
+63953=>4591,
+25134=>4592,
+63954=>4592,
+38520=>4593,
+63955=>4593,
+20374=>4594,
+20523=>4595,
+63956=>4595,
+23833=>4596,
+63957=>4596,
+28138=>4597,
+63958=>4597,
+32184=>4598,
+36650=>4599,
+63959=>4599,
+24459=>4600,
+63960=>4600,
+24900=>4601,
+63961=>4601,
+26647=>4602,
+63962=>4602,
+38534=>4603,
+63964=>4603,
+21202=>4604,
+63826=>4604,
+32907=>4605,
+63827=>4605,
+20956=>4606,
+63828=>4606,
+20940=>4607,
+63829=>4607,
+26974=>4608,
+31260=>4609,
+63830=>4609,
+32190=>4610,
+63831=>4610,
+33777=>4611,
+63832=>4611,
+38517=>4612,
+63833=>4612,
+20442=>4613,
+21033=>4614,
+63965=>4614,
+21400=>4615,
+21519=>4616,
+63966=>4616,
+21774=>4617,
+23653=>4618,
+63967=>4618,
+24743=>4619,
+26446=>4620,
+63969=>4620,
+26792=>4621,
+63970=>4621,
+28012=>4622,
+29313=>4623,
+29432=>4624,
+29702=>4625,
+63972=>4625,
+29827=>4626,
+30178=>4627,
+63973=>4627,
+31852=>4628,
+32633=>4629,
+63974=>4629,
+32696=>4630,
+33673=>4631,
+35023=>4632,
+63975=>4632,
+35041=>4633,
+63976=>4633,
+12197=>4634,
+37324=>4634,
+63977=>4634,
+37328=>4635,
+38626=>4636,
+63978=>4636,
+39881=>4637,
+21533=>4638,
+63981=>4638,
+28542=>4639,
+29136=>4640,
+63982=>4640,
+29848=>4641,
+63983=>4641,
+34298=>4642,
+63984=>4642,
+36522=>4643,
+38563=>4644,
+63985=>4644,
+40023=>4645,
+63986=>4645,
+40607=>4646,
+63987=>4646,
+26519=>4647,
+63988=>4647,
+28107=>4648,
+63989=>4648,
+29747=>4649,
+33256=>4650,
+63990=>4650,
+38678=>4651,
+30764=>4652,
+12148=>4653,
+31435=>4653,
+63991=>4653,
+31520=>4654,
+63992=>4654,
+31890=>4655,
+63993=>4655,
+25705=>4656,
+29802=>4657,
+30194=>4658,
+30908=>4659,
+30952=>4660,
+12218=>4661,
+39340=>4661,
+39764=>4662,
+12231=>4663,
+40635=>4663,
+23518=>4664,
+24149=>4665,
+28448=>4666,
+33180=>4667,
+33707=>4668,
+37000=>4669,
+19975=>4670,
+21325=>4671,
+23081=>4672,
+24018=>4673,
+24398=>4674,
+24930=>4675,
+25405=>4676,
+26217=>4677,
+26364=>4678,
+28415=>4679,
+28459=>4680,
+28771=>4681,
+30622=>4682,
+33836=>4683,
+34067=>4684,
+34875=>4685,
+36627=>4686,
+39237=>4687,
+39995=>4688,
+21788=>4689,
+25273=>4690,
+26411=>4691,
+27819=>4692,
+33545=>4693,
+35178=>4694,
+38778=>4695,
+20129=>4696,
+22916=>4697,
+24536=>4698,
+24537=>4699,
+26395=>4700,
+32178=>4701,
+32596=>4702,
+33426=>4703,
+33579=>4704,
+33725=>4705,
+36638=>4706,
+37017=>4707,
+22475=>4708,
+22969=>4709,
+23186=>4710,
+23504=>4711,
+26151=>4712,
+26522=>4713,
+26757=>4714,
+27599=>4715,
+29028=>4716,
+32629=>4717,
+36023=>4718,
+36067=>4719,
+36993=>4720,
+39749=>4721,
+33032=>4722,
+35978=>4723,
+38476=>4724,
+39488=>4725,
+12230=>4726,
+40613=>4726,
+23391=>4727,
+27667=>4728,
+29467=>4729,
+30450=>4730,
+30431=>4731,
+33804=>4732,
+20906=>4733,
+35219=>4734,
+20813=>4735,
+20885=>4736,
+21193=>4737,
+26825=>4738,
+27796=>4739,
+30468=>4740,
+30496=>4741,
+32191=>4742,
+32236=>4743,
+12207=>4744,
+38754=>4744,
+40629=>4745,
+28357=>4746,
+34065=>4747,
+20901=>4748,
+21517=>4749,
+21629=>4750,
+26126=>4751,
+26269=>4752,
+26919=>4753,
+28319=>4754,
+12139=>4755,
+30399=>4755,
+30609=>4756,
+33559=>4757,
+33986=>4758,
+34719=>4759,
+37225=>4760,
+37528=>4761,
+40180=>4762,
+34946=>4763,
+20398=>4764,
+20882=>4765,
+21215=>4766,
+22982=>4767,
+24125=>4768,
+24917=>4769,
+25720=>4770,
+25721=>4771,
+26286=>4772,
+26576=>4773,
+27169=>4774,
+27597=>4775,
+12113=>4776,
+27611=>4776,
+29279=>4777,
+29281=>4778,
+29761=>4779,
+30520=>4780,
+12141=>4781,
+30683=>4781,
+32791=>4782,
+33468=>4783,
+33541=>4784,
+35584=>4785,
+35624=>4786,
+35980=>4787,
+12106=>4788,
+26408=>4788,
+27792=>4789,
+29287=>4790,
+12140=>4791,
+30446=>4791,
+30566=>4792,
+31302=>4793,
+40361=>4794,
+27519=>4795,
+27794=>4796,
+22818=>4797,
+26406=>4798,
+33945=>4799,
+21359=>4800,
+22675=>4801,
+22937=>4802,
+24287=>4803,
+25551=>4804,
+26164=>4805,
+26483=>4806,
+28218=>4807,
+29483=>4808,
+31447=>4809,
+33495=>4810,
+37672=>4811,
+21209=>4812,
+24043=>4813,
+25006=>4814,
+25035=>4815,
+25098=>4816,
+25287=>4817,
+25771=>4818,
+12102=>4819,
+26080=>4819,
+26969=>4820,
+27494=>4821,
+12111=>4822,
+27595=>4822,
+28961=>4823,
+29687=>4824,
+30045=>4825,
+32326=>4826,
+33310=>4827,
+33538=>4828,
+34154=>4829,
+35491=>4830,
+36031=>4831,
+38695=>4832,
+40289=>4833,
+22696=>4834,
+40664=>4835,
+20497=>4836,
+21006=>4837,
+21563=>4838,
+21839=>4839,
+12098=>4840,
+25991=>4840,
+27766=>4841,
+32010=>4842,
+32011=>4843,
+32862=>4844,
+34442=>4845,
+12200=>4846,
+38272=>4846,
+38639=>4847,
+21247=>4848,
+27797=>4849,
+29289=>4850,
+21619=>4851,
+23194=>4852,
+23614=>4853,
+23883=>4854,
+24396=>4855,
+24494=>4856,
+26410=>4857,
+26806=>4858,
+26979=>4859,
+28220=>4860,
+28228=>4861,
+30473=>4862,
+12150=>4863,
+31859=>4863,
+32654=>4864,
+34183=>4865,
+35598=>4866,
+36855=>4867,
+38753=>4868,
+40692=>4869,
+23735=>4870,
+24758=>4871,
+24845=>4872,
+25003=>4873,
+25935=>4874,
+26107=>4875,
+26108=>4876,
+27665=>4877,
+27887=>4878,
+29599=>4879,
+29641=>4880,
+32225=>4881,
+38292=>4882,
+23494=>4883,
+34588=>4884,
+35600=>4885,
+21085=>4886,
+21338=>4887,
+25293=>4888,
+25615=>4889,
+25778=>4890,
+26420=>4891,
+27192=>4892,
+27850=>4893,
+29632=>4894,
+29854=>4895,
+31636=>4896,
+31893=>4897,
+32283=>4898,
+33162=>4899,
+33334=>4900,
+34180=>4901,
+36843=>4902,
+38649=>4903,
+39361=>4904,
+20276=>4905,
+21322=>4906,
+21453=>4907,
+21467=>4908,
+25292=>4909,
+25644=>4910,
+25856=>4911,
+26001=>4912,
+27075=>4913,
+27886=>4914,
+28504=>4915,
+29677=>4916,
+30036=>4917,
+30242=>4918,
+30436=>4919,
+30460=>4920,
+30928=>4921,
+30971=>4922,
+63844=>4922,
+31020=>4923,
+32070=>4924,
+33324=>4925,
+34784=>4926,
+36820=>4927,
+38930=>4928,
+39151=>4929,
+21187=>4930,
+25300=>4931,
+25765=>4932,
+28196=>4933,
+28497=>4934,
+30332=>4935,
+36299=>4936,
+37297=>4937,
+37474=>4938,
+39662=>4939,
+39747=>4940,
+20515=>4941,
+20621=>4942,
+22346=>4943,
+22952=>4944,
+23592=>4945,
+24135=>4946,
+24439=>4947,
+25151=>4948,
+25918=>4949,
+12101=>4950,
+26041=>4950,
+26049=>4951,
+26121=>4952,
+26507=>4953,
+27036=>4954,
+28354=>4955,
+30917=>4956,
+32033=>4957,
+32938=>4958,
+33152=>4959,
+33323=>4960,
+33459=>4961,
+33953=>4962,
+34444=>4963,
+35370=>4964,
+35607=>4965,
+37030=>4966,
+38450=>4967,
+40848=>4968,
+20493=>4969,
+20467=>4970,
+22521=>4971,
+24472=>4972,
+25308=>4973,
+25490=>4974,
+26479=>4975,
+28227=>4976,
+28953=>4977,
+30403=>4978,
+32972=>4979,
+32986=>4980,
+35060=>4981,
+35061=>4982,
+35097=>4983,
+36064=>4984,
+36649=>4985,
+37197=>4986,
+38506=>4987,
+20271=>4988,
+20336=>4989,
+24091=>4990,
+26575=>4991,
+26658=>4992,
+12137=>4993,
+30333=>4993,
+30334=>4994,
+39748=>4995,
+24161=>4996,
+27146=>4997,
+29033=>4998,
+29140=>4999,
+30058=>5000,
+32321=>5001,
+34115=>5002,
+34281=>5003,
+39132=>5004,
+20240=>5005,
+31567=>5006,
+32624=>5007,
+38309=>5008,
+20961=>5009,
+24070=>5010,
+26805=>5011,
+27710=>5012,
+27726=>5013,
+27867=>5014,
+29359=>5015,
+31684=>5016,
+33539=>5017,
+27861=>5018,
+29754=>5019,
+20731=>5020,
+21128=>5021,
+22721=>5022,
+25816=>5023,
+27287=>5024,
+29863=>5025,
+30294=>5026,
+30887=>5027,
+34327=>5028,
+38370=>5029,
+38713=>5030,
+21342=>5031,
+24321=>5032,
+35722=>5033,
+36776=>5034,
+36783=>5035,
+37002=>5036,
+21029=>5037,
+30629=>5038,
+40009=>5039,
+40712=>5040,
+19993=>5041,
+20482=>5042,
+20853=>5043,
+23643=>5044,
+24183=>5045,
+26142=>5046,
+26170=>5047,
+26564=>5048,
+26821=>5049,
+28851=>5050,
+29953=>5051,
+30149=>5052,
+31177=>5053,
+31453=>5054,
+36647=>5055,
+39200=>5056,
+39432=>5057,
+20445=>5058,
+22561=>5059,
+22577=>5060,
+23542=>5061,
+26222=>5062,
+27493=>5063,
+27921=>5064,
+28282=>5065,
+28541=>5066,
+29668=>5067,
+29995=>5068,
+33769=>5069,
+35036=>5070,
+35091=>5071,
+35676=>5072,
+36628=>5073,
+20239=>5074,
+20693=>5075,
+21264=>5076,
+12056=>5077,
+21340=>5077,
+23443=>5078,
+24489=>5079,
+63846=>5079,
+26381=>5080,
+31119=>5081,
+33145=>5082,
+33583=>5083,
+34068=>5084,
+35079=>5085,
+35206=>5086,
+36665=>5087,
+36667=>5088,
+64007=>5088,
+39333=>5089,
+39954=>5090,
+26412=>5091,
+20086=>5092,
+20472=>5093,
+22857=>5094,
+23553=>5095,
+23791=>5096,
+23792=>5097,
+25447=>5098,
+26834=>5099,
+28925=>5100,
+29090=>5101,
+29739=>5102,
+32299=>5103,
+34028=>5104,
+34562=>5105,
+36898=>5106,
+37586=>5107,
+40179=>5108,
+19981=>5109,
+63847=>5109,
+20184=>5110,
+20463=>5111,
+20613=>5112,
+21078=>5113,
+21103=>5114,
+21542=>5115,
+21648=>5116,
+22496=>5117,
+22827=>5118,
+23142=>5119,
+23386=>5120,
+23413=>5121,
+23500=>5122,
+24220=>5123,
+25206=>5124,
+25975=>5125,
+26023=>5126,
+28014=>5127,
+28325=>5128,
+12119=>5129,
+29238=>5129,
+31526=>5130,
+31807=>5131,
+12152=>5132,
+32566=>5132,
+33104=>5133,
+33105=>5134,
+33178=>5135,
+33344=>5136,
+33433=>5137,
+33705=>5138,
+35331=>5139,
+36000=>5140,
+36070=>5141,
+36091=>5142,
+36212=>5143,
+36282=>5144,
+37096=>5145,
+37340=>5146,
+12201=>5147,
+38428=>5147,
+38468=>5148,
+39385=>5149,
+40167=>5150,
+21271=>5151,
+63843=>5151,
+20998=>5152,
+21545=>5153,
+22132=>5154,
+22707=>5155,
+22868=>5156,
+22894=>5157,
+24575=>5158,
+24996=>5159,
+25198=>5160,
+26128=>5161,
+27774=>5162,
+28954=>5163,
+30406=>5164,
+31881=>5165,
+31966=>5166,
+32027=>5167,
+33452=>5168,
+36033=>5169,
+38640=>5170,
+20315=>5171,
+24343=>5172,
+24447=>5173,
+25282=>5174,
+23849=>5175,
+26379=>5176,
+26842=>5177,
+30844=>5178,
+32323=>5179,
+40300=>5180,
+19989=>5181,
+20633=>5182,
+12052=>5183,
+21269=>5183,
+21290=>5184,
+21329=>5185,
+22915=>5186,
+23138=>5187,
+24199=>5188,
+24754=>5189,
+24970=>5190,
+25161=>5191,
+25209=>5192,
+26000=>5193,
+26503=>5194,
+27047=>5195,
+12112=>5196,
+27604=>5196,
+27606=>5197,
+27607=>5198,
+27608=>5199,
+27832=>5200,
+29749=>5201,
+30202=>5202,
+30738=>5203,
+30865=>5204,
+31189=>5205,
+31192=>5206,
+31875=>5207,
+32203=>5208,
+32737=>5209,
+32933=>5210,
+33086=>5211,
+33218=>5212,
+33778=>5213,
+34586=>5214,
+35048=>5215,
+35513=>5216,
+35692=>5217,
+36027=>5218,
+37145=>5219,
+12206=>5220,
+38750=>5220,
+12214=>5221,
+39131=>5221,
+12240=>5222,
+40763=>5222,
+22188=>5223,
+23338=>5224,
+24428=>5225,
+25996=>5226,
+27315=>5227,
+27567=>5228,
+27996=>5229,
+28657=>5230,
+28693=>5231,
+29277=>5232,
+29613=>5233,
+36007=>5234,
+36051=>5235,
+38971=>5236,
+24977=>5237,
+27703=>5238,
+32856=>5239,
+39425=>5240,
+20045=>5241,
+20107=>5242,
+20123=>5243,
+20181=>5244,
+20282=>5245,
+20284=>5246,
+20351=>5247,
+20447=>5248,
+20735=>5249,
+21490=>5250,
+21496=>5251,
+21766=>5252,
+21987=>5253,
+22235=>5254,
+12064=>5255,
+22763=>5255,
+22882=>5256,
+23057=>5257,
+23531=>5258,
+23546=>5259,
+23556=>5260,
+24051=>5261,
+24107=>5262,
+24473=>5263,
+24605=>5264,
+25448=>5265,
+26012=>5266,
+26031=>5267,
+26614=>5268,
+26619=>5269,
+26797=>5270,
+27515=>5271,
+27801=>5272,
+27863=>5273,
+28195=>5274,
+28681=>5275,
+29509=>5276,
+30722=>5277,
+31038=>5278,
+31040=>5279,
+31072=>5280,
+31169=>5281,
+31721=>5282,
+32023=>5283,
+32114=>5284,
+32902=>5285,
+33293=>5286,
+33678=>5287,
+34001=>5288,
+34503=>5289,
+35039=>5290,
+35408=>5291,
+35422=>5292,
+35613=>5293,
+36060=>5294,
+36198=>5295,
+36781=>5296,
+37034=>5297,
+39164=>5298,
+39391=>5299,
+40605=>5300,
+21066=>5301,
+26388=>5302,
+20632=>5303,
+21034=>5304,
+12077=>5305,
+23665=>5305,
+25955=>5306,
+27733=>5307,
+29642=>5308,
+29987=>5309,
+30109=>5310,
+31639=>5311,
+33948=>5312,
+37240=>5313,
+38704=>5314,
+20087=>5315,
+25746=>5316,
+27578=>5317,
+63856=>5317,
+29022=>5318,
+34217=>5319,
+19977=>5320,
+26441=>5321,
+26862=>5322,
+28183=>5323,
+33439=>5324,
+34072=>5325,
+34923=>5326,
+25591=>5327,
+28545=>5328,
+37394=>5329,
+39087=>5330,
+19978=>5331,
+20663=>5332,
+20687=>5333,
+20767=>5334,
+21830=>5335,
+21930=>5336,
+22039=>5337,
+23360=>5338,
+23577=>5339,
+23776=>5340,
+24120=>5341,
+24202=>5342,
+24224=>5343,
+24258=>5344,
+24819=>5345,
+26705=>5346,
+27233=>5347,
+28248=>5348,
+29245=>5349,
+29248=>5350,
+29376=>5351,
+63994=>5351,
+30456=>5352,
+31077=>5353,
+31665=>5354,
+32724=>5355,
+35059=>5356,
+35316=>5357,
+35443=>5358,
+35937=>5359,
+36062=>5360,
+38684=>5361,
+22622=>5362,
+63852=>5362,
+29885=>5363,
+36093=>5364,
+21959=>5365,
+31329=>5366,
+32034=>5367,
+63850=>5367,
+12170=>5368,
+33394=>5368,
+29298=>5369,
+12131=>5370,
+29983=>5370,
+29989=>5371,
+31513=>5372,
+22661=>5373,
+22779=>5374,
+23996=>5375,
+24207=>5376,
+24246=>5377,
+24464=>5378,
+24661=>5379,
+25234=>5380,
+25471=>5381,
+25933=>5382,
+26257=>5383,
+26329=>5384,
+26360=>5385,
+26646=>5386,
+26866=>5387,
+29312=>5388,
+29790=>5389,
+31598=>5390,
+32110=>5391,
+32214=>5392,
+32626=>5393,
+32997=>5394,
+33298=>5395,
+34223=>5396,
+35199=>5397,
+35475=>5398,
+36893=>5399,
+37604=>5400,
+12233=>5401,
+40653=>5401,
+12239=>5402,
+40736=>5402,
+12067=>5403,
+22805=>5403,
+22893=>5404,
+24109=>5405,
+24796=>5406,
+26132=>5407,
+26227=>5408,
+26512=>5409,
+27728=>5410,
+28101=>5411,
+28511=>5412,
+12143=>5413,
+30707=>5413,
+30889=>5414,
+33990=>5415,
+37323=>5416,
+37675=>5417,
+20185=>5418,
+20682=>5419,
+20808=>5420,
+21892=>5421,
+23307=>5422,
+23459=>5423,
+25159=>5424,
+25982=>5425,
+26059=>5426,
+28210=>5427,
+29053=>5428,
+29697=>5429,
+29764=>5430,
+29831=>5431,
+29887=>5432,
+30316=>5433,
+31146=>5434,
+32218=>5435,
+32341=>5436,
+32680=>5437,
+33146=>5438,
+33203=>5439,
+33337=>5440,
+34330=>5441,
+34796=>5442,
+35445=>5443,
+36323=>5444,
+36984=>5445,
+37521=>5446,
+37925=>5447,
+39245=>5448,
+39854=>5449,
+21352=>5450,
+23633=>5451,
+26964=>5452,
+27844=>5453,
+27945=>5454,
+28203=>5455,
+12166=>5456,
+33292=>5456,
+34203=>5457,
+35131=>5458,
+35373=>5459,
+35498=>5460,
+63855=>5460,
+63905=>5460,
+38634=>5461,
+40807=>5462,
+21089=>5463,
+26297=>5464,
+27570=>5465,
+32406=>5466,
+34814=>5467,
+36109=>5468,
+38275=>5469,
+38493=>5470,
+25885=>5471,
+28041=>5472,
+29166=>5473,
+22478=>5474,
+22995=>5475,
+23468=>5476,
+24615=>5477,
+24826=>5478,
+25104=>5479,
+26143=>5480,
+26207=>5481,
+29481=>5482,
+29689=>5483,
+30427=>5484,
+30465=>5485,
+63853=>5485,
+31596=>5486,
+32854=>5487,
+32882=>5488,
+33125=>5489,
+35488=>5490,
+37266=>5491,
+19990=>5492,
+21218=>5493,
+27506=>5494,
+27927=>5495,
+31237=>5496,
+31545=>5497,
+32048=>5498,
+36016=>5499,
+21484=>5500,
+22063=>5501,
+22609=>5502,
+23477=>5503,
+12073=>5504,
+23567=>5504,
+23569=>5505,
+24034=>5506,
+25152=>5507,
+25475=>5508,
+25620=>5509,
+26157=>5510,
+26803=>5511,
+27836=>5512,
+28040=>5513,
+28335=>5514,
+28703=>5515,
+28836=>5516,
+29138=>5517,
+29990=>5518,
+30095=>5519,
+30094=>5520,
+30233=>5521,
+31505=>5522,
+31712=>5523,
+31787=>5524,
+32032=>5525,
+32057=>5526,
+34092=>5527,
+34157=>5528,
+34311=>5529,
+35380=>5530,
+36877=>5531,
+36961=>5532,
+37045=>5533,
+37559=>5534,
+38902=>5535,
+39479=>5536,
+20439=>5537,
+23660=>5538,
+26463=>5539,
+28049=>5540,
+31903=>5541,
+32396=>5542,
+35606=>5543,
+36118=>5544,
+36895=>5545,
+23403=>5546,
+24061=>5547,
+25613=>5548,
+33984=>5549,
+36956=>5550,
+39137=>5551,
+29575=>5552,
+63841=>5552,
+63963=>5552,
+23435=>5553,
+24730=>5554,
+26494=>5555,
+28126=>5556,
+35359=>5557,
+35494=>5558,
+36865=>5559,
+38924=>5560,
+21047=>5561,
+28753=>5562,
+30862=>5563,
+37782=>5564,
+34928=>5565,
+37335=>5566,
+20462=>5567,
+21463=>5568,
+22013=>5569,
+22234=>5570,
+22402=>5571,
+22781=>5572,
+23234=>5573,
+23432=>5574,
+23723=>5575,
+23744=>5576,
+24101=>5577,
+24833=>5578,
+25101=>5579,
+12095=>5580,
+25163=>5580,
+25480=>5581,
+25628=>5582,
+25910=>5583,
+25976=>5584,
+63849=>5584,
+27193=>5585,
+27530=>5586,
+12116=>5587,
+27700=>5587,
+27929=>5588,
+28465=>5589,
+29159=>5590,
+29417=>5591,
+29560=>5592,
+29703=>5593,
+29874=>5594,
+30246=>5595,
+30561=>5596,
+31168=>5597,
+31319=>5598,
+31466=>5599,
+31929=>5600,
+32143=>5601,
+32172=>5602,
+32353=>5603,
+32670=>5604,
+33065=>5605,
+33585=>5606,
+33936=>5607,
+34010=>5608,
+34282=>5609,
+34966=>5610,
+35504=>5611,
+35728=>5612,
+36664=>5613,
+36930=>5614,
+36995=>5615,
+37228=>5616,
+37526=>5617,
+37561=>5618,
+38539=>5619,
+38567=>5620,
+38568=>5621,
+38614=>5622,
+38656=>5623,
+38920=>5624,
+12216=>5625,
+39318=>5625,
+39635=>5626,
+39706=>5627,
+21460=>5628,
+22654=>5629,
+22809=>5630,
+23408=>5631,
+23487=>5632,
+28113=>5633,
+28506=>5634,
+29087=>5635,
+29729=>5636,
+29881=>5637,
+32901=>5638,
+33789=>5639,
+24033=>5640,
+24455=>5641,
+24490=>5642,
+24642=>5643,
+26092=>5644,
+26642=>5645,
+26991=>5646,
+27219=>5647,
+27529=>5648,
+27957=>5649,
+28147=>5650,
+29667=>5651,
+30462=>5652,
+30636=>5653,
+31565=>5654,
+32020=>5655,
+33059=>5656,
+33308=>5657,
+33600=>5658,
+34036=>5659,
+34147=>5660,
+35426=>5661,
+35524=>5662,
+37255=>5663,
+37662=>5664,
+38918=>5665,
+39348=>5666,
+25100=>5667,
+34899=>5668,
+36848=>5669,
+37477=>5670,
+23815=>5671,
+23847=>5672,
+23913=>5673,
+29791=>5674,
+33181=>5675,
+34664=>5676,
+28629=>5677,
+25342=>5678,
+63859=>5678,
+32722=>5679,
+35126=>5680,
+35186=>5681,
+19998=>5682,
+20056=>5683,
+20711=>5684,
+21213=>5685,
+21319=>5686,
+25215=>5687,
+26119=>5688,
+32361=>5689,
+34821=>5690,
+38494=>5691,
+20365=>5692,
+21273=>5693,
+22070=>5694,
+22987=>5695,
+23204=>5696,
+12075=>5697,
+23608=>5697,
+23630=>5698,
+23629=>5699,
+24066=>5700,
+24337=>5701,
+24643=>5702,
+26045=>5703,
+26159=>5704,
+26178=>5705,
+26558=>5706,
+26612=>5707,
+29468=>5708,
+12142=>5709,
+30690=>5709,
+12144=>5710,
+31034=>5710,
+32709=>5711,
+33940=>5712,
+33997=>5713,
+35222=>5714,
+35430=>5715,
+35433=>5716,
+35553=>5717,
+12183=>5718,
+35925=>5718,
+35962=>5719,
+22516=>5720,
+23508=>5721,
+24335=>5722,
+24687=>5723,
+25325=>5724,
+26893=>5725,
+27542=>5726,
+28252=>5727,
+29060=>5728,
+31698=>5729,
+34645=>5730,
+35672=>5731,
+63996=>5731,
+36606=>5732,
+12215=>5733,
+39135=>5733,
+39166=>5734,
+20280=>5735,
+20353=>5736,
+20449=>5737,
+21627=>5738,
+23072=>5739,
+23480=>5740,
+24892=>5741,
+26032=>5742,
+26216=>5743,
+29180=>5744,
+30003=>5745,
+31070=>5746,
+32051=>5747,
+33102=>5748,
+12162=>5749,
+33251=>5749,
+33688=>5750,
+34218=>5751,
+34254=>5752,
+34563=>5753,
+35338=>5754,
+12189=>5755,
+36523=>5755,
+12191=>5756,
+36763=>5756,
+36805=>5757,
+22833=>5758,
+23460=>5759,
+23526=>5760,
+24713=>5761,
+23529=>5762,
+23563=>5763,
+12092=>5764,
+24515=>5764,
+27777=>5765,
+28145=>5766,
+28683=>5767,
+29978=>5768,
+33455=>5769,
+35574=>5770,
+20160=>5771,
+63997=>5771,
+12055=>5772,
+21313=>5772,
+38617=>5773,
+12114=>5774,
+27663=>5774,
+20126=>5775,
+20420=>5776,
+20818=>5777,
+21854=>5778,
+23077=>5779,
+23784=>5780,
+25105=>5781,
+12123=>5782,
+29273=>5782,
+33469=>5783,
+33706=>5784,
+34558=>5785,
+34905=>5786,
+35357=>5787,
+38463=>5788,
+38597=>5789,
+39187=>5790,
+40201=>5791,
+40285=>5792,
+22538=>5793,
+23731=>5794,
+23997=>5795,
+24132=>5796,
+24801=>5797,
+63929=>5797,
+24853=>5798,
+25569=>5799,
+27138=>5800,
+63764=>5800,
+63836=>5800,
+63935=>5800,
+28197=>5801,
+37122=>5802,
+37716=>5803,
+38990=>5804,
+39952=>5805,
+40823=>5806,
+23433=>5807,
+23736=>5808,
+25353=>5809,
+26191=>5810,
+26696=>5811,
+30524=>5812,
+38593=>5813,
+38797=>5814,
+38996=>5815,
+39839=>5816,
+26017=>5817,
+35585=>5818,
+36555=>5819,
+38332=>5820,
+21813=>5821,
+23721=>5822,
+24022=>5823,
+24245=>5824,
+26263=>5825,
+30284=>5826,
+33780=>5827,
+38343=>5828,
+22739=>5829,
+25276=>5830,
+29390=>5831,
+40232=>5832,
+20208=>5833,
+22830=>5834,
+24591=>5835,
+26171=>5836,
+27523=>5837,
+31207=>5838,
+40230=>5839,
+21395=>5840,
+21696=>5841,
+22467=>5842,
+23830=>5843,
+24859=>5844,
+26326=>5845,
+28079=>5846,
+30861=>5847,
+33406=>5848,
+38552=>5849,
+38724=>5850,
+21380=>5851,
+25212=>5852,
+25494=>5853,
+28082=>5854,
+32266=>5855,
+33099=>5856,
+38989=>5857,
+27387=>5858,
+32588=>5859,
+40367=>5860,
+40474=>5861,
+20063=>5862,
+20539=>5863,
+20918=>5864,
+22812=>5865,
+24825=>5866,
+25590=>5867,
+26928=>5868,
+29242=>5869,
+32822=>5870,
+37326=>5871,
+24369=>5872,
+32004=>5873,
+33509=>5874,
+63860=>5874,
+33903=>5875,
+33979=>5876,
+34277=>5877,
+36493=>5878,
+20335=>5879,
+22756=>5880,
+23363=>5881,
+24665=>5882,
+25562=>5883,
+25880=>5884,
+25965=>5885,
+26264=>5886,
+26954=>5887,
+27171=>5888,
+27915=>5889,
+28673=>5890,
+29036=>5891,
+30162=>5892,
+30221=>5893,
+31155=>5894,
+31344=>5895,
+12154=>5896,
+32650=>5896,
+35140=>5897,
+35731=>5898,
+37312=>5899,
+38525=>5900,
+39178=>5901,
+22276=>5902,
+24481=>5903,
+26044=>5904,
+28417=>5905,
+30208=>5906,
+31142=>5907,
+35486=>5908,
+39341=>5909,
+12226=>5910,
+39770=>5910,
+40812=>5911,
+20740=>5912,
+25014=>5913,
+25233=>5914,
+27277=>5915,
+33222=>5916,
+20547=>5917,
+22576=>5918,
+24422=>5919,
+28937=>5920,
+12180=>5921,
+35328=>5921,
+35578=>5922,
+23420=>5923,
+34326=>5924,
+20474=>5925,
+20796=>5926,
+22196=>5927,
+22852=>5928,
+25513=>5929,
+28153=>5930,
+23978=>5931,
+26989=>5932,
+20870=>5933,
+20104=>5934,
+20313=>5935,
+22914=>5936,
+27487=>5937,
+27741=>5938,
+29877=>5939,
+30998=>5940,
+33287=>5941,
+33349=>5942,
+33593=>5943,
+36671=>5944,
+36701=>5945,
+39192=>5946,
+20134=>5947,
+22495=>5948,
+24441=>5949,
+26131=>5950,
+63968=>5950,
+30123=>5951,
+32377=>5952,
+35695=>5953,
+36870=>5954,
+39515=>5955,
+22181=>5956,
+22567=>5957,
+23032=>5958,
+23071=>5959,
+23476=>5960,
+24310=>5961,
+25424=>5962,
+25403=>5963,
+26941=>5964,
+27783=>5965,
+27839=>5966,
+28046=>5967,
+28051=>5968,
+28149=>5969,
+28436=>5970,
+28895=>5971,
+28982=>5972,
+29017=>5973,
+29123=>5974,
+29141=>5975,
+30799=>5976,
+30831=>5977,
+31605=>5978,
+32227=>5979,
+32303=>5980,
+34893=>5981,
+36575=>5982,
+37467=>5983,
+40182=>5984,
+24709=>5985,
+28037=>5986,
+29105=>5987,
+38321=>5988,
+21421=>5989,
+26579=>5990,
+28814=>5991,
+28976=>5992,
+29744=>5993,
+33398=>5994,
+33490=>5995,
+38331=>5996,
+39653=>5997,
+40573=>5998,
+26308=>5999,
+29121=>6000,
+33865=>6001,
+63854=>6001,
+22603=>6002,
+23992=>6003,
+24433=>6004,
+26144=>6005,
+26254=>6006,
+27001=>6007,
+27054=>6008,
+27704=>6009,
+27891=>6010,
+28214=>6011,
+28481=>6012,
+28634=>6013,
+28699=>6014,
+28719=>6015,
+29008=>6016,
+29151=>6017,
+29552=>6018,
+29787=>6019,
+29908=>6020,
+30408=>6021,
+31310=>6022,
+32403=>6023,
+33521=>6024,
+35424=>6025,
+36814=>6026,
+37704=>6027,
+38681=>6028,
+20034=>6029,
+20522=>6030,
+21000=>6031,
+21473=>6032,
+26355=>6033,
+27757=>6034,
+28618=>6035,
+29450=>6036,
+30591=>6037,
+31330=>6038,
+33454=>6039,
+34269=>6040,
+34306=>6041,
+35028=>6042,
+35427=>6043,
+35709=>6044,
+35947=>6045,
+37555=>6046,
+38675=>6047,
+38928=>6048,
+20116=>6049,
+20237=>6050,
+20425=>6051,
+20658=>6052,
+21320=>6053,
+21566=>6054,
+21555=>6055,
+21978=>6056,
+22626=>6057,
+22714=>6058,
+22887=>6059,
+23067=>6060,
+23524=>6061,
+24735=>6062,
+25034=>6063,
+25942=>6064,
+26111=>6065,
+26212=>6066,
+26791=>6067,
+27738=>6068,
+28595=>6069,
+28879=>6070,
+29100=>6071,
+29522=>6072,
+31613=>6073,
+34568=>6074,
+35492=>6075,
+39986=>6076,
+40711=>6077,
+23627=>6078,
+27779=>6079,
+29508=>6080,
+12127=>6081,
+29577=>6081,
+37434=>6082,
+28331=>6083,
+29797=>6084,
+30239=>6085,
+31337=>6086,
+32277=>6087,
+34314=>6088,
+20800=>6089,
+22725=>6090,
+25793=>6091,
+29934=>6092,
+29973=>6093,
+30320=>6094,
+32705=>6095,
+37013=>6096,
+38605=>6097,
+39252=>6098,
+28198=>6099,
+12129=>6100,
+29926=>6100,
+31401=>6101,
+31402=>6102,
+33253=>6103,
+34521=>6104,
+34680=>6105,
+35355=>6106,
+23113=>6107,
+23436=>6108,
+23451=>6109,
+26785=>6110,
+26880=>6111,
+28003=>6112,
+29609=>6113,
+29715=>6114,
+29740=>6115,
+30871=>6116,
+32233=>6117,
+32747=>6118,
+33048=>6119,
+33109=>6120,
+33694=>6121,
+35916=>6122,
+38446=>6123,
+63942=>6123,
+38929=>6124,
+12104=>6125,
+26352=>6125,
+24448=>6126,
+26106=>6127,
+26505=>6128,
+27754=>6129,
+29579=>6130,
+20525=>6131,
+23043=>6132,
+27498=>6133,
+30702=>6134,
+22806=>6135,
+23916=>6136,
+24013=>6137,
+29477=>6138,
+30031=>6139,
+20709=>6140,
+20985=>6141,
+22575=>6142,
+22829=>6143,
+22934=>6144,
+23002=>6145,
+23525=>6146,
+23970=>6147,
+25303=>6148,
+25622=>6149,
+25747=>6150,
+25854=>6151,
+26332=>6152,
+27208=>6153,
+29183=>6154,
+29796=>6155,
+31368=>6156,
+31407=>6157,
+32327=>6158,
+32350=>6159,
+32768=>6160,
+33136=>6161,
+34799=>6162,
+35201=>6163,
+35616=>6164,
+36953=>6165,
+36992=>6166,
+39250=>6167,
+24958=>6168,
+27442=>6169,
+28020=>6170,
+32287=>6171,
+35109=>6172,
+36785=>6173,
+20433=>6174,
+20653=>6175,
+20887=>6176,
+21191=>6177,
+22471=>6178,
+22665=>6179,
+23481=>6180,
+24248=>6181,
+24898=>6182,
+27029=>6183,
+28044=>6184,
+28263=>6185,
+28342=>6186,
+29076=>6187,
+29794=>6188,
+12132=>6189,
+29992=>6189,
+29996=>6190,
+32883=>6191,
+33592=>6192,
+33993=>6193,
+36362=>6194,
+37780=>6195,
+37854=>6196,
+20110=>6197,
+20305=>6198,
+20598=>6199,
+20778=>6200,
+12060=>6201,
+21448=>6201,
+21451=>6202,
+21491=>6203,
+23431=>6204,
+23507=>6205,
+23588=>6206,
+24858=>6207,
+24962=>6208,
+26100=>6209,
+12124=>6210,
+29275=>6210,
+29591=>6211,
+29760=>6212,
+30402=>6213,
+31056=>6214,
+31121=>6215,
+31161=>6216,
+32006=>6217,
+12155=>6218,
+32701=>6218,
+33419=>6219,
+34261=>6220,
+34398=>6221,
+36802=>6222,
+36935=>6223,
+37109=>6224,
+37354=>6225,
+38533=>6226,
+12204=>6227,
+38632=>6227,
+38633=>6228,
+21206=>6229,
+24423=>6230,
+26093=>6231,
+26161=>6232,
+26671=>6233,
+29020=>6234,
+31286=>6235,
+37057=>6236,
+38922=>6237,
+20113=>6238,
+27218=>6239,
+27550=>6240,
+28560=>6241,
+29065=>6242,
+32792=>6243,
+33464=>6244,
+34131=>6245,
+36939=>6246,
+38549=>6247,
+38642=>6248,
+38907=>6249,
+34074=>6250,
+39729=>6251,
+20112=>6252,
+29066=>6253,
+38596=>6254,
+20803=>6255,
+21407=>6256,
+21729=>6257,
+22291=>6258,
+22290=>6259,
+22435=>6260,
+23195=>6261,
+23236=>6262,
+23491=>6263,
+24616=>6264,
+24895=>6265,
+25588=>6266,
+27781=>6267,
+27961=>6268,
+28274=>6269,
+28304=>6270,
+29232=>6271,
+29503=>6272,
+29783=>6273,
+33489=>6274,
+34945=>6275,
+36677=>6276,
+36960=>6277,
+38498=>6278,
+39000=>6279,
+40219=>6280,
+12105=>6281,
+26376=>6281,
+36234=>6282,
+37470=>6283,
+20301=>6284,
+20553=>6285,
+20702=>6286,
+21361=>6287,
+22285=>6288,
+22996=>6289,
+23041=>6290,
+23561=>6291,
+24944=>6292,
+26256=>6293,
+28205=>6294,
+29234=>6295,
+29771=>6296,
+32239=>6297,
+32963=>6298,
+33806=>6299,
+33894=>6300,
+34111=>6301,
+34655=>6302,
+34907=>6303,
+35096=>6304,
+35586=>6305,
+36949=>6306,
+12209=>6307,
+38859=>6307,
+39759=>6308,
+20083=>6309,
+20369=>6310,
+20754=>6311,
+20842=>6312,
+21807=>6313,
+21929=>6314,
+23418=>6315,
+23461=>6316,
+24188=>6317,
+24189=>6318,
+24254=>6319,
+24736=>6320,
+24799=>6321,
+24840=>6322,
+24841=>6323,
+25540=>6324,
+25912=>6325,
+26377=>6326,
+26580=>6327,
+26586=>6328,
+26977=>6329,
+26978=>6330,
+27833=>6331,
+27943=>6332,
+28216=>6333,
+28641=>6334,
+29494=>6335,
+29495=>6336,
+29788=>6337,
+30001=>6338,
+30290=>6339,
+32173=>6340,
+33278=>6341,
+33848=>6342,
+35029=>6343,
+35480=>6344,
+35547=>6345,
+35565=>6346,
+36400=>6347,
+36418=>6348,
+36938=>6349,
+36926=>6350,
+36986=>6351,
+12195=>6352,
+37193=>6352,
+37321=>6353,
+37742=>6354,
+22537=>6355,
+27603=>6356,
+12161=>6357,
+32905=>6357,
+32946=>6358,
+20801=>6359,
+22891=>6360,
+23609=>6361,
+28516=>6362,
+29607=>6363,
+32996=>6364,
+36103=>6365,
+37399=>6366,
+38287=>6367,
+12160=>6368,
+32895=>6368,
+25102=>6369,
+28700=>6370,
+32104=>6371,
+34701=>6372,
+22432=>6373,
+24681=>6374,
+24903=>6375,
+27575=>6376,
+35518=>6377,
+37504=>6378,
+38577=>6379,
+12036=>6380,
+20057=>6380,
+21535=>6381,
+28139=>6382,
+34093=>6383,
+38512=>6384,
+12211=>6385,
+38899=>6385,
+39150=>6386,
+25558=>6387,
+27875=>6388,
+12194=>6389,
+37009=>6389,
+20957=>6390,
+25033=>6391,
+33210=>6392,
+40441=>6393,
+20381=>6394,
+20506=>6395,
+20736=>6396,
+23452=>6397,
+24847=>6398,
+25087=>6399,
+25836=>6400,
+26885=>6401,
+27589=>6402,
+30097=>6403,
+30691=>6404,
+32681=>6405,
+33380=>6406,
+34191=>6407,
+34811=>6408,
+12176=>6409,
+34915=>6409,
+35516=>6410,
+35696=>6411,
+37291=>6412,
+12038=>6413,
+20108=>6413,
+20197=>6414,
+20234=>6415,
+22839=>6416,
+23016=>6417,
+24050=>6418,
+24347=>6419,
+24411=>6420,
+24609=>6421,
+29246=>6422,
+29669=>6423,
+30064=>6424,
+63842=>6424,
+30157=>6425,
+31227=>6426,
+12157=>6427,
+32780=>6427,
+12159=>6428,
+32819=>6428,
+32900=>6429,
+33505=>6430,
+33617=>6431,
+36029=>6432,
+36019=>6433,
+36999=>6434,
+39156=>6435,
+39180=>6436,
+28727=>6437,
+30410=>6438,
+32714=>6439,
+32716=>6440,
+32764=>6441,
+35610=>6442,
+12040=>6443,
+20154=>6443,
+20161=>6444,
+20995=>6445,
+21360=>6446,
+21693=>6447,
+63902=>6447,
+22240=>6448,
+23035=>6449,
+23493=>6450,
+24341=>6451,
+24525=>6452,
+28270=>6453,
+32106=>6454,
+33589=>6455,
+34451=>6456,
+35469=>6457,
+38765=>6458,
+38775=>6459,
+12032=>6460,
+19968=>6460,
+20314=>6461,
+20350=>6462,
+22777=>6463,
+12103=>6464,
+26085=>6464,
+28322=>6465,
+36920=>6466,
+37808=>6467,
+39353=>6468,
+20219=>6469,
+22764=>6470,
+22922=>6471,
+23001=>6472,
+24641=>6473,
+31252=>6474,
+33615=>6475,
+36035=>6476,
+12042=>6477,
+20837=>6477,
+21316=>6478,
+20173=>6479,
+21097=>6480,
+23381=>6481,
+33471=>6482,
+20180=>6483,
+21050=>6484,
+63999=>6484,
+21672=>6485,
+22985=>6486,
+23039=>6487,
+12070=>6488,
+23376=>6488,
+23383=>6489,
+23388=>6490,
+24675=>6491,
+24904=>6492,
+28363=>6493,
+28825=>6494,
+63995=>6494,
+29038=>6495,
+29574=>6496,
+29943=>6497,
+30133=>6498,
+30913=>6499,
+32043=>6500,
+32773=>6501,
+12163=>6502,
+33258=>6502,
+33576=>6503,
+34071=>6504,
+34249=>6505,
+35566=>6506,
+36039=>6507,
+38604=>6508,
+20316=>6509,
+21242=>6510,
+22204=>6511,
+26027=>6512,
+26152=>6513,
+28796=>6514,
+28856=>6515,
+29237=>6516,
+32189=>6517,
+33421=>6518,
+37196=>6519,
+38592=>6520,
+40306=>6521,
+23409=>6522,
+26855=>6523,
+27544=>6524,
+28538=>6525,
+30430=>6526,
+23697=>6527,
+26283=>6528,
+28507=>6529,
+31668=>6530,
+31786=>6531,
+34870=>6532,
+38620=>6533,
+19976=>6534,
+20183=>6535,
+21280=>6536,
+22580=>6537,
+22715=>6538,
+22767=>6539,
+22892=>6540,
+23559=>6541,
+24115=>6542,
+24196=>6543,
+24373=>6544,
+25484=>6545,
+26290=>6546,
+26454=>6547,
+27167=>6548,
+27299=>6549,
+27404=>6550,
+28479=>6551,
+29254=>6552,
+29520=>6553,
+29835=>6554,
+31456=>6555,
+31911=>6556,
+33144=>6557,
+33247=>6558,
+33255=>6559,
+33674=>6560,
+33900=>6561,
+34083=>6562,
+34196=>6563,
+34255=>6564,
+35037=>6565,
+36115=>6566,
+37292=>6567,
+12199=>6568,
+38263=>6568,
+38556=>6569,
+20877=>6570,
+21705=>6571,
+22312=>6572,
+23472=>6573,
+25165=>6574,
+26448=>6575,
+26685=>6576,
+26771=>6577,
+28221=>6578,
+28371=>6579,
+28797=>6580,
+32289=>6581,
+35009=>6582,
+36001=>6583,
+36617=>6584,
+40779=>6585,
+40782=>6586,
+29229=>6587,
+31631=>6588,
+35533=>6589,
+37658=>6590,
+20295=>6591,
+20302=>6592,
+20786=>6593,
+21632=>6594,
+22992=>6595,
+24213=>6596,
+25269=>6597,
+26485=>6598,
+26990=>6599,
+27159=>6600,
+27822=>6601,
+28186=>6602,
+29401=>6603,
+29482=>6604,
+30141=>6605,
+31672=>6606,
+32053=>6607,
+33511=>6608,
+33785=>6609,
+33879=>6610,
+34295=>6611,
+35419=>6612,
+36015=>6613,
+36487=>6614,
+36889=>6615,
+37048=>6616,
+38606=>6617,
+40799=>6618,
+21219=>6619,
+21514=>6620,
+23265=>6621,
+23490=>6622,
+25688=>6623,
+25973=>6624,
+28404=>6625,
+29380=>6626,
+30340=>6627,
+31309=>6628,
+31515=>6629,
+31821=>6630,
+32318=>6631,
+32735=>6632,
+33659=>6633,
+35627=>6634,
+36042=>6635,
+12186=>6636,
+36196=>6636,
+36321=>6637,
+36447=>6638,
+36842=>6639,
+36857=>6640,
+36969=>6641,
+37841=>6642,
+20291=>6643,
+20346=>6644,
+20659=>6645,
+20840=>6646,
+20856=>6647,
+21069=>6648,
+21098=>6649,
+22625=>6650,
+22652=>6651,
+22880=>6652,
+23560=>6653,
+23637=>6654,
+24283=>6655,
+24731=>6656,
+25136=>6657,
+26643=>6658,
+27583=>6659,
+27656=>6660,
+28593=>6661,
+29006=>6662,
+29728=>6663,
+12133=>6664,
+30000=>6664,
+30008=>6665,
+30033=>6666,
+30322=>6667,
+31564=>6668,
+31627=>6669,
+31661=>6670,
+31686=>6671,
+32399=>6672,
+35438=>6673,
+36670=>6674,
+36681=>6675,
+37439=>6676,
+37523=>6677,
+37666=>6678,
+37931=>6679,
+38651=>6680,
+39002=>6681,
+39019=>6682,
+39198=>6683,
+20999=>6684,
+64000=>6684,
+25130=>6685,
+25240=>6686,
+27993=>6687,
+30308=>6688,
+31434=>6689,
+31680=>6690,
+32118=>6691,
+21344=>6692,
+23742=>6693,
+24215=>6694,
+28472=>6695,
+28857=>6696,
+31896=>6697,
+38673=>6698,
+39822=>6699,
+40670=>6700,
+25509=>6701,
+25722=>6702,
+34678=>6703,
+19969=>6704,
+20117=>6705,
+20141=>6706,
+20572=>6707,
+20597=>6708,
+21576=>6709,
+22979=>6710,
+23450=>6711,
+24128=>6712,
+24237=>6713,
+24311=>6714,
+24449=>6715,
+24773=>6716,
+25402=>6717,
+25919=>6718,
+25972=>6719,
+26060=>6720,
+26230=>6721,
+26232=>6722,
+26622=>6723,
+26984=>6724,
+27273=>6725,
+27491=>6726,
+27712=>6727,
+28096=>6728,
+28136=>6729,
+28191=>6730,
+28254=>6731,
+28702=>6732,
+28833=>6733,
+29582=>6734,
+29693=>6735,
+30010=>6736,
+30555=>6737,
+30855=>6738,
+31118=>6739,
+31243=>6740,
+31357=>6741,
+31934=>6742,
+32142=>6743,
+33351=>6744,
+35330=>6745,
+35562=>6746,
+35998=>6747,
+37165=>6748,
+37194=>6749,
+37336=>6750,
+37478=>6751,
+37580=>6752,
+37664=>6753,
+38662=>6754,
+38742=>6755,
+38748=>6756,
+38914=>6757,
+12237=>6758,
+40718=>6758,
+21046=>6759,
+21137=>6760,
+21884=>6761,
+22564=>6762,
+24093=>6763,
+24351=>6764,
+24716=>6765,
+25552=>6766,
+26799=>6767,
+28639=>6768,
+31085=>6769,
+31532=>6770,
+33229=>6771,
+34234=>6772,
+35069=>6773,
+35576=>6774,
+36420=>6775,
+37261=>6776,
+38500=>6777,
+38555=>6778,
+38717=>6779,
+38988=>6780,
+12241=>6781,
+40778=>6781,
+20430=>6782,
+20806=>6783,
+20939=>6784,
+21161=>6785,
+22066=>6786,
+24340=>6787,
+24427=>6788,
+25514=>6789,
+25805=>6790,
+26089=>6791,
+26177=>6792,
+26362=>6793,
+26361=>6794,
+26397=>6795,
+26781=>6796,
+26839=>6797,
+27133=>6798,
+28437=>6799,
+28526=>6800,
+29031=>6801,
+29157=>6802,
+12118=>6803,
+29226=>6803,
+29866=>6804,
+30522=>6805,
+31062=>6806,
+31066=>6807,
+31199=>6808,
+31264=>6809,
+31381=>6810,
+31895=>6811,
+31967=>6812,
+32068=>6813,
+32368=>6814,
+32903=>6815,
+34299=>6816,
+34468=>6817,
+35412=>6818,
+35519=>6819,
+36249=>6820,
+36481=>6821,
+36896=>6822,
+36973=>6823,
+37347=>6824,
+38459=>6825,
+38613=>6826,
+12227=>6827,
+40165=>6827,
+26063=>6828,
+31751=>6829,
+12188=>6830,
+36275=>6830,
+37827=>6831,
+23384=>6832,
+23562=>6833,
+21330=>6834,
+25305=>6835,
+29469=>6836,
+20519=>6837,
+23447=>6838,
+24478=>6839,
+24752=>6840,
+24939=>6841,
+26837=>6842,
+28121=>6843,
+29742=>6844,
+31278=>6845,
+32066=>6846,
+32156=>6847,
+32305=>6848,
+33131=>6849,
+36394=>6850,
+36405=>6851,
+37758=>6852,
+37912=>6853,
+20304=>6854,
+22352=>6855,
+24038=>6856,
+24231=>6857,
+25387=>6858,
+32618=>6859,
+20027=>6860,
+20303=>6861,
+20367=>6862,
+20570=>6863,
+23005=>6864,
+32964=>6865,
+21610=>6866,
+21608=>6867,
+22014=>6868,
+22863=>6869,
+23449=>6870,
+24030=>6871,
+24282=>6872,
+26205=>6873,
+26417=>6874,
+26609=>6875,
+26666=>6876,
+27880=>6877,
+27954=>6878,
+28234=>6879,
+28557=>6880,
+28855=>6881,
+29664=>6882,
+30087=>6883,
+31820=>6884,
+32002=>6885,
+32044=>6886,
+32162=>6887,
+12168=>6888,
+33311=>6888,
+34523=>6889,
+35387=>6890,
+35461=>6891,
+12187=>6892,
+36208=>6892,
+36490=>6893,
+36659=>6894,
+36913=>6895,
+37198=>6896,
+37202=>6897,
+37956=>6898,
+39376=>6899,
+12149=>6900,
+31481=>6900,
+31909=>6901,
+20426=>6902,
+20737=>6903,
+20934=>6904,
+22472=>6905,
+23535=>6906,
+23803=>6907,
+26201=>6908,
+27197=>6909,
+27994=>6910,
+28310=>6911,
+28652=>6912,
+28940=>6913,
+30063=>6914,
+31459=>6915,
+34850=>6916,
+36897=>6917,
+36981=>6918,
+38603=>6919,
+39423=>6920,
+33537=>6921,
+20013=>6922,
+20210=>6923,
+34886=>6924,
+37325=>6925,
+21373=>6926,
+27355=>6927,
+26987=>6928,
+27713=>6929,
+33914=>6930,
+22686=>6931,
+24974=>6932,
+26366=>6933,
+25327=>6934,
+28893=>6935,
+29969=>6936,
+30151=>6937,
+32338=>6938,
+33976=>6939,
+35657=>6940,
+36104=>6941,
+20043=>6942,
+21482=>6943,
+21675=>6944,
+22320=>6945,
+22336=>6946,
+24535=>6947,
+25345=>6948,
+25351=>6949,
+25711=>6950,
+12096=>6951,
+25903=>6951,
+26088=>6952,
+26234=>6953,
+26525=>6954,
+26547=>6955,
+12108=>6956,
+27490=>6956,
+27744=>6957,
+27802=>6958,
+28460=>6959,
+30693=>6960,
+30757=>6961,
+31049=>6962,
+31063=>6963,
+32025=>6964,
+32930=>6965,
+33026=>6966,
+12164=>6967,
+33267=>6967,
+33437=>6968,
+33463=>6969,
+34584=>6970,
+35468=>6971,
+36100=>6972,
+36286=>6973,
+36978=>6974,
+30452=>6975,
+31257=>6976,
+31287=>6977,
+32340=>6978,
+32887=>6979,
+21767=>6980,
+21972=>6981,
+22645=>6982,
+25391=>6983,
+25634=>6984,
+26185=>6985,
+26187=>6986,
+26733=>6987,
+27035=>6988,
+27524=>6989,
+27941=>6990,
+28337=>6991,
+29645=>6992,
+29800=>6993,
+29857=>6994,
+30043=>6995,
+30137=>6996,
+30433=>6997,
+30494=>6998,
+30603=>6999,
+31206=>7000,
+32265=>7001,
+32285=>7002,
+33275=>7003,
+34095=>7004,
+34967=>7005,
+35386=>7006,
+36049=>7007,
+36587=>7008,
+12192=>7009,
+36784=>7009,
+63857=>7009,
+36914=>7010,
+37805=>7011,
+38499=>7012,
+38515=>7013,
+38663=>7014,
+20356=>7015,
+21489=>7016,
+23018=>7017,
+23241=>7018,
+24089=>7019,
+26702=>7020,
+29894=>7021,
+30142=>7022,
+31209=>7023,
+31378=>7024,
+33187=>7025,
+34541=>7026,
+36074=>7027,
+36300=>7028,
+36845=>7029,
+26015=>7030,
+26389=>7031,
+22519=>7032,
+28503=>7033,
+32221=>7034,
+36655=>7035,
+37878=>7036,
+38598=>7037,
+24501=>7038,
+25074=>7039,
+28548=>7040,
+19988=>7041,
+20376=>7042,
+20511=>7043,
+21449=>7044,
+21983=>7045,
+23919=>7046,
+24046=>7047,
+27425=>7048,
+27492=>7049,
+30923=>7050,
+31642=>7051,
+36425=>7052,
+12190=>7053,
+36554=>7053,
+63746=>7053,
+36974=>7054,
+25417=>7055,
+25662=>7056,
+30528=>7057,
+31364=>7058,
+37679=>7059,
+38015=>7060,
+40810=>7061,
+25776=>7062,
+28591=>7063,
+29158=>7064,
+29864=>7065,
+29914=>7066,
+31428=>7067,
+31762=>7068,
+32386=>7069,
+31922=>7070,
+32408=>7071,
+35738=>7072,
+36106=>7073,
+38013=>7074,
+39184=>7075,
+39244=>7076,
+21049=>7077,
+23519=>7078,
+25830=>7079,
+26413=>7080,
+32046=>7081,
+20717=>7082,
+21443=>7083,
+63851=>7083,
+22649=>7084,
+24920=>7085,
+24921=>7086,
+25082=>7087,
+26028=>7088,
+31449=>7089,
+35730=>7090,
+35734=>7091,
+20489=>7092,
+20513=>7093,
+21109=>7094,
+21809=>7095,
+23100=>7096,
+24288=>7097,
+24432=>7098,
+24884=>7099,
+25950=>7100,
+26124=>7101,
+26166=>7102,
+26274=>7103,
+27085=>7104,
+28356=>7105,
+28466=>7106,
+29462=>7107,
+30241=>7108,
+31379=>7109,
+33081=>7110,
+33369=>7111,
+33750=>7112,
+33980=>7113,
+20661=>7114,
+22512=>7115,
+23488=>7116,
+23528=>7117,
+24425=>7118,
+25505=>7119,
+30758=>7120,
+32181=>7121,
+33756=>7122,
+34081=>7123,
+37319=>7124,
+37365=>7125,
+20874=>7126,
+26613=>7127,
+31574=>7128,
+36012=>7129,
+20932=>7130,
+22971=>7131,
+24765=>7132,
+34389=>7133,
+20508=>7134,
+21076=>7135,
+23610=>7136,
+24957=>7137,
+25114=>7138,
+25299=>7139,
+64002=>7139,
+25842=>7140,
+26021=>7141,
+28364=>7142,
+30240=>7143,
+33034=>7144,
+36448=>7145,
+38495=>7146,
+38587=>7147,
+20191=>7148,
+21315=>7149,
+21912=>7150,
+22825=>7151,
+24029=>7152,
+25797=>7153,
+27849=>7154,
+28154=>7155,
+29588=>7156,
+31359=>7157,
+12167=>7158,
+33307=>7158,
+34214=>7159,
+36068=>7160,
+36368=>7161,
+36983=>7162,
+37351=>7163,
+38369=>7164,
+38433=>7165,
+38854=>7166,
+20984=>7167,
+21746=>7168,
+21894=>7169,
+24505=>7170,
+25764=>7171,
+28552=>7172,
+32180=>7173,
+36639=>7174,
+36685=>7175,
+37941=>7176,
+20681=>7177,
+23574=>7178,
+27838=>7179,
+28155=>7180,
+29979=>7181,
+30651=>7182,
+31805=>7183,
+31844=>7184,
+35449=>7185,
+35522=>7186,
+22558=>7187,
+22974=>7188,
+24086=>7189,
+25463=>7190,
+29266=>7191,
+30090=>7192,
+30571=>7193,
+35548=>7194,
+36028=>7195,
+36626=>7196,
+24307=>7197,
+26228=>7198,
+28152=>7199,
+32893=>7200,
+33729=>7201,
+35531=>7202,
+12205=>7203,
+38737=>7203,
+39894=>7204,
+21059=>7205,
+26367=>7206,
+28053=>7207,
+28399=>7208,
+32224=>7209,
+35558=>7210,
+36910=>7211,
+36958=>7212,
+39636=>7213,
+21021=>7214,
+21119=>7215,
+21736=>7216,
+24980=>7217,
+25220=>7218,
+25307=>7219,
+26786=>7220,
+26898=>7221,
+26970=>7222,
+27189=>7223,
+28818=>7224,
+28966=>7225,
+30813=>7226,
+30977=>7227,
+30990=>7228,
+31186=>7229,
+31245=>7230,
+32918=>7231,
+12171=>7232,
+33400=>7232,
+33493=>7233,
+33609=>7234,
+34121=>7235,
+35970=>7236,
+36229=>7237,
+37218=>7238,
+37259=>7239,
+37294=>7240,
+20419=>7241,
+22225=>7242,
+29165=>7243,
+30679=>7244,
+34560=>7245,
+35320=>7246,
+12072=>7247,
+23544=>7247,
+24534=>7248,
+26449=>7249,
+37032=>7250,
+21474=>7251,
+22618=>7252,
+23541=>7253,
+24740=>7254,
+24961=>7255,
+25696=>7256,
+32317=>7257,
+32880=>7258,
+34085=>7259,
+37507=>7260,
+25774=>7261,
+20652=>7262,
+23828=>7263,
+26368=>7264,
+22684=>7265,
+25277=>7266,
+25512=>7267,
+26894=>7268,
+27000=>7269,
+27166=>7270,
+28267=>7271,
+30394=>7272,
+31179=>7273,
+33467=>7274,
+33833=>7275,
+35535=>7276,
+36264=>7277,
+36861=>7278,
+37138=>7279,
+37195=>7280,
+37276=>7281,
+37648=>7282,
+37656=>7283,
+37786=>7284,
+38619=>7285,
+39478=>7286,
+39949=>7287,
+19985=>7288,
+30044=>7289,
+31069=>7290,
+31482=>7291,
+31569=>7292,
+31689=>7293,
+32302=>7294,
+33988=>7295,
+36441=>7296,
+36468=>7297,
+36600=>7298,
+36880=>7299,
+26149=>7300,
+26943=>7301,
+29763=>7302,
+20986=>7303,
+26414=>7304,
+40668=>7305,
+20805=>7306,
+24544=>7307,
+27798=>7308,
+34802=>7309,
+34909=>7310,
+34935=>7311,
+24756=>7312,
+33205=>7313,
+33795=>7314,
+36101=>7315,
+21462=>7316,
+21561=>7317,
+22068=>7318,
+23094=>7319,
+23601=>7320,
+28810=>7321,
+32736=>7322,
+32858=>7323,
+33030=>7324,
+33261=>7325,
+36259=>7326,
+37257=>7327,
+39519=>7328,
+40434=>7329,
+20596=>7330,
+20164=>7331,
+21408=>7332,
+24827=>7333,
+28204=>7334,
+23652=>7335,
+20360=>7336,
+20516=>7337,
+21988=>7338,
+23769=>7339,
+24159=>7340,
+24677=>7341,
+26772=>7342,
+27835=>7343,
+28100=>7344,
+29118=>7345,
+30164=>7346,
+30196=>7347,
+30305=>7348,
+31258=>7349,
+31305=>7350,
+32199=>7351,
+32251=>7352,
+32622=>7353,
+33268=>7354,
+34473=>7355,
+36636=>7356,
+38601=>7357,
+39347=>7358,
+12242=>7359,
+40786=>7359,
+21063=>7360,
+21189=>7361,
+39149=>7362,
+35242=>7363,
+19971=>7364,
+26578=>7365,
+28422=>7366,
+20405=>7367,
+23522=>7368,
+26517=>7369,
+27784=>7370,
+63858=>7370,
+28024=>7371,
+29723=>7372,
+30759=>7373,
+37341=>7374,
+37756=>7375,
+34756=>7376,
+31204=>7377,
+31281=>7378,
+24555=>7379,
+20182=>7380,
+21668=>7381,
+21822=>7382,
+22702=>7383,
+22949=>7384,
+24816=>7385,
+25171=>7386,
+25302=>7387,
+26422=>7388,
+26965=>7389,
+33333=>7390,
+38464=>7391,
+39345=>7392,
+39389=>7393,
+20524=>7394,
+21331=>7395,
+21828=>7396,
+22396=>7397,
+25176=>7398,
+25826=>7399,
+26219=>7400,
+26589=>7401,
+28609=>7402,
+28655=>7403,
+29730=>7404,
+29752=>7405,
+35351=>7406,
+37944=>7407,
+21585=>7408,
+22022=>7409,
+22374=>7410,
+24392=>7411,
+24986=>7412,
+27470=>7413,
+28760=>7414,
+28845=>7415,
+32187=>7416,
+35477=>7417,
+22890=>7418,
+33067=>7419,
+25506=>7420,
+30472=>7421,
+32829=>7422,
+36010=>7423,
+22612=>7424,
+25645=>7425,
+27067=>7426,
+23445=>7427,
+24081=>7428,
+28271=>7429,
+34153=>7430,
+20812=>7431,
+21488=>7432,
+22826=>7433,
+24608=>7434,
+24907=>7435,
+27526=>7436,
+27760=>7437,
+27888=>7438,
+31518=>7439,
+32974=>7440,
+33492=>7441,
+36294=>7442,
+37040=>7443,
+39089=>7444,
+25799=>7445,
+28580=>7446,
+25745=>7447,
+25860=>7448,
+20814=>7449,
+21520=>7450,
+12063=>7451,
+22303=>7451,
+35342=>7452,
+24927=>7453,
+26742=>7454,
+30171=>7455,
+31570=>7456,
+32113=>7457,
+36890=>7458,
+22534=>7459,
+27084=>7460,
+33151=>7461,
+35114=>7462,
+36864=>7463,
+38969=>7464,
+20600=>7465,
+22871=>7466,
+22956=>7467,
+25237=>7468,
+36879=>7469,
+39722=>7470,
+24925=>7471,
+29305=>7472,
+38358=>7473,
+22369=>7474,
+23110=>7475,
+24052=>7476,
+25226=>7477,
+25773=>7478,
+25850=>7479,
+26487=>7480,
+27874=>7481,
+27966=>7482,
+29228=>7483,
+29750=>7484,
+30772=>7485,
+32631=>7486,
+33453=>7487,
+36315=>7488,
+38935=>7489,
+21028=>7490,
+22338=>7491,
+26495=>7492,
+29256=>7493,
+29923=>7494,
+36009=>7495,
+36774=>7496,
+37393=>7497,
+38442=>7498,
+12043=>7499,
+20843=>7499,
+21485=>7500,
+25420=>7501,
+20329=>7502,
+21764=>7503,
+24726=>7504,
+25943=>7505,
+27803=>7506,
+28031=>7507,
+29260=>7508,
+29437=>7509,
+31255=>7510,
+35207=>7511,
+12185=>7512,
+35997=>7512,
+24429=>7513,
+28558=>7514,
+28921=>7515,
+33192=>7516,
+24846=>7517,
+20415=>7518,
+63845=>7518,
+20559=>7519,
+25153=>7520,
+12122=>7521,
+29255=>7521,
+31687=>7522,
+32232=>7523,
+32745=>7524,
+36941=>7525,
+38829=>7526,
+39449=>7527,
+36022=>7528,
+22378=>7529,
+24179=>7530,
+26544=>7531,
+33805=>7532,
+35413=>7533,
+21536=>7534,
+23318=>7535,
+24163=>7536,
+24290=>7537,
+24330=>7538,
+25987=>7539,
+32954=>7540,
+34109=>7541,
+38281=>7542,
+38491=>7543,
+20296=>7544,
+21253=>7545,
+21261=>7546,
+21263=>7547,
+21638=>7548,
+21754=>7549,
+22275=>7550,
+24067=>7551,
+24598=>7552,
+25243=>7553,
+25265=>7554,
+25429=>7555,
+27873=>7556,
+28006=>7557,
+30129=>7558,
+30770=>7559,
+32990=>7560,
+33071=>7561,
+33502=>7562,
+33889=>7563,
+33970=>7564,
+34957=>7565,
+35090=>7566,
+36875=>7567,
+37610=>7568,
+39165=>7569,
+39825=>7570,
+24133=>7571,
+26292=>7572,
+64006=>7572,
+26333=>7573,
+28689=>7574,
+29190=>7575,
+20469=>7576,
+21117=>7577,
+24426=>7578,
+24915=>7579,
+26451=>7580,
+27161=>7581,
+28418=>7582,
+29922=>7583,
+31080=>7584,
+34920=>7585,
+35961=>7586,
+39111=>7587,
+39108=>7588,
+39491=>7589,
+21697=>7590,
+31263=>7591,
+26963=>7592,
+35575=>7593,
+35914=>7594,
+12213=>7595,
+39080=>7595,
+39342=>7596,
+24444=>7597,
+25259=>7598,
+30130=>7599,
+12138=>7600,
+30382=>7600,
+34987=>7601,
+36991=>7602,
+38466=>7603,
+21305=>7604,
+24380=>7605,
+24517=>7606,
+27852=>7607,
+63848=>7607,
+29644=>7608,
+30050=>7609,
+12134=>7610,
+30091=>7610,
+31558=>7611,
+33534=>7612,
+39325=>7613,
+20047=>7614,
+36924=>7615,
+19979=>7616,
+20309=>7617,
+21414=>7618,
+22799=>7619,
+24264=>7620,
+26160=>7621,
+27827=>7622,
+29781=>7623,
+33655=>7624,
+34662=>7625,
+36032=>7626,
+36944=>7627,
+38686=>7628,
+39957=>7629,
+22737=>7630,
+23416=>7631,
+34384=>7632,
+35604=>7633,
+40372=>7634,
+23506=>7635,
+24680=>7636,
+24717=>7637,
+26097=>7638,
+27735=>7639,
+28450=>7640,
+28579=>7641,
+28698=>7642,
+32597=>7643,
+32752=>7644,
+38289=>7645,
+38290=>7646,
+38480=>7647,
+38867=>7648,
+21106=>7649,
+36676=>7650,
+20989=>7651,
+21547=>7652,
+21688=>7653,
+21859=>7654,
+21898=>7655,
+27323=>7656,
+28085=>7657,
+32216=>7658,
+33382=>7659,
+37532=>7660,
+38519=>7661,
+40569=>7662,
+21512=>7663,
+21704=>7664,
+30418=>7665,
+34532=>7666,
+38308=>7667,
+38356=>7668,
+38492=>7669,
+20130=>7670,
+20233=>7671,
+23022=>7672,
+23270=>7673,
+24055=>7674,
+24658=>7675,
+25239=>7676,
+26477=>7677,
+26689=>7678,
+27782=>7679,
+28207=>7680,
+32568=>7681,
+32923=>7682,
+33322=>7683,
+38917=>7684,
+20133=>7685,
+20565=>7686,
+21683=>7687,
+22419=>7688,
+22874=>7689,
+23401=>7690,
+23475=>7691,
+25032=>7692,
+26999=>7693,
+28023=>7694,
+28707=>7695,
+34809=>7696,
+35299=>7697,
+35442=>7698,
+35559=>7699,
+36994=>7700,
+39405=>7701,
+39608=>7702,
+21182=>7703,
+26680=>7704,
+20502=>7705,
+24184=>7706,
+26447=>7707,
+33607=>7708,
+12175=>7709,
+34892=>7709,
+64008=>7709,
+20139=>7710,
+21521=>7711,
+22190=>7712,
+29670=>7713,
+37141=>7714,
+38911=>7715,
+39177=>7716,
+39255=>7717,
+12217=>7718,
+39321=>7718,
+22099=>7719,
+22687=>7720,
+34395=>7721,
+35377=>7722,
+25010=>7723,
+27382=>7724,
+29563=>7725,
+36562=>7726,
+27463=>7727,
+38570=>7728,
+39511=>7729,
+22869=>7730,
+29184=>7731,
+36203=>7732,
+12208=>7733,
+38761=>7733,
+20436=>7734,
+23796=>7735,
+24358=>7736,
+25080=>7737,
+26203=>7738,
+27883=>7739,
+28843=>7740,
+12126=>7741,
+29572=>7741,
+29625=>7742,
+29694=>7743,
+30505=>7744,
+30541=>7745,
+32067=>7746,
+32098=>7747,
+32291=>7748,
+33335=>7749,
+34898=>7750,
+36066=>7751,
+37449=>7752,
+39023=>7753,
+23377=>7754,
+12147=>7755,
+31348=>7755,
+12174=>7756,
+34880=>7756,
+12212=>7757,
+38913=>7757,
+23244=>7758,
+20448=>7759,
+21332=>7760,
+22846=>7761,
+23805=>7762,
+25406=>7763,
+28025=>7764,
+29433=>7765,
+33029=>7766,
+33031=>7767,
+33698=>7768,
+37583=>7769,
+38960=>7770,
+20136=>7771,
+20804=>7772,
+21009=>7773,
+22411=>7774,
+24418=>7775,
+27842=>7776,
+28366=>7777,
+28677=>7778,
+28752=>7779,
+28847=>7780,
+29074=>7781,
+29673=>7782,
+29801=>7783,
+63918=>7783,
+33610=>7784,
+34722=>7785,
+34913=>7786,
+36872=>7787,
+37026=>7788,
+37795=>7789,
+39336=>7790,
+20846=>7791,
+24407=>7792,
+24800=>7793,
+24935=>7794,
+26291=>7795,
+34137=>7796,
+36426=>7797,
+37295=>7798,
+38795=>7799,
+20046=>7800,
+20114=>7801,
+21628=>7802,
+22741=>7803,
+22778=>7804,
+22909=>7805,
+23733=>7806,
+24359=>7807,
+12094=>7808,
+25142=>7808,
+25160=>7809,
+26122=>7810,
+26215=>7811,
+27627=>7812,
+28009=>7813,
+28111=>7814,
+28246=>7815,
+28408=>7816,
+28564=>7817,
+28640=>7818,
+28649=>7819,
+28765=>7820,
+29392=>7821,
+29733=>7822,
+29786=>7823,
+29920=>7824,
+30355=>7825,
+31068=>7826,
+31946=>7827,
+32286=>7828,
+32993=>7829,
+33446=>7830,
+33899=>7831,
+33983=>7832,
+34382=>7833,
+34399=>7834,
+34676=>7835,
+35703=>7836,
+35946=>7837,
+37804=>7838,
+38912=>7839,
+39013=>7840,
+24785=>7841,
+25110=>7842,
+37239=>7843,
+23130=>7844,
+26127=>7845,
+28151=>7846,
+28222=>7847,
+29759=>7848,
+39746=>7849,
+24573=>7850,
+24794=>7851,
+31503=>7852,
+21700=>7853,
+24344=>7854,
+27742=>7855,
+27859=>7856,
+27946=>7857,
+28888=>7858,
+32005=>7859,
+34425=>7860,
+35340=>7861,
+40251=>7862,
+21270=>7863,
+21644=>7864,
+23301=>7865,
+27194=>7866,
+12117=>7867,
+28779=>7867,
+30069=>7868,
+31117=>7869,
+12146=>7870,
+31166=>7870,
+33457=>7871,
+33775=>7872,
+35441=>7873,
+35649=>7874,
+36008=>7875,
+38772=>7876,
+25844=>7877,
+25899=>7878,
+30906=>7879,
+30907=>7880,
+31339=>7881,
+20024=>7882,
+21914=>7883,
+22864=>7884,
+23462=>7885,
+24187=>7886,
+24739=>7887,
+25563=>7888,
+27489=>7889,
+26213=>7890,
+26707=>7891,
+28185=>7892,
+29029=>7893,
+29872=>7894,
+32008=>7895,
+36996=>7896,
+39529=>7897,
+39973=>7898,
+27963=>7899,
+28369=>7900,
+63748=>7900,
+29502=>7901,
+35905=>7902,
+38346=>7903,
+20976=>7904,
+24140=>7905,
+24488=>7906,
+24653=>7907,
+24822=>7908,
+24880=>7909,
+24908=>7910,
+26179=>7911,
+26180=>7912,
+27045=>7913,
+27841=>7914,
+28255=>7915,
+28361=>7916,
+28514=>7917,
+29004=>7918,
+29852=>7919,
+30343=>7920,
+31681=>7921,
+31783=>7922,
+33618=>7923,
+34647=>7924,
+36945=>7925,
+38541=>7926,
+12232=>7927,
+40643=>7927,
+21295=>7928,
+22238=>7929,
+24315=>7930,
+24458=>7931,
+24674=>7932,
+24724=>7933,
+25079=>7934,
+26214=>7935,
+26371=>7936,
+27292=>7937,
+28142=>7938,
+28590=>7939,
+28784=>7940,
+29546=>7941,
+32362=>7942,
+33214=>7943,
+33588=>7944,
+34516=>7945,
+35496=>7946,
+36036=>7947,
+21123=>7948,
+29554=>7949,
+23446=>7950,
+27243=>7951,
+37892=>7952,
+21742=>7953,
+22150=>7954,
+23389=>7955,
+25928=>7956,
+25989=>7957,
+26313=>7958,
+26783=>7959,
+28045=>7960,
+28102=>7961,
+12120=>7962,
+29243=>7962,
+32948=>7963,
+37237=>7964,
+39501=>7965,
+20399=>7966,
+20505=>7967,
+21402=>7968,
+21518=>7969,
+21564=>7970,
+21897=>7971,
+21957=>7972,
+24127=>7973,
+24460=>7974,
+26429=>7975,
+29030=>7976,
+29661=>7977,
+36869=>7978,
+21211=>7979,
+21235=>7980,
+22628=>7981,
+22734=>7982,
+28932=>7983,
+29071=>7984,
+29179=>7985,
+34224=>7986,
+35347=>7987,
+26248=>7988,
+63941=>7988,
+34216=>7989,
+21927=>7990,
+26244=>7991,
+29002=>7992,
+33841=>7993,
+21321=>7994,
+21913=>7995,
+27585=>7996,
+24409=>7997,
+24509=>7998,
+25582=>7999,
+26249=>8000,
+28999=>8001,
+35569=>8002,
+36637=>8003,
+40638=>8004,
+20241=>8005,
+25658=>8006,
+28875=>8007,
+30054=>8008,
+34407=>8009,
+24676=>8010,
+35662=>8011,
+40440=>8012,
+20807=>8013,
+20982=>8014,
+21256=>8015,
+27958=>8016,
+33016=>8017,
+12234=>8018,
+40657=>8018,
+26133=>8019,
+27427=>8020,
+28824=>8021,
+30165=>8022,
+21507=>8023,
+23673=>8024,
+32007=>8025,
+35350=>8026,
+12107=>8027,
+27424=>8027,
+27453=>8028,
+27462=>8029,
+21560=>8030,
+24688=>8031,
+27965=>8032,
+32725=>8033,
+33288=>8034,
+20694=>8035,
+20958=>8036,
+21916=>8037,
+22123=>8038,
+22221=>8039,
+23020=>8040,
+23305=>8041,
+24076=>8042,
+24985=>8043,
+24984=>8044,
+25137=>8045,
+26206=>8046,
+26342=>8047,
+29081=>8048,
+29113=>8049,
+29114=>8050,
+29351=>8051,
+31143=>8052,
+31232=>8053,
+32690=>8054,
+35440=>8055,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+12310=>8219,
+12311=>8220,
+12312=>8221,
+12313=>8222,
+8223=>8237,
+8219=>8238,
+8314=>8239,
+8315=>8240,
+8316=>8248,
+8317=>8250,
+8318=>8251,
+700=>8275,
+8942=>8320,
+8759=>8321,
+10122=>8342,
+10123=>8343,
+10124=>8344,
+10125=>8345,
+10126=>8346,
+10127=>8347,
+10128=>8348,
+10129=>8349,
+10130=>8350,
+10131=>8351,
+9398=>8388,
+9399=>8389,
+9400=>8390,
+9401=>8391,
+9402=>8392,
+9403=>8393,
+9404=>8394,
+9405=>8395,
+9406=>8396,
+9407=>8397,
+9408=>8398,
+9409=>8399,
+9410=>8400,
+9411=>8401,
+9412=>8402,
+9413=>8403,
+9414=>8404,
+9415=>8405,
+9416=>8406,
+9417=>8407,
+9418=>8408,
+9419=>8409,
+9420=>8410,
+9421=>8411,
+9422=>8412,
+9423=>8413,
+8826=>8475,
+8827=>8476,
+8910=>8477,
+8911=>8478,
+8832=>8479,
+8833=>8480,
+8816=>8481,
+8817=>8482,
+8818=>8483,
+8819=>8484,
+8842=>8486,
+8843=>8488,
+8822=>8489,
+8823=>8490,
+8825=>8491,
+8922=>8492,
+8923=>8493,
+8773=>8499,
+8771=>8500,
+8776=>8501,
+8868=>8503,
+8244=>8582,
+9839=>8594,
+8258=>8599,
+10045=>8604,
+8226=>8607,
+8249=>8612,
+8250=>8613,
+10010=>8630,
+10006=>8631,
+9711=>8633,
+10070=>8637,
+9676=>8639,
+9775=>8664,
+12320=>8671,
+10102=>8673,
+10103=>8674,
+10104=>8675,
+10105=>8676,
+10106=>8677,
+10107=>8678,
+10108=>8679,
+10109=>8680,
+10110=>8681,
+10111=>8682,
+12306=>8700,
+12342=>8701,
+8710=>8715,
+8735=>8717,
+8741=>8719,
+8742=>8720,
+8787=>8722,
+8785=>8723,
+8806=>8724,
+8807=>8725,
+8723=>8726,
+8853=>8727,
+8854=>8728,
+8855=>8729,
+8980=>8731,
+8802=>8734,
+9649=>8736,
+8738=>8738,
+8784=>8739,
+8867=>8742,
+8814=>8745,
+8815=>8746,
+8837=>8747,
+8836=>8748,
+8713=>8749,
+8716=>8750,
+8891=>8751,
+8892=>8752,
+8794=>8753,
+8966=>8754,
+12958=>8761,
+8252=>8763,
+9702=>8775,
+9663=>8779,
+9653=>8780,
+9657=>8781,
+9667=>8782,
+9674=>8787,
+12849=>8788,
+12857=>8789,
+13259=>8790,
+9327=>8791,
+9328=>8792,
+9329=>8793,
+9330=>8794,
+9331=>8795,
+8656=>8814,
+8655=>8815,
+8653=>8816,
+8657=>8854,
+8659=>8855,
+8626=>8864,
+8625=>8865,
+8628=>8867,
+8624=>8868,
+8627=>8869,
+8636=>8884,
+8640=>8885,
+8644=>8896,
+8645=>8897,
+9347=>9042,
+9348=>9043,
+9349=>9044,
+9350=>9045,
+9351=>9046,
+12948=>9080,
+12965=>9096,
+8672=>9190,
+8674=>9191,
+8673=>9192,
+8675=>9193,
+8678=>9198,
+8680=>9199,
+8679=>9200,
+8681=>9201,
+9757=>9222,
+9759=>9223,
+12944=>9300,
+12938=>9301,
+12939=>9302,
+12940=>9303,
+12941=>9304,
+12942=>9305,
+12943=>9306,
+12318=>9322,
+12319=>9323,
+8246=>9324,
+8245=>9326,
+12540=>9330,
+44034=>9333,
+44035=>9334,
+44037=>9335,
+44038=>9336,
+44043=>9337,
+44044=>9338,
+44045=>9339,
+44046=>9340,
+44047=>9341,
+44056=>9342,
+44062=>9343,
+44063=>9344,
+44065=>9345,
+44066=>9346,
+44067=>9347,
+44069=>9348,
+44070=>9349,
+44071=>9350,
+44072=>9351,
+44073=>9352,
+44074=>9353,
+44075=>9354,
+44078=>9355,
+44082=>9356,
+44083=>9357,
+44084=>9358,
+44085=>9359,
+44086=>9360,
+44087=>9361,
+44090=>9362,
+44091=>9363,
+44093=>9364,
+44094=>9365,
+44095=>9366,
+44097=>9367,
+44098=>9368,
+44099=>9369,
+44100=>9370,
+44101=>9371,
+44102=>9372,
+44103=>9373,
+44104=>9374,
+44105=>9375,
+44106=>9376,
+44108=>9377,
+44110=>9378,
+44111=>9379,
+44112=>9380,
+44113=>9381,
+44114=>9382,
+44115=>9383,
+44117=>9384,
+44118=>9385,
+44119=>9386,
+44121=>9387,
+44122=>9388,
+44123=>9389,
+44125=>9390,
+44126=>9391,
+44127=>9392,
+44128=>9393,
+44129=>9394,
+44130=>9395,
+44131=>9396,
+44132=>9397,
+44133=>9398,
+44134=>9399,
+44135=>9400,
+44136=>9401,
+44137=>9402,
+44138=>9403,
+44139=>9404,
+44140=>9405,
+44141=>9406,
+44142=>9407,
+44143=>9408,
+44146=>9409,
+44147=>9410,
+44149=>9411,
+44150=>9412,
+44153=>9413,
+44155=>9414,
+44156=>9415,
+44157=>9416,
+44158=>9417,
+44159=>9418,
+44162=>9419,
+44167=>9420,
+44168=>9421,
+44173=>9422,
+44174=>9423,
+44175=>9424,
+44177=>9425,
+44178=>9426,
+44179=>9427,
+44181=>9428,
+44182=>9429,
+44183=>9430,
+44184=>9431,
+44185=>9432,
+44186=>9433,
+44187=>9434,
+44190=>9435,
+44194=>9436,
+44195=>9437,
+44196=>9438,
+44197=>9439,
+44198=>9440,
+44199=>9441,
+44203=>9442,
+44205=>9443,
+44206=>9444,
+44209=>9445,
+44210=>9446,
+44211=>9447,
+44212=>9448,
+44213=>9449,
+44214=>9450,
+44215=>9451,
+44218=>9452,
+44222=>9453,
+44223=>9454,
+44224=>9455,
+44226=>9456,
+44227=>9457,
+44229=>9458,
+44230=>9459,
+44231=>9460,
+44233=>9461,
+44234=>9462,
+44235=>9463,
+44237=>9464,
+44238=>9465,
+44239=>9466,
+44240=>9467,
+44241=>9468,
+44242=>9469,
+44243=>9470,
+44244=>9471,
+44246=>9472,
+44248=>9473,
+44249=>9474,
+44250=>9475,
+44251=>9476,
+44252=>9477,
+44253=>9478,
+44254=>9479,
+44255=>9480,
+44258=>9481,
+44259=>9482,
+44261=>9483,
+44262=>9484,
+44265=>9485,
+44267=>9486,
+44269=>9487,
+44270=>9488,
+44274=>9489,
+44276=>9490,
+44279=>9491,
+44280=>9492,
+44281=>9493,
+44282=>9494,
+44283=>9495,
+44286=>9496,
+44287=>9497,
+44289=>9498,
+44290=>9499,
+44291=>9500,
+44293=>9501,
+44295=>9502,
+44296=>9503,
+44297=>9504,
+44298=>9505,
+44299=>9506,
+44302=>9507,
+44304=>9508,
+44306=>9509,
+44307=>9510,
+44308=>9511,
+44309=>9512,
+44310=>9513,
+44311=>9514,
+44313=>9515,
+44314=>9516,
+44315=>9517,
+44317=>9518,
+44318=>9519,
+44319=>9520,
+44321=>9521,
+44322=>9522,
+44323=>9523,
+44324=>9524,
+44325=>9525,
+44326=>9526,
+44327=>9527,
+44328=>9528,
+44330=>9529,
+44331=>9530,
+44334=>9531,
+44335=>9532,
+44336=>9533,
+44337=>9534,
+44338=>9535,
+44339=>9536,
+44342=>9537,
+44343=>9538,
+44345=>9539,
+44346=>9540,
+44347=>9541,
+44349=>9542,
+44350=>9543,
+44351=>9544,
+44352=>9545,
+44353=>9546,
+44354=>9547,
+44355=>9548,
+44358=>9549,
+44360=>9550,
+44362=>9551,
+44363=>9552,
+44364=>9553,
+44365=>9554,
+44366=>9555,
+44367=>9556,
+44369=>9557,
+44370=>9558,
+44371=>9559,
+44373=>9560,
+44374=>9561,
+44375=>9562,
+44377=>9563,
+44378=>9564,
+44379=>9565,
+44380=>9566,
+44381=>9567,
+44382=>9568,
+44383=>9569,
+44384=>9570,
+44386=>9571,
+44388=>9572,
+44389=>9573,
+44390=>9574,
+44391=>9575,
+44392=>9576,
+44393=>9577,
+44394=>9578,
+44395=>9579,
+44398=>9580,
+44399=>9581,
+44401=>9582,
+44402=>9583,
+44407=>9584,
+44408=>9585,
+44409=>9586,
+44410=>9587,
+44414=>9588,
+44416=>9589,
+44419=>9590,
+44420=>9591,
+44421=>9592,
+44422=>9593,
+44423=>9594,
+44426=>9595,
+44427=>9596,
+44429=>9597,
+44430=>9598,
+44431=>9599,
+44433=>9600,
+44434=>9601,
+44435=>9602,
+44436=>9603,
+44437=>9604,
+44438=>9605,
+44439=>9606,
+44440=>9607,
+44441=>9608,
+44442=>9609,
+44443=>9610,
+44446=>9611,
+44447=>9612,
+44448=>9613,
+44449=>9614,
+44450=>9615,
+44451=>9616,
+44453=>9617,
+44454=>9618,
+44455=>9619,
+44456=>9620,
+44457=>9621,
+44458=>9622,
+44459=>9623,
+44460=>9624,
+44461=>9625,
+44462=>9626,
+44463=>9627,
+44464=>9628,
+44465=>9629,
+44466=>9630,
+44467=>9631,
+44468=>9632,
+44469=>9633,
+44470=>9634,
+44472=>9635,
+44473=>9636,
+44474=>9637,
+44475=>9638,
+44476=>9639,
+44477=>9640,
+44478=>9641,
+44479=>9642,
+44482=>9643,
+44483=>9644,
+44485=>9645,
+44486=>9646,
+44487=>9647,
+44489=>9648,
+44490=>9649,
+44491=>9650,
+44492=>9651,
+44493=>9652,
+44494=>9653,
+44495=>9654,
+44498=>9655,
+44500=>9656,
+44501=>9657,
+44502=>9658,
+44503=>9659,
+44504=>9660,
+44505=>9661,
+44506=>9662,
+44507=>9663,
+44509=>9664,
+44510=>9665,
+44511=>9666,
+44513=>9667,
+44514=>9668,
+44515=>9669,
+44517=>9670,
+44518=>9671,
+44519=>9672,
+44520=>9673,
+44521=>9674,
+44522=>9675,
+44523=>9676,
+44524=>9677,
+44525=>9678,
+44526=>9679,
+44527=>9680,
+44528=>9681,
+44529=>9682,
+44530=>9683,
+44531=>9684,
+44532=>9685,
+44533=>9686,
+44534=>9687,
+44535=>9688,
+44538=>9689,
+44539=>9690,
+44541=>9691,
+44542=>9692,
+44546=>9693,
+44547=>9694,
+44548=>9695,
+44549=>9696,
+44550=>9697,
+44551=>9698,
+44554=>9699,
+44556=>9700,
+44558=>9701,
+44559=>9702,
+44560=>9703,
+44561=>9704,
+44562=>9705,
+44563=>9706,
+44565=>9707,
+44566=>9708,
+44567=>9709,
+44568=>9710,
+44569=>9711,
+44570=>9712,
+44571=>9713,
+44572=>9714,
+44573=>9715,
+44574=>9716,
+44575=>9717,
+44576=>9718,
+44577=>9719,
+44578=>9720,
+44579=>9721,
+44580=>9722,
+44581=>9723,
+44582=>9724,
+44583=>9725,
+44584=>9726,
+44585=>9727,
+44586=>9728,
+44587=>9729,
+44588=>9730,
+44589=>9731,
+44590=>9732,
+44591=>9733,
+44594=>9734,
+44595=>9735,
+44597=>9736,
+44598=>9737,
+44601=>9738,
+44603=>9739,
+44604=>9740,
+44605=>9741,
+44606=>9742,
+44607=>9743,
+44610=>9744,
+44612=>9745,
+44615=>9746,
+44616=>9747,
+44617=>9748,
+44619=>9749,
+44623=>9750,
+44625=>9751,
+44626=>9752,
+44627=>9753,
+44629=>9754,
+44631=>9755,
+44632=>9756,
+44633=>9757,
+44634=>9758,
+44635=>9759,
+44638=>9760,
+44642=>9761,
+44643=>9762,
+44644=>9763,
+44646=>9764,
+44647=>9765,
+44650=>9766,
+44651=>9767,
+44653=>9768,
+44654=>9769,
+44655=>9770,
+44657=>9771,
+44658=>9772,
+44659=>9773,
+44660=>9774,
+44661=>9775,
+44662=>9776,
+44663=>9777,
+44666=>9778,
+44670=>9779,
+44671=>9780,
+44672=>9781,
+44673=>9782,
+44674=>9783,
+44675=>9784,
+44678=>9785,
+44679=>9786,
+44680=>9787,
+44681=>9788,
+44682=>9789,
+44683=>9790,
+44685=>9791,
+44686=>9792,
+44687=>9793,
+44688=>9794,
+44689=>9795,
+44690=>9796,
+44691=>9797,
+44692=>9798,
+44693=>9799,
+44694=>9800,
+44695=>9801,
+44696=>9802,
+44697=>9803,
+44698=>9804,
+44699=>9805,
+44700=>9806,
+44701=>9807,
+44702=>9808,
+44703=>9809,
+44704=>9810,
+44705=>9811,
+44706=>9812,
+44707=>9813,
+44708=>9814,
+44709=>9815,
+44710=>9816,
+44711=>9817,
+44712=>9818,
+44713=>9819,
+44714=>9820,
+44715=>9821,
+44716=>9822,
+44717=>9823,
+44718=>9824,
+44719=>9825,
+44720=>9826,
+44721=>9827,
+44722=>9828,
+44723=>9829,
+44724=>9830,
+44725=>9831,
+44726=>9832,
+44727=>9833,
+44728=>9834,
+44729=>9835,
+44730=>9836,
+44731=>9837,
+44735=>9838,
+44737=>9839,
+44738=>9840,
+44739=>9841,
+44741=>9842,
+44742=>9843,
+44743=>9844,
+44744=>9845,
+44745=>9846,
+44746=>9847,
+44747=>9848,
+44750=>9849,
+44754=>9850,
+44755=>9851,
+44756=>9852,
+44757=>9853,
+44758=>9854,
+44759=>9855,
+44762=>9856,
+44763=>9857,
+44765=>9858,
+44766=>9859,
+44767=>9860,
+44768=>9861,
+44769=>9862,
+44770=>9863,
+44771=>9864,
+44772=>9865,
+44773=>9866,
+44774=>9867,
+44775=>9868,
+44777=>9869,
+44778=>9870,
+44780=>9871,
+44782=>9872,
+44783=>9873,
+44784=>9874,
+44785=>9875,
+44786=>9876,
+44787=>9877,
+44789=>9878,
+44790=>9879,
+44791=>9880,
+44793=>9881,
+44794=>9882,
+44795=>9883,
+44797=>9884,
+44798=>9885,
+44799=>9886,
+44800=>9887,
+44801=>9888,
+44802=>9889,
+44803=>9890,
+44804=>9891,
+44805=>9892,
+44806=>9893,
+44809=>9894,
+44810=>9895,
+44811=>9896,
+44812=>9897,
+44814=>9898,
+44815=>9899,
+44817=>9900,
+44818=>9901,
+44819=>9902,
+44820=>9903,
+44821=>9904,
+44822=>9905,
+44823=>9906,
+44824=>9907,
+44825=>9908,
+44826=>9909,
+44827=>9910,
+44828=>9911,
+44829=>9912,
+44830=>9913,
+44831=>9914,
+44832=>9915,
+44833=>9916,
+44834=>9917,
+44835=>9918,
+44836=>9919,
+44837=>9920,
+44838=>9921,
+44839=>9922,
+44840=>9923,
+44841=>9924,
+44842=>9925,
+44843=>9926,
+44846=>9927,
+44847=>9928,
+44849=>9929,
+44851=>9930,
+44853=>9931,
+44854=>9932,
+44855=>9933,
+44856=>9934,
+44857=>9935,
+44858=>9936,
+44859=>9937,
+44862=>9938,
+44864=>9939,
+44868=>9940,
+44869=>9941,
+44870=>9942,
+44871=>9943,
+44874=>9944,
+44875=>9945,
+44876=>9946,
+44877=>9947,
+44878=>9948,
+44879=>9949,
+44881=>9950,
+44882=>9951,
+44883=>9952,
+44884=>9953,
+44885=>9954,
+44886=>9955,
+44887=>9956,
+44888=>9957,
+44889=>9958,
+44890=>9959,
+44891=>9960,
+44894=>9961,
+44895=>9962,
+44896=>9963,
+44897=>9964,
+44898=>9965,
+44899=>9966,
+44902=>9967,
+44903=>9968,
+44904=>9969,
+44905=>9970,
+44906=>9971,
+44907=>9972,
+44908=>9973,
+44909=>9974,
+44910=>9975,
+44911=>9976,
+44912=>9977,
+44913=>9978,
+44914=>9979,
+44915=>9980,
+44916=>9981,
+44917=>9982,
+44918=>9983,
+44919=>9984,
+44920=>9985,
+44922=>9986,
+44923=>9987,
+44924=>9988,
+44925=>9989,
+44926=>9990,
+44927=>9991,
+44929=>9992,
+44930=>9993,
+44931=>9994,
+44933=>9995,
+44934=>9996,
+44935=>9997,
+44937=>9998,
+44938=>9999,
+44939=>10000,
+44940=>10001,
+44941=>10002,
+44942=>10003,
+44943=>10004,
+44946=>10005,
+44947=>10006,
+44948=>10007,
+44950=>10008,
+44951=>10009,
+44952=>10010,
+44953=>10011,
+44954=>10012,
+44955=>10013,
+44957=>10014,
+44958=>10015,
+44959=>10016,
+44960=>10017,
+44961=>10018,
+44962=>10019,
+44963=>10020,
+44964=>10021,
+44965=>10022,
+44966=>10023,
+44967=>10024,
+44968=>10025,
+44969=>10026,
+44970=>10027,
+44971=>10028,
+44972=>10029,
+44973=>10030,
+44974=>10031,
+44975=>10032,
+44976=>10033,
+44977=>10034,
+44978=>10035,
+44979=>10036,
+44980=>10037,
+44981=>10038,
+44982=>10039,
+44983=>10040,
+44986=>10041,
+44987=>10042,
+44989=>10043,
+44990=>10044,
+44991=>10045,
+44993=>10046,
+44994=>10047,
+44995=>10048,
+44996=>10049,
+44997=>10050,
+44998=>10051,
+45002=>10052,
+45004=>10053,
+45007=>10054,
+45008=>10055,
+45009=>10056,
+45010=>10057,
+45011=>10058,
+45013=>10059,
+45014=>10060,
+45015=>10061,
+45016=>10062,
+45017=>10063,
+45018=>10064,
+45019=>10065,
+45021=>10066,
+45022=>10067,
+45023=>10068,
+45024=>10069,
+45025=>10070,
+45026=>10071,
+45027=>10072,
+45028=>10073,
+45029=>10074,
+45030=>10075,
+45031=>10076,
+45034=>10077,
+45035=>10078,
+45036=>10079,
+45037=>10080,
+45038=>10081,
+45039=>10082,
+45042=>10083,
+45043=>10084,
+45045=>10085,
+45046=>10086,
+45047=>10087,
+45049=>10088,
+45050=>10089,
+45051=>10090,
+45052=>10091,
+45053=>10092,
+45054=>10093,
+45055=>10094,
+45058=>10095,
+45059=>10096,
+45061=>10097,
+45062=>10098,
+45063=>10099,
+45064=>10100,
+45065=>10101,
+45066=>10102,
+45067=>10103,
+45069=>10104,
+45070=>10105,
+45071=>10106,
+45073=>10107,
+45074=>10108,
+45075=>10109,
+45077=>10110,
+45078=>10111,
+45079=>10112,
+45080=>10113,
+45081=>10114,
+45082=>10115,
+45083=>10116,
+45086=>10117,
+45087=>10118,
+45088=>10119,
+45089=>10120,
+45090=>10121,
+45091=>10122,
+45092=>10123,
+45093=>10124,
+45094=>10125,
+45095=>10126,
+45097=>10127,
+45098=>10128,
+45099=>10129,
+45100=>10130,
+45101=>10131,
+45102=>10132,
+45103=>10133,
+45104=>10134,
+45105=>10135,
+45106=>10136,
+45107=>10137,
+45108=>10138,
+45109=>10139,
+45110=>10140,
+45111=>10141,
+45112=>10142,
+45113=>10143,
+45114=>10144,
+45115=>10145,
+45116=>10146,
+45117=>10147,
+45118=>10148,
+45119=>10149,
+45120=>10150,
+45121=>10151,
+45122=>10152,
+45123=>10153,
+45126=>10154,
+45127=>10155,
+45129=>10156,
+45131=>10157,
+45133=>10158,
+45135=>10159,
+45136=>10160,
+45137=>10161,
+45138=>10162,
+45142=>10163,
+45144=>10164,
+45146=>10165,
+45147=>10166,
+45148=>10167,
+45150=>10168,
+45151=>10169,
+45152=>10170,
+45153=>10171,
+45154=>10172,
+45155=>10173,
+45156=>10174,
+45157=>10175,
+45158=>10176,
+45159=>10177,
+45160=>10178,
+45161=>10179,
+45162=>10180,
+45163=>10181,
+45164=>10182,
+45165=>10183,
+45166=>10184,
+45167=>10185,
+45168=>10186,
+45169=>10187,
+45170=>10188,
+45171=>10189,
+45172=>10190,
+45173=>10191,
+45174=>10192,
+45175=>10193,
+45176=>10194,
+45177=>10195,
+45178=>10196,
+45179=>10197,
+45182=>10198,
+45183=>10199,
+45185=>10200,
+45186=>10201,
+45187=>10202,
+45189=>10203,
+45190=>10204,
+45191=>10205,
+45192=>10206,
+45193=>10207,
+45194=>10208,
+45195=>10209,
+45198=>10210,
+45200=>10211,
+45202=>10212,
+45203=>10213,
+45204=>10214,
+45205=>10215,
+45206=>10216,
+45207=>10217,
+45211=>10218,
+45213=>10219,
+45214=>10220,
+45219=>10221,
+45220=>10222,
+45221=>10223,
+45222=>10224,
+45223=>10225,
+45226=>10226,
+45232=>10227,
+45234=>10228,
+45238=>10229,
+45239=>10230,
+45241=>10231,
+45242=>10232,
+45243=>10233,
+45245=>10234,
+45246=>10235,
+45247=>10236,
+45248=>10237,
+45249=>10238,
+45250=>10239,
+45251=>10240,
+45254=>10241,
+45258=>10242,
+45259=>10243,
+45260=>10244,
+45261=>10245,
+45262=>10246,
+45263=>10247,
+45266=>10248,
+45267=>10249,
+45269=>10250,
+45270=>10251,
+45271=>10252,
+45273=>10253,
+45274=>10254,
+45275=>10255,
+45276=>10256,
+45277=>10257,
+45278=>10258,
+45279=>10259,
+45281=>10260,
+45282=>10261,
+45283=>10262,
+45284=>10263,
+45286=>10264,
+45287=>10265,
+45288=>10266,
+45289=>10267,
+45290=>10268,
+45291=>10269,
+45292=>10270,
+45293=>10271,
+45294=>10272,
+45295=>10273,
+45296=>10274,
+45297=>10275,
+45298=>10276,
+45299=>10277,
+45300=>10278,
+45301=>10279,
+45302=>10280,
+45303=>10281,
+45304=>10282,
+45305=>10283,
+45306=>10284,
+45307=>10285,
+45308=>10286,
+45309=>10287,
+45310=>10288,
+45311=>10289,
+45312=>10290,
+45313=>10291,
+45314=>10292,
+45315=>10293,
+45316=>10294,
+45317=>10295,
+45318=>10296,
+45319=>10297,
+45322=>10298,
+45325=>10299,
+45326=>10300,
+45327=>10301,
+45329=>10302,
+45332=>10303,
+45333=>10304,
+45334=>10305,
+45335=>10306,
+45338=>10307,
+45342=>10308,
+45343=>10309,
+45344=>10310,
+45345=>10311,
+45346=>10312,
+45350=>10313,
+45351=>10314,
+45353=>10315,
+45354=>10316,
+45355=>10317,
+45357=>10318,
+45358=>10319,
+45359=>10320,
+45360=>10321,
+45361=>10322,
+45362=>10323,
+45363=>10324,
+45366=>10325,
+45370=>10326,
+45371=>10327,
+45372=>10328,
+45373=>10329,
+45374=>10330,
+45375=>10331,
+45378=>10332,
+45379=>10333,
+45381=>10334,
+45382=>10335,
+45383=>10336,
+45385=>10337,
+45386=>10338,
+45387=>10339,
+45388=>10340,
+45389=>10341,
+45390=>10342,
+45391=>10343,
+45394=>10344,
+45395=>10345,
+45398=>10346,
+45399=>10347,
+45401=>10348,
+45402=>10349,
+45403=>10350,
+45405=>10351,
+45406=>10352,
+45407=>10353,
+45409=>10354,
+45410=>10355,
+45411=>10356,
+45412=>10357,
+45413=>10358,
+45414=>10359,
+45415=>10360,
+45416=>10361,
+45417=>10362,
+45418=>10363,
+45419=>10364,
+45420=>10365,
+45421=>10366,
+45422=>10367,
+45423=>10368,
+45424=>10369,
+45425=>10370,
+45426=>10371,
+45427=>10372,
+45428=>10373,
+45429=>10374,
+45430=>10375,
+45431=>10376,
+45434=>10377,
+45435=>10378,
+45437=>10379,
+45438=>10380,
+45439=>10381,
+45441=>10382,
+45443=>10383,
+45444=>10384,
+45445=>10385,
+45446=>10386,
+45447=>10387,
+45450=>10388,
+45452=>10389,
+45454=>10390,
+45455=>10391,
+45456=>10392,
+45457=>10393,
+45461=>10394,
+45462=>10395,
+45463=>10396,
+45465=>10397,
+45466=>10398,
+45467=>10399,
+45469=>10400,
+45470=>10401,
+45471=>10402,
+45472=>10403,
+45473=>10404,
+45474=>10405,
+45475=>10406,
+45476=>10407,
+45477=>10408,
+45478=>10409,
+45479=>10410,
+45481=>10411,
+45482=>10412,
+45483=>10413,
+45484=>10414,
+45485=>10415,
+45486=>10416,
+45487=>10417,
+45488=>10418,
+45489=>10419,
+45490=>10420,
+45491=>10421,
+45492=>10422,
+45493=>10423,
+45494=>10424,
+45495=>10425,
+45496=>10426,
+45497=>10427,
+45498=>10428,
+45499=>10429,
+45500=>10430,
+45501=>10431,
+45502=>10432,
+45503=>10433,
+45504=>10434,
+45505=>10435,
+45506=>10436,
+45507=>10437,
+45508=>10438,
+45509=>10439,
+45510=>10440,
+45511=>10441,
+45512=>10442,
+45513=>10443,
+45514=>10444,
+45515=>10445,
+45517=>10446,
+45518=>10447,
+45519=>10448,
+45521=>10449,
+45522=>10450,
+45523=>10451,
+45525=>10452,
+45526=>10453,
+45527=>10454,
+45528=>10455,
+45529=>10456,
+45530=>10457,
+45531=>10458,
+45534=>10459,
+45536=>10460,
+45537=>10461,
+45538=>10462,
+45539=>10463,
+45540=>10464,
+45541=>10465,
+45542=>10466,
+45543=>10467,
+45546=>10468,
+45547=>10469,
+45549=>10470,
+45550=>10471,
+45551=>10472,
+45553=>10473,
+45554=>10474,
+45555=>10475,
+45556=>10476,
+45557=>10477,
+45558=>10478,
+45559=>10479,
+45560=>10480,
+45562=>10481,
+45564=>10482,
+45566=>10483,
+45567=>10484,
+45568=>10485,
+45569=>10486,
+45570=>10487,
+45571=>10488,
+45574=>10489,
+45575=>10490,
+45577=>10491,
+45578=>10492,
+45581=>10493,
+45582=>10494,
+45583=>10495,
+45584=>10496,
+45585=>10497,
+45586=>10498,
+45587=>10499,
+45590=>10500,
+45592=>10501,
+45594=>10502,
+45595=>10503,
+45596=>10504,
+45597=>10505,
+45598=>10506,
+45599=>10507,
+45601=>10508,
+45602=>10509,
+45603=>10510,
+45604=>10511,
+45605=>10512,
+45606=>10513,
+45607=>10514,
+45608=>10515,
+45609=>10516,
+45610=>10517,
+45611=>10518,
+45612=>10519,
+45613=>10520,
+45614=>10521,
+45615=>10522,
+45616=>10523,
+45617=>10524,
+45618=>10525,
+45619=>10526,
+45621=>10527,
+45622=>10528,
+45623=>10529,
+45624=>10530,
+45625=>10531,
+45626=>10532,
+45627=>10533,
+45629=>10534,
+45630=>10535,
+45631=>10536,
+45632=>10537,
+45633=>10538,
+45634=>10539,
+45635=>10540,
+45636=>10541,
+45637=>10542,
+45638=>10543,
+45639=>10544,
+45640=>10545,
+45641=>10546,
+45642=>10547,
+45643=>10548,
+45644=>10549,
+45645=>10550,
+45646=>10551,
+45647=>10552,
+45648=>10553,
+45649=>10554,
+45650=>10555,
+45651=>10556,
+45652=>10557,
+45653=>10558,
+45654=>10559,
+45655=>10560,
+45657=>10561,
+45658=>10562,
+45659=>10563,
+45661=>10564,
+45662=>10565,
+45663=>10566,
+45665=>10567,
+45666=>10568,
+45667=>10569,
+45668=>10570,
+45669=>10571,
+45670=>10572,
+45671=>10573,
+45674=>10574,
+45675=>10575,
+45676=>10576,
+45677=>10577,
+45678=>10578,
+45679=>10579,
+45680=>10580,
+45681=>10581,
+45682=>10582,
+45683=>10583,
+45686=>10584,
+45687=>10585,
+45688=>10586,
+45689=>10587,
+45690=>10588,
+45691=>10589,
+45693=>10590,
+45694=>10591,
+45695=>10592,
+45696=>10593,
+45697=>10594,
+45698=>10595,
+45699=>10596,
+45702=>10597,
+45703=>10598,
+45704=>10599,
+45706=>10600,
+45707=>10601,
+45708=>10602,
+45709=>10603,
+45710=>10604,
+45711=>10605,
+45714=>10606,
+45715=>10607,
+45717=>10608,
+45718=>10609,
+45719=>10610,
+45723=>10611,
+45724=>10612,
+45725=>10613,
+45726=>10614,
+45727=>10615,
+45730=>10616,
+45732=>10617,
+45735=>10618,
+45736=>10619,
+45737=>10620,
+45739=>10621,
+45741=>10622,
+45742=>10623,
+45743=>10624,
+45745=>10625,
+45746=>10626,
+45747=>10627,
+45749=>10628,
+45750=>10629,
+45751=>10630,
+45752=>10631,
+45753=>10632,
+45754=>10633,
+45755=>10634,
+45756=>10635,
+45757=>10636,
+45758=>10637,
+45759=>10638,
+45760=>10639,
+45761=>10640,
+45762=>10641,
+45763=>10642,
+45764=>10643,
+45765=>10644,
+45766=>10645,
+45767=>10646,
+45770=>10647,
+45771=>10648,
+45773=>10649,
+45774=>10650,
+45775=>10651,
+45777=>10652,
+45779=>10653,
+45780=>10654,
+45781=>10655,
+45782=>10656,
+45783=>10657,
+45786=>10658,
+45788=>10659,
+45790=>10660,
+45791=>10661,
+45792=>10662,
+45793=>10663,
+45795=>10664,
+45799=>10665,
+45801=>10666,
+45802=>10667,
+45808=>10668,
+45809=>10669,
+45810=>10670,
+45814=>10671,
+45820=>10672,
+45821=>10673,
+45822=>10674,
+45826=>10675,
+45827=>10676,
+45829=>10677,
+45830=>10678,
+45831=>10679,
+45833=>10680,
+45834=>10681,
+45835=>10682,
+45836=>10683,
+45837=>10684,
+45838=>10685,
+45839=>10686,
+45842=>10687,
+45846=>10688,
+45847=>10689,
+45848=>10690,
+45849=>10691,
+45850=>10692,
+45851=>10693,
+45853=>10694,
+45854=>10695,
+45855=>10696,
+45856=>10697,
+45857=>10698,
+45858=>10699,
+45859=>10700,
+45860=>10701,
+45861=>10702,
+45862=>10703,
+45863=>10704,
+45864=>10705,
+45865=>10706,
+45866=>10707,
+45867=>10708,
+45868=>10709,
+45869=>10710,
+45870=>10711,
+45871=>10712,
+45872=>10713,
+45873=>10714,
+45874=>10715,
+45875=>10716,
+45876=>10717,
+45877=>10718,
+45878=>10719,
+45879=>10720,
+45880=>10721,
+45881=>10722,
+45882=>10723,
+45883=>10724,
+45884=>10725,
+45885=>10726,
+45886=>10727,
+45887=>10728,
+45888=>10729,
+45889=>10730,
+45890=>10731,
+45891=>10732,
+45892=>10733,
+45893=>10734,
+45894=>10735,
+45895=>10736,
+45896=>10737,
+45897=>10738,
+45898=>10739,
+45899=>10740,
+45900=>10741,
+45901=>10742,
+45902=>10743,
+45903=>10744,
+45904=>10745,
+45905=>10746,
+45906=>10747,
+45907=>10748,
+45911=>10749,
+45913=>10750,
+45914=>10751,
+45917=>10752,
+45920=>10753,
+45921=>10754,
+45922=>10755,
+45923=>10756,
+45926=>10757,
+45928=>10758,
+45930=>10759,
+45932=>10760,
+45933=>10761,
+45935=>10762,
+45938=>10763,
+45939=>10764,
+45941=>10765,
+45942=>10766,
+45943=>10767,
+45945=>10768,
+45946=>10769,
+45947=>10770,
+45948=>10771,
+45949=>10772,
+45950=>10773,
+45951=>10774,
+45954=>10775,
+45958=>10776,
+45959=>10777,
+45960=>10778,
+45961=>10779,
+45962=>10780,
+45963=>10781,
+45965=>10782,
+45966=>10783,
+45967=>10784,
+45969=>10785,
+45970=>10786,
+45971=>10787,
+45973=>10788,
+45974=>10789,
+45975=>10790,
+45976=>10791,
+45977=>10792,
+45978=>10793,
+45979=>10794,
+45980=>10795,
+45981=>10796,
+45982=>10797,
+45983=>10798,
+45986=>10799,
+45987=>10800,
+45988=>10801,
+45989=>10802,
+45990=>10803,
+45991=>10804,
+45993=>10805,
+45994=>10806,
+45995=>10807,
+45997=>10808,
+45998=>10809,
+45999=>10810,
+46000=>10811,
+46001=>10812,
+46002=>10813,
+46003=>10814,
+46004=>10815,
+46005=>10816,
+46006=>10817,
+46007=>10818,
+46008=>10819,
+46009=>10820,
+46010=>10821,
+46011=>10822,
+46012=>10823,
+46013=>10824,
+46014=>10825,
+46015=>10826,
+46016=>10827,
+46017=>10828,
+46018=>10829,
+46019=>10830,
+46022=>10831,
+46023=>10832,
+46025=>10833,
+46026=>10834,
+46029=>10835,
+46031=>10836,
+46033=>10837,
+46034=>10838,
+46035=>10839,
+46038=>10840,
+46040=>10841,
+46042=>10842,
+46044=>10843,
+46046=>10844,
+46047=>10845,
+46049=>10846,
+46050=>10847,
+46051=>10848,
+46053=>10849,
+46054=>10850,
+46055=>10851,
+46057=>10852,
+46058=>10853,
+46059=>10854,
+46060=>10855,
+46061=>10856,
+46062=>10857,
+46063=>10858,
+46064=>10859,
+46065=>10860,
+46066=>10861,
+46067=>10862,
+46068=>10863,
+46069=>10864,
+46070=>10865,
+46071=>10866,
+46072=>10867,
+46073=>10868,
+46074=>10869,
+46075=>10870,
+46077=>10871,
+46078=>10872,
+46079=>10873,
+46080=>10874,
+46081=>10875,
+46082=>10876,
+46083=>10877,
+46084=>10878,
+46085=>10879,
+46086=>10880,
+46087=>10881,
+46088=>10882,
+46089=>10883,
+46090=>10884,
+46091=>10885,
+46092=>10886,
+46093=>10887,
+46094=>10888,
+46095=>10889,
+46097=>10890,
+46098=>10891,
+46099=>10892,
+46100=>10893,
+46101=>10894,
+46102=>10895,
+46103=>10896,
+46105=>10897,
+46106=>10898,
+46107=>10899,
+46109=>10900,
+46110=>10901,
+46111=>10902,
+46113=>10903,
+46114=>10904,
+46115=>10905,
+46116=>10906,
+46117=>10907,
+46118=>10908,
+46119=>10909,
+46122=>10910,
+46124=>10911,
+46125=>10912,
+46126=>10913,
+46127=>10914,
+46128=>10915,
+46129=>10916,
+46130=>10917,
+46131=>10918,
+46133=>10919,
+46134=>10920,
+46135=>10921,
+46136=>10922,
+46137=>10923,
+46138=>10924,
+46139=>10925,
+46140=>10926,
+46141=>10927,
+46142=>10928,
+46143=>10929,
+46144=>10930,
+46145=>10931,
+46146=>10932,
+46147=>10933,
+46148=>10934,
+46149=>10935,
+46150=>10936,
+46151=>10937,
+46152=>10938,
+46153=>10939,
+46154=>10940,
+46155=>10941,
+46156=>10942,
+46157=>10943,
+46158=>10944,
+46159=>10945,
+46162=>10946,
+46163=>10947,
+46165=>10948,
+46166=>10949,
+46167=>10950,
+46169=>10951,
+46170=>10952,
+46171=>10953,
+46172=>10954,
+46173=>10955,
+46174=>10956,
+46175=>10957,
+46178=>10958,
+46180=>10959,
+46182=>10960,
+46183=>10961,
+46184=>10962,
+46185=>10963,
+46186=>10964,
+46187=>10965,
+46189=>10966,
+46190=>10967,
+46191=>10968,
+46192=>10969,
+46193=>10970,
+46194=>10971,
+46195=>10972,
+46196=>10973,
+46197=>10974,
+46198=>10975,
+46199=>10976,
+46200=>10977,
+46201=>10978,
+46202=>10979,
+46203=>10980,
+46204=>10981,
+46205=>10982,
+46206=>10983,
+46207=>10984,
+46209=>10985,
+46210=>10986,
+46211=>10987,
+46212=>10988,
+46213=>10989,
+46214=>10990,
+46215=>10991,
+46217=>10992,
+46218=>10993,
+46219=>10994,
+46220=>10995,
+46221=>10996,
+46222=>10997,
+46223=>10998,
+46224=>10999,
+46225=>11000,
+46226=>11001,
+46227=>11002,
+46228=>11003,
+46229=>11004,
+46230=>11005,
+46231=>11006,
+46232=>11007,
+46233=>11008,
+46234=>11009,
+46235=>11010,
+46236=>11011,
+46238=>11012,
+46239=>11013,
+46240=>11014,
+46241=>11015,
+46242=>11016,
+46243=>11017,
+46245=>11018,
+46246=>11019,
+46247=>11020,
+46249=>11021,
+46250=>11022,
+46251=>11023,
+46253=>11024,
+46254=>11025,
+46255=>11026,
+46256=>11027,
+46257=>11028,
+46258=>11029,
+46259=>11030,
+46260=>11031,
+46262=>11032,
+46264=>11033,
+46266=>11034,
+46267=>11035,
+46268=>11036,
+46269=>11037,
+46270=>11038,
+46271=>11039,
+46273=>11040,
+46274=>11041,
+46275=>11042,
+46277=>11043,
+46278=>11044,
+46279=>11045,
+46281=>11046,
+46282=>11047,
+46283=>11048,
+46284=>11049,
+46285=>11050,
+46286=>11051,
+46287=>11052,
+46289=>11053,
+46290=>11054,
+46291=>11055,
+46292=>11056,
+46294=>11057,
+46295=>11058,
+46296=>11059,
+46297=>11060,
+46298=>11061,
+46299=>11062,
+46302=>11063,
+46303=>11064,
+46305=>11065,
+46306=>11066,
+46309=>11067,
+46311=>11068,
+46312=>11069,
+46313=>11070,
+46314=>11071,
+46315=>11072,
+46318=>11073,
+46320=>11074,
+46322=>11075,
+46323=>11076,
+46324=>11077,
+46325=>11078,
+46326=>11079,
+46327=>11080,
+46329=>11081,
+46330=>11082,
+46331=>11083,
+46332=>11084,
+46333=>11085,
+46334=>11086,
+46335=>11087,
+46336=>11088,
+46337=>11089,
+46338=>11090,
+46339=>11091,
+46340=>11092,
+46341=>11093,
+46342=>11094,
+46343=>11095,
+46344=>11096,
+46345=>11097,
+46346=>11098,
+46347=>11099,
+46348=>11100,
+46349=>11101,
+46350=>11102,
+46351=>11103,
+46352=>11104,
+46353=>11105,
+46354=>11106,
+46355=>11107,
+46358=>11108,
+46359=>11109,
+46361=>11110,
+46362=>11111,
+46365=>11112,
+46366=>11113,
+46367=>11114,
+46368=>11115,
+46369=>11116,
+46370=>11117,
+46371=>11118,
+46374=>11119,
+46379=>11120,
+46380=>11121,
+46381=>11122,
+46382=>11123,
+46383=>11124,
+46386=>11125,
+46387=>11126,
+46389=>11127,
+46390=>11128,
+46391=>11129,
+46393=>11130,
+46394=>11131,
+46395=>11132,
+46396=>11133,
+46397=>11134,
+46398=>11135,
+46399=>11136,
+46402=>11137,
+46406=>11138,
+46407=>11139,
+46408=>11140,
+46409=>11141,
+46410=>11142,
+46414=>11143,
+46415=>11144,
+46417=>11145,
+46418=>11146,
+46419=>11147,
+46421=>11148,
+46422=>11149,
+46423=>11150,
+46424=>11151,
+46425=>11152,
+46426=>11153,
+46427=>11154,
+46430=>11155,
+46434=>11156,
+46435=>11157,
+46436=>11158,
+46437=>11159,
+46438=>11160,
+46439=>11161,
+46440=>11162,
+46441=>11163,
+46442=>11164,
+46443=>11165,
+46444=>11166,
+46445=>11167,
+46446=>11168,
+46447=>11169,
+46448=>11170,
+46449=>11171,
+46450=>11172,
+46451=>11173,
+46452=>11174,
+46453=>11175,
+46454=>11176,
+46455=>11177,
+46456=>11178,
+46457=>11179,
+46458=>11180,
+46459=>11181,
+46460=>11182,
+46461=>11183,
+46462=>11184,
+46463=>11185,
+46464=>11186,
+46465=>11187,
+46466=>11188,
+46467=>11189,
+46468=>11190,
+46469=>11191,
+46470=>11192,
+46471=>11193,
+46472=>11194,
+46473=>11195,
+46474=>11196,
+46475=>11197,
+46476=>11198,
+46477=>11199,
+46478=>11200,
+46479=>11201,
+46480=>11202,
+46481=>11203,
+46482=>11204,
+46483=>11205,
+46484=>11206,
+46485=>11207,
+46486=>11208,
+46487=>11209,
+46488=>11210,
+46489=>11211,
+46490=>11212,
+46491=>11213,
+46492=>11214,
+46493=>11215,
+46494=>11216,
+46495=>11217,
+46498=>11218,
+46499=>11219,
+46501=>11220,
+46502=>11221,
+46503=>11222,
+46505=>11223,
+46508=>11224,
+46509=>11225,
+46510=>11226,
+46511=>11227,
+46514=>11228,
+46518=>11229,
+46519=>11230,
+46520=>11231,
+46521=>11232,
+46522=>11233,
+46526=>11234,
+46527=>11235,
+46529=>11236,
+46530=>11237,
+46531=>11238,
+46533=>11239,
+46534=>11240,
+46535=>11241,
+46536=>11242,
+46537=>11243,
+46538=>11244,
+46539=>11245,
+46542=>11246,
+46546=>11247,
+46547=>11248,
+46548=>11249,
+46549=>11250,
+46550=>11251,
+46551=>11252,
+46553=>11253,
+46554=>11254,
+46555=>11255,
+46556=>11256,
+46557=>11257,
+46558=>11258,
+46559=>11259,
+46560=>11260,
+46561=>11261,
+46562=>11262,
+46563=>11263,
+46564=>11264,
+46565=>11265,
+46566=>11266,
+46567=>11267,
+46568=>11268,
+46569=>11269,
+46570=>11270,
+46571=>11271,
+46573=>11272,
+46574=>11273,
+46575=>11274,
+46576=>11275,
+46577=>11276,
+46578=>11277,
+46579=>11278,
+46580=>11279,
+46581=>11280,
+46582=>11281,
+46583=>11282,
+46584=>11283,
+46585=>11284,
+46586=>11285,
+46587=>11286,
+46588=>11287,
+46589=>11288,
+46590=>11289,
+46591=>11290,
+46592=>11291,
+46593=>11292,
+46594=>11293,
+46595=>11294,
+46596=>11295,
+46597=>11296,
+46598=>11297,
+46599=>11298,
+46600=>11299,
+46601=>11300,
+46602=>11301,
+46603=>11302,
+46604=>11303,
+46605=>11304,
+46606=>11305,
+46607=>11306,
+46610=>11307,
+46611=>11308,
+46613=>11309,
+46614=>11310,
+46615=>11311,
+46617=>11312,
+46618=>11313,
+46619=>11314,
+46620=>11315,
+46621=>11316,
+46622=>11317,
+46623=>11318,
+46624=>11319,
+46625=>11320,
+46626=>11321,
+46627=>11322,
+46628=>11323,
+46630=>11324,
+46631=>11325,
+46632=>11326,
+46633=>11327,
+46634=>11328,
+46635=>11329,
+46637=>11330,
+46638=>11331,
+46639=>11332,
+46640=>11333,
+46641=>11334,
+46642=>11335,
+46643=>11336,
+46645=>11337,
+46646=>11338,
+46647=>11339,
+46648=>11340,
+46649=>11341,
+46650=>11342,
+46651=>11343,
+46652=>11344,
+46653=>11345,
+46654=>11346,
+46655=>11347,
+46656=>11348,
+46657=>11349,
+46658=>11350,
+46659=>11351,
+46660=>11352,
+46661=>11353,
+46662=>11354,
+46663=>11355,
+46665=>11356,
+46666=>11357,
+46667=>11358,
+46668=>11359,
+46669=>11360,
+46670=>11361,
+46671=>11362,
+46672=>11363,
+46673=>11364,
+46674=>11365,
+46675=>11366,
+46676=>11367,
+46677=>11368,
+46678=>11369,
+46679=>11370,
+46680=>11371,
+46681=>11372,
+46682=>11373,
+46683=>11374,
+46684=>11375,
+46685=>11376,
+46686=>11377,
+46687=>11378,
+46688=>11379,
+46689=>11380,
+46690=>11381,
+46691=>11382,
+46693=>11383,
+46694=>11384,
+46695=>11385,
+46697=>11386,
+46698=>11387,
+46699=>11388,
+46700=>11389,
+46701=>11390,
+46702=>11391,
+46703=>11392,
+46704=>11393,
+46705=>11394,
+46706=>11395,
+46707=>11396,
+46708=>11397,
+46709=>11398,
+46710=>11399,
+46711=>11400,
+46712=>11401,
+46713=>11402,
+46714=>11403,
+46715=>11404,
+46716=>11405,
+46717=>11406,
+46718=>11407,
+46719=>11408,
+46720=>11409,
+46721=>11410,
+46722=>11411,
+46723=>11412,
+46724=>11413,
+46725=>11414,
+46726=>11415,
+46727=>11416,
+46728=>11417,
+46729=>11418,
+46730=>11419,
+46731=>11420,
+46732=>11421,
+46733=>11422,
+46734=>11423,
+46735=>11424,
+46736=>11425,
+46737=>11426,
+46738=>11427,
+46739=>11428,
+46740=>11429,
+46741=>11430,
+46742=>11431,
+46743=>11432,
+46744=>11433,
+46745=>11434,
+46746=>11435,
+46747=>11436,
+46750=>11437,
+46751=>11438,
+46753=>11439,
+46754=>11440,
+46755=>11441,
+46757=>11442,
+46758=>11443,
+46759=>11444,
+46760=>11445,
+46761=>11446,
+46762=>11447,
+46765=>11448,
+46766=>11449,
+46767=>11450,
+46768=>11451,
+46770=>11452,
+46771=>11453,
+46772=>11454,
+46773=>11455,
+46774=>11456,
+46775=>11457,
+46776=>11458,
+46777=>11459,
+46778=>11460,
+46779=>11461,
+46780=>11462,
+46781=>11463,
+46782=>11464,
+46783=>11465,
+46784=>11466,
+46785=>11467,
+46786=>11468,
+46787=>11469,
+46788=>11470,
+46789=>11471,
+46790=>11472,
+46791=>11473,
+46792=>11474,
+46793=>11475,
+46794=>11476,
+46795=>11477,
+46796=>11478,
+46797=>11479,
+46798=>11480,
+46799=>11481,
+46800=>11482,
+46801=>11483,
+46802=>11484,
+46803=>11485,
+46805=>11486,
+46806=>11487,
+46807=>11488,
+46808=>11489,
+46809=>11490,
+46810=>11491,
+46811=>11492,
+46812=>11493,
+46813=>11494,
+46814=>11495,
+46815=>11496,
+46816=>11497,
+46817=>11498,
+46818=>11499,
+46819=>11500,
+46820=>11501,
+46821=>11502,
+46822=>11503,
+46823=>11504,
+46824=>11505,
+46825=>11506,
+46826=>11507,
+46827=>11508,
+46828=>11509,
+46829=>11510,
+46830=>11511,
+46831=>11512,
+46833=>11513,
+46834=>11514,
+46835=>11515,
+46837=>11516,
+46838=>11517,
+46839=>11518,
+46841=>11519,
+46842=>11520,
+46843=>11521,
+46844=>11522,
+46845=>11523,
+46846=>11524,
+46847=>11525,
+46850=>11526,
+46851=>11527,
+46852=>11528,
+46854=>11529,
+46855=>11530,
+46856=>11531,
+46857=>11532,
+46858=>11533,
+46859=>11534,
+46860=>11535,
+46861=>11536,
+46862=>11537,
+46863=>11538,
+46864=>11539,
+46865=>11540,
+46866=>11541,
+46867=>11542,
+46868=>11543,
+46869=>11544,
+46870=>11545,
+46871=>11546,
+46872=>11547,
+46873=>11548,
+46874=>11549,
+46875=>11550,
+46876=>11551,
+46877=>11552,
+46878=>11553,
+46879=>11554,
+46880=>11555,
+46881=>11556,
+46882=>11557,
+46883=>11558,
+46884=>11559,
+46885=>11560,
+46886=>11561,
+46887=>11562,
+46890=>11563,
+46891=>11564,
+46893=>11565,
+46894=>11566,
+46897=>11567,
+46898=>11568,
+46899=>11569,
+46900=>11570,
+46901=>11571,
+46902=>11572,
+46903=>11573,
+46906=>11574,
+46908=>11575,
+46909=>11576,
+46910=>11577,
+46911=>11578,
+46912=>11579,
+46913=>11580,
+46914=>11581,
+46915=>11582,
+46917=>11583,
+46918=>11584,
+46919=>11585,
+46921=>11586,
+46922=>11587,
+46923=>11588,
+46925=>11589,
+46926=>11590,
+46927=>11591,
+46928=>11592,
+46929=>11593,
+46930=>11594,
+46931=>11595,
+46934=>11596,
+46935=>11597,
+46936=>11598,
+46937=>11599,
+46938=>11600,
+46939=>11601,
+46940=>11602,
+46941=>11603,
+46942=>11604,
+46943=>11605,
+46945=>11606,
+46946=>11607,
+46947=>11608,
+46949=>11609,
+46950=>11610,
+46951=>11611,
+46953=>11612,
+46954=>11613,
+46955=>11614,
+46956=>11615,
+46957=>11616,
+46958=>11617,
+46959=>11618,
+46962=>11619,
+46964=>11620,
+46966=>11621,
+46967=>11622,
+46968=>11623,
+46969=>11624,
+46970=>11625,
+46971=>11626,
+46974=>11627,
+46975=>11628,
+46977=>11629,
+46978=>11630,
+46979=>11631,
+46981=>11632,
+46982=>11633,
+46983=>11634,
+46984=>11635,
+46985=>11636,
+46986=>11637,
+46987=>11638,
+46990=>11639,
+46995=>11640,
+46996=>11641,
+46997=>11642,
+47002=>11643,
+47003=>11644,
+47005=>11645,
+47006=>11646,
+47007=>11647,
+47009=>11648,
+47010=>11649,
+47011=>11650,
+47012=>11651,
+47013=>11652,
+47014=>11653,
+47015=>11654,
+47018=>11655,
+47022=>11656,
+47023=>11657,
+47024=>11658,
+47025=>11659,
+47026=>11660,
+47027=>11661,
+47030=>11662,
+47031=>11663,
+47033=>11664,
+47034=>11665,
+47035=>11666,
+47036=>11667,
+47037=>11668,
+47038=>11669,
+47039=>11670,
+47040=>11671,
+47041=>11672,
+47042=>11673,
+47043=>11674,
+47044=>11675,
+47045=>11676,
+47046=>11677,
+47048=>11678,
+47050=>11679,
+47051=>11680,
+47052=>11681,
+47053=>11682,
+47054=>11683,
+47055=>11684,
+47056=>11685,
+47057=>11686,
+47058=>11687,
+47059=>11688,
+47060=>11689,
+47061=>11690,
+47062=>11691,
+47063=>11692,
+47064=>11693,
+47065=>11694,
+47066=>11695,
+47067=>11696,
+47068=>11697,
+47069=>11698,
+47070=>11699,
+47071=>11700,
+47072=>11701,
+47073=>11702,
+47074=>11703,
+47075=>11704,
+47076=>11705,
+47077=>11706,
+47078=>11707,
+47079=>11708,
+47080=>11709,
+47081=>11710,
+47082=>11711,
+47083=>11712,
+47086=>11713,
+47087=>11714,
+47089=>11715,
+47090=>11716,
+47091=>11717,
+47093=>11718,
+47094=>11719,
+47095=>11720,
+47096=>11721,
+47097=>11722,
+47098=>11723,
+47099=>11724,
+47102=>11725,
+47106=>11726,
+47107=>11727,
+47108=>11728,
+47109=>11729,
+47110=>11730,
+47114=>11731,
+47115=>11732,
+47117=>11733,
+47118=>11734,
+47119=>11735,
+47121=>11736,
+47122=>11737,
+47123=>11738,
+47124=>11739,
+47125=>11740,
+47126=>11741,
+47127=>11742,
+47130=>11743,
+47132=>11744,
+47134=>11745,
+47135=>11746,
+47136=>11747,
+47137=>11748,
+47138=>11749,
+47139=>11750,
+47142=>11751,
+47143=>11752,
+47145=>11753,
+47146=>11754,
+47147=>11755,
+47149=>11756,
+47150=>11757,
+47151=>11758,
+47152=>11759,
+47153=>11760,
+47154=>11761,
+47155=>11762,
+47158=>11763,
+47162=>11764,
+47163=>11765,
+47164=>11766,
+47165=>11767,
+47166=>11768,
+47167=>11769,
+47169=>11770,
+47170=>11771,
+47171=>11772,
+47173=>11773,
+47174=>11774,
+47175=>11775,
+47176=>11776,
+47177=>11777,
+47178=>11778,
+47179=>11779,
+47180=>11780,
+47181=>11781,
+47182=>11782,
+47183=>11783,
+47184=>11784,
+47186=>11785,
+47188=>11786,
+47189=>11787,
+47190=>11788,
+47191=>11789,
+47192=>11790,
+47193=>11791,
+47194=>11792,
+47195=>11793,
+47198=>11794,
+47199=>11795,
+47201=>11796,
+47202=>11797,
+47203=>11798,
+47205=>11799,
+47206=>11800,
+47207=>11801,
+47208=>11802,
+47209=>11803,
+47210=>11804,
+47211=>11805,
+47214=>11806,
+47216=>11807,
+47218=>11808,
+47219=>11809,
+47220=>11810,
+47221=>11811,
+47222=>11812,
+47223=>11813,
+47225=>11814,
+47226=>11815,
+47227=>11816,
+47229=>11817,
+47230=>11818,
+47231=>11819,
+47232=>11820,
+47233=>11821,
+47234=>11822,
+47235=>11823,
+47236=>11824,
+47237=>11825,
+47238=>11826,
+47239=>11827,
+47240=>11828,
+47241=>11829,
+47242=>11830,
+47243=>11831,
+47244=>11832,
+47246=>11833,
+47247=>11834,
+47248=>11835,
+47249=>11836,
+47250=>11837,
+47251=>11838,
+47252=>11839,
+47253=>11840,
+47254=>11841,
+47255=>11842,
+47256=>11843,
+47257=>11844,
+47258=>11845,
+47259=>11846,
+47260=>11847,
+47261=>11848,
+47262=>11849,
+47263=>11850,
+47264=>11851,
+47265=>11852,
+47266=>11853,
+47267=>11854,
+47268=>11855,
+47269=>11856,
+47270=>11857,
+47271=>11858,
+47273=>11859,
+47274=>11860,
+47275=>11861,
+47276=>11862,
+47277=>11863,
+47278=>11864,
+47279=>11865,
+47281=>11866,
+47282=>11867,
+47283=>11868,
+47285=>11869,
+47286=>11870,
+47287=>11871,
+47289=>11872,
+47290=>11873,
+47291=>11874,
+47292=>11875,
+47293=>11876,
+47294=>11877,
+47295=>11878,
+47298=>11879,
+47300=>11880,
+47302=>11881,
+47303=>11882,
+47304=>11883,
+47305=>11884,
+47306=>11885,
+47307=>11886,
+47309=>11887,
+47310=>11888,
+47311=>11889,
+47313=>11890,
+47314=>11891,
+47315=>11892,
+47317=>11893,
+47318=>11894,
+47319=>11895,
+47320=>11896,
+47321=>11897,
+47322=>11898,
+47323=>11899,
+47324=>11900,
+47326=>11901,
+47328=>11902,
+47330=>11903,
+47331=>11904,
+47332=>11905,
+47333=>11906,
+47334=>11907,
+47335=>11908,
+47338=>11909,
+47339=>11910,
+47341=>11911,
+47342=>11912,
+47343=>11913,
+47345=>11914,
+47346=>11915,
+47347=>11916,
+47348=>11917,
+47349=>11918,
+47350=>11919,
+47351=>11920,
+47354=>11921,
+47356=>11922,
+47358=>11923,
+47359=>11924,
+47360=>11925,
+47361=>11926,
+47362=>11927,
+47363=>11928,
+47365=>11929,
+47366=>11930,
+47367=>11931,
+47368=>11932,
+47369=>11933,
+47370=>11934,
+47371=>11935,
+47372=>11936,
+47373=>11937,
+47374=>11938,
+47375=>11939,
+47376=>11940,
+47377=>11941,
+47378=>11942,
+47379=>11943,
+47380=>11944,
+47381=>11945,
+47382=>11946,
+47383=>11947,
+47385=>11948,
+47386=>11949,
+47387=>11950,
+47388=>11951,
+47389=>11952,
+47390=>11953,
+47391=>11954,
+47393=>11955,
+47394=>11956,
+47395=>11957,
+47396=>11958,
+47397=>11959,
+47398=>11960,
+47399=>11961,
+47400=>11962,
+47401=>11963,
+47402=>11964,
+47403=>11965,
+47404=>11966,
+47405=>11967,
+47406=>11968,
+47407=>11969,
+47408=>11970,
+47409=>11971,
+47410=>11972,
+47411=>11973,
+47412=>11974,
+47413=>11975,
+47414=>11976,
+47415=>11977,
+47416=>11978,
+47417=>11979,
+47418=>11980,
+47419=>11981,
+47422=>11982,
+47423=>11983,
+47425=>11984,
+47426=>11985,
+47427=>11986,
+47429=>11987,
+47430=>11988,
+47431=>11989,
+47432=>11990,
+47433=>11991,
+47434=>11992,
+47435=>11993,
+47437=>11994,
+47438=>11995,
+47440=>11996,
+47442=>11997,
+47443=>11998,
+47444=>11999,
+47445=>12000,
+47446=>12001,
+47447=>12002,
+47450=>12003,
+47451=>12004,
+47453=>12005,
+47454=>12006,
+47455=>12007,
+47457=>12008,
+47458=>12009,
+47459=>12010,
+47460=>12011,
+47461=>12012,
+47462=>12013,
+47463=>12014,
+47466=>12015,
+47468=>12016,
+47470=>12017,
+47471=>12018,
+47472=>12019,
+47473=>12020,
+47474=>12021,
+47475=>12022,
+47478=>12023,
+47479=>12024,
+47481=>12025,
+47482=>12026,
+47483=>12027,
+47485=>12028,
+47486=>12029,
+47487=>12030,
+47488=>12031,
+47489=>12032,
+47490=>12033,
+47491=>12034,
+47494=>12035,
+47496=>12036,
+47499=>12037,
+47500=>12038,
+47503=>12039,
+47504=>12040,
+47505=>12041,
+47506=>12042,
+47507=>12043,
+47508=>12044,
+47509=>12045,
+47510=>12046,
+47511=>12047,
+47512=>12048,
+47513=>12049,
+47514=>12050,
+47515=>12051,
+47516=>12052,
+47517=>12053,
+47518=>12054,
+47519=>12055,
+47520=>12056,
+47521=>12057,
+47522=>12058,
+47523=>12059,
+47524=>12060,
+47525=>12061,
+47526=>12062,
+47527=>12063,
+47528=>12064,
+47529=>12065,
+47530=>12066,
+47531=>12067,
+47534=>12068,
+47535=>12069,
+47537=>12070,
+47538=>12071,
+47539=>12072,
+47541=>12073,
+47542=>12074,
+47543=>12075,
+47544=>12076,
+47545=>12077,
+47546=>12078,
+47547=>12079,
+47550=>12080,
+47552=>12081,
+47554=>12082,
+47555=>12083,
+47556=>12084,
+47557=>12085,
+47558=>12086,
+47559=>12087,
+47562=>12088,
+47563=>12089,
+47565=>12090,
+47571=>12091,
+47572=>12092,
+47573=>12093,
+47574=>12094,
+47575=>12095,
+47578=>12096,
+47580=>12097,
+47583=>12098,
+47584=>12099,
+47586=>12100,
+47590=>12101,
+47591=>12102,
+47593=>12103,
+47594=>12104,
+47595=>12105,
+47597=>12106,
+47598=>12107,
+47599=>12108,
+47600=>12109,
+47601=>12110,
+47602=>12111,
+47603=>12112,
+47606=>12113,
+47611=>12114,
+47612=>12115,
+47613=>12116,
+47614=>12117,
+47615=>12118,
+47618=>12119,
+47619=>12120,
+47620=>12121,
+47621=>12122,
+47622=>12123,
+47623=>12124,
+47625=>12125,
+47626=>12126,
+47627=>12127,
+47628=>12128,
+47629=>12129,
+47630=>12130,
+47631=>12131,
+47632=>12132,
+47633=>12133,
+47634=>12134,
+47635=>12135,
+47636=>12136,
+47638=>12137,
+47639=>12138,
+47640=>12139,
+47641=>12140,
+47642=>12141,
+47643=>12142,
+47644=>12143,
+47645=>12144,
+47646=>12145,
+47647=>12146,
+47648=>12147,
+47649=>12148,
+47650=>12149,
+47651=>12150,
+47652=>12151,
+47653=>12152,
+47654=>12153,
+47655=>12154,
+47656=>12155,
+47657=>12156,
+47658=>12157,
+47659=>12158,
+47660=>12159,
+47661=>12160,
+47662=>12161,
+47663=>12162,
+47664=>12163,
+47665=>12164,
+47666=>12165,
+47667=>12166,
+47668=>12167,
+47669=>12168,
+47670=>12169,
+47671=>12170,
+47674=>12171,
+47675=>12172,
+47677=>12173,
+47678=>12174,
+47679=>12175,
+47681=>12176,
+47683=>12177,
+47684=>12178,
+47685=>12179,
+47686=>12180,
+47687=>12181,
+47690=>12182,
+47692=>12183,
+47695=>12184,
+47696=>12185,
+47697=>12186,
+47698=>12187,
+47702=>12188,
+47703=>12189,
+47705=>12190,
+47706=>12191,
+47707=>12192,
+47709=>12193,
+47710=>12194,
+47711=>12195,
+47712=>12196,
+47713=>12197,
+47714=>12198,
+47715=>12199,
+47718=>12200,
+47722=>12201,
+47723=>12202,
+47724=>12203,
+47725=>12204,
+47726=>12205,
+47727=>12206,
+47730=>12207,
+47731=>12208,
+47733=>12209,
+47734=>12210,
+47735=>12211,
+47737=>12212,
+47738=>12213,
+47739=>12214,
+47740=>12215,
+47741=>12216,
+47742=>12217,
+47743=>12218,
+47744=>12219,
+47745=>12220,
+47746=>12221,
+47750=>12222,
+47752=>12223,
+47753=>12224,
+47754=>12225,
+47755=>12226,
+47757=>12227,
+47758=>12228,
+47759=>12229,
+47760=>12230,
+47761=>12231,
+47762=>12232,
+47763=>12233,
+47764=>12234,
+47765=>12235,
+47766=>12236,
+47767=>12237,
+47768=>12238,
+47769=>12239,
+47770=>12240,
+47771=>12241,
+47772=>12242,
+47773=>12243,
+47774=>12244,
+47775=>12245,
+47776=>12246,
+47777=>12247,
+47778=>12248,
+47779=>12249,
+47780=>12250,
+47781=>12251,
+47782=>12252,
+47783=>12253,
+47786=>12254,
+47789=>12255,
+47790=>12256,
+47791=>12257,
+47793=>12258,
+47795=>12259,
+47796=>12260,
+47797=>12261,
+47798=>12262,
+47799=>12263,
+47802=>12264,
+47804=>12265,
+47806=>12266,
+47807=>12267,
+47808=>12268,
+47809=>12269,
+47810=>12270,
+47811=>12271,
+47813=>12272,
+47814=>12273,
+47815=>12274,
+47817=>12275,
+47818=>12276,
+47819=>12277,
+47820=>12278,
+47821=>12279,
+47822=>12280,
+47823=>12281,
+47824=>12282,
+47825=>12283,
+47826=>12284,
+47827=>12285,
+47828=>12286,
+47829=>12287,
+47830=>12288,
+47831=>12289,
+47834=>12290,
+47835=>12291,
+47836=>12292,
+47837=>12293,
+47838=>12294,
+47839=>12295,
+47840=>12296,
+47841=>12297,
+47842=>12298,
+47843=>12299,
+47844=>12300,
+47845=>12301,
+47846=>12302,
+47847=>12303,
+47848=>12304,
+47849=>12305,
+47850=>12306,
+47851=>12307,
+47852=>12308,
+47853=>12309,
+47854=>12310,
+47855=>12311,
+47856=>12312,
+47857=>12313,
+47858=>12314,
+47859=>12315,
+47860=>12316,
+47861=>12317,
+47862=>12318,
+47863=>12319,
+47864=>12320,
+47865=>12321,
+47866=>12322,
+47867=>12323,
+47869=>12324,
+47870=>12325,
+47871=>12326,
+47873=>12327,
+47874=>12328,
+47875=>12329,
+47877=>12330,
+47878=>12331,
+47879=>12332,
+47880=>12333,
+47881=>12334,
+47882=>12335,
+47883=>12336,
+47884=>12337,
+47886=>12338,
+47888=>12339,
+47890=>12340,
+47891=>12341,
+47892=>12342,
+47893=>12343,
+47894=>12344,
+47895=>12345,
+47897=>12346,
+47898=>12347,
+47899=>12348,
+47901=>12349,
+47902=>12350,
+47903=>12351,
+47905=>12352,
+47906=>12353,
+47907=>12354,
+47908=>12355,
+47909=>12356,
+47910=>12357,
+47911=>12358,
+47912=>12359,
+47914=>12360,
+47916=>12361,
+47917=>12362,
+47918=>12363,
+47919=>12364,
+47920=>12365,
+47921=>12366,
+47922=>12367,
+47923=>12368,
+47927=>12369,
+47929=>12370,
+47930=>12371,
+47935=>12372,
+47936=>12373,
+47937=>12374,
+47938=>12375,
+47939=>12376,
+47942=>12377,
+47944=>12378,
+47946=>12379,
+47947=>12380,
+47948=>12381,
+47950=>12382,
+47953=>12383,
+47954=>12384,
+47955=>12385,
+47957=>12386,
+47958=>12387,
+47959=>12388,
+47961=>12389,
+47962=>12390,
+47963=>12391,
+47964=>12392,
+47965=>12393,
+47966=>12394,
+47967=>12395,
+47968=>12396,
+47970=>12397,
+47972=>12398,
+47973=>12399,
+47974=>12400,
+47975=>12401,
+47976=>12402,
+47977=>12403,
+47978=>12404,
+47979=>12405,
+47981=>12406,
+47982=>12407,
+47983=>12408,
+47984=>12409,
+47985=>12410,
+47986=>12411,
+47987=>12412,
+47988=>12413,
+47989=>12414,
+47990=>12415,
+47991=>12416,
+47992=>12417,
+47993=>12418,
+47994=>12419,
+47995=>12420,
+47996=>12421,
+47997=>12422,
+47998=>12423,
+47999=>12424,
+48000=>12425,
+48001=>12426,
+48002=>12427,
+48003=>12428,
+48004=>12429,
+48005=>12430,
+48006=>12431,
+48007=>12432,
+48009=>12433,
+48010=>12434,
+48011=>12435,
+48013=>12436,
+48014=>12437,
+48015=>12438,
+48017=>12439,
+48018=>12440,
+48019=>12441,
+48020=>12442,
+48021=>12443,
+48022=>12444,
+48023=>12445,
+48024=>12446,
+48025=>12447,
+48026=>12448,
+48027=>12449,
+48028=>12450,
+48029=>12451,
+48030=>12452,
+48031=>12453,
+48032=>12454,
+48033=>12455,
+48034=>12456,
+48035=>12457,
+48037=>12458,
+48038=>12459,
+48039=>12460,
+48041=>12461,
+48042=>12462,
+48043=>12463,
+48045=>12464,
+48046=>12465,
+48047=>12466,
+48048=>12467,
+48049=>12468,
+48050=>12469,
+48051=>12470,
+48053=>12471,
+48054=>12472,
+48056=>12473,
+48057=>12474,
+48058=>12475,
+48059=>12476,
+48060=>12477,
+48061=>12478,
+48062=>12479,
+48063=>12480,
+48065=>12481,
+48066=>12482,
+48067=>12483,
+48069=>12484,
+48070=>12485,
+48071=>12486,
+48073=>12487,
+48074=>12488,
+48075=>12489,
+48076=>12490,
+48077=>12491,
+48078=>12492,
+48079=>12493,
+48081=>12494,
+48082=>12495,
+48084=>12496,
+48085=>12497,
+48086=>12498,
+48087=>12499,
+48088=>12500,
+48089=>12501,
+48090=>12502,
+48091=>12503,
+48092=>12504,
+48093=>12505,
+48094=>12506,
+48095=>12507,
+48096=>12508,
+48097=>12509,
+48098=>12510,
+48099=>12511,
+48100=>12512,
+48101=>12513,
+48102=>12514,
+48103=>12515,
+48104=>12516,
+48105=>12517,
+48106=>12518,
+48107=>12519,
+48108=>12520,
+48109=>12521,
+48110=>12522,
+48111=>12523,
+48112=>12524,
+48113=>12525,
+48114=>12526,
+48115=>12527,
+48116=>12528,
+48117=>12529,
+48118=>12530,
+48119=>12531,
+48122=>12532,
+48123=>12533,
+48125=>12534,
+48126=>12535,
+48129=>12536,
+48131=>12537,
+48132=>12538,
+48133=>12539,
+48134=>12540,
+48135=>12541,
+48138=>12542,
+48142=>12543,
+48144=>12544,
+48146=>12545,
+48147=>12546,
+48153=>12547,
+48154=>12548,
+48160=>12549,
+48161=>12550,
+48162=>12551,
+48163=>12552,
+48166=>12553,
+48168=>12554,
+48170=>12555,
+48171=>12556,
+48172=>12557,
+48174=>12558,
+48175=>12559,
+48178=>12560,
+48179=>12561,
+48181=>12562,
+48182=>12563,
+48183=>12564,
+48185=>12565,
+48186=>12566,
+48187=>12567,
+48188=>12568,
+48189=>12569,
+48190=>12570,
+48191=>12571,
+48194=>12572,
+48198=>12573,
+48199=>12574,
+48200=>12575,
+48202=>12576,
+48203=>12577,
+48206=>12578,
+48207=>12579,
+48209=>12580,
+48210=>12581,
+48211=>12582,
+48212=>12583,
+48213=>12584,
+48214=>12585,
+48215=>12586,
+48216=>12587,
+48217=>12588,
+48218=>12589,
+48219=>12590,
+48220=>12591,
+48222=>12592,
+48223=>12593,
+48224=>12594,
+48225=>12595,
+48226=>12596,
+48227=>12597,
+48228=>12598,
+48229=>12599,
+48230=>12600,
+48231=>12601,
+48232=>12602,
+48233=>12603,
+48234=>12604,
+48235=>12605,
+48236=>12606,
+48237=>12607,
+48238=>12608,
+48239=>12609,
+48240=>12610,
+48241=>12611,
+48242=>12612,
+48243=>12613,
+48244=>12614,
+48245=>12615,
+48246=>12616,
+48247=>12617,
+48248=>12618,
+48249=>12619,
+48250=>12620,
+48251=>12621,
+48252=>12622,
+48253=>12623,
+48254=>12624,
+48255=>12625,
+48256=>12626,
+48257=>12627,
+48258=>12628,
+48259=>12629,
+48262=>12630,
+48263=>12631,
+48265=>12632,
+48266=>12633,
+48269=>12634,
+48271=>12635,
+48272=>12636,
+48273=>12637,
+48274=>12638,
+48275=>12639,
+48278=>12640,
+48280=>12641,
+48283=>12642,
+48284=>12643,
+48285=>12644,
+48286=>12645,
+48287=>12646,
+48290=>12647,
+48291=>12648,
+48293=>12649,
+48294=>12650,
+48297=>12651,
+48298=>12652,
+48299=>12653,
+48300=>12654,
+48301=>12655,
+48302=>12656,
+48303=>12657,
+48306=>12658,
+48310=>12659,
+48311=>12660,
+48312=>12661,
+48313=>12662,
+48314=>12663,
+48315=>12664,
+48318=>12665,
+48319=>12666,
+48321=>12667,
+48322=>12668,
+48323=>12669,
+48325=>12670,
+48326=>12671,
+48327=>12672,
+48328=>12673,
+48329=>12674,
+48330=>12675,
+48331=>12676,
+48332=>12677,
+48334=>12678,
+48338=>12679,
+48339=>12680,
+48340=>12681,
+48342=>12682,
+48343=>12683,
+48345=>12684,
+48346=>12685,
+48347=>12686,
+48349=>12687,
+48350=>12688,
+48351=>12689,
+48352=>12690,
+48353=>12691,
+48354=>12692,
+48355=>12693,
+48356=>12694,
+48357=>12695,
+48358=>12696,
+48359=>12697,
+48360=>12698,
+48361=>12699,
+48362=>12700,
+48363=>12701,
+48364=>12702,
+48365=>12703,
+48366=>12704,
+48367=>12705,
+48368=>12706,
+48369=>12707,
+48370=>12708,
+48371=>12709,
+48375=>12710,
+48377=>12711,
+48378=>12712,
+48379=>12713,
+48381=>12714,
+48382=>12715,
+48383=>12716,
+48384=>12717,
+48385=>12718,
+48386=>12719,
+48387=>12720,
+48390=>12721,
+48392=>12722,
+48394=>12723,
+48395=>12724,
+48396=>12725,
+48397=>12726,
+48398=>12727,
+48399=>12728,
+48401=>12729,
+48402=>12730,
+48403=>12731,
+48405=>12732,
+48406=>12733,
+48407=>12734,
+48408=>12735,
+48409=>12736,
+48410=>12737,
+48411=>12738,
+48412=>12739,
+48413=>12740,
+48414=>12741,
+48415=>12742,
+48416=>12743,
+48417=>12744,
+48418=>12745,
+48419=>12746,
+48421=>12747,
+48422=>12748,
+48423=>12749,
+48424=>12750,
+48425=>12751,
+48426=>12752,
+48427=>12753,
+48429=>12754,
+48430=>12755,
+48431=>12756,
+48432=>12757,
+48433=>12758,
+48434=>12759,
+48435=>12760,
+48436=>12761,
+48437=>12762,
+48438=>12763,
+48439=>12764,
+48440=>12765,
+48441=>12766,
+48442=>12767,
+48443=>12768,
+48444=>12769,
+48445=>12770,
+48446=>12771,
+48447=>12772,
+48449=>12773,
+48450=>12774,
+48451=>12775,
+48452=>12776,
+48453=>12777,
+48454=>12778,
+48455=>12779,
+48458=>12780,
+48459=>12781,
+48461=>12782,
+48462=>12783,
+48463=>12784,
+48465=>12785,
+48466=>12786,
+48467=>12787,
+48468=>12788,
+48469=>12789,
+48470=>12790,
+48471=>12791,
+48474=>12792,
+48475=>12793,
+48476=>12794,
+48477=>12795,
+48478=>12796,
+48479=>12797,
+48480=>12798,
+48481=>12799,
+48482=>12800,
+48483=>12801,
+48485=>12802,
+48486=>12803,
+48487=>12804,
+48489=>12805,
+48490=>12806,
+48491=>12807,
+48492=>12808,
+48493=>12809,
+48494=>12810,
+48495=>12811,
+48496=>12812,
+48497=>12813,
+48498=>12814,
+48499=>12815,
+48500=>12816,
+48501=>12817,
+48502=>12818,
+48503=>12819,
+48504=>12820,
+48505=>12821,
+48506=>12822,
+48507=>12823,
+48508=>12824,
+48509=>12825,
+48510=>12826,
+48511=>12827,
+48514=>12828,
+48515=>12829,
+48517=>12830,
+48518=>12831,
+48523=>12832,
+48524=>12833,
+48525=>12834,
+48526=>12835,
+48527=>12836,
+48530=>12837,
+48532=>12838,
+48534=>12839,
+48535=>12840,
+48536=>12841,
+48539=>12842,
+48541=>12843,
+48542=>12844,
+48543=>12845,
+48544=>12846,
+48545=>12847,
+48546=>12848,
+48547=>12849,
+48549=>12850,
+48550=>12851,
+48551=>12852,
+48552=>12853,
+48553=>12854,
+48554=>12855,
+48555=>12856,
+48556=>12857,
+48557=>12858,
+48558=>12859,
+48559=>12860,
+48561=>12861,
+48562=>12862,
+48563=>12863,
+48564=>12864,
+48565=>12865,
+48566=>12866,
+48567=>12867,
+48569=>12868,
+48570=>12869,
+48571=>12870,
+48572=>12871,
+48573=>12872,
+48574=>12873,
+48575=>12874,
+48576=>12875,
+48577=>12876,
+48578=>12877,
+48579=>12878,
+48580=>12879,
+48581=>12880,
+48582=>12881,
+48583=>12882,
+48584=>12883,
+48585=>12884,
+48586=>12885,
+48587=>12886,
+48588=>12887,
+48589=>12888,
+48590=>12889,
+48591=>12890,
+48592=>12891,
+48593=>12892,
+48594=>12893,
+48595=>12894,
+48598=>12895,
+48599=>12896,
+48601=>12897,
+48602=>12898,
+48603=>12899,
+48605=>12900,
+48606=>12901,
+48607=>12902,
+48608=>12903,
+48609=>12904,
+48610=>12905,
+48611=>12906,
+48612=>12907,
+48613=>12908,
+48614=>12909,
+48615=>12910,
+48616=>12911,
+48618=>12912,
+48619=>12913,
+48620=>12914,
+48621=>12915,
+48622=>12916,
+48623=>12917,
+48625=>12918,
+48626=>12919,
+48627=>12920,
+48629=>12921,
+48630=>12922,
+48631=>12923,
+48633=>12924,
+48634=>12925,
+48635=>12926,
+48636=>12927,
+48637=>12928,
+48638=>12929,
+48639=>12930,
+48641=>12931,
+48642=>12932,
+48644=>12933,
+48646=>12934,
+48647=>12935,
+48648=>12936,
+48649=>12937,
+48650=>12938,
+48651=>12939,
+48654=>12940,
+48655=>12941,
+48657=>12942,
+48658=>12943,
+48659=>12944,
+48661=>12945,
+48662=>12946,
+48663=>12947,
+48664=>12948,
+48665=>12949,
+48666=>12950,
+48667=>12951,
+48670=>12952,
+48672=>12953,
+48673=>12954,
+48674=>12955,
+48675=>12956,
+48676=>12957,
+48677=>12958,
+48678=>12959,
+48679=>12960,
+48680=>12961,
+48681=>12962,
+48682=>12963,
+48683=>12964,
+48684=>12965,
+48685=>12966,
+48686=>12967,
+48687=>12968,
+48688=>12969,
+48689=>12970,
+48690=>12971,
+48691=>12972,
+48692=>12973,
+48693=>12974,
+48694=>12975,
+48695=>12976,
+48696=>12977,
+48697=>12978,
+48698=>12979,
+48699=>12980,
+48700=>12981,
+48701=>12982,
+48702=>12983,
+48703=>12984,
+48704=>12985,
+48705=>12986,
+48706=>12987,
+48707=>12988,
+48710=>12989,
+48711=>12990,
+48713=>12991,
+48714=>12992,
+48715=>12993,
+48717=>12994,
+48719=>12995,
+48720=>12996,
+48721=>12997,
+48722=>12998,
+48723=>12999,
+48726=>13000,
+48728=>13001,
+48732=>13002,
+48733=>13003,
+48734=>13004,
+48735=>13005,
+48738=>13006,
+48739=>13007,
+48741=>13008,
+48742=>13009,
+48743=>13010,
+48745=>13011,
+48747=>13012,
+48748=>13013,
+48749=>13014,
+48750=>13015,
+48751=>13016,
+48754=>13017,
+48758=>13018,
+48759=>13019,
+48760=>13020,
+48761=>13021,
+48762=>13022,
+48766=>13023,
+48767=>13024,
+48769=>13025,
+48770=>13026,
+48771=>13027,
+48773=>13028,
+48774=>13029,
+48775=>13030,
+48776=>13031,
+48777=>13032,
+48778=>13033,
+48779=>13034,
+48782=>13035,
+48786=>13036,
+48787=>13037,
+48788=>13038,
+48789=>13039,
+48790=>13040,
+48791=>13041,
+48794=>13042,
+48795=>13043,
+48796=>13044,
+48797=>13045,
+48798=>13046,
+48799=>13047,
+48800=>13048,
+48801=>13049,
+48802=>13050,
+48803=>13051,
+48804=>13052,
+48805=>13053,
+48806=>13054,
+48807=>13055,
+48809=>13056,
+48810=>13057,
+48811=>13058,
+48812=>13059,
+48813=>13060,
+48814=>13061,
+48815=>13062,
+48816=>13063,
+48817=>13064,
+48818=>13065,
+48819=>13066,
+48820=>13067,
+48821=>13068,
+48822=>13069,
+48823=>13070,
+48824=>13071,
+48825=>13072,
+48826=>13073,
+48827=>13074,
+48828=>13075,
+48829=>13076,
+48830=>13077,
+48831=>13078,
+48832=>13079,
+48833=>13080,
+48834=>13081,
+48835=>13082,
+48836=>13083,
+48837=>13084,
+48838=>13085,
+48839=>13086,
+48840=>13087,
+48841=>13088,
+48842=>13089,
+48843=>13090,
+48844=>13091,
+48845=>13092,
+48846=>13093,
+48847=>13094,
+48850=>13095,
+48851=>13096,
+48853=>13097,
+48854=>13098,
+48857=>13099,
+48858=>13100,
+48859=>13101,
+48860=>13102,
+48861=>13103,
+48862=>13104,
+48863=>13105,
+48865=>13106,
+48866=>13107,
+48870=>13108,
+48871=>13109,
+48872=>13110,
+48873=>13111,
+48874=>13112,
+48875=>13113,
+48877=>13114,
+48878=>13115,
+48879=>13116,
+48880=>13117,
+48881=>13118,
+48882=>13119,
+48883=>13120,
+48884=>13121,
+48885=>13122,
+48886=>13123,
+48887=>13124,
+48888=>13125,
+48889=>13126,
+48890=>13127,
+48891=>13128,
+48892=>13129,
+48893=>13130,
+48894=>13131,
+48895=>13132,
+48896=>13133,
+48898=>13134,
+48899=>13135,
+48900=>13136,
+48901=>13137,
+48902=>13138,
+48903=>13139,
+48906=>13140,
+48907=>13141,
+48908=>13142,
+48909=>13143,
+48910=>13144,
+48911=>13145,
+48912=>13146,
+48913=>13147,
+48914=>13148,
+48915=>13149,
+48916=>13150,
+48917=>13151,
+48918=>13152,
+48919=>13153,
+48922=>13154,
+48926=>13155,
+48927=>13156,
+48928=>13157,
+48929=>13158,
+48930=>13159,
+48931=>13160,
+48932=>13161,
+48933=>13162,
+48934=>13163,
+48935=>13164,
+48936=>13165,
+48937=>13166,
+48938=>13167,
+48939=>13168,
+48940=>13169,
+48941=>13170,
+48942=>13171,
+48943=>13172,
+48944=>13173,
+48945=>13174,
+48946=>13175,
+48947=>13176,
+48948=>13177,
+48949=>13178,
+48950=>13179,
+48951=>13180,
+48952=>13181,
+48953=>13182,
+48954=>13183,
+48955=>13184,
+48956=>13185,
+48957=>13186,
+48958=>13187,
+48959=>13188,
+48962=>13189,
+48963=>13190,
+48965=>13191,
+48966=>13192,
+48967=>13193,
+48969=>13194,
+48970=>13195,
+48971=>13196,
+48972=>13197,
+48973=>13198,
+48974=>13199,
+48975=>13200,
+48978=>13201,
+48979=>13202,
+48980=>13203,
+48982=>13204,
+48983=>13205,
+48984=>13206,
+48985=>13207,
+48986=>13208,
+48987=>13209,
+48988=>13210,
+48989=>13211,
+48990=>13212,
+48991=>13213,
+48992=>13214,
+48993=>13215,
+48994=>13216,
+48995=>13217,
+48996=>13218,
+48997=>13219,
+48998=>13220,
+48999=>13221,
+49000=>13222,
+49001=>13223,
+49002=>13224,
+49003=>13225,
+49004=>13226,
+49005=>13227,
+49006=>13228,
+49007=>13229,
+49008=>13230,
+49009=>13231,
+49010=>13232,
+49011=>13233,
+49012=>13234,
+49013=>13235,
+49014=>13236,
+49015=>13237,
+49016=>13238,
+49017=>13239,
+49018=>13240,
+49019=>13241,
+49020=>13242,
+49021=>13243,
+49022=>13244,
+49023=>13245,
+49024=>13246,
+49025=>13247,
+49026=>13248,
+49027=>13249,
+49028=>13250,
+49029=>13251,
+49030=>13252,
+49031=>13253,
+49032=>13254,
+49033=>13255,
+49034=>13256,
+49035=>13257,
+49036=>13258,
+49037=>13259,
+49038=>13260,
+49039=>13261,
+49040=>13262,
+49041=>13263,
+49042=>13264,
+49043=>13265,
+49045=>13266,
+49046=>13267,
+49047=>13268,
+49048=>13269,
+49049=>13270,
+49050=>13271,
+49051=>13272,
+49052=>13273,
+49053=>13274,
+49054=>13275,
+49055=>13276,
+49056=>13277,
+49057=>13278,
+49058=>13279,
+49059=>13280,
+49060=>13281,
+49061=>13282,
+49062=>13283,
+49063=>13284,
+49064=>13285,
+49065=>13286,
+49066=>13287,
+49067=>13288,
+49068=>13289,
+49069=>13290,
+49070=>13291,
+49071=>13292,
+49073=>13293,
+49074=>13294,
+49075=>13295,
+49076=>13296,
+49077=>13297,
+49078=>13298,
+49079=>13299,
+49080=>13300,
+49081=>13301,
+49082=>13302,
+49083=>13303,
+49084=>13304,
+49085=>13305,
+49086=>13306,
+49087=>13307,
+49088=>13308,
+49089=>13309,
+49090=>13310,
+49091=>13311,
+49092=>13312,
+49094=>13313,
+49095=>13314,
+49096=>13315,
+49097=>13316,
+49098=>13317,
+49099=>13318,
+49102=>13319,
+49103=>13320,
+49105=>13321,
+49106=>13322,
+49107=>13323,
+49109=>13324,
+49110=>13325,
+49111=>13326,
+49112=>13327,
+49113=>13328,
+49114=>13329,
+49115=>13330,
+49117=>13331,
+49118=>13332,
+49120=>13333,
+49122=>13334,
+49123=>13335,
+49124=>13336,
+49125=>13337,
+49126=>13338,
+49127=>13339,
+49128=>13340,
+49129=>13341,
+49130=>13342,
+49131=>13343,
+49132=>13344,
+49133=>13345,
+49134=>13346,
+49135=>13347,
+49136=>13348,
+49137=>13349,
+49138=>13350,
+49139=>13351,
+49140=>13352,
+49141=>13353,
+49142=>13354,
+49143=>13355,
+49144=>13356,
+49145=>13357,
+49146=>13358,
+49147=>13359,
+49148=>13360,
+49149=>13361,
+49150=>13362,
+49151=>13363,
+49152=>13364,
+49153=>13365,
+49154=>13366,
+49155=>13367,
+49156=>13368,
+49157=>13369,
+49158=>13370,
+49159=>13371,
+49160=>13372,
+49161=>13373,
+49162=>13374,
+49163=>13375,
+49164=>13376,
+49165=>13377,
+49166=>13378,
+49167=>13379,
+49168=>13380,
+49169=>13381,
+49170=>13382,
+49171=>13383,
+49172=>13384,
+49173=>13385,
+49174=>13386,
+49175=>13387,
+49176=>13388,
+49177=>13389,
+49178=>13390,
+49179=>13391,
+49180=>13392,
+49181=>13393,
+49182=>13394,
+49183=>13395,
+49184=>13396,
+49185=>13397,
+49186=>13398,
+49187=>13399,
+49188=>13400,
+49189=>13401,
+49190=>13402,
+49191=>13403,
+49192=>13404,
+49193=>13405,
+49194=>13406,
+49195=>13407,
+49196=>13408,
+49197=>13409,
+49198=>13410,
+49199=>13411,
+49200=>13412,
+49201=>13413,
+49202=>13414,
+49203=>13415,
+49204=>13416,
+49205=>13417,
+49206=>13418,
+49207=>13419,
+49208=>13420,
+49209=>13421,
+49210=>13422,
+49211=>13423,
+49213=>13424,
+49214=>13425,
+49215=>13426,
+49216=>13427,
+49217=>13428,
+49218=>13429,
+49219=>13430,
+49220=>13431,
+49221=>13432,
+49222=>13433,
+49223=>13434,
+49224=>13435,
+49225=>13436,
+49226=>13437,
+49227=>13438,
+49228=>13439,
+49229=>13440,
+49230=>13441,
+49231=>13442,
+49232=>13443,
+49234=>13444,
+49235=>13445,
+49236=>13446,
+49237=>13447,
+49238=>13448,
+49239=>13449,
+49241=>13450,
+49242=>13451,
+49243=>13452,
+49245=>13453,
+49246=>13454,
+49247=>13455,
+49249=>13456,
+49250=>13457,
+49251=>13458,
+49252=>13459,
+49253=>13460,
+49254=>13461,
+49255=>13462,
+49258=>13463,
+49259=>13464,
+49260=>13465,
+49261=>13466,
+49262=>13467,
+49263=>13468,
+49264=>13469,
+49265=>13470,
+49266=>13471,
+49267=>13472,
+49268=>13473,
+49269=>13474,
+49270=>13475,
+49271=>13476,
+49272=>13477,
+49273=>13478,
+49274=>13479,
+49275=>13480,
+49276=>13481,
+49277=>13482,
+49278=>13483,
+49279=>13484,
+49280=>13485,
+49281=>13486,
+49282=>13487,
+49283=>13488,
+49284=>13489,
+49285=>13490,
+49286=>13491,
+49287=>13492,
+49288=>13493,
+49289=>13494,
+49290=>13495,
+49291=>13496,
+49292=>13497,
+49293=>13498,
+49294=>13499,
+49295=>13500,
+49298=>13501,
+49299=>13502,
+49301=>13503,
+49302=>13504,
+49303=>13505,
+49305=>13506,
+49306=>13507,
+49307=>13508,
+49308=>13509,
+49309=>13510,
+49310=>13511,
+49311=>13512,
+49314=>13513,
+49316=>13514,
+49318=>13515,
+49319=>13516,
+49320=>13517,
+49321=>13518,
+49322=>13519,
+49323=>13520,
+49326=>13521,
+49329=>13522,
+49330=>13523,
+49335=>13524,
+49336=>13525,
+49337=>13526,
+49338=>13527,
+49339=>13528,
+49342=>13529,
+49346=>13530,
+49347=>13531,
+49348=>13532,
+49350=>13533,
+49351=>13534,
+49354=>13535,
+49355=>13536,
+49357=>13537,
+49358=>13538,
+49359=>13539,
+49361=>13540,
+49362=>13541,
+49363=>13542,
+49364=>13543,
+49365=>13544,
+49366=>13545,
+49367=>13546,
+49370=>13547,
+49374=>13548,
+49375=>13549,
+49376=>13550,
+49377=>13551,
+49378=>13552,
+49379=>13553,
+49382=>13554,
+49383=>13555,
+49385=>13556,
+49386=>13557,
+49387=>13558,
+49389=>13559,
+49390=>13560,
+49391=>13561,
+49392=>13562,
+49393=>13563,
+49394=>13564,
+49395=>13565,
+49398=>13566,
+49400=>13567,
+49402=>13568,
+49403=>13569,
+49404=>13570,
+49405=>13571,
+49406=>13572,
+49407=>13573,
+49409=>13574,
+49410=>13575,
+49411=>13576,
+49413=>13577,
+49414=>13578,
+49415=>13579,
+49417=>13580,
+49418=>13581,
+49419=>13582,
+49420=>13583,
+49421=>13584,
+49422=>13585,
+49423=>13586,
+49425=>13587,
+49426=>13588,
+49427=>13589,
+49428=>13590,
+49430=>13591,
+49431=>13592,
+49432=>13593,
+49433=>13594,
+49434=>13595,
+49435=>13596,
+49441=>13597,
+49442=>13598,
+49445=>13599,
+49448=>13600,
+49449=>13601,
+49450=>13602,
+49451=>13603,
+49454=>13604,
+49458=>13605,
+49459=>13606,
+49460=>13607,
+49461=>13608,
+49463=>13609,
+49466=>13610,
+49467=>13611,
+49469=>13612,
+49470=>13613,
+49471=>13614,
+49473=>13615,
+49474=>13616,
+49475=>13617,
+49476=>13618,
+49477=>13619,
+49478=>13620,
+49479=>13621,
+49482=>13622,
+49486=>13623,
+49487=>13624,
+49488=>13625,
+49489=>13626,
+49490=>13627,
+49491=>13628,
+49494=>13629,
+49495=>13630,
+49497=>13631,
+49498=>13632,
+49499=>13633,
+49501=>13634,
+49502=>13635,
+49503=>13636,
+49504=>13637,
+49505=>13638,
+49506=>13639,
+49507=>13640,
+49510=>13641,
+49514=>13642,
+49515=>13643,
+49516=>13644,
+49517=>13645,
+49518=>13646,
+49519=>13647,
+49521=>13648,
+49522=>13649,
+49523=>13650,
+49525=>13651,
+49526=>13652,
+49527=>13653,
+49529=>13654,
+49530=>13655,
+49531=>13656,
+49532=>13657,
+49533=>13658,
+49534=>13659,
+49535=>13660,
+49536=>13661,
+49537=>13662,
+49538=>13663,
+49539=>13664,
+49540=>13665,
+49542=>13666,
+49543=>13667,
+49544=>13668,
+49545=>13669,
+49546=>13670,
+49547=>13671,
+49551=>13672,
+49553=>13673,
+49554=>13674,
+49555=>13675,
+49557=>13676,
+49559=>13677,
+49560=>13678,
+49561=>13679,
+49562=>13680,
+49563=>13681,
+49566=>13682,
+49568=>13683,
+49570=>13684,
+49571=>13685,
+49572=>13686,
+49574=>13687,
+49575=>13688,
+49578=>13689,
+49579=>13690,
+49581=>13691,
+49582=>13692,
+49583=>13693,
+49585=>13694,
+49586=>13695,
+49587=>13696,
+49588=>13697,
+49589=>13698,
+49590=>13699,
+49591=>13700,
+49592=>13701,
+49593=>13702,
+49594=>13703,
+49595=>13704,
+49596=>13705,
+49598=>13706,
+49599=>13707,
+49600=>13708,
+49601=>13709,
+49602=>13710,
+49603=>13711,
+49605=>13712,
+49606=>13713,
+49607=>13714,
+49609=>13715,
+49610=>13716,
+49611=>13717,
+49613=>13718,
+49614=>13719,
+49615=>13720,
+49616=>13721,
+49617=>13722,
+49618=>13723,
+49619=>13724,
+49621=>13725,
+49622=>13726,
+49625=>13727,
+49626=>13728,
+49627=>13729,
+49628=>13730,
+49629=>13731,
+49630=>13732,
+49631=>13733,
+49633=>13734,
+49634=>13735,
+49635=>13736,
+49637=>13737,
+49638=>13738,
+49639=>13739,
+49641=>13740,
+49642=>13741,
+49643=>13742,
+49644=>13743,
+49645=>13744,
+49646=>13745,
+49647=>13746,
+49650=>13747,
+49652=>13748,
+49653=>13749,
+49654=>13750,
+49655=>13751,
+49656=>13752,
+49657=>13753,
+49658=>13754,
+49659=>13755,
+49662=>13756,
+49663=>13757,
+49665=>13758,
+49666=>13759,
+49667=>13760,
+49669=>13761,
+49670=>13762,
+49671=>13763,
+49672=>13764,
+49673=>13765,
+49674=>13766,
+49675=>13767,
+49678=>13768,
+49680=>13769,
+49682=>13770,
+49683=>13771,
+49684=>13772,
+49685=>13773,
+49686=>13774,
+49687=>13775,
+49690=>13776,
+49691=>13777,
+49693=>13778,
+49694=>13779,
+49697=>13780,
+49698=>13781,
+49699=>13782,
+49700=>13783,
+49701=>13784,
+49702=>13785,
+49703=>13786,
+49706=>13787,
+49708=>13788,
+49710=>13789,
+49712=>13790,
+49715=>13791,
+49717=>13792,
+49718=>13793,
+49719=>13794,
+49720=>13795,
+49721=>13796,
+49722=>13797,
+49723=>13798,
+49724=>13799,
+49725=>13800,
+49726=>13801,
+49727=>13802,
+49728=>13803,
+49729=>13804,
+49730=>13805,
+49731=>13806,
+49732=>13807,
+49733=>13808,
+49734=>13809,
+49735=>13810,
+49737=>13811,
+49738=>13812,
+49739=>13813,
+49740=>13814,
+49741=>13815,
+49742=>13816,
+49743=>13817,
+49746=>13818,
+49747=>13819,
+49749=>13820,
+49750=>13821,
+49751=>13822,
+49753=>13823,
+49754=>13824,
+49755=>13825,
+49756=>13826,
+49757=>13827,
+49758=>13828,
+49759=>13829,
+49761=>13830,
+49762=>13831,
+49763=>13832,
+49764=>13833,
+49766=>13834,
+49767=>13835,
+49768=>13836,
+49769=>13837,
+49770=>13838,
+49771=>13839,
+49774=>13840,
+49775=>13841,
+49777=>13842,
+49778=>13843,
+49779=>13844,
+49781=>13845,
+49782=>13846,
+49783=>13847,
+49784=>13848,
+49785=>13849,
+49786=>13850,
+49787=>13851,
+49790=>13852,
+49792=>13853,
+49794=>13854,
+49795=>13855,
+49796=>13856,
+49797=>13857,
+49798=>13858,
+49799=>13859,
+49802=>13860,
+49803=>13861,
+49804=>13862,
+49805=>13863,
+49806=>13864,
+49807=>13865,
+49809=>13866,
+49810=>13867,
+49811=>13868,
+49812=>13869,
+49813=>13870,
+49814=>13871,
+49815=>13872,
+49817=>13873,
+49818=>13874,
+49820=>13875,
+49822=>13876,
+49823=>13877,
+49824=>13878,
+49825=>13879,
+49826=>13880,
+49827=>13881,
+49830=>13882,
+49831=>13883,
+49833=>13884,
+49834=>13885,
+49835=>13886,
+49838=>13887,
+49839=>13888,
+49840=>13889,
+49841=>13890,
+49842=>13891,
+49843=>13892,
+49846=>13893,
+49848=>13894,
+49850=>13895,
+49851=>13896,
+49852=>13897,
+49853=>13898,
+49854=>13899,
+49855=>13900,
+49856=>13901,
+49857=>13902,
+49858=>13903,
+49859=>13904,
+49860=>13905,
+49861=>13906,
+49862=>13907,
+49863=>13908,
+49864=>13909,
+49865=>13910,
+49866=>13911,
+49867=>13912,
+49868=>13913,
+49869=>13914,
+49870=>13915,
+49871=>13916,
+49872=>13917,
+49873=>13918,
+49874=>13919,
+49875=>13920,
+49876=>13921,
+49877=>13922,
+49878=>13923,
+49879=>13924,
+49880=>13925,
+49881=>13926,
+49882=>13927,
+49883=>13928,
+49886=>13929,
+49887=>13930,
+49889=>13931,
+49890=>13932,
+49893=>13933,
+49894=>13934,
+49895=>13935,
+49896=>13936,
+49897=>13937,
+49898=>13938,
+49902=>13939,
+49904=>13940,
+49906=>13941,
+49907=>13942,
+49908=>13943,
+49909=>13944,
+49911=>13945,
+49914=>13946,
+49917=>13947,
+49918=>13948,
+49919=>13949,
+49921=>13950,
+49922=>13951,
+49923=>13952,
+49924=>13953,
+49925=>13954,
+49926=>13955,
+49927=>13956,
+49930=>13957,
+49931=>13958,
+49934=>13959,
+49935=>13960,
+49936=>13961,
+49937=>13962,
+49938=>13963,
+49942=>13964,
+49943=>13965,
+49945=>13966,
+49946=>13967,
+49947=>13968,
+49949=>13969,
+49950=>13970,
+49951=>13971,
+49952=>13972,
+49953=>13973,
+49954=>13974,
+49955=>13975,
+49958=>13976,
+49959=>13977,
+49962=>13978,
+49963=>13979,
+49964=>13980,
+49965=>13981,
+49966=>13982,
+49967=>13983,
+49968=>13984,
+49969=>13985,
+49970=>13986,
+49971=>13987,
+49972=>13988,
+49973=>13989,
+49974=>13990,
+49975=>13991,
+49976=>13992,
+49977=>13993,
+49978=>13994,
+49979=>13995,
+49980=>13996,
+49981=>13997,
+49982=>13998,
+49983=>13999,
+49984=>14000,
+49985=>14001,
+49986=>14002,
+49987=>14003,
+49988=>14004,
+49990=>14005,
+49991=>14006,
+49992=>14007,
+49993=>14008,
+49994=>14009,
+49995=>14010,
+49996=>14011,
+49997=>14012,
+49998=>14013,
+49999=>14014,
+50000=>14015,
+50001=>14016,
+50002=>14017,
+50003=>14018,
+50004=>14019,
+50005=>14020,
+50006=>14021,
+50007=>14022,
+50008=>14023,
+50009=>14024,
+50010=>14025,
+50011=>14026,
+50012=>14027,
+50013=>14028,
+50014=>14029,
+50015=>14030,
+50016=>14031,
+50017=>14032,
+50018=>14033,
+50019=>14034,
+50020=>14035,
+50021=>14036,
+50022=>14037,
+50023=>14038,
+50026=>14039,
+50027=>14040,
+50029=>14041,
+50030=>14042,
+50031=>14043,
+50033=>14044,
+50035=>14045,
+50036=>14046,
+50037=>14047,
+50038=>14048,
+50039=>14049,
+50042=>14050,
+50043=>14051,
+50046=>14052,
+50047=>14053,
+50048=>14054,
+50049=>14055,
+50050=>14056,
+50051=>14057,
+50053=>14058,
+50054=>14059,
+50055=>14060,
+50057=>14061,
+50058=>14062,
+50059=>14063,
+50061=>14064,
+50062=>14065,
+50063=>14066,
+50064=>14067,
+50065=>14068,
+50066=>14069,
+50067=>14070,
+50068=>14071,
+50069=>14072,
+50070=>14073,
+50071=>14074,
+50072=>14075,
+50073=>14076,
+50074=>14077,
+50075=>14078,
+50076=>14079,
+50077=>14080,
+50078=>14081,
+50079=>14082,
+50080=>14083,
+50081=>14084,
+50082=>14085,
+50083=>14086,
+50084=>14087,
+50085=>14088,
+50086=>14089,
+50087=>14090,
+50088=>14091,
+50089=>14092,
+50090=>14093,
+50091=>14094,
+50092=>14095,
+50093=>14096,
+50094=>14097,
+50095=>14098,
+50096=>14099,
+50097=>14100,
+50098=>14101,
+50099=>14102,
+50100=>14103,
+50101=>14104,
+50102=>14105,
+50103=>14106,
+50104=>14107,
+50105=>14108,
+50106=>14109,
+50107=>14110,
+50108=>14111,
+50109=>14112,
+50110=>14113,
+50111=>14114,
+50113=>14115,
+50114=>14116,
+50115=>14117,
+50116=>14118,
+50117=>14119,
+50118=>14120,
+50119=>14121,
+50120=>14122,
+50121=>14123,
+50122=>14124,
+50123=>14125,
+50124=>14126,
+50125=>14127,
+50126=>14128,
+50127=>14129,
+50128=>14130,
+50129=>14131,
+50130=>14132,
+50131=>14133,
+50132=>14134,
+50133=>14135,
+50134=>14136,
+50135=>14137,
+50138=>14138,
+50139=>14139,
+50141=>14140,
+50142=>14141,
+50145=>14142,
+50147=>14143,
+50148=>14144,
+50149=>14145,
+50150=>14146,
+50151=>14147,
+50154=>14148,
+50155=>14149,
+50156=>14150,
+50158=>14151,
+50159=>14152,
+50160=>14153,
+50161=>14154,
+50162=>14155,
+50163=>14156,
+50166=>14157,
+50167=>14158,
+50169=>14159,
+50170=>14160,
+50171=>14161,
+50172=>14162,
+50173=>14163,
+50174=>14164,
+50175=>14165,
+50176=>14166,
+50177=>14167,
+50178=>14168,
+50179=>14169,
+50180=>14170,
+50181=>14171,
+50182=>14172,
+50183=>14173,
+50185=>14174,
+50186=>14175,
+50187=>14176,
+50188=>14177,
+50189=>14178,
+50190=>14179,
+50191=>14180,
+50193=>14181,
+50194=>14182,
+50195=>14183,
+50196=>14184,
+50197=>14185,
+50198=>14186,
+50199=>14187,
+50200=>14188,
+50201=>14189,
+50202=>14190,
+50203=>14191,
+50204=>14192,
+50205=>14193,
+50206=>14194,
+50207=>14195,
+50208=>14196,
+50209=>14197,
+50210=>14198,
+50211=>14199,
+50213=>14200,
+50214=>14201,
+50215=>14202,
+50216=>14203,
+50217=>14204,
+50218=>14205,
+50219=>14206,
+50221=>14207,
+50222=>14208,
+50223=>14209,
+50225=>14210,
+50226=>14211,
+50227=>14212,
+50229=>14213,
+50230=>14214,
+50231=>14215,
+50232=>14216,
+50233=>14217,
+50234=>14218,
+50235=>14219,
+50238=>14220,
+50239=>14221,
+50240=>14222,
+50241=>14223,
+50242=>14224,
+50243=>14225,
+50244=>14226,
+50245=>14227,
+50246=>14228,
+50247=>14229,
+50249=>14230,
+50250=>14231,
+50251=>14232,
+50252=>14233,
+50253=>14234,
+50254=>14235,
+50255=>14236,
+50256=>14237,
+50257=>14238,
+50258=>14239,
+50259=>14240,
+50260=>14241,
+50261=>14242,
+50262=>14243,
+50263=>14244,
+50264=>14245,
+50265=>14246,
+50266=>14247,
+50267=>14248,
+50268=>14249,
+50269=>14250,
+50270=>14251,
+50271=>14252,
+50272=>14253,
+50273=>14254,
+50274=>14255,
+50275=>14256,
+50278=>14257,
+50279=>14258,
+50281=>14259,
+50282=>14260,
+50283=>14261,
+50285=>14262,
+50286=>14263,
+50287=>14264,
+50288=>14265,
+50289=>14266,
+50290=>14267,
+50291=>14268,
+50294=>14269,
+50295=>14270,
+50296=>14271,
+50298=>14272,
+50299=>14273,
+50300=>14274,
+50301=>14275,
+50302=>14276,
+50303=>14277,
+50305=>14278,
+50306=>14279,
+50307=>14280,
+50308=>14281,
+50309=>14282,
+50310=>14283,
+50311=>14284,
+50312=>14285,
+50313=>14286,
+50314=>14287,
+50315=>14288,
+50316=>14289,
+50317=>14290,
+50318=>14291,
+50319=>14292,
+50320=>14293,
+50321=>14294,
+50322=>14295,
+50323=>14296,
+50325=>14297,
+50326=>14298,
+50327=>14299,
+50328=>14300,
+50329=>14301,
+50330=>14302,
+50331=>14303,
+50333=>14304,
+50334=>14305,
+50335=>14306,
+50336=>14307,
+50337=>14308,
+50338=>14309,
+50339=>14310,
+50340=>14311,
+50341=>14312,
+50342=>14313,
+50343=>14314,
+50344=>14315,
+50345=>14316,
+50346=>14317,
+50347=>14318,
+50348=>14319,
+50349=>14320,
+50350=>14321,
+50351=>14322,
+50352=>14323,
+50353=>14324,
+50354=>14325,
+50355=>14326,
+50356=>14327,
+50357=>14328,
+50358=>14329,
+50359=>14330,
+50361=>14331,
+50362=>14332,
+50363=>14333,
+50365=>14334,
+50366=>14335,
+50367=>14336,
+50368=>14337,
+50369=>14338,
+50370=>14339,
+50371=>14340,
+50372=>14341,
+50373=>14342,
+50374=>14343,
+50375=>14344,
+50376=>14345,
+50377=>14346,
+50378=>14347,
+50379=>14348,
+50380=>14349,
+50381=>14350,
+50382=>14351,
+50383=>14352,
+50384=>14353,
+50385=>14354,
+50386=>14355,
+50387=>14356,
+50388=>14357,
+50389=>14358,
+50390=>14359,
+50391=>14360,
+50392=>14361,
+50393=>14362,
+50394=>14363,
+50395=>14364,
+50396=>14365,
+50397=>14366,
+50398=>14367,
+50399=>14368,
+50400=>14369,
+50401=>14370,
+50402=>14371,
+50403=>14372,
+50404=>14373,
+50405=>14374,
+50406=>14375,
+50407=>14376,
+50408=>14377,
+50410=>14378,
+50411=>14379,
+50412=>14380,
+50413=>14381,
+50414=>14382,
+50415=>14383,
+50418=>14384,
+50419=>14385,
+50421=>14386,
+50422=>14387,
+50423=>14388,
+50425=>14389,
+50427=>14390,
+50428=>14391,
+50429=>14392,
+50430=>14393,
+50434=>14394,
+50435=>14395,
+50436=>14396,
+50437=>14397,
+50438=>14398,
+50439=>14399,
+50440=>14400,
+50441=>14401,
+50442=>14402,
+50443=>14403,
+50445=>14404,
+50446=>14405,
+50447=>14406,
+50449=>14407,
+50450=>14408,
+50451=>14409,
+50453=>14410,
+50454=>14411,
+50455=>14412,
+50456=>14413,
+50457=>14414,
+50458=>14415,
+50459=>14416,
+50461=>14417,
+50462=>14418,
+50463=>14419,
+50464=>14420,
+50465=>14421,
+50466=>14422,
+50467=>14423,
+50468=>14424,
+50469=>14425,
+50470=>14426,
+50471=>14427,
+50474=>14428,
+50475=>14429,
+50477=>14430,
+50478=>14431,
+50479=>14432,
+50481=>14433,
+50482=>14434,
+50483=>14435,
+50484=>14436,
+50485=>14437,
+50486=>14438,
+50487=>14439,
+50490=>14440,
+50492=>14441,
+50494=>14442,
+50495=>14443,
+50496=>14444,
+50497=>14445,
+50498=>14446,
+50499=>14447,
+50502=>14448,
+50503=>14449,
+50507=>14450,
+50511=>14451,
+50512=>14452,
+50513=>14453,
+50514=>14454,
+50518=>14455,
+50522=>14456,
+50523=>14457,
+50524=>14458,
+50527=>14459,
+50530=>14460,
+50531=>14461,
+50533=>14462,
+50534=>14463,
+50535=>14464,
+50537=>14465,
+50538=>14466,
+50539=>14467,
+50540=>14468,
+50541=>14469,
+50542=>14470,
+50543=>14471,
+50546=>14472,
+50550=>14473,
+50551=>14474,
+50552=>14475,
+50553=>14476,
+50554=>14477,
+50555=>14478,
+50558=>14479,
+50559=>14480,
+50561=>14481,
+50562=>14482,
+50563=>14483,
+50565=>14484,
+50566=>14485,
+50568=>14486,
+50569=>14487,
+50570=>14488,
+50571=>14489,
+50574=>14490,
+50576=>14491,
+50578=>14492,
+50579=>14493,
+50580=>14494,
+50582=>14495,
+50585=>14496,
+50586=>14497,
+50587=>14498,
+50589=>14499,
+50590=>14500,
+50591=>14501,
+50593=>14502,
+50594=>14503,
+50595=>14504,
+50596=>14505,
+50597=>14506,
+50598=>14507,
+50599=>14508,
+50600=>14509,
+50602=>14510,
+50603=>14511,
+50604=>14512,
+50605=>14513,
+50606=>14514,
+50607=>14515,
+50608=>14516,
+50609=>14517,
+50610=>14518,
+50611=>14519,
+50614=>14520,
+50615=>14521,
+50618=>14522,
+50623=>14523,
+50624=>14524,
+50625=>14525,
+50626=>14526,
+50627=>14527,
+50635=>14528,
+50637=>14529,
+50639=>14530,
+50642=>14531,
+50643=>14532,
+50645=>14533,
+50646=>14534,
+50647=>14535,
+50649=>14536,
+50650=>14537,
+50651=>14538,
+50652=>14539,
+50653=>14540,
+50654=>14541,
+50655=>14542,
+50658=>14543,
+50660=>14544,
+50662=>14545,
+50663=>14546,
+50664=>14547,
+50665=>14548,
+50666=>14549,
+50667=>14550,
+50671=>14551,
+50673=>14552,
+50674=>14553,
+50675=>14554,
+50677=>14555,
+50680=>14556,
+50681=>14557,
+50682=>14558,
+50683=>14559,
+50690=>14560,
+50691=>14561,
+50692=>14562,
+50697=>14563,
+50698=>14564,
+50699=>14565,
+50701=>14566,
+50702=>14567,
+50703=>14568,
+50705=>14569,
+50706=>14570,
+50707=>14571,
+50708=>14572,
+50709=>14573,
+50710=>14574,
+50711=>14575,
+50714=>14576,
+50717=>14577,
+50718=>14578,
+50719=>14579,
+50720=>14580,
+50721=>14581,
+50722=>14582,
+50723=>14583,
+50726=>14584,
+50727=>14585,
+50729=>14586,
+50730=>14587,
+50731=>14588,
+50735=>14589,
+50737=>14590,
+50738=>14591,
+50742=>14592,
+50744=>14593,
+50746=>14594,
+50748=>14595,
+50749=>14596,
+50750=>14597,
+50751=>14598,
+50754=>14599,
+50755=>14600,
+50757=>14601,
+50758=>14602,
+50759=>14603,
+50761=>14604,
+50762=>14605,
+50763=>14606,
+50764=>14607,
+50765=>14608,
+50766=>14609,
+50767=>14610,
+50770=>14611,
+50774=>14612,
+50775=>14613,
+50776=>14614,
+50777=>14615,
+50778=>14616,
+50779=>14617,
+50782=>14618,
+50783=>14619,
+50785=>14620,
+50786=>14621,
+50787=>14622,
+50788=>14623,
+50789=>14624,
+50790=>14625,
+50791=>14626,
+50792=>14627,
+50793=>14628,
+50794=>14629,
+50795=>14630,
+50797=>14631,
+50798=>14632,
+50800=>14633,
+50802=>14634,
+50803=>14635,
+50804=>14636,
+50805=>14637,
+50806=>14638,
+50807=>14639,
+50810=>14640,
+50811=>14641,
+50813=>14642,
+50814=>14643,
+50815=>14644,
+50817=>14645,
+50818=>14646,
+50819=>14647,
+50820=>14648,
+50821=>14649,
+50822=>14650,
+50823=>14651,
+50826=>14652,
+50828=>14653,
+50830=>14654,
+50831=>14655,
+50832=>14656,
+50833=>14657,
+50834=>14658,
+50835=>14659,
+50838=>14660,
+50839=>14661,
+50841=>14662,
+50842=>14663,
+50843=>14664,
+50845=>14665,
+50846=>14666,
+50847=>14667,
+50848=>14668,
+50849=>14669,
+50850=>14670,
+50851=>14671,
+50854=>14672,
+50856=>14673,
+50858=>14674,
+50859=>14675,
+50860=>14676,
+50861=>14677,
+50862=>14678,
+50863=>14679,
+50866=>14680,
+50867=>14681,
+50869=>14682,
+50870=>14683,
+50871=>14684,
+50875=>14685,
+50876=>14686,
+50877=>14687,
+50878=>14688,
+50879=>14689,
+50882=>14690,
+50884=>14691,
+50886=>14692,
+50887=>14693,
+50888=>14694,
+50889=>14695,
+50890=>14696,
+50891=>14697,
+50894=>14698,
+50895=>14699,
+50897=>14700,
+50898=>14701,
+50899=>14702,
+50901=>14703,
+50902=>14704,
+50903=>14705,
+50904=>14706,
+50905=>14707,
+50906=>14708,
+50907=>14709,
+50910=>14710,
+50911=>14711,
+50914=>14712,
+50915=>14713,
+50916=>14714,
+50917=>14715,
+50918=>14716,
+50919=>14717,
+50922=>14718,
+50923=>14719,
+50925=>14720,
+50926=>14721,
+50927=>14722,
+50929=>14723,
+50930=>14724,
+50931=>14725,
+50932=>14726,
+50933=>14727,
+50934=>14728,
+50935=>14729,
+50938=>14730,
+50939=>14731,
+50940=>14732,
+50942=>14733,
+50943=>14734,
+50944=>14735,
+50945=>14736,
+50946=>14737,
+50947=>14738,
+50950=>14739,
+50951=>14740,
+50953=>14741,
+50954=>14742,
+50955=>14743,
+50957=>14744,
+50958=>14745,
+50959=>14746,
+50960=>14747,
+50961=>14748,
+50962=>14749,
+50963=>14750,
+50966=>14751,
+50968=>14752,
+50970=>14753,
+50971=>14754,
+50972=>14755,
+50973=>14756,
+50974=>14757,
+50975=>14758,
+50978=>14759,
+50979=>14760,
+50981=>14761,
+50982=>14762,
+50983=>14763,
+50985=>14764,
+50986=>14765,
+50987=>14766,
+50988=>14767,
+50989=>14768,
+50990=>14769,
+50991=>14770,
+50994=>14771,
+50996=>14772,
+50998=>14773,
+51000=>14774,
+51001=>14775,
+51002=>14776,
+51003=>14777,
+51006=>14778,
+51007=>14779,
+51009=>14780,
+51010=>14781,
+51011=>14782,
+51013=>14783,
+51014=>14784,
+51015=>14785,
+51016=>14786,
+51017=>14787,
+51019=>14788,
+51022=>14789,
+51024=>14790,
+51033=>14791,
+51034=>14792,
+51035=>14793,
+51037=>14794,
+51038=>14795,
+51039=>14796,
+51041=>14797,
+51042=>14798,
+51043=>14799,
+51044=>14800,
+51045=>14801,
+51046=>14802,
+51047=>14803,
+51049=>14804,
+51050=>14805,
+51052=>14806,
+51053=>14807,
+51054=>14808,
+51055=>14809,
+51056=>14810,
+51057=>14811,
+51058=>14812,
+51059=>14813,
+51062=>14814,
+51063=>14815,
+51065=>14816,
+51066=>14817,
+51067=>14818,
+51071=>14819,
+51072=>14820,
+51073=>14821,
+51074=>14822,
+51078=>14823,
+51083=>14824,
+51084=>14825,
+51085=>14826,
+51087=>14827,
+51090=>14828,
+51091=>14829,
+51093=>14830,
+51097=>14831,
+51099=>14832,
+51100=>14833,
+51101=>14834,
+51102=>14835,
+51103=>14836,
+51106=>14837,
+51111=>14838,
+51112=>14839,
+51113=>14840,
+51114=>14841,
+51115=>14842,
+51118=>14843,
+51119=>14844,
+51121=>14845,
+51122=>14846,
+51123=>14847,
+51125=>14848,
+51126=>14849,
+51127=>14850,
+51128=>14851,
+51129=>14852,
+51130=>14853,
+51131=>14854,
+51134=>14855,
+51138=>14856,
+51139=>14857,
+51140=>14858,
+51141=>14859,
+51142=>14860,
+51143=>14861,
+51146=>14862,
+51147=>14863,
+51149=>14864,
+51151=>14865,
+51153=>14866,
+51154=>14867,
+51155=>14868,
+51156=>14869,
+51157=>14870,
+51158=>14871,
+51159=>14872,
+51161=>14873,
+51162=>14874,
+51163=>14875,
+51164=>14876,
+51166=>14877,
+51167=>14878,
+51168=>14879,
+51169=>14880,
+51170=>14881,
+51171=>14882,
+51173=>14883,
+51174=>14884,
+51175=>14885,
+51177=>14886,
+51178=>14887,
+51179=>14888,
+51181=>14889,
+51182=>14890,
+51183=>14891,
+51184=>14892,
+51185=>14893,
+51186=>14894,
+51187=>14895,
+51188=>14896,
+51189=>14897,
+51190=>14898,
+51191=>14899,
+51192=>14900,
+51193=>14901,
+51194=>14902,
+51195=>14903,
+51196=>14904,
+51197=>14905,
+51198=>14906,
+51199=>14907,
+51202=>14908,
+51203=>14909,
+51205=>14910,
+51206=>14911,
+51207=>14912,
+51209=>14913,
+51211=>14914,
+51212=>14915,
+51213=>14916,
+51214=>14917,
+51215=>14918,
+51218=>14919,
+51220=>14920,
+51223=>14921,
+51224=>14922,
+51225=>14923,
+51226=>14924,
+51227=>14925,
+51230=>14926,
+51231=>14927,
+51233=>14928,
+51234=>14929,
+51235=>14930,
+51237=>14931,
+51238=>14932,
+51239=>14933,
+51240=>14934,
+51241=>14935,
+51242=>14936,
+51243=>14937,
+51246=>14938,
+51248=>14939,
+51250=>14940,
+51251=>14941,
+51252=>14942,
+51253=>14943,
+51254=>14944,
+51255=>14945,
+51257=>14946,
+51258=>14947,
+51259=>14948,
+51261=>14949,
+51262=>14950,
+51263=>14951,
+51265=>14952,
+51266=>14953,
+51267=>14954,
+51268=>14955,
+51269=>14956,
+51270=>14957,
+51271=>14958,
+51274=>14959,
+51275=>14960,
+51278=>14961,
+51279=>14962,
+51280=>14963,
+51281=>14964,
+51282=>14965,
+51283=>14966,
+51285=>14967,
+51286=>14968,
+51287=>14969,
+51288=>14970,
+51289=>14971,
+51290=>14972,
+51291=>14973,
+51292=>14974,
+51293=>14975,
+51294=>14976,
+51295=>14977,
+51296=>14978,
+51297=>14979,
+51298=>14980,
+51299=>14981,
+51300=>14982,
+51301=>14983,
+51302=>14984,
+51303=>14985,
+51304=>14986,
+51305=>14987,
+51306=>14988,
+51307=>14989,
+51308=>14990,
+51309=>14991,
+51310=>14992,
+51311=>14993,
+51314=>14994,
+51315=>14995,
+51317=>14996,
+51318=>14997,
+51319=>14998,
+51321=>14999,
+51323=>15000,
+51324=>15001,
+51325=>15002,
+51326=>15003,
+51327=>15004,
+51330=>15005,
+51332=>15006,
+51336=>15007,
+51337=>15008,
+51338=>15009,
+51342=>15010,
+51343=>15011,
+51344=>15012,
+51345=>15013,
+51346=>15014,
+51347=>15015,
+51349=>15016,
+51350=>15017,
+51351=>15018,
+51352=>15019,
+51353=>15020,
+51354=>15021,
+51355=>15022,
+51356=>15023,
+51358=>15024,
+51360=>15025,
+51362=>15026,
+51363=>15027,
+51364=>15028,
+51365=>15029,
+51366=>15030,
+51367=>15031,
+51369=>15032,
+51370=>15033,
+51371=>15034,
+51372=>15035,
+51373=>15036,
+51374=>15037,
+51375=>15038,
+51376=>15039,
+51377=>15040,
+51378=>15041,
+51379=>15042,
+51380=>15043,
+51381=>15044,
+51382=>15045,
+51383=>15046,
+51384=>15047,
+51385=>15048,
+51386=>15049,
+51387=>15050,
+51390=>15051,
+51391=>15052,
+51392=>15053,
+51393=>15054,
+51394=>15055,
+51395=>15056,
+51397=>15057,
+51398=>15058,
+51399=>15059,
+51401=>15060,
+51402=>15061,
+51403=>15062,
+51405=>15063,
+51406=>15064,
+51407=>15065,
+51408=>15066,
+51409=>15067,
+51410=>15068,
+51411=>15069,
+51414=>15070,
+51416=>15071,
+51418=>15072,
+51419=>15073,
+51420=>15074,
+51421=>15075,
+51422=>15076,
+51423=>15077,
+51426=>15078,
+51427=>15079,
+51429=>15080,
+51430=>15081,
+51431=>15082,
+51432=>15083,
+51433=>15084,
+51434=>15085,
+51435=>15086,
+51436=>15087,
+51437=>15088,
+51438=>15089,
+51439=>15090,
+51440=>15091,
+51441=>15092,
+51442=>15093,
+51443=>15094,
+51444=>15095,
+51446=>15096,
+51447=>15097,
+51448=>15098,
+51449=>15099,
+51450=>15100,
+51451=>15101,
+51454=>15102,
+51455=>15103,
+51457=>15104,
+51458=>15105,
+51459=>15106,
+51463=>15107,
+51464=>15108,
+51465=>15109,
+51466=>15110,
+51467=>15111,
+51470=>15112,
+51472=>15113,
+51474=>15114,
+51475=>15115,
+51476=>15116,
+51477=>15117,
+51478=>15118,
+51479=>15119,
+51481=>15120,
+51482=>15121,
+51483=>15122,
+51484=>15123,
+51485=>15124,
+51486=>15125,
+51487=>15126,
+51488=>15127,
+51489=>15128,
+51490=>15129,
+51491=>15130,
+51492=>15131,
+51493=>15132,
+51494=>15133,
+51495=>15134,
+51496=>15135,
+51497=>15136,
+51498=>15137,
+51499=>15138,
+51501=>15139,
+51502=>15140,
+51503=>15141,
+51504=>15142,
+51505=>15143,
+51506=>15144,
+51507=>15145,
+51509=>15146,
+51510=>15147,
+51511=>15148,
+51512=>15149,
+51513=>15150,
+51514=>15151,
+51515=>15152,
+51516=>15153,
+51517=>15154,
+51518=>15155,
+51519=>15156,
+51520=>15157,
+51521=>15158,
+51522=>15159,
+51523=>15160,
+51524=>15161,
+51525=>15162,
+51526=>15163,
+51527=>15164,
+51528=>15165,
+51529=>15166,
+51530=>15167,
+51531=>15168,
+51532=>15169,
+51533=>15170,
+51534=>15171,
+51535=>15172,
+51538=>15173,
+51539=>15174,
+51541=>15175,
+51542=>15176,
+51543=>15177,
+51545=>15178,
+51546=>15179,
+51547=>15180,
+51548=>15181,
+51549=>15182,
+51550=>15183,
+51551=>15184,
+51554=>15185,
+51556=>15186,
+51557=>15187,
+51558=>15188,
+51559=>15189,
+51560=>15190,
+51561=>15191,
+51562=>15192,
+51563=>15193,
+51565=>15194,
+51566=>15195,
+51567=>15196,
+51569=>15197,
+51570=>15198,
+51571=>15199,
+51573=>15200,
+51574=>15201,
+51575=>15202,
+51576=>15203,
+51577=>15204,
+51578=>15205,
+51579=>15206,
+51581=>15207,
+51582=>15208,
+51583=>15209,
+51584=>15210,
+51585=>15211,
+51586=>15212,
+51587=>15213,
+51588=>15214,
+51589=>15215,
+51590=>15216,
+51591=>15217,
+51594=>15218,
+51595=>15219,
+51597=>15220,
+51598=>15221,
+51599=>15222,
+51601=>15223,
+51602=>15224,
+51603=>15225,
+51604=>15226,
+51605=>15227,
+51606=>15228,
+51607=>15229,
+51610=>15230,
+51612=>15231,
+51614=>15232,
+51615=>15233,
+51616=>15234,
+51617=>15235,
+51618=>15236,
+51619=>15237,
+51620=>15238,
+51621=>15239,
+51622=>15240,
+51623=>15241,
+51624=>15242,
+51625=>15243,
+51626=>15244,
+51627=>15245,
+51628=>15246,
+51629=>15247,
+51630=>15248,
+51631=>15249,
+51632=>15250,
+51633=>15251,
+51634=>15252,
+51635=>15253,
+51636=>15254,
+51637=>15255,
+51638=>15256,
+51639=>15257,
+51640=>15258,
+51641=>15259,
+51642=>15260,
+51643=>15261,
+51644=>15262,
+51645=>15263,
+51646=>15264,
+51647=>15265,
+51650=>15266,
+51651=>15267,
+51653=>15268,
+51654=>15269,
+51657=>15270,
+51659=>15271,
+51660=>15272,
+51661=>15273,
+51662=>15274,
+51663=>15275,
+51666=>15276,
+51668=>15277,
+51671=>15278,
+51672=>15279,
+51675=>15280,
+51678=>15281,
+51679=>15282,
+51681=>15283,
+51683=>15284,
+51685=>15285,
+51686=>15286,
+51688=>15287,
+51689=>15288,
+51690=>15289,
+51691=>15290,
+51694=>15291,
+51698=>15292,
+51699=>15293,
+51700=>15294,
+51701=>15295,
+51702=>15296,
+51703=>15297,
+51706=>15298,
+51707=>15299,
+51709=>15300,
+51710=>15301,
+51711=>15302,
+51713=>15303,
+51714=>15304,
+51715=>15305,
+51716=>15306,
+51717=>15307,
+51718=>15308,
+51719=>15309,
+51722=>15310,
+51726=>15311,
+51727=>15312,
+51728=>15313,
+51729=>15314,
+51730=>15315,
+51731=>15316,
+51733=>15317,
+51734=>15318,
+51735=>15319,
+51737=>15320,
+51738=>15321,
+51739=>15322,
+51740=>15323,
+51741=>15324,
+51742=>15325,
+51743=>15326,
+51744=>15327,
+51745=>15328,
+51746=>15329,
+51747=>15330,
+51748=>15331,
+51749=>15332,
+51750=>15333,
+51751=>15334,
+51752=>15335,
+51754=>15336,
+51755=>15337,
+51756=>15338,
+51757=>15339,
+51758=>15340,
+51759=>15341,
+51760=>15342,
+51761=>15343,
+51762=>15344,
+51763=>15345,
+51764=>15346,
+51765=>15347,
+51766=>15348,
+51767=>15349,
+51768=>15350,
+51769=>15351,
+51770=>15352,
+51771=>15353,
+51772=>15354,
+51773=>15355,
+51774=>15356,
+51775=>15357,
+51776=>15358,
+51777=>15359,
+51778=>15360,
+51779=>15361,
+51780=>15362,
+51781=>15363,
+51782=>15364,
+51783=>15365,
+51784=>15366,
+51785=>15367,
+51786=>15368,
+51787=>15369,
+51790=>15370,
+51791=>15371,
+51793=>15372,
+51794=>15373,
+51795=>15374,
+51797=>15375,
+51798=>15376,
+51799=>15377,
+51800=>15378,
+51801=>15379,
+51802=>15380,
+51803=>15381,
+51806=>15382,
+51810=>15383,
+51811=>15384,
+51812=>15385,
+51813=>15386,
+51814=>15387,
+51815=>15388,
+51817=>15389,
+51818=>15390,
+51819=>15391,
+51820=>15392,
+51821=>15393,
+51822=>15394,
+51823=>15395,
+51824=>15396,
+51825=>15397,
+51826=>15398,
+51827=>15399,
+51828=>15400,
+51829=>15401,
+51830=>15402,
+51831=>15403,
+51832=>15404,
+51833=>15405,
+51834=>15406,
+51835=>15407,
+51836=>15408,
+51838=>15409,
+51839=>15410,
+51840=>15411,
+51841=>15412,
+51842=>15413,
+51843=>15414,
+51845=>15415,
+51846=>15416,
+51847=>15417,
+51848=>15418,
+51849=>15419,
+51850=>15420,
+51851=>15421,
+51852=>15422,
+51853=>15423,
+51854=>15424,
+51855=>15425,
+51856=>15426,
+51857=>15427,
+51858=>15428,
+51859=>15429,
+51860=>15430,
+51861=>15431,
+51862=>15432,
+51863=>15433,
+51865=>15434,
+51866=>15435,
+51867=>15436,
+51868=>15437,
+51869=>15438,
+51870=>15439,
+51871=>15440,
+51872=>15441,
+51873=>15442,
+51874=>15443,
+51875=>15444,
+51876=>15445,
+51877=>15446,
+51878=>15447,
+51879=>15448,
+51880=>15449,
+51881=>15450,
+51882=>15451,
+51883=>15452,
+51884=>15453,
+51885=>15454,
+51886=>15455,
+51887=>15456,
+51888=>15457,
+51889=>15458,
+51890=>15459,
+51891=>15460,
+51892=>15461,
+51893=>15462,
+51894=>15463,
+51895=>15464,
+51896=>15465,
+51897=>15466,
+51898=>15467,
+51899=>15468,
+51902=>15469,
+51903=>15470,
+51905=>15471,
+51906=>15472,
+51907=>15473,
+51909=>15474,
+51910=>15475,
+51911=>15476,
+51912=>15477,
+51913=>15478,
+51914=>15479,
+51915=>15480,
+51918=>15481,
+51920=>15482,
+51922=>15483,
+51924=>15484,
+51925=>15485,
+51926=>15486,
+51927=>15487,
+51930=>15488,
+51931=>15489,
+51932=>15490,
+51933=>15491,
+51934=>15492,
+51935=>15493,
+51937=>15494,
+51938=>15495,
+51939=>15496,
+51940=>15497,
+51941=>15498,
+51942=>15499,
+51943=>15500,
+51944=>15501,
+51945=>15502,
+51946=>15503,
+51947=>15504,
+51949=>15505,
+51950=>15506,
+51951=>15507,
+51952=>15508,
+51953=>15509,
+51954=>15510,
+51955=>15511,
+51957=>15512,
+51958=>15513,
+51959=>15514,
+51960=>15515,
+51961=>15516,
+51962=>15517,
+51963=>15518,
+51964=>15519,
+51965=>15520,
+51966=>15521,
+51967=>15522,
+51968=>15523,
+51969=>15524,
+51970=>15525,
+51971=>15526,
+51972=>15527,
+51973=>15528,
+51974=>15529,
+51975=>15530,
+51977=>15531,
+51978=>15532,
+51979=>15533,
+51980=>15534,
+51981=>15535,
+51982=>15536,
+51983=>15537,
+51985=>15538,
+51986=>15539,
+51987=>15540,
+51989=>15541,
+51990=>15542,
+51991=>15543,
+51993=>15544,
+51994=>15545,
+51995=>15546,
+51996=>15547,
+51997=>15548,
+51998=>15549,
+51999=>15550,
+52002=>15551,
+52003=>15552,
+52004=>15553,
+52005=>15554,
+52006=>15555,
+52007=>15556,
+52008=>15557,
+52009=>15558,
+52010=>15559,
+52011=>15560,
+52012=>15561,
+52013=>15562,
+52014=>15563,
+52015=>15564,
+52016=>15565,
+52017=>15566,
+52018=>15567,
+52019=>15568,
+52020=>15569,
+52021=>15570,
+52022=>15571,
+52023=>15572,
+52024=>15573,
+52025=>15574,
+52026=>15575,
+52027=>15576,
+52028=>15577,
+52029=>15578,
+52030=>15579,
+52031=>15580,
+52032=>15581,
+52034=>15582,
+52035=>15583,
+52036=>15584,
+52037=>15585,
+52038=>15586,
+52039=>15587,
+52042=>15588,
+52043=>15589,
+52045=>15590,
+52046=>15591,
+52047=>15592,
+52049=>15593,
+52050=>15594,
+52051=>15595,
+52052=>15596,
+52053=>15597,
+52054=>15598,
+52055=>15599,
+52058=>15600,
+52059=>15601,
+52060=>15602,
+52062=>15603,
+52063=>15604,
+52064=>15605,
+52065=>15606,
+52066=>15607,
+52067=>15608,
+52069=>15609,
+52070=>15610,
+52071=>15611,
+52072=>15612,
+52073=>15613,
+52074=>15614,
+52075=>15615,
+52076=>15616,
+52077=>15617,
+52078=>15618,
+52079=>15619,
+52080=>15620,
+52081=>15621,
+52082=>15622,
+52083=>15623,
+52084=>15624,
+52085=>15625,
+52086=>15626,
+52087=>15627,
+52090=>15628,
+52091=>15629,
+52092=>15630,
+52093=>15631,
+52094=>15632,
+52095=>15633,
+52096=>15634,
+52097=>15635,
+52098=>15636,
+52099=>15637,
+52100=>15638,
+52101=>15639,
+52102=>15640,
+52103=>15641,
+52104=>15642,
+52105=>15643,
+52106=>15644,
+52107=>15645,
+52108=>15646,
+52109=>15647,
+52110=>15648,
+52111=>15649,
+52112=>15650,
+52113=>15651,
+52114=>15652,
+52115=>15653,
+52116=>15654,
+52117=>15655,
+52118=>15656,
+52119=>15657,
+52120=>15658,
+52121=>15659,
+52122=>15660,
+52123=>15661,
+52125=>15662,
+52126=>15663,
+52127=>15664,
+52128=>15665,
+52129=>15666,
+52130=>15667,
+52131=>15668,
+52132=>15669,
+52133=>15670,
+52134=>15671,
+52135=>15672,
+52136=>15673,
+52137=>15674,
+52138=>15675,
+52139=>15676,
+52140=>15677,
+52141=>15678,
+52142=>15679,
+52143=>15680,
+52144=>15681,
+52145=>15682,
+52146=>15683,
+52147=>15684,
+52148=>15685,
+52149=>15686,
+52150=>15687,
+52151=>15688,
+52153=>15689,
+52154=>15690,
+52155=>15691,
+52156=>15692,
+52157=>15693,
+52158=>15694,
+52159=>15695,
+52160=>15696,
+52161=>15697,
+52162=>15698,
+52163=>15699,
+52164=>15700,
+52165=>15701,
+52166=>15702,
+52167=>15703,
+52168=>15704,
+52169=>15705,
+52170=>15706,
+52171=>15707,
+52172=>15708,
+52173=>15709,
+52174=>15710,
+52175=>15711,
+52176=>15712,
+52177=>15713,
+52178=>15714,
+52179=>15715,
+52181=>15716,
+52182=>15717,
+52183=>15718,
+52184=>15719,
+52185=>15720,
+52186=>15721,
+52187=>15722,
+52188=>15723,
+52189=>15724,
+52190=>15725,
+52191=>15726,
+52192=>15727,
+52193=>15728,
+52194=>15729,
+52195=>15730,
+52197=>15731,
+52198=>15732,
+52200=>15733,
+52202=>15734,
+52203=>15735,
+52204=>15736,
+52205=>15737,
+52206=>15738,
+52207=>15739,
+52208=>15740,
+52209=>15741,
+52210=>15742,
+52211=>15743,
+52212=>15744,
+52213=>15745,
+52214=>15746,
+52215=>15747,
+52216=>15748,
+52217=>15749,
+52218=>15750,
+52219=>15751,
+52220=>15752,
+52221=>15753,
+52222=>15754,
+52223=>15755,
+52224=>15756,
+52225=>15757,
+52226=>15758,
+52227=>15759,
+52228=>15760,
+52229=>15761,
+52230=>15762,
+52231=>15763,
+52232=>15764,
+52233=>15765,
+52234=>15766,
+52235=>15767,
+52238=>15768,
+52239=>15769,
+52241=>15770,
+52242=>15771,
+52243=>15772,
+52245=>15773,
+52246=>15774,
+52247=>15775,
+52248=>15776,
+52249=>15777,
+52250=>15778,
+52251=>15779,
+52254=>15780,
+52255=>15781,
+52256=>15782,
+52259=>15783,
+52260=>15784,
+52261=>15785,
+52262=>15786,
+52266=>15787,
+52267=>15788,
+52269=>15789,
+52271=>15790,
+52273=>15791,
+52274=>15792,
+52275=>15793,
+52276=>15794,
+52277=>15795,
+52278=>15796,
+52279=>15797,
+52282=>15798,
+52287=>15799,
+52288=>15800,
+52289=>15801,
+52290=>15802,
+52291=>15803,
+52294=>15804,
+52295=>15805,
+52297=>15806,
+52298=>15807,
+52299=>15808,
+52301=>15809,
+52302=>15810,
+52303=>15811,
+52304=>15812,
+52305=>15813,
+52306=>15814,
+52307=>15815,
+52310=>15816,
+52314=>15817,
+52315=>15818,
+52316=>15819,
+52317=>15820,
+52318=>15821,
+52319=>15822,
+52321=>15823,
+52322=>15824,
+52323=>15825,
+52325=>15826,
+52327=>15827,
+52329=>15828,
+52330=>15829,
+52331=>15830,
+52332=>15831,
+52333=>15832,
+52334=>15833,
+52335=>15834,
+52337=>15835,
+52338=>15836,
+52339=>15837,
+52340=>15838,
+52342=>15839,
+52343=>15840,
+52344=>15841,
+52345=>15842,
+52346=>15843,
+52347=>15844,
+52348=>15845,
+52349=>15846,
+52350=>15847,
+52351=>15848,
+52352=>15849,
+52353=>15850,
+52354=>15851,
+52355=>15852,
+52356=>15853,
+52357=>15854,
+52358=>15855,
+52359=>15856,
+52360=>15857,
+52361=>15858,
+52362=>15859,
+52363=>15860,
+52364=>15861,
+52365=>15862,
+52366=>15863,
+52367=>15864,
+52368=>15865,
+52369=>15866,
+52370=>15867,
+52371=>15868,
+52372=>15869,
+52373=>15870,
+52374=>15871,
+52375=>15872,
+52378=>15873,
+52379=>15874,
+52381=>15875,
+52382=>15876,
+52383=>15877,
+52385=>15878,
+52386=>15879,
+52387=>15880,
+52388=>15881,
+52389=>15882,
+52390=>15883,
+52391=>15884,
+52394=>15885,
+52398=>15886,
+52399=>15887,
+52400=>15888,
+52401=>15889,
+52402=>15890,
+52403=>15891,
+52406=>15892,
+52407=>15893,
+52409=>15894,
+52410=>15895,
+52411=>15896,
+52413=>15897,
+52414=>15898,
+52415=>15899,
+52416=>15900,
+52417=>15901,
+52418=>15902,
+52419=>15903,
+52422=>15904,
+52424=>15905,
+52426=>15906,
+52427=>15907,
+52428=>15908,
+52429=>15909,
+52430=>15910,
+52431=>15911,
+52433=>15912,
+52434=>15913,
+52435=>15914,
+52437=>15915,
+52438=>15916,
+52439=>15917,
+52440=>15918,
+52441=>15919,
+52442=>15920,
+52443=>15921,
+52444=>15922,
+52445=>15923,
+52446=>15924,
+52447=>15925,
+52448=>15926,
+52449=>15927,
+52450=>15928,
+52451=>15929,
+52453=>15930,
+52454=>15931,
+52455=>15932,
+52456=>15933,
+52457=>15934,
+52458=>15935,
+52459=>15936,
+52461=>15937,
+52462=>15938,
+52463=>15939,
+52465=>15940,
+52466=>15941,
+52467=>15942,
+52468=>15943,
+52469=>15944,
+52470=>15945,
+52471=>15946,
+52472=>15947,
+52473=>15948,
+52474=>15949,
+52475=>15950,
+52476=>15951,
+52477=>15952,
+52478=>15953,
+52479=>15954,
+52480=>15955,
+52482=>15956,
+52483=>15957,
+52484=>15958,
+52485=>15959,
+52486=>15960,
+52487=>15961,
+52490=>15962,
+52491=>15963,
+52493=>15964,
+52494=>15965,
+52495=>15966,
+52497=>15967,
+52498=>15968,
+52499=>15969,
+52500=>15970,
+52501=>15971,
+52502=>15972,
+52503=>15973,
+52506=>15974,
+52508=>15975,
+52510=>15976,
+52511=>15977,
+52512=>15978,
+52513=>15979,
+52514=>15980,
+52515=>15981,
+52517=>15982,
+52518=>15983,
+52519=>15984,
+52521=>15985,
+52522=>15986,
+52523=>15987,
+52525=>15988,
+52526=>15989,
+52527=>15990,
+52528=>15991,
+52529=>15992,
+52530=>15993,
+52531=>15994,
+52532=>15995,
+52533=>15996,
+52534=>15997,
+52535=>15998,
+52536=>15999,
+52538=>16000,
+52539=>16001,
+52540=>16002,
+52541=>16003,
+52542=>16004,
+52543=>16005,
+52544=>16006,
+52545=>16007,
+52546=>16008,
+52547=>16009,
+52548=>16010,
+52549=>16011,
+52550=>16012,
+52551=>16013,
+52552=>16014,
+52553=>16015,
+52554=>16016,
+52555=>16017,
+52556=>16018,
+52557=>16019,
+52558=>16020,
+52559=>16021,
+52560=>16022,
+52561=>16023,
+52562=>16024,
+52563=>16025,
+52564=>16026,
+52565=>16027,
+52566=>16028,
+52567=>16029,
+52568=>16030,
+52569=>16031,
+52570=>16032,
+52571=>16033,
+52573=>16034,
+52574=>16035,
+52575=>16036,
+52577=>16037,
+52578=>16038,
+52579=>16039,
+52581=>16040,
+52582=>16041,
+52583=>16042,
+52584=>16043,
+52585=>16044,
+52586=>16045,
+52587=>16046,
+52590=>16047,
+52592=>16048,
+52594=>16049,
+52595=>16050,
+52596=>16051,
+52597=>16052,
+52598=>16053,
+52599=>16054,
+52601=>16055,
+52602=>16056,
+52603=>16057,
+52604=>16058,
+52605=>16059,
+52606=>16060,
+52607=>16061,
+52608=>16062,
+52609=>16063,
+52610=>16064,
+52611=>16065,
+52612=>16066,
+52613=>16067,
+52614=>16068,
+52615=>16069,
+52617=>16070,
+52618=>16071,
+52619=>16072,
+52620=>16073,
+52621=>16074,
+52622=>16075,
+52623=>16076,
+52624=>16077,
+52625=>16078,
+52626=>16079,
+52627=>16080,
+52630=>16081,
+52631=>16082,
+52633=>16083,
+52634=>16084,
+52635=>16085,
+52637=>16086,
+52638=>16087,
+52639=>16088,
+52640=>16089,
+52641=>16090,
+52642=>16091,
+52643=>16092,
+52646=>16093,
+52648=>16094,
+52650=>16095,
+52651=>16096,
+52652=>16097,
+52653=>16098,
+52654=>16099,
+52655=>16100,
+52657=>16101,
+52658=>16102,
+52659=>16103,
+52660=>16104,
+52661=>16105,
+52662=>16106,
+52663=>16107,
+52664=>16108,
+52665=>16109,
+52666=>16110,
+52667=>16111,
+52668=>16112,
+52669=>16113,
+52670=>16114,
+52671=>16115,
+52672=>16116,
+52673=>16117,
+52674=>16118,
+52675=>16119,
+52677=>16120,
+52678=>16121,
+52679=>16122,
+52680=>16123,
+52681=>16124,
+52682=>16125,
+52683=>16126,
+52685=>16127,
+52686=>16128,
+52687=>16129,
+52689=>16130,
+52690=>16131,
+52691=>16132,
+52692=>16133,
+52693=>16134,
+52694=>16135,
+52695=>16136,
+52696=>16137,
+52697=>16138,
+52698=>16139,
+52699=>16140,
+52700=>16141,
+52701=>16142,
+52702=>16143,
+52703=>16144,
+52704=>16145,
+52705=>16146,
+52706=>16147,
+52707=>16148,
+52708=>16149,
+52709=>16150,
+52710=>16151,
+52711=>16152,
+52713=>16153,
+52714=>16154,
+52715=>16155,
+52717=>16156,
+52718=>16157,
+52719=>16158,
+52721=>16159,
+52722=>16160,
+52723=>16161,
+52724=>16162,
+52725=>16163,
+52726=>16164,
+52727=>16165,
+52730=>16166,
+52732=>16167,
+52734=>16168,
+52735=>16169,
+52736=>16170,
+52737=>16171,
+52738=>16172,
+52739=>16173,
+52741=>16174,
+52742=>16175,
+52743=>16176,
+52745=>16177,
+52746=>16178,
+52747=>16179,
+52749=>16180,
+52750=>16181,
+52751=>16182,
+52752=>16183,
+52753=>16184,
+52754=>16185,
+52755=>16186,
+52757=>16187,
+52758=>16188,
+52759=>16189,
+52760=>16190,
+52762=>16191,
+52763=>16192,
+52764=>16193,
+52765=>16194,
+52766=>16195,
+52767=>16196,
+52770=>16197,
+52771=>16198,
+52773=>16199,
+52774=>16200,
+52775=>16201,
+52777=>16202,
+52778=>16203,
+52779=>16204,
+52780=>16205,
+52781=>16206,
+52782=>16207,
+52783=>16208,
+52786=>16209,
+52788=>16210,
+52790=>16211,
+52791=>16212,
+52792=>16213,
+52793=>16214,
+52794=>16215,
+52795=>16216,
+52796=>16217,
+52797=>16218,
+52798=>16219,
+52799=>16220,
+52800=>16221,
+52801=>16222,
+52802=>16223,
+52803=>16224,
+52804=>16225,
+52805=>16226,
+52806=>16227,
+52807=>16228,
+52808=>16229,
+52809=>16230,
+52810=>16231,
+52811=>16232,
+52812=>16233,
+52813=>16234,
+52814=>16235,
+52815=>16236,
+52816=>16237,
+52817=>16238,
+52818=>16239,
+52819=>16240,
+52820=>16241,
+52821=>16242,
+52822=>16243,
+52823=>16244,
+52826=>16245,
+52827=>16246,
+52829=>16247,
+52830=>16248,
+52834=>16249,
+52835=>16250,
+52836=>16251,
+52837=>16252,
+52838=>16253,
+52839=>16254,
+52842=>16255,
+52844=>16256,
+52846=>16257,
+52847=>16258,
+52848=>16259,
+52849=>16260,
+52850=>16261,
+52851=>16262,
+52854=>16263,
+52855=>16264,
+52857=>16265,
+52858=>16266,
+52859=>16267,
+52861=>16268,
+52862=>16269,
+52863=>16270,
+52864=>16271,
+52865=>16272,
+52866=>16273,
+52867=>16274,
+52870=>16275,
+52872=>16276,
+52874=>16277,
+52875=>16278,
+52876=>16279,
+52877=>16280,
+52878=>16281,
+52879=>16282,
+52882=>16283,
+52883=>16284,
+52885=>16285,
+52886=>16286,
+52887=>16287,
+52889=>16288,
+52890=>16289,
+52891=>16290,
+52892=>16291,
+52893=>16292,
+52894=>16293,
+52895=>16294,
+52898=>16295,
+52902=>16296,
+52903=>16297,
+52904=>16298,
+52905=>16299,
+52906=>16300,
+52907=>16301,
+52910=>16302,
+52911=>16303,
+52912=>16304,
+52913=>16305,
+52914=>16306,
+52915=>16307,
+52916=>16308,
+52917=>16309,
+52918=>16310,
+52919=>16311,
+52920=>16312,
+52921=>16313,
+52922=>16314,
+52923=>16315,
+52924=>16316,
+52925=>16317,
+52926=>16318,
+52927=>16319,
+52928=>16320,
+52930=>16321,
+52931=>16322,
+52932=>16323,
+52933=>16324,
+52934=>16325,
+52935=>16326,
+52936=>16327,
+52937=>16328,
+52938=>16329,
+52939=>16330,
+52940=>16331,
+52941=>16332,
+52942=>16333,
+52943=>16334,
+52944=>16335,
+52945=>16336,
+52946=>16337,
+52947=>16338,
+52948=>16339,
+52949=>16340,
+52950=>16341,
+52951=>16342,
+52952=>16343,
+52953=>16344,
+52954=>16345,
+52955=>16346,
+52956=>16347,
+52957=>16348,
+52958=>16349,
+52959=>16350,
+52960=>16351,
+52961=>16352,
+52962=>16353,
+52963=>16354,
+52966=>16355,
+52967=>16356,
+52969=>16357,
+52970=>16358,
+52973=>16359,
+52974=>16360,
+52975=>16361,
+52976=>16362,
+52977=>16363,
+52978=>16364,
+52979=>16365,
+52982=>16366,
+52986=>16367,
+52987=>16368,
+52988=>16369,
+52989=>16370,
+52990=>16371,
+52991=>16372,
+52994=>16373,
+52995=>16374,
+52997=>16375,
+52998=>16376,
+52999=>16377,
+53001=>16378,
+53002=>16379,
+53003=>16380,
+53004=>16381,
+53005=>16382,
+53006=>16383,
+53007=>16384,
+53010=>16385,
+53012=>16386,
+53014=>16387,
+53015=>16388,
+53016=>16389,
+53017=>16390,
+53018=>16391,
+53019=>16392,
+53021=>16393,
+53022=>16394,
+53023=>16395,
+53025=>16396,
+53026=>16397,
+53027=>16398,
+53029=>16399,
+53030=>16400,
+53031=>16401,
+53032=>16402,
+53033=>16403,
+53034=>16404,
+53035=>16405,
+53038=>16406,
+53042=>16407,
+53043=>16408,
+53044=>16409,
+53045=>16410,
+53046=>16411,
+53047=>16412,
+53049=>16413,
+53050=>16414,
+53051=>16415,
+53052=>16416,
+53053=>16417,
+53054=>16418,
+53055=>16419,
+53056=>16420,
+53057=>16421,
+53058=>16422,
+53059=>16423,
+53060=>16424,
+53061=>16425,
+53062=>16426,
+53063=>16427,
+53064=>16428,
+53065=>16429,
+53066=>16430,
+53067=>16431,
+53068=>16432,
+53069=>16433,
+53070=>16434,
+53071=>16435,
+53072=>16436,
+53073=>16437,
+53074=>16438,
+53075=>16439,
+53078=>16440,
+53079=>16441,
+53081=>16442,
+53082=>16443,
+53083=>16444,
+53085=>16445,
+53086=>16446,
+53087=>16447,
+53088=>16448,
+53089=>16449,
+53090=>16450,
+53091=>16451,
+53094=>16452,
+53096=>16453,
+53098=>16454,
+53099=>16455,
+53100=>16456,
+53101=>16457,
+53102=>16458,
+53103=>16459,
+53106=>16460,
+53107=>16461,
+53109=>16462,
+53110=>16463,
+53111=>16464,
+53113=>16465,
+53114=>16466,
+53115=>16467,
+53116=>16468,
+53117=>16469,
+53118=>16470,
+53119=>16471,
+53121=>16472,
+53122=>16473,
+53123=>16474,
+53124=>16475,
+53126=>16476,
+53127=>16477,
+53128=>16478,
+53129=>16479,
+53130=>16480,
+53131=>16481,
+53133=>16482,
+53134=>16483,
+53135=>16484,
+53136=>16485,
+53137=>16486,
+53138=>16487,
+53139=>16488,
+53140=>16489,
+53141=>16490,
+53142=>16491,
+53143=>16492,
+53144=>16493,
+53145=>16494,
+53146=>16495,
+53147=>16496,
+53148=>16497,
+53149=>16498,
+53150=>16499,
+53151=>16500,
+53152=>16501,
+53154=>16502,
+53155=>16503,
+53156=>16504,
+53157=>16505,
+53158=>16506,
+53159=>16507,
+53161=>16508,
+53162=>16509,
+53163=>16510,
+53164=>16511,
+53165=>16512,
+53166=>16513,
+53167=>16514,
+53169=>16515,
+53170=>16516,
+53171=>16517,
+53172=>16518,
+53173=>16519,
+53174=>16520,
+53175=>16521,
+53176=>16522,
+53177=>16523,
+53178=>16524,
+53179=>16525,
+53180=>16526,
+53181=>16527,
+53182=>16528,
+53183=>16529,
+53184=>16530,
+53185=>16531,
+53186=>16532,
+53187=>16533,
+53189=>16534,
+53190=>16535,
+53191=>16536,
+53192=>16537,
+53193=>16538,
+53194=>16539,
+53195=>16540,
+53196=>16541,
+53197=>16542,
+53198=>16543,
+53199=>16544,
+53200=>16545,
+53201=>16546,
+53202=>16547,
+53203=>16548,
+53204=>16549,
+53205=>16550,
+53206=>16551,
+53207=>16552,
+53208=>16553,
+53209=>16554,
+53210=>16555,
+53211=>16556,
+53212=>16557,
+53213=>16558,
+53214=>16559,
+53215=>16560,
+53218=>16561,
+53219=>16562,
+53221=>16563,
+53222=>16564,
+53223=>16565,
+53225=>16566,
+53226=>16567,
+53227=>16568,
+53228=>16569,
+53229=>16570,
+53230=>16571,
+53231=>16572,
+53234=>16573,
+53236=>16574,
+53238=>16575,
+53239=>16576,
+53240=>16577,
+53241=>16578,
+53242=>16579,
+53243=>16580,
+53245=>16581,
+53246=>16582,
+53247=>16583,
+53249=>16584,
+53250=>16585,
+53251=>16586,
+53253=>16587,
+53254=>16588,
+53255=>16589,
+53256=>16590,
+53257=>16591,
+53258=>16592,
+53259=>16593,
+53260=>16594,
+53261=>16595,
+53262=>16596,
+53263=>16597,
+53264=>16598,
+53266=>16599,
+53267=>16600,
+53268=>16601,
+53269=>16602,
+53270=>16603,
+53271=>16604,
+53273=>16605,
+53274=>16606,
+53275=>16607,
+53276=>16608,
+53277=>16609,
+53278=>16610,
+53279=>16611,
+53280=>16612,
+53281=>16613,
+53282=>16614,
+53283=>16615,
+53284=>16616,
+53285=>16617,
+53286=>16618,
+53287=>16619,
+53288=>16620,
+53289=>16621,
+53290=>16622,
+53291=>16623,
+53292=>16624,
+53294=>16625,
+53295=>16626,
+53296=>16627,
+53297=>16628,
+53298=>16629,
+53299=>16630,
+53302=>16631,
+53303=>16632,
+53305=>16633,
+53306=>16634,
+53307=>16635,
+53309=>16636,
+53310=>16637,
+53311=>16638,
+53312=>16639,
+53313=>16640,
+53314=>16641,
+53315=>16642,
+53318=>16643,
+53320=>16644,
+53322=>16645,
+53323=>16646,
+53324=>16647,
+53325=>16648,
+53326=>16649,
+53327=>16650,
+53329=>16651,
+53330=>16652,
+53331=>16653,
+53333=>16654,
+53334=>16655,
+53335=>16656,
+53337=>16657,
+53338=>16658,
+53339=>16659,
+53340=>16660,
+53341=>16661,
+53342=>16662,
+53343=>16663,
+53345=>16664,
+53346=>16665,
+53347=>16666,
+53348=>16667,
+53349=>16668,
+53350=>16669,
+53351=>16670,
+53352=>16671,
+53353=>16672,
+53354=>16673,
+53355=>16674,
+53358=>16675,
+53359=>16676,
+53361=>16677,
+53362=>16678,
+53363=>16679,
+53365=>16680,
+53366=>16681,
+53367=>16682,
+53368=>16683,
+53369=>16684,
+53370=>16685,
+53371=>16686,
+53374=>16687,
+53375=>16688,
+53376=>16689,
+53378=>16690,
+53379=>16691,
+53380=>16692,
+53381=>16693,
+53382=>16694,
+53383=>16695,
+53384=>16696,
+53385=>16697,
+53386=>16698,
+53387=>16699,
+53388=>16700,
+53389=>16701,
+53390=>16702,
+53391=>16703,
+53392=>16704,
+53393=>16705,
+53394=>16706,
+53395=>16707,
+53396=>16708,
+53397=>16709,
+53398=>16710,
+53399=>16711,
+53400=>16712,
+53401=>16713,
+53402=>16714,
+53403=>16715,
+53404=>16716,
+53405=>16717,
+53406=>16718,
+53407=>16719,
+53408=>16720,
+53409=>16721,
+53410=>16722,
+53411=>16723,
+53414=>16724,
+53415=>16725,
+53417=>16726,
+53418=>16727,
+53419=>16728,
+53421=>16729,
+53422=>16730,
+53423=>16731,
+53424=>16732,
+53425=>16733,
+53426=>16734,
+53427=>16735,
+53430=>16736,
+53432=>16737,
+53434=>16738,
+53435=>16739,
+53436=>16740,
+53437=>16741,
+53438=>16742,
+53439=>16743,
+53442=>16744,
+53443=>16745,
+53445=>16746,
+53446=>16747,
+53447=>16748,
+53450=>16749,
+53451=>16750,
+53452=>16751,
+53453=>16752,
+53454=>16753,
+53455=>16754,
+53458=>16755,
+53462=>16756,
+53463=>16757,
+53464=>16758,
+53465=>16759,
+53466=>16760,
+53467=>16761,
+53470=>16762,
+53471=>16763,
+53473=>16764,
+53474=>16765,
+53475=>16766,
+53477=>16767,
+53478=>16768,
+53479=>16769,
+53480=>16770,
+53481=>16771,
+53482=>16772,
+53483=>16773,
+53486=>16774,
+53490=>16775,
+53491=>16776,
+53492=>16777,
+53493=>16778,
+53494=>16779,
+53495=>16780,
+53497=>16781,
+53498=>16782,
+53499=>16783,
+53500=>16784,
+53501=>16785,
+53502=>16786,
+53503=>16787,
+53504=>16788,
+53505=>16789,
+53506=>16790,
+53507=>16791,
+53508=>16792,
+53509=>16793,
+53510=>16794,
+53511=>16795,
+53512=>16796,
+53513=>16797,
+53514=>16798,
+53515=>16799,
+53516=>16800,
+53518=>16801,
+53519=>16802,
+53520=>16803,
+53521=>16804,
+53522=>16805,
+53523=>16806,
+53524=>16807,
+53525=>16808,
+53526=>16809,
+53527=>16810,
+53528=>16811,
+53529=>16812,
+53530=>16813,
+53531=>16814,
+53532=>16815,
+53533=>16816,
+53534=>16817,
+53535=>16818,
+53536=>16819,
+53537=>16820,
+53538=>16821,
+53539=>16822,
+53540=>16823,
+53541=>16824,
+53542=>16825,
+53543=>16826,
+53544=>16827,
+53545=>16828,
+53546=>16829,
+53547=>16830,
+53548=>16831,
+53549=>16832,
+53550=>16833,
+53551=>16834,
+53554=>16835,
+53555=>16836,
+53557=>16837,
+53558=>16838,
+53559=>16839,
+53561=>16840,
+53563=>16841,
+53564=>16842,
+53565=>16843,
+53566=>16844,
+53567=>16845,
+53570=>16846,
+53574=>16847,
+53575=>16848,
+53576=>16849,
+53577=>16850,
+53578=>16851,
+53579=>16852,
+53582=>16853,
+53583=>16854,
+53585=>16855,
+53586=>16856,
+53587=>16857,
+53589=>16858,
+53590=>16859,
+53591=>16860,
+53592=>16861,
+53593=>16862,
+53594=>16863,
+53595=>16864,
+53598=>16865,
+53600=>16866,
+53602=>16867,
+53603=>16868,
+53604=>16869,
+53605=>16870,
+53606=>16871,
+53607=>16872,
+53609=>16873,
+53610=>16874,
+53611=>16875,
+53613=>16876,
+53614=>16877,
+53615=>16878,
+53616=>16879,
+53617=>16880,
+53618=>16881,
+53619=>16882,
+53620=>16883,
+53621=>16884,
+53622=>16885,
+53623=>16886,
+53624=>16887,
+53625=>16888,
+53626=>16889,
+53627=>16890,
+53629=>16891,
+53630=>16892,
+53631=>16893,
+53632=>16894,
+53633=>16895,
+53634=>16896,
+53635=>16897,
+53637=>16898,
+53638=>16899,
+53639=>16900,
+53641=>16901,
+53642=>16902,
+53643=>16903,
+53644=>16904,
+53645=>16905,
+53646=>16906,
+53647=>16907,
+53648=>16908,
+53649=>16909,
+53650=>16910,
+53651=>16911,
+53652=>16912,
+53653=>16913,
+53654=>16914,
+53655=>16915,
+53656=>16916,
+53657=>16917,
+53658=>16918,
+53659=>16919,
+53660=>16920,
+53661=>16921,
+53662=>16922,
+53663=>16923,
+53666=>16924,
+53667=>16925,
+53669=>16926,
+53670=>16927,
+53671=>16928,
+53673=>16929,
+53674=>16930,
+53675=>16931,
+53676=>16932,
+53677=>16933,
+53678=>16934,
+53679=>16935,
+53682=>16936,
+53684=>16937,
+53686=>16938,
+53687=>16939,
+53688=>16940,
+53689=>16941,
+53691=>16942,
+53693=>16943,
+53694=>16944,
+53695=>16945,
+53697=>16946,
+53698=>16947,
+53699=>16948,
+53700=>16949,
+53701=>16950,
+53702=>16951,
+53703=>16952,
+53704=>16953,
+53705=>16954,
+53706=>16955,
+53707=>16956,
+53708=>16957,
+53709=>16958,
+53710=>16959,
+53711=>16960,
+53712=>16961,
+53713=>16962,
+53714=>16963,
+53715=>16964,
+53716=>16965,
+53717=>16966,
+53718=>16967,
+53719=>16968,
+53721=>16969,
+53722=>16970,
+53723=>16971,
+53724=>16972,
+53725=>16973,
+53726=>16974,
+53727=>16975,
+53728=>16976,
+53729=>16977,
+53730=>16978,
+53731=>16979,
+53732=>16980,
+53733=>16981,
+53734=>16982,
+53735=>16983,
+53736=>16984,
+53737=>16985,
+53738=>16986,
+53739=>16987,
+53740=>16988,
+53741=>16989,
+53742=>16990,
+53743=>16991,
+53744=>16992,
+53745=>16993,
+53746=>16994,
+53747=>16995,
+53749=>16996,
+53750=>16997,
+53751=>16998,
+53753=>16999,
+53754=>17000,
+53755=>17001,
+53756=>17002,
+53757=>17003,
+53758=>17004,
+53759=>17005,
+53760=>17006,
+53761=>17007,
+53762=>17008,
+53763=>17009,
+53764=>17010,
+53765=>17011,
+53766=>17012,
+53768=>17013,
+53770=>17014,
+53771=>17015,
+53772=>17016,
+53773=>17017,
+53774=>17018,
+53775=>17019,
+53777=>17020,
+53778=>17021,
+53779=>17022,
+53780=>17023,
+53781=>17024,
+53782=>17025,
+53783=>17026,
+53784=>17027,
+53785=>17028,
+53786=>17029,
+53787=>17030,
+53788=>17031,
+53789=>17032,
+53790=>17033,
+53791=>17034,
+53792=>17035,
+53793=>17036,
+53794=>17037,
+53795=>17038,
+53796=>17039,
+53797=>17040,
+53798=>17041,
+53799=>17042,
+53800=>17043,
+53801=>17044,
+53802=>17045,
+53803=>17046,
+53806=>17047,
+53807=>17048,
+53809=>17049,
+53810=>17050,
+53811=>17051,
+53813=>17052,
+53814=>17053,
+53815=>17054,
+53816=>17055,
+53817=>17056,
+53818=>17057,
+53819=>17058,
+53822=>17059,
+53824=>17060,
+53826=>17061,
+53827=>17062,
+53828=>17063,
+53829=>17064,
+53830=>17065,
+53831=>17066,
+53833=>17067,
+53834=>17068,
+53835=>17069,
+53836=>17070,
+53837=>17071,
+53838=>17072,
+53839=>17073,
+53840=>17074,
+53841=>17075,
+53842=>17076,
+53843=>17077,
+53844=>17078,
+53845=>17079,
+53846=>17080,
+53847=>17081,
+53848=>17082,
+53849=>17083,
+53850=>17084,
+53851=>17085,
+53853=>17086,
+53854=>17087,
+53855=>17088,
+53856=>17089,
+53857=>17090,
+53858=>17091,
+53859=>17092,
+53861=>17093,
+53862=>17094,
+53863=>17095,
+53864=>17096,
+53865=>17097,
+53866=>17098,
+53867=>17099,
+53868=>17100,
+53869=>17101,
+53870=>17102,
+53871=>17103,
+53872=>17104,
+53873=>17105,
+53874=>17106,
+53875=>17107,
+53876=>17108,
+53877=>17109,
+53878=>17110,
+53879=>17111,
+53880=>17112,
+53881=>17113,
+53882=>17114,
+53883=>17115,
+53884=>17116,
+53885=>17117,
+53886=>17118,
+53887=>17119,
+53890=>17120,
+53891=>17121,
+53893=>17122,
+53894=>17123,
+53895=>17124,
+53897=>17125,
+53898=>17126,
+53899=>17127,
+53900=>17128,
+53901=>17129,
+53902=>17130,
+53903=>17131,
+53906=>17132,
+53907=>17133,
+53908=>17134,
+53910=>17135,
+53911=>17136,
+53912=>17137,
+53913=>17138,
+53914=>17139,
+53915=>17140,
+53917=>17141,
+53918=>17142,
+53919=>17143,
+53921=>17144,
+53922=>17145,
+53923=>17146,
+53925=>17147,
+53926=>17148,
+53927=>17149,
+53928=>17150,
+53929=>17151,
+53930=>17152,
+53931=>17153,
+53933=>17154,
+53934=>17155,
+53935=>17156,
+53936=>17157,
+53938=>17158,
+53939=>17159,
+53940=>17160,
+53941=>17161,
+53942=>17162,
+53943=>17163,
+53946=>17164,
+53947=>17165,
+53949=>17166,
+53950=>17167,
+53953=>17168,
+53955=>17169,
+53956=>17170,
+53957=>17171,
+53958=>17172,
+53959=>17173,
+53962=>17174,
+53964=>17175,
+53965=>17176,
+53966=>17177,
+53967=>17178,
+53968=>17179,
+53969=>17180,
+53970=>17181,
+53971=>17182,
+53973=>17183,
+53974=>17184,
+53975=>17185,
+53977=>17186,
+53978=>17187,
+53979=>17188,
+53981=>17189,
+53982=>17190,
+53983=>17191,
+53984=>17192,
+53985=>17193,
+53986=>17194,
+53987=>17195,
+53990=>17196,
+53991=>17197,
+53992=>17198,
+53993=>17199,
+53994=>17200,
+53995=>17201,
+53996=>17202,
+53997=>17203,
+53998=>17204,
+53999=>17205,
+54002=>17206,
+54003=>17207,
+54005=>17208,
+54006=>17209,
+54007=>17210,
+54009=>17211,
+54010=>17212,
+54011=>17213,
+54012=>17214,
+54013=>17215,
+54014=>17216,
+54015=>17217,
+54018=>17218,
+54020=>17219,
+54022=>17220,
+54023=>17221,
+54024=>17222,
+54025=>17223,
+54026=>17224,
+54027=>17225,
+54031=>17226,
+54033=>17227,
+54034=>17228,
+54035=>17229,
+54037=>17230,
+54039=>17231,
+54040=>17232,
+54041=>17233,
+54042=>17234,
+54043=>17235,
+54046=>17236,
+54050=>17237,
+54051=>17238,
+54052=>17239,
+54054=>17240,
+54055=>17241,
+54058=>17242,
+54059=>17243,
+54061=>17244,
+54062=>17245,
+54063=>17246,
+54065=>17247,
+54066=>17248,
+54067=>17249,
+54068=>17250,
+54069=>17251,
+54070=>17252,
+54071=>17253,
+54074=>17254,
+54078=>17255,
+54079=>17256,
+54080=>17257,
+54081=>17258,
+54082=>17259,
+54083=>17260,
+54086=>17261,
+54087=>17262,
+54088=>17263,
+54089=>17264,
+54090=>17265,
+54091=>17266,
+54092=>17267,
+54093=>17268,
+54094=>17269,
+54095=>17270,
+54096=>17271,
+54097=>17272,
+54098=>17273,
+54099=>17274,
+54100=>17275,
+54101=>17276,
+54102=>17277,
+54103=>17278,
+54104=>17279,
+54105=>17280,
+54106=>17281,
+54107=>17282,
+54108=>17283,
+54109=>17284,
+54110=>17285,
+54111=>17286,
+54112=>17287,
+54113=>17288,
+54114=>17289,
+54115=>17290,
+54116=>17291,
+54117=>17292,
+54118=>17293,
+54119=>17294,
+54120=>17295,
+54121=>17296,
+54122=>17297,
+54123=>17298,
+54124=>17299,
+54125=>17300,
+54126=>17301,
+54127=>17302,
+54128=>17303,
+54129=>17304,
+54130=>17305,
+54131=>17306,
+54132=>17307,
+54133=>17308,
+54134=>17309,
+54135=>17310,
+54136=>17311,
+54137=>17312,
+54138=>17313,
+54139=>17314,
+54142=>17315,
+54143=>17316,
+54145=>17317,
+54146=>17318,
+54147=>17319,
+54149=>17320,
+54150=>17321,
+54151=>17322,
+54152=>17323,
+54153=>17324,
+54154=>17325,
+54155=>17326,
+54158=>17327,
+54162=>17328,
+54163=>17329,
+54164=>17330,
+54165=>17331,
+54166=>17332,
+54167=>17333,
+54170=>17334,
+54171=>17335,
+54173=>17336,
+54174=>17337,
+54175=>17338,
+54177=>17339,
+54178=>17340,
+54179=>17341,
+54180=>17342,
+54181=>17343,
+54182=>17344,
+54183=>17345,
+54186=>17346,
+54188=>17347,
+54190=>17348,
+54191=>17349,
+54192=>17350,
+54193=>17351,
+54194=>17352,
+54195=>17353,
+54197=>17354,
+54198=>17355,
+54199=>17356,
+54201=>17357,
+54202=>17358,
+54203=>17359,
+54205=>17360,
+54206=>17361,
+54207=>17362,
+54208=>17363,
+54209=>17364,
+54210=>17365,
+54211=>17366,
+54214=>17367,
+54215=>17368,
+54218=>17369,
+54219=>17370,
+54220=>17371,
+54221=>17372,
+54222=>17373,
+54223=>17374,
+54225=>17375,
+54226=>17376,
+54227=>17377,
+54228=>17378,
+54229=>17379,
+54230=>17380,
+54231=>17381,
+54233=>17382,
+54234=>17383,
+54235=>17384,
+54236=>17385,
+54237=>17386,
+54238=>17387,
+54239=>17388,
+54240=>17389,
+54242=>17390,
+54244=>17391,
+54245=>17392,
+54246=>17393,
+54247=>17394,
+54248=>17395,
+54249=>17396,
+54250=>17397,
+54251=>17398,
+54254=>17399,
+54255=>17400,
+54257=>17401,
+54258=>17402,
+54259=>17403,
+54261=>17404,
+54262=>17405,
+54263=>17406,
+54264=>17407,
+54265=>17408,
+54266=>17409,
+54267=>17410,
+54270=>17411,
+54272=>17412,
+54274=>17413,
+54275=>17414,
+54276=>17415,
+54277=>17416,
+54278=>17417,
+54279=>17418,
+54281=>17419,
+54282=>17420,
+54283=>17421,
+54284=>17422,
+54285=>17423,
+54286=>17424,
+54287=>17425,
+54288=>17426,
+54289=>17427,
+54290=>17428,
+54291=>17429,
+54292=>17430,
+54293=>17431,
+54294=>17432,
+54295=>17433,
+54296=>17434,
+54297=>17435,
+54298=>17436,
+54299=>17437,
+54300=>17438,
+54302=>17439,
+54303=>17440,
+54304=>17441,
+54305=>17442,
+54306=>17443,
+54307=>17444,
+54308=>17445,
+54309=>17446,
+54310=>17447,
+54311=>17448,
+54312=>17449,
+54313=>17450,
+54314=>17451,
+54315=>17452,
+54316=>17453,
+54317=>17454,
+54318=>17455,
+54319=>17456,
+54320=>17457,
+54321=>17458,
+54322=>17459,
+54323=>17460,
+54324=>17461,
+54325=>17462,
+54326=>17463,
+54327=>17464,
+54328=>17465,
+54329=>17466,
+54330=>17467,
+54331=>17468,
+54332=>17469,
+54333=>17470,
+54334=>17471,
+54335=>17472,
+54337=>17473,
+54338=>17474,
+54339=>17475,
+54341=>17476,
+54342=>17477,
+54343=>17478,
+54344=>17479,
+54345=>17480,
+54346=>17481,
+54347=>17482,
+54348=>17483,
+54349=>17484,
+54350=>17485,
+54351=>17486,
+54352=>17487,
+54353=>17488,
+54354=>17489,
+54355=>17490,
+54356=>17491,
+54357=>17492,
+54358=>17493,
+54359=>17494,
+54360=>17495,
+54361=>17496,
+54362=>17497,
+54363=>17498,
+54365=>17499,
+54366=>17500,
+54367=>17501,
+54369=>17502,
+54370=>17503,
+54371=>17504,
+54373=>17505,
+54374=>17506,
+54375=>17507,
+54376=>17508,
+54377=>17509,
+54378=>17510,
+54379=>17511,
+54380=>17512,
+54382=>17513,
+54384=>17514,
+54385=>17515,
+54386=>17516,
+54387=>17517,
+54388=>17518,
+54389=>17519,
+54390=>17520,
+54391=>17521,
+54394=>17522,
+54395=>17523,
+54397=>17524,
+54398=>17525,
+54401=>17526,
+54403=>17527,
+54404=>17528,
+54405=>17529,
+54406=>17530,
+54407=>17531,
+54410=>17532,
+54412=>17533,
+54414=>17534,
+54415=>17535,
+54416=>17536,
+54417=>17537,
+54418=>17538,
+54419=>17539,
+54421=>17540,
+54422=>17541,
+54423=>17542,
+54424=>17543,
+54425=>17544,
+54426=>17545,
+54427=>17546,
+54428=>17547,
+54429=>17548,
+54430=>17549,
+54431=>17550,
+54432=>17551,
+54433=>17552,
+54434=>17553,
+54435=>17554,
+54436=>17555,
+54437=>17556,
+54438=>17557,
+54439=>17558,
+54440=>17559,
+54442=>17560,
+54443=>17561,
+54444=>17562,
+54445=>17563,
+54446=>17564,
+54447=>17565,
+54448=>17566,
+54449=>17567,
+54450=>17568,
+54451=>17569,
+54452=>17570,
+54453=>17571,
+54454=>17572,
+54455=>17573,
+54456=>17574,
+54457=>17575,
+54458=>17576,
+54459=>17577,
+54460=>17578,
+54461=>17579,
+54462=>17580,
+54463=>17581,
+54464=>17582,
+54465=>17583,
+54466=>17584,
+54467=>17585,
+54468=>17586,
+54469=>17587,
+54470=>17588,
+54471=>17589,
+54472=>17590,
+54473=>17591,
+54474=>17592,
+54475=>17593,
+54477=>17594,
+54478=>17595,
+54479=>17596,
+54481=>17597,
+54482=>17598,
+54483=>17599,
+54485=>17600,
+54486=>17601,
+54487=>17602,
+54488=>17603,
+54489=>17604,
+54490=>17605,
+54491=>17606,
+54493=>17607,
+54494=>17608,
+54496=>17609,
+54497=>17610,
+54498=>17611,
+54499=>17612,
+54500=>17613,
+54501=>17614,
+54502=>17615,
+54503=>17616,
+54505=>17617,
+54506=>17618,
+54507=>17619,
+54509=>17620,
+54510=>17621,
+54511=>17622,
+54513=>17623,
+54514=>17624,
+54515=>17625,
+54516=>17626,
+54517=>17627,
+54518=>17628,
+54519=>17629,
+54521=>17630,
+54522=>17631,
+54524=>17632,
+54526=>17633,
+54527=>17634,
+54528=>17635,
+54529=>17636,
+54530=>17637,
+54531=>17638,
+54533=>17639,
+54534=>17640,
+54535=>17641,
+54537=>17642,
+54538=>17643,
+54539=>17644,
+54541=>17645,
+54542=>17646,
+54543=>17647,
+54544=>17648,
+54545=>17649,
+54546=>17650,
+54547=>17651,
+54550=>17652,
+54552=>17653,
+54553=>17654,
+54554=>17655,
+54555=>17656,
+54556=>17657,
+54557=>17658,
+54558=>17659,
+54559=>17660,
+54560=>17661,
+54561=>17662,
+54562=>17663,
+54563=>17664,
+54564=>17665,
+54565=>17666,
+54566=>17667,
+54567=>17668,
+54568=>17669,
+54569=>17670,
+54570=>17671,
+54571=>17672,
+54572=>17673,
+54573=>17674,
+54574=>17675,
+54575=>17676,
+54576=>17677,
+54577=>17678,
+54578=>17679,
+54579=>17680,
+54580=>17681,
+54581=>17682,
+54582=>17683,
+54583=>17684,
+54584=>17685,
+54585=>17686,
+54586=>17687,
+54587=>17688,
+54590=>17689,
+54591=>17690,
+54593=>17691,
+54594=>17692,
+54595=>17693,
+54597=>17694,
+54598=>17695,
+54599=>17696,
+54600=>17697,
+54601=>17698,
+54602=>17699,
+54603=>17700,
+54606=>17701,
+54608=>17702,
+54610=>17703,
+54611=>17704,
+54612=>17705,
+54613=>17706,
+54614=>17707,
+54615=>17708,
+54618=>17709,
+54619=>17710,
+54621=>17711,
+54622=>17712,
+54623=>17713,
+54625=>17714,
+54626=>17715,
+54627=>17716,
+54628=>17717,
+54630=>17718,
+54631=>17719,
+54634=>17720,
+54636=>17721,
+54638=>17722,
+54639=>17723,
+54640=>17724,
+54641=>17725,
+54642=>17726,
+54643=>17727,
+54646=>17728,
+54647=>17729,
+54649=>17730,
+54650=>17731,
+54651=>17732,
+54653=>17733,
+54654=>17734,
+54655=>17735,
+54656=>17736,
+54657=>17737,
+54658=>17738,
+54659=>17739,
+54662=>17740,
+54666=>17741,
+54667=>17742,
+54668=>17743,
+54669=>17744,
+54670=>17745,
+54671=>17746,
+54673=>17747,
+54674=>17748,
+54675=>17749,
+54676=>17750,
+54677=>17751,
+54678=>17752,
+54679=>17753,
+54680=>17754,
+54681=>17755,
+54682=>17756,
+54683=>17757,
+54684=>17758,
+54685=>17759,
+54686=>17760,
+54687=>17761,
+54688=>17762,
+54689=>17763,
+54690=>17764,
+54691=>17765,
+54692=>17766,
+54694=>17767,
+54695=>17768,
+54696=>17769,
+54697=>17770,
+54698=>17771,
+54699=>17772,
+54700=>17773,
+54701=>17774,
+54702=>17775,
+54703=>17776,
+54704=>17777,
+54705=>17778,
+54706=>17779,
+54707=>17780,
+54708=>17781,
+54709=>17782,
+54710=>17783,
+54711=>17784,
+54712=>17785,
+54713=>17786,
+54714=>17787,
+54715=>17788,
+54716=>17789,
+54717=>17790,
+54718=>17791,
+54719=>17792,
+54720=>17793,
+54721=>17794,
+54722=>17795,
+54723=>17796,
+54724=>17797,
+54725=>17798,
+54726=>17799,
+54727=>17800,
+54730=>17801,
+54731=>17802,
+54733=>17803,
+54734=>17804,
+54735=>17805,
+54737=>17806,
+54739=>17807,
+54740=>17808,
+54741=>17809,
+54742=>17810,
+54743=>17811,
+54746=>17812,
+54748=>17813,
+54750=>17814,
+54751=>17815,
+54752=>17816,
+54753=>17817,
+54754=>17818,
+54755=>17819,
+54758=>17820,
+54759=>17821,
+54761=>17822,
+54762=>17823,
+54763=>17824,
+54765=>17825,
+54766=>17826,
+54767=>17827,
+54768=>17828,
+54769=>17829,
+54770=>17830,
+54771=>17831,
+54774=>17832,
+54776=>17833,
+54778=>17834,
+54779=>17835,
+54780=>17836,
+54781=>17837,
+54782=>17838,
+54783=>17839,
+54786=>17840,
+54787=>17841,
+54789=>17842,
+54790=>17843,
+54791=>17844,
+54793=>17845,
+54794=>17846,
+54795=>17847,
+54796=>17848,
+54797=>17849,
+54798=>17850,
+54799=>17851,
+54802=>17852,
+54806=>17853,
+54807=>17854,
+54808=>17855,
+54809=>17856,
+54810=>17857,
+54811=>17858,
+54813=>17859,
+54814=>17860,
+54815=>17861,
+54817=>17862,
+54818=>17863,
+54819=>17864,
+54821=>17865,
+54822=>17866,
+54823=>17867,
+54824=>17868,
+54825=>17869,
+54826=>17870,
+54827=>17871,
+54828=>17872,
+54830=>17873,
+54831=>17874,
+54832=>17875,
+54833=>17876,
+54834=>17877,
+54835=>17878,
+54836=>17879,
+54837=>17880,
+54838=>17881,
+54839=>17882,
+54842=>17883,
+54843=>17884,
+54845=>17885,
+54846=>17886,
+54847=>17887,
+54849=>17888,
+54850=>17889,
+54851=>17890,
+54852=>17891,
+54854=>17892,
+54855=>17893,
+54858=>17894,
+54860=>17895,
+54862=>17896,
+54863=>17897,
+54864=>17898,
+54866=>17899,
+54867=>17900,
+54870=>17901,
+54871=>17902,
+54873=>17903,
+54874=>17904,
+54875=>17905,
+54877=>17906,
+54878=>17907,
+54879=>17908,
+54880=>17909,
+54881=>17910,
+54882=>17911,
+54883=>17912,
+54884=>17913,
+54885=>17914,
+54886=>17915,
+54888=>17916,
+54890=>17917,
+54891=>17918,
+54892=>17919,
+54893=>17920,
+54894=>17921,
+54895=>17922,
+54898=>17923,
+54899=>17924,
+54901=>17925,
+54902=>17926,
+54903=>17927,
+54904=>17928,
+54905=>17929,
+54906=>17930,
+54907=>17931,
+54908=>17932,
+54909=>17933,
+54910=>17934,
+54911=>17935,
+54912=>17936,
+54913=>17937,
+54914=>17938,
+54916=>17939,
+54918=>17940,
+54919=>17941,
+54920=>17942,
+54921=>17943,
+54922=>17944,
+54923=>17945,
+54926=>17946,
+54927=>17947,
+54929=>17948,
+54930=>17949,
+54931=>17950,
+54933=>17951,
+54934=>17952,
+54935=>17953,
+54936=>17954,
+54937=>17955,
+54938=>17956,
+54939=>17957,
+54940=>17958,
+54942=>17959,
+54944=>17960,
+54946=>17961,
+54947=>17962,
+54948=>17963,
+54949=>17964,
+54950=>17965,
+54951=>17966,
+54953=>17967,
+54954=>17968,
+54955=>17969,
+54957=>17970,
+54958=>17971,
+54959=>17972,
+54961=>17973,
+54962=>17974,
+54963=>17975,
+54964=>17976,
+54965=>17977,
+54966=>17978,
+54967=>17979,
+54968=>17980,
+54970=>17981,
+54972=>17982,
+54973=>17983,
+54974=>17984,
+54975=>17985,
+54976=>17986,
+54977=>17987,
+54978=>17988,
+54979=>17989,
+54982=>17990,
+54983=>17991,
+54985=>17992,
+54986=>17993,
+54987=>17994,
+54989=>17995,
+54990=>17996,
+54991=>17997,
+54992=>17998,
+54994=>17999,
+54995=>18000,
+54997=>18001,
+54998=>18002,
+55000=>18003,
+55002=>18004,
+55003=>18005,
+55004=>18006,
+55005=>18007,
+55006=>18008,
+55007=>18009,
+55009=>18010,
+55010=>18011,
+55011=>18012,
+55013=>18013,
+55014=>18014,
+55015=>18015,
+55017=>18016,
+55018=>18017,
+55019=>18018,
+55020=>18019,
+55021=>18020,
+55022=>18021,
+55023=>18022,
+55025=>18023,
+55026=>18024,
+55027=>18025,
+55028=>18026,
+55030=>18027,
+55031=>18028,
+55032=>18029,
+55033=>18030,
+55034=>18031,
+55035=>18032,
+55038=>18033,
+55039=>18034,
+55041=>18035,
+55042=>18036,
+55043=>18037,
+55045=>18038,
+55046=>18039,
+55047=>18040,
+55048=>18041,
+55049=>18042,
+55050=>18043,
+55051=>18044,
+55052=>18045,
+55053=>18046,
+55054=>18047,
+55055=>18048,
+55056=>18049,
+55058=>18050,
+55059=>18051,
+55060=>18052,
+55061=>18053,
+55062=>18054,
+55063=>18055,
+55066=>18056,
+55067=>18057,
+55069=>18058,
+55070=>18059,
+55071=>18060,
+55073=>18061,
+55074=>18062,
+55075=>18063,
+55076=>18064,
+55077=>18065,
+55078=>18066,
+55079=>18067,
+55082=>18068,
+55084=>18069,
+55086=>18070,
+55087=>18071,
+55088=>18072,
+55089=>18073,
+55090=>18074,
+55091=>18075,
+55094=>18076,
+55095=>18077,
+55097=>18078,
+55098=>18079,
+55099=>18080,
+55101=>18081,
+55102=>18082,
+55103=>18083,
+55104=>18084,
+55105=>18085,
+55106=>18086,
+55107=>18087,
+55109=>18088,
+55110=>18089,
+55112=>18090,
+55114=>18091,
+55115=>18092,
+55116=>18093,
+55117=>18094,
+55118=>18095,
+55119=>18096,
+55122=>18097,
+55123=>18098,
+55125=>18099,
+55130=>18100,
+55131=>18101,
+55132=>18102,
+55133=>18103,
+55134=>18104,
+55135=>18105,
+55138=>18106,
+55140=>18107,
+55142=>18108,
+55143=>18109,
+55144=>18110,
+55146=>18111,
+55147=>18112,
+55149=>18113,
+55150=>18114,
+55151=>18115,
+55153=>18116,
+55154=>18117,
+55155=>18118,
+55157=>18119,
+55158=>18120,
+55159=>18121,
+55160=>18122,
+55161=>18123,
+55162=>18124,
+55163=>18125,
+55166=>18126,
+55167=>18127,
+55168=>18128,
+55170=>18129,
+55171=>18130,
+55172=>18131,
+55173=>18132,
+55174=>18133,
+55175=>18134,
+55178=>18135,
+55179=>18136,
+55181=>18137,
+55182=>18138,
+55183=>18139,
+55185=>18140,
+55186=>18141,
+55187=>18142,
+55188=>18143,
+55189=>18144,
+55190=>18145,
+55191=>18146,
+55194=>18147,
+55196=>18148,
+55198=>18149,
+55199=>18150,
+55200=>18151,
+55201=>18152,
+55202=>18153,
+55203=>18154,
+);
+?>
diff --git a/admin/exportclases/fonts/zapfdingbats.php b/admin/exportclases/fonts/zapfdingbats.php
new file mode 100644
index 0000000..84fa093
--- /dev/null
+++ b/admin/exportclases/fonts/zapfdingbats.php
@@ -0,0 +1,32 @@
+<?php
+ // core font definition file for TCPDF (www.tcpdf.org)
+$type='core';
+$dw=788;
+$cw=array(0=>0,1=>0,2=>0,3=>0,4=>0,5=>0,6=>0,7=>0,8=>0,9=>0,10=>0,11=>0,12=>0,
+13=>0,14=>0,15=>0,16=>0,17=>0,18=>0,19=>0,20=>0,21=>0,22=>0,23=>0,24=>0,25=>0,
+26=>0,27=>0,28=>0,29=>0,30=>0,31=>0,32=>278,33=>974,34=>961,35=>974,36=>980,
+37=>719,38=>789,39=>790,40=>791,41=>690,42=>960,43=>939,44=>549,45=>855,46=>911,
+47=>933,48=>911,49=>945,50=>974,51=>755,52=>846,53=>762,54=>761,55=>571,56=>677,
+57=>763,58=>760,59=>759,60=>754,61=>494,62=>552,63=>537,64=>577,65=>692,66=>786,
+67=>788,68=>788,69=>790,70=>793,71=>794,72=>816,73=>823,74=>789,75=>841,76=>823,
+77=>833,78=>816,79=>831,80=>923,81=>744,82=>723,83=>749,84=>790,85=>792,86=>695,
+87=>776,88=>768,89=>792,90=>759,91=>707,92=>708,93=>682,94=>701,95=>826,96=>815,
+97=>789,98=>789,99=>707,100=>687,101=>696,102=>689,103=>786,104=>787,105=>713,
+106=>791,107=>785,108=>791,109=>873,110=>761,111=>762,112=>762,113=>759,114=>759,
+115=>892,116=>892,117=>788,118=>784,119=>438,120=>138,121=>277,122=>415,123=>392,
+124=>392,125=>668,126=>668,127=>0,128=>390,129=>390,130=>317,131=>317,132=>276,
+133=>276,134=>509,135=>509,136=>410,137=>410,138=>234,139=>234,140=>334,141=>334,
+142=>0,143=>0,144=>0,145=>0,146=>0,147=>0,148=>0,149=>0,150=>0,151=>0,152=>0,
+153=>0,154=>0,155=>0,156=>0,157=>0,158=>0,159=>0,160=>0,161=>732,162=>544,163=>544,
+164=>910,165=>667,166=>760,167=>760,168=>776,169=>595,170=>694,171=>626,172=>788,
+173=>788,174=>788,175=>788,176=>788,177=>788,178=>788,179=>788,180=>788,181=>788,
+182=>788,183=>788,184=>788,185=>788,186=>788,187=>788,188=>788,189=>788,190=>788,
+191=>788,192=>788,193=>788,194=>788,195=>788,196=>788,197=>788,198=>788,199=>788,
+200=>788,201=>788,202=>788,203=>788,204=>788,205=>788,206=>788,207=>788,208=>788,
+209=>788,210=>788,211=>788,212=>894,213=>838,214=>1016,215=>458,216=>748,217=>924,
+218=>748,219=>918,220=>927,221=>928,222=>928,223=>834,224=>873,225=>828,226=>924,
+227=>924,228=>917,229=>930,230=>931,231=>463,232=>883,233=>836,234=>836,235=>867,
+236=>867,237=>696,238=>696,239=>874,240=>0,241=>874,242=>760,243=>946,244=>771,
+245=>865,246=>771,247=>888,248=>967,249=>888,250=>831,251=>873,252=>927,253=>970,
+254=>918,255=>0);
+?>
diff --git a/admin/exportclases/htmlcolors.php b/admin/exportclases/htmlcolors.php
new file mode 100644
index 0000000..c4b6d16
--- /dev/null
+++ b/admin/exportclases/htmlcolors.php
@@ -0,0 +1,208 @@
+<?php
+//============================================================+
+// File name : htmlcolors.php
+// Begin : 2002-04-09
+// Last Update : 2008-11-17
+// Version : 1.0.002
+// License : GNU LGPL (http://www.gnu.org/copyleft/lesser.html)
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2009 Nicola Asuni - Tecnick.com S.r.l.
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Lesser General Public License as published by
+// the Free Software Foundation, either version 2.1 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+//
+// See LICENSE.TXT file for more information.
+// ----------------------------------------------------------------------------
+//
+// Description : Array of WEB safe colors
+//
+// Author: Nicola Asuni
+//
+// (c) Copyright:
+// Nicola Asuni
+// Tecnick.com S.r.l.
+// Via della Pace, 11
+// 09044 Quartucciu (CA)
+// ITALY
+// www.tecnick.com
+// info@tecnick.com
+//============================================================+
+
+/**
+ * Array of WEB safe colors.
+ * @author Nicola Asuni
+ * @copyright 2004-2009 Nicola Asuni - Tecnick.com S.r.l (www.tecnick.com) Via Della Pace, 11 - 09044 - Quartucciu (CA) - ITALY - www.tecnick.com - info@tecnick.com
+ * @package com.tecnick.tcpdf
+ * @link http://www.tcpdf.org
+ * @license http://www.gnu.org/copyleft/lesser.html LGPL
+ * @since 2.9.000 (2008-03-26)
+*/
+
+/**
+ * Array of WEB safe colors
+ */
+global $webcolor;
+$webcolor = array (
+'aliceblue' => 'f0f8ff',
+'antiquewhite' => 'faebd7',
+'aqua' => '00ffff',
+'aquamarine' => '7fffd4',
+'azure' => 'f0ffff',
+'beige' => 'f5f5dc',
+'bisque' => 'ffe4c4',
+'black' => '000000',
+'blanchedalmond' => 'ffebcd',
+'blue' => '0000ff',
+'blueviolet' => '8a2be2',
+'brown' => 'a52a2a',
+'burlywood' => 'deb887',
+'cadetblue' => '5f9ea0',
+'chartreuse' => '7fff00',
+'chocolate' => 'd2691e',
+'coral' => 'ff7f50',
+'cornflowerblue' => '6495ed',
+'cornsilk' => 'fff8dc',
+'crimson' => 'dc143c',
+'cyan' => '00ffff',
+'darkblue' => '00008b',
+'darkcyan' => '008b8b',
+'darkgoldenrod' => 'b8860b',
+'darkgray' => 'a9a9a9',
+'darkgrey' => 'a9a9a9',
+'darkgreen' => '006400',
+'darkkhaki' => 'bdb76b',
+'darkmagenta' => '8b008b',
+'darkolivegreen' => '556b2f',
+'darkorange' => 'ff8c00',
+'darkorchid' => '9932cc',
+'darkred' => '8b0000',
+'darksalmon' => 'e9967a',
+'darkseagreen' => '8fbc8f',
+'darkslateblue' => '483d8b',
+'darkslategray' => '2f4f4f',
+'darkslategrey' => '2f4f4f',
+'darkturquoise' => '00ced1',
+'darkviolet' => '9400d3',
+'deeppink' => 'ff1493',
+'deepskyblue' => '00bfff',
+'dimgray' => '696969',
+'dimgrey' => '696969',
+'dodgerblue' => '1e90ff',
+'firebrick' => 'b22222',
+'floralwhite' => 'fffaf0',
+'forestgreen' => '228b22',
+'fuchsia' => 'ff00ff',
+'gainsboro' => 'dcdcdc',
+'ghostwhite' => 'f8f8ff',
+'gold' => 'ffd700',
+'goldenrod' => 'daa520',
+'gray' => '808080',
+'grey' => '808080',
+'green' => '008000',
+'greenyellow' => 'adff2f',
+'honeydew' => 'f0fff0',
+'hotpink' => 'ff69b4',
+'indianred ' => 'cd5c5c',
+'indigo ' => '4b0082',
+'ivory' => 'fffff0',
+'khaki' => 'f0e68c',
+'lavender' => 'e6e6fa',
+'lavenderblush' => 'fff0f5',
+'lawngreen' => '7cfc00',
+'lemonchiffon' => 'fffacd',
+'lightblue' => 'add8e6',
+'lightcoral' => 'f08080',
+'lightcyan' => 'e0ffff',
+'lightgoldenrodyellow' => 'fafad2',
+'lightgray' => 'd3d3d3',
+'lightgrey' => 'd3d3d3',
+'lightgreen' => '90ee90',
+'lightpink' => 'ffb6c1',
+'lightsalmon' => 'ffa07a',
+'lightseagreen' => '20b2aa',
+'lightskyblue' => '87cefa',
+'lightslategray' => '778899',
+'lightslategrey' => '778899',
+'lightsteelblue' => 'b0c4de',
+'lightyellow' => 'ffffe0',
+'lime' => '00ff00',
+'limegreen' => '32cd32',
+'linen' => 'faf0e6',
+'magenta' => 'ff00ff',
+'maroon' => '800000',
+'mediumaquamarine' => '66cdaa',
+'mediumblue' => '0000cd',
+'mediumorchid' => 'ba55d3',
+'mediumpurple' => '9370d8',
+'mediumseagreen' => '3cb371',
+'mediumslateblue' => '7b68ee',
+'mediumspringgreen' => '00fa9a',
+'mediumturquoise' => '48d1cc',
+'mediumvioletred' => 'c71585',
+'midnightblue' => '191970',
+'mintcream' => 'f5fffa',
+'mistyrose' => 'ffe4e1',
+'moccasin' => 'ffe4b5',
+'navajowhite' => 'ffdead',
+'navy' => '000080',
+'oldlace' => 'fdf5e6',
+'olive' => '808000',
+'olivedrab' => '6b8e23',
+'orange' => 'ffa500',
+'orangered' => 'ff4500',
+'orchid' => 'da70d6',
+'palegoldenrod' => 'eee8aa',
+'palegreen' => '98fb98',
+'paleturquoise' => 'afeeee',
+'palevioletred' => 'd87093',
+'papayawhip' => 'ffefd5',
+'peachpuff' => 'ffdab9',
+'peru' => 'cd853f',
+'pink' => 'ffc0cb',
+'plum' => 'dda0dd',
+'powderblue' => 'b0e0e6',
+'purple' => '800080',
+'red' => 'ff0000',
+'rosybrown' => 'bc8f8f',
+'royalblue' => '4169e1',
+'saddlebrown' => '8b4513',
+'salmon' => 'fa8072',
+'sandybrown' => 'f4a460',
+'seagreen' => '2e8b57',
+'seashell' => 'fff5ee',
+'sienna' => 'a0522d',
+'silver' => 'c0c0c0',
+'skyblue' => '87ceeb',
+'slateblue' => '6a5acd',
+'slategray' => '708090',
+'slategrey' => '708090',
+'snow' => 'fffafa',
+'springgreen' => '00ff7f',
+'steelblue' => '4682b4',
+'tan' => 'd2b48c',
+'teal' => '008080',
+'thistle' => 'd8bfd8',
+'tomato' => 'ff6347',
+'turquoise' => '40e0d0',
+'violet' => 'ee82ee',
+'wheat' => 'f5deb3',
+'white' => 'ffffff',
+'whitesmoke' => 'f5f5f5',
+'yellow' => 'ffff00',
+'yellowgreen' => '9acd32'
+);
+
+//============================================================+
+// END OF FILE
+//============================================================+
+?>
diff --git a/admin/exportclases/sumniktest.php b/admin/exportclases/sumniktest.php
new file mode 100644
index 0000000..6fefb51
--- /dev/null
+++ b/admin/exportclases/sumniktest.php
@@ -0,0 +1,16 @@
+<?
+mb_internal_encoding("UTF-8");
+ echo "Test Å¡umnikov";
+require_once('../survey/class.SurveyInfo.php');
+SurveyInfo::getInstance()->SurveyInit($_GET['anketa']);
+echo "<hr>";
+echo SurveyInfo::getInstance()->getSurveyTitle();
+echo "<hr>";
+
+$string = SurveyInfo::getInstance()->getSurveyTitle();
+$string = iconv ("UTF-8", "CP1250", $string);
+for($i = 0; $i < strlen($string); $i++)
+{
+ echo $string[$i]." -> ".ord($string[$i])."<br>";
+}
+?> \ No newline at end of file
diff --git a/admin/exportclases/unicode_data.php b/admin/exportclases/unicode_data.php
new file mode 100644
index 0000000..680ff67
--- /dev/null
+++ b/admin/exportclases/unicode_data.php
@@ -0,0 +1,18360 @@
+<?php
+//============================================================+
+// File name : unicode_data.php
+// Begin : 2008-01-01
+// Last Update : 2008-11-17
+// License : GNU LGPL (http://www.gnu.org/copyleft/lesser.html)
+// ----------------------------------------------------------------------------
+// Copyright (C) 2002-2009 Nicola Asuni - Tecnick.com S.r.l.
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Lesser General Public License as published by
+// the Free Software Foundation, either version 2.1 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+//
+// See LICENSE.TXT file for more information.
+// ----------------------------------------------------------------------------
+//
+// Description : Unicode Include file for TCPDF.
+//
+// Author: Nicola Asuni
+//
+// (c) Copyright:
+// Nicola Asuni
+// Tecnick.com s.r.l.
+// Via Della Pace, 11
+// 09044 Quartucciu (CA)
+// ITALY
+// www.tecnick.com
+// info@tecnick.com
+//============================================================+
+// THANKS TO
+// Efthimios Mavrogeorgiadis
+// Saleh AlMatrafe
+
+/**
+ * Unicode Include file for TCPDF.
+ * @author Nicola Asuni
+ * @copyright 2004-2009 Nicola Asuni - Tecnick.com S.r.l (www.tecnick.com) Via Della Pace, 11 - 09044 - Quartucciu (CA) - ITALY - www.tecnick.com - info@tecnick.com
+ * @package com.tecnick.tcpdf
+ * @link http://www.tcpdf.org
+ * @license http://www.gnu.org/copyleft/lesser.html LGPL
+ * @since 2.1.000 (2008-01-08)
+*/
+
+/**
+* Left-to-Right Mark
+*/
+define('K_LRM', 8206);
+/**
+* Right-to-Left Mark
+*/
+define('K_RLM', 8207);
+/**
+* Left-to-Right Embedding
+*/
+define('K_LRE', 8234);
+/**
+* Right-to-Left Embedding
+*/
+define('K_RLE', 8235);
+/**
+* Pop Directional Format
+*/
+define('K_PDF', 8236);
+/**
+* Left-to-Right Override
+*/
+define('K_LRO', 8237);
+/**
+* Right-to-Left Override
+*/
+define('K_RLO', 8238);
+
+/*
+ * Pattern to test RTL (Righ-To-Left) strings using regular expressions.
+ */
+define('K_RE_PATTERN_RTL', "/(
+ \xD6\xBE # R
+ | \xD7[\x80\x83\x86\x90-\xAA\xB0-\xB4] # R
+ | \xDF[\x80-\xAA\xB4\xB5\xBA] # R
+ | \xE2\x80\x8F # R
+ | \xEF\xAC[\x9D\x9F\xA0-\xA8\xAA-\xB6\xB8-\xBC\xBE] # R
+ | \xEF\xAD[\x80\x81\x83\x84\x86-\x8F] # R
+ | \xF0\x90\xA0[\x80-\x85\x88\x8A-\xB5\xB7\xB8\xBC\xBF] # R
+ | \xF0\x90\xA4[\x80-\x99] # R
+ | \xF0\x90\xA8[\x80\x90-\x93\x95-\x97\x99-\xB3] # R
+ | \xF0\x90\xA9[\x80-\x87\x90-\x98] # R
+ | \xE2\x80[\xAB\xAE] # RLE & RLO
+ )/x");
+
+/*
+ * Pattern to test Arabic strings using regular expressions.
+ * source: http://www.w3.org/International/questions/qa-forms-utf-8
+ */
+define("K_RE_PATTERN_ARABIC", "/(
+ \xD8[\x80-\x83\x8B\x8D\x9B\x9E\x9F\xA1-\xBA] # AL
+ | \xD9[\x80-\x8A\xAD-\xAF\xB1-\xBF] # AL
+ | \xDA[\x80-\xBF] # AL
+ | \xDB[\x80-\x95\x9D\xA5\xA6\xAE\xAF\xBA-\xBF] # AL
+ | \xDC[\x80-\x8D\x90\x92-\xAF] # AL
+ | \xDD[\x8D-\xAD] # AL
+ | \xDE[\x80-\xA5\xB1] # AL
+ | \xEF\xAD[\x90-\xBF] # AL
+ | \xEF\xAE[\x80-\xB1] # AL
+ | \xEF\xAF[\x93-\xBF] # AL
+ | \xEF[\xB0-\xB3][\x80-\xBF] # AL
+ | \xEF\xB4[\x80-\xBD] # AL
+ | \xEF\xB5[\x90-\xBF] # AL
+ | \xEF\xB6[\x80-\x8F\x92-\xBF] # AL
+ | \xEF\xB7[\x80-\x87\xB0-\xBC] # AL
+ | \xEF\xB9[\xB0-\xB4\xB6-\xBF] # AL
+ | \xEF\xBA[\x80-\xBF] # AL
+ | \xEF\xBB[\x80-\xBC] # AL
+ | \xD9[\xA0-\xA9\xAB\xAC] # AN
+ )/x");
+
+/**
+ * Array of unicode types
+ */
+global $unicode;
+$unicode = array(
+0=>'BN',
+1=>'BN',
+2=>'BN',
+3=>'BN',
+4=>'BN',
+5=>'BN',
+6=>'BN',
+7=>'BN',
+8=>'BN',
+9=>'S',
+10=>'B',
+11=>'S',
+12=>'WS',
+13=>'B',
+14=>'BN',
+15=>'BN',
+16=>'BN',
+17=>'BN',
+18=>'BN',
+19=>'BN',
+20=>'BN',
+21=>'BN',
+22=>'BN',
+23=>'BN',
+24=>'BN',
+25=>'BN',
+26=>'BN',
+27=>'BN',
+28=>'B',
+29=>'B',
+30=>'B',
+31=>'S',
+32=>'WS',
+33=>'ON',
+34=>'ON',
+35=>'ET',
+36=>'ET',
+37=>'ET',
+38=>'ON',
+39=>'ON',
+40=>'ON',
+41=>'ON',
+42=>'ON',
+43=>'ES',
+44=>'CS',
+45=>'ES',
+46=>'CS',
+47=>'CS',
+48=>'EN',
+49=>'EN',
+50=>'EN',
+51=>'EN',
+52=>'EN',
+53=>'EN',
+54=>'EN',
+55=>'EN',
+56=>'EN',
+57=>'EN',
+58=>'CS',
+59=>'ON',
+60=>'ON',
+61=>'ON',
+62=>'ON',
+63=>'ON',
+64=>'ON',
+65=>'L',
+66=>'L',
+67=>'L',
+68=>'L',
+69=>'L',
+70=>'L',
+71=>'L',
+72=>'L',
+73=>'L',
+74=>'L',
+75=>'L',
+76=>'L',
+77=>'L',
+78=>'L',
+79=>'L',
+80=>'L',
+81=>'L',
+82=>'L',
+83=>'L',
+84=>'L',
+85=>'L',
+86=>'L',
+87=>'L',
+88=>'L',
+89=>'L',
+90=>'L',
+91=>'ON',
+92=>'ON',
+93=>'ON',
+94=>'ON',
+95=>'ON',
+96=>'ON',
+97=>'L',
+98=>'L',
+99=>'L',
+100=>'L',
+101=>'L',
+102=>'L',
+103=>'L',
+104=>'L',
+105=>'L',
+106=>'L',
+107=>'L',
+108=>'L',
+109=>'L',
+110=>'L',
+111=>'L',
+112=>'L',
+113=>'L',
+114=>'L',
+115=>'L',
+116=>'L',
+117=>'L',
+118=>'L',
+119=>'L',
+120=>'L',
+121=>'L',
+122=>'L',
+123=>'ON',
+124=>'ON',
+125=>'ON',
+126=>'ON',
+127=>'BN',
+128=>'BN',
+129=>'BN',
+130=>'BN',
+131=>'BN',
+132=>'BN',
+133=>'B',
+134=>'BN',
+135=>'BN',
+136=>'BN',
+137=>'BN',
+138=>'BN',
+139=>'BN',
+140=>'BN',
+141=>'BN',
+142=>'BN',
+143=>'BN',
+144=>'BN',
+145=>'BN',
+146=>'BN',
+147=>'BN',
+148=>'BN',
+149=>'BN',
+150=>'BN',
+151=>'BN',
+152=>'BN',
+153=>'BN',
+154=>'BN',
+155=>'BN',
+156=>'BN',
+157=>'BN',
+158=>'BN',
+159=>'BN',
+160=>'CS',
+161=>'ON',
+162=>'ET',
+163=>'ET',
+164=>'ET',
+165=>'ET',
+166=>'ON',
+167=>'ON',
+168=>'ON',
+169=>'ON',
+170=>'L',
+171=>'ON',
+172=>'ON',
+173=>'BN',
+174=>'ON',
+175=>'ON',
+176=>'ET',
+177=>'ET',
+178=>'EN',
+179=>'EN',
+180=>'ON',
+181=>'L',
+182=>'ON',
+183=>'ON',
+184=>'ON',
+185=>'EN',
+186=>'L',
+187=>'ON',
+188=>'ON',
+189=>'ON',
+190=>'ON',
+191=>'ON',
+192=>'L',
+193=>'L',
+194=>'L',
+195=>'L',
+196=>'L',
+197=>'L',
+198=>'L',
+199=>'L',
+200=>'L',
+201=>'L',
+202=>'L',
+203=>'L',
+204=>'L',
+205=>'L',
+206=>'L',
+207=>'L',
+208=>'L',
+209=>'L',
+210=>'L',
+211=>'L',
+212=>'L',
+213=>'L',
+214=>'L',
+215=>'ON',
+216=>'L',
+217=>'L',
+218=>'L',
+219=>'L',
+220=>'L',
+221=>'L',
+222=>'L',
+223=>'L',
+224=>'L',
+225=>'L',
+226=>'L',
+227=>'L',
+228=>'L',
+229=>'L',
+230=>'L',
+231=>'L',
+232=>'L',
+233=>'L',
+234=>'L',
+235=>'L',
+236=>'L',
+237=>'L',
+238=>'L',
+239=>'L',
+240=>'L',
+241=>'L',
+242=>'L',
+243=>'L',
+244=>'L',
+245=>'L',
+246=>'L',
+247=>'ON',
+248=>'L',
+249=>'L',
+250=>'L',
+251=>'L',
+252=>'L',
+253=>'L',
+254=>'L',
+255=>'L',
+256=>'L',
+257=>'L',
+258=>'L',
+259=>'L',
+260=>'L',
+261=>'L',
+262=>'L',
+263=>'L',
+264=>'L',
+265=>'L',
+266=>'L',
+267=>'L',
+268=>'L',
+269=>'L',
+270=>'L',
+271=>'L',
+272=>'L',
+273=>'L',
+274=>'L',
+275=>'L',
+276=>'L',
+277=>'L',
+278=>'L',
+279=>'L',
+280=>'L',
+281=>'L',
+282=>'L',
+283=>'L',
+284=>'L',
+285=>'L',
+286=>'L',
+287=>'L',
+288=>'L',
+289=>'L',
+290=>'L',
+291=>'L',
+292=>'L',
+293=>'L',
+294=>'L',
+295=>'L',
+296=>'L',
+297=>'L',
+298=>'L',
+299=>'L',
+300=>'L',
+301=>'L',
+302=>'L',
+303=>'L',
+304=>'L',
+305=>'L',
+306=>'L',
+307=>'L',
+308=>'L',
+309=>'L',
+310=>'L',
+311=>'L',
+312=>'L',
+313=>'L',
+314=>'L',
+315=>'L',
+316=>'L',
+317=>'L',
+318=>'L',
+319=>'L',
+320=>'L',
+321=>'L',
+322=>'L',
+323=>'L',
+324=>'L',
+325=>'L',
+326=>'L',
+327=>'L',
+328=>'L',
+329=>'L',
+330=>'L',
+331=>'L',
+332=>'L',
+333=>'L',
+334=>'L',
+335=>'L',
+336=>'L',
+337=>'L',
+338=>'L',
+339=>'L',
+340=>'L',
+341=>'L',
+342=>'L',
+343=>'L',
+344=>'L',
+345=>'L',
+346=>'L',
+347=>'L',
+348=>'L',
+349=>'L',
+350=>'L',
+351=>'L',
+352=>'L',
+353=>'L',
+354=>'L',
+355=>'L',
+356=>'L',
+357=>'L',
+358=>'L',
+359=>'L',
+360=>'L',
+361=>'L',
+362=>'L',
+363=>'L',
+364=>'L',
+365=>'L',
+366=>'L',
+367=>'L',
+368=>'L',
+369=>'L',
+370=>'L',
+371=>'L',
+372=>'L',
+373=>'L',
+374=>'L',
+375=>'L',
+376=>'L',
+377=>'L',
+378=>'L',
+379=>'L',
+380=>'L',
+381=>'L',
+382=>'L',
+383=>'L',
+384=>'L',
+385=>'L',
+386=>'L',
+387=>'L',
+388=>'L',
+389=>'L',
+390=>'L',
+391=>'L',
+392=>'L',
+393=>'L',
+394=>'L',
+395=>'L',
+396=>'L',
+397=>'L',
+398=>'L',
+399=>'L',
+400=>'L',
+401=>'L',
+402=>'L',
+403=>'L',
+404=>'L',
+405=>'L',
+406=>'L',
+407=>'L',
+408=>'L',
+409=>'L',
+410=>'L',
+411=>'L',
+412=>'L',
+413=>'L',
+414=>'L',
+415=>'L',
+416=>'L',
+417=>'L',
+418=>'L',
+419=>'L',
+420=>'L',
+421=>'L',
+422=>'L',
+423=>'L',
+424=>'L',
+425=>'L',
+426=>'L',
+427=>'L',
+428=>'L',
+429=>'L',
+430=>'L',
+431=>'L',
+432=>'L',
+433=>'L',
+434=>'L',
+435=>'L',
+436=>'L',
+437=>'L',
+438=>'L',
+439=>'L',
+440=>'L',
+441=>'L',
+442=>'L',
+443=>'L',
+444=>'L',
+445=>'L',
+446=>'L',
+447=>'L',
+448=>'L',
+449=>'L',
+450=>'L',
+451=>'L',
+452=>'L',
+453=>'L',
+454=>'L',
+455=>'L',
+456=>'L',
+457=>'L',
+458=>'L',
+459=>'L',
+460=>'L',
+461=>'L',
+462=>'L',
+463=>'L',
+464=>'L',
+465=>'L',
+466=>'L',
+467=>'L',
+468=>'L',
+469=>'L',
+470=>'L',
+471=>'L',
+472=>'L',
+473=>'L',
+474=>'L',
+475=>'L',
+476=>'L',
+477=>'L',
+478=>'L',
+479=>'L',
+480=>'L',
+481=>'L',
+482=>'L',
+483=>'L',
+484=>'L',
+485=>'L',
+486=>'L',
+487=>'L',
+488=>'L',
+489=>'L',
+490=>'L',
+491=>'L',
+492=>'L',
+493=>'L',
+494=>'L',
+495=>'L',
+496=>'L',
+497=>'L',
+498=>'L',
+499=>'L',
+500=>'L',
+501=>'L',
+502=>'L',
+503=>'L',
+504=>'L',
+505=>'L',
+506=>'L',
+507=>'L',
+508=>'L',
+509=>'L',
+510=>'L',
+511=>'L',
+512=>'L',
+513=>'L',
+514=>'L',
+515=>'L',
+516=>'L',
+517=>'L',
+518=>'L',
+519=>'L',
+520=>'L',
+521=>'L',
+522=>'L',
+523=>'L',
+524=>'L',
+525=>'L',
+526=>'L',
+527=>'L',
+528=>'L',
+529=>'L',
+530=>'L',
+531=>'L',
+532=>'L',
+533=>'L',
+534=>'L',
+535=>'L',
+536=>'L',
+537=>'L',
+538=>'L',
+539=>'L',
+540=>'L',
+541=>'L',
+542=>'L',
+543=>'L',
+544=>'L',
+545=>'L',
+546=>'L',
+547=>'L',
+548=>'L',
+549=>'L',
+550=>'L',
+551=>'L',
+552=>'L',
+553=>'L',
+554=>'L',
+555=>'L',
+556=>'L',
+557=>'L',
+558=>'L',
+559=>'L',
+560=>'L',
+561=>'L',
+562=>'L',
+563=>'L',
+564=>'L',
+565=>'L',
+566=>'L',
+567=>'L',
+568=>'L',
+569=>'L',
+570=>'L',
+571=>'L',
+572=>'L',
+573=>'L',
+574=>'L',
+575=>'L',
+576=>'L',
+577=>'L',
+578=>'L',
+579=>'L',
+580=>'L',
+581=>'L',
+582=>'L',
+583=>'L',
+584=>'L',
+585=>'L',
+586=>'L',
+587=>'L',
+588=>'L',
+589=>'L',
+590=>'L',
+591=>'L',
+592=>'L',
+593=>'L',
+594=>'L',
+595=>'L',
+596=>'L',
+597=>'L',
+598=>'L',
+599=>'L',
+600=>'L',
+601=>'L',
+602=>'L',
+603=>'L',
+604=>'L',
+605=>'L',
+606=>'L',
+607=>'L',
+608=>'L',
+609=>'L',
+610=>'L',
+611=>'L',
+612=>'L',
+613=>'L',
+614=>'L',
+615=>'L',
+616=>'L',
+617=>'L',
+618=>'L',
+619=>'L',
+620=>'L',
+621=>'L',
+622=>'L',
+623=>'L',
+624=>'L',
+625=>'L',
+626=>'L',
+627=>'L',
+628=>'L',
+629=>'L',
+630=>'L',
+631=>'L',
+632=>'L',
+633=>'L',
+634=>'L',
+635=>'L',
+636=>'L',
+637=>'L',
+638=>'L',
+639=>'L',
+640=>'L',
+641=>'L',
+642=>'L',
+643=>'L',
+644=>'L',
+645=>'L',
+646=>'L',
+647=>'L',
+648=>'L',
+649=>'L',
+650=>'L',
+651=>'L',
+652=>'L',
+653=>'L',
+654=>'L',
+655=>'L',
+656=>'L',
+657=>'L',
+658=>'L',
+659=>'L',
+660=>'L',
+661=>'L',
+662=>'L',
+663=>'L',
+664=>'L',
+665=>'L',
+666=>'L',
+667=>'L',
+668=>'L',
+669=>'L',
+670=>'L',
+671=>'L',
+672=>'L',
+673=>'L',
+674=>'L',
+675=>'L',
+676=>'L',
+677=>'L',
+678=>'L',
+679=>'L',
+680=>'L',
+681=>'L',
+682=>'L',
+683=>'L',
+684=>'L',
+685=>'L',
+686=>'L',
+687=>'L',
+688=>'L',
+689=>'L',
+690=>'L',
+691=>'L',
+692=>'L',
+693=>'L',
+694=>'L',
+695=>'L',
+696=>'L',
+697=>'ON',
+698=>'ON',
+699=>'L',
+700=>'L',
+701=>'L',
+702=>'L',
+703=>'L',
+704=>'L',
+705=>'L',
+706=>'ON',
+707=>'ON',
+708=>'ON',
+709=>'ON',
+710=>'ON',
+711=>'ON',
+712=>'ON',
+713=>'ON',
+714=>'ON',
+715=>'ON',
+716=>'ON',
+717=>'ON',
+718=>'ON',
+719=>'ON',
+720=>'L',
+721=>'L',
+722=>'ON',
+723=>'ON',
+724=>'ON',
+725=>'ON',
+726=>'ON',
+727=>'ON',
+728=>'ON',
+729=>'ON',
+730=>'ON',
+731=>'ON',
+732=>'ON',
+733=>'ON',
+734=>'ON',
+735=>'ON',
+736=>'L',
+737=>'L',
+738=>'L',
+739=>'L',
+740=>'L',
+741=>'ON',
+742=>'ON',
+743=>'ON',
+744=>'ON',
+745=>'ON',
+746=>'ON',
+747=>'ON',
+748=>'ON',
+749=>'ON',
+750=>'L',
+751=>'ON',
+752=>'ON',
+753=>'ON',
+754=>'ON',
+755=>'ON',
+756=>'ON',
+757=>'ON',
+758=>'ON',
+759=>'ON',
+760=>'ON',
+761=>'ON',
+762=>'ON',
+763=>'ON',
+764=>'ON',
+765=>'ON',
+766=>'ON',
+767=>'ON',
+768=>'NSM',
+769=>'NSM',
+770=>'NSM',
+771=>'NSM',
+772=>'NSM',
+773=>'NSM',
+774=>'NSM',
+775=>'NSM',
+776=>'NSM',
+777=>'NSM',
+778=>'NSM',
+779=>'NSM',
+780=>'NSM',
+781=>'NSM',
+782=>'NSM',
+783=>'NSM',
+784=>'NSM',
+785=>'NSM',
+786=>'NSM',
+787=>'NSM',
+788=>'NSM',
+789=>'NSM',
+790=>'NSM',
+791=>'NSM',
+792=>'NSM',
+793=>'NSM',
+794=>'NSM',
+795=>'NSM',
+796=>'NSM',
+797=>'NSM',
+798=>'NSM',
+799=>'NSM',
+800=>'NSM',
+801=>'NSM',
+802=>'NSM',
+803=>'NSM',
+804=>'NSM',
+805=>'NSM',
+806=>'NSM',
+807=>'NSM',
+808=>'NSM',
+809=>'NSM',
+810=>'NSM',
+811=>'NSM',
+812=>'NSM',
+813=>'NSM',
+814=>'NSM',
+815=>'NSM',
+816=>'NSM',
+817=>'NSM',
+818=>'NSM',
+819=>'NSM',
+820=>'NSM',
+821=>'NSM',
+822=>'NSM',
+823=>'NSM',
+824=>'NSM',
+825=>'NSM',
+826=>'NSM',
+827=>'NSM',
+828=>'NSM',
+829=>'NSM',
+830=>'NSM',
+831=>'NSM',
+832=>'NSM',
+833=>'NSM',
+834=>'NSM',
+835=>'NSM',
+836=>'NSM',
+837=>'NSM',
+838=>'NSM',
+839=>'NSM',
+840=>'NSM',
+841=>'NSM',
+842=>'NSM',
+843=>'NSM',
+844=>'NSM',
+845=>'NSM',
+846=>'NSM',
+847=>'NSM',
+848=>'NSM',
+849=>'NSM',
+850=>'NSM',
+851=>'NSM',
+852=>'NSM',
+853=>'NSM',
+854=>'NSM',
+855=>'NSM',
+856=>'NSM',
+857=>'NSM',
+858=>'NSM',
+859=>'NSM',
+860=>'NSM',
+861=>'NSM',
+862=>'NSM',
+863=>'NSM',
+864=>'NSM',
+865=>'NSM',
+866=>'NSM',
+867=>'NSM',
+868=>'NSM',
+869=>'NSM',
+870=>'NSM',
+871=>'NSM',
+872=>'NSM',
+873=>'NSM',
+874=>'NSM',
+875=>'NSM',
+876=>'NSM',
+877=>'NSM',
+878=>'NSM',
+879=>'NSM',
+884=>'ON',
+885=>'ON',
+890=>'L',
+891=>'L',
+892=>'L',
+893=>'L',
+894=>'ON',
+900=>'ON',
+901=>'ON',
+902=>'L',
+903=>'ON',
+904=>'L',
+905=>'L',
+906=>'L',
+908=>'L',
+910=>'L',
+911=>'L',
+912=>'L',
+913=>'L',
+914=>'L',
+915=>'L',
+916=>'L',
+917=>'L',
+918=>'L',
+919=>'L',
+920=>'L',
+921=>'L',
+922=>'L',
+923=>'L',
+924=>'L',
+925=>'L',
+926=>'L',
+927=>'L',
+928=>'L',
+929=>'L',
+931=>'L',
+932=>'L',
+933=>'L',
+934=>'L',
+935=>'L',
+936=>'L',
+937=>'L',
+938=>'L',
+939=>'L',
+940=>'L',
+941=>'L',
+942=>'L',
+943=>'L',
+944=>'L',
+945=>'L',
+946=>'L',
+947=>'L',
+948=>'L',
+949=>'L',
+950=>'L',
+951=>'L',
+952=>'L',
+953=>'L',
+954=>'L',
+955=>'L',
+956=>'L',
+957=>'L',
+958=>'L',
+959=>'L',
+960=>'L',
+961=>'L',
+962=>'L',
+963=>'L',
+964=>'L',
+965=>'L',
+966=>'L',
+967=>'L',
+968=>'L',
+969=>'L',
+970=>'L',
+971=>'L',
+972=>'L',
+973=>'L',
+974=>'L',
+976=>'L',
+977=>'L',
+978=>'L',
+979=>'L',
+980=>'L',
+981=>'L',
+982=>'L',
+983=>'L',
+984=>'L',
+985=>'L',
+986=>'L',
+987=>'L',
+988=>'L',
+989=>'L',
+990=>'L',
+991=>'L',
+992=>'L',
+993=>'L',
+994=>'L',
+995=>'L',
+996=>'L',
+997=>'L',
+998=>'L',
+999=>'L',
+1000=>'L',
+1001=>'L',
+1002=>'L',
+1003=>'L',
+1004=>'L',
+1005=>'L',
+1006=>'L',
+1007=>'L',
+1008=>'L',
+1009=>'L',
+1010=>'L',
+1011=>'L',
+1012=>'L',
+1013=>'L',
+1014=>'ON',
+1015=>'L',
+1016=>'L',
+1017=>'L',
+1018=>'L',
+1019=>'L',
+1020=>'L',
+1021=>'L',
+1022=>'L',
+1023=>'L',
+1024=>'L',
+1025=>'L',
+1026=>'L',
+1027=>'L',
+1028=>'L',
+1029=>'L',
+1030=>'L',
+1031=>'L',
+1032=>'L',
+1033=>'L',
+1034=>'L',
+1035=>'L',
+1036=>'L',
+1037=>'L',
+1038=>'L',
+1039=>'L',
+1040=>'L',
+1041=>'L',
+1042=>'L',
+1043=>'L',
+1044=>'L',
+1045=>'L',
+1046=>'L',
+1047=>'L',
+1048=>'L',
+1049=>'L',
+1050=>'L',
+1051=>'L',
+1052=>'L',
+1053=>'L',
+1054=>'L',
+1055=>'L',
+1056=>'L',
+1057=>'L',
+1058=>'L',
+1059=>'L',
+1060=>'L',
+1061=>'L',
+1062=>'L',
+1063=>'L',
+1064=>'L',
+1065=>'L',
+1066=>'L',
+1067=>'L',
+1068=>'L',
+1069=>'L',
+1070=>'L',
+1071=>'L',
+1072=>'L',
+1073=>'L',
+1074=>'L',
+1075=>'L',
+1076=>'L',
+1077=>'L',
+1078=>'L',
+1079=>'L',
+1080=>'L',
+1081=>'L',
+1082=>'L',
+1083=>'L',
+1084=>'L',
+1085=>'L',
+1086=>'L',
+1087=>'L',
+1088=>'L',
+1089=>'L',
+1090=>'L',
+1091=>'L',
+1092=>'L',
+1093=>'L',
+1094=>'L',
+1095=>'L',
+1096=>'L',
+1097=>'L',
+1098=>'L',
+1099=>'L',
+1100=>'L',
+1101=>'L',
+1102=>'L',
+1103=>'L',
+1104=>'L',
+1105=>'L',
+1106=>'L',
+1107=>'L',
+1108=>'L',
+1109=>'L',
+1110=>'L',
+1111=>'L',
+1112=>'L',
+1113=>'L',
+1114=>'L',
+1115=>'L',
+1116=>'L',
+1117=>'L',
+1118=>'L',
+1119=>'L',
+1120=>'L',
+1121=>'L',
+1122=>'L',
+1123=>'L',
+1124=>'L',
+1125=>'L',
+1126=>'L',
+1127=>'L',
+1128=>'L',
+1129=>'L',
+1130=>'L',
+1131=>'L',
+1132=>'L',
+1133=>'L',
+1134=>'L',
+1135=>'L',
+1136=>'L',
+1137=>'L',
+1138=>'L',
+1139=>'L',
+1140=>'L',
+1141=>'L',
+1142=>'L',
+1143=>'L',
+1144=>'L',
+1145=>'L',
+1146=>'L',
+1147=>'L',
+1148=>'L',
+1149=>'L',
+1150=>'L',
+1151=>'L',
+1152=>'L',
+1153=>'L',
+1154=>'L',
+1155=>'NSM',
+1156=>'NSM',
+1157=>'NSM',
+1158=>'NSM',
+1160=>'NSM',
+1161=>'NSM',
+1162=>'L',
+1163=>'L',
+1164=>'L',
+1165=>'L',
+1166=>'L',
+1167=>'L',
+1168=>'L',
+1169=>'L',
+1170=>'L',
+1171=>'L',
+1172=>'L',
+1173=>'L',
+1174=>'L',
+1175=>'L',
+1176=>'L',
+1177=>'L',
+1178=>'L',
+1179=>'L',
+1180=>'L',
+1181=>'L',
+1182=>'L',
+1183=>'L',
+1184=>'L',
+1185=>'L',
+1186=>'L',
+1187=>'L',
+1188=>'L',
+1189=>'L',
+1190=>'L',
+1191=>'L',
+1192=>'L',
+1193=>'L',
+1194=>'L',
+1195=>'L',
+1196=>'L',
+1197=>'L',
+1198=>'L',
+1199=>'L',
+1200=>'L',
+1201=>'L',
+1202=>'L',
+1203=>'L',
+1204=>'L',
+1205=>'L',
+1206=>'L',
+1207=>'L',
+1208=>'L',
+1209=>'L',
+1210=>'L',
+1211=>'L',
+1212=>'L',
+1213=>'L',
+1214=>'L',
+1215=>'L',
+1216=>'L',
+1217=>'L',
+1218=>'L',
+1219=>'L',
+1220=>'L',
+1221=>'L',
+1222=>'L',
+1223=>'L',
+1224=>'L',
+1225=>'L',
+1226=>'L',
+1227=>'L',
+1228=>'L',
+1229=>'L',
+1230=>'L',
+1231=>'L',
+1232=>'L',
+1233=>'L',
+1234=>'L',
+1235=>'L',
+1236=>'L',
+1237=>'L',
+1238=>'L',
+1239=>'L',
+1240=>'L',
+1241=>'L',
+1242=>'L',
+1243=>'L',
+1244=>'L',
+1245=>'L',
+1246=>'L',
+1247=>'L',
+1248=>'L',
+1249=>'L',
+1250=>'L',
+1251=>'L',
+1252=>'L',
+1253=>'L',
+1254=>'L',
+1255=>'L',
+1256=>'L',
+1257=>'L',
+1258=>'L',
+1259=>'L',
+1260=>'L',
+1261=>'L',
+1262=>'L',
+1263=>'L',
+1264=>'L',
+1265=>'L',
+1266=>'L',
+1267=>'L',
+1268=>'L',
+1269=>'L',
+1270=>'L',
+1271=>'L',
+1272=>'L',
+1273=>'L',
+1274=>'L',
+1275=>'L',
+1276=>'L',
+1277=>'L',
+1278=>'L',
+1279=>'L',
+1280=>'L',
+1281=>'L',
+1282=>'L',
+1283=>'L',
+1284=>'L',
+1285=>'L',
+1286=>'L',
+1287=>'L',
+1288=>'L',
+1289=>'L',
+1290=>'L',
+1291=>'L',
+1292=>'L',
+1293=>'L',
+1294=>'L',
+1295=>'L',
+1296=>'L',
+1297=>'L',
+1298=>'L',
+1299=>'L',
+1329=>'L',
+1330=>'L',
+1331=>'L',
+1332=>'L',
+1333=>'L',
+1334=>'L',
+1335=>'L',
+1336=>'L',
+1337=>'L',
+1338=>'L',
+1339=>'L',
+1340=>'L',
+1341=>'L',
+1342=>'L',
+1343=>'L',
+1344=>'L',
+1345=>'L',
+1346=>'L',
+1347=>'L',
+1348=>'L',
+1349=>'L',
+1350=>'L',
+1351=>'L',
+1352=>'L',
+1353=>'L',
+1354=>'L',
+1355=>'L',
+1356=>'L',
+1357=>'L',
+1358=>'L',
+1359=>'L',
+1360=>'L',
+1361=>'L',
+1362=>'L',
+1363=>'L',
+1364=>'L',
+1365=>'L',
+1366=>'L',
+1369=>'L',
+1370=>'L',
+1371=>'L',
+1372=>'L',
+1373=>'L',
+1374=>'L',
+1375=>'L',
+1377=>'L',
+1378=>'L',
+1379=>'L',
+1380=>'L',
+1381=>'L',
+1382=>'L',
+1383=>'L',
+1384=>'L',
+1385=>'L',
+1386=>'L',
+1387=>'L',
+1388=>'L',
+1389=>'L',
+1390=>'L',
+1391=>'L',
+1392=>'L',
+1393=>'L',
+1394=>'L',
+1395=>'L',
+1396=>'L',
+1397=>'L',
+1398=>'L',
+1399=>'L',
+1400=>'L',
+1401=>'L',
+1402=>'L',
+1403=>'L',
+1404=>'L',
+1405=>'L',
+1406=>'L',
+1407=>'L',
+1408=>'L',
+1409=>'L',
+1410=>'L',
+1411=>'L',
+1412=>'L',
+1413=>'L',
+1414=>'L',
+1415=>'L',
+1417=>'L',
+1418=>'ON',
+1425=>'NSM',
+1426=>'NSM',
+1427=>'NSM',
+1428=>'NSM',
+1429=>'NSM',
+1430=>'NSM',
+1431=>'NSM',
+1432=>'NSM',
+1433=>'NSM',
+1434=>'NSM',
+1435=>'NSM',
+1436=>'NSM',
+1437=>'NSM',
+1438=>'NSM',
+1439=>'NSM',
+1440=>'NSM',
+1441=>'NSM',
+1442=>'NSM',
+1443=>'NSM',
+1444=>'NSM',
+1445=>'NSM',
+1446=>'NSM',
+1447=>'NSM',
+1448=>'NSM',
+1449=>'NSM',
+1450=>'NSM',
+1451=>'NSM',
+1452=>'NSM',
+1453=>'NSM',
+1454=>'NSM',
+1455=>'NSM',
+1456=>'NSM',
+1457=>'NSM',
+1458=>'NSM',
+1459=>'NSM',
+1460=>'NSM',
+1461=>'NSM',
+1462=>'NSM',
+1463=>'NSM',
+1464=>'NSM',
+1465=>'NSM',
+1466=>'NSM',
+1467=>'NSM',
+1468=>'NSM',
+1469=>'NSM',
+1470=>'R',
+1471=>'NSM',
+1472=>'R',
+1473=>'NSM',
+1474=>'NSM',
+1475=>'R',
+1476=>'NSM',
+1477=>'NSM',
+1478=>'R',
+1479=>'NSM',
+1488=>'R',
+1489=>'R',
+1490=>'R',
+1491=>'R',
+1492=>'R',
+1493=>'R',
+1494=>'R',
+1495=>'R',
+1496=>'R',
+1497=>'R',
+1498=>'R',
+1499=>'R',
+1500=>'R',
+1501=>'R',
+1502=>'R',
+1503=>'R',
+1504=>'R',
+1505=>'R',
+1506=>'R',
+1507=>'R',
+1508=>'R',
+1509=>'R',
+1510=>'R',
+1511=>'R',
+1512=>'R',
+1513=>'R',
+1514=>'R',
+1520=>'R',
+1521=>'R',
+1522=>'R',
+1523=>'R',
+1524=>'R',
+1536=>'AL',
+1537=>'AL',
+1538=>'AL',
+1539=>'AL',
+1547=>'AL',
+1548=>'CS',
+1549=>'AL',
+1550=>'ON',
+1551=>'ON',
+1552=>'NSM',
+1553=>'NSM',
+1554=>'NSM',
+1555=>'NSM',
+1556=>'NSM',
+1557=>'NSM',
+1563=>'AL',
+1566=>'AL',
+1567=>'AL',
+1569=>'AL',
+1570=>'AL',
+1571=>'AL',
+1572=>'AL',
+1573=>'AL',
+1574=>'AL',
+1575=>'AL',
+1576=>'AL',
+1577=>'AL',
+1578=>'AL',
+1579=>'AL',
+1580=>'AL',
+1581=>'AL',
+1582=>'AL',
+1583=>'AL',
+1584=>'AL',
+1585=>'AL',
+1586=>'AL',
+1587=>'AL',
+1588=>'AL',
+1589=>'AL',
+1590=>'AL',
+1591=>'AL',
+1592=>'AL',
+1593=>'AL',
+1594=>'AL',
+1600=>'AL',
+1601=>'AL',
+1602=>'AL',
+1603=>'AL',
+1604=>'AL',
+1605=>'AL',
+1606=>'AL',
+1607=>'AL',
+1608=>'AL',
+1609=>'AL',
+1610=>'AL',
+1611=>'NSM',
+1612=>'NSM',
+1613=>'NSM',
+1614=>'NSM',
+1615=>'NSM',
+1616=>'NSM',
+1617=>'NSM',
+1618=>'NSM',
+1619=>'NSM',
+1620=>'NSM',
+1621=>'NSM',
+1622=>'NSM',
+1623=>'NSM',
+1624=>'NSM',
+1625=>'NSM',
+1626=>'NSM',
+1627=>'NSM',
+1628=>'NSM',
+1629=>'NSM',
+1630=>'NSM',
+1632=>'AN',
+1633=>'AN',
+1634=>'AN',
+1635=>'AN',
+1636=>'AN',
+1637=>'AN',
+1638=>'AN',
+1639=>'AN',
+1640=>'AN',
+1641=>'AN',
+1642=>'ET',
+1643=>'AN',
+1644=>'AN',
+1645=>'AL',
+1646=>'AL',
+1647=>'AL',
+1648=>'NSM',
+1649=>'AL',
+1650=>'AL',
+1651=>'AL',
+1652=>'AL',
+1653=>'AL',
+1654=>'AL',
+1655=>'AL',
+1656=>'AL',
+1657=>'AL',
+1658=>'AL',
+1659=>'AL',
+1660=>'AL',
+1661=>'AL',
+1662=>'AL',
+1663=>'AL',
+1664=>'AL',
+1665=>'AL',
+1666=>'AL',
+1667=>'AL',
+1668=>'AL',
+1669=>'AL',
+1670=>'AL',
+1671=>'AL',
+1672=>'AL',
+1673=>'AL',
+1674=>'AL',
+1675=>'AL',
+1676=>'AL',
+1677=>'AL',
+1678=>'AL',
+1679=>'AL',
+1680=>'AL',
+1681=>'AL',
+1682=>'AL',
+1683=>'AL',
+1684=>'AL',
+1685=>'AL',
+1686=>'AL',
+1687=>'AL',
+1688=>'AL',
+1689=>'AL',
+1690=>'AL',
+1691=>'AL',
+1692=>'AL',
+1693=>'AL',
+1694=>'AL',
+1695=>'AL',
+1696=>'AL',
+1697=>'AL',
+1698=>'AL',
+1699=>'AL',
+1700=>'AL',
+1701=>'AL',
+1702=>'AL',
+1703=>'AL',
+1704=>'AL',
+1705=>'AL',
+1706=>'AL',
+1707=>'AL',
+1708=>'AL',
+1709=>'AL',
+1710=>'AL',
+1711=>'AL',
+1712=>'AL',
+1713=>'AL',
+1714=>'AL',
+1715=>'AL',
+1716=>'AL',
+1717=>'AL',
+1718=>'AL',
+1719=>'AL',
+1720=>'AL',
+1721=>'AL',
+1722=>'AL',
+1723=>'AL',
+1724=>'AL',
+1725=>'AL',
+1726=>'AL',
+1727=>'AL',
+1728=>'AL',
+1729=>'AL',
+1730=>'AL',
+1731=>'AL',
+1732=>'AL',
+1733=>'AL',
+1734=>'AL',
+1735=>'AL',
+1736=>'AL',
+1737=>'AL',
+1738=>'AL',
+1739=>'AL',
+1740=>'AL',
+1741=>'AL',
+1742=>'AL',
+1743=>'AL',
+1744=>'AL',
+1745=>'AL',
+1746=>'AL',
+1747=>'AL',
+1748=>'AL',
+1749=>'AL',
+1750=>'NSM',
+1751=>'NSM',
+1752=>'NSM',
+1753=>'NSM',
+1754=>'NSM',
+1755=>'NSM',
+1756=>'NSM',
+1757=>'AL',
+1758=>'NSM',
+1759=>'NSM',
+1760=>'NSM',
+1761=>'NSM',
+1762=>'NSM',
+1763=>'NSM',
+1764=>'NSM',
+1765=>'AL',
+1766=>'AL',
+1767=>'NSM',
+1768=>'NSM',
+1769=>'ON',
+1770=>'NSM',
+1771=>'NSM',
+1772=>'NSM',
+1773=>'NSM',
+1774=>'AL',
+1775=>'AL',
+1776=>'EN',
+1777=>'EN',
+1778=>'EN',
+1779=>'EN',
+1780=>'EN',
+1781=>'EN',
+1782=>'EN',
+1783=>'EN',
+1784=>'EN',
+1785=>'EN',
+1786=>'AL',
+1787=>'AL',
+1788=>'AL',
+1789=>'AL',
+1790=>'AL',
+1791=>'AL',
+1792=>'AL',
+1793=>'AL',
+1794=>'AL',
+1795=>'AL',
+1796=>'AL',
+1797=>'AL',
+1798=>'AL',
+1799=>'AL',
+1800=>'AL',
+1801=>'AL',
+1802=>'AL',
+1803=>'AL',
+1804=>'AL',
+1805=>'AL',
+1807=>'BN',
+1808=>'AL',
+1809=>'NSM',
+1810=>'AL',
+1811=>'AL',
+1812=>'AL',
+1813=>'AL',
+1814=>'AL',
+1815=>'AL',
+1816=>'AL',
+1817=>'AL',
+1818=>'AL',
+1819=>'AL',
+1820=>'AL',
+1821=>'AL',
+1822=>'AL',
+1823=>'AL',
+1824=>'AL',
+1825=>'AL',
+1826=>'AL',
+1827=>'AL',
+1828=>'AL',
+1829=>'AL',
+1830=>'AL',
+1831=>'AL',
+1832=>'AL',
+1833=>'AL',
+1834=>'AL',
+1835=>'AL',
+1836=>'AL',
+1837=>'AL',
+1838=>'AL',
+1839=>'AL',
+1840=>'NSM',
+1841=>'NSM',
+1842=>'NSM',
+1843=>'NSM',
+1844=>'NSM',
+1845=>'NSM',
+1846=>'NSM',
+1847=>'NSM',
+1848=>'NSM',
+1849=>'NSM',
+1850=>'NSM',
+1851=>'NSM',
+1852=>'NSM',
+1853=>'NSM',
+1854=>'NSM',
+1855=>'NSM',
+1856=>'NSM',
+1857=>'NSM',
+1858=>'NSM',
+1859=>'NSM',
+1860=>'NSM',
+1861=>'NSM',
+1862=>'NSM',
+1863=>'NSM',
+1864=>'NSM',
+1865=>'NSM',
+1866=>'NSM',
+1869=>'AL',
+1870=>'AL',
+1871=>'AL',
+1872=>'AL',
+1873=>'AL',
+1874=>'AL',
+1875=>'AL',
+1876=>'AL',
+1877=>'AL',
+1878=>'AL',
+1879=>'AL',
+1880=>'AL',
+1881=>'AL',
+1882=>'AL',
+1883=>'AL',
+1884=>'AL',
+1885=>'AL',
+1886=>'AL',
+1887=>'AL',
+1888=>'AL',
+1889=>'AL',
+1890=>'AL',
+1891=>'AL',
+1892=>'AL',
+1893=>'AL',
+1894=>'AL',
+1895=>'AL',
+1896=>'AL',
+1897=>'AL',
+1898=>'AL',
+1899=>'AL',
+1900=>'AL',
+1901=>'AL',
+1920=>'AL',
+1921=>'AL',
+1922=>'AL',
+1923=>'AL',
+1924=>'AL',
+1925=>'AL',
+1926=>'AL',
+1927=>'AL',
+1928=>'AL',
+1929=>'AL',
+1930=>'AL',
+1931=>'AL',
+1932=>'AL',
+1933=>'AL',
+1934=>'AL',
+1935=>'AL',
+1936=>'AL',
+1937=>'AL',
+1938=>'AL',
+1939=>'AL',
+1940=>'AL',
+1941=>'AL',
+1942=>'AL',
+1943=>'AL',
+1944=>'AL',
+1945=>'AL',
+1946=>'AL',
+1947=>'AL',
+1948=>'AL',
+1949=>'AL',
+1950=>'AL',
+1951=>'AL',
+1952=>'AL',
+1953=>'AL',
+1954=>'AL',
+1955=>'AL',
+1956=>'AL',
+1957=>'AL',
+1958=>'NSM',
+1959=>'NSM',
+1960=>'NSM',
+1961=>'NSM',
+1962=>'NSM',
+1963=>'NSM',
+1964=>'NSM',
+1965=>'NSM',
+1966=>'NSM',
+1967=>'NSM',
+1968=>'NSM',
+1969=>'AL',
+1984=>'R',
+1985=>'R',
+1986=>'R',
+1987=>'R',
+1988=>'R',
+1989=>'R',
+1990=>'R',
+1991=>'R',
+1992=>'R',
+1993=>'R',
+1994=>'R',
+1995=>'R',
+1996=>'R',
+1997=>'R',
+1998=>'R',
+1999=>'R',
+2000=>'R',
+2001=>'R',
+2002=>'R',
+2003=>'R',
+2004=>'R',
+2005=>'R',
+2006=>'R',
+2007=>'R',
+2008=>'R',
+2009=>'R',
+2010=>'R',
+2011=>'R',
+2012=>'R',
+2013=>'R',
+2014=>'R',
+2015=>'R',
+2016=>'R',
+2017=>'R',
+2018=>'R',
+2019=>'R',
+2020=>'R',
+2021=>'R',
+2022=>'R',
+2023=>'R',
+2024=>'R',
+2025=>'R',
+2026=>'R',
+2027=>'NSM',
+2028=>'NSM',
+2029=>'NSM',
+2030=>'NSM',
+2031=>'NSM',
+2032=>'NSM',
+2033=>'NSM',
+2034=>'NSM',
+2035=>'NSM',
+2036=>'R',
+2037=>'R',
+2038=>'ON',
+2039=>'ON',
+2040=>'ON',
+2041=>'ON',
+2042=>'R',
+2305=>'NSM',
+2306=>'NSM',
+2307=>'L',
+2308=>'L',
+2309=>'L',
+2310=>'L',
+2311=>'L',
+2312=>'L',
+2313=>'L',
+2314=>'L',
+2315=>'L',
+2316=>'L',
+2317=>'L',
+2318=>'L',
+2319=>'L',
+2320=>'L',
+2321=>'L',
+2322=>'L',
+2323=>'L',
+2324=>'L',
+2325=>'L',
+2326=>'L',
+2327=>'L',
+2328=>'L',
+2329=>'L',
+2330=>'L',
+2331=>'L',
+2332=>'L',
+2333=>'L',
+2334=>'L',
+2335=>'L',
+2336=>'L',
+2337=>'L',
+2338=>'L',
+2339=>'L',
+2340=>'L',
+2341=>'L',
+2342=>'L',
+2343=>'L',
+2344=>'L',
+2345=>'L',
+2346=>'L',
+2347=>'L',
+2348=>'L',
+2349=>'L',
+2350=>'L',
+2351=>'L',
+2352=>'L',
+2353=>'L',
+2354=>'L',
+2355=>'L',
+2356=>'L',
+2357=>'L',
+2358=>'L',
+2359=>'L',
+2360=>'L',
+2361=>'L',
+2364=>'NSM',
+2365=>'L',
+2366=>'L',
+2367=>'L',
+2368=>'L',
+2369=>'NSM',
+2370=>'NSM',
+2371=>'NSM',
+2372=>'NSM',
+2373=>'NSM',
+2374=>'NSM',
+2375=>'NSM',
+2376=>'NSM',
+2377=>'L',
+2378=>'L',
+2379=>'L',
+2380=>'L',
+2381=>'NSM',
+2384=>'L',
+2385=>'NSM',
+2386=>'NSM',
+2387=>'NSM',
+2388=>'NSM',
+2392=>'L',
+2393=>'L',
+2394=>'L',
+2395=>'L',
+2396=>'L',
+2397=>'L',
+2398=>'L',
+2399=>'L',
+2400=>'L',
+2401=>'L',
+2402=>'NSM',
+2403=>'NSM',
+2404=>'L',
+2405=>'L',
+2406=>'L',
+2407=>'L',
+2408=>'L',
+2409=>'L',
+2410=>'L',
+2411=>'L',
+2412=>'L',
+2413=>'L',
+2414=>'L',
+2415=>'L',
+2416=>'L',
+2427=>'L',
+2428=>'L',
+2429=>'L',
+2430=>'L',
+2431=>'L',
+2433=>'NSM',
+2434=>'L',
+2435=>'L',
+2437=>'L',
+2438=>'L',
+2439=>'L',
+2440=>'L',
+2441=>'L',
+2442=>'L',
+2443=>'L',
+2444=>'L',
+2447=>'L',
+2448=>'L',
+2451=>'L',
+2452=>'L',
+2453=>'L',
+2454=>'L',
+2455=>'L',
+2456=>'L',
+2457=>'L',
+2458=>'L',
+2459=>'L',
+2460=>'L',
+2461=>'L',
+2462=>'L',
+2463=>'L',
+2464=>'L',
+2465=>'L',
+2466=>'L',
+2467=>'L',
+2468=>'L',
+2469=>'L',
+2470=>'L',
+2471=>'L',
+2472=>'L',
+2474=>'L',
+2475=>'L',
+2476=>'L',
+2477=>'L',
+2478=>'L',
+2479=>'L',
+2480=>'L',
+2482=>'L',
+2486=>'L',
+2487=>'L',
+2488=>'L',
+2489=>'L',
+2492=>'NSM',
+2493=>'L',
+2494=>'L',
+2495=>'L',
+2496=>'L',
+2497=>'NSM',
+2498=>'NSM',
+2499=>'NSM',
+2500=>'NSM',
+2503=>'L',
+2504=>'L',
+2507=>'L',
+2508=>'L',
+2509=>'NSM',
+2510=>'L',
+2519=>'L',
+2524=>'L',
+2525=>'L',
+2527=>'L',
+2528=>'L',
+2529=>'L',
+2530=>'NSM',
+2531=>'NSM',
+2534=>'L',
+2535=>'L',
+2536=>'L',
+2537=>'L',
+2538=>'L',
+2539=>'L',
+2540=>'L',
+2541=>'L',
+2542=>'L',
+2543=>'L',
+2544=>'L',
+2545=>'L',
+2546=>'ET',
+2547=>'ET',
+2548=>'L',
+2549=>'L',
+2550=>'L',
+2551=>'L',
+2552=>'L',
+2553=>'L',
+2554=>'L',
+2561=>'NSM',
+2562=>'NSM',
+2563=>'L',
+2565=>'L',
+2566=>'L',
+2567=>'L',
+2568=>'L',
+2569=>'L',
+2570=>'L',
+2575=>'L',
+2576=>'L',
+2579=>'L',
+2580=>'L',
+2581=>'L',
+2582=>'L',
+2583=>'L',
+2584=>'L',
+2585=>'L',
+2586=>'L',
+2587=>'L',
+2588=>'L',
+2589=>'L',
+2590=>'L',
+2591=>'L',
+2592=>'L',
+2593=>'L',
+2594=>'L',
+2595=>'L',
+2596=>'L',
+2597=>'L',
+2598=>'L',
+2599=>'L',
+2600=>'L',
+2602=>'L',
+2603=>'L',
+2604=>'L',
+2605=>'L',
+2606=>'L',
+2607=>'L',
+2608=>'L',
+2610=>'L',
+2611=>'L',
+2613=>'L',
+2614=>'L',
+2616=>'L',
+2617=>'L',
+2620=>'NSM',
+2622=>'L',
+2623=>'L',
+2624=>'L',
+2625=>'NSM',
+2626=>'NSM',
+2631=>'NSM',
+2632=>'NSM',
+2635=>'NSM',
+2636=>'NSM',
+2637=>'NSM',
+2649=>'L',
+2650=>'L',
+2651=>'L',
+2652=>'L',
+2654=>'L',
+2662=>'L',
+2663=>'L',
+2664=>'L',
+2665=>'L',
+2666=>'L',
+2667=>'L',
+2668=>'L',
+2669=>'L',
+2670=>'L',
+2671=>'L',
+2672=>'NSM',
+2673=>'NSM',
+2674=>'L',
+2675=>'L',
+2676=>'L',
+2689=>'NSM',
+2690=>'NSM',
+2691=>'L',
+2693=>'L',
+2694=>'L',
+2695=>'L',
+2696=>'L',
+2697=>'L',
+2698=>'L',
+2699=>'L',
+2700=>'L',
+2701=>'L',
+2703=>'L',
+2704=>'L',
+2705=>'L',
+2707=>'L',
+2708=>'L',
+2709=>'L',
+2710=>'L',
+2711=>'L',
+2712=>'L',
+2713=>'L',
+2714=>'L',
+2715=>'L',
+2716=>'L',
+2717=>'L',
+2718=>'L',
+2719=>'L',
+2720=>'L',
+2721=>'L',
+2722=>'L',
+2723=>'L',
+2724=>'L',
+2725=>'L',
+2726=>'L',
+2727=>'L',
+2728=>'L',
+2730=>'L',
+2731=>'L',
+2732=>'L',
+2733=>'L',
+2734=>'L',
+2735=>'L',
+2736=>'L',
+2738=>'L',
+2739=>'L',
+2741=>'L',
+2742=>'L',
+2743=>'L',
+2744=>'L',
+2745=>'L',
+2748=>'NSM',
+2749=>'L',
+2750=>'L',
+2751=>'L',
+2752=>'L',
+2753=>'NSM',
+2754=>'NSM',
+2755=>'NSM',
+2756=>'NSM',
+2757=>'NSM',
+2759=>'NSM',
+2760=>'NSM',
+2761=>'L',
+2763=>'L',
+2764=>'L',
+2765=>'NSM',
+2768=>'L',
+2784=>'L',
+2785=>'L',
+2786=>'NSM',
+2787=>'NSM',
+2790=>'L',
+2791=>'L',
+2792=>'L',
+2793=>'L',
+2794=>'L',
+2795=>'L',
+2796=>'L',
+2797=>'L',
+2798=>'L',
+2799=>'L',
+2801=>'ET',
+2817=>'NSM',
+2818=>'L',
+2819=>'L',
+2821=>'L',
+2822=>'L',
+2823=>'L',
+2824=>'L',
+2825=>'L',
+2826=>'L',
+2827=>'L',
+2828=>'L',
+2831=>'L',
+2832=>'L',
+2835=>'L',
+2836=>'L',
+2837=>'L',
+2838=>'L',
+2839=>'L',
+2840=>'L',
+2841=>'L',
+2842=>'L',
+2843=>'L',
+2844=>'L',
+2845=>'L',
+2846=>'L',
+2847=>'L',
+2848=>'L',
+2849=>'L',
+2850=>'L',
+2851=>'L',
+2852=>'L',
+2853=>'L',
+2854=>'L',
+2855=>'L',
+2856=>'L',
+2858=>'L',
+2859=>'L',
+2860=>'L',
+2861=>'L',
+2862=>'L',
+2863=>'L',
+2864=>'L',
+2866=>'L',
+2867=>'L',
+2869=>'L',
+2870=>'L',
+2871=>'L',
+2872=>'L',
+2873=>'L',
+2876=>'NSM',
+2877=>'L',
+2878=>'L',
+2879=>'NSM',
+2880=>'L',
+2881=>'NSM',
+2882=>'NSM',
+2883=>'NSM',
+2887=>'L',
+2888=>'L',
+2891=>'L',
+2892=>'L',
+2893=>'NSM',
+2902=>'NSM',
+2903=>'L',
+2908=>'L',
+2909=>'L',
+2911=>'L',
+2912=>'L',
+2913=>'L',
+2918=>'L',
+2919=>'L',
+2920=>'L',
+2921=>'L',
+2922=>'L',
+2923=>'L',
+2924=>'L',
+2925=>'L',
+2926=>'L',
+2927=>'L',
+2928=>'L',
+2929=>'L',
+2946=>'NSM',
+2947=>'L',
+2949=>'L',
+2950=>'L',
+2951=>'L',
+2952=>'L',
+2953=>'L',
+2954=>'L',
+2958=>'L',
+2959=>'L',
+2960=>'L',
+2962=>'L',
+2963=>'L',
+2964=>'L',
+2965=>'L',
+2969=>'L',
+2970=>'L',
+2972=>'L',
+2974=>'L',
+2975=>'L',
+2979=>'L',
+2980=>'L',
+2984=>'L',
+2985=>'L',
+2986=>'L',
+2990=>'L',
+2991=>'L',
+2992=>'L',
+2993=>'L',
+2994=>'L',
+2995=>'L',
+2996=>'L',
+2997=>'L',
+2998=>'L',
+2999=>'L',
+3000=>'L',
+3001=>'L',
+3006=>'L',
+3007=>'L',
+3008=>'NSM',
+3009=>'L',
+3010=>'L',
+3014=>'L',
+3015=>'L',
+3016=>'L',
+3018=>'L',
+3019=>'L',
+3020=>'L',
+3021=>'NSM',
+3031=>'L',
+3046=>'L',
+3047=>'L',
+3048=>'L',
+3049=>'L',
+3050=>'L',
+3051=>'L',
+3052=>'L',
+3053=>'L',
+3054=>'L',
+3055=>'L',
+3056=>'L',
+3057=>'L',
+3058=>'L',
+3059=>'ON',
+3060=>'ON',
+3061=>'ON',
+3062=>'ON',
+3063=>'ON',
+3064=>'ON',
+3065=>'ET',
+3066=>'ON',
+3073=>'L',
+3074=>'L',
+3075=>'L',
+3077=>'L',
+3078=>'L',
+3079=>'L',
+3080=>'L',
+3081=>'L',
+3082=>'L',
+3083=>'L',
+3084=>'L',
+3086=>'L',
+3087=>'L',
+3088=>'L',
+3090=>'L',
+3091=>'L',
+3092=>'L',
+3093=>'L',
+3094=>'L',
+3095=>'L',
+3096=>'L',
+3097=>'L',
+3098=>'L',
+3099=>'L',
+3100=>'L',
+3101=>'L',
+3102=>'L',
+3103=>'L',
+3104=>'L',
+3105=>'L',
+3106=>'L',
+3107=>'L',
+3108=>'L',
+3109=>'L',
+3110=>'L',
+3111=>'L',
+3112=>'L',
+3114=>'L',
+3115=>'L',
+3116=>'L',
+3117=>'L',
+3118=>'L',
+3119=>'L',
+3120=>'L',
+3121=>'L',
+3122=>'L',
+3123=>'L',
+3125=>'L',
+3126=>'L',
+3127=>'L',
+3128=>'L',
+3129=>'L',
+3134=>'NSM',
+3135=>'NSM',
+3136=>'NSM',
+3137=>'L',
+3138=>'L',
+3139=>'L',
+3140=>'L',
+3142=>'NSM',
+3143=>'NSM',
+3144=>'NSM',
+3146=>'NSM',
+3147=>'NSM',
+3148=>'NSM',
+3149=>'NSM',
+3157=>'NSM',
+3158=>'NSM',
+3168=>'L',
+3169=>'L',
+3174=>'L',
+3175=>'L',
+3176=>'L',
+3177=>'L',
+3178=>'L',
+3179=>'L',
+3180=>'L',
+3181=>'L',
+3182=>'L',
+3183=>'L',
+3202=>'L',
+3203=>'L',
+3205=>'L',
+3206=>'L',
+3207=>'L',
+3208=>'L',
+3209=>'L',
+3210=>'L',
+3211=>'L',
+3212=>'L',
+3214=>'L',
+3215=>'L',
+3216=>'L',
+3218=>'L',
+3219=>'L',
+3220=>'L',
+3221=>'L',
+3222=>'L',
+3223=>'L',
+3224=>'L',
+3225=>'L',
+3226=>'L',
+3227=>'L',
+3228=>'L',
+3229=>'L',
+3230=>'L',
+3231=>'L',
+3232=>'L',
+3233=>'L',
+3234=>'L',
+3235=>'L',
+3236=>'L',
+3237=>'L',
+3238=>'L',
+3239=>'L',
+3240=>'L',
+3242=>'L',
+3243=>'L',
+3244=>'L',
+3245=>'L',
+3246=>'L',
+3247=>'L',
+3248=>'L',
+3249=>'L',
+3250=>'L',
+3251=>'L',
+3253=>'L',
+3254=>'L',
+3255=>'L',
+3256=>'L',
+3257=>'L',
+3260=>'NSM',
+3261=>'L',
+3262=>'L',
+3263=>'L',
+3264=>'L',
+3265=>'L',
+3266=>'L',
+3267=>'L',
+3268=>'L',
+3270=>'L',
+3271=>'L',
+3272=>'L',
+3274=>'L',
+3275=>'L',
+3276=>'NSM',
+3277=>'NSM',
+3285=>'L',
+3286=>'L',
+3294=>'L',
+3296=>'L',
+3297=>'L',
+3298=>'NSM',
+3299=>'NSM',
+3302=>'L',
+3303=>'L',
+3304=>'L',
+3305=>'L',
+3306=>'L',
+3307=>'L',
+3308=>'L',
+3309=>'L',
+3310=>'L',
+3311=>'L',
+3313=>'ON',
+3314=>'ON',
+3330=>'L',
+3331=>'L',
+3333=>'L',
+3334=>'L',
+3335=>'L',
+3336=>'L',
+3337=>'L',
+3338=>'L',
+3339=>'L',
+3340=>'L',
+3342=>'L',
+3343=>'L',
+3344=>'L',
+3346=>'L',
+3347=>'L',
+3348=>'L',
+3349=>'L',
+3350=>'L',
+3351=>'L',
+3352=>'L',
+3353=>'L',
+3354=>'L',
+3355=>'L',
+3356=>'L',
+3357=>'L',
+3358=>'L',
+3359=>'L',
+3360=>'L',
+3361=>'L',
+3362=>'L',
+3363=>'L',
+3364=>'L',
+3365=>'L',
+3366=>'L',
+3367=>'L',
+3368=>'L',
+3370=>'L',
+3371=>'L',
+3372=>'L',
+3373=>'L',
+3374=>'L',
+3375=>'L',
+3376=>'L',
+3377=>'L',
+3378=>'L',
+3379=>'L',
+3380=>'L',
+3381=>'L',
+3382=>'L',
+3383=>'L',
+3384=>'L',
+3385=>'L',
+3390=>'L',
+3391=>'L',
+3392=>'L',
+3393=>'NSM',
+3394=>'NSM',
+3395=>'NSM',
+3398=>'L',
+3399=>'L',
+3400=>'L',
+3402=>'L',
+3403=>'L',
+3404=>'L',
+3405=>'NSM',
+3415=>'L',
+3424=>'L',
+3425=>'L',
+3430=>'L',
+3431=>'L',
+3432=>'L',
+3433=>'L',
+3434=>'L',
+3435=>'L',
+3436=>'L',
+3437=>'L',
+3438=>'L',
+3439=>'L',
+3458=>'L',
+3459=>'L',
+3461=>'L',
+3462=>'L',
+3463=>'L',
+3464=>'L',
+3465=>'L',
+3466=>'L',
+3467=>'L',
+3468=>'L',
+3469=>'L',
+3470=>'L',
+3471=>'L',
+3472=>'L',
+3473=>'L',
+3474=>'L',
+3475=>'L',
+3476=>'L',
+3477=>'L',
+3478=>'L',
+3482=>'L',
+3483=>'L',
+3484=>'L',
+3485=>'L',
+3486=>'L',
+3487=>'L',
+3488=>'L',
+3489=>'L',
+3490=>'L',
+3491=>'L',
+3492=>'L',
+3493=>'L',
+3494=>'L',
+3495=>'L',
+3496=>'L',
+3497=>'L',
+3498=>'L',
+3499=>'L',
+3500=>'L',
+3501=>'L',
+3502=>'L',
+3503=>'L',
+3504=>'L',
+3505=>'L',
+3507=>'L',
+3508=>'L',
+3509=>'L',
+3510=>'L',
+3511=>'L',
+3512=>'L',
+3513=>'L',
+3514=>'L',
+3515=>'L',
+3517=>'L',
+3520=>'L',
+3521=>'L',
+3522=>'L',
+3523=>'L',
+3524=>'L',
+3525=>'L',
+3526=>'L',
+3530=>'NSM',
+3535=>'L',
+3536=>'L',
+3537=>'L',
+3538=>'NSM',
+3539=>'NSM',
+3540=>'NSM',
+3542=>'NSM',
+3544=>'L',
+3545=>'L',
+3546=>'L',
+3547=>'L',
+3548=>'L',
+3549=>'L',
+3550=>'L',
+3551=>'L',
+3570=>'L',
+3571=>'L',
+3572=>'L',
+3585=>'L',
+3586=>'L',
+3587=>'L',
+3588=>'L',
+3589=>'L',
+3590=>'L',
+3591=>'L',
+3592=>'L',
+3593=>'L',
+3594=>'L',
+3595=>'L',
+3596=>'L',
+3597=>'L',
+3598=>'L',
+3599=>'L',
+3600=>'L',
+3601=>'L',
+3602=>'L',
+3603=>'L',
+3604=>'L',
+3605=>'L',
+3606=>'L',
+3607=>'L',
+3608=>'L',
+3609=>'L',
+3610=>'L',
+3611=>'L',
+3612=>'L',
+3613=>'L',
+3614=>'L',
+3615=>'L',
+3616=>'L',
+3617=>'L',
+3618=>'L',
+3619=>'L',
+3620=>'L',
+3621=>'L',
+3622=>'L',
+3623=>'L',
+3624=>'L',
+3625=>'L',
+3626=>'L',
+3627=>'L',
+3628=>'L',
+3629=>'L',
+3630=>'L',
+3631=>'L',
+3632=>'L',
+3633=>'NSM',
+3634=>'L',
+3635=>'L',
+3636=>'NSM',
+3637=>'NSM',
+3638=>'NSM',
+3639=>'NSM',
+3640=>'NSM',
+3641=>'NSM',
+3642=>'NSM',
+3647=>'ET',
+3648=>'L',
+3649=>'L',
+3650=>'L',
+3651=>'L',
+3652=>'L',
+3653=>'L',
+3654=>'L',
+3655=>'NSM',
+3656=>'NSM',
+3657=>'NSM',
+3658=>'NSM',
+3659=>'NSM',
+3660=>'NSM',
+3661=>'NSM',
+3662=>'NSM',
+3663=>'L',
+3664=>'L',
+3665=>'L',
+3666=>'L',
+3667=>'L',
+3668=>'L',
+3669=>'L',
+3670=>'L',
+3671=>'L',
+3672=>'L',
+3673=>'L',
+3674=>'L',
+3675=>'L',
+3713=>'L',
+3714=>'L',
+3716=>'L',
+3719=>'L',
+3720=>'L',
+3722=>'L',
+3725=>'L',
+3732=>'L',
+3733=>'L',
+3734=>'L',
+3735=>'L',
+3737=>'L',
+3738=>'L',
+3739=>'L',
+3740=>'L',
+3741=>'L',
+3742=>'L',
+3743=>'L',
+3745=>'L',
+3746=>'L',
+3747=>'L',
+3749=>'L',
+3751=>'L',
+3754=>'L',
+3755=>'L',
+3757=>'L',
+3758=>'L',
+3759=>'L',
+3760=>'L',
+3761=>'NSM',
+3762=>'L',
+3763=>'L',
+3764=>'NSM',
+3765=>'NSM',
+3766=>'NSM',
+3767=>'NSM',
+3768=>'NSM',
+3769=>'NSM',
+3771=>'NSM',
+3772=>'NSM',
+3773=>'L',
+3776=>'L',
+3777=>'L',
+3778=>'L',
+3779=>'L',
+3780=>'L',
+3782=>'L',
+3784=>'NSM',
+3785=>'NSM',
+3786=>'NSM',
+3787=>'NSM',
+3788=>'NSM',
+3789=>'NSM',
+3792=>'L',
+3793=>'L',
+3794=>'L',
+3795=>'L',
+3796=>'L',
+3797=>'L',
+3798=>'L',
+3799=>'L',
+3800=>'L',
+3801=>'L',
+3804=>'L',
+3805=>'L',
+3840=>'L',
+3841=>'L',
+3842=>'L',
+3843=>'L',
+3844=>'L',
+3845=>'L',
+3846=>'L',
+3847=>'L',
+3848=>'L',
+3849=>'L',
+3850=>'L',
+3851=>'L',
+3852=>'L',
+3853=>'L',
+3854=>'L',
+3855=>'L',
+3856=>'L',
+3857=>'L',
+3858=>'L',
+3859=>'L',
+3860=>'L',
+3861=>'L',
+3862=>'L',
+3863=>'L',
+3864=>'NSM',
+3865=>'NSM',
+3866=>'L',
+3867=>'L',
+3868=>'L',
+3869=>'L',
+3870=>'L',
+3871=>'L',
+3872=>'L',
+3873=>'L',
+3874=>'L',
+3875=>'L',
+3876=>'L',
+3877=>'L',
+3878=>'L',
+3879=>'L',
+3880=>'L',
+3881=>'L',
+3882=>'L',
+3883=>'L',
+3884=>'L',
+3885=>'L',
+3886=>'L',
+3887=>'L',
+3888=>'L',
+3889=>'L',
+3890=>'L',
+3891=>'L',
+3892=>'L',
+3893=>'NSM',
+3894=>'L',
+3895=>'NSM',
+3896=>'L',
+3897=>'NSM',
+3898=>'ON',
+3899=>'ON',
+3900=>'ON',
+3901=>'ON',
+3902=>'L',
+3903=>'L',
+3904=>'L',
+3905=>'L',
+3906=>'L',
+3907=>'L',
+3908=>'L',
+3909=>'L',
+3910=>'L',
+3911=>'L',
+3913=>'L',
+3914=>'L',
+3915=>'L',
+3916=>'L',
+3917=>'L',
+3918=>'L',
+3919=>'L',
+3920=>'L',
+3921=>'L',
+3922=>'L',
+3923=>'L',
+3924=>'L',
+3925=>'L',
+3926=>'L',
+3927=>'L',
+3928=>'L',
+3929=>'L',
+3930=>'L',
+3931=>'L',
+3932=>'L',
+3933=>'L',
+3934=>'L',
+3935=>'L',
+3936=>'L',
+3937=>'L',
+3938=>'L',
+3939=>'L',
+3940=>'L',
+3941=>'L',
+3942=>'L',
+3943=>'L',
+3944=>'L',
+3945=>'L',
+3946=>'L',
+3953=>'NSM',
+3954=>'NSM',
+3955=>'NSM',
+3956=>'NSM',
+3957=>'NSM',
+3958=>'NSM',
+3959=>'NSM',
+3960=>'NSM',
+3961=>'NSM',
+3962=>'NSM',
+3963=>'NSM',
+3964=>'NSM',
+3965=>'NSM',
+3966=>'NSM',
+3967=>'L',
+3968=>'NSM',
+3969=>'NSM',
+3970=>'NSM',
+3971=>'NSM',
+3972=>'NSM',
+3973=>'L',
+3974=>'NSM',
+3975=>'NSM',
+3976=>'L',
+3977=>'L',
+3978=>'L',
+3979=>'L',
+3984=>'NSM',
+3985=>'NSM',
+3986=>'NSM',
+3987=>'NSM',
+3988=>'NSM',
+3989=>'NSM',
+3990=>'NSM',
+3991=>'NSM',
+3993=>'NSM',
+3994=>'NSM',
+3995=>'NSM',
+3996=>'NSM',
+3997=>'NSM',
+3998=>'NSM',
+3999=>'NSM',
+4000=>'NSM',
+4001=>'NSM',
+4002=>'NSM',
+4003=>'NSM',
+4004=>'NSM',
+4005=>'NSM',
+4006=>'NSM',
+4007=>'NSM',
+4008=>'NSM',
+4009=>'NSM',
+4010=>'NSM',
+4011=>'NSM',
+4012=>'NSM',
+4013=>'NSM',
+4014=>'NSM',
+4015=>'NSM',
+4016=>'NSM',
+4017=>'NSM',
+4018=>'NSM',
+4019=>'NSM',
+4020=>'NSM',
+4021=>'NSM',
+4022=>'NSM',
+4023=>'NSM',
+4024=>'NSM',
+4025=>'NSM',
+4026=>'NSM',
+4027=>'NSM',
+4028=>'NSM',
+4030=>'L',
+4031=>'L',
+4032=>'L',
+4033=>'L',
+4034=>'L',
+4035=>'L',
+4036=>'L',
+4037=>'L',
+4038=>'NSM',
+4039=>'L',
+4040=>'L',
+4041=>'L',
+4042=>'L',
+4043=>'L',
+4044=>'L',
+4047=>'L',
+4048=>'L',
+4049=>'L',
+4096=>'L',
+4097=>'L',
+4098=>'L',
+4099=>'L',
+4100=>'L',
+4101=>'L',
+4102=>'L',
+4103=>'L',
+4104=>'L',
+4105=>'L',
+4106=>'L',
+4107=>'L',
+4108=>'L',
+4109=>'L',
+4110=>'L',
+4111=>'L',
+4112=>'L',
+4113=>'L',
+4114=>'L',
+4115=>'L',
+4116=>'L',
+4117=>'L',
+4118=>'L',
+4119=>'L',
+4120=>'L',
+4121=>'L',
+4122=>'L',
+4123=>'L',
+4124=>'L',
+4125=>'L',
+4126=>'L',
+4127=>'L',
+4128=>'L',
+4129=>'L',
+4131=>'L',
+4132=>'L',
+4133=>'L',
+4134=>'L',
+4135=>'L',
+4137=>'L',
+4138=>'L',
+4140=>'L',
+4141=>'NSM',
+4142=>'NSM',
+4143=>'NSM',
+4144=>'NSM',
+4145=>'L',
+4146=>'NSM',
+4150=>'NSM',
+4151=>'NSM',
+4152=>'L',
+4153=>'NSM',
+4160=>'L',
+4161=>'L',
+4162=>'L',
+4163=>'L',
+4164=>'L',
+4165=>'L',
+4166=>'L',
+4167=>'L',
+4168=>'L',
+4169=>'L',
+4170=>'L',
+4171=>'L',
+4172=>'L',
+4173=>'L',
+4174=>'L',
+4175=>'L',
+4176=>'L',
+4177=>'L',
+4178=>'L',
+4179=>'L',
+4180=>'L',
+4181=>'L',
+4182=>'L',
+4183=>'L',
+4184=>'NSM',
+4185=>'NSM',
+4256=>'L',
+4257=>'L',
+4258=>'L',
+4259=>'L',
+4260=>'L',
+4261=>'L',
+4262=>'L',
+4263=>'L',
+4264=>'L',
+4265=>'L',
+4266=>'L',
+4267=>'L',
+4268=>'L',
+4269=>'L',
+4270=>'L',
+4271=>'L',
+4272=>'L',
+4273=>'L',
+4274=>'L',
+4275=>'L',
+4276=>'L',
+4277=>'L',
+4278=>'L',
+4279=>'L',
+4280=>'L',
+4281=>'L',
+4282=>'L',
+4283=>'L',
+4284=>'L',
+4285=>'L',
+4286=>'L',
+4287=>'L',
+4288=>'L',
+4289=>'L',
+4290=>'L',
+4291=>'L',
+4292=>'L',
+4293=>'L',
+4304=>'L',
+4305=>'L',
+4306=>'L',
+4307=>'L',
+4308=>'L',
+4309=>'L',
+4310=>'L',
+4311=>'L',
+4312=>'L',
+4313=>'L',
+4314=>'L',
+4315=>'L',
+4316=>'L',
+4317=>'L',
+4318=>'L',
+4319=>'L',
+4320=>'L',
+4321=>'L',
+4322=>'L',
+4323=>'L',
+4324=>'L',
+4325=>'L',
+4326=>'L',
+4327=>'L',
+4328=>'L',
+4329=>'L',
+4330=>'L',
+4331=>'L',
+4332=>'L',
+4333=>'L',
+4334=>'L',
+4335=>'L',
+4336=>'L',
+4337=>'L',
+4338=>'L',
+4339=>'L',
+4340=>'L',
+4341=>'L',
+4342=>'L',
+4343=>'L',
+4344=>'L',
+4345=>'L',
+4346=>'L',
+4347=>'L',
+4348=>'L',
+4352=>'L',
+4353=>'L',
+4354=>'L',
+4355=>'L',
+4356=>'L',
+4357=>'L',
+4358=>'L',
+4359=>'L',
+4360=>'L',
+4361=>'L',
+4362=>'L',
+4363=>'L',
+4364=>'L',
+4365=>'L',
+4366=>'L',
+4367=>'L',
+4368=>'L',
+4369=>'L',
+4370=>'L',
+4371=>'L',
+4372=>'L',
+4373=>'L',
+4374=>'L',
+4375=>'L',
+4376=>'L',
+4377=>'L',
+4378=>'L',
+4379=>'L',
+4380=>'L',
+4381=>'L',
+4382=>'L',
+4383=>'L',
+4384=>'L',
+4385=>'L',
+4386=>'L',
+4387=>'L',
+4388=>'L',
+4389=>'L',
+4390=>'L',
+4391=>'L',
+4392=>'L',
+4393=>'L',
+4394=>'L',
+4395=>'L',
+4396=>'L',
+4397=>'L',
+4398=>'L',
+4399=>'L',
+4400=>'L',
+4401=>'L',
+4402=>'L',
+4403=>'L',
+4404=>'L',
+4405=>'L',
+4406=>'L',
+4407=>'L',
+4408=>'L',
+4409=>'L',
+4410=>'L',
+4411=>'L',
+4412=>'L',
+4413=>'L',
+4414=>'L',
+4415=>'L',
+4416=>'L',
+4417=>'L',
+4418=>'L',
+4419=>'L',
+4420=>'L',
+4421=>'L',
+4422=>'L',
+4423=>'L',
+4424=>'L',
+4425=>'L',
+4426=>'L',
+4427=>'L',
+4428=>'L',
+4429=>'L',
+4430=>'L',
+4431=>'L',
+4432=>'L',
+4433=>'L',
+4434=>'L',
+4435=>'L',
+4436=>'L',
+4437=>'L',
+4438=>'L',
+4439=>'L',
+4440=>'L',
+4441=>'L',
+4447=>'L',
+4448=>'L',
+4449=>'L',
+4450=>'L',
+4451=>'L',
+4452=>'L',
+4453=>'L',
+4454=>'L',
+4455=>'L',
+4456=>'L',
+4457=>'L',
+4458=>'L',
+4459=>'L',
+4460=>'L',
+4461=>'L',
+4462=>'L',
+4463=>'L',
+4464=>'L',
+4465=>'L',
+4466=>'L',
+4467=>'L',
+4468=>'L',
+4469=>'L',
+4470=>'L',
+4471=>'L',
+4472=>'L',
+4473=>'L',
+4474=>'L',
+4475=>'L',
+4476=>'L',
+4477=>'L',
+4478=>'L',
+4479=>'L',
+4480=>'L',
+4481=>'L',
+4482=>'L',
+4483=>'L',
+4484=>'L',
+4485=>'L',
+4486=>'L',
+4487=>'L',
+4488=>'L',
+4489=>'L',
+4490=>'L',
+4491=>'L',
+4492=>'L',
+4493=>'L',
+4494=>'L',
+4495=>'L',
+4496=>'L',
+4497=>'L',
+4498=>'L',
+4499=>'L',
+4500=>'L',
+4501=>'L',
+4502=>'L',
+4503=>'L',
+4504=>'L',
+4505=>'L',
+4506=>'L',
+4507=>'L',
+4508=>'L',
+4509=>'L',
+4510=>'L',
+4511=>'L',
+4512=>'L',
+4513=>'L',
+4514=>'L',
+4520=>'L',
+4521=>'L',
+4522=>'L',
+4523=>'L',
+4524=>'L',
+4525=>'L',
+4526=>'L',
+4527=>'L',
+4528=>'L',
+4529=>'L',
+4530=>'L',
+4531=>'L',
+4532=>'L',
+4533=>'L',
+4534=>'L',
+4535=>'L',
+4536=>'L',
+4537=>'L',
+4538=>'L',
+4539=>'L',
+4540=>'L',
+4541=>'L',
+4542=>'L',
+4543=>'L',
+4544=>'L',
+4545=>'L',
+4546=>'L',
+4547=>'L',
+4548=>'L',
+4549=>'L',
+4550=>'L',
+4551=>'L',
+4552=>'L',
+4553=>'L',
+4554=>'L',
+4555=>'L',
+4556=>'L',
+4557=>'L',
+4558=>'L',
+4559=>'L',
+4560=>'L',
+4561=>'L',
+4562=>'L',
+4563=>'L',
+4564=>'L',
+4565=>'L',
+4566=>'L',
+4567=>'L',
+4568=>'L',
+4569=>'L',
+4570=>'L',
+4571=>'L',
+4572=>'L',
+4573=>'L',
+4574=>'L',
+4575=>'L',
+4576=>'L',
+4577=>'L',
+4578=>'L',
+4579=>'L',
+4580=>'L',
+4581=>'L',
+4582=>'L',
+4583=>'L',
+4584=>'L',
+4585=>'L',
+4586=>'L',
+4587=>'L',
+4588=>'L',
+4589=>'L',
+4590=>'L',
+4591=>'L',
+4592=>'L',
+4593=>'L',
+4594=>'L',
+4595=>'L',
+4596=>'L',
+4597=>'L',
+4598=>'L',
+4599=>'L',
+4600=>'L',
+4601=>'L',
+4608=>'L',
+4609=>'L',
+4610=>'L',
+4611=>'L',
+4612=>'L',
+4613=>'L',
+4614=>'L',
+4615=>'L',
+4616=>'L',
+4617=>'L',
+4618=>'L',
+4619=>'L',
+4620=>'L',
+4621=>'L',
+4622=>'L',
+4623=>'L',
+4624=>'L',
+4625=>'L',
+4626=>'L',
+4627=>'L',
+4628=>'L',
+4629=>'L',
+4630=>'L',
+4631=>'L',
+4632=>'L',
+4633=>'L',
+4634=>'L',
+4635=>'L',
+4636=>'L',
+4637=>'L',
+4638=>'L',
+4639=>'L',
+4640=>'L',
+4641=>'L',
+4642=>'L',
+4643=>'L',
+4644=>'L',
+4645=>'L',
+4646=>'L',
+4647=>'L',
+4648=>'L',
+4649=>'L',
+4650=>'L',
+4651=>'L',
+4652=>'L',
+4653=>'L',
+4654=>'L',
+4655=>'L',
+4656=>'L',
+4657=>'L',
+4658=>'L',
+4659=>'L',
+4660=>'L',
+4661=>'L',
+4662=>'L',
+4663=>'L',
+4664=>'L',
+4665=>'L',
+4666=>'L',
+4667=>'L',
+4668=>'L',
+4669=>'L',
+4670=>'L',
+4671=>'L',
+4672=>'L',
+4673=>'L',
+4674=>'L',
+4675=>'L',
+4676=>'L',
+4677=>'L',
+4678=>'L',
+4679=>'L',
+4680=>'L',
+4682=>'L',
+4683=>'L',
+4684=>'L',
+4685=>'L',
+4688=>'L',
+4689=>'L',
+4690=>'L',
+4691=>'L',
+4692=>'L',
+4693=>'L',
+4694=>'L',
+4696=>'L',
+4698=>'L',
+4699=>'L',
+4700=>'L',
+4701=>'L',
+4704=>'L',
+4705=>'L',
+4706=>'L',
+4707=>'L',
+4708=>'L',
+4709=>'L',
+4710=>'L',
+4711=>'L',
+4712=>'L',
+4713=>'L',
+4714=>'L',
+4715=>'L',
+4716=>'L',
+4717=>'L',
+4718=>'L',
+4719=>'L',
+4720=>'L',
+4721=>'L',
+4722=>'L',
+4723=>'L',
+4724=>'L',
+4725=>'L',
+4726=>'L',
+4727=>'L',
+4728=>'L',
+4729=>'L',
+4730=>'L',
+4731=>'L',
+4732=>'L',
+4733=>'L',
+4734=>'L',
+4735=>'L',
+4736=>'L',
+4737=>'L',
+4738=>'L',
+4739=>'L',
+4740=>'L',
+4741=>'L',
+4742=>'L',
+4743=>'L',
+4744=>'L',
+4746=>'L',
+4747=>'L',
+4748=>'L',
+4749=>'L',
+4752=>'L',
+4753=>'L',
+4754=>'L',
+4755=>'L',
+4756=>'L',
+4757=>'L',
+4758=>'L',
+4759=>'L',
+4760=>'L',
+4761=>'L',
+4762=>'L',
+4763=>'L',
+4764=>'L',
+4765=>'L',
+4766=>'L',
+4767=>'L',
+4768=>'L',
+4769=>'L',
+4770=>'L',
+4771=>'L',
+4772=>'L',
+4773=>'L',
+4774=>'L',
+4775=>'L',
+4776=>'L',
+4777=>'L',
+4778=>'L',
+4779=>'L',
+4780=>'L',
+4781=>'L',
+4782=>'L',
+4783=>'L',
+4784=>'L',
+4786=>'L',
+4787=>'L',
+4788=>'L',
+4789=>'L',
+4792=>'L',
+4793=>'L',
+4794=>'L',
+4795=>'L',
+4796=>'L',
+4797=>'L',
+4798=>'L',
+4800=>'L',
+4802=>'L',
+4803=>'L',
+4804=>'L',
+4805=>'L',
+4808=>'L',
+4809=>'L',
+4810=>'L',
+4811=>'L',
+4812=>'L',
+4813=>'L',
+4814=>'L',
+4815=>'L',
+4816=>'L',
+4817=>'L',
+4818=>'L',
+4819=>'L',
+4820=>'L',
+4821=>'L',
+4822=>'L',
+4824=>'L',
+4825=>'L',
+4826=>'L',
+4827=>'L',
+4828=>'L',
+4829=>'L',
+4830=>'L',
+4831=>'L',
+4832=>'L',
+4833=>'L',
+4834=>'L',
+4835=>'L',
+4836=>'L',
+4837=>'L',
+4838=>'L',
+4839=>'L',
+4840=>'L',
+4841=>'L',
+4842=>'L',
+4843=>'L',
+4844=>'L',
+4845=>'L',
+4846=>'L',
+4847=>'L',
+4848=>'L',
+4849=>'L',
+4850=>'L',
+4851=>'L',
+4852=>'L',
+4853=>'L',
+4854=>'L',
+4855=>'L',
+4856=>'L',
+4857=>'L',
+4858=>'L',
+4859=>'L',
+4860=>'L',
+4861=>'L',
+4862=>'L',
+4863=>'L',
+4864=>'L',
+4865=>'L',
+4866=>'L',
+4867=>'L',
+4868=>'L',
+4869=>'L',
+4870=>'L',
+4871=>'L',
+4872=>'L',
+4873=>'L',
+4874=>'L',
+4875=>'L',
+4876=>'L',
+4877=>'L',
+4878=>'L',
+4879=>'L',
+4880=>'L',
+4882=>'L',
+4883=>'L',
+4884=>'L',
+4885=>'L',
+4888=>'L',
+4889=>'L',
+4890=>'L',
+4891=>'L',
+4892=>'L',
+4893=>'L',
+4894=>'L',
+4895=>'L',
+4896=>'L',
+4897=>'L',
+4898=>'L',
+4899=>'L',
+4900=>'L',
+4901=>'L',
+4902=>'L',
+4903=>'L',
+4904=>'L',
+4905=>'L',
+4906=>'L',
+4907=>'L',
+4908=>'L',
+4909=>'L',
+4910=>'L',
+4911=>'L',
+4912=>'L',
+4913=>'L',
+4914=>'L',
+4915=>'L',
+4916=>'L',
+4917=>'L',
+4918=>'L',
+4919=>'L',
+4920=>'L',
+4921=>'L',
+4922=>'L',
+4923=>'L',
+4924=>'L',
+4925=>'L',
+4926=>'L',
+4927=>'L',
+4928=>'L',
+4929=>'L',
+4930=>'L',
+4931=>'L',
+4932=>'L',
+4933=>'L',
+4934=>'L',
+4935=>'L',
+4936=>'L',
+4937=>'L',
+4938=>'L',
+4939=>'L',
+4940=>'L',
+4941=>'L',
+4942=>'L',
+4943=>'L',
+4944=>'L',
+4945=>'L',
+4946=>'L',
+4947=>'L',
+4948=>'L',
+4949=>'L',
+4950=>'L',
+4951=>'L',
+4952=>'L',
+4953=>'L',
+4954=>'L',
+4959=>'NSM',
+4960=>'L',
+4961=>'L',
+4962=>'L',
+4963=>'L',
+4964=>'L',
+4965=>'L',
+4966=>'L',
+4967=>'L',
+4968=>'L',
+4969=>'L',
+4970=>'L',
+4971=>'L',
+4972=>'L',
+4973=>'L',
+4974=>'L',
+4975=>'L',
+4976=>'L',
+4977=>'L',
+4978=>'L',
+4979=>'L',
+4980=>'L',
+4981=>'L',
+4982=>'L',
+4983=>'L',
+4984=>'L',
+4985=>'L',
+4986=>'L',
+4987=>'L',
+4988=>'L',
+4992=>'L',
+4993=>'L',
+4994=>'L',
+4995=>'L',
+4996=>'L',
+4997=>'L',
+4998=>'L',
+4999=>'L',
+5000=>'L',
+5001=>'L',
+5002=>'L',
+5003=>'L',
+5004=>'L',
+5005=>'L',
+5006=>'L',
+5007=>'L',
+5008=>'ON',
+5009=>'ON',
+5010=>'ON',
+5011=>'ON',
+5012=>'ON',
+5013=>'ON',
+5014=>'ON',
+5015=>'ON',
+5016=>'ON',
+5017=>'ON',
+5024=>'L',
+5025=>'L',
+5026=>'L',
+5027=>'L',
+5028=>'L',
+5029=>'L',
+5030=>'L',
+5031=>'L',
+5032=>'L',
+5033=>'L',
+5034=>'L',
+5035=>'L',
+5036=>'L',
+5037=>'L',
+5038=>'L',
+5039=>'L',
+5040=>'L',
+5041=>'L',
+5042=>'L',
+5043=>'L',
+5044=>'L',
+5045=>'L',
+5046=>'L',
+5047=>'L',
+5048=>'L',
+5049=>'L',
+5050=>'L',
+5051=>'L',
+5052=>'L',
+5053=>'L',
+5054=>'L',
+5055=>'L',
+5056=>'L',
+5057=>'L',
+5058=>'L',
+5059=>'L',
+5060=>'L',
+5061=>'L',
+5062=>'L',
+5063=>'L',
+5064=>'L',
+5065=>'L',
+5066=>'L',
+5067=>'L',
+5068=>'L',
+5069=>'L',
+5070=>'L',
+5071=>'L',
+5072=>'L',
+5073=>'L',
+5074=>'L',
+5075=>'L',
+5076=>'L',
+5077=>'L',
+5078=>'L',
+5079=>'L',
+5080=>'L',
+5081=>'L',
+5082=>'L',
+5083=>'L',
+5084=>'L',
+5085=>'L',
+5086=>'L',
+5087=>'L',
+5088=>'L',
+5089=>'L',
+5090=>'L',
+5091=>'L',
+5092=>'L',
+5093=>'L',
+5094=>'L',
+5095=>'L',
+5096=>'L',
+5097=>'L',
+5098=>'L',
+5099=>'L',
+5100=>'L',
+5101=>'L',
+5102=>'L',
+5103=>'L',
+5104=>'L',
+5105=>'L',
+5106=>'L',
+5107=>'L',
+5108=>'L',
+5121=>'L',
+5122=>'L',
+5123=>'L',
+5124=>'L',
+5125=>'L',
+5126=>'L',
+5127=>'L',
+5128=>'L',
+5129=>'L',
+5130=>'L',
+5131=>'L',
+5132=>'L',
+5133=>'L',
+5134=>'L',
+5135=>'L',
+5136=>'L',
+5137=>'L',
+5138=>'L',
+5139=>'L',
+5140=>'L',
+5141=>'L',
+5142=>'L',
+5143=>'L',
+5144=>'L',
+5145=>'L',
+5146=>'L',
+5147=>'L',
+5148=>'L',
+5149=>'L',
+5150=>'L',
+5151=>'L',
+5152=>'L',
+5153=>'L',
+5154=>'L',
+5155=>'L',
+5156=>'L',
+5157=>'L',
+5158=>'L',
+5159=>'L',
+5160=>'L',
+5161=>'L',
+5162=>'L',
+5163=>'L',
+5164=>'L',
+5165=>'L',
+5166=>'L',
+5167=>'L',
+5168=>'L',
+5169=>'L',
+5170=>'L',
+5171=>'L',
+5172=>'L',
+5173=>'L',
+5174=>'L',
+5175=>'L',
+5176=>'L',
+5177=>'L',
+5178=>'L',
+5179=>'L',
+5180=>'L',
+5181=>'L',
+5182=>'L',
+5183=>'L',
+5184=>'L',
+5185=>'L',
+5186=>'L',
+5187=>'L',
+5188=>'L',
+5189=>'L',
+5190=>'L',
+5191=>'L',
+5192=>'L',
+5193=>'L',
+5194=>'L',
+5195=>'L',
+5196=>'L',
+5197=>'L',
+5198=>'L',
+5199=>'L',
+5200=>'L',
+5201=>'L',
+5202=>'L',
+5203=>'L',
+5204=>'L',
+5205=>'L',
+5206=>'L',
+5207=>'L',
+5208=>'L',
+5209=>'L',
+5210=>'L',
+5211=>'L',
+5212=>'L',
+5213=>'L',
+5214=>'L',
+5215=>'L',
+5216=>'L',
+5217=>'L',
+5218=>'L',
+5219=>'L',
+5220=>'L',
+5221=>'L',
+5222=>'L',
+5223=>'L',
+5224=>'L',
+5225=>'L',
+5226=>'L',
+5227=>'L',
+5228=>'L',
+5229=>'L',
+5230=>'L',
+5231=>'L',
+5232=>'L',
+5233=>'L',
+5234=>'L',
+5235=>'L',
+5236=>'L',
+5237=>'L',
+5238=>'L',
+5239=>'L',
+5240=>'L',
+5241=>'L',
+5242=>'L',
+5243=>'L',
+5244=>'L',
+5245=>'L',
+5246=>'L',
+5247=>'L',
+5248=>'L',
+5249=>'L',
+5250=>'L',
+5251=>'L',
+5252=>'L',
+5253=>'L',
+5254=>'L',
+5255=>'L',
+5256=>'L',
+5257=>'L',
+5258=>'L',
+5259=>'L',
+5260=>'L',
+5261=>'L',
+5262=>'L',
+5263=>'L',
+5264=>'L',
+5265=>'L',
+5266=>'L',
+5267=>'L',
+5268=>'L',
+5269=>'L',
+5270=>'L',
+5271=>'L',
+5272=>'L',
+5273=>'L',
+5274=>'L',
+5275=>'L',
+5276=>'L',
+5277=>'L',
+5278=>'L',
+5279=>'L',
+5280=>'L',
+5281=>'L',
+5282=>'L',
+5283=>'L',
+5284=>'L',
+5285=>'L',
+5286=>'L',
+5287=>'L',
+5288=>'L',
+5289=>'L',
+5290=>'L',
+5291=>'L',
+5292=>'L',
+5293=>'L',
+5294=>'L',
+5295=>'L',
+5296=>'L',
+5297=>'L',
+5298=>'L',
+5299=>'L',
+5300=>'L',
+5301=>'L',
+5302=>'L',
+5303=>'L',
+5304=>'L',
+5305=>'L',
+5306=>'L',
+5307=>'L',
+5308=>'L',
+5309=>'L',
+5310=>'L',
+5311=>'L',
+5312=>'L',
+5313=>'L',
+5314=>'L',
+5315=>'L',
+5316=>'L',
+5317=>'L',
+5318=>'L',
+5319=>'L',
+5320=>'L',
+5321=>'L',
+5322=>'L',
+5323=>'L',
+5324=>'L',
+5325=>'L',
+5326=>'L',
+5327=>'L',
+5328=>'L',
+5329=>'L',
+5330=>'L',
+5331=>'L',
+5332=>'L',
+5333=>'L',
+5334=>'L',
+5335=>'L',
+5336=>'L',
+5337=>'L',
+5338=>'L',
+5339=>'L',
+5340=>'L',
+5341=>'L',
+5342=>'L',
+5343=>'L',
+5344=>'L',
+5345=>'L',
+5346=>'L',
+5347=>'L',
+5348=>'L',
+5349=>'L',
+5350=>'L',
+5351=>'L',
+5352=>'L',
+5353=>'L',
+5354=>'L',
+5355=>'L',
+5356=>'L',
+5357=>'L',
+5358=>'L',
+5359=>'L',
+5360=>'L',
+5361=>'L',
+5362=>'L',
+5363=>'L',
+5364=>'L',
+5365=>'L',
+5366=>'L',
+5367=>'L',
+5368=>'L',
+5369=>'L',
+5370=>'L',
+5371=>'L',
+5372=>'L',
+5373=>'L',
+5374=>'L',
+5375=>'L',
+5376=>'L',
+5377=>'L',
+5378=>'L',
+5379=>'L',
+5380=>'L',
+5381=>'L',
+5382=>'L',
+5383=>'L',
+5384=>'L',
+5385=>'L',
+5386=>'L',
+5387=>'L',
+5388=>'L',
+5389=>'L',
+5390=>'L',
+5391=>'L',
+5392=>'L',
+5393=>'L',
+5394=>'L',
+5395=>'L',
+5396=>'L',
+5397=>'L',
+5398=>'L',
+5399=>'L',
+5400=>'L',
+5401=>'L',
+5402=>'L',
+5403=>'L',
+5404=>'L',
+5405=>'L',
+5406=>'L',
+5407=>'L',
+5408=>'L',
+5409=>'L',
+5410=>'L',
+5411=>'L',
+5412=>'L',
+5413=>'L',
+5414=>'L',
+5415=>'L',
+5416=>'L',
+5417=>'L',
+5418=>'L',
+5419=>'L',
+5420=>'L',
+5421=>'L',
+5422=>'L',
+5423=>'L',
+5424=>'L',
+5425=>'L',
+5426=>'L',
+5427=>'L',
+5428=>'L',
+5429=>'L',
+5430=>'L',
+5431=>'L',
+5432=>'L',
+5433=>'L',
+5434=>'L',
+5435=>'L',
+5436=>'L',
+5437=>'L',
+5438=>'L',
+5439=>'L',
+5440=>'L',
+5441=>'L',
+5442=>'L',
+5443=>'L',
+5444=>'L',
+5445=>'L',
+5446=>'L',
+5447=>'L',
+5448=>'L',
+5449=>'L',
+5450=>'L',
+5451=>'L',
+5452=>'L',
+5453=>'L',
+5454=>'L',
+5455=>'L',
+5456=>'L',
+5457=>'L',
+5458=>'L',
+5459=>'L',
+5460=>'L',
+5461=>'L',
+5462=>'L',
+5463=>'L',
+5464=>'L',
+5465=>'L',
+5466=>'L',
+5467=>'L',
+5468=>'L',
+5469=>'L',
+5470=>'L',
+5471=>'L',
+5472=>'L',
+5473=>'L',
+5474=>'L',
+5475=>'L',
+5476=>'L',
+5477=>'L',
+5478=>'L',
+5479=>'L',
+5480=>'L',
+5481=>'L',
+5482=>'L',
+5483=>'L',
+5484=>'L',
+5485=>'L',
+5486=>'L',
+5487=>'L',
+5488=>'L',
+5489=>'L',
+5490=>'L',
+5491=>'L',
+5492=>'L',
+5493=>'L',
+5494=>'L',
+5495=>'L',
+5496=>'L',
+5497=>'L',
+5498=>'L',
+5499=>'L',
+5500=>'L',
+5501=>'L',
+5502=>'L',
+5503=>'L',
+5504=>'L',
+5505=>'L',
+5506=>'L',
+5507=>'L',
+5508=>'L',
+5509=>'L',
+5510=>'L',
+5511=>'L',
+5512=>'L',
+5513=>'L',
+5514=>'L',
+5515=>'L',
+5516=>'L',
+5517=>'L',
+5518=>'L',
+5519=>'L',
+5520=>'L',
+5521=>'L',
+5522=>'L',
+5523=>'L',
+5524=>'L',
+5525=>'L',
+5526=>'L',
+5527=>'L',
+5528=>'L',
+5529=>'L',
+5530=>'L',
+5531=>'L',
+5532=>'L',
+5533=>'L',
+5534=>'L',
+5535=>'L',
+5536=>'L',
+5537=>'L',
+5538=>'L',
+5539=>'L',
+5540=>'L',
+5541=>'L',
+5542=>'L',
+5543=>'L',
+5544=>'L',
+5545=>'L',
+5546=>'L',
+5547=>'L',
+5548=>'L',
+5549=>'L',
+5550=>'L',
+5551=>'L',
+5552=>'L',
+5553=>'L',
+5554=>'L',
+5555=>'L',
+5556=>'L',
+5557=>'L',
+5558=>'L',
+5559=>'L',
+5560=>'L',
+5561=>'L',
+5562=>'L',
+5563=>'L',
+5564=>'L',
+5565=>'L',
+5566=>'L',
+5567=>'L',
+5568=>'L',
+5569=>'L',
+5570=>'L',
+5571=>'L',
+5572=>'L',
+5573=>'L',
+5574=>'L',
+5575=>'L',
+5576=>'L',
+5577=>'L',
+5578=>'L',
+5579=>'L',
+5580=>'L',
+5581=>'L',
+5582=>'L',
+5583=>'L',
+5584=>'L',
+5585=>'L',
+5586=>'L',
+5587=>'L',
+5588=>'L',
+5589=>'L',
+5590=>'L',
+5591=>'L',
+5592=>'L',
+5593=>'L',
+5594=>'L',
+5595=>'L',
+5596=>'L',
+5597=>'L',
+5598=>'L',
+5599=>'L',
+5600=>'L',
+5601=>'L',
+5602=>'L',
+5603=>'L',
+5604=>'L',
+5605=>'L',
+5606=>'L',
+5607=>'L',
+5608=>'L',
+5609=>'L',
+5610=>'L',
+5611=>'L',
+5612=>'L',
+5613=>'L',
+5614=>'L',
+5615=>'L',
+5616=>'L',
+5617=>'L',
+5618=>'L',
+5619=>'L',
+5620=>'L',
+5621=>'L',
+5622=>'L',
+5623=>'L',
+5624=>'L',
+5625=>'L',
+5626=>'L',
+5627=>'L',
+5628=>'L',
+5629=>'L',
+5630=>'L',
+5631=>'L',
+5632=>'L',
+5633=>'L',
+5634=>'L',
+5635=>'L',
+5636=>'L',
+5637=>'L',
+5638=>'L',
+5639=>'L',
+5640=>'L',
+5641=>'L',
+5642=>'L',
+5643=>'L',
+5644=>'L',
+5645=>'L',
+5646=>'L',
+5647=>'L',
+5648=>'L',
+5649=>'L',
+5650=>'L',
+5651=>'L',
+5652=>'L',
+5653=>'L',
+5654=>'L',
+5655=>'L',
+5656=>'L',
+5657=>'L',
+5658=>'L',
+5659=>'L',
+5660=>'L',
+5661=>'L',
+5662=>'L',
+5663=>'L',
+5664=>'L',
+5665=>'L',
+5666=>'L',
+5667=>'L',
+5668=>'L',
+5669=>'L',
+5670=>'L',
+5671=>'L',
+5672=>'L',
+5673=>'L',
+5674=>'L',
+5675=>'L',
+5676=>'L',
+5677=>'L',
+5678=>'L',
+5679=>'L',
+5680=>'L',
+5681=>'L',
+5682=>'L',
+5683=>'L',
+5684=>'L',
+5685=>'L',
+5686=>'L',
+5687=>'L',
+5688=>'L',
+5689=>'L',
+5690=>'L',
+5691=>'L',
+5692=>'L',
+5693=>'L',
+5694=>'L',
+5695=>'L',
+5696=>'L',
+5697=>'L',
+5698=>'L',
+5699=>'L',
+5700=>'L',
+5701=>'L',
+5702=>'L',
+5703=>'L',
+5704=>'L',
+5705=>'L',
+5706=>'L',
+5707=>'L',
+5708=>'L',
+5709=>'L',
+5710=>'L',
+5711=>'L',
+5712=>'L',
+5713=>'L',
+5714=>'L',
+5715=>'L',
+5716=>'L',
+5717=>'L',
+5718=>'L',
+5719=>'L',
+5720=>'L',
+5721=>'L',
+5722=>'L',
+5723=>'L',
+5724=>'L',
+5725=>'L',
+5726=>'L',
+5727=>'L',
+5728=>'L',
+5729=>'L',
+5730=>'L',
+5731=>'L',
+5732=>'L',
+5733=>'L',
+5734=>'L',
+5735=>'L',
+5736=>'L',
+5737=>'L',
+5738=>'L',
+5739=>'L',
+5740=>'L',
+5741=>'L',
+5742=>'L',
+5743=>'L',
+5744=>'L',
+5745=>'L',
+5746=>'L',
+5747=>'L',
+5748=>'L',
+5749=>'L',
+5750=>'L',
+5760=>'WS',
+5761=>'L',
+5762=>'L',
+5763=>'L',
+5764=>'L',
+5765=>'L',
+5766=>'L',
+5767=>'L',
+5768=>'L',
+5769=>'L',
+5770=>'L',
+5771=>'L',
+5772=>'L',
+5773=>'L',
+5774=>'L',
+5775=>'L',
+5776=>'L',
+5777=>'L',
+5778=>'L',
+5779=>'L',
+5780=>'L',
+5781=>'L',
+5782=>'L',
+5783=>'L',
+5784=>'L',
+5785=>'L',
+5786=>'L',
+5787=>'ON',
+5788=>'ON',
+5792=>'L',
+5793=>'L',
+5794=>'L',
+5795=>'L',
+5796=>'L',
+5797=>'L',
+5798=>'L',
+5799=>'L',
+5800=>'L',
+5801=>'L',
+5802=>'L',
+5803=>'L',
+5804=>'L',
+5805=>'L',
+5806=>'L',
+5807=>'L',
+5808=>'L',
+5809=>'L',
+5810=>'L',
+5811=>'L',
+5812=>'L',
+5813=>'L',
+5814=>'L',
+5815=>'L',
+5816=>'L',
+5817=>'L',
+5818=>'L',
+5819=>'L',
+5820=>'L',
+5821=>'L',
+5822=>'L',
+5823=>'L',
+5824=>'L',
+5825=>'L',
+5826=>'L',
+5827=>'L',
+5828=>'L',
+5829=>'L',
+5830=>'L',
+5831=>'L',
+5832=>'L',
+5833=>'L',
+5834=>'L',
+5835=>'L',
+5836=>'L',
+5837=>'L',
+5838=>'L',
+5839=>'L',
+5840=>'L',
+5841=>'L',
+5842=>'L',
+5843=>'L',
+5844=>'L',
+5845=>'L',
+5846=>'L',
+5847=>'L',
+5848=>'L',
+5849=>'L',
+5850=>'L',
+5851=>'L',
+5852=>'L',
+5853=>'L',
+5854=>'L',
+5855=>'L',
+5856=>'L',
+5857=>'L',
+5858=>'L',
+5859=>'L',
+5860=>'L',
+5861=>'L',
+5862=>'L',
+5863=>'L',
+5864=>'L',
+5865=>'L',
+5866=>'L',
+5867=>'L',
+5868=>'L',
+5869=>'L',
+5870=>'L',
+5871=>'L',
+5872=>'L',
+5888=>'L',
+5889=>'L',
+5890=>'L',
+5891=>'L',
+5892=>'L',
+5893=>'L',
+5894=>'L',
+5895=>'L',
+5896=>'L',
+5897=>'L',
+5898=>'L',
+5899=>'L',
+5900=>'L',
+5902=>'L',
+5903=>'L',
+5904=>'L',
+5905=>'L',
+5906=>'NSM',
+5907=>'NSM',
+5908=>'NSM',
+5920=>'L',
+5921=>'L',
+5922=>'L',
+5923=>'L',
+5924=>'L',
+5925=>'L',
+5926=>'L',
+5927=>'L',
+5928=>'L',
+5929=>'L',
+5930=>'L',
+5931=>'L',
+5932=>'L',
+5933=>'L',
+5934=>'L',
+5935=>'L',
+5936=>'L',
+5937=>'L',
+5938=>'NSM',
+5939=>'NSM',
+5940=>'NSM',
+5941=>'L',
+5942=>'L',
+5952=>'L',
+5953=>'L',
+5954=>'L',
+5955=>'L',
+5956=>'L',
+5957=>'L',
+5958=>'L',
+5959=>'L',
+5960=>'L',
+5961=>'L',
+5962=>'L',
+5963=>'L',
+5964=>'L',
+5965=>'L',
+5966=>'L',
+5967=>'L',
+5968=>'L',
+5969=>'L',
+5970=>'NSM',
+5971=>'NSM',
+5984=>'L',
+5985=>'L',
+5986=>'L',
+5987=>'L',
+5988=>'L',
+5989=>'L',
+5990=>'L',
+5991=>'L',
+5992=>'L',
+5993=>'L',
+5994=>'L',
+5995=>'L',
+5996=>'L',
+5998=>'L',
+5999=>'L',
+6000=>'L',
+6002=>'NSM',
+6003=>'NSM',
+6016=>'L',
+6017=>'L',
+6018=>'L',
+6019=>'L',
+6020=>'L',
+6021=>'L',
+6022=>'L',
+6023=>'L',
+6024=>'L',
+6025=>'L',
+6026=>'L',
+6027=>'L',
+6028=>'L',
+6029=>'L',
+6030=>'L',
+6031=>'L',
+6032=>'L',
+6033=>'L',
+6034=>'L',
+6035=>'L',
+6036=>'L',
+6037=>'L',
+6038=>'L',
+6039=>'L',
+6040=>'L',
+6041=>'L',
+6042=>'L',
+6043=>'L',
+6044=>'L',
+6045=>'L',
+6046=>'L',
+6047=>'L',
+6048=>'L',
+6049=>'L',
+6050=>'L',
+6051=>'L',
+6052=>'L',
+6053=>'L',
+6054=>'L',
+6055=>'L',
+6056=>'L',
+6057=>'L',
+6058=>'L',
+6059=>'L',
+6060=>'L',
+6061=>'L',
+6062=>'L',
+6063=>'L',
+6064=>'L',
+6065=>'L',
+6066=>'L',
+6067=>'L',
+6068=>'L',
+6069=>'L',
+6070=>'L',
+6071=>'NSM',
+6072=>'NSM',
+6073=>'NSM',
+6074=>'NSM',
+6075=>'NSM',
+6076=>'NSM',
+6077=>'NSM',
+6078=>'L',
+6079=>'L',
+6080=>'L',
+6081=>'L',
+6082=>'L',
+6083=>'L',
+6084=>'L',
+6085=>'L',
+6086=>'NSM',
+6087=>'L',
+6088=>'L',
+6089=>'NSM',
+6090=>'NSM',
+6091=>'NSM',
+6092=>'NSM',
+6093=>'NSM',
+6094=>'NSM',
+6095=>'NSM',
+6096=>'NSM',
+6097=>'NSM',
+6098=>'NSM',
+6099=>'NSM',
+6100=>'L',
+6101=>'L',
+6102=>'L',
+6103=>'L',
+6104=>'L',
+6105=>'L',
+6106=>'L',
+6107=>'ET',
+6108=>'L',
+6109=>'NSM',
+6112=>'L',
+6113=>'L',
+6114=>'L',
+6115=>'L',
+6116=>'L',
+6117=>'L',
+6118=>'L',
+6119=>'L',
+6120=>'L',
+6121=>'L',
+6128=>'ON',
+6129=>'ON',
+6130=>'ON',
+6131=>'ON',
+6132=>'ON',
+6133=>'ON',
+6134=>'ON',
+6135=>'ON',
+6136=>'ON',
+6137=>'ON',
+6144=>'ON',
+6145=>'ON',
+6146=>'ON',
+6147=>'ON',
+6148=>'ON',
+6149=>'ON',
+6150=>'ON',
+6151=>'ON',
+6152=>'ON',
+6153=>'ON',
+6154=>'ON',
+6155=>'NSM',
+6156=>'NSM',
+6157=>'NSM',
+6158=>'WS',
+6160=>'L',
+6161=>'L',
+6162=>'L',
+6163=>'L',
+6164=>'L',
+6165=>'L',
+6166=>'L',
+6167=>'L',
+6168=>'L',
+6169=>'L',
+6176=>'L',
+6177=>'L',
+6178=>'L',
+6179=>'L',
+6180=>'L',
+6181=>'L',
+6182=>'L',
+6183=>'L',
+6184=>'L',
+6185=>'L',
+6186=>'L',
+6187=>'L',
+6188=>'L',
+6189=>'L',
+6190=>'L',
+6191=>'L',
+6192=>'L',
+6193=>'L',
+6194=>'L',
+6195=>'L',
+6196=>'L',
+6197=>'L',
+6198=>'L',
+6199=>'L',
+6200=>'L',
+6201=>'L',
+6202=>'L',
+6203=>'L',
+6204=>'L',
+6205=>'L',
+6206=>'L',
+6207=>'L',
+6208=>'L',
+6209=>'L',
+6210=>'L',
+6211=>'L',
+6212=>'L',
+6213=>'L',
+6214=>'L',
+6215=>'L',
+6216=>'L',
+6217=>'L',
+6218=>'L',
+6219=>'L',
+6220=>'L',
+6221=>'L',
+6222=>'L',
+6223=>'L',
+6224=>'L',
+6225=>'L',
+6226=>'L',
+6227=>'L',
+6228=>'L',
+6229=>'L',
+6230=>'L',
+6231=>'L',
+6232=>'L',
+6233=>'L',
+6234=>'L',
+6235=>'L',
+6236=>'L',
+6237=>'L',
+6238=>'L',
+6239=>'L',
+6240=>'L',
+6241=>'L',
+6242=>'L',
+6243=>'L',
+6244=>'L',
+6245=>'L',
+6246=>'L',
+6247=>'L',
+6248=>'L',
+6249=>'L',
+6250=>'L',
+6251=>'L',
+6252=>'L',
+6253=>'L',
+6254=>'L',
+6255=>'L',
+6256=>'L',
+6257=>'L',
+6258=>'L',
+6259=>'L',
+6260=>'L',
+6261=>'L',
+6262=>'L',
+6263=>'L',
+6272=>'L',
+6273=>'L',
+6274=>'L',
+6275=>'L',
+6276=>'L',
+6277=>'L',
+6278=>'L',
+6279=>'L',
+6280=>'L',
+6281=>'L',
+6282=>'L',
+6283=>'L',
+6284=>'L',
+6285=>'L',
+6286=>'L',
+6287=>'L',
+6288=>'L',
+6289=>'L',
+6290=>'L',
+6291=>'L',
+6292=>'L',
+6293=>'L',
+6294=>'L',
+6295=>'L',
+6296=>'L',
+6297=>'L',
+6298=>'L',
+6299=>'L',
+6300=>'L',
+6301=>'L',
+6302=>'L',
+6303=>'L',
+6304=>'L',
+6305=>'L',
+6306=>'L',
+6307=>'L',
+6308=>'L',
+6309=>'L',
+6310=>'L',
+6311=>'L',
+6312=>'L',
+6313=>'NSM',
+6400=>'L',
+6401=>'L',
+6402=>'L',
+6403=>'L',
+6404=>'L',
+6405=>'L',
+6406=>'L',
+6407=>'L',
+6408=>'L',
+6409=>'L',
+6410=>'L',
+6411=>'L',
+6412=>'L',
+6413=>'L',
+6414=>'L',
+6415=>'L',
+6416=>'L',
+6417=>'L',
+6418=>'L',
+6419=>'L',
+6420=>'L',
+6421=>'L',
+6422=>'L',
+6423=>'L',
+6424=>'L',
+6425=>'L',
+6426=>'L',
+6427=>'L',
+6428=>'L',
+6432=>'NSM',
+6433=>'NSM',
+6434=>'NSM',
+6435=>'L',
+6436=>'L',
+6437=>'L',
+6438=>'L',
+6439=>'NSM',
+6440=>'NSM',
+6441=>'NSM',
+6442=>'NSM',
+6443=>'NSM',
+6448=>'L',
+6449=>'L',
+6450=>'NSM',
+6451=>'L',
+6452=>'L',
+6453=>'L',
+6454=>'L',
+6455=>'L',
+6456=>'L',
+6457=>'NSM',
+6458=>'NSM',
+6459=>'NSM',
+6464=>'ON',
+6468=>'ON',
+6469=>'ON',
+6470=>'L',
+6471=>'L',
+6472=>'L',
+6473=>'L',
+6474=>'L',
+6475=>'L',
+6476=>'L',
+6477=>'L',
+6478=>'L',
+6479=>'L',
+6480=>'L',
+6481=>'L',
+6482=>'L',
+6483=>'L',
+6484=>'L',
+6485=>'L',
+6486=>'L',
+6487=>'L',
+6488=>'L',
+6489=>'L',
+6490=>'L',
+6491=>'L',
+6492=>'L',
+6493=>'L',
+6494=>'L',
+6495=>'L',
+6496=>'L',
+6497=>'L',
+6498=>'L',
+6499=>'L',
+6500=>'L',
+6501=>'L',
+6502=>'L',
+6503=>'L',
+6504=>'L',
+6505=>'L',
+6506=>'L',
+6507=>'L',
+6508=>'L',
+6509=>'L',
+6512=>'L',
+6513=>'L',
+6514=>'L',
+6515=>'L',
+6516=>'L',
+6528=>'L',
+6529=>'L',
+6530=>'L',
+6531=>'L',
+6532=>'L',
+6533=>'L',
+6534=>'L',
+6535=>'L',
+6536=>'L',
+6537=>'L',
+6538=>'L',
+6539=>'L',
+6540=>'L',
+6541=>'L',
+6542=>'L',
+6543=>'L',
+6544=>'L',
+6545=>'L',
+6546=>'L',
+6547=>'L',
+6548=>'L',
+6549=>'L',
+6550=>'L',
+6551=>'L',
+6552=>'L',
+6553=>'L',
+6554=>'L',
+6555=>'L',
+6556=>'L',
+6557=>'L',
+6558=>'L',
+6559=>'L',
+6560=>'L',
+6561=>'L',
+6562=>'L',
+6563=>'L',
+6564=>'L',
+6565=>'L',
+6566=>'L',
+6567=>'L',
+6568=>'L',
+6569=>'L',
+6576=>'L',
+6577=>'L',
+6578=>'L',
+6579=>'L',
+6580=>'L',
+6581=>'L',
+6582=>'L',
+6583=>'L',
+6584=>'L',
+6585=>'L',
+6586=>'L',
+6587=>'L',
+6588=>'L',
+6589=>'L',
+6590=>'L',
+6591=>'L',
+6592=>'L',
+6593=>'L',
+6594=>'L',
+6595=>'L',
+6596=>'L',
+6597=>'L',
+6598=>'L',
+6599=>'L',
+6600=>'L',
+6601=>'L',
+6608=>'L',
+6609=>'L',
+6610=>'L',
+6611=>'L',
+6612=>'L',
+6613=>'L',
+6614=>'L',
+6615=>'L',
+6616=>'L',
+6617=>'L',
+6622=>'ON',
+6623=>'ON',
+6624=>'ON',
+6625=>'ON',
+6626=>'ON',
+6627=>'ON',
+6628=>'ON',
+6629=>'ON',
+6630=>'ON',
+6631=>'ON',
+6632=>'ON',
+6633=>'ON',
+6634=>'ON',
+6635=>'ON',
+6636=>'ON',
+6637=>'ON',
+6638=>'ON',
+6639=>'ON',
+6640=>'ON',
+6641=>'ON',
+6642=>'ON',
+6643=>'ON',
+6644=>'ON',
+6645=>'ON',
+6646=>'ON',
+6647=>'ON',
+6648=>'ON',
+6649=>'ON',
+6650=>'ON',
+6651=>'ON',
+6652=>'ON',
+6653=>'ON',
+6654=>'ON',
+6655=>'ON',
+6656=>'L',
+6657=>'L',
+6658=>'L',
+6659=>'L',
+6660=>'L',
+6661=>'L',
+6662=>'L',
+6663=>'L',
+6664=>'L',
+6665=>'L',
+6666=>'L',
+6667=>'L',
+6668=>'L',
+6669=>'L',
+6670=>'L',
+6671=>'L',
+6672=>'L',
+6673=>'L',
+6674=>'L',
+6675=>'L',
+6676=>'L',
+6677=>'L',
+6678=>'L',
+6679=>'NSM',
+6680=>'NSM',
+6681=>'L',
+6682=>'L',
+6683=>'L',
+6686=>'L',
+6687=>'L',
+6912=>'NSM',
+6913=>'NSM',
+6914=>'NSM',
+6915=>'NSM',
+6916=>'L',
+6917=>'L',
+6918=>'L',
+6919=>'L',
+6920=>'L',
+6921=>'L',
+6922=>'L',
+6923=>'L',
+6924=>'L',
+6925=>'L',
+6926=>'L',
+6927=>'L',
+6928=>'L',
+6929=>'L',
+6930=>'L',
+6931=>'L',
+6932=>'L',
+6933=>'L',
+6934=>'L',
+6935=>'L',
+6936=>'L',
+6937=>'L',
+6938=>'L',
+6939=>'L',
+6940=>'L',
+6941=>'L',
+6942=>'L',
+6943=>'L',
+6944=>'L',
+6945=>'L',
+6946=>'L',
+6947=>'L',
+6948=>'L',
+6949=>'L',
+6950=>'L',
+6951=>'L',
+6952=>'L',
+6953=>'L',
+6954=>'L',
+6955=>'L',
+6956=>'L',
+6957=>'L',
+6958=>'L',
+6959=>'L',
+6960=>'L',
+6961=>'L',
+6962=>'L',
+6963=>'L',
+6964=>'NSM',
+6965=>'L',
+6966=>'NSM',
+6967=>'NSM',
+6968=>'NSM',
+6969=>'NSM',
+6970=>'NSM',
+6971=>'L',
+6972=>'NSM',
+6973=>'L',
+6974=>'L',
+6975=>'L',
+6976=>'L',
+6977=>'L',
+6978=>'NSM',
+6979=>'L',
+6980=>'L',
+6981=>'L',
+6982=>'L',
+6983=>'L',
+6984=>'L',
+6985=>'L',
+6986=>'L',
+6987=>'L',
+6992=>'L',
+6993=>'L',
+6994=>'L',
+6995=>'L',
+6996=>'L',
+6997=>'L',
+6998=>'L',
+6999=>'L',
+7000=>'L',
+7001=>'L',
+7002=>'L',
+7003=>'L',
+7004=>'L',
+7005=>'L',
+7006=>'L',
+7007=>'L',
+7008=>'L',
+7009=>'L',
+7010=>'L',
+7011=>'L',
+7012=>'L',
+7013=>'L',
+7014=>'L',
+7015=>'L',
+7016=>'L',
+7017=>'L',
+7018=>'L',
+7019=>'NSM',
+7020=>'NSM',
+7021=>'NSM',
+7022=>'NSM',
+7023=>'NSM',
+7024=>'NSM',
+7025=>'NSM',
+7026=>'NSM',
+7027=>'NSM',
+7028=>'L',
+7029=>'L',
+7030=>'L',
+7031=>'L',
+7032=>'L',
+7033=>'L',
+7034=>'L',
+7035=>'L',
+7036=>'L',
+7424=>'L',
+7425=>'L',
+7426=>'L',
+7427=>'L',
+7428=>'L',
+7429=>'L',
+7430=>'L',
+7431=>'L',
+7432=>'L',
+7433=>'L',
+7434=>'L',
+7435=>'L',
+7436=>'L',
+7437=>'L',
+7438=>'L',
+7439=>'L',
+7440=>'L',
+7441=>'L',
+7442=>'L',
+7443=>'L',
+7444=>'L',
+7445=>'L',
+7446=>'L',
+7447=>'L',
+7448=>'L',
+7449=>'L',
+7450=>'L',
+7451=>'L',
+7452=>'L',
+7453=>'L',
+7454=>'L',
+7455=>'L',
+7456=>'L',
+7457=>'L',
+7458=>'L',
+7459=>'L',
+7460=>'L',
+7461=>'L',
+7462=>'L',
+7463=>'L',
+7464=>'L',
+7465=>'L',
+7466=>'L',
+7467=>'L',
+7468=>'L',
+7469=>'L',
+7470=>'L',
+7471=>'L',
+7472=>'L',
+7473=>'L',
+7474=>'L',
+7475=>'L',
+7476=>'L',
+7477=>'L',
+7478=>'L',
+7479=>'L',
+7480=>'L',
+7481=>'L',
+7482=>'L',
+7483=>'L',
+7484=>'L',
+7485=>'L',
+7486=>'L',
+7487=>'L',
+7488=>'L',
+7489=>'L',
+7490=>'L',
+7491=>'L',
+7492=>'L',
+7493=>'L',
+7494=>'L',
+7495=>'L',
+7496=>'L',
+7497=>'L',
+7498=>'L',
+7499=>'L',
+7500=>'L',
+7501=>'L',
+7502=>'L',
+7503=>'L',
+7504=>'L',
+7505=>'L',
+7506=>'L',
+7507=>'L',
+7508=>'L',
+7509=>'L',
+7510=>'L',
+7511=>'L',
+7512=>'L',
+7513=>'L',
+7514=>'L',
+7515=>'L',
+7516=>'L',
+7517=>'L',
+7518=>'L',
+7519=>'L',
+7520=>'L',
+7521=>'L',
+7522=>'L',
+7523=>'L',
+7524=>'L',
+7525=>'L',
+7526=>'L',
+7527=>'L',
+7528=>'L',
+7529=>'L',
+7530=>'L',
+7531=>'L',
+7532=>'L',
+7533=>'L',
+7534=>'L',
+7535=>'L',
+7536=>'L',
+7537=>'L',
+7538=>'L',
+7539=>'L',
+7540=>'L',
+7541=>'L',
+7542=>'L',
+7543=>'L',
+7544=>'L',
+7545=>'L',
+7546=>'L',
+7547=>'L',
+7548=>'L',
+7549=>'L',
+7550=>'L',
+7551=>'L',
+7552=>'L',
+7553=>'L',
+7554=>'L',
+7555=>'L',
+7556=>'L',
+7557=>'L',
+7558=>'L',
+7559=>'L',
+7560=>'L',
+7561=>'L',
+7562=>'L',
+7563=>'L',
+7564=>'L',
+7565=>'L',
+7566=>'L',
+7567=>'L',
+7568=>'L',
+7569=>'L',
+7570=>'L',
+7571=>'L',
+7572=>'L',
+7573=>'L',
+7574=>'L',
+7575=>'L',
+7576=>'L',
+7577=>'L',
+7578=>'L',
+7579=>'L',
+7580=>'L',
+7581=>'L',
+7582=>'L',
+7583=>'L',
+7584=>'L',
+7585=>'L',
+7586=>'L',
+7587=>'L',
+7588=>'L',
+7589=>'L',
+7590=>'L',
+7591=>'L',
+7592=>'L',
+7593=>'L',
+7594=>'L',
+7595=>'L',
+7596=>'L',
+7597=>'L',
+7598=>'L',
+7599=>'L',
+7600=>'L',
+7601=>'L',
+7602=>'L',
+7603=>'L',
+7604=>'L',
+7605=>'L',
+7606=>'L',
+7607=>'L',
+7608=>'L',
+7609=>'L',
+7610=>'L',
+7611=>'L',
+7612=>'L',
+7613=>'L',
+7614=>'L',
+7615=>'L',
+7616=>'NSM',
+7617=>'NSM',
+7618=>'NSM',
+7619=>'NSM',
+7620=>'NSM',
+7621=>'NSM',
+7622=>'NSM',
+7623=>'NSM',
+7624=>'NSM',
+7625=>'NSM',
+7626=>'NSM',
+7678=>'NSM',
+7679=>'NSM',
+7680=>'L',
+7681=>'L',
+7682=>'L',
+7683=>'L',
+7684=>'L',
+7685=>'L',
+7686=>'L',
+7687=>'L',
+7688=>'L',
+7689=>'L',
+7690=>'L',
+7691=>'L',
+7692=>'L',
+7693=>'L',
+7694=>'L',
+7695=>'L',
+7696=>'L',
+7697=>'L',
+7698=>'L',
+7699=>'L',
+7700=>'L',
+7701=>'L',
+7702=>'L',
+7703=>'L',
+7704=>'L',
+7705=>'L',
+7706=>'L',
+7707=>'L',
+7708=>'L',
+7709=>'L',
+7710=>'L',
+7711=>'L',
+7712=>'L',
+7713=>'L',
+7714=>'L',
+7715=>'L',
+7716=>'L',
+7717=>'L',
+7718=>'L',
+7719=>'L',
+7720=>'L',
+7721=>'L',
+7722=>'L',
+7723=>'L',
+7724=>'L',
+7725=>'L',
+7726=>'L',
+7727=>'L',
+7728=>'L',
+7729=>'L',
+7730=>'L',
+7731=>'L',
+7732=>'L',
+7733=>'L',
+7734=>'L',
+7735=>'L',
+7736=>'L',
+7737=>'L',
+7738=>'L',
+7739=>'L',
+7740=>'L',
+7741=>'L',
+7742=>'L',
+7743=>'L',
+7744=>'L',
+7745=>'L',
+7746=>'L',
+7747=>'L',
+7748=>'L',
+7749=>'L',
+7750=>'L',
+7751=>'L',
+7752=>'L',
+7753=>'L',
+7754=>'L',
+7755=>'L',
+7756=>'L',
+7757=>'L',
+7758=>'L',
+7759=>'L',
+7760=>'L',
+7761=>'L',
+7762=>'L',
+7763=>'L',
+7764=>'L',
+7765=>'L',
+7766=>'L',
+7767=>'L',
+7768=>'L',
+7769=>'L',
+7770=>'L',
+7771=>'L',
+7772=>'L',
+7773=>'L',
+7774=>'L',
+7775=>'L',
+7776=>'L',
+7777=>'L',
+7778=>'L',
+7779=>'L',
+7780=>'L',
+7781=>'L',
+7782=>'L',
+7783=>'L',
+7784=>'L',
+7785=>'L',
+7786=>'L',
+7787=>'L',
+7788=>'L',
+7789=>'L',
+7790=>'L',
+7791=>'L',
+7792=>'L',
+7793=>'L',
+7794=>'L',
+7795=>'L',
+7796=>'L',
+7797=>'L',
+7798=>'L',
+7799=>'L',
+7800=>'L',
+7801=>'L',
+7802=>'L',
+7803=>'L',
+7804=>'L',
+7805=>'L',
+7806=>'L',
+7807=>'L',
+7808=>'L',
+7809=>'L',
+7810=>'L',
+7811=>'L',
+7812=>'L',
+7813=>'L',
+7814=>'L',
+7815=>'L',
+7816=>'L',
+7817=>'L',
+7818=>'L',
+7819=>'L',
+7820=>'L',
+7821=>'L',
+7822=>'L',
+7823=>'L',
+7824=>'L',
+7825=>'L',
+7826=>'L',
+7827=>'L',
+7828=>'L',
+7829=>'L',
+7830=>'L',
+7831=>'L',
+7832=>'L',
+7833=>'L',
+7834=>'L',
+7835=>'L',
+7840=>'L',
+7841=>'L',
+7842=>'L',
+7843=>'L',
+7844=>'L',
+7845=>'L',
+7846=>'L',
+7847=>'L',
+7848=>'L',
+7849=>'L',
+7850=>'L',
+7851=>'L',
+7852=>'L',
+7853=>'L',
+7854=>'L',
+7855=>'L',
+7856=>'L',
+7857=>'L',
+7858=>'L',
+7859=>'L',
+7860=>'L',
+7861=>'L',
+7862=>'L',
+7863=>'L',
+7864=>'L',
+7865=>'L',
+7866=>'L',
+7867=>'L',
+7868=>'L',
+7869=>'L',
+7870=>'L',
+7871=>'L',
+7872=>'L',
+7873=>'L',
+7874=>'L',
+7875=>'L',
+7876=>'L',
+7877=>'L',
+7878=>'L',
+7879=>'L',
+7880=>'L',
+7881=>'L',
+7882=>'L',
+7883=>'L',
+7884=>'L',
+7885=>'L',
+7886=>'L',
+7887=>'L',
+7888=>'L',
+7889=>'L',
+7890=>'L',
+7891=>'L',
+7892=>'L',
+7893=>'L',
+7894=>'L',
+7895=>'L',
+7896=>'L',
+7897=>'L',
+7898=>'L',
+7899=>'L',
+7900=>'L',
+7901=>'L',
+7902=>'L',
+7903=>'L',
+7904=>'L',
+7905=>'L',
+7906=>'L',
+7907=>'L',
+7908=>'L',
+7909=>'L',
+7910=>'L',
+7911=>'L',
+7912=>'L',
+7913=>'L',
+7914=>'L',
+7915=>'L',
+7916=>'L',
+7917=>'L',
+7918=>'L',
+7919=>'L',
+7920=>'L',
+7921=>'L',
+7922=>'L',
+7923=>'L',
+7924=>'L',
+7925=>'L',
+7926=>'L',
+7927=>'L',
+7928=>'L',
+7929=>'L',
+7936=>'L',
+7937=>'L',
+7938=>'L',
+7939=>'L',
+7940=>'L',
+7941=>'L',
+7942=>'L',
+7943=>'L',
+7944=>'L',
+7945=>'L',
+7946=>'L',
+7947=>'L',
+7948=>'L',
+7949=>'L',
+7950=>'L',
+7951=>'L',
+7952=>'L',
+7953=>'L',
+7954=>'L',
+7955=>'L',
+7956=>'L',
+7957=>'L',
+7960=>'L',
+7961=>'L',
+7962=>'L',
+7963=>'L',
+7964=>'L',
+7965=>'L',
+7968=>'L',
+7969=>'L',
+7970=>'L',
+7971=>'L',
+7972=>'L',
+7973=>'L',
+7974=>'L',
+7975=>'L',
+7976=>'L',
+7977=>'L',
+7978=>'L',
+7979=>'L',
+7980=>'L',
+7981=>'L',
+7982=>'L',
+7983=>'L',
+7984=>'L',
+7985=>'L',
+7986=>'L',
+7987=>'L',
+7988=>'L',
+7989=>'L',
+7990=>'L',
+7991=>'L',
+7992=>'L',
+7993=>'L',
+7994=>'L',
+7995=>'L',
+7996=>'L',
+7997=>'L',
+7998=>'L',
+7999=>'L',
+8000=>'L',
+8001=>'L',
+8002=>'L',
+8003=>'L',
+8004=>'L',
+8005=>'L',
+8008=>'L',
+8009=>'L',
+8010=>'L',
+8011=>'L',
+8012=>'L',
+8013=>'L',
+8016=>'L',
+8017=>'L',
+8018=>'L',
+8019=>'L',
+8020=>'L',
+8021=>'L',
+8022=>'L',
+8023=>'L',
+8025=>'L',
+8027=>'L',
+8029=>'L',
+8031=>'L',
+8032=>'L',
+8033=>'L',
+8034=>'L',
+8035=>'L',
+8036=>'L',
+8037=>'L',
+8038=>'L',
+8039=>'L',
+8040=>'L',
+8041=>'L',
+8042=>'L',
+8043=>'L',
+8044=>'L',
+8045=>'L',
+8046=>'L',
+8047=>'L',
+8048=>'L',
+8049=>'L',
+8050=>'L',
+8051=>'L',
+8052=>'L',
+8053=>'L',
+8054=>'L',
+8055=>'L',
+8056=>'L',
+8057=>'L',
+8058=>'L',
+8059=>'L',
+8060=>'L',
+8061=>'L',
+8064=>'L',
+8065=>'L',
+8066=>'L',
+8067=>'L',
+8068=>'L',
+8069=>'L',
+8070=>'L',
+8071=>'L',
+8072=>'L',
+8073=>'L',
+8074=>'L',
+8075=>'L',
+8076=>'L',
+8077=>'L',
+8078=>'L',
+8079=>'L',
+8080=>'L',
+8081=>'L',
+8082=>'L',
+8083=>'L',
+8084=>'L',
+8085=>'L',
+8086=>'L',
+8087=>'L',
+8088=>'L',
+8089=>'L',
+8090=>'L',
+8091=>'L',
+8092=>'L',
+8093=>'L',
+8094=>'L',
+8095=>'L',
+8096=>'L',
+8097=>'L',
+8098=>'L',
+8099=>'L',
+8100=>'L',
+8101=>'L',
+8102=>'L',
+8103=>'L',
+8104=>'L',
+8105=>'L',
+8106=>'L',
+8107=>'L',
+8108=>'L',
+8109=>'L',
+8110=>'L',
+8111=>'L',
+8112=>'L',
+8113=>'L',
+8114=>'L',
+8115=>'L',
+8116=>'L',
+8118=>'L',
+8119=>'L',
+8120=>'L',
+8121=>'L',
+8122=>'L',
+8123=>'L',
+8124=>'L',
+8125=>'ON',
+8126=>'L',
+8127=>'ON',
+8128=>'ON',
+8129=>'ON',
+8130=>'L',
+8131=>'L',
+8132=>'L',
+8134=>'L',
+8135=>'L',
+8136=>'L',
+8137=>'L',
+8138=>'L',
+8139=>'L',
+8140=>'L',
+8141=>'ON',
+8142=>'ON',
+8143=>'ON',
+8144=>'L',
+8145=>'L',
+8146=>'L',
+8147=>'L',
+8150=>'L',
+8151=>'L',
+8152=>'L',
+8153=>'L',
+8154=>'L',
+8155=>'L',
+8157=>'ON',
+8158=>'ON',
+8159=>'ON',
+8160=>'L',
+8161=>'L',
+8162=>'L',
+8163=>'L',
+8164=>'L',
+8165=>'L',
+8166=>'L',
+8167=>'L',
+8168=>'L',
+8169=>'L',
+8170=>'L',
+8171=>'L',
+8172=>'L',
+8173=>'ON',
+8174=>'ON',
+8175=>'ON',
+8178=>'L',
+8179=>'L',
+8180=>'L',
+8182=>'L',
+8183=>'L',
+8184=>'L',
+8185=>'L',
+8186=>'L',
+8187=>'L',
+8188=>'L',
+8189=>'ON',
+8190=>'ON',
+8192=>'WS',
+8193=>'WS',
+8194=>'WS',
+8195=>'WS',
+8196=>'WS',
+8197=>'WS',
+8198=>'WS',
+8199=>'WS',
+8200=>'WS',
+8201=>'WS',
+8202=>'WS',
+8203=>'BN',
+8204=>'BN',
+8205=>'BN',
+8206=>'L',
+8207=>'R',
+8208=>'ON',
+8209=>'ON',
+8210=>'ON',
+8211=>'ON',
+8212=>'ON',
+8213=>'ON',
+8214=>'ON',
+8215=>'ON',
+8216=>'ON',
+8217=>'ON',
+8218=>'ON',
+8219=>'ON',
+8220=>'ON',
+8221=>'ON',
+8222=>'ON',
+8223=>'ON',
+8224=>'ON',
+8225=>'ON',
+8226=>'ON',
+8227=>'ON',
+8228=>'ON',
+8229=>'ON',
+8230=>'ON',
+8231=>'ON',
+8232=>'WS',
+8233=>'B',
+8234=>'LRE',
+8235=>'RLE',
+8236=>'PDF',
+8237=>'LRO',
+8238=>'RLO',
+8239=>'CS',
+8240=>'ET',
+8241=>'ET',
+8242=>'ET',
+8243=>'ET',
+8244=>'ET',
+8245=>'ON',
+8246=>'ON',
+8247=>'ON',
+8248=>'ON',
+8249=>'ON',
+8250=>'ON',
+8251=>'ON',
+8252=>'ON',
+8253=>'ON',
+8254=>'ON',
+8255=>'ON',
+8256=>'ON',
+8257=>'ON',
+8258=>'ON',
+8259=>'ON',
+8260=>'CS',
+8261=>'ON',
+8262=>'ON',
+8263=>'ON',
+8264=>'ON',
+8265=>'ON',
+8266=>'ON',
+8267=>'ON',
+8268=>'ON',
+8269=>'ON',
+8270=>'ON',
+8271=>'ON',
+8272=>'ON',
+8273=>'ON',
+8274=>'ON',
+8275=>'ON',
+8276=>'ON',
+8277=>'ON',
+8278=>'ON',
+8279=>'ON',
+8280=>'ON',
+8281=>'ON',
+8282=>'ON',
+8283=>'ON',
+8284=>'ON',
+8285=>'ON',
+8286=>'ON',
+8287=>'WS',
+8288=>'BN',
+8289=>'BN',
+8290=>'BN',
+8291=>'BN',
+8298=>'BN',
+8299=>'BN',
+8300=>'BN',
+8301=>'BN',
+8302=>'BN',
+8303=>'BN',
+8304=>'EN',
+8305=>'L',
+8308=>'EN',
+8309=>'EN',
+8310=>'EN',
+8311=>'EN',
+8312=>'EN',
+8313=>'EN',
+8314=>'ES',
+8315=>'ES',
+8316=>'ON',
+8317=>'ON',
+8318=>'ON',
+8319=>'L',
+8320=>'EN',
+8321=>'EN',
+8322=>'EN',
+8323=>'EN',
+8324=>'EN',
+8325=>'EN',
+8326=>'EN',
+8327=>'EN',
+8328=>'EN',
+8329=>'EN',
+8330=>'ES',
+8331=>'ES',
+8332=>'ON',
+8333=>'ON',
+8334=>'ON',
+8336=>'L',
+8337=>'L',
+8338=>'L',
+8339=>'L',
+8340=>'L',
+8352=>'ET',
+8353=>'ET',
+8354=>'ET',
+8355=>'ET',
+8356=>'ET',
+8357=>'ET',
+8358=>'ET',
+8359=>'ET',
+8360=>'ET',
+8361=>'ET',
+8362=>'ET',
+8363=>'ET',
+8364=>'ET',
+8365=>'ET',
+8366=>'ET',
+8367=>'ET',
+8368=>'ET',
+8369=>'ET',
+8370=>'ET',
+8371=>'ET',
+8372=>'ET',
+8373=>'ET',
+8400=>'NSM',
+8401=>'NSM',
+8402=>'NSM',
+8403=>'NSM',
+8404=>'NSM',
+8405=>'NSM',
+8406=>'NSM',
+8407=>'NSM',
+8408=>'NSM',
+8409=>'NSM',
+8410=>'NSM',
+8411=>'NSM',
+8412=>'NSM',
+8413=>'NSM',
+8414=>'NSM',
+8415=>'NSM',
+8416=>'NSM',
+8417=>'NSM',
+8418=>'NSM',
+8419=>'NSM',
+8420=>'NSM',
+8421=>'NSM',
+8422=>'NSM',
+8423=>'NSM',
+8424=>'NSM',
+8425=>'NSM',
+8426=>'NSM',
+8427=>'NSM',
+8428=>'NSM',
+8429=>'NSM',
+8430=>'NSM',
+8431=>'NSM',
+8448=>'ON',
+8449=>'ON',
+8450=>'L',
+8451=>'ON',
+8452=>'ON',
+8453=>'ON',
+8454=>'ON',
+8455=>'L',
+8456=>'ON',
+8457=>'ON',
+8458=>'L',
+8459=>'L',
+8460=>'L',
+8461=>'L',
+8462=>'L',
+8463=>'L',
+8464=>'L',
+8465=>'L',
+8466=>'L',
+8467=>'L',
+8468=>'ON',
+8469=>'L',
+8470=>'ON',
+8471=>'ON',
+8472=>'ON',
+8473=>'L',
+8474=>'L',
+8475=>'L',
+8476=>'L',
+8477=>'L',
+8478=>'ON',
+8479=>'ON',
+8480=>'ON',
+8481=>'ON',
+8482=>'ON',
+8483=>'ON',
+8484=>'L',
+8485=>'ON',
+8486=>'L',
+8487=>'ON',
+8488=>'L',
+8489=>'ON',
+8490=>'L',
+8491=>'L',
+8492=>'L',
+8493=>'L',
+8494=>'ET',
+8495=>'L',
+8496=>'L',
+8497=>'L',
+8498=>'L',
+8499=>'L',
+8500=>'L',
+8501=>'L',
+8502=>'L',
+8503=>'L',
+8504=>'L',
+8505=>'L',
+8506=>'ON',
+8507=>'ON',
+8508=>'L',
+8509=>'L',
+8510=>'L',
+8511=>'L',
+8512=>'ON',
+8513=>'ON',
+8514=>'ON',
+8515=>'ON',
+8516=>'ON',
+8517=>'L',
+8518=>'L',
+8519=>'L',
+8520=>'L',
+8521=>'L',
+8522=>'ON',
+8523=>'ON',
+8524=>'ON',
+8525=>'ON',
+8526=>'L',
+8531=>'ON',
+8532=>'ON',
+8533=>'ON',
+8534=>'ON',
+8535=>'ON',
+8536=>'ON',
+8537=>'ON',
+8538=>'ON',
+8539=>'ON',
+8540=>'ON',
+8541=>'ON',
+8542=>'ON',
+8543=>'ON',
+8544=>'L',
+8545=>'L',
+8546=>'L',
+8547=>'L',
+8548=>'L',
+8549=>'L',
+8550=>'L',
+8551=>'L',
+8552=>'L',
+8553=>'L',
+8554=>'L',
+8555=>'L',
+8556=>'L',
+8557=>'L',
+8558=>'L',
+8559=>'L',
+8560=>'L',
+8561=>'L',
+8562=>'L',
+8563=>'L',
+8564=>'L',
+8565=>'L',
+8566=>'L',
+8567=>'L',
+8568=>'L',
+8569=>'L',
+8570=>'L',
+8571=>'L',
+8572=>'L',
+8573=>'L',
+8574=>'L',
+8575=>'L',
+8576=>'L',
+8577=>'L',
+8578=>'L',
+8579=>'L',
+8580=>'L',
+8592=>'ON',
+8593=>'ON',
+8594=>'ON',
+8595=>'ON',
+8596=>'ON',
+8597=>'ON',
+8598=>'ON',
+8599=>'ON',
+8600=>'ON',
+8601=>'ON',
+8602=>'ON',
+8603=>'ON',
+8604=>'ON',
+8605=>'ON',
+8606=>'ON',
+8607=>'ON',
+8608=>'ON',
+8609=>'ON',
+8610=>'ON',
+8611=>'ON',
+8612=>'ON',
+8613=>'ON',
+8614=>'ON',
+8615=>'ON',
+8616=>'ON',
+8617=>'ON',
+8618=>'ON',
+8619=>'ON',
+8620=>'ON',
+8621=>'ON',
+8622=>'ON',
+8623=>'ON',
+8624=>'ON',
+8625=>'ON',
+8626=>'ON',
+8627=>'ON',
+8628=>'ON',
+8629=>'ON',
+8630=>'ON',
+8631=>'ON',
+8632=>'ON',
+8633=>'ON',
+8634=>'ON',
+8635=>'ON',
+8636=>'ON',
+8637=>'ON',
+8638=>'ON',
+8639=>'ON',
+8640=>'ON',
+8641=>'ON',
+8642=>'ON',
+8643=>'ON',
+8644=>'ON',
+8645=>'ON',
+8646=>'ON',
+8647=>'ON',
+8648=>'ON',
+8649=>'ON',
+8650=>'ON',
+8651=>'ON',
+8652=>'ON',
+8653=>'ON',
+8654=>'ON',
+8655=>'ON',
+8656=>'ON',
+8657=>'ON',
+8658=>'ON',
+8659=>'ON',
+8660=>'ON',
+8661=>'ON',
+8662=>'ON',
+8663=>'ON',
+8664=>'ON',
+8665=>'ON',
+8666=>'ON',
+8667=>'ON',
+8668=>'ON',
+8669=>'ON',
+8670=>'ON',
+8671=>'ON',
+8672=>'ON',
+8673=>'ON',
+8674=>'ON',
+8675=>'ON',
+8676=>'ON',
+8677=>'ON',
+8678=>'ON',
+8679=>'ON',
+8680=>'ON',
+8681=>'ON',
+8682=>'ON',
+8683=>'ON',
+8684=>'ON',
+8685=>'ON',
+8686=>'ON',
+8687=>'ON',
+8688=>'ON',
+8689=>'ON',
+8690=>'ON',
+8691=>'ON',
+8692=>'ON',
+8693=>'ON',
+8694=>'ON',
+8695=>'ON',
+8696=>'ON',
+8697=>'ON',
+8698=>'ON',
+8699=>'ON',
+8700=>'ON',
+8701=>'ON',
+8702=>'ON',
+8703=>'ON',
+8704=>'ON',
+8705=>'ON',
+8706=>'ON',
+8707=>'ON',
+8708=>'ON',
+8709=>'ON',
+8710=>'ON',
+8711=>'ON',
+8712=>'ON',
+8713=>'ON',
+8714=>'ON',
+8715=>'ON',
+8716=>'ON',
+8717=>'ON',
+8718=>'ON',
+8719=>'ON',
+8720=>'ON',
+8721=>'ON',
+8722=>'ES',
+8723=>'ET',
+8724=>'ON',
+8725=>'ON',
+8726=>'ON',
+8727=>'ON',
+8728=>'ON',
+8729=>'ON',
+8730=>'ON',
+8731=>'ON',
+8732=>'ON',
+8733=>'ON',
+8734=>'ON',
+8735=>'ON',
+8736=>'ON',
+8737=>'ON',
+8738=>'ON',
+8739=>'ON',
+8740=>'ON',
+8741=>'ON',
+8742=>'ON',
+8743=>'ON',
+8744=>'ON',
+8745=>'ON',
+8746=>'ON',
+8747=>'ON',
+8748=>'ON',
+8749=>'ON',
+8750=>'ON',
+8751=>'ON',
+8752=>'ON',
+8753=>'ON',
+8754=>'ON',
+8755=>'ON',
+8756=>'ON',
+8757=>'ON',
+8758=>'ON',
+8759=>'ON',
+8760=>'ON',
+8761=>'ON',
+8762=>'ON',
+8763=>'ON',
+8764=>'ON',
+8765=>'ON',
+8766=>'ON',
+8767=>'ON',
+8768=>'ON',
+8769=>'ON',
+8770=>'ON',
+8771=>'ON',
+8772=>'ON',
+8773=>'ON',
+8774=>'ON',
+8775=>'ON',
+8776=>'ON',
+8777=>'ON',
+8778=>'ON',
+8779=>'ON',
+8780=>'ON',
+8781=>'ON',
+8782=>'ON',
+8783=>'ON',
+8784=>'ON',
+8785=>'ON',
+8786=>'ON',
+8787=>'ON',
+8788=>'ON',
+8789=>'ON',
+8790=>'ON',
+8791=>'ON',
+8792=>'ON',
+8793=>'ON',
+8794=>'ON',
+8795=>'ON',
+8796=>'ON',
+8797=>'ON',
+8798=>'ON',
+8799=>'ON',
+8800=>'ON',
+8801=>'ON',
+8802=>'ON',
+8803=>'ON',
+8804=>'ON',
+8805=>'ON',
+8806=>'ON',
+8807=>'ON',
+8808=>'ON',
+8809=>'ON',
+8810=>'ON',
+8811=>'ON',
+8812=>'ON',
+8813=>'ON',
+8814=>'ON',
+8815=>'ON',
+8816=>'ON',
+8817=>'ON',
+8818=>'ON',
+8819=>'ON',
+8820=>'ON',
+8821=>'ON',
+8822=>'ON',
+8823=>'ON',
+8824=>'ON',
+8825=>'ON',
+8826=>'ON',
+8827=>'ON',
+8828=>'ON',
+8829=>'ON',
+8830=>'ON',
+8831=>'ON',
+8832=>'ON',
+8833=>'ON',
+8834=>'ON',
+8835=>'ON',
+8836=>'ON',
+8837=>'ON',
+8838=>'ON',
+8839=>'ON',
+8840=>'ON',
+8841=>'ON',
+8842=>'ON',
+8843=>'ON',
+8844=>'ON',
+8845=>'ON',
+8846=>'ON',
+8847=>'ON',
+8848=>'ON',
+8849=>'ON',
+8850=>'ON',
+8851=>'ON',
+8852=>'ON',
+8853=>'ON',
+8854=>'ON',
+8855=>'ON',
+8856=>'ON',
+8857=>'ON',
+8858=>'ON',
+8859=>'ON',
+8860=>'ON',
+8861=>'ON',
+8862=>'ON',
+8863=>'ON',
+8864=>'ON',
+8865=>'ON',
+8866=>'ON',
+8867=>'ON',
+8868=>'ON',
+8869=>'ON',
+8870=>'ON',
+8871=>'ON',
+8872=>'ON',
+8873=>'ON',
+8874=>'ON',
+8875=>'ON',
+8876=>'ON',
+8877=>'ON',
+8878=>'ON',
+8879=>'ON',
+8880=>'ON',
+8881=>'ON',
+8882=>'ON',
+8883=>'ON',
+8884=>'ON',
+8885=>'ON',
+8886=>'ON',
+8887=>'ON',
+8888=>'ON',
+8889=>'ON',
+8890=>'ON',
+8891=>'ON',
+8892=>'ON',
+8893=>'ON',
+8894=>'ON',
+8895=>'ON',
+8896=>'ON',
+8897=>'ON',
+8898=>'ON',
+8899=>'ON',
+8900=>'ON',
+8901=>'ON',
+8902=>'ON',
+8903=>'ON',
+8904=>'ON',
+8905=>'ON',
+8906=>'ON',
+8907=>'ON',
+8908=>'ON',
+8909=>'ON',
+8910=>'ON',
+8911=>'ON',
+8912=>'ON',
+8913=>'ON',
+8914=>'ON',
+8915=>'ON',
+8916=>'ON',
+8917=>'ON',
+8918=>'ON',
+8919=>'ON',
+8920=>'ON',
+8921=>'ON',
+8922=>'ON',
+8923=>'ON',
+8924=>'ON',
+8925=>'ON',
+8926=>'ON',
+8927=>'ON',
+8928=>'ON',
+8929=>'ON',
+8930=>'ON',
+8931=>'ON',
+8932=>'ON',
+8933=>'ON',
+8934=>'ON',
+8935=>'ON',
+8936=>'ON',
+8937=>'ON',
+8938=>'ON',
+8939=>'ON',
+8940=>'ON',
+8941=>'ON',
+8942=>'ON',
+8943=>'ON',
+8944=>'ON',
+8945=>'ON',
+8946=>'ON',
+8947=>'ON',
+8948=>'ON',
+8949=>'ON',
+8950=>'ON',
+8951=>'ON',
+8952=>'ON',
+8953=>'ON',
+8954=>'ON',
+8955=>'ON',
+8956=>'ON',
+8957=>'ON',
+8958=>'ON',
+8959=>'ON',
+8960=>'ON',
+8961=>'ON',
+8962=>'ON',
+8963=>'ON',
+8964=>'ON',
+8965=>'ON',
+8966=>'ON',
+8967=>'ON',
+8968=>'ON',
+8969=>'ON',
+8970=>'ON',
+8971=>'ON',
+8972=>'ON',
+8973=>'ON',
+8974=>'ON',
+8975=>'ON',
+8976=>'ON',
+8977=>'ON',
+8978=>'ON',
+8979=>'ON',
+8980=>'ON',
+8981=>'ON',
+8982=>'ON',
+8983=>'ON',
+8984=>'ON',
+8985=>'ON',
+8986=>'ON',
+8987=>'ON',
+8988=>'ON',
+8989=>'ON',
+8990=>'ON',
+8991=>'ON',
+8992=>'ON',
+8993=>'ON',
+8994=>'ON',
+8995=>'ON',
+8996=>'ON',
+8997=>'ON',
+8998=>'ON',
+8999=>'ON',
+9000=>'ON',
+9001=>'ON',
+9002=>'ON',
+9003=>'ON',
+9004=>'ON',
+9005=>'ON',
+9006=>'ON',
+9007=>'ON',
+9008=>'ON',
+9009=>'ON',
+9010=>'ON',
+9011=>'ON',
+9012=>'ON',
+9013=>'ON',
+9014=>'L',
+9015=>'L',
+9016=>'L',
+9017=>'L',
+9018=>'L',
+9019=>'L',
+9020=>'L',
+9021=>'L',
+9022=>'L',
+9023=>'L',
+9024=>'L',
+9025=>'L',
+9026=>'L',
+9027=>'L',
+9028=>'L',
+9029=>'L',
+9030=>'L',
+9031=>'L',
+9032=>'L',
+9033=>'L',
+9034=>'L',
+9035=>'L',
+9036=>'L',
+9037=>'L',
+9038=>'L',
+9039=>'L',
+9040=>'L',
+9041=>'L',
+9042=>'L',
+9043=>'L',
+9044=>'L',
+9045=>'L',
+9046=>'L',
+9047=>'L',
+9048=>'L',
+9049=>'L',
+9050=>'L',
+9051=>'L',
+9052=>'L',
+9053=>'L',
+9054=>'L',
+9055=>'L',
+9056=>'L',
+9057=>'L',
+9058=>'L',
+9059=>'L',
+9060=>'L',
+9061=>'L',
+9062=>'L',
+9063=>'L',
+9064=>'L',
+9065=>'L',
+9066=>'L',
+9067=>'L',
+9068=>'L',
+9069=>'L',
+9070=>'L',
+9071=>'L',
+9072=>'L',
+9073=>'L',
+9074=>'L',
+9075=>'L',
+9076=>'L',
+9077=>'L',
+9078=>'L',
+9079=>'L',
+9080=>'L',
+9081=>'L',
+9082=>'L',
+9083=>'ON',
+9084=>'ON',
+9085=>'ON',
+9086=>'ON',
+9087=>'ON',
+9088=>'ON',
+9089=>'ON',
+9090=>'ON',
+9091=>'ON',
+9092=>'ON',
+9093=>'ON',
+9094=>'ON',
+9095=>'ON',
+9096=>'ON',
+9097=>'ON',
+9098=>'ON',
+9099=>'ON',
+9100=>'ON',
+9101=>'ON',
+9102=>'ON',
+9103=>'ON',
+9104=>'ON',
+9105=>'ON',
+9106=>'ON',
+9107=>'ON',
+9108=>'ON',
+9109=>'L',
+9110=>'ON',
+9111=>'ON',
+9112=>'ON',
+9113=>'ON',
+9114=>'ON',
+9115=>'ON',
+9116=>'ON',
+9117=>'ON',
+9118=>'ON',
+9119=>'ON',
+9120=>'ON',
+9121=>'ON',
+9122=>'ON',
+9123=>'ON',
+9124=>'ON',
+9125=>'ON',
+9126=>'ON',
+9127=>'ON',
+9128=>'ON',
+9129=>'ON',
+9130=>'ON',
+9131=>'ON',
+9132=>'ON',
+9133=>'ON',
+9134=>'ON',
+9135=>'ON',
+9136=>'ON',
+9137=>'ON',
+9138=>'ON',
+9139=>'ON',
+9140=>'ON',
+9141=>'ON',
+9142=>'ON',
+9143=>'ON',
+9144=>'ON',
+9145=>'ON',
+9146=>'ON',
+9147=>'ON',
+9148=>'ON',
+9149=>'ON',
+9150=>'ON',
+9151=>'ON',
+9152=>'ON',
+9153=>'ON',
+9154=>'ON',
+9155=>'ON',
+9156=>'ON',
+9157=>'ON',
+9158=>'ON',
+9159=>'ON',
+9160=>'ON',
+9161=>'ON',
+9162=>'ON',
+9163=>'ON',
+9164=>'ON',
+9165=>'ON',
+9166=>'ON',
+9167=>'ON',
+9168=>'ON',
+9169=>'ON',
+9170=>'ON',
+9171=>'ON',
+9172=>'ON',
+9173=>'ON',
+9174=>'ON',
+9175=>'ON',
+9176=>'ON',
+9177=>'ON',
+9178=>'ON',
+9179=>'ON',
+9180=>'ON',
+9181=>'ON',
+9182=>'ON',
+9183=>'ON',
+9184=>'ON',
+9185=>'ON',
+9186=>'ON',
+9187=>'ON',
+9188=>'ON',
+9189=>'ON',
+9190=>'ON',
+9191=>'ON',
+9216=>'ON',
+9217=>'ON',
+9218=>'ON',
+9219=>'ON',
+9220=>'ON',
+9221=>'ON',
+9222=>'ON',
+9223=>'ON',
+9224=>'ON',
+9225=>'ON',
+9226=>'ON',
+9227=>'ON',
+9228=>'ON',
+9229=>'ON',
+9230=>'ON',
+9231=>'ON',
+9232=>'ON',
+9233=>'ON',
+9234=>'ON',
+9235=>'ON',
+9236=>'ON',
+9237=>'ON',
+9238=>'ON',
+9239=>'ON',
+9240=>'ON',
+9241=>'ON',
+9242=>'ON',
+9243=>'ON',
+9244=>'ON',
+9245=>'ON',
+9246=>'ON',
+9247=>'ON',
+9248=>'ON',
+9249=>'ON',
+9250=>'ON',
+9251=>'ON',
+9252=>'ON',
+9253=>'ON',
+9254=>'ON',
+9280=>'ON',
+9281=>'ON',
+9282=>'ON',
+9283=>'ON',
+9284=>'ON',
+9285=>'ON',
+9286=>'ON',
+9287=>'ON',
+9288=>'ON',
+9289=>'ON',
+9290=>'ON',
+9312=>'ON',
+9313=>'ON',
+9314=>'ON',
+9315=>'ON',
+9316=>'ON',
+9317=>'ON',
+9318=>'ON',
+9319=>'ON',
+9320=>'ON',
+9321=>'ON',
+9322=>'ON',
+9323=>'ON',
+9324=>'ON',
+9325=>'ON',
+9326=>'ON',
+9327=>'ON',
+9328=>'ON',
+9329=>'ON',
+9330=>'ON',
+9331=>'ON',
+9332=>'ON',
+9333=>'ON',
+9334=>'ON',
+9335=>'ON',
+9336=>'ON',
+9337=>'ON',
+9338=>'ON',
+9339=>'ON',
+9340=>'ON',
+9341=>'ON',
+9342=>'ON',
+9343=>'ON',
+9344=>'ON',
+9345=>'ON',
+9346=>'ON',
+9347=>'ON',
+9348=>'ON',
+9349=>'ON',
+9350=>'ON',
+9351=>'ON',
+9352=>'EN',
+9353=>'EN',
+9354=>'EN',
+9355=>'EN',
+9356=>'EN',
+9357=>'EN',
+9358=>'EN',
+9359=>'EN',
+9360=>'EN',
+9361=>'EN',
+9362=>'EN',
+9363=>'EN',
+9364=>'EN',
+9365=>'EN',
+9366=>'EN',
+9367=>'EN',
+9368=>'EN',
+9369=>'EN',
+9370=>'EN',
+9371=>'EN',
+9372=>'L',
+9373=>'L',
+9374=>'L',
+9375=>'L',
+9376=>'L',
+9377=>'L',
+9378=>'L',
+9379=>'L',
+9380=>'L',
+9381=>'L',
+9382=>'L',
+9383=>'L',
+9384=>'L',
+9385=>'L',
+9386=>'L',
+9387=>'L',
+9388=>'L',
+9389=>'L',
+9390=>'L',
+9391=>'L',
+9392=>'L',
+9393=>'L',
+9394=>'L',
+9395=>'L',
+9396=>'L',
+9397=>'L',
+9398=>'L',
+9399=>'L',
+9400=>'L',
+9401=>'L',
+9402=>'L',
+9403=>'L',
+9404=>'L',
+9405=>'L',
+9406=>'L',
+9407=>'L',
+9408=>'L',
+9409=>'L',
+9410=>'L',
+9411=>'L',
+9412=>'L',
+9413=>'L',
+9414=>'L',
+9415=>'L',
+9416=>'L',
+9417=>'L',
+9418=>'L',
+9419=>'L',
+9420=>'L',
+9421=>'L',
+9422=>'L',
+9423=>'L',
+9424=>'L',
+9425=>'L',
+9426=>'L',
+9427=>'L',
+9428=>'L',
+9429=>'L',
+9430=>'L',
+9431=>'L',
+9432=>'L',
+9433=>'L',
+9434=>'L',
+9435=>'L',
+9436=>'L',
+9437=>'L',
+9438=>'L',
+9439=>'L',
+9440=>'L',
+9441=>'L',
+9442=>'L',
+9443=>'L',
+9444=>'L',
+9445=>'L',
+9446=>'L',
+9447=>'L',
+9448=>'L',
+9449=>'L',
+9450=>'ON',
+9451=>'ON',
+9452=>'ON',
+9453=>'ON',
+9454=>'ON',
+9455=>'ON',
+9456=>'ON',
+9457=>'ON',
+9458=>'ON',
+9459=>'ON',
+9460=>'ON',
+9461=>'ON',
+9462=>'ON',
+9463=>'ON',
+9464=>'ON',
+9465=>'ON',
+9466=>'ON',
+9467=>'ON',
+9468=>'ON',
+9469=>'ON',
+9470=>'ON',
+9471=>'ON',
+9472=>'ON',
+9473=>'ON',
+9474=>'ON',
+9475=>'ON',
+9476=>'ON',
+9477=>'ON',
+9478=>'ON',
+9479=>'ON',
+9480=>'ON',
+9481=>'ON',
+9482=>'ON',
+9483=>'ON',
+9484=>'ON',
+9485=>'ON',
+9486=>'ON',
+9487=>'ON',
+9488=>'ON',
+9489=>'ON',
+9490=>'ON',
+9491=>'ON',
+9492=>'ON',
+9493=>'ON',
+9494=>'ON',
+9495=>'ON',
+9496=>'ON',
+9497=>'ON',
+9498=>'ON',
+9499=>'ON',
+9500=>'ON',
+9501=>'ON',
+9502=>'ON',
+9503=>'ON',
+9504=>'ON',
+9505=>'ON',
+9506=>'ON',
+9507=>'ON',
+9508=>'ON',
+9509=>'ON',
+9510=>'ON',
+9511=>'ON',
+9512=>'ON',
+9513=>'ON',
+9514=>'ON',
+9515=>'ON',
+9516=>'ON',
+9517=>'ON',
+9518=>'ON',
+9519=>'ON',
+9520=>'ON',
+9521=>'ON',
+9522=>'ON',
+9523=>'ON',
+9524=>'ON',
+9525=>'ON',
+9526=>'ON',
+9527=>'ON',
+9528=>'ON',
+9529=>'ON',
+9530=>'ON',
+9531=>'ON',
+9532=>'ON',
+9533=>'ON',
+9534=>'ON',
+9535=>'ON',
+9536=>'ON',
+9537=>'ON',
+9538=>'ON',
+9539=>'ON',
+9540=>'ON',
+9541=>'ON',
+9542=>'ON',
+9543=>'ON',
+9544=>'ON',
+9545=>'ON',
+9546=>'ON',
+9547=>'ON',
+9548=>'ON',
+9549=>'ON',
+9550=>'ON',
+9551=>'ON',
+9552=>'ON',
+9553=>'ON',
+9554=>'ON',
+9555=>'ON',
+9556=>'ON',
+9557=>'ON',
+9558=>'ON',
+9559=>'ON',
+9560=>'ON',
+9561=>'ON',
+9562=>'ON',
+9563=>'ON',
+9564=>'ON',
+9565=>'ON',
+9566=>'ON',
+9567=>'ON',
+9568=>'ON',
+9569=>'ON',
+9570=>'ON',
+9571=>'ON',
+9572=>'ON',
+9573=>'ON',
+9574=>'ON',
+9575=>'ON',
+9576=>'ON',
+9577=>'ON',
+9578=>'ON',
+9579=>'ON',
+9580=>'ON',
+9581=>'ON',
+9582=>'ON',
+9583=>'ON',
+9584=>'ON',
+9585=>'ON',
+9586=>'ON',
+9587=>'ON',
+9588=>'ON',
+9589=>'ON',
+9590=>'ON',
+9591=>'ON',
+9592=>'ON',
+9593=>'ON',
+9594=>'ON',
+9595=>'ON',
+9596=>'ON',
+9597=>'ON',
+9598=>'ON',
+9599=>'ON',
+9600=>'ON',
+9601=>'ON',
+9602=>'ON',
+9603=>'ON',
+9604=>'ON',
+9605=>'ON',
+9606=>'ON',
+9607=>'ON',
+9608=>'ON',
+9609=>'ON',
+9610=>'ON',
+9611=>'ON',
+9612=>'ON',
+9613=>'ON',
+9614=>'ON',
+9615=>'ON',
+9616=>'ON',
+9617=>'ON',
+9618=>'ON',
+9619=>'ON',
+9620=>'ON',
+9621=>'ON',
+9622=>'ON',
+9623=>'ON',
+9624=>'ON',
+9625=>'ON',
+9626=>'ON',
+9627=>'ON',
+9628=>'ON',
+9629=>'ON',
+9630=>'ON',
+9631=>'ON',
+9632=>'ON',
+9633=>'ON',
+9634=>'ON',
+9635=>'ON',
+9636=>'ON',
+9637=>'ON',
+9638=>'ON',
+9639=>'ON',
+9640=>'ON',
+9641=>'ON',
+9642=>'ON',
+9643=>'ON',
+9644=>'ON',
+9645=>'ON',
+9646=>'ON',
+9647=>'ON',
+9648=>'ON',
+9649=>'ON',
+9650=>'ON',
+9651=>'ON',
+9652=>'ON',
+9653=>'ON',
+9654=>'ON',
+9655=>'ON',
+9656=>'ON',
+9657=>'ON',
+9658=>'ON',
+9659=>'ON',
+9660=>'ON',
+9661=>'ON',
+9662=>'ON',
+9663=>'ON',
+9664=>'ON',
+9665=>'ON',
+9666=>'ON',
+9667=>'ON',
+9668=>'ON',
+9669=>'ON',
+9670=>'ON',
+9671=>'ON',
+9672=>'ON',
+9673=>'ON',
+9674=>'ON',
+9675=>'ON',
+9676=>'ON',
+9677=>'ON',
+9678=>'ON',
+9679=>'ON',
+9680=>'ON',
+9681=>'ON',
+9682=>'ON',
+9683=>'ON',
+9684=>'ON',
+9685=>'ON',
+9686=>'ON',
+9687=>'ON',
+9688=>'ON',
+9689=>'ON',
+9690=>'ON',
+9691=>'ON',
+9692=>'ON',
+9693=>'ON',
+9694=>'ON',
+9695=>'ON',
+9696=>'ON',
+9697=>'ON',
+9698=>'ON',
+9699=>'ON',
+9700=>'ON',
+9701=>'ON',
+9702=>'ON',
+9703=>'ON',
+9704=>'ON',
+9705=>'ON',
+9706=>'ON',
+9707=>'ON',
+9708=>'ON',
+9709=>'ON',
+9710=>'ON',
+9711=>'ON',
+9712=>'ON',
+9713=>'ON',
+9714=>'ON',
+9715=>'ON',
+9716=>'ON',
+9717=>'ON',
+9718=>'ON',
+9719=>'ON',
+9720=>'ON',
+9721=>'ON',
+9722=>'ON',
+9723=>'ON',
+9724=>'ON',
+9725=>'ON',
+9726=>'ON',
+9727=>'ON',
+9728=>'ON',
+9729=>'ON',
+9730=>'ON',
+9731=>'ON',
+9732=>'ON',
+9733=>'ON',
+9734=>'ON',
+9735=>'ON',
+9736=>'ON',
+9737=>'ON',
+9738=>'ON',
+9739=>'ON',
+9740=>'ON',
+9741=>'ON',
+9742=>'ON',
+9743=>'ON',
+9744=>'ON',
+9745=>'ON',
+9746=>'ON',
+9747=>'ON',
+9748=>'ON',
+9749=>'ON',
+9750=>'ON',
+9751=>'ON',
+9752=>'ON',
+9753=>'ON',
+9754=>'ON',
+9755=>'ON',
+9756=>'ON',
+9757=>'ON',
+9758=>'ON',
+9759=>'ON',
+9760=>'ON',
+9761=>'ON',
+9762=>'ON',
+9763=>'ON',
+9764=>'ON',
+9765=>'ON',
+9766=>'ON',
+9767=>'ON',
+9768=>'ON',
+9769=>'ON',
+9770=>'ON',
+9771=>'ON',
+9772=>'ON',
+9773=>'ON',
+9774=>'ON',
+9775=>'ON',
+9776=>'ON',
+9777=>'ON',
+9778=>'ON',
+9779=>'ON',
+9780=>'ON',
+9781=>'ON',
+9782=>'ON',
+9783=>'ON',
+9784=>'ON',
+9785=>'ON',
+9786=>'ON',
+9787=>'ON',
+9788=>'ON',
+9789=>'ON',
+9790=>'ON',
+9791=>'ON',
+9792=>'ON',
+9793=>'ON',
+9794=>'ON',
+9795=>'ON',
+9796=>'ON',
+9797=>'ON',
+9798=>'ON',
+9799=>'ON',
+9800=>'ON',
+9801=>'ON',
+9802=>'ON',
+9803=>'ON',
+9804=>'ON',
+9805=>'ON',
+9806=>'ON',
+9807=>'ON',
+9808=>'ON',
+9809=>'ON',
+9810=>'ON',
+9811=>'ON',
+9812=>'ON',
+9813=>'ON',
+9814=>'ON',
+9815=>'ON',
+9816=>'ON',
+9817=>'ON',
+9818=>'ON',
+9819=>'ON',
+9820=>'ON',
+9821=>'ON',
+9822=>'ON',
+9823=>'ON',
+9824=>'ON',
+9825=>'ON',
+9826=>'ON',
+9827=>'ON',
+9828=>'ON',
+9829=>'ON',
+9830=>'ON',
+9831=>'ON',
+9832=>'ON',
+9833=>'ON',
+9834=>'ON',
+9835=>'ON',
+9836=>'ON',
+9837=>'ON',
+9838=>'ON',
+9839=>'ON',
+9840=>'ON',
+9841=>'ON',
+9842=>'ON',
+9843=>'ON',
+9844=>'ON',
+9845=>'ON',
+9846=>'ON',
+9847=>'ON',
+9848=>'ON',
+9849=>'ON',
+9850=>'ON',
+9851=>'ON',
+9852=>'ON',
+9853=>'ON',
+9854=>'ON',
+9855=>'ON',
+9856=>'ON',
+9857=>'ON',
+9858=>'ON',
+9859=>'ON',
+9860=>'ON',
+9861=>'ON',
+9862=>'ON',
+9863=>'ON',
+9864=>'ON',
+9865=>'ON',
+9866=>'ON',
+9867=>'ON',
+9868=>'ON',
+9869=>'ON',
+9870=>'ON',
+9871=>'ON',
+9872=>'ON',
+9873=>'ON',
+9874=>'ON',
+9875=>'ON',
+9876=>'ON',
+9877=>'ON',
+9878=>'ON',
+9879=>'ON',
+9880=>'ON',
+9881=>'ON',
+9882=>'ON',
+9883=>'ON',
+9884=>'ON',
+9888=>'ON',
+9889=>'ON',
+9890=>'ON',
+9891=>'ON',
+9892=>'ON',
+9893=>'ON',
+9894=>'ON',
+9895=>'ON',
+9896=>'ON',
+9897=>'ON',
+9898=>'ON',
+9899=>'ON',
+9900=>'L',
+9901=>'ON',
+9902=>'ON',
+9903=>'ON',
+9904=>'ON',
+9905=>'ON',
+9906=>'ON',
+9985=>'ON',
+9986=>'ON',
+9987=>'ON',
+9988=>'ON',
+9990=>'ON',
+9991=>'ON',
+9992=>'ON',
+9993=>'ON',
+9996=>'ON',
+9997=>'ON',
+9998=>'ON',
+9999=>'ON',
+10000=>'ON',
+10001=>'ON',
+10002=>'ON',
+10003=>'ON',
+10004=>'ON',
+10005=>'ON',
+10006=>'ON',
+10007=>'ON',
+10008=>'ON',
+10009=>'ON',
+10010=>'ON',
+10011=>'ON',
+10012=>'ON',
+10013=>'ON',
+10014=>'ON',
+10015=>'ON',
+10016=>'ON',
+10017=>'ON',
+10018=>'ON',
+10019=>'ON',
+10020=>'ON',
+10021=>'ON',
+10022=>'ON',
+10023=>'ON',
+10025=>'ON',
+10026=>'ON',
+10027=>'ON',
+10028=>'ON',
+10029=>'ON',
+10030=>'ON',
+10031=>'ON',
+10032=>'ON',
+10033=>'ON',
+10034=>'ON',
+10035=>'ON',
+10036=>'ON',
+10037=>'ON',
+10038=>'ON',
+10039=>'ON',
+10040=>'ON',
+10041=>'ON',
+10042=>'ON',
+10043=>'ON',
+10044=>'ON',
+10045=>'ON',
+10046=>'ON',
+10047=>'ON',
+10048=>'ON',
+10049=>'ON',
+10050=>'ON',
+10051=>'ON',
+10052=>'ON',
+10053=>'ON',
+10054=>'ON',
+10055=>'ON',
+10056=>'ON',
+10057=>'ON',
+10058=>'ON',
+10059=>'ON',
+10061=>'ON',
+10063=>'ON',
+10064=>'ON',
+10065=>'ON',
+10066=>'ON',
+10070=>'ON',
+10072=>'ON',
+10073=>'ON',
+10074=>'ON',
+10075=>'ON',
+10076=>'ON',
+10077=>'ON',
+10078=>'ON',
+10081=>'ON',
+10082=>'ON',
+10083=>'ON',
+10084=>'ON',
+10085=>'ON',
+10086=>'ON',
+10087=>'ON',
+10088=>'ON',
+10089=>'ON',
+10090=>'ON',
+10091=>'ON',
+10092=>'ON',
+10093=>'ON',
+10094=>'ON',
+10095=>'ON',
+10096=>'ON',
+10097=>'ON',
+10098=>'ON',
+10099=>'ON',
+10100=>'ON',
+10101=>'ON',
+10102=>'ON',
+10103=>'ON',
+10104=>'ON',
+10105=>'ON',
+10106=>'ON',
+10107=>'ON',
+10108=>'ON',
+10109=>'ON',
+10110=>'ON',
+10111=>'ON',
+10112=>'ON',
+10113=>'ON',
+10114=>'ON',
+10115=>'ON',
+10116=>'ON',
+10117=>'ON',
+10118=>'ON',
+10119=>'ON',
+10120=>'ON',
+10121=>'ON',
+10122=>'ON',
+10123=>'ON',
+10124=>'ON',
+10125=>'ON',
+10126=>'ON',
+10127=>'ON',
+10128=>'ON',
+10129=>'ON',
+10130=>'ON',
+10131=>'ON',
+10132=>'ON',
+10136=>'ON',
+10137=>'ON',
+10138=>'ON',
+10139=>'ON',
+10140=>'ON',
+10141=>'ON',
+10142=>'ON',
+10143=>'ON',
+10144=>'ON',
+10145=>'ON',
+10146=>'ON',
+10147=>'ON',
+10148=>'ON',
+10149=>'ON',
+10150=>'ON',
+10151=>'ON',
+10152=>'ON',
+10153=>'ON',
+10154=>'ON',
+10155=>'ON',
+10156=>'ON',
+10157=>'ON',
+10158=>'ON',
+10159=>'ON',
+10161=>'ON',
+10162=>'ON',
+10163=>'ON',
+10164=>'ON',
+10165=>'ON',
+10166=>'ON',
+10167=>'ON',
+10168=>'ON',
+10169=>'ON',
+10170=>'ON',
+10171=>'ON',
+10172=>'ON',
+10173=>'ON',
+10174=>'ON',
+10176=>'ON',
+10177=>'ON',
+10178=>'ON',
+10179=>'ON',
+10180=>'ON',
+10181=>'ON',
+10182=>'ON',
+10183=>'ON',
+10184=>'ON',
+10185=>'ON',
+10186=>'ON',
+10192=>'ON',
+10193=>'ON',
+10194=>'ON',
+10195=>'ON',
+10196=>'ON',
+10197=>'ON',
+10198=>'ON',
+10199=>'ON',
+10200=>'ON',
+10201=>'ON',
+10202=>'ON',
+10203=>'ON',
+10204=>'ON',
+10205=>'ON',
+10206=>'ON',
+10207=>'ON',
+10208=>'ON',
+10209=>'ON',
+10210=>'ON',
+10211=>'ON',
+10212=>'ON',
+10213=>'ON',
+10214=>'ON',
+10215=>'ON',
+10216=>'ON',
+10217=>'ON',
+10218=>'ON',
+10219=>'ON',
+10224=>'ON',
+10225=>'ON',
+10226=>'ON',
+10227=>'ON',
+10228=>'ON',
+10229=>'ON',
+10230=>'ON',
+10231=>'ON',
+10232=>'ON',
+10233=>'ON',
+10234=>'ON',
+10235=>'ON',
+10236=>'ON',
+10237=>'ON',
+10238=>'ON',
+10239=>'ON',
+10240=>'L',
+10241=>'L',
+10242=>'L',
+10243=>'L',
+10244=>'L',
+10245=>'L',
+10246=>'L',
+10247=>'L',
+10248=>'L',
+10249=>'L',
+10250=>'L',
+10251=>'L',
+10252=>'L',
+10253=>'L',
+10254=>'L',
+10255=>'L',
+10256=>'L',
+10257=>'L',
+10258=>'L',
+10259=>'L',
+10260=>'L',
+10261=>'L',
+10262=>'L',
+10263=>'L',
+10264=>'L',
+10265=>'L',
+10266=>'L',
+10267=>'L',
+10268=>'L',
+10269=>'L',
+10270=>'L',
+10271=>'L',
+10272=>'L',
+10273=>'L',
+10274=>'L',
+10275=>'L',
+10276=>'L',
+10277=>'L',
+10278=>'L',
+10279=>'L',
+10280=>'L',
+10281=>'L',
+10282=>'L',
+10283=>'L',
+10284=>'L',
+10285=>'L',
+10286=>'L',
+10287=>'L',
+10288=>'L',
+10289=>'L',
+10290=>'L',
+10291=>'L',
+10292=>'L',
+10293=>'L',
+10294=>'L',
+10295=>'L',
+10296=>'L',
+10297=>'L',
+10298=>'L',
+10299=>'L',
+10300=>'L',
+10301=>'L',
+10302=>'L',
+10303=>'L',
+10304=>'L',
+10305=>'L',
+10306=>'L',
+10307=>'L',
+10308=>'L',
+10309=>'L',
+10310=>'L',
+10311=>'L',
+10312=>'L',
+10313=>'L',
+10314=>'L',
+10315=>'L',
+10316=>'L',
+10317=>'L',
+10318=>'L',
+10319=>'L',
+10320=>'L',
+10321=>'L',
+10322=>'L',
+10323=>'L',
+10324=>'L',
+10325=>'L',
+10326=>'L',
+10327=>'L',
+10328=>'L',
+10329=>'L',
+10330=>'L',
+10331=>'L',
+10332=>'L',
+10333=>'L',
+10334=>'L',
+10335=>'L',
+10336=>'L',
+10337=>'L',
+10338=>'L',
+10339=>'L',
+10340=>'L',
+10341=>'L',
+10342=>'L',
+10343=>'L',
+10344=>'L',
+10345=>'L',
+10346=>'L',
+10347=>'L',
+10348=>'L',
+10349=>'L',
+10350=>'L',
+10351=>'L',
+10352=>'L',
+10353=>'L',
+10354=>'L',
+10355=>'L',
+10356=>'L',
+10357=>'L',
+10358=>'L',
+10359=>'L',
+10360=>'L',
+10361=>'L',
+10362=>'L',
+10363=>'L',
+10364=>'L',
+10365=>'L',
+10366=>'L',
+10367=>'L',
+10368=>'L',
+10369=>'L',
+10370=>'L',
+10371=>'L',
+10372=>'L',
+10373=>'L',
+10374=>'L',
+10375=>'L',
+10376=>'L',
+10377=>'L',
+10378=>'L',
+10379=>'L',
+10380=>'L',
+10381=>'L',
+10382=>'L',
+10383=>'L',
+10384=>'L',
+10385=>'L',
+10386=>'L',
+10387=>'L',
+10388=>'L',
+10389=>'L',
+10390=>'L',
+10391=>'L',
+10392=>'L',
+10393=>'L',
+10394=>'L',
+10395=>'L',
+10396=>'L',
+10397=>'L',
+10398=>'L',
+10399=>'L',
+10400=>'L',
+10401=>'L',
+10402=>'L',
+10403=>'L',
+10404=>'L',
+10405=>'L',
+10406=>'L',
+10407=>'L',
+10408=>'L',
+10409=>'L',
+10410=>'L',
+10411=>'L',
+10412=>'L',
+10413=>'L',
+10414=>'L',
+10415=>'L',
+10416=>'L',
+10417=>'L',
+10418=>'L',
+10419=>'L',
+10420=>'L',
+10421=>'L',
+10422=>'L',
+10423=>'L',
+10424=>'L',
+10425=>'L',
+10426=>'L',
+10427=>'L',
+10428=>'L',
+10429=>'L',
+10430=>'L',
+10431=>'L',
+10432=>'L',
+10433=>'L',
+10434=>'L',
+10435=>'L',
+10436=>'L',
+10437=>'L',
+10438=>'L',
+10439=>'L',
+10440=>'L',
+10441=>'L',
+10442=>'L',
+10443=>'L',
+10444=>'L',
+10445=>'L',
+10446=>'L',
+10447=>'L',
+10448=>'L',
+10449=>'L',
+10450=>'L',
+10451=>'L',
+10452=>'L',
+10453=>'L',
+10454=>'L',
+10455=>'L',
+10456=>'L',
+10457=>'L',
+10458=>'L',
+10459=>'L',
+10460=>'L',
+10461=>'L',
+10462=>'L',
+10463=>'L',
+10464=>'L',
+10465=>'L',
+10466=>'L',
+10467=>'L',
+10468=>'L',
+10469=>'L',
+10470=>'L',
+10471=>'L',
+10472=>'L',
+10473=>'L',
+10474=>'L',
+10475=>'L',
+10476=>'L',
+10477=>'L',
+10478=>'L',
+10479=>'L',
+10480=>'L',
+10481=>'L',
+10482=>'L',
+10483=>'L',
+10484=>'L',
+10485=>'L',
+10486=>'L',
+10487=>'L',
+10488=>'L',
+10489=>'L',
+10490=>'L',
+10491=>'L',
+10492=>'L',
+10493=>'L',
+10494=>'L',
+10495=>'L',
+10496=>'ON',
+10497=>'ON',
+10498=>'ON',
+10499=>'ON',
+10500=>'ON',
+10501=>'ON',
+10502=>'ON',
+10503=>'ON',
+10504=>'ON',
+10505=>'ON',
+10506=>'ON',
+10507=>'ON',
+10508=>'ON',
+10509=>'ON',
+10510=>'ON',
+10511=>'ON',
+10512=>'ON',
+10513=>'ON',
+10514=>'ON',
+10515=>'ON',
+10516=>'ON',
+10517=>'ON',
+10518=>'ON',
+10519=>'ON',
+10520=>'ON',
+10521=>'ON',
+10522=>'ON',
+10523=>'ON',
+10524=>'ON',
+10525=>'ON',
+10526=>'ON',
+10527=>'ON',
+10528=>'ON',
+10529=>'ON',
+10530=>'ON',
+10531=>'ON',
+10532=>'ON',
+10533=>'ON',
+10534=>'ON',
+10535=>'ON',
+10536=>'ON',
+10537=>'ON',
+10538=>'ON',
+10539=>'ON',
+10540=>'ON',
+10541=>'ON',
+10542=>'ON',
+10543=>'ON',
+10544=>'ON',
+10545=>'ON',
+10546=>'ON',
+10547=>'ON',
+10548=>'ON',
+10549=>'ON',
+10550=>'ON',
+10551=>'ON',
+10552=>'ON',
+10553=>'ON',
+10554=>'ON',
+10555=>'ON',
+10556=>'ON',
+10557=>'ON',
+10558=>'ON',
+10559=>'ON',
+10560=>'ON',
+10561=>'ON',
+10562=>'ON',
+10563=>'ON',
+10564=>'ON',
+10565=>'ON',
+10566=>'ON',
+10567=>'ON',
+10568=>'ON',
+10569=>'ON',
+10570=>'ON',
+10571=>'ON',
+10572=>'ON',
+10573=>'ON',
+10574=>'ON',
+10575=>'ON',
+10576=>'ON',
+10577=>'ON',
+10578=>'ON',
+10579=>'ON',
+10580=>'ON',
+10581=>'ON',
+10582=>'ON',
+10583=>'ON',
+10584=>'ON',
+10585=>'ON',
+10586=>'ON',
+10587=>'ON',
+10588=>'ON',
+10589=>'ON',
+10590=>'ON',
+10591=>'ON',
+10592=>'ON',
+10593=>'ON',
+10594=>'ON',
+10595=>'ON',
+10596=>'ON',
+10597=>'ON',
+10598=>'ON',
+10599=>'ON',
+10600=>'ON',
+10601=>'ON',
+10602=>'ON',
+10603=>'ON',
+10604=>'ON',
+10605=>'ON',
+10606=>'ON',
+10607=>'ON',
+10608=>'ON',
+10609=>'ON',
+10610=>'ON',
+10611=>'ON',
+10612=>'ON',
+10613=>'ON',
+10614=>'ON',
+10615=>'ON',
+10616=>'ON',
+10617=>'ON',
+10618=>'ON',
+10619=>'ON',
+10620=>'ON',
+10621=>'ON',
+10622=>'ON',
+10623=>'ON',
+10624=>'ON',
+10625=>'ON',
+10626=>'ON',
+10627=>'ON',
+10628=>'ON',
+10629=>'ON',
+10630=>'ON',
+10631=>'ON',
+10632=>'ON',
+10633=>'ON',
+10634=>'ON',
+10635=>'ON',
+10636=>'ON',
+10637=>'ON',
+10638=>'ON',
+10639=>'ON',
+10640=>'ON',
+10641=>'ON',
+10642=>'ON',
+10643=>'ON',
+10644=>'ON',
+10645=>'ON',
+10646=>'ON',
+10647=>'ON',
+10648=>'ON',
+10649=>'ON',
+10650=>'ON',
+10651=>'ON',
+10652=>'ON',
+10653=>'ON',
+10654=>'ON',
+10655=>'ON',
+10656=>'ON',
+10657=>'ON',
+10658=>'ON',
+10659=>'ON',
+10660=>'ON',
+10661=>'ON',
+10662=>'ON',
+10663=>'ON',
+10664=>'ON',
+10665=>'ON',
+10666=>'ON',
+10667=>'ON',
+10668=>'ON',
+10669=>'ON',
+10670=>'ON',
+10671=>'ON',
+10672=>'ON',
+10673=>'ON',
+10674=>'ON',
+10675=>'ON',
+10676=>'ON',
+10677=>'ON',
+10678=>'ON',
+10679=>'ON',
+10680=>'ON',
+10681=>'ON',
+10682=>'ON',
+10683=>'ON',
+10684=>'ON',
+10685=>'ON',
+10686=>'ON',
+10687=>'ON',
+10688=>'ON',
+10689=>'ON',
+10690=>'ON',
+10691=>'ON',
+10692=>'ON',
+10693=>'ON',
+10694=>'ON',
+10695=>'ON',
+10696=>'ON',
+10697=>'ON',
+10698=>'ON',
+10699=>'ON',
+10700=>'ON',
+10701=>'ON',
+10702=>'ON',
+10703=>'ON',
+10704=>'ON',
+10705=>'ON',
+10706=>'ON',
+10707=>'ON',
+10708=>'ON',
+10709=>'ON',
+10710=>'ON',
+10711=>'ON',
+10712=>'ON',
+10713=>'ON',
+10714=>'ON',
+10715=>'ON',
+10716=>'ON',
+10717=>'ON',
+10718=>'ON',
+10719=>'ON',
+10720=>'ON',
+10721=>'ON',
+10722=>'ON',
+10723=>'ON',
+10724=>'ON',
+10725=>'ON',
+10726=>'ON',
+10727=>'ON',
+10728=>'ON',
+10729=>'ON',
+10730=>'ON',
+10731=>'ON',
+10732=>'ON',
+10733=>'ON',
+10734=>'ON',
+10735=>'ON',
+10736=>'ON',
+10737=>'ON',
+10738=>'ON',
+10739=>'ON',
+10740=>'ON',
+10741=>'ON',
+10742=>'ON',
+10743=>'ON',
+10744=>'ON',
+10745=>'ON',
+10746=>'ON',
+10747=>'ON',
+10748=>'ON',
+10749=>'ON',
+10750=>'ON',
+10751=>'ON',
+10752=>'ON',
+10753=>'ON',
+10754=>'ON',
+10755=>'ON',
+10756=>'ON',
+10757=>'ON',
+10758=>'ON',
+10759=>'ON',
+10760=>'ON',
+10761=>'ON',
+10762=>'ON',
+10763=>'ON',
+10764=>'ON',
+10765=>'ON',
+10766=>'ON',
+10767=>'ON',
+10768=>'ON',
+10769=>'ON',
+10770=>'ON',
+10771=>'ON',
+10772=>'ON',
+10773=>'ON',
+10774=>'ON',
+10775=>'ON',
+10776=>'ON',
+10777=>'ON',
+10778=>'ON',
+10779=>'ON',
+10780=>'ON',
+10781=>'ON',
+10782=>'ON',
+10783=>'ON',
+10784=>'ON',
+10785=>'ON',
+10786=>'ON',
+10787=>'ON',
+10788=>'ON',
+10789=>'ON',
+10790=>'ON',
+10791=>'ON',
+10792=>'ON',
+10793=>'ON',
+10794=>'ON',
+10795=>'ON',
+10796=>'ON',
+10797=>'ON',
+10798=>'ON',
+10799=>'ON',
+10800=>'ON',
+10801=>'ON',
+10802=>'ON',
+10803=>'ON',
+10804=>'ON',
+10805=>'ON',
+10806=>'ON',
+10807=>'ON',
+10808=>'ON',
+10809=>'ON',
+10810=>'ON',
+10811=>'ON',
+10812=>'ON',
+10813=>'ON',
+10814=>'ON',
+10815=>'ON',
+10816=>'ON',
+10817=>'ON',
+10818=>'ON',
+10819=>'ON',
+10820=>'ON',
+10821=>'ON',
+10822=>'ON',
+10823=>'ON',
+10824=>'ON',
+10825=>'ON',
+10826=>'ON',
+10827=>'ON',
+10828=>'ON',
+10829=>'ON',
+10830=>'ON',
+10831=>'ON',
+10832=>'ON',
+10833=>'ON',
+10834=>'ON',
+10835=>'ON',
+10836=>'ON',
+10837=>'ON',
+10838=>'ON',
+10839=>'ON',
+10840=>'ON',
+10841=>'ON',
+10842=>'ON',
+10843=>'ON',
+10844=>'ON',
+10845=>'ON',
+10846=>'ON',
+10847=>'ON',
+10848=>'ON',
+10849=>'ON',
+10850=>'ON',
+10851=>'ON',
+10852=>'ON',
+10853=>'ON',
+10854=>'ON',
+10855=>'ON',
+10856=>'ON',
+10857=>'ON',
+10858=>'ON',
+10859=>'ON',
+10860=>'ON',
+10861=>'ON',
+10862=>'ON',
+10863=>'ON',
+10864=>'ON',
+10865=>'ON',
+10866=>'ON',
+10867=>'ON',
+10868=>'ON',
+10869=>'ON',
+10870=>'ON',
+10871=>'ON',
+10872=>'ON',
+10873=>'ON',
+10874=>'ON',
+10875=>'ON',
+10876=>'ON',
+10877=>'ON',
+10878=>'ON',
+10879=>'ON',
+10880=>'ON',
+10881=>'ON',
+10882=>'ON',
+10883=>'ON',
+10884=>'ON',
+10885=>'ON',
+10886=>'ON',
+10887=>'ON',
+10888=>'ON',
+10889=>'ON',
+10890=>'ON',
+10891=>'ON',
+10892=>'ON',
+10893=>'ON',
+10894=>'ON',
+10895=>'ON',
+10896=>'ON',
+10897=>'ON',
+10898=>'ON',
+10899=>'ON',
+10900=>'ON',
+10901=>'ON',
+10902=>'ON',
+10903=>'ON',
+10904=>'ON',
+10905=>'ON',
+10906=>'ON',
+10907=>'ON',
+10908=>'ON',
+10909=>'ON',
+10910=>'ON',
+10911=>'ON',
+10912=>'ON',
+10913=>'ON',
+10914=>'ON',
+10915=>'ON',
+10916=>'ON',
+10917=>'ON',
+10918=>'ON',
+10919=>'ON',
+10920=>'ON',
+10921=>'ON',
+10922=>'ON',
+10923=>'ON',
+10924=>'ON',
+10925=>'ON',
+10926=>'ON',
+10927=>'ON',
+10928=>'ON',
+10929=>'ON',
+10930=>'ON',
+10931=>'ON',
+10932=>'ON',
+10933=>'ON',
+10934=>'ON',
+10935=>'ON',
+10936=>'ON',
+10937=>'ON',
+10938=>'ON',
+10939=>'ON',
+10940=>'ON',
+10941=>'ON',
+10942=>'ON',
+10943=>'ON',
+10944=>'ON',
+10945=>'ON',
+10946=>'ON',
+10947=>'ON',
+10948=>'ON',
+10949=>'ON',
+10950=>'ON',
+10951=>'ON',
+10952=>'ON',
+10953=>'ON',
+10954=>'ON',
+10955=>'ON',
+10956=>'ON',
+10957=>'ON',
+10958=>'ON',
+10959=>'ON',
+10960=>'ON',
+10961=>'ON',
+10962=>'ON',
+10963=>'ON',
+10964=>'ON',
+10965=>'ON',
+10966=>'ON',
+10967=>'ON',
+10968=>'ON',
+10969=>'ON',
+10970=>'ON',
+10971=>'ON',
+10972=>'ON',
+10973=>'ON',
+10974=>'ON',
+10975=>'ON',
+10976=>'ON',
+10977=>'ON',
+10978=>'ON',
+10979=>'ON',
+10980=>'ON',
+10981=>'ON',
+10982=>'ON',
+10983=>'ON',
+10984=>'ON',
+10985=>'ON',
+10986=>'ON',
+10987=>'ON',
+10988=>'ON',
+10989=>'ON',
+10990=>'ON',
+10991=>'ON',
+10992=>'ON',
+10993=>'ON',
+10994=>'ON',
+10995=>'ON',
+10996=>'ON',
+10997=>'ON',
+10998=>'ON',
+10999=>'ON',
+11000=>'ON',
+11001=>'ON',
+11002=>'ON',
+11003=>'ON',
+11004=>'ON',
+11005=>'ON',
+11006=>'ON',
+11007=>'ON',
+11008=>'ON',
+11009=>'ON',
+11010=>'ON',
+11011=>'ON',
+11012=>'ON',
+11013=>'ON',
+11014=>'ON',
+11015=>'ON',
+11016=>'ON',
+11017=>'ON',
+11018=>'ON',
+11019=>'ON',
+11020=>'ON',
+11021=>'ON',
+11022=>'ON',
+11023=>'ON',
+11024=>'ON',
+11025=>'ON',
+11026=>'ON',
+11027=>'ON',
+11028=>'ON',
+11029=>'ON',
+11030=>'ON',
+11031=>'ON',
+11032=>'ON',
+11033=>'ON',
+11034=>'ON',
+11040=>'ON',
+11041=>'ON',
+11042=>'ON',
+11043=>'ON',
+11264=>'L',
+11265=>'L',
+11266=>'L',
+11267=>'L',
+11268=>'L',
+11269=>'L',
+11270=>'L',
+11271=>'L',
+11272=>'L',
+11273=>'L',
+11274=>'L',
+11275=>'L',
+11276=>'L',
+11277=>'L',
+11278=>'L',
+11279=>'L',
+11280=>'L',
+11281=>'L',
+11282=>'L',
+11283=>'L',
+11284=>'L',
+11285=>'L',
+11286=>'L',
+11287=>'L',
+11288=>'L',
+11289=>'L',
+11290=>'L',
+11291=>'L',
+11292=>'L',
+11293=>'L',
+11294=>'L',
+11295=>'L',
+11296=>'L',
+11297=>'L',
+11298=>'L',
+11299=>'L',
+11300=>'L',
+11301=>'L',
+11302=>'L',
+11303=>'L',
+11304=>'L',
+11305=>'L',
+11306=>'L',
+11307=>'L',
+11308=>'L',
+11309=>'L',
+11310=>'L',
+11312=>'L',
+11313=>'L',
+11314=>'L',
+11315=>'L',
+11316=>'L',
+11317=>'L',
+11318=>'L',
+11319=>'L',
+11320=>'L',
+11321=>'L',
+11322=>'L',
+11323=>'L',
+11324=>'L',
+11325=>'L',
+11326=>'L',
+11327=>'L',
+11328=>'L',
+11329=>'L',
+11330=>'L',
+11331=>'L',
+11332=>'L',
+11333=>'L',
+11334=>'L',
+11335=>'L',
+11336=>'L',
+11337=>'L',
+11338=>'L',
+11339=>'L',
+11340=>'L',
+11341=>'L',
+11342=>'L',
+11343=>'L',
+11344=>'L',
+11345=>'L',
+11346=>'L',
+11347=>'L',
+11348=>'L',
+11349=>'L',
+11350=>'L',
+11351=>'L',
+11352=>'L',
+11353=>'L',
+11354=>'L',
+11355=>'L',
+11356=>'L',
+11357=>'L',
+11358=>'L',
+11360=>'L',
+11361=>'L',
+11362=>'L',
+11363=>'L',
+11364=>'L',
+11365=>'L',
+11366=>'L',
+11367=>'L',
+11368=>'L',
+11369=>'L',
+11370=>'L',
+11371=>'L',
+11372=>'L',
+11380=>'L',
+11381=>'L',
+11382=>'L',
+11383=>'L',
+11392=>'L',
+11393=>'L',
+11394=>'L',
+11395=>'L',
+11396=>'L',
+11397=>'L',
+11398=>'L',
+11399=>'L',
+11400=>'L',
+11401=>'L',
+11402=>'L',
+11403=>'L',
+11404=>'L',
+11405=>'L',
+11406=>'L',
+11407=>'L',
+11408=>'L',
+11409=>'L',
+11410=>'L',
+11411=>'L',
+11412=>'L',
+11413=>'L',
+11414=>'L',
+11415=>'L',
+11416=>'L',
+11417=>'L',
+11418=>'L',
+11419=>'L',
+11420=>'L',
+11421=>'L',
+11422=>'L',
+11423=>'L',
+11424=>'L',
+11425=>'L',
+11426=>'L',
+11427=>'L',
+11428=>'L',
+11429=>'L',
+11430=>'L',
+11431=>'L',
+11432=>'L',
+11433=>'L',
+11434=>'L',
+11435=>'L',
+11436=>'L',
+11437=>'L',
+11438=>'L',
+11439=>'L',
+11440=>'L',
+11441=>'L',
+11442=>'L',
+11443=>'L',
+11444=>'L',
+11445=>'L',
+11446=>'L',
+11447=>'L',
+11448=>'L',
+11449=>'L',
+11450=>'L',
+11451=>'L',
+11452=>'L',
+11453=>'L',
+11454=>'L',
+11455=>'L',
+11456=>'L',
+11457=>'L',
+11458=>'L',
+11459=>'L',
+11460=>'L',
+11461=>'L',
+11462=>'L',
+11463=>'L',
+11464=>'L',
+11465=>'L',
+11466=>'L',
+11467=>'L',
+11468=>'L',
+11469=>'L',
+11470=>'L',
+11471=>'L',
+11472=>'L',
+11473=>'L',
+11474=>'L',
+11475=>'L',
+11476=>'L',
+11477=>'L',
+11478=>'L',
+11479=>'L',
+11480=>'L',
+11481=>'L',
+11482=>'L',
+11483=>'L',
+11484=>'L',
+11485=>'L',
+11486=>'L',
+11487=>'L',
+11488=>'L',
+11489=>'L',
+11490=>'L',
+11491=>'L',
+11492=>'L',
+11493=>'ON',
+11494=>'ON',
+11495=>'ON',
+11496=>'ON',
+11497=>'ON',
+11498=>'ON',
+11513=>'ON',
+11514=>'ON',
+11515=>'ON',
+11516=>'ON',
+11517=>'ON',
+11518=>'ON',
+11519=>'ON',
+11520=>'L',
+11521=>'L',
+11522=>'L',
+11523=>'L',
+11524=>'L',
+11525=>'L',
+11526=>'L',
+11527=>'L',
+11528=>'L',
+11529=>'L',
+11530=>'L',
+11531=>'L',
+11532=>'L',
+11533=>'L',
+11534=>'L',
+11535=>'L',
+11536=>'L',
+11537=>'L',
+11538=>'L',
+11539=>'L',
+11540=>'L',
+11541=>'L',
+11542=>'L',
+11543=>'L',
+11544=>'L',
+11545=>'L',
+11546=>'L',
+11547=>'L',
+11548=>'L',
+11549=>'L',
+11550=>'L',
+11551=>'L',
+11552=>'L',
+11553=>'L',
+11554=>'L',
+11555=>'L',
+11556=>'L',
+11557=>'L',
+11568=>'L',
+11569=>'L',
+11570=>'L',
+11571=>'L',
+11572=>'L',
+11573=>'L',
+11574=>'L',
+11575=>'L',
+11576=>'L',
+11577=>'L',
+11578=>'L',
+11579=>'L',
+11580=>'L',
+11581=>'L',
+11582=>'L',
+11583=>'L',
+11584=>'L',
+11585=>'L',
+11586=>'L',
+11587=>'L',
+11588=>'L',
+11589=>'L',
+11590=>'L',
+11591=>'L',
+11592=>'L',
+11593=>'L',
+11594=>'L',
+11595=>'L',
+11596=>'L',
+11597=>'L',
+11598=>'L',
+11599=>'L',
+11600=>'L',
+11601=>'L',
+11602=>'L',
+11603=>'L',
+11604=>'L',
+11605=>'L',
+11606=>'L',
+11607=>'L',
+11608=>'L',
+11609=>'L',
+11610=>'L',
+11611=>'L',
+11612=>'L',
+11613=>'L',
+11614=>'L',
+11615=>'L',
+11616=>'L',
+11617=>'L',
+11618=>'L',
+11619=>'L',
+11620=>'L',
+11621=>'L',
+11631=>'L',
+11648=>'L',
+11649=>'L',
+11650=>'L',
+11651=>'L',
+11652=>'L',
+11653=>'L',
+11654=>'L',
+11655=>'L',
+11656=>'L',
+11657=>'L',
+11658=>'L',
+11659=>'L',
+11660=>'L',
+11661=>'L',
+11662=>'L',
+11663=>'L',
+11664=>'L',
+11665=>'L',
+11666=>'L',
+11667=>'L',
+11668=>'L',
+11669=>'L',
+11670=>'L',
+11680=>'L',
+11681=>'L',
+11682=>'L',
+11683=>'L',
+11684=>'L',
+11685=>'L',
+11686=>'L',
+11688=>'L',
+11689=>'L',
+11690=>'L',
+11691=>'L',
+11692=>'L',
+11693=>'L',
+11694=>'L',
+11696=>'L',
+11697=>'L',
+11698=>'L',
+11699=>'L',
+11700=>'L',
+11701=>'L',
+11702=>'L',
+11704=>'L',
+11705=>'L',
+11706=>'L',
+11707=>'L',
+11708=>'L',
+11709=>'L',
+11710=>'L',
+11712=>'L',
+11713=>'L',
+11714=>'L',
+11715=>'L',
+11716=>'L',
+11717=>'L',
+11718=>'L',
+11720=>'L',
+11721=>'L',
+11722=>'L',
+11723=>'L',
+11724=>'L',
+11725=>'L',
+11726=>'L',
+11728=>'L',
+11729=>'L',
+11730=>'L',
+11731=>'L',
+11732=>'L',
+11733=>'L',
+11734=>'L',
+11736=>'L',
+11737=>'L',
+11738=>'L',
+11739=>'L',
+11740=>'L',
+11741=>'L',
+11742=>'L',
+11776=>'ON',
+11777=>'ON',
+11778=>'ON',
+11779=>'ON',
+11780=>'ON',
+11781=>'ON',
+11782=>'ON',
+11783=>'ON',
+11784=>'ON',
+11785=>'ON',
+11786=>'ON',
+11787=>'ON',
+11788=>'ON',
+11789=>'ON',
+11790=>'ON',
+11791=>'ON',
+11792=>'ON',
+11793=>'ON',
+11794=>'ON',
+11795=>'ON',
+11796=>'ON',
+11797=>'ON',
+11798=>'ON',
+11799=>'ON',
+11804=>'ON',
+11805=>'ON',
+11904=>'ON',
+11905=>'ON',
+11906=>'ON',
+11907=>'ON',
+11908=>'ON',
+11909=>'ON',
+11910=>'ON',
+11911=>'ON',
+11912=>'ON',
+11913=>'ON',
+11914=>'ON',
+11915=>'ON',
+11916=>'ON',
+11917=>'ON',
+11918=>'ON',
+11919=>'ON',
+11920=>'ON',
+11921=>'ON',
+11922=>'ON',
+11923=>'ON',
+11924=>'ON',
+11925=>'ON',
+11926=>'ON',
+11927=>'ON',
+11928=>'ON',
+11929=>'ON',
+11931=>'ON',
+11932=>'ON',
+11933=>'ON',
+11934=>'ON',
+11935=>'ON',
+11936=>'ON',
+11937=>'ON',
+11938=>'ON',
+11939=>'ON',
+11940=>'ON',
+11941=>'ON',
+11942=>'ON',
+11943=>'ON',
+11944=>'ON',
+11945=>'ON',
+11946=>'ON',
+11947=>'ON',
+11948=>'ON',
+11949=>'ON',
+11950=>'ON',
+11951=>'ON',
+11952=>'ON',
+11953=>'ON',
+11954=>'ON',
+11955=>'ON',
+11956=>'ON',
+11957=>'ON',
+11958=>'ON',
+11959=>'ON',
+11960=>'ON',
+11961=>'ON',
+11962=>'ON',
+11963=>'ON',
+11964=>'ON',
+11965=>'ON',
+11966=>'ON',
+11967=>'ON',
+11968=>'ON',
+11969=>'ON',
+11970=>'ON',
+11971=>'ON',
+11972=>'ON',
+11973=>'ON',
+11974=>'ON',
+11975=>'ON',
+11976=>'ON',
+11977=>'ON',
+11978=>'ON',
+11979=>'ON',
+11980=>'ON',
+11981=>'ON',
+11982=>'ON',
+11983=>'ON',
+11984=>'ON',
+11985=>'ON',
+11986=>'ON',
+11987=>'ON',
+11988=>'ON',
+11989=>'ON',
+11990=>'ON',
+11991=>'ON',
+11992=>'ON',
+11993=>'ON',
+11994=>'ON',
+11995=>'ON',
+11996=>'ON',
+11997=>'ON',
+11998=>'ON',
+11999=>'ON',
+12000=>'ON',
+12001=>'ON',
+12002=>'ON',
+12003=>'ON',
+12004=>'ON',
+12005=>'ON',
+12006=>'ON',
+12007=>'ON',
+12008=>'ON',
+12009=>'ON',
+12010=>'ON',
+12011=>'ON',
+12012=>'ON',
+12013=>'ON',
+12014=>'ON',
+12015=>'ON',
+12016=>'ON',
+12017=>'ON',
+12018=>'ON',
+12019=>'ON',
+12032=>'ON',
+12033=>'ON',
+12034=>'ON',
+12035=>'ON',
+12036=>'ON',
+12037=>'ON',
+12038=>'ON',
+12039=>'ON',
+12040=>'ON',
+12041=>'ON',
+12042=>'ON',
+12043=>'ON',
+12044=>'ON',
+12045=>'ON',
+12046=>'ON',
+12047=>'ON',
+12048=>'ON',
+12049=>'ON',
+12050=>'ON',
+12051=>'ON',
+12052=>'ON',
+12053=>'ON',
+12054=>'ON',
+12055=>'ON',
+12056=>'ON',
+12057=>'ON',
+12058=>'ON',
+12059=>'ON',
+12060=>'ON',
+12061=>'ON',
+12062=>'ON',
+12063=>'ON',
+12064=>'ON',
+12065=>'ON',
+12066=>'ON',
+12067=>'ON',
+12068=>'ON',
+12069=>'ON',
+12070=>'ON',
+12071=>'ON',
+12072=>'ON',
+12073=>'ON',
+12074=>'ON',
+12075=>'ON',
+12076=>'ON',
+12077=>'ON',
+12078=>'ON',
+12079=>'ON',
+12080=>'ON',
+12081=>'ON',
+12082=>'ON',
+12083=>'ON',
+12084=>'ON',
+12085=>'ON',
+12086=>'ON',
+12087=>'ON',
+12088=>'ON',
+12089=>'ON',
+12090=>'ON',
+12091=>'ON',
+12092=>'ON',
+12093=>'ON',
+12094=>'ON',
+12095=>'ON',
+12096=>'ON',
+12097=>'ON',
+12098=>'ON',
+12099=>'ON',
+12100=>'ON',
+12101=>'ON',
+12102=>'ON',
+12103=>'ON',
+12104=>'ON',
+12105=>'ON',
+12106=>'ON',
+12107=>'ON',
+12108=>'ON',
+12109=>'ON',
+12110=>'ON',
+12111=>'ON',
+12112=>'ON',
+12113=>'ON',
+12114=>'ON',
+12115=>'ON',
+12116=>'ON',
+12117=>'ON',
+12118=>'ON',
+12119=>'ON',
+12120=>'ON',
+12121=>'ON',
+12122=>'ON',
+12123=>'ON',
+12124=>'ON',
+12125=>'ON',
+12126=>'ON',
+12127=>'ON',
+12128=>'ON',
+12129=>'ON',
+12130=>'ON',
+12131=>'ON',
+12132=>'ON',
+12133=>'ON',
+12134=>'ON',
+12135=>'ON',
+12136=>'ON',
+12137=>'ON',
+12138=>'ON',
+12139=>'ON',
+12140=>'ON',
+12141=>'ON',
+12142=>'ON',
+12143=>'ON',
+12144=>'ON',
+12145=>'ON',
+12146=>'ON',
+12147=>'ON',
+12148=>'ON',
+12149=>'ON',
+12150=>'ON',
+12151=>'ON',
+12152=>'ON',
+12153=>'ON',
+12154=>'ON',
+12155=>'ON',
+12156=>'ON',
+12157=>'ON',
+12158=>'ON',
+12159=>'ON',
+12160=>'ON',
+12161=>'ON',
+12162=>'ON',
+12163=>'ON',
+12164=>'ON',
+12165=>'ON',
+12166=>'ON',
+12167=>'ON',
+12168=>'ON',
+12169=>'ON',
+12170=>'ON',
+12171=>'ON',
+12172=>'ON',
+12173=>'ON',
+12174=>'ON',
+12175=>'ON',
+12176=>'ON',
+12177=>'ON',
+12178=>'ON',
+12179=>'ON',
+12180=>'ON',
+12181=>'ON',
+12182=>'ON',
+12183=>'ON',
+12184=>'ON',
+12185=>'ON',
+12186=>'ON',
+12187=>'ON',
+12188=>'ON',
+12189=>'ON',
+12190=>'ON',
+12191=>'ON',
+12192=>'ON',
+12193=>'ON',
+12194=>'ON',
+12195=>'ON',
+12196=>'ON',
+12197=>'ON',
+12198=>'ON',
+12199=>'ON',
+12200=>'ON',
+12201=>'ON',
+12202=>'ON',
+12203=>'ON',
+12204=>'ON',
+12205=>'ON',
+12206=>'ON',
+12207=>'ON',
+12208=>'ON',
+12209=>'ON',
+12210=>'ON',
+12211=>'ON',
+12212=>'ON',
+12213=>'ON',
+12214=>'ON',
+12215=>'ON',
+12216=>'ON',
+12217=>'ON',
+12218=>'ON',
+12219=>'ON',
+12220=>'ON',
+12221=>'ON',
+12222=>'ON',
+12223=>'ON',
+12224=>'ON',
+12225=>'ON',
+12226=>'ON',
+12227=>'ON',
+12228=>'ON',
+12229=>'ON',
+12230=>'ON',
+12231=>'ON',
+12232=>'ON',
+12233=>'ON',
+12234=>'ON',
+12235=>'ON',
+12236=>'ON',
+12237=>'ON',
+12238=>'ON',
+12239=>'ON',
+12240=>'ON',
+12241=>'ON',
+12242=>'ON',
+12243=>'ON',
+12244=>'ON',
+12245=>'ON',
+12272=>'ON',
+12273=>'ON',
+12274=>'ON',
+12275=>'ON',
+12276=>'ON',
+12277=>'ON',
+12278=>'ON',
+12279=>'ON',
+12280=>'ON',
+12281=>'ON',
+12282=>'ON',
+12283=>'ON',
+12288=>'WS',
+12289=>'ON',
+12290=>'ON',
+12291=>'ON',
+12292=>'ON',
+12293=>'L',
+12294=>'L',
+12295=>'L',
+12296=>'ON',
+12297=>'ON',
+12298=>'ON',
+12299=>'ON',
+12300=>'ON',
+12301=>'ON',
+12302=>'ON',
+12303=>'ON',
+12304=>'ON',
+12305=>'ON',
+12306=>'ON',
+12307=>'ON',
+12308=>'ON',
+12309=>'ON',
+12310=>'ON',
+12311=>'ON',
+12312=>'ON',
+12313=>'ON',
+12314=>'ON',
+12315=>'ON',
+12316=>'ON',
+12317=>'ON',
+12318=>'ON',
+12319=>'ON',
+12320=>'ON',
+12321=>'L',
+12322=>'L',
+12323=>'L',
+12324=>'L',
+12325=>'L',
+12326=>'L',
+12327=>'L',
+12328=>'L',
+12329=>'L',
+12330=>'NSM',
+12331=>'NSM',
+12332=>'NSM',
+12333=>'NSM',
+12334=>'NSM',
+12335=>'NSM',
+12336=>'ON',
+12337=>'L',
+12338=>'L',
+12339=>'L',
+12340=>'L',
+12341=>'L',
+12342=>'ON',
+12343=>'ON',
+12344=>'L',
+12345=>'L',
+12346=>'L',
+12347=>'L',
+12348=>'L',
+12349=>'ON',
+12350=>'ON',
+12351=>'ON',
+12353=>'L',
+12354=>'L',
+12355=>'L',
+12356=>'L',
+12357=>'L',
+12358=>'L',
+12359=>'L',
+12360=>'L',
+12361=>'L',
+12362=>'L',
+12363=>'L',
+12364=>'L',
+12365=>'L',
+12366=>'L',
+12367=>'L',
+12368=>'L',
+12369=>'L',
+12370=>'L',
+12371=>'L',
+12372=>'L',
+12373=>'L',
+12374=>'L',
+12375=>'L',
+12376=>'L',
+12377=>'L',
+12378=>'L',
+12379=>'L',
+12380=>'L',
+12381=>'L',
+12382=>'L',
+12383=>'L',
+12384=>'L',
+12385=>'L',
+12386=>'L',
+12387=>'L',
+12388=>'L',
+12389=>'L',
+12390=>'L',
+12391=>'L',
+12392=>'L',
+12393=>'L',
+12394=>'L',
+12395=>'L',
+12396=>'L',
+12397=>'L',
+12398=>'L',
+12399=>'L',
+12400=>'L',
+12401=>'L',
+12402=>'L',
+12403=>'L',
+12404=>'L',
+12405=>'L',
+12406=>'L',
+12407=>'L',
+12408=>'L',
+12409=>'L',
+12410=>'L',
+12411=>'L',
+12412=>'L',
+12413=>'L',
+12414=>'L',
+12415=>'L',
+12416=>'L',
+12417=>'L',
+12418=>'L',
+12419=>'L',
+12420=>'L',
+12421=>'L',
+12422=>'L',
+12423=>'L',
+12424=>'L',
+12425=>'L',
+12426=>'L',
+12427=>'L',
+12428=>'L',
+12429=>'L',
+12430=>'L',
+12431=>'L',
+12432=>'L',
+12433=>'L',
+12434=>'L',
+12435=>'L',
+12436=>'L',
+12437=>'L',
+12438=>'L',
+12441=>'NSM',
+12442=>'NSM',
+12443=>'ON',
+12444=>'ON',
+12445=>'L',
+12446=>'L',
+12447=>'L',
+12448=>'ON',
+12449=>'L',
+12450=>'L',
+12451=>'L',
+12452=>'L',
+12453=>'L',
+12454=>'L',
+12455=>'L',
+12456=>'L',
+12457=>'L',
+12458=>'L',
+12459=>'L',
+12460=>'L',
+12461=>'L',
+12462=>'L',
+12463=>'L',
+12464=>'L',
+12465=>'L',
+12466=>'L',
+12467=>'L',
+12468=>'L',
+12469=>'L',
+12470=>'L',
+12471=>'L',
+12472=>'L',
+12473=>'L',
+12474=>'L',
+12475=>'L',
+12476=>'L',
+12477=>'L',
+12478=>'L',
+12479=>'L',
+12480=>'L',
+12481=>'L',
+12482=>'L',
+12483=>'L',
+12484=>'L',
+12485=>'L',
+12486=>'L',
+12487=>'L',
+12488=>'L',
+12489=>'L',
+12490=>'L',
+12491=>'L',
+12492=>'L',
+12493=>'L',
+12494=>'L',
+12495=>'L',
+12496=>'L',
+12497=>'L',
+12498=>'L',
+12499=>'L',
+12500=>'L',
+12501=>'L',
+12502=>'L',
+12503=>'L',
+12504=>'L',
+12505=>'L',
+12506=>'L',
+12507=>'L',
+12508=>'L',
+12509=>'L',
+12510=>'L',
+12511=>'L',
+12512=>'L',
+12513=>'L',
+12514=>'L',
+12515=>'L',
+12516=>'L',
+12517=>'L',
+12518=>'L',
+12519=>'L',
+12520=>'L',
+12521=>'L',
+12522=>'L',
+12523=>'L',
+12524=>'L',
+12525=>'L',
+12526=>'L',
+12527=>'L',
+12528=>'L',
+12529=>'L',
+12530=>'L',
+12531=>'L',
+12532=>'L',
+12533=>'L',
+12534=>'L',
+12535=>'L',
+12536=>'L',
+12537=>'L',
+12538=>'L',
+12539=>'ON',
+12540=>'L',
+12541=>'L',
+12542=>'L',
+12543=>'L',
+12549=>'L',
+12550=>'L',
+12551=>'L',
+12552=>'L',
+12553=>'L',
+12554=>'L',
+12555=>'L',
+12556=>'L',
+12557=>'L',
+12558=>'L',
+12559=>'L',
+12560=>'L',
+12561=>'L',
+12562=>'L',
+12563=>'L',
+12564=>'L',
+12565=>'L',
+12566=>'L',
+12567=>'L',
+12568=>'L',
+12569=>'L',
+12570=>'L',
+12571=>'L',
+12572=>'L',
+12573=>'L',
+12574=>'L',
+12575=>'L',
+12576=>'L',
+12577=>'L',
+12578=>'L',
+12579=>'L',
+12580=>'L',
+12581=>'L',
+12582=>'L',
+12583=>'L',
+12584=>'L',
+12585=>'L',
+12586=>'L',
+12587=>'L',
+12588=>'L',
+12593=>'L',
+12594=>'L',
+12595=>'L',
+12596=>'L',
+12597=>'L',
+12598=>'L',
+12599=>'L',
+12600=>'L',
+12601=>'L',
+12602=>'L',
+12603=>'L',
+12604=>'L',
+12605=>'L',
+12606=>'L',
+12607=>'L',
+12608=>'L',
+12609=>'L',
+12610=>'L',
+12611=>'L',
+12612=>'L',
+12613=>'L',
+12614=>'L',
+12615=>'L',
+12616=>'L',
+12617=>'L',
+12618=>'L',
+12619=>'L',
+12620=>'L',
+12621=>'L',
+12622=>'L',
+12623=>'L',
+12624=>'L',
+12625=>'L',
+12626=>'L',
+12627=>'L',
+12628=>'L',
+12629=>'L',
+12630=>'L',
+12631=>'L',
+12632=>'L',
+12633=>'L',
+12634=>'L',
+12635=>'L',
+12636=>'L',
+12637=>'L',
+12638=>'L',
+12639=>'L',
+12640=>'L',
+12641=>'L',
+12642=>'L',
+12643=>'L',
+12644=>'L',
+12645=>'L',
+12646=>'L',
+12647=>'L',
+12648=>'L',
+12649=>'L',
+12650=>'L',
+12651=>'L',
+12652=>'L',
+12653=>'L',
+12654=>'L',
+12655=>'L',
+12656=>'L',
+12657=>'L',
+12658=>'L',
+12659=>'L',
+12660=>'L',
+12661=>'L',
+12662=>'L',
+12663=>'L',
+12664=>'L',
+12665=>'L',
+12666=>'L',
+12667=>'L',
+12668=>'L',
+12669=>'L',
+12670=>'L',
+12671=>'L',
+12672=>'L',
+12673=>'L',
+12674=>'L',
+12675=>'L',
+12676=>'L',
+12677=>'L',
+12678=>'L',
+12679=>'L',
+12680=>'L',
+12681=>'L',
+12682=>'L',
+12683=>'L',
+12684=>'L',
+12685=>'L',
+12686=>'L',
+12688=>'L',
+12689=>'L',
+12690=>'L',
+12691=>'L',
+12692=>'L',
+12693=>'L',
+12694=>'L',
+12695=>'L',
+12696=>'L',
+12697=>'L',
+12698=>'L',
+12699=>'L',
+12700=>'L',
+12701=>'L',
+12702=>'L',
+12703=>'L',
+12704=>'L',
+12705=>'L',
+12706=>'L',
+12707=>'L',
+12708=>'L',
+12709=>'L',
+12710=>'L',
+12711=>'L',
+12712=>'L',
+12713=>'L',
+12714=>'L',
+12715=>'L',
+12716=>'L',
+12717=>'L',
+12718=>'L',
+12719=>'L',
+12720=>'L',
+12721=>'L',
+12722=>'L',
+12723=>'L',
+12724=>'L',
+12725=>'L',
+12726=>'L',
+12727=>'L',
+12736=>'ON',
+12737=>'ON',
+12738=>'ON',
+12739=>'ON',
+12740=>'ON',
+12741=>'ON',
+12742=>'ON',
+12743=>'ON',
+12744=>'ON',
+12745=>'ON',
+12746=>'ON',
+12747=>'ON',
+12748=>'ON',
+12749=>'ON',
+12750=>'ON',
+12751=>'ON',
+12784=>'L',
+12785=>'L',
+12786=>'L',
+12787=>'L',
+12788=>'L',
+12789=>'L',
+12790=>'L',
+12791=>'L',
+12792=>'L',
+12793=>'L',
+12794=>'L',
+12795=>'L',
+12796=>'L',
+12797=>'L',
+12798=>'L',
+12799=>'L',
+12800=>'L',
+12801=>'L',
+12802=>'L',
+12803=>'L',
+12804=>'L',
+12805=>'L',
+12806=>'L',
+12807=>'L',
+12808=>'L',
+12809=>'L',
+12810=>'L',
+12811=>'L',
+12812=>'L',
+12813=>'L',
+12814=>'L',
+12815=>'L',
+12816=>'L',
+12817=>'L',
+12818=>'L',
+12819=>'L',
+12820=>'L',
+12821=>'L',
+12822=>'L',
+12823=>'L',
+12824=>'L',
+12825=>'L',
+12826=>'L',
+12827=>'L',
+12828=>'L',
+12829=>'ON',
+12830=>'ON',
+12832=>'L',
+12833=>'L',
+12834=>'L',
+12835=>'L',
+12836=>'L',
+12837=>'L',
+12838=>'L',
+12839=>'L',
+12840=>'L',
+12841=>'L',
+12842=>'L',
+12843=>'L',
+12844=>'L',
+12845=>'L',
+12846=>'L',
+12847=>'L',
+12848=>'L',
+12849=>'L',
+12850=>'L',
+12851=>'L',
+12852=>'L',
+12853=>'L',
+12854=>'L',
+12855=>'L',
+12856=>'L',
+12857=>'L',
+12858=>'L',
+12859=>'L',
+12860=>'L',
+12861=>'L',
+12862=>'L',
+12863=>'L',
+12864=>'L',
+12865=>'L',
+12866=>'L',
+12867=>'L',
+12880=>'ON',
+12881=>'ON',
+12882=>'ON',
+12883=>'ON',
+12884=>'ON',
+12885=>'ON',
+12886=>'ON',
+12887=>'ON',
+12888=>'ON',
+12889=>'ON',
+12890=>'ON',
+12891=>'ON',
+12892=>'ON',
+12893=>'ON',
+12894=>'ON',
+12895=>'ON',
+12896=>'L',
+12897=>'L',
+12898=>'L',
+12899=>'L',
+12900=>'L',
+12901=>'L',
+12902=>'L',
+12903=>'L',
+12904=>'L',
+12905=>'L',
+12906=>'L',
+12907=>'L',
+12908=>'L',
+12909=>'L',
+12910=>'L',
+12911=>'L',
+12912=>'L',
+12913=>'L',
+12914=>'L',
+12915=>'L',
+12916=>'L',
+12917=>'L',
+12918=>'L',
+12919=>'L',
+12920=>'L',
+12921=>'L',
+12922=>'L',
+12923=>'L',
+12924=>'ON',
+12925=>'ON',
+12926=>'ON',
+12927=>'L',
+12928=>'L',
+12929=>'L',
+12930=>'L',
+12931=>'L',
+12932=>'L',
+12933=>'L',
+12934=>'L',
+12935=>'L',
+12936=>'L',
+12937=>'L',
+12938=>'L',
+12939=>'L',
+12940=>'L',
+12941=>'L',
+12942=>'L',
+12943=>'L',
+12944=>'L',
+12945=>'L',
+12946=>'L',
+12947=>'L',
+12948=>'L',
+12949=>'L',
+12950=>'L',
+12951=>'L',
+12952=>'L',
+12953=>'L',
+12954=>'L',
+12955=>'L',
+12956=>'L',
+12957=>'L',
+12958=>'L',
+12959=>'L',
+12960=>'L',
+12961=>'L',
+12962=>'L',
+12963=>'L',
+12964=>'L',
+12965=>'L',
+12966=>'L',
+12967=>'L',
+12968=>'L',
+12969=>'L',
+12970=>'L',
+12971=>'L',
+12972=>'L',
+12973=>'L',
+12974=>'L',
+12975=>'L',
+12976=>'L',
+12977=>'ON',
+12978=>'ON',
+12979=>'ON',
+12980=>'ON',
+12981=>'ON',
+12982=>'ON',
+12983=>'ON',
+12984=>'ON',
+12985=>'ON',
+12986=>'ON',
+12987=>'ON',
+12988=>'ON',
+12989=>'ON',
+12990=>'ON',
+12991=>'ON',
+12992=>'L',
+12993=>'L',
+12994=>'L',
+12995=>'L',
+12996=>'L',
+12997=>'L',
+12998=>'L',
+12999=>'L',
+13000=>'L',
+13001=>'L',
+13002=>'L',
+13003=>'L',
+13004=>'ON',
+13005=>'ON',
+13006=>'ON',
+13007=>'ON',
+13008=>'L',
+13009=>'L',
+13010=>'L',
+13011=>'L',
+13012=>'L',
+13013=>'L',
+13014=>'L',
+13015=>'L',
+13016=>'L',
+13017=>'L',
+13018=>'L',
+13019=>'L',
+13020=>'L',
+13021=>'L',
+13022=>'L',
+13023=>'L',
+13024=>'L',
+13025=>'L',
+13026=>'L',
+13027=>'L',
+13028=>'L',
+13029=>'L',
+13030=>'L',
+13031=>'L',
+13032=>'L',
+13033=>'L',
+13034=>'L',
+13035=>'L',
+13036=>'L',
+13037=>'L',
+13038=>'L',
+13039=>'L',
+13040=>'L',
+13041=>'L',
+13042=>'L',
+13043=>'L',
+13044=>'L',
+13045=>'L',
+13046=>'L',
+13047=>'L',
+13048=>'L',
+13049=>'L',
+13050=>'L',
+13051=>'L',
+13052=>'L',
+13053=>'L',
+13054=>'L',
+13056=>'L',
+13057=>'L',
+13058=>'L',
+13059=>'L',
+13060=>'L',
+13061=>'L',
+13062=>'L',
+13063=>'L',
+13064=>'L',
+13065=>'L',
+13066=>'L',
+13067=>'L',
+13068=>'L',
+13069=>'L',
+13070=>'L',
+13071=>'L',
+13072=>'L',
+13073=>'L',
+13074=>'L',
+13075=>'L',
+13076=>'L',
+13077=>'L',
+13078=>'L',
+13079=>'L',
+13080=>'L',
+13081=>'L',
+13082=>'L',
+13083=>'L',
+13084=>'L',
+13085=>'L',
+13086=>'L',
+13087=>'L',
+13088=>'L',
+13089=>'L',
+13090=>'L',
+13091=>'L',
+13092=>'L',
+13093=>'L',
+13094=>'L',
+13095=>'L',
+13096=>'L',
+13097=>'L',
+13098=>'L',
+13099=>'L',
+13100=>'L',
+13101=>'L',
+13102=>'L',
+13103=>'L',
+13104=>'L',
+13105=>'L',
+13106=>'L',
+13107=>'L',
+13108=>'L',
+13109=>'L',
+13110=>'L',
+13111=>'L',
+13112=>'L',
+13113=>'L',
+13114=>'L',
+13115=>'L',
+13116=>'L',
+13117=>'L',
+13118=>'L',
+13119=>'L',
+13120=>'L',
+13121=>'L',
+13122=>'L',
+13123=>'L',
+13124=>'L',
+13125=>'L',
+13126=>'L',
+13127=>'L',
+13128=>'L',
+13129=>'L',
+13130=>'L',
+13131=>'L',
+13132=>'L',
+13133=>'L',
+13134=>'L',
+13135=>'L',
+13136=>'L',
+13137=>'L',
+13138=>'L',
+13139=>'L',
+13140=>'L',
+13141=>'L',
+13142=>'L',
+13143=>'L',
+13144=>'L',
+13145=>'L',
+13146=>'L',
+13147=>'L',
+13148=>'L',
+13149=>'L',
+13150=>'L',
+13151=>'L',
+13152=>'L',
+13153=>'L',
+13154=>'L',
+13155=>'L',
+13156=>'L',
+13157=>'L',
+13158=>'L',
+13159=>'L',
+13160=>'L',
+13161=>'L',
+13162=>'L',
+13163=>'L',
+13164=>'L',
+13165=>'L',
+13166=>'L',
+13167=>'L',
+13168=>'L',
+13169=>'L',
+13170=>'L',
+13171=>'L',
+13172=>'L',
+13173=>'L',
+13174=>'L',
+13175=>'ON',
+13176=>'ON',
+13177=>'ON',
+13178=>'ON',
+13179=>'L',
+13180=>'L',
+13181=>'L',
+13182=>'L',
+13183=>'L',
+13184=>'L',
+13185=>'L',
+13186=>'L',
+13187=>'L',
+13188=>'L',
+13189=>'L',
+13190=>'L',
+13191=>'L',
+13192=>'L',
+13193=>'L',
+13194=>'L',
+13195=>'L',
+13196=>'L',
+13197=>'L',
+13198=>'L',
+13199=>'L',
+13200=>'L',
+13201=>'L',
+13202=>'L',
+13203=>'L',
+13204=>'L',
+13205=>'L',
+13206=>'L',
+13207=>'L',
+13208=>'L',
+13209=>'L',
+13210=>'L',
+13211=>'L',
+13212=>'L',
+13213=>'L',
+13214=>'L',
+13215=>'L',
+13216=>'L',
+13217=>'L',
+13218=>'L',
+13219=>'L',
+13220=>'L',
+13221=>'L',
+13222=>'L',
+13223=>'L',
+13224=>'L',
+13225=>'L',
+13226=>'L',
+13227=>'L',
+13228=>'L',
+13229=>'L',
+13230=>'L',
+13231=>'L',
+13232=>'L',
+13233=>'L',
+13234=>'L',
+13235=>'L',
+13236=>'L',
+13237=>'L',
+13238=>'L',
+13239=>'L',
+13240=>'L',
+13241=>'L',
+13242=>'L',
+13243=>'L',
+13244=>'L',
+13245=>'L',
+13246=>'L',
+13247=>'L',
+13248=>'L',
+13249=>'L',
+13250=>'L',
+13251=>'L',
+13252=>'L',
+13253=>'L',
+13254=>'L',
+13255=>'L',
+13256=>'L',
+13257=>'L',
+13258=>'L',
+13259=>'L',
+13260=>'L',
+13261=>'L',
+13262=>'L',
+13263=>'L',
+13264=>'L',
+13265=>'L',
+13266=>'L',
+13267=>'L',
+13268=>'L',
+13269=>'L',
+13270=>'L',
+13271=>'L',
+13272=>'L',
+13273=>'L',
+13274=>'L',
+13275=>'L',
+13276=>'L',
+13277=>'L',
+13278=>'ON',
+13279=>'ON',
+13280=>'L',
+13281=>'L',
+13282=>'L',
+13283=>'L',
+13284=>'L',
+13285=>'L',
+13286=>'L',
+13287=>'L',
+13288=>'L',
+13289=>'L',
+13290=>'L',
+13291=>'L',
+13292=>'L',
+13293=>'L',
+13294=>'L',
+13295=>'L',
+13296=>'L',
+13297=>'L',
+13298=>'L',
+13299=>'L',
+13300=>'L',
+13301=>'L',
+13302=>'L',
+13303=>'L',
+13304=>'L',
+13305=>'L',
+13306=>'L',
+13307=>'L',
+13308=>'L',
+13309=>'L',
+13310=>'L',
+13311=>'ON',
+13312=>'L',
+19893=>'L',
+19904=>'ON',
+19905=>'ON',
+19906=>'ON',
+19907=>'ON',
+19908=>'ON',
+19909=>'ON',
+19910=>'ON',
+19911=>'ON',
+19912=>'ON',
+19913=>'ON',
+19914=>'ON',
+19915=>'ON',
+19916=>'ON',
+19917=>'ON',
+19918=>'ON',
+19919=>'ON',
+19920=>'ON',
+19921=>'ON',
+19922=>'ON',
+19923=>'ON',
+19924=>'ON',
+19925=>'ON',
+19926=>'ON',
+19927=>'ON',
+19928=>'ON',
+19929=>'ON',
+19930=>'ON',
+19931=>'ON',
+19932=>'ON',
+19933=>'ON',
+19934=>'ON',
+19935=>'ON',
+19936=>'ON',
+19937=>'ON',
+19938=>'ON',
+19939=>'ON',
+19940=>'ON',
+19941=>'ON',
+19942=>'ON',
+19943=>'ON',
+19944=>'ON',
+19945=>'ON',
+19946=>'ON',
+19947=>'ON',
+19948=>'ON',
+19949=>'ON',
+19950=>'ON',
+19951=>'ON',
+19952=>'ON',
+19953=>'ON',
+19954=>'ON',
+19955=>'ON',
+19956=>'ON',
+19957=>'ON',
+19958=>'ON',
+19959=>'ON',
+19960=>'ON',
+19961=>'ON',
+19962=>'ON',
+19963=>'ON',
+19964=>'ON',
+19965=>'ON',
+19966=>'ON',
+19967=>'ON',
+19968=>'L',
+40891=>'L',
+40960=>'L',
+40961=>'L',
+40962=>'L',
+40963=>'L',
+40964=>'L',
+40965=>'L',
+40966=>'L',
+40967=>'L',
+40968=>'L',
+40969=>'L',
+40970=>'L',
+40971=>'L',
+40972=>'L',
+40973=>'L',
+40974=>'L',
+40975=>'L',
+40976=>'L',
+40977=>'L',
+40978=>'L',
+40979=>'L',
+40980=>'L',
+40981=>'L',
+40982=>'L',
+40983=>'L',
+40984=>'L',
+40985=>'L',
+40986=>'L',
+40987=>'L',
+40988=>'L',
+40989=>'L',
+40990=>'L',
+40991=>'L',
+40992=>'L',
+40993=>'L',
+40994=>'L',
+40995=>'L',
+40996=>'L',
+40997=>'L',
+40998=>'L',
+40999=>'L',
+41000=>'L',
+41001=>'L',
+41002=>'L',
+41003=>'L',
+41004=>'L',
+41005=>'L',
+41006=>'L',
+41007=>'L',
+41008=>'L',
+41009=>'L',
+41010=>'L',
+41011=>'L',
+41012=>'L',
+41013=>'L',
+41014=>'L',
+41015=>'L',
+41016=>'L',
+41017=>'L',
+41018=>'L',
+41019=>'L',
+41020=>'L',
+41021=>'L',
+41022=>'L',
+41023=>'L',
+41024=>'L',
+41025=>'L',
+41026=>'L',
+41027=>'L',
+41028=>'L',
+41029=>'L',
+41030=>'L',
+41031=>'L',
+41032=>'L',
+41033=>'L',
+41034=>'L',
+41035=>'L',
+41036=>'L',
+41037=>'L',
+41038=>'L',
+41039=>'L',
+41040=>'L',
+41041=>'L',
+41042=>'L',
+41043=>'L',
+41044=>'L',
+41045=>'L',
+41046=>'L',
+41047=>'L',
+41048=>'L',
+41049=>'L',
+41050=>'L',
+41051=>'L',
+41052=>'L',
+41053=>'L',
+41054=>'L',
+41055=>'L',
+41056=>'L',
+41057=>'L',
+41058=>'L',
+41059=>'L',
+41060=>'L',
+41061=>'L',
+41062=>'L',
+41063=>'L',
+41064=>'L',
+41065=>'L',
+41066=>'L',
+41067=>'L',
+41068=>'L',
+41069=>'L',
+41070=>'L',
+41071=>'L',
+41072=>'L',
+41073=>'L',
+41074=>'L',
+41075=>'L',
+41076=>'L',
+41077=>'L',
+41078=>'L',
+41079=>'L',
+41080=>'L',
+41081=>'L',
+41082=>'L',
+41083=>'L',
+41084=>'L',
+41085=>'L',
+41086=>'L',
+41087=>'L',
+41088=>'L',
+41089=>'L',
+41090=>'L',
+41091=>'L',
+41092=>'L',
+41093=>'L',
+41094=>'L',
+41095=>'L',
+41096=>'L',
+41097=>'L',
+41098=>'L',
+41099=>'L',
+41100=>'L',
+41101=>'L',
+41102=>'L',
+41103=>'L',
+41104=>'L',
+41105=>'L',
+41106=>'L',
+41107=>'L',
+41108=>'L',
+41109=>'L',
+41110=>'L',
+41111=>'L',
+41112=>'L',
+41113=>'L',
+41114=>'L',
+41115=>'L',
+41116=>'L',
+41117=>'L',
+41118=>'L',
+41119=>'L',
+41120=>'L',
+41121=>'L',
+41122=>'L',
+41123=>'L',
+41124=>'L',
+41125=>'L',
+41126=>'L',
+41127=>'L',
+41128=>'L',
+41129=>'L',
+41130=>'L',
+41131=>'L',
+41132=>'L',
+41133=>'L',
+41134=>'L',
+41135=>'L',
+41136=>'L',
+41137=>'L',
+41138=>'L',
+41139=>'L',
+41140=>'L',
+41141=>'L',
+41142=>'L',
+41143=>'L',
+41144=>'L',
+41145=>'L',
+41146=>'L',
+41147=>'L',
+41148=>'L',
+41149=>'L',
+41150=>'L',
+41151=>'L',
+41152=>'L',
+41153=>'L',
+41154=>'L',
+41155=>'L',
+41156=>'L',
+41157=>'L',
+41158=>'L',
+41159=>'L',
+41160=>'L',
+41161=>'L',
+41162=>'L',
+41163=>'L',
+41164=>'L',
+41165=>'L',
+41166=>'L',
+41167=>'L',
+41168=>'L',
+41169=>'L',
+41170=>'L',
+41171=>'L',
+41172=>'L',
+41173=>'L',
+41174=>'L',
+41175=>'L',
+41176=>'L',
+41177=>'L',
+41178=>'L',
+41179=>'L',
+41180=>'L',
+41181=>'L',
+41182=>'L',
+41183=>'L',
+41184=>'L',
+41185=>'L',
+41186=>'L',
+41187=>'L',
+41188=>'L',
+41189=>'L',
+41190=>'L',
+41191=>'L',
+41192=>'L',
+41193=>'L',
+41194=>'L',
+41195=>'L',
+41196=>'L',
+41197=>'L',
+41198=>'L',
+41199=>'L',
+41200=>'L',
+41201=>'L',
+41202=>'L',
+41203=>'L',
+41204=>'L',
+41205=>'L',
+41206=>'L',
+41207=>'L',
+41208=>'L',
+41209=>'L',
+41210=>'L',
+41211=>'L',
+41212=>'L',
+41213=>'L',
+41214=>'L',
+41215=>'L',
+41216=>'L',
+41217=>'L',
+41218=>'L',
+41219=>'L',
+41220=>'L',
+41221=>'L',
+41222=>'L',
+41223=>'L',
+41224=>'L',
+41225=>'L',
+41226=>'L',
+41227=>'L',
+41228=>'L',
+41229=>'L',
+41230=>'L',
+41231=>'L',
+41232=>'L',
+41233=>'L',
+41234=>'L',
+41235=>'L',
+41236=>'L',
+41237=>'L',
+41238=>'L',
+41239=>'L',
+41240=>'L',
+41241=>'L',
+41242=>'L',
+41243=>'L',
+41244=>'L',
+41245=>'L',
+41246=>'L',
+41247=>'L',
+41248=>'L',
+41249=>'L',
+41250=>'L',
+41251=>'L',
+41252=>'L',
+41253=>'L',
+41254=>'L',
+41255=>'L',
+41256=>'L',
+41257=>'L',
+41258=>'L',
+41259=>'L',
+41260=>'L',
+41261=>'L',
+41262=>'L',
+41263=>'L',
+41264=>'L',
+41265=>'L',
+41266=>'L',
+41267=>'L',
+41268=>'L',
+41269=>'L',
+41270=>'L',
+41271=>'L',
+41272=>'L',
+41273=>'L',
+41274=>'L',
+41275=>'L',
+41276=>'L',
+41277=>'L',
+41278=>'L',
+41279=>'L',
+41280=>'L',
+41281=>'L',
+41282=>'L',
+41283=>'L',
+41284=>'L',
+41285=>'L',
+41286=>'L',
+41287=>'L',
+41288=>'L',
+41289=>'L',
+41290=>'L',
+41291=>'L',
+41292=>'L',
+41293=>'L',
+41294=>'L',
+41295=>'L',
+41296=>'L',
+41297=>'L',
+41298=>'L',
+41299=>'L',
+41300=>'L',
+41301=>'L',
+41302=>'L',
+41303=>'L',
+41304=>'L',
+41305=>'L',
+41306=>'L',
+41307=>'L',
+41308=>'L',
+41309=>'L',
+41310=>'L',
+41311=>'L',
+41312=>'L',
+41313=>'L',
+41314=>'L',
+41315=>'L',
+41316=>'L',
+41317=>'L',
+41318=>'L',
+41319=>'L',
+41320=>'L',
+41321=>'L',
+41322=>'L',
+41323=>'L',
+41324=>'L',
+41325=>'L',
+41326=>'L',
+41327=>'L',
+41328=>'L',
+41329=>'L',
+41330=>'L',
+41331=>'L',
+41332=>'L',
+41333=>'L',
+41334=>'L',
+41335=>'L',
+41336=>'L',
+41337=>'L',
+41338=>'L',
+41339=>'L',
+41340=>'L',
+41341=>'L',
+41342=>'L',
+41343=>'L',
+41344=>'L',
+41345=>'L',
+41346=>'L',
+41347=>'L',
+41348=>'L',
+41349=>'L',
+41350=>'L',
+41351=>'L',
+41352=>'L',
+41353=>'L',
+41354=>'L',
+41355=>'L',
+41356=>'L',
+41357=>'L',
+41358=>'L',
+41359=>'L',
+41360=>'L',
+41361=>'L',
+41362=>'L',
+41363=>'L',
+41364=>'L',
+41365=>'L',
+41366=>'L',
+41367=>'L',
+41368=>'L',
+41369=>'L',
+41370=>'L',
+41371=>'L',
+41372=>'L',
+41373=>'L',
+41374=>'L',
+41375=>'L',
+41376=>'L',
+41377=>'L',
+41378=>'L',
+41379=>'L',
+41380=>'L',
+41381=>'L',
+41382=>'L',
+41383=>'L',
+41384=>'L',
+41385=>'L',
+41386=>'L',
+41387=>'L',
+41388=>'L',
+41389=>'L',
+41390=>'L',
+41391=>'L',
+41392=>'L',
+41393=>'L',
+41394=>'L',
+41395=>'L',
+41396=>'L',
+41397=>'L',
+41398=>'L',
+41399=>'L',
+41400=>'L',
+41401=>'L',
+41402=>'L',
+41403=>'L',
+41404=>'L',
+41405=>'L',
+41406=>'L',
+41407=>'L',
+41408=>'L',
+41409=>'L',
+41410=>'L',
+41411=>'L',
+41412=>'L',
+41413=>'L',
+41414=>'L',
+41415=>'L',
+41416=>'L',
+41417=>'L',
+41418=>'L',
+41419=>'L',
+41420=>'L',
+41421=>'L',
+41422=>'L',
+41423=>'L',
+41424=>'L',
+41425=>'L',
+41426=>'L',
+41427=>'L',
+41428=>'L',
+41429=>'L',
+41430=>'L',
+41431=>'L',
+41432=>'L',
+41433=>'L',
+41434=>'L',
+41435=>'L',
+41436=>'L',
+41437=>'L',
+41438=>'L',
+41439=>'L',
+41440=>'L',
+41441=>'L',
+41442=>'L',
+41443=>'L',
+41444=>'L',
+41445=>'L',
+41446=>'L',
+41447=>'L',
+41448=>'L',
+41449=>'L',
+41450=>'L',
+41451=>'L',
+41452=>'L',
+41453=>'L',
+41454=>'L',
+41455=>'L',
+41456=>'L',
+41457=>'L',
+41458=>'L',
+41459=>'L',
+41460=>'L',
+41461=>'L',
+41462=>'L',
+41463=>'L',
+41464=>'L',
+41465=>'L',
+41466=>'L',
+41467=>'L',
+41468=>'L',
+41469=>'L',
+41470=>'L',
+41471=>'L',
+41472=>'L',
+41473=>'L',
+41474=>'L',
+41475=>'L',
+41476=>'L',
+41477=>'L',
+41478=>'L',
+41479=>'L',
+41480=>'L',
+41481=>'L',
+41482=>'L',
+41483=>'L',
+41484=>'L',
+41485=>'L',
+41486=>'L',
+41487=>'L',
+41488=>'L',
+41489=>'L',
+41490=>'L',
+41491=>'L',
+41492=>'L',
+41493=>'L',
+41494=>'L',
+41495=>'L',
+41496=>'L',
+41497=>'L',
+41498=>'L',
+41499=>'L',
+41500=>'L',
+41501=>'L',
+41502=>'L',
+41503=>'L',
+41504=>'L',
+41505=>'L',
+41506=>'L',
+41507=>'L',
+41508=>'L',
+41509=>'L',
+41510=>'L',
+41511=>'L',
+41512=>'L',
+41513=>'L',
+41514=>'L',
+41515=>'L',
+41516=>'L',
+41517=>'L',
+41518=>'L',
+41519=>'L',
+41520=>'L',
+41521=>'L',
+41522=>'L',
+41523=>'L',
+41524=>'L',
+41525=>'L',
+41526=>'L',
+41527=>'L',
+41528=>'L',
+41529=>'L',
+41530=>'L',
+41531=>'L',
+41532=>'L',
+41533=>'L',
+41534=>'L',
+41535=>'L',
+41536=>'L',
+41537=>'L',
+41538=>'L',
+41539=>'L',
+41540=>'L',
+41541=>'L',
+41542=>'L',
+41543=>'L',
+41544=>'L',
+41545=>'L',
+41546=>'L',
+41547=>'L',
+41548=>'L',
+41549=>'L',
+41550=>'L',
+41551=>'L',
+41552=>'L',
+41553=>'L',
+41554=>'L',
+41555=>'L',
+41556=>'L',
+41557=>'L',
+41558=>'L',
+41559=>'L',
+41560=>'L',
+41561=>'L',
+41562=>'L',
+41563=>'L',
+41564=>'L',
+41565=>'L',
+41566=>'L',
+41567=>'L',
+41568=>'L',
+41569=>'L',
+41570=>'L',
+41571=>'L',
+41572=>'L',
+41573=>'L',
+41574=>'L',
+41575=>'L',
+41576=>'L',
+41577=>'L',
+41578=>'L',
+41579=>'L',
+41580=>'L',
+41581=>'L',
+41582=>'L',
+41583=>'L',
+41584=>'L',
+41585=>'L',
+41586=>'L',
+41587=>'L',
+41588=>'L',
+41589=>'L',
+41590=>'L',
+41591=>'L',
+41592=>'L',
+41593=>'L',
+41594=>'L',
+41595=>'L',
+41596=>'L',
+41597=>'L',
+41598=>'L',
+41599=>'L',
+41600=>'L',
+41601=>'L',
+41602=>'L',
+41603=>'L',
+41604=>'L',
+41605=>'L',
+41606=>'L',
+41607=>'L',
+41608=>'L',
+41609=>'L',
+41610=>'L',
+41611=>'L',
+41612=>'L',
+41613=>'L',
+41614=>'L',
+41615=>'L',
+41616=>'L',
+41617=>'L',
+41618=>'L',
+41619=>'L',
+41620=>'L',
+41621=>'L',
+41622=>'L',
+41623=>'L',
+41624=>'L',
+41625=>'L',
+41626=>'L',
+41627=>'L',
+41628=>'L',
+41629=>'L',
+41630=>'L',
+41631=>'L',
+41632=>'L',
+41633=>'L',
+41634=>'L',
+41635=>'L',
+41636=>'L',
+41637=>'L',
+41638=>'L',
+41639=>'L',
+41640=>'L',
+41641=>'L',
+41642=>'L',
+41643=>'L',
+41644=>'L',
+41645=>'L',
+41646=>'L',
+41647=>'L',
+41648=>'L',
+41649=>'L',
+41650=>'L',
+41651=>'L',
+41652=>'L',
+41653=>'L',
+41654=>'L',
+41655=>'L',
+41656=>'L',
+41657=>'L',
+41658=>'L',
+41659=>'L',
+41660=>'L',
+41661=>'L',
+41662=>'L',
+41663=>'L',
+41664=>'L',
+41665=>'L',
+41666=>'L',
+41667=>'L',
+41668=>'L',
+41669=>'L',
+41670=>'L',
+41671=>'L',
+41672=>'L',
+41673=>'L',
+41674=>'L',
+41675=>'L',
+41676=>'L',
+41677=>'L',
+41678=>'L',
+41679=>'L',
+41680=>'L',
+41681=>'L',
+41682=>'L',
+41683=>'L',
+41684=>'L',
+41685=>'L',
+41686=>'L',
+41687=>'L',
+41688=>'L',
+41689=>'L',
+41690=>'L',
+41691=>'L',
+41692=>'L',
+41693=>'L',
+41694=>'L',
+41695=>'L',
+41696=>'L',
+41697=>'L',
+41698=>'L',
+41699=>'L',
+41700=>'L',
+41701=>'L',
+41702=>'L',
+41703=>'L',
+41704=>'L',
+41705=>'L',
+41706=>'L',
+41707=>'L',
+41708=>'L',
+41709=>'L',
+41710=>'L',
+41711=>'L',
+41712=>'L',
+41713=>'L',
+41714=>'L',
+41715=>'L',
+41716=>'L',
+41717=>'L',
+41718=>'L',
+41719=>'L',
+41720=>'L',
+41721=>'L',
+41722=>'L',
+41723=>'L',
+41724=>'L',
+41725=>'L',
+41726=>'L',
+41727=>'L',
+41728=>'L',
+41729=>'L',
+41730=>'L',
+41731=>'L',
+41732=>'L',
+41733=>'L',
+41734=>'L',
+41735=>'L',
+41736=>'L',
+41737=>'L',
+41738=>'L',
+41739=>'L',
+41740=>'L',
+41741=>'L',
+41742=>'L',
+41743=>'L',
+41744=>'L',
+41745=>'L',
+41746=>'L',
+41747=>'L',
+41748=>'L',
+41749=>'L',
+41750=>'L',
+41751=>'L',
+41752=>'L',
+41753=>'L',
+41754=>'L',
+41755=>'L',
+41756=>'L',
+41757=>'L',
+41758=>'L',
+41759=>'L',
+41760=>'L',
+41761=>'L',
+41762=>'L',
+41763=>'L',
+41764=>'L',
+41765=>'L',
+41766=>'L',
+41767=>'L',
+41768=>'L',
+41769=>'L',
+41770=>'L',
+41771=>'L',
+41772=>'L',
+41773=>'L',
+41774=>'L',
+41775=>'L',
+41776=>'L',
+41777=>'L',
+41778=>'L',
+41779=>'L',
+41780=>'L',
+41781=>'L',
+41782=>'L',
+41783=>'L',
+41784=>'L',
+41785=>'L',
+41786=>'L',
+41787=>'L',
+41788=>'L',
+41789=>'L',
+41790=>'L',
+41791=>'L',
+41792=>'L',
+41793=>'L',
+41794=>'L',
+41795=>'L',
+41796=>'L',
+41797=>'L',
+41798=>'L',
+41799=>'L',
+41800=>'L',
+41801=>'L',
+41802=>'L',
+41803=>'L',
+41804=>'L',
+41805=>'L',
+41806=>'L',
+41807=>'L',
+41808=>'L',
+41809=>'L',
+41810=>'L',
+41811=>'L',
+41812=>'L',
+41813=>'L',
+41814=>'L',
+41815=>'L',
+41816=>'L',
+41817=>'L',
+41818=>'L',
+41819=>'L',
+41820=>'L',
+41821=>'L',
+41822=>'L',
+41823=>'L',
+41824=>'L',
+41825=>'L',
+41826=>'L',
+41827=>'L',
+41828=>'L',
+41829=>'L',
+41830=>'L',
+41831=>'L',
+41832=>'L',
+41833=>'L',
+41834=>'L',
+41835=>'L',
+41836=>'L',
+41837=>'L',
+41838=>'L',
+41839=>'L',
+41840=>'L',
+41841=>'L',
+41842=>'L',
+41843=>'L',
+41844=>'L',
+41845=>'L',
+41846=>'L',
+41847=>'L',
+41848=>'L',
+41849=>'L',
+41850=>'L',
+41851=>'L',
+41852=>'L',
+41853=>'L',
+41854=>'L',
+41855=>'L',
+41856=>'L',
+41857=>'L',
+41858=>'L',
+41859=>'L',
+41860=>'L',
+41861=>'L',
+41862=>'L',
+41863=>'L',
+41864=>'L',
+41865=>'L',
+41866=>'L',
+41867=>'L',
+41868=>'L',
+41869=>'L',
+41870=>'L',
+41871=>'L',
+41872=>'L',
+41873=>'L',
+41874=>'L',
+41875=>'L',
+41876=>'L',
+41877=>'L',
+41878=>'L',
+41879=>'L',
+41880=>'L',
+41881=>'L',
+41882=>'L',
+41883=>'L',
+41884=>'L',
+41885=>'L',
+41886=>'L',
+41887=>'L',
+41888=>'L',
+41889=>'L',
+41890=>'L',
+41891=>'L',
+41892=>'L',
+41893=>'L',
+41894=>'L',
+41895=>'L',
+41896=>'L',
+41897=>'L',
+41898=>'L',
+41899=>'L',
+41900=>'L',
+41901=>'L',
+41902=>'L',
+41903=>'L',
+41904=>'L',
+41905=>'L',
+41906=>'L',
+41907=>'L',
+41908=>'L',
+41909=>'L',
+41910=>'L',
+41911=>'L',
+41912=>'L',
+41913=>'L',
+41914=>'L',
+41915=>'L',
+41916=>'L',
+41917=>'L',
+41918=>'L',
+41919=>'L',
+41920=>'L',
+41921=>'L',
+41922=>'L',
+41923=>'L',
+41924=>'L',
+41925=>'L',
+41926=>'L',
+41927=>'L',
+41928=>'L',
+41929=>'L',
+41930=>'L',
+41931=>'L',
+41932=>'L',
+41933=>'L',
+41934=>'L',
+41935=>'L',
+41936=>'L',
+41937=>'L',
+41938=>'L',
+41939=>'L',
+41940=>'L',
+41941=>'L',
+41942=>'L',
+41943=>'L',
+41944=>'L',
+41945=>'L',
+41946=>'L',
+41947=>'L',
+41948=>'L',
+41949=>'L',
+41950=>'L',
+41951=>'L',
+41952=>'L',
+41953=>'L',
+41954=>'L',
+41955=>'L',
+41956=>'L',
+41957=>'L',
+41958=>'L',
+41959=>'L',
+41960=>'L',
+41961=>'L',
+41962=>'L',
+41963=>'L',
+41964=>'L',
+41965=>'L',
+41966=>'L',
+41967=>'L',
+41968=>'L',
+41969=>'L',
+41970=>'L',
+41971=>'L',
+41972=>'L',
+41973=>'L',
+41974=>'L',
+41975=>'L',
+41976=>'L',
+41977=>'L',
+41978=>'L',
+41979=>'L',
+41980=>'L',
+41981=>'L',
+41982=>'L',
+41983=>'L',
+41984=>'L',
+41985=>'L',
+41986=>'L',
+41987=>'L',
+41988=>'L',
+41989=>'L',
+41990=>'L',
+41991=>'L',
+41992=>'L',
+41993=>'L',
+41994=>'L',
+41995=>'L',
+41996=>'L',
+41997=>'L',
+41998=>'L',
+41999=>'L',
+42000=>'L',
+42001=>'L',
+42002=>'L',
+42003=>'L',
+42004=>'L',
+42005=>'L',
+42006=>'L',
+42007=>'L',
+42008=>'L',
+42009=>'L',
+42010=>'L',
+42011=>'L',
+42012=>'L',
+42013=>'L',
+42014=>'L',
+42015=>'L',
+42016=>'L',
+42017=>'L',
+42018=>'L',
+42019=>'L',
+42020=>'L',
+42021=>'L',
+42022=>'L',
+42023=>'L',
+42024=>'L',
+42025=>'L',
+42026=>'L',
+42027=>'L',
+42028=>'L',
+42029=>'L',
+42030=>'L',
+42031=>'L',
+42032=>'L',
+42033=>'L',
+42034=>'L',
+42035=>'L',
+42036=>'L',
+42037=>'L',
+42038=>'L',
+42039=>'L',
+42040=>'L',
+42041=>'L',
+42042=>'L',
+42043=>'L',
+42044=>'L',
+42045=>'L',
+42046=>'L',
+42047=>'L',
+42048=>'L',
+42049=>'L',
+42050=>'L',
+42051=>'L',
+42052=>'L',
+42053=>'L',
+42054=>'L',
+42055=>'L',
+42056=>'L',
+42057=>'L',
+42058=>'L',
+42059=>'L',
+42060=>'L',
+42061=>'L',
+42062=>'L',
+42063=>'L',
+42064=>'L',
+42065=>'L',
+42066=>'L',
+42067=>'L',
+42068=>'L',
+42069=>'L',
+42070=>'L',
+42071=>'L',
+42072=>'L',
+42073=>'L',
+42074=>'L',
+42075=>'L',
+42076=>'L',
+42077=>'L',
+42078=>'L',
+42079=>'L',
+42080=>'L',
+42081=>'L',
+42082=>'L',
+42083=>'L',
+42084=>'L',
+42085=>'L',
+42086=>'L',
+42087=>'L',
+42088=>'L',
+42089=>'L',
+42090=>'L',
+42091=>'L',
+42092=>'L',
+42093=>'L',
+42094=>'L',
+42095=>'L',
+42096=>'L',
+42097=>'L',
+42098=>'L',
+42099=>'L',
+42100=>'L',
+42101=>'L',
+42102=>'L',
+42103=>'L',
+42104=>'L',
+42105=>'L',
+42106=>'L',
+42107=>'L',
+42108=>'L',
+42109=>'L',
+42110=>'L',
+42111=>'L',
+42112=>'L',
+42113=>'L',
+42114=>'L',
+42115=>'L',
+42116=>'L',
+42117=>'L',
+42118=>'L',
+42119=>'L',
+42120=>'L',
+42121=>'L',
+42122=>'L',
+42123=>'L',
+42124=>'L',
+42128=>'ON',
+42129=>'ON',
+42130=>'ON',
+42131=>'ON',
+42132=>'ON',
+42133=>'ON',
+42134=>'ON',
+42135=>'ON',
+42136=>'ON',
+42137=>'ON',
+42138=>'ON',
+42139=>'ON',
+42140=>'ON',
+42141=>'ON',
+42142=>'ON',
+42143=>'ON',
+42144=>'ON',
+42145=>'ON',
+42146=>'ON',
+42147=>'ON',
+42148=>'ON',
+42149=>'ON',
+42150=>'ON',
+42151=>'ON',
+42152=>'ON',
+42153=>'ON',
+42154=>'ON',
+42155=>'ON',
+42156=>'ON',
+42157=>'ON',
+42158=>'ON',
+42159=>'ON',
+42160=>'ON',
+42161=>'ON',
+42162=>'ON',
+42163=>'ON',
+42164=>'ON',
+42165=>'ON',
+42166=>'ON',
+42167=>'ON',
+42168=>'ON',
+42169=>'ON',
+42170=>'ON',
+42171=>'ON',
+42172=>'ON',
+42173=>'ON',
+42174=>'ON',
+42175=>'ON',
+42176=>'ON',
+42177=>'ON',
+42178=>'ON',
+42179=>'ON',
+42180=>'ON',
+42181=>'ON',
+42182=>'ON',
+42752=>'ON',
+42753=>'ON',
+42754=>'ON',
+42755=>'ON',
+42756=>'ON',
+42757=>'ON',
+42758=>'ON',
+42759=>'ON',
+42760=>'ON',
+42761=>'ON',
+42762=>'ON',
+42763=>'ON',
+42764=>'ON',
+42765=>'ON',
+42766=>'ON',
+42767=>'ON',
+42768=>'ON',
+42769=>'ON',
+42770=>'ON',
+42771=>'ON',
+42772=>'ON',
+42773=>'ON',
+42774=>'ON',
+42775=>'ON',
+42776=>'ON',
+42777=>'ON',
+42778=>'ON',
+42784=>'ON',
+42785=>'ON',
+43008=>'L',
+43009=>'L',
+43010=>'NSM',
+43011=>'L',
+43012=>'L',
+43013=>'L',
+43014=>'NSM',
+43015=>'L',
+43016=>'L',
+43017=>'L',
+43018=>'L',
+43019=>'NSM',
+43020=>'L',
+43021=>'L',
+43022=>'L',
+43023=>'L',
+43024=>'L',
+43025=>'L',
+43026=>'L',
+43027=>'L',
+43028=>'L',
+43029=>'L',
+43030=>'L',
+43031=>'L',
+43032=>'L',
+43033=>'L',
+43034=>'L',
+43035=>'L',
+43036=>'L',
+43037=>'L',
+43038=>'L',
+43039=>'L',
+43040=>'L',
+43041=>'L',
+43042=>'L',
+43043=>'L',
+43044=>'L',
+43045=>'NSM',
+43046=>'NSM',
+43047=>'L',
+43048=>'ON',
+43049=>'ON',
+43050=>'ON',
+43051=>'ON',
+43072=>'L',
+43073=>'L',
+43074=>'L',
+43075=>'L',
+43076=>'L',
+43077=>'L',
+43078=>'L',
+43079=>'L',
+43080=>'L',
+43081=>'L',
+43082=>'L',
+43083=>'L',
+43084=>'L',
+43085=>'L',
+43086=>'L',
+43087=>'L',
+43088=>'L',
+43089=>'L',
+43090=>'L',
+43091=>'L',
+43092=>'L',
+43093=>'L',
+43094=>'L',
+43095=>'L',
+43096=>'L',
+43097=>'L',
+43098=>'L',
+43099=>'L',
+43100=>'L',
+43101=>'L',
+43102=>'L',
+43103=>'L',
+43104=>'L',
+43105=>'L',
+43106=>'L',
+43107=>'L',
+43108=>'L',
+43109=>'L',
+43110=>'L',
+43111=>'L',
+43112=>'L',
+43113=>'L',
+43114=>'L',
+43115=>'L',
+43116=>'L',
+43117=>'L',
+43118=>'L',
+43119=>'L',
+43120=>'L',
+43121=>'L',
+43122=>'L',
+43123=>'L',
+43124=>'ON',
+43125=>'ON',
+43126=>'ON',
+43127=>'ON',
+44032=>'L',
+55203=>'L',
+55296=>'L',
+56191=>'L',
+56192=>'L',
+56319=>'L',
+56320=>'L',
+57343=>'L',
+57344=>'L',
+63743=>'L',
+63744=>'L',
+63745=>'L',
+63746=>'L',
+63747=>'L',
+63748=>'L',
+63749=>'L',
+63750=>'L',
+63751=>'L',
+63752=>'L',
+63753=>'L',
+63754=>'L',
+63755=>'L',
+63756=>'L',
+63757=>'L',
+63758=>'L',
+63759=>'L',
+63760=>'L',
+63761=>'L',
+63762=>'L',
+63763=>'L',
+63764=>'L',
+63765=>'L',
+63766=>'L',
+63767=>'L',
+63768=>'L',
+63769=>'L',
+63770=>'L',
+63771=>'L',
+63772=>'L',
+63773=>'L',
+63774=>'L',
+63775=>'L',
+63776=>'L',
+63777=>'L',
+63778=>'L',
+63779=>'L',
+63780=>'L',
+63781=>'L',
+63782=>'L',
+63783=>'L',
+63784=>'L',
+63785=>'L',
+63786=>'L',
+63787=>'L',
+63788=>'L',
+63789=>'L',
+63790=>'L',
+63791=>'L',
+63792=>'L',
+63793=>'L',
+63794=>'L',
+63795=>'L',
+63796=>'L',
+63797=>'L',
+63798=>'L',
+63799=>'L',
+63800=>'L',
+63801=>'L',
+63802=>'L',
+63803=>'L',
+63804=>'L',
+63805=>'L',
+63806=>'L',
+63807=>'L',
+63808=>'L',
+63809=>'L',
+63810=>'L',
+63811=>'L',
+63812=>'L',
+63813=>'L',
+63814=>'L',
+63815=>'L',
+63816=>'L',
+63817=>'L',
+63818=>'L',
+63819=>'L',
+63820=>'L',
+63821=>'L',
+63822=>'L',
+63823=>'L',
+63824=>'L',
+63825=>'L',
+63826=>'L',
+63827=>'L',
+63828=>'L',
+63829=>'L',
+63830=>'L',
+63831=>'L',
+63832=>'L',
+63833=>'L',
+63834=>'L',
+63835=>'L',
+63836=>'L',
+63837=>'L',
+63838=>'L',
+63839=>'L',
+63840=>'L',
+63841=>'L',
+63842=>'L',
+63843=>'L',
+63844=>'L',
+63845=>'L',
+63846=>'L',
+63847=>'L',
+63848=>'L',
+63849=>'L',
+63850=>'L',
+63851=>'L',
+63852=>'L',
+63853=>'L',
+63854=>'L',
+63855=>'L',
+63856=>'L',
+63857=>'L',
+63858=>'L',
+63859=>'L',
+63860=>'L',
+63861=>'L',
+63862=>'L',
+63863=>'L',
+63864=>'L',
+63865=>'L',
+63866=>'L',
+63867=>'L',
+63868=>'L',
+63869=>'L',
+63870=>'L',
+63871=>'L',
+63872=>'L',
+63873=>'L',
+63874=>'L',
+63875=>'L',
+63876=>'L',
+63877=>'L',
+63878=>'L',
+63879=>'L',
+63880=>'L',
+63881=>'L',
+63882=>'L',
+63883=>'L',
+63884=>'L',
+63885=>'L',
+63886=>'L',
+63887=>'L',
+63888=>'L',
+63889=>'L',
+63890=>'L',
+63891=>'L',
+63892=>'L',
+63893=>'L',
+63894=>'L',
+63895=>'L',
+63896=>'L',
+63897=>'L',
+63898=>'L',
+63899=>'L',
+63900=>'L',
+63901=>'L',
+63902=>'L',
+63903=>'L',
+63904=>'L',
+63905=>'L',
+63906=>'L',
+63907=>'L',
+63908=>'L',
+63909=>'L',
+63910=>'L',
+63911=>'L',
+63912=>'L',
+63913=>'L',
+63914=>'L',
+63915=>'L',
+63916=>'L',
+63917=>'L',
+63918=>'L',
+63919=>'L',
+63920=>'L',
+63921=>'L',
+63922=>'L',
+63923=>'L',
+63924=>'L',
+63925=>'L',
+63926=>'L',
+63927=>'L',
+63928=>'L',
+63929=>'L',
+63930=>'L',
+63931=>'L',
+63932=>'L',
+63933=>'L',
+63934=>'L',
+63935=>'L',
+63936=>'L',
+63937=>'L',
+63938=>'L',
+63939=>'L',
+63940=>'L',
+63941=>'L',
+63942=>'L',
+63943=>'L',
+63944=>'L',
+63945=>'L',
+63946=>'L',
+63947=>'L',
+63948=>'L',
+63949=>'L',
+63950=>'L',
+63951=>'L',
+63952=>'L',
+63953=>'L',
+63954=>'L',
+63955=>'L',
+63956=>'L',
+63957=>'L',
+63958=>'L',
+63959=>'L',
+63960=>'L',
+63961=>'L',
+63962=>'L',
+63963=>'L',
+63964=>'L',
+63965=>'L',
+63966=>'L',
+63967=>'L',
+63968=>'L',
+63969=>'L',
+63970=>'L',
+63971=>'L',
+63972=>'L',
+63973=>'L',
+63974=>'L',
+63975=>'L',
+63976=>'L',
+63977=>'L',
+63978=>'L',
+63979=>'L',
+63980=>'L',
+63981=>'L',
+63982=>'L',
+63983=>'L',
+63984=>'L',
+63985=>'L',
+63986=>'L',
+63987=>'L',
+63988=>'L',
+63989=>'L',
+63990=>'L',
+63991=>'L',
+63992=>'L',
+63993=>'L',
+63994=>'L',
+63995=>'L',
+63996=>'L',
+63997=>'L',
+63998=>'L',
+63999=>'L',
+64000=>'L',
+64001=>'L',
+64002=>'L',
+64003=>'L',
+64004=>'L',
+64005=>'L',
+64006=>'L',
+64007=>'L',
+64008=>'L',
+64009=>'L',
+64010=>'L',
+64011=>'L',
+64012=>'L',
+64013=>'L',
+64014=>'L',
+64015=>'L',
+64016=>'L',
+64017=>'L',
+64018=>'L',
+64019=>'L',
+64020=>'L',
+64021=>'L',
+64022=>'L',
+64023=>'L',
+64024=>'L',
+64025=>'L',
+64026=>'L',
+64027=>'L',
+64028=>'L',
+64029=>'L',
+64030=>'L',
+64031=>'L',
+64032=>'L',
+64033=>'L',
+64034=>'L',
+64035=>'L',
+64036=>'L',
+64037=>'L',
+64038=>'L',
+64039=>'L',
+64040=>'L',
+64041=>'L',
+64042=>'L',
+64043=>'L',
+64044=>'L',
+64045=>'L',
+64048=>'L',
+64049=>'L',
+64050=>'L',
+64051=>'L',
+64052=>'L',
+64053=>'L',
+64054=>'L',
+64055=>'L',
+64056=>'L',
+64057=>'L',
+64058=>'L',
+64059=>'L',
+64060=>'L',
+64061=>'L',
+64062=>'L',
+64063=>'L',
+64064=>'L',
+64065=>'L',
+64066=>'L',
+64067=>'L',
+64068=>'L',
+64069=>'L',
+64070=>'L',
+64071=>'L',
+64072=>'L',
+64073=>'L',
+64074=>'L',
+64075=>'L',
+64076=>'L',
+64077=>'L',
+64078=>'L',
+64079=>'L',
+64080=>'L',
+64081=>'L',
+64082=>'L',
+64083=>'L',
+64084=>'L',
+64085=>'L',
+64086=>'L',
+64087=>'L',
+64088=>'L',
+64089=>'L',
+64090=>'L',
+64091=>'L',
+64092=>'L',
+64093=>'L',
+64094=>'L',
+64095=>'L',
+64096=>'L',
+64097=>'L',
+64098=>'L',
+64099=>'L',
+64100=>'L',
+64101=>'L',
+64102=>'L',
+64103=>'L',
+64104=>'L',
+64105=>'L',
+64106=>'L',
+64112=>'L',
+64113=>'L',
+64114=>'L',
+64115=>'L',
+64116=>'L',
+64117=>'L',
+64118=>'L',
+64119=>'L',
+64120=>'L',
+64121=>'L',
+64122=>'L',
+64123=>'L',
+64124=>'L',
+64125=>'L',
+64126=>'L',
+64127=>'L',
+64128=>'L',
+64129=>'L',
+64130=>'L',
+64131=>'L',
+64132=>'L',
+64133=>'L',
+64134=>'L',
+64135=>'L',
+64136=>'L',
+64137=>'L',
+64138=>'L',
+64139=>'L',
+64140=>'L',
+64141=>'L',
+64142=>'L',
+64143=>'L',
+64144=>'L',
+64145=>'L',
+64146=>'L',
+64147=>'L',
+64148=>'L',
+64149=>'L',
+64150=>'L',
+64151=>'L',
+64152=>'L',
+64153=>'L',
+64154=>'L',
+64155=>'L',
+64156=>'L',
+64157=>'L',
+64158=>'L',
+64159=>'L',
+64160=>'L',
+64161=>'L',
+64162=>'L',
+64163=>'L',
+64164=>'L',
+64165=>'L',
+64166=>'L',
+64167=>'L',
+64168=>'L',
+64169=>'L',
+64170=>'L',
+64171=>'L',
+64172=>'L',
+64173=>'L',
+64174=>'L',
+64175=>'L',
+64176=>'L',
+64177=>'L',
+64178=>'L',
+64179=>'L',
+64180=>'L',
+64181=>'L',
+64182=>'L',
+64183=>'L',
+64184=>'L',
+64185=>'L',
+64186=>'L',
+64187=>'L',
+64188=>'L',
+64189=>'L',
+64190=>'L',
+64191=>'L',
+64192=>'L',
+64193=>'L',
+64194=>'L',
+64195=>'L',
+64196=>'L',
+64197=>'L',
+64198=>'L',
+64199=>'L',
+64200=>'L',
+64201=>'L',
+64202=>'L',
+64203=>'L',
+64204=>'L',
+64205=>'L',
+64206=>'L',
+64207=>'L',
+64208=>'L',
+64209=>'L',
+64210=>'L',
+64211=>'L',
+64212=>'L',
+64213=>'L',
+64214=>'L',
+64215=>'L',
+64216=>'L',
+64217=>'L',
+64256=>'L',
+64257=>'L',
+64258=>'L',
+64259=>'L',
+64260=>'L',
+64261=>'L',
+64262=>'L',
+64275=>'L',
+64276=>'L',
+64277=>'L',
+64278=>'L',
+64279=>'L',
+64285=>'R',
+64286=>'NSM',
+64287=>'R',
+64288=>'R',
+64289=>'R',
+64290=>'R',
+64291=>'R',
+64292=>'R',
+64293=>'R',
+64294=>'R',
+64295=>'R',
+64296=>'R',
+64297=>'ES',
+64298=>'R',
+64299=>'R',
+64300=>'R',
+64301=>'R',
+64302=>'R',
+64303=>'R',
+64304=>'R',
+64305=>'R',
+64306=>'R',
+64307=>'R',
+64308=>'R',
+64309=>'R',
+64310=>'R',
+64312=>'R',
+64313=>'R',
+64314=>'R',
+64315=>'R',
+64316=>'R',
+64318=>'R',
+64320=>'R',
+64321=>'R',
+64323=>'R',
+64324=>'R',
+64326=>'R',
+64327=>'R',
+64328=>'R',
+64329=>'R',
+64330=>'R',
+64331=>'R',
+64332=>'R',
+64333=>'R',
+64334=>'R',
+64335=>'R',
+64336=>'AL',
+64337=>'AL',
+64338=>'AL',
+64339=>'AL',
+64340=>'AL',
+64341=>'AL',
+64342=>'AL',
+64343=>'AL',
+64344=>'AL',
+64345=>'AL',
+64346=>'AL',
+64347=>'AL',
+64348=>'AL',
+64349=>'AL',
+64350=>'AL',
+64351=>'AL',
+64352=>'AL',
+64353=>'AL',
+64354=>'AL',
+64355=>'AL',
+64356=>'AL',
+64357=>'AL',
+64358=>'AL',
+64359=>'AL',
+64360=>'AL',
+64361=>'AL',
+64362=>'AL',
+64363=>'AL',
+64364=>'AL',
+64365=>'AL',
+64366=>'AL',
+64367=>'AL',
+64368=>'AL',
+64369=>'AL',
+64370=>'AL',
+64371=>'AL',
+64372=>'AL',
+64373=>'AL',
+64374=>'AL',
+64375=>'AL',
+64376=>'AL',
+64377=>'AL',
+64378=>'AL',
+64379=>'AL',
+64380=>'AL',
+64381=>'AL',
+64382=>'AL',
+64383=>'AL',
+64384=>'AL',
+64385=>'AL',
+64386=>'AL',
+64387=>'AL',
+64388=>'AL',
+64389=>'AL',
+64390=>'AL',
+64391=>'AL',
+64392=>'AL',
+64393=>'AL',
+64394=>'AL',
+64395=>'AL',
+64396=>'AL',
+64397=>'AL',
+64398=>'AL',
+64399=>'AL',
+64400=>'AL',
+64401=>'AL',
+64402=>'AL',
+64403=>'AL',
+64404=>'AL',
+64405=>'AL',
+64406=>'AL',
+64407=>'AL',
+64408=>'AL',
+64409=>'AL',
+64410=>'AL',
+64411=>'AL',
+64412=>'AL',
+64413=>'AL',
+64414=>'AL',
+64415=>'AL',
+64416=>'AL',
+64417=>'AL',
+64418=>'AL',
+64419=>'AL',
+64420=>'AL',
+64421=>'AL',
+64422=>'AL',
+64423=>'AL',
+64424=>'AL',
+64425=>'AL',
+64426=>'AL',
+64427=>'AL',
+64428=>'AL',
+64429=>'AL',
+64430=>'AL',
+64431=>'AL',
+64432=>'AL',
+64433=>'AL',
+64467=>'AL',
+64468=>'AL',
+64469=>'AL',
+64470=>'AL',
+64471=>'AL',
+64472=>'AL',
+64473=>'AL',
+64474=>'AL',
+64475=>'AL',
+64476=>'AL',
+64477=>'AL',
+64478=>'AL',
+64479=>'AL',
+64480=>'AL',
+64481=>'AL',
+64482=>'AL',
+64483=>'AL',
+64484=>'AL',
+64485=>'AL',
+64486=>'AL',
+64487=>'AL',
+64488=>'AL',
+64489=>'AL',
+64490=>'AL',
+64491=>'AL',
+64492=>'AL',
+64493=>'AL',
+64494=>'AL',
+64495=>'AL',
+64496=>'AL',
+64497=>'AL',
+64498=>'AL',
+64499=>'AL',
+64500=>'AL',
+64501=>'AL',
+64502=>'AL',
+64503=>'AL',
+64504=>'AL',
+64505=>'AL',
+64506=>'AL',
+64507=>'AL',
+64508=>'AL',
+64509=>'AL',
+64510=>'AL',
+64511=>'AL',
+64512=>'AL',
+64513=>'AL',
+64514=>'AL',
+64515=>'AL',
+64516=>'AL',
+64517=>'AL',
+64518=>'AL',
+64519=>'AL',
+64520=>'AL',
+64521=>'AL',
+64522=>'AL',
+64523=>'AL',
+64524=>'AL',
+64525=>'AL',
+64526=>'AL',
+64527=>'AL',
+64528=>'AL',
+64529=>'AL',
+64530=>'AL',
+64531=>'AL',
+64532=>'AL',
+64533=>'AL',
+64534=>'AL',
+64535=>'AL',
+64536=>'AL',
+64537=>'AL',
+64538=>'AL',
+64539=>'AL',
+64540=>'AL',
+64541=>'AL',
+64542=>'AL',
+64543=>'AL',
+64544=>'AL',
+64545=>'AL',
+64546=>'AL',
+64547=>'AL',
+64548=>'AL',
+64549=>'AL',
+64550=>'AL',
+64551=>'AL',
+64552=>'AL',
+64553=>'AL',
+64554=>'AL',
+64555=>'AL',
+64556=>'AL',
+64557=>'AL',
+64558=>'AL',
+64559=>'AL',
+64560=>'AL',
+64561=>'AL',
+64562=>'AL',
+64563=>'AL',
+64564=>'AL',
+64565=>'AL',
+64566=>'AL',
+64567=>'AL',
+64568=>'AL',
+64569=>'AL',
+64570=>'AL',
+64571=>'AL',
+64572=>'AL',
+64573=>'AL',
+64574=>'AL',
+64575=>'AL',
+64576=>'AL',
+64577=>'AL',
+64578=>'AL',
+64579=>'AL',
+64580=>'AL',
+64581=>'AL',
+64582=>'AL',
+64583=>'AL',
+64584=>'AL',
+64585=>'AL',
+64586=>'AL',
+64587=>'AL',
+64588=>'AL',
+64589=>'AL',
+64590=>'AL',
+64591=>'AL',
+64592=>'AL',
+64593=>'AL',
+64594=>'AL',
+64595=>'AL',
+64596=>'AL',
+64597=>'AL',
+64598=>'AL',
+64599=>'AL',
+64600=>'AL',
+64601=>'AL',
+64602=>'AL',
+64603=>'AL',
+64604=>'AL',
+64605=>'AL',
+64606=>'AL',
+64607=>'AL',
+64608=>'AL',
+64609=>'AL',
+64610=>'AL',
+64611=>'AL',
+64612=>'AL',
+64613=>'AL',
+64614=>'AL',
+64615=>'AL',
+64616=>'AL',
+64617=>'AL',
+64618=>'AL',
+64619=>'AL',
+64620=>'AL',
+64621=>'AL',
+64622=>'AL',
+64623=>'AL',
+64624=>'AL',
+64625=>'AL',
+64626=>'AL',
+64627=>'AL',
+64628=>'AL',
+64629=>'AL',
+64630=>'AL',
+64631=>'AL',
+64632=>'AL',
+64633=>'AL',
+64634=>'AL',
+64635=>'AL',
+64636=>'AL',
+64637=>'AL',
+64638=>'AL',
+64639=>'AL',
+64640=>'AL',
+64641=>'AL',
+64642=>'AL',
+64643=>'AL',
+64644=>'AL',
+64645=>'AL',
+64646=>'AL',
+64647=>'AL',
+64648=>'AL',
+64649=>'AL',
+64650=>'AL',
+64651=>'AL',
+64652=>'AL',
+64653=>'AL',
+64654=>'AL',
+64655=>'AL',
+64656=>'AL',
+64657=>'AL',
+64658=>'AL',
+64659=>'AL',
+64660=>'AL',
+64661=>'AL',
+64662=>'AL',
+64663=>'AL',
+64664=>'AL',
+64665=>'AL',
+64666=>'AL',
+64667=>'AL',
+64668=>'AL',
+64669=>'AL',
+64670=>'AL',
+64671=>'AL',
+64672=>'AL',
+64673=>'AL',
+64674=>'AL',
+64675=>'AL',
+64676=>'AL',
+64677=>'AL',
+64678=>'AL',
+64679=>'AL',
+64680=>'AL',
+64681=>'AL',
+64682=>'AL',
+64683=>'AL',
+64684=>'AL',
+64685=>'AL',
+64686=>'AL',
+64687=>'AL',
+64688=>'AL',
+64689=>'AL',
+64690=>'AL',
+64691=>'AL',
+64692=>'AL',
+64693=>'AL',
+64694=>'AL',
+64695=>'AL',
+64696=>'AL',
+64697=>'AL',
+64698=>'AL',
+64699=>'AL',
+64700=>'AL',
+64701=>'AL',
+64702=>'AL',
+64703=>'AL',
+64704=>'AL',
+64705=>'AL',
+64706=>'AL',
+64707=>'AL',
+64708=>'AL',
+64709=>'AL',
+64710=>'AL',
+64711=>'AL',
+64712=>'AL',
+64713=>'AL',
+64714=>'AL',
+64715=>'AL',
+64716=>'AL',
+64717=>'AL',
+64718=>'AL',
+64719=>'AL',
+64720=>'AL',
+64721=>'AL',
+64722=>'AL',
+64723=>'AL',
+64724=>'AL',
+64725=>'AL',
+64726=>'AL',
+64727=>'AL',
+64728=>'AL',
+64729=>'AL',
+64730=>'AL',
+64731=>'AL',
+64732=>'AL',
+64733=>'AL',
+64734=>'AL',
+64735=>'AL',
+64736=>'AL',
+64737=>'AL',
+64738=>'AL',
+64739=>'AL',
+64740=>'AL',
+64741=>'AL',
+64742=>'AL',
+64743=>'AL',
+64744=>'AL',
+64745=>'AL',
+64746=>'AL',
+64747=>'AL',
+64748=>'AL',
+64749=>'AL',
+64750=>'AL',
+64751=>'AL',
+64752=>'AL',
+64753=>'AL',
+64754=>'AL',
+64755=>'AL',
+64756=>'AL',
+64757=>'AL',
+64758=>'AL',
+64759=>'AL',
+64760=>'AL',
+64761=>'AL',
+64762=>'AL',
+64763=>'AL',
+64764=>'AL',
+64765=>'AL',
+64766=>'AL',
+64767=>'AL',
+64768=>'AL',
+64769=>'AL',
+64770=>'AL',
+64771=>'AL',
+64772=>'AL',
+64773=>'AL',
+64774=>'AL',
+64775=>'AL',
+64776=>'AL',
+64777=>'AL',
+64778=>'AL',
+64779=>'AL',
+64780=>'AL',
+64781=>'AL',
+64782=>'AL',
+64783=>'AL',
+64784=>'AL',
+64785=>'AL',
+64786=>'AL',
+64787=>'AL',
+64788=>'AL',
+64789=>'AL',
+64790=>'AL',
+64791=>'AL',
+64792=>'AL',
+64793=>'AL',
+64794=>'AL',
+64795=>'AL',
+64796=>'AL',
+64797=>'AL',
+64798=>'AL',
+64799=>'AL',
+64800=>'AL',
+64801=>'AL',
+64802=>'AL',
+64803=>'AL',
+64804=>'AL',
+64805=>'AL',
+64806=>'AL',
+64807=>'AL',
+64808=>'AL',
+64809=>'AL',
+64810=>'AL',
+64811=>'AL',
+64812=>'AL',
+64813=>'AL',
+64814=>'AL',
+64815=>'AL',
+64816=>'AL',
+64817=>'AL',
+64818=>'AL',
+64819=>'AL',
+64820=>'AL',
+64821=>'AL',
+64822=>'AL',
+64823=>'AL',
+64824=>'AL',
+64825=>'AL',
+64826=>'AL',
+64827=>'AL',
+64828=>'AL',
+64829=>'AL',
+64830=>'ON',
+64831=>'ON',
+64848=>'AL',
+64849=>'AL',
+64850=>'AL',
+64851=>'AL',
+64852=>'AL',
+64853=>'AL',
+64854=>'AL',
+64855=>'AL',
+64856=>'AL',
+64857=>'AL',
+64858=>'AL',
+64859=>'AL',
+64860=>'AL',
+64861=>'AL',
+64862=>'AL',
+64863=>'AL',
+64864=>'AL',
+64865=>'AL',
+64866=>'AL',
+64867=>'AL',
+64868=>'AL',
+64869=>'AL',
+64870=>'AL',
+64871=>'AL',
+64872=>'AL',
+64873=>'AL',
+64874=>'AL',
+64875=>'AL',
+64876=>'AL',
+64877=>'AL',
+64878=>'AL',
+64879=>'AL',
+64880=>'AL',
+64881=>'AL',
+64882=>'AL',
+64883=>'AL',
+64884=>'AL',
+64885=>'AL',
+64886=>'AL',
+64887=>'AL',
+64888=>'AL',
+64889=>'AL',
+64890=>'AL',
+64891=>'AL',
+64892=>'AL',
+64893=>'AL',
+64894=>'AL',
+64895=>'AL',
+64896=>'AL',
+64897=>'AL',
+64898=>'AL',
+64899=>'AL',
+64900=>'AL',
+64901=>'AL',
+64902=>'AL',
+64903=>'AL',
+64904=>'AL',
+64905=>'AL',
+64906=>'AL',
+64907=>'AL',
+64908=>'AL',
+64909=>'AL',
+64910=>'AL',
+64911=>'AL',
+64914=>'AL',
+64915=>'AL',
+64916=>'AL',
+64917=>'AL',
+64918=>'AL',
+64919=>'AL',
+64920=>'AL',
+64921=>'AL',
+64922=>'AL',
+64923=>'AL',
+64924=>'AL',
+64925=>'AL',
+64926=>'AL',
+64927=>'AL',
+64928=>'AL',
+64929=>'AL',
+64930=>'AL',
+64931=>'AL',
+64932=>'AL',
+64933=>'AL',
+64934=>'AL',
+64935=>'AL',
+64936=>'AL',
+64937=>'AL',
+64938=>'AL',
+64939=>'AL',
+64940=>'AL',
+64941=>'AL',
+64942=>'AL',
+64943=>'AL',
+64944=>'AL',
+64945=>'AL',
+64946=>'AL',
+64947=>'AL',
+64948=>'AL',
+64949=>'AL',
+64950=>'AL',
+64951=>'AL',
+64952=>'AL',
+64953=>'AL',
+64954=>'AL',
+64955=>'AL',
+64956=>'AL',
+64957=>'AL',
+64958=>'AL',
+64959=>'AL',
+64960=>'AL',
+64961=>'AL',
+64962=>'AL',
+64963=>'AL',
+64964=>'AL',
+64965=>'AL',
+64966=>'AL',
+64967=>'AL',
+65008=>'AL',
+65009=>'AL',
+65010=>'AL',
+65011=>'AL',
+65012=>'AL',
+65013=>'AL',
+65014=>'AL',
+65015=>'AL',
+65016=>'AL',
+65017=>'AL',
+65018=>'AL',
+65019=>'AL',
+65020=>'AL',
+65021=>'ON',
+65024=>'NSM',
+65025=>'NSM',
+65026=>'NSM',
+65027=>'NSM',
+65028=>'NSM',
+65029=>'NSM',
+65030=>'NSM',
+65031=>'NSM',
+65032=>'NSM',
+65033=>'NSM',
+65034=>'NSM',
+65035=>'NSM',
+65036=>'NSM',
+65037=>'NSM',
+65038=>'NSM',
+65039=>'NSM',
+65040=>'ON',
+65041=>'ON',
+65042=>'ON',
+65043=>'ON',
+65044=>'ON',
+65045=>'ON',
+65046=>'ON',
+65047=>'ON',
+65048=>'ON',
+65049=>'ON',
+65056=>'NSM',
+65057=>'NSM',
+65058=>'NSM',
+65059=>'NSM',
+65072=>'ON',
+65073=>'ON',
+65074=>'ON',
+65075=>'ON',
+65076=>'ON',
+65077=>'ON',
+65078=>'ON',
+65079=>'ON',
+65080=>'ON',
+65081=>'ON',
+65082=>'ON',
+65083=>'ON',
+65084=>'ON',
+65085=>'ON',
+65086=>'ON',
+65087=>'ON',
+65088=>'ON',
+65089=>'ON',
+65090=>'ON',
+65091=>'ON',
+65092=>'ON',
+65093=>'ON',
+65094=>'ON',
+65095=>'ON',
+65096=>'ON',
+65097=>'ON',
+65098=>'ON',
+65099=>'ON',
+65100=>'ON',
+65101=>'ON',
+65102=>'ON',
+65103=>'ON',
+65104=>'CS',
+65105=>'ON',
+65106=>'CS',
+65108=>'ON',
+65109=>'CS',
+65110=>'ON',
+65111=>'ON',
+65112=>'ON',
+65113=>'ON',
+65114=>'ON',
+65115=>'ON',
+65116=>'ON',
+65117=>'ON',
+65118=>'ON',
+65119=>'ET',
+65120=>'ON',
+65121=>'ON',
+65122=>'ES',
+65123=>'ES',
+65124=>'ON',
+65125=>'ON',
+65126=>'ON',
+65128=>'ON',
+65129=>'ET',
+65130=>'ET',
+65131=>'ON',
+65136=>'AL',
+65137=>'AL',
+65138=>'AL',
+65139=>'AL',
+65140=>'AL',
+65142=>'AL',
+65143=>'AL',
+65144=>'AL',
+65145=>'AL',
+65146=>'AL',
+65147=>'AL',
+65148=>'AL',
+65149=>'AL',
+65150=>'AL',
+65151=>'AL',
+65152=>'AL',
+65153=>'AL',
+65154=>'AL',
+65155=>'AL',
+65156=>'AL',
+65157=>'AL',
+65158=>'AL',
+65159=>'AL',
+65160=>'AL',
+65161=>'AL',
+65162=>'AL',
+65163=>'AL',
+65164=>'AL',
+65165=>'AL',
+65166=>'AL',
+65167=>'AL',
+65168=>'AL',
+65169=>'AL',
+65170=>'AL',
+65171=>'AL',
+65172=>'AL',
+65173=>'AL',
+65174=>'AL',
+65175=>'AL',
+65176=>'AL',
+65177=>'AL',
+65178=>'AL',
+65179=>'AL',
+65180=>'AL',
+65181=>'AL',
+65182=>'AL',
+65183=>'AL',
+65184=>'AL',
+65185=>'AL',
+65186=>'AL',
+65187=>'AL',
+65188=>'AL',
+65189=>'AL',
+65190=>'AL',
+65191=>'AL',
+65192=>'AL',
+65193=>'AL',
+65194=>'AL',
+65195=>'AL',
+65196=>'AL',
+65197=>'AL',
+65198=>'AL',
+65199=>'AL',
+65200=>'AL',
+65201=>'AL',
+65202=>'AL',
+65203=>'AL',
+65204=>'AL',
+65205=>'AL',
+65206=>'AL',
+65207=>'AL',
+65208=>'AL',
+65209=>'AL',
+65210=>'AL',
+65211=>'AL',
+65212=>'AL',
+65213=>'AL',
+65214=>'AL',
+65215=>'AL',
+65216=>'AL',
+65217=>'AL',
+65218=>'AL',
+65219=>'AL',
+65220=>'AL',
+65221=>'AL',
+65222=>'AL',
+65223=>'AL',
+65224=>'AL',
+65225=>'AL',
+65226=>'AL',
+65227=>'AL',
+65228=>'AL',
+65229=>'AL',
+65230=>'AL',
+65231=>'AL',
+65232=>'AL',
+65233=>'AL',
+65234=>'AL',
+65235=>'AL',
+65236=>'AL',
+65237=>'AL',
+65238=>'AL',
+65239=>'AL',
+65240=>'AL',
+65241=>'AL',
+65242=>'AL',
+65243=>'AL',
+65244=>'AL',
+65245=>'AL',
+65246=>'AL',
+65247=>'AL',
+65248=>'AL',
+65249=>'AL',
+65250=>'AL',
+65251=>'AL',
+65252=>'AL',
+65253=>'AL',
+65254=>'AL',
+65255=>'AL',
+65256=>'AL',
+65257=>'AL',
+65258=>'AL',
+65259=>'AL',
+65260=>'AL',
+65261=>'AL',
+65262=>'AL',
+65263=>'AL',
+65264=>'AL',
+65265=>'AL',
+65266=>'AL',
+65267=>'AL',
+65268=>'AL',
+65269=>'AL',
+65270=>'AL',
+65271=>'AL',
+65272=>'AL',
+65273=>'AL',
+65274=>'AL',
+65275=>'AL',
+65276=>'AL',
+65279=>'BN',
+65281=>'ON',
+65282=>'ON',
+65283=>'ET',
+65284=>'ET',
+65285=>'ET',
+65286=>'ON',
+65287=>'ON',
+65288=>'ON',
+65289=>'ON',
+65290=>'ON',
+65291=>'ES',
+65292=>'CS',
+65293=>'ES',
+65294=>'CS',
+65295=>'CS',
+65296=>'EN',
+65297=>'EN',
+65298=>'EN',
+65299=>'EN',
+65300=>'EN',
+65301=>'EN',
+65302=>'EN',
+65303=>'EN',
+65304=>'EN',
+65305=>'EN',
+65306=>'CS',
+65307=>'ON',
+65308=>'ON',
+65309=>'ON',
+65310=>'ON',
+65311=>'ON',
+65312=>'ON',
+65313=>'L',
+65314=>'L',
+65315=>'L',
+65316=>'L',
+65317=>'L',
+65318=>'L',
+65319=>'L',
+65320=>'L',
+65321=>'L',
+65322=>'L',
+65323=>'L',
+65324=>'L',
+65325=>'L',
+65326=>'L',
+65327=>'L',
+65328=>'L',
+65329=>'L',
+65330=>'L',
+65331=>'L',
+65332=>'L',
+65333=>'L',
+65334=>'L',
+65335=>'L',
+65336=>'L',
+65337=>'L',
+65338=>'L',
+65339=>'ON',
+65340=>'ON',
+65341=>'ON',
+65342=>'ON',
+65343=>'ON',
+65344=>'ON',
+65345=>'L',
+65346=>'L',
+65347=>'L',
+65348=>'L',
+65349=>'L',
+65350=>'L',
+65351=>'L',
+65352=>'L',
+65353=>'L',
+65354=>'L',
+65355=>'L',
+65356=>'L',
+65357=>'L',
+65358=>'L',
+65359=>'L',
+65360=>'L',
+65361=>'L',
+65362=>'L',
+65363=>'L',
+65364=>'L',
+65365=>'L',
+65366=>'L',
+65367=>'L',
+65368=>'L',
+65369=>'L',
+65370=>'L',
+65371=>'ON',
+65372=>'ON',
+65373=>'ON',
+65374=>'ON',
+65375=>'ON',
+65376=>'ON',
+65377=>'ON',
+65378=>'ON',
+65379=>'ON',
+65380=>'ON',
+65381=>'ON',
+65382=>'L',
+65383=>'L',
+65384=>'L',
+65385=>'L',
+65386=>'L',
+65387=>'L',
+65388=>'L',
+65389=>'L',
+65390=>'L',
+65391=>'L',
+65392=>'L',
+65393=>'L',
+65394=>'L',
+65395=>'L',
+65396=>'L',
+65397=>'L',
+65398=>'L',
+65399=>'L',
+65400=>'L',
+65401=>'L',
+65402=>'L',
+65403=>'L',
+65404=>'L',
+65405=>'L',
+65406=>'L',
+65407=>'L',
+65408=>'L',
+65409=>'L',
+65410=>'L',
+65411=>'L',
+65412=>'L',
+65413=>'L',
+65414=>'L',
+65415=>'L',
+65416=>'L',
+65417=>'L',
+65418=>'L',
+65419=>'L',
+65420=>'L',
+65421=>'L',
+65422=>'L',
+65423=>'L',
+65424=>'L',
+65425=>'L',
+65426=>'L',
+65427=>'L',
+65428=>'L',
+65429=>'L',
+65430=>'L',
+65431=>'L',
+65432=>'L',
+65433=>'L',
+65434=>'L',
+65435=>'L',
+65436=>'L',
+65437=>'L',
+65438=>'L',
+65439=>'L',
+65440=>'L',
+65441=>'L',
+65442=>'L',
+65443=>'L',
+65444=>'L',
+65445=>'L',
+65446=>'L',
+65447=>'L',
+65448=>'L',
+65449=>'L',
+65450=>'L',
+65451=>'L',
+65452=>'L',
+65453=>'L',
+65454=>'L',
+65455=>'L',
+65456=>'L',
+65457=>'L',
+65458=>'L',
+65459=>'L',
+65460=>'L',
+65461=>'L',
+65462=>'L',
+65463=>'L',
+65464=>'L',
+65465=>'L',
+65466=>'L',
+65467=>'L',
+65468=>'L',
+65469=>'L',
+65470=>'L',
+65474=>'L',
+65475=>'L',
+65476=>'L',
+65477=>'L',
+65478=>'L',
+65479=>'L',
+65482=>'L',
+65483=>'L',
+65484=>'L',
+65485=>'L',
+65486=>'L',
+65487=>'L',
+65490=>'L',
+65491=>'L',
+65492=>'L',
+65493=>'L',
+65494=>'L',
+65495=>'L',
+65498=>'L',
+65499=>'L',
+65500=>'L',
+65504=>'ET',
+65505=>'ET',
+65506=>'ON',
+65507=>'ON',
+65508=>'ON',
+65509=>'ET',
+65510=>'ET',
+65512=>'ON',
+65513=>'ON',
+65514=>'ON',
+65515=>'ON',
+65516=>'ON',
+65517=>'ON',
+65518=>'ON',
+65529=>'ON',
+65530=>'ON',
+65531=>'ON',
+65532=>'ON',
+65533=>'ON',
+65536=>'L',
+65537=>'L',
+65538=>'L',
+65539=>'L',
+65540=>'L',
+65541=>'L',
+65542=>'L',
+65543=>'L',
+65544=>'L',
+65545=>'L',
+65546=>'L',
+65547=>'L',
+65549=>'L',
+65550=>'L',
+65551=>'L',
+65552=>'L',
+65553=>'L',
+65554=>'L',
+65555=>'L',
+65556=>'L',
+65557=>'L',
+65558=>'L',
+65559=>'L',
+65560=>'L',
+65561=>'L',
+65562=>'L',
+65563=>'L',
+65564=>'L',
+65565=>'L',
+65566=>'L',
+65567=>'L',
+65568=>'L',
+65569=>'L',
+65570=>'L',
+65571=>'L',
+65572=>'L',
+65573=>'L',
+65574=>'L',
+65576=>'L',
+65577=>'L',
+65578=>'L',
+65579=>'L',
+65580=>'L',
+65581=>'L',
+65582=>'L',
+65583=>'L',
+65584=>'L',
+65585=>'L',
+65586=>'L',
+65587=>'L',
+65588=>'L',
+65589=>'L',
+65590=>'L',
+65591=>'L',
+65592=>'L',
+65593=>'L',
+65594=>'L',
+65596=>'L',
+65597=>'L',
+65599=>'L',
+65600=>'L',
+65601=>'L',
+65602=>'L',
+65603=>'L',
+65604=>'L',
+65605=>'L',
+65606=>'L',
+65607=>'L',
+65608=>'L',
+65609=>'L',
+65610=>'L',
+65611=>'L',
+65612=>'L',
+65613=>'L',
+65616=>'L',
+65617=>'L',
+65618=>'L',
+65619=>'L',
+65620=>'L',
+65621=>'L',
+65622=>'L',
+65623=>'L',
+65624=>'L',
+65625=>'L',
+65626=>'L',
+65627=>'L',
+65628=>'L',
+65629=>'L',
+65664=>'L',
+65665=>'L',
+65666=>'L',
+65667=>'L',
+65668=>'L',
+65669=>'L',
+65670=>'L',
+65671=>'L',
+65672=>'L',
+65673=>'L',
+65674=>'L',
+65675=>'L',
+65676=>'L',
+65677=>'L',
+65678=>'L',
+65679=>'L',
+65680=>'L',
+65681=>'L',
+65682=>'L',
+65683=>'L',
+65684=>'L',
+65685=>'L',
+65686=>'L',
+65687=>'L',
+65688=>'L',
+65689=>'L',
+65690=>'L',
+65691=>'L',
+65692=>'L',
+65693=>'L',
+65694=>'L',
+65695=>'L',
+65696=>'L',
+65697=>'L',
+65698=>'L',
+65699=>'L',
+65700=>'L',
+65701=>'L',
+65702=>'L',
+65703=>'L',
+65704=>'L',
+65705=>'L',
+65706=>'L',
+65707=>'L',
+65708=>'L',
+65709=>'L',
+65710=>'L',
+65711=>'L',
+65712=>'L',
+65713=>'L',
+65714=>'L',
+65715=>'L',
+65716=>'L',
+65717=>'L',
+65718=>'L',
+65719=>'L',
+65720=>'L',
+65721=>'L',
+65722=>'L',
+65723=>'L',
+65724=>'L',
+65725=>'L',
+65726=>'L',
+65727=>'L',
+65728=>'L',
+65729=>'L',
+65730=>'L',
+65731=>'L',
+65732=>'L',
+65733=>'L',
+65734=>'L',
+65735=>'L',
+65736=>'L',
+65737=>'L',
+65738=>'L',
+65739=>'L',
+65740=>'L',
+65741=>'L',
+65742=>'L',
+65743=>'L',
+65744=>'L',
+65745=>'L',
+65746=>'L',
+65747=>'L',
+65748=>'L',
+65749=>'L',
+65750=>'L',
+65751=>'L',
+65752=>'L',
+65753=>'L',
+65754=>'L',
+65755=>'L',
+65756=>'L',
+65757=>'L',
+65758=>'L',
+65759=>'L',
+65760=>'L',
+65761=>'L',
+65762=>'L',
+65763=>'L',
+65764=>'L',
+65765=>'L',
+65766=>'L',
+65767=>'L',
+65768=>'L',
+65769=>'L',
+65770=>'L',
+65771=>'L',
+65772=>'L',
+65773=>'L',
+65774=>'L',
+65775=>'L',
+65776=>'L',
+65777=>'L',
+65778=>'L',
+65779=>'L',
+65780=>'L',
+65781=>'L',
+65782=>'L',
+65783=>'L',
+65784=>'L',
+65785=>'L',
+65786=>'L',
+65792=>'L',
+65793=>'ON',
+65794=>'L',
+65799=>'L',
+65800=>'L',
+65801=>'L',
+65802=>'L',
+65803=>'L',
+65804=>'L',
+65805=>'L',
+65806=>'L',
+65807=>'L',
+65808=>'L',
+65809=>'L',
+65810=>'L',
+65811=>'L',
+65812=>'L',
+65813=>'L',
+65814=>'L',
+65815=>'L',
+65816=>'L',
+65817=>'L',
+65818=>'L',
+65819=>'L',
+65820=>'L',
+65821=>'L',
+65822=>'L',
+65823=>'L',
+65824=>'L',
+65825=>'L',
+65826=>'L',
+65827=>'L',
+65828=>'L',
+65829=>'L',
+65830=>'L',
+65831=>'L',
+65832=>'L',
+65833=>'L',
+65834=>'L',
+65835=>'L',
+65836=>'L',
+65837=>'L',
+65838=>'L',
+65839=>'L',
+65840=>'L',
+65841=>'L',
+65842=>'L',
+65843=>'L',
+65847=>'L',
+65848=>'L',
+65849=>'L',
+65850=>'L',
+65851=>'L',
+65852=>'L',
+65853=>'L',
+65854=>'L',
+65855=>'L',
+65856=>'ON',
+65857=>'ON',
+65858=>'ON',
+65859=>'ON',
+65860=>'ON',
+65861=>'ON',
+65862=>'ON',
+65863=>'ON',
+65864=>'ON',
+65865=>'ON',
+65866=>'ON',
+65867=>'ON',
+65868=>'ON',
+65869=>'ON',
+65870=>'ON',
+65871=>'ON',
+65872=>'ON',
+65873=>'ON',
+65874=>'ON',
+65875=>'ON',
+65876=>'ON',
+65877=>'ON',
+65878=>'ON',
+65879=>'ON',
+65880=>'ON',
+65881=>'ON',
+65882=>'ON',
+65883=>'ON',
+65884=>'ON',
+65885=>'ON',
+65886=>'ON',
+65887=>'ON',
+65888=>'ON',
+65889=>'ON',
+65890=>'ON',
+65891=>'ON',
+65892=>'ON',
+65893=>'ON',
+65894=>'ON',
+65895=>'ON',
+65896=>'ON',
+65897=>'ON',
+65898=>'ON',
+65899=>'ON',
+65900=>'ON',
+65901=>'ON',
+65902=>'ON',
+65903=>'ON',
+65904=>'ON',
+65905=>'ON',
+65906=>'ON',
+65907=>'ON',
+65908=>'ON',
+65909=>'ON',
+65910=>'ON',
+65911=>'ON',
+65912=>'ON',
+65913=>'ON',
+65914=>'ON',
+65915=>'ON',
+65916=>'ON',
+65917=>'ON',
+65918=>'ON',
+65919=>'ON',
+65920=>'ON',
+65921=>'ON',
+65922=>'ON',
+65923=>'ON',
+65924=>'ON',
+65925=>'ON',
+65926=>'ON',
+65927=>'ON',
+65928=>'ON',
+65929=>'ON',
+65930=>'ON',
+66304=>'L',
+66305=>'L',
+66306=>'L',
+66307=>'L',
+66308=>'L',
+66309=>'L',
+66310=>'L',
+66311=>'L',
+66312=>'L',
+66313=>'L',
+66314=>'L',
+66315=>'L',
+66316=>'L',
+66317=>'L',
+66318=>'L',
+66319=>'L',
+66320=>'L',
+66321=>'L',
+66322=>'L',
+66323=>'L',
+66324=>'L',
+66325=>'L',
+66326=>'L',
+66327=>'L',
+66328=>'L',
+66329=>'L',
+66330=>'L',
+66331=>'L',
+66332=>'L',
+66333=>'L',
+66334=>'L',
+66336=>'L',
+66337=>'L',
+66338=>'L',
+66339=>'L',
+66352=>'L',
+66353=>'L',
+66354=>'L',
+66355=>'L',
+66356=>'L',
+66357=>'L',
+66358=>'L',
+66359=>'L',
+66360=>'L',
+66361=>'L',
+66362=>'L',
+66363=>'L',
+66364=>'L',
+66365=>'L',
+66366=>'L',
+66367=>'L',
+66368=>'L',
+66369=>'L',
+66370=>'L',
+66371=>'L',
+66372=>'L',
+66373=>'L',
+66374=>'L',
+66375=>'L',
+66376=>'L',
+66377=>'L',
+66378=>'L',
+66432=>'L',
+66433=>'L',
+66434=>'L',
+66435=>'L',
+66436=>'L',
+66437=>'L',
+66438=>'L',
+66439=>'L',
+66440=>'L',
+66441=>'L',
+66442=>'L',
+66443=>'L',
+66444=>'L',
+66445=>'L',
+66446=>'L',
+66447=>'L',
+66448=>'L',
+66449=>'L',
+66450=>'L',
+66451=>'L',
+66452=>'L',
+66453=>'L',
+66454=>'L',
+66455=>'L',
+66456=>'L',
+66457=>'L',
+66458=>'L',
+66459=>'L',
+66460=>'L',
+66461=>'L',
+66463=>'L',
+66464=>'L',
+66465=>'L',
+66466=>'L',
+66467=>'L',
+66468=>'L',
+66469=>'L',
+66470=>'L',
+66471=>'L',
+66472=>'L',
+66473=>'L',
+66474=>'L',
+66475=>'L',
+66476=>'L',
+66477=>'L',
+66478=>'L',
+66479=>'L',
+66480=>'L',
+66481=>'L',
+66482=>'L',
+66483=>'L',
+66484=>'L',
+66485=>'L',
+66486=>'L',
+66487=>'L',
+66488=>'L',
+66489=>'L',
+66490=>'L',
+66491=>'L',
+66492=>'L',
+66493=>'L',
+66494=>'L',
+66495=>'L',
+66496=>'L',
+66497=>'L',
+66498=>'L',
+66499=>'L',
+66504=>'L',
+66505=>'L',
+66506=>'L',
+66507=>'L',
+66508=>'L',
+66509=>'L',
+66510=>'L',
+66511=>'L',
+66512=>'L',
+66513=>'L',
+66514=>'L',
+66515=>'L',
+66516=>'L',
+66517=>'L',
+66560=>'L',
+66561=>'L',
+66562=>'L',
+66563=>'L',
+66564=>'L',
+66565=>'L',
+66566=>'L',
+66567=>'L',
+66568=>'L',
+66569=>'L',
+66570=>'L',
+66571=>'L',
+66572=>'L',
+66573=>'L',
+66574=>'L',
+66575=>'L',
+66576=>'L',
+66577=>'L',
+66578=>'L',
+66579=>'L',
+66580=>'L',
+66581=>'L',
+66582=>'L',
+66583=>'L',
+66584=>'L',
+66585=>'L',
+66586=>'L',
+66587=>'L',
+66588=>'L',
+66589=>'L',
+66590=>'L',
+66591=>'L',
+66592=>'L',
+66593=>'L',
+66594=>'L',
+66595=>'L',
+66596=>'L',
+66597=>'L',
+66598=>'L',
+66599=>'L',
+66600=>'L',
+66601=>'L',
+66602=>'L',
+66603=>'L',
+66604=>'L',
+66605=>'L',
+66606=>'L',
+66607=>'L',
+66608=>'L',
+66609=>'L',
+66610=>'L',
+66611=>'L',
+66612=>'L',
+66613=>'L',
+66614=>'L',
+66615=>'L',
+66616=>'L',
+66617=>'L',
+66618=>'L',
+66619=>'L',
+66620=>'L',
+66621=>'L',
+66622=>'L',
+66623=>'L',
+66624=>'L',
+66625=>'L',
+66626=>'L',
+66627=>'L',
+66628=>'L',
+66629=>'L',
+66630=>'L',
+66631=>'L',
+66632=>'L',
+66633=>'L',
+66634=>'L',
+66635=>'L',
+66636=>'L',
+66637=>'L',
+66638=>'L',
+66639=>'L',
+66640=>'L',
+66641=>'L',
+66642=>'L',
+66643=>'L',
+66644=>'L',
+66645=>'L',
+66646=>'L',
+66647=>'L',
+66648=>'L',
+66649=>'L',
+66650=>'L',
+66651=>'L',
+66652=>'L',
+66653=>'L',
+66654=>'L',
+66655=>'L',
+66656=>'L',
+66657=>'L',
+66658=>'L',
+66659=>'L',
+66660=>'L',
+66661=>'L',
+66662=>'L',
+66663=>'L',
+66664=>'L',
+66665=>'L',
+66666=>'L',
+66667=>'L',
+66668=>'L',
+66669=>'L',
+66670=>'L',
+66671=>'L',
+66672=>'L',
+66673=>'L',
+66674=>'L',
+66675=>'L',
+66676=>'L',
+66677=>'L',
+66678=>'L',
+66679=>'L',
+66680=>'L',
+66681=>'L',
+66682=>'L',
+66683=>'L',
+66684=>'L',
+66685=>'L',
+66686=>'L',
+66687=>'L',
+66688=>'L',
+66689=>'L',
+66690=>'L',
+66691=>'L',
+66692=>'L',
+66693=>'L',
+66694=>'L',
+66695=>'L',
+66696=>'L',
+66697=>'L',
+66698=>'L',
+66699=>'L',
+66700=>'L',
+66701=>'L',
+66702=>'L',
+66703=>'L',
+66704=>'L',
+66705=>'L',
+66706=>'L',
+66707=>'L',
+66708=>'L',
+66709=>'L',
+66710=>'L',
+66711=>'L',
+66712=>'L',
+66713=>'L',
+66714=>'L',
+66715=>'L',
+66716=>'L',
+66717=>'L',
+66720=>'L',
+66721=>'L',
+66722=>'L',
+66723=>'L',
+66724=>'L',
+66725=>'L',
+66726=>'L',
+66727=>'L',
+66728=>'L',
+66729=>'L',
+67584=>'R',
+67585=>'R',
+67586=>'R',
+67587=>'R',
+67588=>'R',
+67589=>'R',
+67592=>'R',
+67594=>'R',
+67595=>'R',
+67596=>'R',
+67597=>'R',
+67598=>'R',
+67599=>'R',
+67600=>'R',
+67601=>'R',
+67602=>'R',
+67603=>'R',
+67604=>'R',
+67605=>'R',
+67606=>'R',
+67607=>'R',
+67608=>'R',
+67609=>'R',
+67610=>'R',
+67611=>'R',
+67612=>'R',
+67613=>'R',
+67614=>'R',
+67615=>'R',
+67616=>'R',
+67617=>'R',
+67618=>'R',
+67619=>'R',
+67620=>'R',
+67621=>'R',
+67622=>'R',
+67623=>'R',
+67624=>'R',
+67625=>'R',
+67626=>'R',
+67627=>'R',
+67628=>'R',
+67629=>'R',
+67630=>'R',
+67631=>'R',
+67632=>'R',
+67633=>'R',
+67634=>'R',
+67635=>'R',
+67636=>'R',
+67637=>'R',
+67639=>'R',
+67640=>'R',
+67644=>'R',
+67647=>'R',
+67840=>'R',
+67841=>'R',
+67842=>'R',
+67843=>'R',
+67844=>'R',
+67845=>'R',
+67846=>'R',
+67847=>'R',
+67848=>'R',
+67849=>'R',
+67850=>'R',
+67851=>'R',
+67852=>'R',
+67853=>'R',
+67854=>'R',
+67855=>'R',
+67856=>'R',
+67857=>'R',
+67858=>'R',
+67859=>'R',
+67860=>'R',
+67861=>'R',
+67862=>'R',
+67863=>'R',
+67864=>'R',
+67865=>'R',
+67871=>'ON',
+68096=>'R',
+68097=>'NSM',
+68098=>'NSM',
+68099=>'NSM',
+68101=>'NSM',
+68102=>'NSM',
+68108=>'NSM',
+68109=>'NSM',
+68110=>'NSM',
+68111=>'NSM',
+68112=>'R',
+68113=>'R',
+68114=>'R',
+68115=>'R',
+68117=>'R',
+68118=>'R',
+68119=>'R',
+68121=>'R',
+68122=>'R',
+68123=>'R',
+68124=>'R',
+68125=>'R',
+68126=>'R',
+68127=>'R',
+68128=>'R',
+68129=>'R',
+68130=>'R',
+68131=>'R',
+68132=>'R',
+68133=>'R',
+68134=>'R',
+68135=>'R',
+68136=>'R',
+68137=>'R',
+68138=>'R',
+68139=>'R',
+68140=>'R',
+68141=>'R',
+68142=>'R',
+68143=>'R',
+68144=>'R',
+68145=>'R',
+68146=>'R',
+68147=>'R',
+68152=>'NSM',
+68153=>'NSM',
+68154=>'NSM',
+68159=>'NSM',
+68160=>'R',
+68161=>'R',
+68162=>'R',
+68163=>'R',
+68164=>'R',
+68165=>'R',
+68166=>'R',
+68167=>'R',
+68176=>'R',
+68177=>'R',
+68178=>'R',
+68179=>'R',
+68180=>'R',
+68181=>'R',
+68182=>'R',
+68183=>'R',
+68184=>'R',
+73728=>'L',
+73729=>'L',
+73730=>'L',
+73731=>'L',
+73732=>'L',
+73733=>'L',
+73734=>'L',
+73735=>'L',
+73736=>'L',
+73737=>'L',
+73738=>'L',
+73739=>'L',
+73740=>'L',
+73741=>'L',
+73742=>'L',
+73743=>'L',
+73744=>'L',
+73745=>'L',
+73746=>'L',
+73747=>'L',
+73748=>'L',
+73749=>'L',
+73750=>'L',
+73751=>'L',
+73752=>'L',
+73753=>'L',
+73754=>'L',
+73755=>'L',
+73756=>'L',
+73757=>'L',
+73758=>'L',
+73759=>'L',
+73760=>'L',
+73761=>'L',
+73762=>'L',
+73763=>'L',
+73764=>'L',
+73765=>'L',
+73766=>'L',
+73767=>'L',
+73768=>'L',
+73769=>'L',
+73770=>'L',
+73771=>'L',
+73772=>'L',
+73773=>'L',
+73774=>'L',
+73775=>'L',
+73776=>'L',
+73777=>'L',
+73778=>'L',
+73779=>'L',
+73780=>'L',
+73781=>'L',
+73782=>'L',
+73783=>'L',
+73784=>'L',
+73785=>'L',
+73786=>'L',
+73787=>'L',
+73788=>'L',
+73789=>'L',
+73790=>'L',
+73791=>'L',
+73792=>'L',
+73793=>'L',
+73794=>'L',
+73795=>'L',
+73796=>'L',
+73797=>'L',
+73798=>'L',
+73799=>'L',
+73800=>'L',
+73801=>'L',
+73802=>'L',
+73803=>'L',
+73804=>'L',
+73805=>'L',
+73806=>'L',
+73807=>'L',
+73808=>'L',
+73809=>'L',
+73810=>'L',
+73811=>'L',
+73812=>'L',
+73813=>'L',
+73814=>'L',
+73815=>'L',
+73816=>'L',
+73817=>'L',
+73818=>'L',
+73819=>'L',
+73820=>'L',
+73821=>'L',
+73822=>'L',
+73823=>'L',
+73824=>'L',
+73825=>'L',
+73826=>'L',
+73827=>'L',
+73828=>'L',
+73829=>'L',
+73830=>'L',
+73831=>'L',
+73832=>'L',
+73833=>'L',
+73834=>'L',
+73835=>'L',
+73836=>'L',
+73837=>'L',
+73838=>'L',
+73839=>'L',
+73840=>'L',
+73841=>'L',
+73842=>'L',
+73843=>'L',
+73844=>'L',
+73845=>'L',
+73846=>'L',
+73847=>'L',
+73848=>'L',
+73849=>'L',
+73850=>'L',
+73851=>'L',
+73852=>'L',
+73853=>'L',
+73854=>'L',
+73855=>'L',
+73856=>'L',
+73857=>'L',
+73858=>'L',
+73859=>'L',
+73860=>'L',
+73861=>'L',
+73862=>'L',
+73863=>'L',
+73864=>'L',
+73865=>'L',
+73866=>'L',
+73867=>'L',
+73868=>'L',
+73869=>'L',
+73870=>'L',
+73871=>'L',
+73872=>'L',
+73873=>'L',
+73874=>'L',
+73875=>'L',
+73876=>'L',
+73877=>'L',
+73878=>'L',
+73879=>'L',
+73880=>'L',
+73881=>'L',
+73882=>'L',
+73883=>'L',
+73884=>'L',
+73885=>'L',
+73886=>'L',
+73887=>'L',
+73888=>'L',
+73889=>'L',
+73890=>'L',
+73891=>'L',
+73892=>'L',
+73893=>'L',
+73894=>'L',
+73895=>'L',
+73896=>'L',
+73897=>'L',
+73898=>'L',
+73899=>'L',
+73900=>'L',
+73901=>'L',
+73902=>'L',
+73903=>'L',
+73904=>'L',
+73905=>'L',
+73906=>'L',
+73907=>'L',
+73908=>'L',
+73909=>'L',
+73910=>'L',
+73911=>'L',
+73912=>'L',
+73913=>'L',
+73914=>'L',
+73915=>'L',
+73916=>'L',
+73917=>'L',
+73918=>'L',
+73919=>'L',
+73920=>'L',
+73921=>'L',
+73922=>'L',
+73923=>'L',
+73924=>'L',
+73925=>'L',
+73926=>'L',
+73927=>'L',
+73928=>'L',
+73929=>'L',
+73930=>'L',
+73931=>'L',
+73932=>'L',
+73933=>'L',
+73934=>'L',
+73935=>'L',
+73936=>'L',
+73937=>'L',
+73938=>'L',
+73939=>'L',
+73940=>'L',
+73941=>'L',
+73942=>'L',
+73943=>'L',
+73944=>'L',
+73945=>'L',
+73946=>'L',
+73947=>'L',
+73948=>'L',
+73949=>'L',
+73950=>'L',
+73951=>'L',
+73952=>'L',
+73953=>'L',
+73954=>'L',
+73955=>'L',
+73956=>'L',
+73957=>'L',
+73958=>'L',
+73959=>'L',
+73960=>'L',
+73961=>'L',
+73962=>'L',
+73963=>'L',
+73964=>'L',
+73965=>'L',
+73966=>'L',
+73967=>'L',
+73968=>'L',
+73969=>'L',
+73970=>'L',
+73971=>'L',
+73972=>'L',
+73973=>'L',
+73974=>'L',
+73975=>'L',
+73976=>'L',
+73977=>'L',
+73978=>'L',
+73979=>'L',
+73980=>'L',
+73981=>'L',
+73982=>'L',
+73983=>'L',
+73984=>'L',
+73985=>'L',
+73986=>'L',
+73987=>'L',
+73988=>'L',
+73989=>'L',
+73990=>'L',
+73991=>'L',
+73992=>'L',
+73993=>'L',
+73994=>'L',
+73995=>'L',
+73996=>'L',
+73997=>'L',
+73998=>'L',
+73999=>'L',
+74000=>'L',
+74001=>'L',
+74002=>'L',
+74003=>'L',
+74004=>'L',
+74005=>'L',
+74006=>'L',
+74007=>'L',
+74008=>'L',
+74009=>'L',
+74010=>'L',
+74011=>'L',
+74012=>'L',
+74013=>'L',
+74014=>'L',
+74015=>'L',
+74016=>'L',
+74017=>'L',
+74018=>'L',
+74019=>'L',
+74020=>'L',
+74021=>'L',
+74022=>'L',
+74023=>'L',
+74024=>'L',
+74025=>'L',
+74026=>'L',
+74027=>'L',
+74028=>'L',
+74029=>'L',
+74030=>'L',
+74031=>'L',
+74032=>'L',
+74033=>'L',
+74034=>'L',
+74035=>'L',
+74036=>'L',
+74037=>'L',
+74038=>'L',
+74039=>'L',
+74040=>'L',
+74041=>'L',
+74042=>'L',
+74043=>'L',
+74044=>'L',
+74045=>'L',
+74046=>'L',
+74047=>'L',
+74048=>'L',
+74049=>'L',
+74050=>'L',
+74051=>'L',
+74052=>'L',
+74053=>'L',
+74054=>'L',
+74055=>'L',
+74056=>'L',
+74057=>'L',
+74058=>'L',
+74059=>'L',
+74060=>'L',
+74061=>'L',
+74062=>'L',
+74063=>'L',
+74064=>'L',
+74065=>'L',
+74066=>'L',
+74067=>'L',
+74068=>'L',
+74069=>'L',
+74070=>'L',
+74071=>'L',
+74072=>'L',
+74073=>'L',
+74074=>'L',
+74075=>'L',
+74076=>'L',
+74077=>'L',
+74078=>'L',
+74079=>'L',
+74080=>'L',
+74081=>'L',
+74082=>'L',
+74083=>'L',
+74084=>'L',
+74085=>'L',
+74086=>'L',
+74087=>'L',
+74088=>'L',
+74089=>'L',
+74090=>'L',
+74091=>'L',
+74092=>'L',
+74093=>'L',
+74094=>'L',
+74095=>'L',
+74096=>'L',
+74097=>'L',
+74098=>'L',
+74099=>'L',
+74100=>'L',
+74101=>'L',
+74102=>'L',
+74103=>'L',
+74104=>'L',
+74105=>'L',
+74106=>'L',
+74107=>'L',
+74108=>'L',
+74109=>'L',
+74110=>'L',
+74111=>'L',
+74112=>'L',
+74113=>'L',
+74114=>'L',
+74115=>'L',
+74116=>'L',
+74117=>'L',
+74118=>'L',
+74119=>'L',
+74120=>'L',
+74121=>'L',
+74122=>'L',
+74123=>'L',
+74124=>'L',
+74125=>'L',
+74126=>'L',
+74127=>'L',
+74128=>'L',
+74129=>'L',
+74130=>'L',
+74131=>'L',
+74132=>'L',
+74133=>'L',
+74134=>'L',
+74135=>'L',
+74136=>'L',
+74137=>'L',
+74138=>'L',
+74139=>'L',
+74140=>'L',
+74141=>'L',
+74142=>'L',
+74143=>'L',
+74144=>'L',
+74145=>'L',
+74146=>'L',
+74147=>'L',
+74148=>'L',
+74149=>'L',
+74150=>'L',
+74151=>'L',
+74152=>'L',
+74153=>'L',
+74154=>'L',
+74155=>'L',
+74156=>'L',
+74157=>'L',
+74158=>'L',
+74159=>'L',
+74160=>'L',
+74161=>'L',
+74162=>'L',
+74163=>'L',
+74164=>'L',
+74165=>'L',
+74166=>'L',
+74167=>'L',
+74168=>'L',
+74169=>'L',
+74170=>'L',
+74171=>'L',
+74172=>'L',
+74173=>'L',
+74174=>'L',
+74175=>'L',
+74176=>'L',
+74177=>'L',
+74178=>'L',
+74179=>'L',
+74180=>'L',
+74181=>'L',
+74182=>'L',
+74183=>'L',
+74184=>'L',
+74185=>'L',
+74186=>'L',
+74187=>'L',
+74188=>'L',
+74189=>'L',
+74190=>'L',
+74191=>'L',
+74192=>'L',
+74193=>'L',
+74194=>'L',
+74195=>'L',
+74196=>'L',
+74197=>'L',
+74198=>'L',
+74199=>'L',
+74200=>'L',
+74201=>'L',
+74202=>'L',
+74203=>'L',
+74204=>'L',
+74205=>'L',
+74206=>'L',
+74207=>'L',
+74208=>'L',
+74209=>'L',
+74210=>'L',
+74211=>'L',
+74212=>'L',
+74213=>'L',
+74214=>'L',
+74215=>'L',
+74216=>'L',
+74217=>'L',
+74218=>'L',
+74219=>'L',
+74220=>'L',
+74221=>'L',
+74222=>'L',
+74223=>'L',
+74224=>'L',
+74225=>'L',
+74226=>'L',
+74227=>'L',
+74228=>'L',
+74229=>'L',
+74230=>'L',
+74231=>'L',
+74232=>'L',
+74233=>'L',
+74234=>'L',
+74235=>'L',
+74236=>'L',
+74237=>'L',
+74238=>'L',
+74239=>'L',
+74240=>'L',
+74241=>'L',
+74242=>'L',
+74243=>'L',
+74244=>'L',
+74245=>'L',
+74246=>'L',
+74247=>'L',
+74248=>'L',
+74249=>'L',
+74250=>'L',
+74251=>'L',
+74252=>'L',
+74253=>'L',
+74254=>'L',
+74255=>'L',
+74256=>'L',
+74257=>'L',
+74258=>'L',
+74259=>'L',
+74260=>'L',
+74261=>'L',
+74262=>'L',
+74263=>'L',
+74264=>'L',
+74265=>'L',
+74266=>'L',
+74267=>'L',
+74268=>'L',
+74269=>'L',
+74270=>'L',
+74271=>'L',
+74272=>'L',
+74273=>'L',
+74274=>'L',
+74275=>'L',
+74276=>'L',
+74277=>'L',
+74278=>'L',
+74279=>'L',
+74280=>'L',
+74281=>'L',
+74282=>'L',
+74283=>'L',
+74284=>'L',
+74285=>'L',
+74286=>'L',
+74287=>'L',
+74288=>'L',
+74289=>'L',
+74290=>'L',
+74291=>'L',
+74292=>'L',
+74293=>'L',
+74294=>'L',
+74295=>'L',
+74296=>'L',
+74297=>'L',
+74298=>'L',
+74299=>'L',
+74300=>'L',
+74301=>'L',
+74302=>'L',
+74303=>'L',
+74304=>'L',
+74305=>'L',
+74306=>'L',
+74307=>'L',
+74308=>'L',
+74309=>'L',
+74310=>'L',
+74311=>'L',
+74312=>'L',
+74313=>'L',
+74314=>'L',
+74315=>'L',
+74316=>'L',
+74317=>'L',
+74318=>'L',
+74319=>'L',
+74320=>'L',
+74321=>'L',
+74322=>'L',
+74323=>'L',
+74324=>'L',
+74325=>'L',
+74326=>'L',
+74327=>'L',
+74328=>'L',
+74329=>'L',
+74330=>'L',
+74331=>'L',
+74332=>'L',
+74333=>'L',
+74334=>'L',
+74335=>'L',
+74336=>'L',
+74337=>'L',
+74338=>'L',
+74339=>'L',
+74340=>'L',
+74341=>'L',
+74342=>'L',
+74343=>'L',
+74344=>'L',
+74345=>'L',
+74346=>'L',
+74347=>'L',
+74348=>'L',
+74349=>'L',
+74350=>'L',
+74351=>'L',
+74352=>'L',
+74353=>'L',
+74354=>'L',
+74355=>'L',
+74356=>'L',
+74357=>'L',
+74358=>'L',
+74359=>'L',
+74360=>'L',
+74361=>'L',
+74362=>'L',
+74363=>'L',
+74364=>'L',
+74365=>'L',
+74366=>'L',
+74367=>'L',
+74368=>'L',
+74369=>'L',
+74370=>'L',
+74371=>'L',
+74372=>'L',
+74373=>'L',
+74374=>'L',
+74375=>'L',
+74376=>'L',
+74377=>'L',
+74378=>'L',
+74379=>'L',
+74380=>'L',
+74381=>'L',
+74382=>'L',
+74383=>'L',
+74384=>'L',
+74385=>'L',
+74386=>'L',
+74387=>'L',
+74388=>'L',
+74389=>'L',
+74390=>'L',
+74391=>'L',
+74392=>'L',
+74393=>'L',
+74394=>'L',
+74395=>'L',
+74396=>'L',
+74397=>'L',
+74398=>'L',
+74399=>'L',
+74400=>'L',
+74401=>'L',
+74402=>'L',
+74403=>'L',
+74404=>'L',
+74405=>'L',
+74406=>'L',
+74407=>'L',
+74408=>'L',
+74409=>'L',
+74410=>'L',
+74411=>'L',
+74412=>'L',
+74413=>'L',
+74414=>'L',
+74415=>'L',
+74416=>'L',
+74417=>'L',
+74418=>'L',
+74419=>'L',
+74420=>'L',
+74421=>'L',
+74422=>'L',
+74423=>'L',
+74424=>'L',
+74425=>'L',
+74426=>'L',
+74427=>'L',
+74428=>'L',
+74429=>'L',
+74430=>'L',
+74431=>'L',
+74432=>'L',
+74433=>'L',
+74434=>'L',
+74435=>'L',
+74436=>'L',
+74437=>'L',
+74438=>'L',
+74439=>'L',
+74440=>'L',
+74441=>'L',
+74442=>'L',
+74443=>'L',
+74444=>'L',
+74445=>'L',
+74446=>'L',
+74447=>'L',
+74448=>'L',
+74449=>'L',
+74450=>'L',
+74451=>'L',
+74452=>'L',
+74453=>'L',
+74454=>'L',
+74455=>'L',
+74456=>'L',
+74457=>'L',
+74458=>'L',
+74459=>'L',
+74460=>'L',
+74461=>'L',
+74462=>'L',
+74463=>'L',
+74464=>'L',
+74465=>'L',
+74466=>'L',
+74467=>'L',
+74468=>'L',
+74469=>'L',
+74470=>'L',
+74471=>'L',
+74472=>'L',
+74473=>'L',
+74474=>'L',
+74475=>'L',
+74476=>'L',
+74477=>'L',
+74478=>'L',
+74479=>'L',
+74480=>'L',
+74481=>'L',
+74482=>'L',
+74483=>'L',
+74484=>'L',
+74485=>'L',
+74486=>'L',
+74487=>'L',
+74488=>'L',
+74489=>'L',
+74490=>'L',
+74491=>'L',
+74492=>'L',
+74493=>'L',
+74494=>'L',
+74495=>'L',
+74496=>'L',
+74497=>'L',
+74498=>'L',
+74499=>'L',
+74500=>'L',
+74501=>'L',
+74502=>'L',
+74503=>'L',
+74504=>'L',
+74505=>'L',
+74506=>'L',
+74507=>'L',
+74508=>'L',
+74509=>'L',
+74510=>'L',
+74511=>'L',
+74512=>'L',
+74513=>'L',
+74514=>'L',
+74515=>'L',
+74516=>'L',
+74517=>'L',
+74518=>'L',
+74519=>'L',
+74520=>'L',
+74521=>'L',
+74522=>'L',
+74523=>'L',
+74524=>'L',
+74525=>'L',
+74526=>'L',
+74527=>'L',
+74528=>'L',
+74529=>'L',
+74530=>'L',
+74531=>'L',
+74532=>'L',
+74533=>'L',
+74534=>'L',
+74535=>'L',
+74536=>'L',
+74537=>'L',
+74538=>'L',
+74539=>'L',
+74540=>'L',
+74541=>'L',
+74542=>'L',
+74543=>'L',
+74544=>'L',
+74545=>'L',
+74546=>'L',
+74547=>'L',
+74548=>'L',
+74549=>'L',
+74550=>'L',
+74551=>'L',
+74552=>'L',
+74553=>'L',
+74554=>'L',
+74555=>'L',
+74556=>'L',
+74557=>'L',
+74558=>'L',
+74559=>'L',
+74560=>'L',
+74561=>'L',
+74562=>'L',
+74563=>'L',
+74564=>'L',
+74565=>'L',
+74566=>'L',
+74567=>'L',
+74568=>'L',
+74569=>'L',
+74570=>'L',
+74571=>'L',
+74572=>'L',
+74573=>'L',
+74574=>'L',
+74575=>'L',
+74576=>'L',
+74577=>'L',
+74578=>'L',
+74579=>'L',
+74580=>'L',
+74581=>'L',
+74582=>'L',
+74583=>'L',
+74584=>'L',
+74585=>'L',
+74586=>'L',
+74587=>'L',
+74588=>'L',
+74589=>'L',
+74590=>'L',
+74591=>'L',
+74592=>'L',
+74593=>'L',
+74594=>'L',
+74595=>'L',
+74596=>'L',
+74597=>'L',
+74598=>'L',
+74599=>'L',
+74600=>'L',
+74601=>'L',
+74602=>'L',
+74603=>'L',
+74604=>'L',
+74605=>'L',
+74606=>'L',
+74752=>'L',
+74753=>'L',
+74754=>'L',
+74755=>'L',
+74756=>'L',
+74757=>'L',
+74758=>'L',
+74759=>'L',
+74760=>'L',
+74761=>'L',
+74762=>'L',
+74763=>'L',
+74764=>'L',
+74765=>'L',
+74766=>'L',
+74767=>'L',
+74768=>'L',
+74769=>'L',
+74770=>'L',
+74771=>'L',
+74772=>'L',
+74773=>'L',
+74774=>'L',
+74775=>'L',
+74776=>'L',
+74777=>'L',
+74778=>'L',
+74779=>'L',
+74780=>'L',
+74781=>'L',
+74782=>'L',
+74783=>'L',
+74784=>'L',
+74785=>'L',
+74786=>'L',
+74787=>'L',
+74788=>'L',
+74789=>'L',
+74790=>'L',
+74791=>'L',
+74792=>'L',
+74793=>'L',
+74794=>'L',
+74795=>'L',
+74796=>'L',
+74797=>'L',
+74798=>'L',
+74799=>'L',
+74800=>'L',
+74801=>'L',
+74802=>'L',
+74803=>'L',
+74804=>'L',
+74805=>'L',
+74806=>'L',
+74807=>'L',
+74808=>'L',
+74809=>'L',
+74810=>'L',
+74811=>'L',
+74812=>'L',
+74813=>'L',
+74814=>'L',
+74815=>'L',
+74816=>'L',
+74817=>'L',
+74818=>'L',
+74819=>'L',
+74820=>'L',
+74821=>'L',
+74822=>'L',
+74823=>'L',
+74824=>'L',
+74825=>'L',
+74826=>'L',
+74827=>'L',
+74828=>'L',
+74829=>'L',
+74830=>'L',
+74831=>'L',
+74832=>'L',
+74833=>'L',
+74834=>'L',
+74835=>'L',
+74836=>'L',
+74837=>'L',
+74838=>'L',
+74839=>'L',
+74840=>'L',
+74841=>'L',
+74842=>'L',
+74843=>'L',
+74844=>'L',
+74845=>'L',
+74846=>'L',
+74847=>'L',
+74848=>'L',
+74849=>'L',
+74850=>'L',
+74864=>'L',
+74865=>'L',
+74866=>'L',
+74867=>'L',
+118784=>'L',
+118785=>'L',
+118786=>'L',
+118787=>'L',
+118788=>'L',
+118789=>'L',
+118790=>'L',
+118791=>'L',
+118792=>'L',
+118793=>'L',
+118794=>'L',
+118795=>'L',
+118796=>'L',
+118797=>'L',
+118798=>'L',
+118799=>'L',
+118800=>'L',
+118801=>'L',
+118802=>'L',
+118803=>'L',
+118804=>'L',
+118805=>'L',
+118806=>'L',
+118807=>'L',
+118808=>'L',
+118809=>'L',
+118810=>'L',
+118811=>'L',
+118812=>'L',
+118813=>'L',
+118814=>'L',
+118815=>'L',
+118816=>'L',
+118817=>'L',
+118818=>'L',
+118819=>'L',
+118820=>'L',
+118821=>'L',
+118822=>'L',
+118823=>'L',
+118824=>'L',
+118825=>'L',
+118826=>'L',
+118827=>'L',
+118828=>'L',
+118829=>'L',
+118830=>'L',
+118831=>'L',
+118832=>'L',
+118833=>'L',
+118834=>'L',
+118835=>'L',
+118836=>'L',
+118837=>'L',
+118838=>'L',
+118839=>'L',
+118840=>'L',
+118841=>'L',
+118842=>'L',
+118843=>'L',
+118844=>'L',
+118845=>'L',
+118846=>'L',
+118847=>'L',
+118848=>'L',
+118849=>'L',
+118850=>'L',
+118851=>'L',
+118852=>'L',
+118853=>'L',
+118854=>'L',
+118855=>'L',
+118856=>'L',
+118857=>'L',
+118858=>'L',
+118859=>'L',
+118860=>'L',
+118861=>'L',
+118862=>'L',
+118863=>'L',
+118864=>'L',
+118865=>'L',
+118866=>'L',
+118867=>'L',
+118868=>'L',
+118869=>'L',
+118870=>'L',
+118871=>'L',
+118872=>'L',
+118873=>'L',
+118874=>'L',
+118875=>'L',
+118876=>'L',
+118877=>'L',
+118878=>'L',
+118879=>'L',
+118880=>'L',
+118881=>'L',
+118882=>'L',
+118883=>'L',
+118884=>'L',
+118885=>'L',
+118886=>'L',
+118887=>'L',
+118888=>'L',
+118889=>'L',
+118890=>'L',
+118891=>'L',
+118892=>'L',
+118893=>'L',
+118894=>'L',
+118895=>'L',
+118896=>'L',
+118897=>'L',
+118898=>'L',
+118899=>'L',
+118900=>'L',
+118901=>'L',
+118902=>'L',
+118903=>'L',
+118904=>'L',
+118905=>'L',
+118906=>'L',
+118907=>'L',
+118908=>'L',
+118909=>'L',
+118910=>'L',
+118911=>'L',
+118912=>'L',
+118913=>'L',
+118914=>'L',
+118915=>'L',
+118916=>'L',
+118917=>'L',
+118918=>'L',
+118919=>'L',
+118920=>'L',
+118921=>'L',
+118922=>'L',
+118923=>'L',
+118924=>'L',
+118925=>'L',
+118926=>'L',
+118927=>'L',
+118928=>'L',
+118929=>'L',
+118930=>'L',
+118931=>'L',
+118932=>'L',
+118933=>'L',
+118934=>'L',
+118935=>'L',
+118936=>'L',
+118937=>'L',
+118938=>'L',
+118939=>'L',
+118940=>'L',
+118941=>'L',
+118942=>'L',
+118943=>'L',
+118944=>'L',
+118945=>'L',
+118946=>'L',
+118947=>'L',
+118948=>'L',
+118949=>'L',
+118950=>'L',
+118951=>'L',
+118952=>'L',
+118953=>'L',
+118954=>'L',
+118955=>'L',
+118956=>'L',
+118957=>'L',
+118958=>'L',
+118959=>'L',
+118960=>'L',
+118961=>'L',
+118962=>'L',
+118963=>'L',
+118964=>'L',
+118965=>'L',
+118966=>'L',
+118967=>'L',
+118968=>'L',
+118969=>'L',
+118970=>'L',
+118971=>'L',
+118972=>'L',
+118973=>'L',
+118974=>'L',
+118975=>'L',
+118976=>'L',
+118977=>'L',
+118978=>'L',
+118979=>'L',
+118980=>'L',
+118981=>'L',
+118982=>'L',
+118983=>'L',
+118984=>'L',
+118985=>'L',
+118986=>'L',
+118987=>'L',
+118988=>'L',
+118989=>'L',
+118990=>'L',
+118991=>'L',
+118992=>'L',
+118993=>'L',
+118994=>'L',
+118995=>'L',
+118996=>'L',
+118997=>'L',
+118998=>'L',
+118999=>'L',
+119000=>'L',
+119001=>'L',
+119002=>'L',
+119003=>'L',
+119004=>'L',
+119005=>'L',
+119006=>'L',
+119007=>'L',
+119008=>'L',
+119009=>'L',
+119010=>'L',
+119011=>'L',
+119012=>'L',
+119013=>'L',
+119014=>'L',
+119015=>'L',
+119016=>'L',
+119017=>'L',
+119018=>'L',
+119019=>'L',
+119020=>'L',
+119021=>'L',
+119022=>'L',
+119023=>'L',
+119024=>'L',
+119025=>'L',
+119026=>'L',
+119027=>'L',
+119028=>'L',
+119029=>'L',
+119040=>'L',
+119041=>'L',
+119042=>'L',
+119043=>'L',
+119044=>'L',
+119045=>'L',
+119046=>'L',
+119047=>'L',
+119048=>'L',
+119049=>'L',
+119050=>'L',
+119051=>'L',
+119052=>'L',
+119053=>'L',
+119054=>'L',
+119055=>'L',
+119056=>'L',
+119057=>'L',
+119058=>'L',
+119059=>'L',
+119060=>'L',
+119061=>'L',
+119062=>'L',
+119063=>'L',
+119064=>'L',
+119065=>'L',
+119066=>'L',
+119067=>'L',
+119068=>'L',
+119069=>'L',
+119070=>'L',
+119071=>'L',
+119072=>'L',
+119073=>'L',
+119074=>'L',
+119075=>'L',
+119076=>'L',
+119077=>'L',
+119078=>'L',
+119082=>'L',
+119083=>'L',
+119084=>'L',
+119085=>'L',
+119086=>'L',
+119087=>'L',
+119088=>'L',
+119089=>'L',
+119090=>'L',
+119091=>'L',
+119092=>'L',
+119093=>'L',
+119094=>'L',
+119095=>'L',
+119096=>'L',
+119097=>'L',
+119098=>'L',
+119099=>'L',
+119100=>'L',
+119101=>'L',
+119102=>'L',
+119103=>'L',
+119104=>'L',
+119105=>'L',
+119106=>'L',
+119107=>'L',
+119108=>'L',
+119109=>'L',
+119110=>'L',
+119111=>'L',
+119112=>'L',
+119113=>'L',
+119114=>'L',
+119115=>'L',
+119116=>'L',
+119117=>'L',
+119118=>'L',
+119119=>'L',
+119120=>'L',
+119121=>'L',
+119122=>'L',
+119123=>'L',
+119124=>'L',
+119125=>'L',
+119126=>'L',
+119127=>'L',
+119128=>'L',
+119129=>'L',
+119130=>'L',
+119131=>'L',
+119132=>'L',
+119133=>'L',
+119134=>'L',
+119135=>'L',
+119136=>'L',
+119137=>'L',
+119138=>'L',
+119139=>'L',
+119140=>'L',
+119141=>'L',
+119142=>'L',
+119143=>'NSM',
+119144=>'NSM',
+119145=>'NSM',
+119146=>'L',
+119147=>'L',
+119148=>'L',
+119149=>'L',
+119150=>'L',
+119151=>'L',
+119152=>'L',
+119153=>'L',
+119154=>'L',
+119155=>'BN',
+119156=>'BN',
+119157=>'BN',
+119158=>'BN',
+119159=>'BN',
+119160=>'BN',
+119161=>'BN',
+119162=>'BN',
+119163=>'NSM',
+119164=>'NSM',
+119165=>'NSM',
+119166=>'NSM',
+119167=>'NSM',
+119168=>'NSM',
+119169=>'NSM',
+119170=>'NSM',
+119171=>'L',
+119172=>'L',
+119173=>'NSM',
+119174=>'NSM',
+119175=>'NSM',
+119176=>'NSM',
+119177=>'NSM',
+119178=>'NSM',
+119179=>'NSM',
+119180=>'L',
+119181=>'L',
+119182=>'L',
+119183=>'L',
+119184=>'L',
+119185=>'L',
+119186=>'L',
+119187=>'L',
+119188=>'L',
+119189=>'L',
+119190=>'L',
+119191=>'L',
+119192=>'L',
+119193=>'L',
+119194=>'L',
+119195=>'L',
+119196=>'L',
+119197=>'L',
+119198=>'L',
+119199=>'L',
+119200=>'L',
+119201=>'L',
+119202=>'L',
+119203=>'L',
+119204=>'L',
+119205=>'L',
+119206=>'L',
+119207=>'L',
+119208=>'L',
+119209=>'L',
+119210=>'NSM',
+119211=>'NSM',
+119212=>'NSM',
+119213=>'NSM',
+119214=>'L',
+119215=>'L',
+119216=>'L',
+119217=>'L',
+119218=>'L',
+119219=>'L',
+119220=>'L',
+119221=>'L',
+119222=>'L',
+119223=>'L',
+119224=>'L',
+119225=>'L',
+119226=>'L',
+119227=>'L',
+119228=>'L',
+119229=>'L',
+119230=>'L',
+119231=>'L',
+119232=>'L',
+119233=>'L',
+119234=>'L',
+119235=>'L',
+119236=>'L',
+119237=>'L',
+119238=>'L',
+119239=>'L',
+119240=>'L',
+119241=>'L',
+119242=>'L',
+119243=>'L',
+119244=>'L',
+119245=>'L',
+119246=>'L',
+119247=>'L',
+119248=>'L',
+119249=>'L',
+119250=>'L',
+119251=>'L',
+119252=>'L',
+119253=>'L',
+119254=>'L',
+119255=>'L',
+119256=>'L',
+119257=>'L',
+119258=>'L',
+119259=>'L',
+119260=>'L',
+119261=>'L',
+119296=>'ON',
+119297=>'ON',
+119298=>'ON',
+119299=>'ON',
+119300=>'ON',
+119301=>'ON',
+119302=>'ON',
+119303=>'ON',
+119304=>'ON',
+119305=>'ON',
+119306=>'ON',
+119307=>'ON',
+119308=>'ON',
+119309=>'ON',
+119310=>'ON',
+119311=>'ON',
+119312=>'ON',
+119313=>'ON',
+119314=>'ON',
+119315=>'ON',
+119316=>'ON',
+119317=>'ON',
+119318=>'ON',
+119319=>'ON',
+119320=>'ON',
+119321=>'ON',
+119322=>'ON',
+119323=>'ON',
+119324=>'ON',
+119325=>'ON',
+119326=>'ON',
+119327=>'ON',
+119328=>'ON',
+119329=>'ON',
+119330=>'ON',
+119331=>'ON',
+119332=>'ON',
+119333=>'ON',
+119334=>'ON',
+119335=>'ON',
+119336=>'ON',
+119337=>'ON',
+119338=>'ON',
+119339=>'ON',
+119340=>'ON',
+119341=>'ON',
+119342=>'ON',
+119343=>'ON',
+119344=>'ON',
+119345=>'ON',
+119346=>'ON',
+119347=>'ON',
+119348=>'ON',
+119349=>'ON',
+119350=>'ON',
+119351=>'ON',
+119352=>'ON',
+119353=>'ON',
+119354=>'ON',
+119355=>'ON',
+119356=>'ON',
+119357=>'ON',
+119358=>'ON',
+119359=>'ON',
+119360=>'ON',
+119361=>'ON',
+119362=>'NSM',
+119363=>'NSM',
+119364=>'NSM',
+119365=>'ON',
+119552=>'ON',
+119553=>'ON',
+119554=>'ON',
+119555=>'ON',
+119556=>'ON',
+119557=>'ON',
+119558=>'ON',
+119559=>'ON',
+119560=>'ON',
+119561=>'ON',
+119562=>'ON',
+119563=>'ON',
+119564=>'ON',
+119565=>'ON',
+119566=>'ON',
+119567=>'ON',
+119568=>'ON',
+119569=>'ON',
+119570=>'ON',
+119571=>'ON',
+119572=>'ON',
+119573=>'ON',
+119574=>'ON',
+119575=>'ON',
+119576=>'ON',
+119577=>'ON',
+119578=>'ON',
+119579=>'ON',
+119580=>'ON',
+119581=>'ON',
+119582=>'ON',
+119583=>'ON',
+119584=>'ON',
+119585=>'ON',
+119586=>'ON',
+119587=>'ON',
+119588=>'ON',
+119589=>'ON',
+119590=>'ON',
+119591=>'ON',
+119592=>'ON',
+119593=>'ON',
+119594=>'ON',
+119595=>'ON',
+119596=>'ON',
+119597=>'ON',
+119598=>'ON',
+119599=>'ON',
+119600=>'ON',
+119601=>'ON',
+119602=>'ON',
+119603=>'ON',
+119604=>'ON',
+119605=>'ON',
+119606=>'ON',
+119607=>'ON',
+119608=>'ON',
+119609=>'ON',
+119610=>'ON',
+119611=>'ON',
+119612=>'ON',
+119613=>'ON',
+119614=>'ON',
+119615=>'ON',
+119616=>'ON',
+119617=>'ON',
+119618=>'ON',
+119619=>'ON',
+119620=>'ON',
+119621=>'ON',
+119622=>'ON',
+119623=>'ON',
+119624=>'ON',
+119625=>'ON',
+119626=>'ON',
+119627=>'ON',
+119628=>'ON',
+119629=>'ON',
+119630=>'ON',
+119631=>'ON',
+119632=>'ON',
+119633=>'ON',
+119634=>'ON',
+119635=>'ON',
+119636=>'ON',
+119637=>'ON',
+119638=>'ON',
+119648=>'L',
+119649=>'L',
+119650=>'L',
+119651=>'L',
+119652=>'L',
+119653=>'L',
+119654=>'L',
+119655=>'L',
+119656=>'L',
+119657=>'L',
+119658=>'L',
+119659=>'L',
+119660=>'L',
+119661=>'L',
+119662=>'L',
+119663=>'L',
+119664=>'L',
+119665=>'L',
+119808=>'L',
+119809=>'L',
+119810=>'L',
+119811=>'L',
+119812=>'L',
+119813=>'L',
+119814=>'L',
+119815=>'L',
+119816=>'L',
+119817=>'L',
+119818=>'L',
+119819=>'L',
+119820=>'L',
+119821=>'L',
+119822=>'L',
+119823=>'L',
+119824=>'L',
+119825=>'L',
+119826=>'L',
+119827=>'L',
+119828=>'L',
+119829=>'L',
+119830=>'L',
+119831=>'L',
+119832=>'L',
+119833=>'L',
+119834=>'L',
+119835=>'L',
+119836=>'L',
+119837=>'L',
+119838=>'L',
+119839=>'L',
+119840=>'L',
+119841=>'L',
+119842=>'L',
+119843=>'L',
+119844=>'L',
+119845=>'L',
+119846=>'L',
+119847=>'L',
+119848=>'L',
+119849=>'L',
+119850=>'L',
+119851=>'L',
+119852=>'L',
+119853=>'L',
+119854=>'L',
+119855=>'L',
+119856=>'L',
+119857=>'L',
+119858=>'L',
+119859=>'L',
+119860=>'L',
+119861=>'L',
+119862=>'L',
+119863=>'L',
+119864=>'L',
+119865=>'L',
+119866=>'L',
+119867=>'L',
+119868=>'L',
+119869=>'L',
+119870=>'L',
+119871=>'L',
+119872=>'L',
+119873=>'L',
+119874=>'L',
+119875=>'L',
+119876=>'L',
+119877=>'L',
+119878=>'L',
+119879=>'L',
+119880=>'L',
+119881=>'L',
+119882=>'L',
+119883=>'L',
+119884=>'L',
+119885=>'L',
+119886=>'L',
+119887=>'L',
+119888=>'L',
+119889=>'L',
+119890=>'L',
+119891=>'L',
+119892=>'L',
+119894=>'L',
+119895=>'L',
+119896=>'L',
+119897=>'L',
+119898=>'L',
+119899=>'L',
+119900=>'L',
+119901=>'L',
+119902=>'L',
+119903=>'L',
+119904=>'L',
+119905=>'L',
+119906=>'L',
+119907=>'L',
+119908=>'L',
+119909=>'L',
+119910=>'L',
+119911=>'L',
+119912=>'L',
+119913=>'L',
+119914=>'L',
+119915=>'L',
+119916=>'L',
+119917=>'L',
+119918=>'L',
+119919=>'L',
+119920=>'L',
+119921=>'L',
+119922=>'L',
+119923=>'L',
+119924=>'L',
+119925=>'L',
+119926=>'L',
+119927=>'L',
+119928=>'L',
+119929=>'L',
+119930=>'L',
+119931=>'L',
+119932=>'L',
+119933=>'L',
+119934=>'L',
+119935=>'L',
+119936=>'L',
+119937=>'L',
+119938=>'L',
+119939=>'L',
+119940=>'L',
+119941=>'L',
+119942=>'L',
+119943=>'L',
+119944=>'L',
+119945=>'L',
+119946=>'L',
+119947=>'L',
+119948=>'L',
+119949=>'L',
+119950=>'L',
+119951=>'L',
+119952=>'L',
+119953=>'L',
+119954=>'L',
+119955=>'L',
+119956=>'L',
+119957=>'L',
+119958=>'L',
+119959=>'L',
+119960=>'L',
+119961=>'L',
+119962=>'L',
+119963=>'L',
+119964=>'L',
+119966=>'L',
+119967=>'L',
+119970=>'L',
+119973=>'L',
+119974=>'L',
+119977=>'L',
+119978=>'L',
+119979=>'L',
+119980=>'L',
+119982=>'L',
+119983=>'L',
+119984=>'L',
+119985=>'L',
+119986=>'L',
+119987=>'L',
+119988=>'L',
+119989=>'L',
+119990=>'L',
+119991=>'L',
+119992=>'L',
+119993=>'L',
+119995=>'L',
+119997=>'L',
+119998=>'L',
+119999=>'L',
+120000=>'L',
+120001=>'L',
+120002=>'L',
+120003=>'L',
+120005=>'L',
+120006=>'L',
+120007=>'L',
+120008=>'L',
+120009=>'L',
+120010=>'L',
+120011=>'L',
+120012=>'L',
+120013=>'L',
+120014=>'L',
+120015=>'L',
+120016=>'L',
+120017=>'L',
+120018=>'L',
+120019=>'L',
+120020=>'L',
+120021=>'L',
+120022=>'L',
+120023=>'L',
+120024=>'L',
+120025=>'L',
+120026=>'L',
+120027=>'L',
+120028=>'L',
+120029=>'L',
+120030=>'L',
+120031=>'L',
+120032=>'L',
+120033=>'L',
+120034=>'L',
+120035=>'L',
+120036=>'L',
+120037=>'L',
+120038=>'L',
+120039=>'L',
+120040=>'L',
+120041=>'L',
+120042=>'L',
+120043=>'L',
+120044=>'L',
+120045=>'L',
+120046=>'L',
+120047=>'L',
+120048=>'L',
+120049=>'L',
+120050=>'L',
+120051=>'L',
+120052=>'L',
+120053=>'L',
+120054=>'L',
+120055=>'L',
+120056=>'L',
+120057=>'L',
+120058=>'L',
+120059=>'L',
+120060=>'L',
+120061=>'L',
+120062=>'L',
+120063=>'L',
+120064=>'L',
+120065=>'L',
+120066=>'L',
+120067=>'L',
+120068=>'L',
+120069=>'L',
+120071=>'L',
+120072=>'L',
+120073=>'L',
+120074=>'L',
+120077=>'L',
+120078=>'L',
+120079=>'L',
+120080=>'L',
+120081=>'L',
+120082=>'L',
+120083=>'L',
+120084=>'L',
+120086=>'L',
+120087=>'L',
+120088=>'L',
+120089=>'L',
+120090=>'L',
+120091=>'L',
+120092=>'L',
+120094=>'L',
+120095=>'L',
+120096=>'L',
+120097=>'L',
+120098=>'L',
+120099=>'L',
+120100=>'L',
+120101=>'L',
+120102=>'L',
+120103=>'L',
+120104=>'L',
+120105=>'L',
+120106=>'L',
+120107=>'L',
+120108=>'L',
+120109=>'L',
+120110=>'L',
+120111=>'L',
+120112=>'L',
+120113=>'L',
+120114=>'L',
+120115=>'L',
+120116=>'L',
+120117=>'L',
+120118=>'L',
+120119=>'L',
+120120=>'L',
+120121=>'L',
+120123=>'L',
+120124=>'L',
+120125=>'L',
+120126=>'L',
+120128=>'L',
+120129=>'L',
+120130=>'L',
+120131=>'L',
+120132=>'L',
+120134=>'L',
+120138=>'L',
+120139=>'L',
+120140=>'L',
+120141=>'L',
+120142=>'L',
+120143=>'L',
+120144=>'L',
+120146=>'L',
+120147=>'L',
+120148=>'L',
+120149=>'L',
+120150=>'L',
+120151=>'L',
+120152=>'L',
+120153=>'L',
+120154=>'L',
+120155=>'L',
+120156=>'L',
+120157=>'L',
+120158=>'L',
+120159=>'L',
+120160=>'L',
+120161=>'L',
+120162=>'L',
+120163=>'L',
+120164=>'L',
+120165=>'L',
+120166=>'L',
+120167=>'L',
+120168=>'L',
+120169=>'L',
+120170=>'L',
+120171=>'L',
+120172=>'L',
+120173=>'L',
+120174=>'L',
+120175=>'L',
+120176=>'L',
+120177=>'L',
+120178=>'L',
+120179=>'L',
+120180=>'L',
+120181=>'L',
+120182=>'L',
+120183=>'L',
+120184=>'L',
+120185=>'L',
+120186=>'L',
+120187=>'L',
+120188=>'L',
+120189=>'L',
+120190=>'L',
+120191=>'L',
+120192=>'L',
+120193=>'L',
+120194=>'L',
+120195=>'L',
+120196=>'L',
+120197=>'L',
+120198=>'L',
+120199=>'L',
+120200=>'L',
+120201=>'L',
+120202=>'L',
+120203=>'L',
+120204=>'L',
+120205=>'L',
+120206=>'L',
+120207=>'L',
+120208=>'L',
+120209=>'L',
+120210=>'L',
+120211=>'L',
+120212=>'L',
+120213=>'L',
+120214=>'L',
+120215=>'L',
+120216=>'L',
+120217=>'L',
+120218=>'L',
+120219=>'L',
+120220=>'L',
+120221=>'L',
+120222=>'L',
+120223=>'L',
+120224=>'L',
+120225=>'L',
+120226=>'L',
+120227=>'L',
+120228=>'L',
+120229=>'L',
+120230=>'L',
+120231=>'L',
+120232=>'L',
+120233=>'L',
+120234=>'L',
+120235=>'L',
+120236=>'L',
+120237=>'L',
+120238=>'L',
+120239=>'L',
+120240=>'L',
+120241=>'L',
+120242=>'L',
+120243=>'L',
+120244=>'L',
+120245=>'L',
+120246=>'L',
+120247=>'L',
+120248=>'L',
+120249=>'L',
+120250=>'L',
+120251=>'L',
+120252=>'L',
+120253=>'L',
+120254=>'L',
+120255=>'L',
+120256=>'L',
+120257=>'L',
+120258=>'L',
+120259=>'L',
+120260=>'L',
+120261=>'L',
+120262=>'L',
+120263=>'L',
+120264=>'L',
+120265=>'L',
+120266=>'L',
+120267=>'L',
+120268=>'L',
+120269=>'L',
+120270=>'L',
+120271=>'L',
+120272=>'L',
+120273=>'L',
+120274=>'L',
+120275=>'L',
+120276=>'L',
+120277=>'L',
+120278=>'L',
+120279=>'L',
+120280=>'L',
+120281=>'L',
+120282=>'L',
+120283=>'L',
+120284=>'L',
+120285=>'L',
+120286=>'L',
+120287=>'L',
+120288=>'L',
+120289=>'L',
+120290=>'L',
+120291=>'L',
+120292=>'L',
+120293=>'L',
+120294=>'L',
+120295=>'L',
+120296=>'L',
+120297=>'L',
+120298=>'L',
+120299=>'L',
+120300=>'L',
+120301=>'L',
+120302=>'L',
+120303=>'L',
+120304=>'L',
+120305=>'L',
+120306=>'L',
+120307=>'L',
+120308=>'L',
+120309=>'L',
+120310=>'L',
+120311=>'L',
+120312=>'L',
+120313=>'L',
+120314=>'L',
+120315=>'L',
+120316=>'L',
+120317=>'L',
+120318=>'L',
+120319=>'L',
+120320=>'L',
+120321=>'L',
+120322=>'L',
+120323=>'L',
+120324=>'L',
+120325=>'L',
+120326=>'L',
+120327=>'L',
+120328=>'L',
+120329=>'L',
+120330=>'L',
+120331=>'L',
+120332=>'L',
+120333=>'L',
+120334=>'L',
+120335=>'L',
+120336=>'L',
+120337=>'L',
+120338=>'L',
+120339=>'L',
+120340=>'L',
+120341=>'L',
+120342=>'L',
+120343=>'L',
+120344=>'L',
+120345=>'L',
+120346=>'L',
+120347=>'L',
+120348=>'L',
+120349=>'L',
+120350=>'L',
+120351=>'L',
+120352=>'L',
+120353=>'L',
+120354=>'L',
+120355=>'L',
+120356=>'L',
+120357=>'L',
+120358=>'L',
+120359=>'L',
+120360=>'L',
+120361=>'L',
+120362=>'L',
+120363=>'L',
+120364=>'L',
+120365=>'L',
+120366=>'L',
+120367=>'L',
+120368=>'L',
+120369=>'L',
+120370=>'L',
+120371=>'L',
+120372=>'L',
+120373=>'L',
+120374=>'L',
+120375=>'L',
+120376=>'L',
+120377=>'L',
+120378=>'L',
+120379=>'L',
+120380=>'L',
+120381=>'L',
+120382=>'L',
+120383=>'L',
+120384=>'L',
+120385=>'L',
+120386=>'L',
+120387=>'L',
+120388=>'L',
+120389=>'L',
+120390=>'L',
+120391=>'L',
+120392=>'L',
+120393=>'L',
+120394=>'L',
+120395=>'L',
+120396=>'L',
+120397=>'L',
+120398=>'L',
+120399=>'L',
+120400=>'L',
+120401=>'L',
+120402=>'L',
+120403=>'L',
+120404=>'L',
+120405=>'L',
+120406=>'L',
+120407=>'L',
+120408=>'L',
+120409=>'L',
+120410=>'L',
+120411=>'L',
+120412=>'L',
+120413=>'L',
+120414=>'L',
+120415=>'L',
+120416=>'L',
+120417=>'L',
+120418=>'L',
+120419=>'L',
+120420=>'L',
+120421=>'L',
+120422=>'L',
+120423=>'L',
+120424=>'L',
+120425=>'L',
+120426=>'L',
+120427=>'L',
+120428=>'L',
+120429=>'L',
+120430=>'L',
+120431=>'L',
+120432=>'L',
+120433=>'L',
+120434=>'L',
+120435=>'L',
+120436=>'L',
+120437=>'L',
+120438=>'L',
+120439=>'L',
+120440=>'L',
+120441=>'L',
+120442=>'L',
+120443=>'L',
+120444=>'L',
+120445=>'L',
+120446=>'L',
+120447=>'L',
+120448=>'L',
+120449=>'L',
+120450=>'L',
+120451=>'L',
+120452=>'L',
+120453=>'L',
+120454=>'L',
+120455=>'L',
+120456=>'L',
+120457=>'L',
+120458=>'L',
+120459=>'L',
+120460=>'L',
+120461=>'L',
+120462=>'L',
+120463=>'L',
+120464=>'L',
+120465=>'L',
+120466=>'L',
+120467=>'L',
+120468=>'L',
+120469=>'L',
+120470=>'L',
+120471=>'L',
+120472=>'L',
+120473=>'L',
+120474=>'L',
+120475=>'L',
+120476=>'L',
+120477=>'L',
+120478=>'L',
+120479=>'L',
+120480=>'L',
+120481=>'L',
+120482=>'L',
+120483=>'L',
+120484=>'L',
+120485=>'L',
+120488=>'L',
+120489=>'L',
+120490=>'L',
+120491=>'L',
+120492=>'L',
+120493=>'L',
+120494=>'L',
+120495=>'L',
+120496=>'L',
+120497=>'L',
+120498=>'L',
+120499=>'L',
+120500=>'L',
+120501=>'L',
+120502=>'L',
+120503=>'L',
+120504=>'L',
+120505=>'L',
+120506=>'L',
+120507=>'L',
+120508=>'L',
+120509=>'L',
+120510=>'L',
+120511=>'L',
+120512=>'L',
+120513=>'L',
+120514=>'L',
+120515=>'L',
+120516=>'L',
+120517=>'L',
+120518=>'L',
+120519=>'L',
+120520=>'L',
+120521=>'L',
+120522=>'L',
+120523=>'L',
+120524=>'L',
+120525=>'L',
+120526=>'L',
+120527=>'L',
+120528=>'L',
+120529=>'L',
+120530=>'L',
+120531=>'L',
+120532=>'L',
+120533=>'L',
+120534=>'L',
+120535=>'L',
+120536=>'L',
+120537=>'L',
+120538=>'L',
+120539=>'L',
+120540=>'L',
+120541=>'L',
+120542=>'L',
+120543=>'L',
+120544=>'L',
+120545=>'L',
+120546=>'L',
+120547=>'L',
+120548=>'L',
+120549=>'L',
+120550=>'L',
+120551=>'L',
+120552=>'L',
+120553=>'L',
+120554=>'L',
+120555=>'L',
+120556=>'L',
+120557=>'L',
+120558=>'L',
+120559=>'L',
+120560=>'L',
+120561=>'L',
+120562=>'L',
+120563=>'L',
+120564=>'L',
+120565=>'L',
+120566=>'L',
+120567=>'L',
+120568=>'L',
+120569=>'L',
+120570=>'L',
+120571=>'L',
+120572=>'L',
+120573=>'L',
+120574=>'L',
+120575=>'L',
+120576=>'L',
+120577=>'L',
+120578=>'L',
+120579=>'L',
+120580=>'L',
+120581=>'L',
+120582=>'L',
+120583=>'L',
+120584=>'L',
+120585=>'L',
+120586=>'L',
+120587=>'L',
+120588=>'L',
+120589=>'L',
+120590=>'L',
+120591=>'L',
+120592=>'L',
+120593=>'L',
+120594=>'L',
+120595=>'L',
+120596=>'L',
+120597=>'L',
+120598=>'L',
+120599=>'L',
+120600=>'L',
+120601=>'L',
+120602=>'L',
+120603=>'L',
+120604=>'L',
+120605=>'L',
+120606=>'L',
+120607=>'L',
+120608=>'L',
+120609=>'L',
+120610=>'L',
+120611=>'L',
+120612=>'L',
+120613=>'L',
+120614=>'L',
+120615=>'L',
+120616=>'L',
+120617=>'L',
+120618=>'L',
+120619=>'L',
+120620=>'L',
+120621=>'L',
+120622=>'L',
+120623=>'L',
+120624=>'L',
+120625=>'L',
+120626=>'L',
+120627=>'L',
+120628=>'L',
+120629=>'L',
+120630=>'L',
+120631=>'L',
+120632=>'L',
+120633=>'L',
+120634=>'L',
+120635=>'L',
+120636=>'L',
+120637=>'L',
+120638=>'L',
+120639=>'L',
+120640=>'L',
+120641=>'L',
+120642=>'L',
+120643=>'L',
+120644=>'L',
+120645=>'L',
+120646=>'L',
+120647=>'L',
+120648=>'L',
+120649=>'L',
+120650=>'L',
+120651=>'L',
+120652=>'L',
+120653=>'L',
+120654=>'L',
+120655=>'L',
+120656=>'L',
+120657=>'L',
+120658=>'L',
+120659=>'L',
+120660=>'L',
+120661=>'L',
+120662=>'L',
+120663=>'L',
+120664=>'L',
+120665=>'L',
+120666=>'L',
+120667=>'L',
+120668=>'L',
+120669=>'L',
+120670=>'L',
+120671=>'L',
+120672=>'L',
+120673=>'L',
+120674=>'L',
+120675=>'L',
+120676=>'L',
+120677=>'L',
+120678=>'L',
+120679=>'L',
+120680=>'L',
+120681=>'L',
+120682=>'L',
+120683=>'L',
+120684=>'L',
+120685=>'L',
+120686=>'L',
+120687=>'L',
+120688=>'L',
+120689=>'L',
+120690=>'L',
+120691=>'L',
+120692=>'L',
+120693=>'L',
+120694=>'L',
+120695=>'L',
+120696=>'L',
+120697=>'L',
+120698=>'L',
+120699=>'L',
+120700=>'L',
+120701=>'L',
+120702=>'L',
+120703=>'L',
+120704=>'L',
+120705=>'L',
+120706=>'L',
+120707=>'L',
+120708=>'L',
+120709=>'L',
+120710=>'L',
+120711=>'L',
+120712=>'L',
+120713=>'L',
+120714=>'L',
+120715=>'L',
+120716=>'L',
+120717=>'L',
+120718=>'L',
+120719=>'L',
+120720=>'L',
+120721=>'L',
+120722=>'L',
+120723=>'L',
+120724=>'L',
+120725=>'L',
+120726=>'L',
+120727=>'L',
+120728=>'L',
+120729=>'L',
+120730=>'L',
+120731=>'L',
+120732=>'L',
+120733=>'L',
+120734=>'L',
+120735=>'L',
+120736=>'L',
+120737=>'L',
+120738=>'L',
+120739=>'L',
+120740=>'L',
+120741=>'L',
+120742=>'L',
+120743=>'L',
+120744=>'L',
+120745=>'L',
+120746=>'L',
+120747=>'L',
+120748=>'L',
+120749=>'L',
+120750=>'L',
+120751=>'L',
+120752=>'L',
+120753=>'L',
+120754=>'L',
+120755=>'L',
+120756=>'L',
+120757=>'L',
+120758=>'L',
+120759=>'L',
+120760=>'L',
+120761=>'L',
+120762=>'L',
+120763=>'L',
+120764=>'L',
+120765=>'L',
+120766=>'L',
+120767=>'L',
+120768=>'L',
+120769=>'L',
+120770=>'L',
+120771=>'L',
+120772=>'L',
+120773=>'L',
+120774=>'L',
+120775=>'L',
+120776=>'L',
+120777=>'L',
+120778=>'L',
+120779=>'L',
+120782=>'EN',
+120783=>'EN',
+120784=>'EN',
+120785=>'EN',
+120786=>'EN',
+120787=>'EN',
+120788=>'EN',
+120789=>'EN',
+120790=>'EN',
+120791=>'EN',
+120792=>'EN',
+120793=>'EN',
+120794=>'EN',
+120795=>'EN',
+120796=>'EN',
+120797=>'EN',
+120798=>'EN',
+120799=>'EN',
+120800=>'EN',
+120801=>'EN',
+120802=>'EN',
+120803=>'EN',
+120804=>'EN',
+120805=>'EN',
+120806=>'EN',
+120807=>'EN',
+120808=>'EN',
+120809=>'EN',
+120810=>'EN',
+120811=>'EN',
+120812=>'EN',
+120813=>'EN',
+120814=>'EN',
+120815=>'EN',
+120816=>'EN',
+120817=>'EN',
+120818=>'EN',
+120819=>'EN',
+120820=>'EN',
+120821=>'EN',
+120822=>'EN',
+120823=>'EN',
+120824=>'EN',
+120825=>'EN',
+120826=>'EN',
+120827=>'EN',
+120828=>'EN',
+120829=>'EN',
+120830=>'EN',
+120831=>'EN',
+131072=>'L',
+173782=>'L',
+194560=>'L',
+194561=>'L',
+194562=>'L',
+194563=>'L',
+194564=>'L',
+194565=>'L',
+194566=>'L',
+194567=>'L',
+194568=>'L',
+194569=>'L',
+194570=>'L',
+194571=>'L',
+194572=>'L',
+194573=>'L',
+194574=>'L',
+194575=>'L',
+194576=>'L',
+194577=>'L',
+194578=>'L',
+194579=>'L',
+194580=>'L',
+194581=>'L',
+194582=>'L',
+194583=>'L',
+194584=>'L',
+194585=>'L',
+194586=>'L',
+194587=>'L',
+194588=>'L',
+194589=>'L',
+194590=>'L',
+194591=>'L',
+194592=>'L',
+194593=>'L',
+194594=>'L',
+194595=>'L',
+194596=>'L',
+194597=>'L',
+194598=>'L',
+194599=>'L',
+194600=>'L',
+194601=>'L',
+194602=>'L',
+194603=>'L',
+194604=>'L',
+194605=>'L',
+194606=>'L',
+194607=>'L',
+194608=>'L',
+194609=>'L',
+194610=>'L',
+194611=>'L',
+194612=>'L',
+194613=>'L',
+194614=>'L',
+194615=>'L',
+194616=>'L',
+194617=>'L',
+194618=>'L',
+194619=>'L',
+194620=>'L',
+194621=>'L',
+194622=>'L',
+194623=>'L',
+194624=>'L',
+194625=>'L',
+194626=>'L',
+194627=>'L',
+194628=>'L',
+194629=>'L',
+194630=>'L',
+194631=>'L',
+194632=>'L',
+194633=>'L',
+194634=>'L',
+194635=>'L',
+194636=>'L',
+194637=>'L',
+194638=>'L',
+194639=>'L',
+194640=>'L',
+194641=>'L',
+194642=>'L',
+194643=>'L',
+194644=>'L',
+194645=>'L',
+194646=>'L',
+194647=>'L',
+194648=>'L',
+194649=>'L',
+194650=>'L',
+194651=>'L',
+194652=>'L',
+194653=>'L',
+194654=>'L',
+194655=>'L',
+194656=>'L',
+194657=>'L',
+194658=>'L',
+194659=>'L',
+194660=>'L',
+194661=>'L',
+194662=>'L',
+194663=>'L',
+194664=>'L',
+194665=>'L',
+194666=>'L',
+194667=>'L',
+194668=>'L',
+194669=>'L',
+194670=>'L',
+194671=>'L',
+194672=>'L',
+194673=>'L',
+194674=>'L',
+194675=>'L',
+194676=>'L',
+194677=>'L',
+194678=>'L',
+194679=>'L',
+194680=>'L',
+194681=>'L',
+194682=>'L',
+194683=>'L',
+194684=>'L',
+194685=>'L',
+194686=>'L',
+194687=>'L',
+194688=>'L',
+194689=>'L',
+194690=>'L',
+194691=>'L',
+194692=>'L',
+194693=>'L',
+194694=>'L',
+194695=>'L',
+194696=>'L',
+194697=>'L',
+194698=>'L',
+194699=>'L',
+194700=>'L',
+194701=>'L',
+194702=>'L',
+194703=>'L',
+194704=>'L',
+194705=>'L',
+194706=>'L',
+194707=>'L',
+194708=>'L',
+194709=>'L',
+194710=>'L',
+194711=>'L',
+194712=>'L',
+194713=>'L',
+194714=>'L',
+194715=>'L',
+194716=>'L',
+194717=>'L',
+194718=>'L',
+194719=>'L',
+194720=>'L',
+194721=>'L',
+194722=>'L',
+194723=>'L',
+194724=>'L',
+194725=>'L',
+194726=>'L',
+194727=>'L',
+194728=>'L',
+194729=>'L',
+194730=>'L',
+194731=>'L',
+194732=>'L',
+194733=>'L',
+194734=>'L',
+194735=>'L',
+194736=>'L',
+194737=>'L',
+194738=>'L',
+194739=>'L',
+194740=>'L',
+194741=>'L',
+194742=>'L',
+194743=>'L',
+194744=>'L',
+194745=>'L',
+194746=>'L',
+194747=>'L',
+194748=>'L',
+194749=>'L',
+194750=>'L',
+194751=>'L',
+194752=>'L',
+194753=>'L',
+194754=>'L',
+194755=>'L',
+194756=>'L',
+194757=>'L',
+194758=>'L',
+194759=>'L',
+194760=>'L',
+194761=>'L',
+194762=>'L',
+194763=>'L',
+194764=>'L',
+194765=>'L',
+194766=>'L',
+194767=>'L',
+194768=>'L',
+194769=>'L',
+194770=>'L',
+194771=>'L',
+194772=>'L',
+194773=>'L',
+194774=>'L',
+194775=>'L',
+194776=>'L',
+194777=>'L',
+194778=>'L',
+194779=>'L',
+194780=>'L',
+194781=>'L',
+194782=>'L',
+194783=>'L',
+194784=>'L',
+194785=>'L',
+194786=>'L',
+194787=>'L',
+194788=>'L',
+194789=>'L',
+194790=>'L',
+194791=>'L',
+194792=>'L',
+194793=>'L',
+194794=>'L',
+194795=>'L',
+194796=>'L',
+194797=>'L',
+194798=>'L',
+194799=>'L',
+194800=>'L',
+194801=>'L',
+194802=>'L',
+194803=>'L',
+194804=>'L',
+194805=>'L',
+194806=>'L',
+194807=>'L',
+194808=>'L',
+194809=>'L',
+194810=>'L',
+194811=>'L',
+194812=>'L',
+194813=>'L',
+194814=>'L',
+194815=>'L',
+194816=>'L',
+194817=>'L',
+194818=>'L',
+194819=>'L',
+194820=>'L',
+194821=>'L',
+194822=>'L',
+194823=>'L',
+194824=>'L',
+194825=>'L',
+194826=>'L',
+194827=>'L',
+194828=>'L',
+194829=>'L',
+194830=>'L',
+194831=>'L',
+194832=>'L',
+194833=>'L',
+194834=>'L',
+194835=>'L',
+194836=>'L',
+194837=>'L',
+194838=>'L',
+194839=>'L',
+194840=>'L',
+194841=>'L',
+194842=>'L',
+194843=>'L',
+194844=>'L',
+194845=>'L',
+194846=>'L',
+194847=>'L',
+194848=>'L',
+194849=>'L',
+194850=>'L',
+194851=>'L',
+194852=>'L',
+194853=>'L',
+194854=>'L',
+194855=>'L',
+194856=>'L',
+194857=>'L',
+194858=>'L',
+194859=>'L',
+194860=>'L',
+194861=>'L',
+194862=>'L',
+194863=>'L',
+194864=>'L',
+194865=>'L',
+194866=>'L',
+194867=>'L',
+194868=>'L',
+194869=>'L',
+194870=>'L',
+194871=>'L',
+194872=>'L',
+194873=>'L',
+194874=>'L',
+194875=>'L',
+194876=>'L',
+194877=>'L',
+194878=>'L',
+194879=>'L',
+194880=>'L',
+194881=>'L',
+194882=>'L',
+194883=>'L',
+194884=>'L',
+194885=>'L',
+194886=>'L',
+194887=>'L',
+194888=>'L',
+194889=>'L',
+194890=>'L',
+194891=>'L',
+194892=>'L',
+194893=>'L',
+194894=>'L',
+194895=>'L',
+194896=>'L',
+194897=>'L',
+194898=>'L',
+194899=>'L',
+194900=>'L',
+194901=>'L',
+194902=>'L',
+194903=>'L',
+194904=>'L',
+194905=>'L',
+194906=>'L',
+194907=>'L',
+194908=>'L',
+194909=>'L',
+194910=>'L',
+194911=>'L',
+194912=>'L',
+194913=>'L',
+194914=>'L',
+194915=>'L',
+194916=>'L',
+194917=>'L',
+194918=>'L',
+194919=>'L',
+194920=>'L',
+194921=>'L',
+194922=>'L',
+194923=>'L',
+194924=>'L',
+194925=>'L',
+194926=>'L',
+194927=>'L',
+194928=>'L',
+194929=>'L',
+194930=>'L',
+194931=>'L',
+194932=>'L',
+194933=>'L',
+194934=>'L',
+194935=>'L',
+194936=>'L',
+194937=>'L',
+194938=>'L',
+194939=>'L',
+194940=>'L',
+194941=>'L',
+194942=>'L',
+194943=>'L',
+194944=>'L',
+194945=>'L',
+194946=>'L',
+194947=>'L',
+194948=>'L',
+194949=>'L',
+194950=>'L',
+194951=>'L',
+194952=>'L',
+194953=>'L',
+194954=>'L',
+194955=>'L',
+194956=>'L',
+194957=>'L',
+194958=>'L',
+194959=>'L',
+194960=>'L',
+194961=>'L',
+194962=>'L',
+194963=>'L',
+194964=>'L',
+194965=>'L',
+194966=>'L',
+194967=>'L',
+194968=>'L',
+194969=>'L',
+194970=>'L',
+194971=>'L',
+194972=>'L',
+194973=>'L',
+194974=>'L',
+194975=>'L',
+194976=>'L',
+194977=>'L',
+194978=>'L',
+194979=>'L',
+194980=>'L',
+194981=>'L',
+194982=>'L',
+194983=>'L',
+194984=>'L',
+194985=>'L',
+194986=>'L',
+194987=>'L',
+194988=>'L',
+194989=>'L',
+194990=>'L',
+194991=>'L',
+194992=>'L',
+194993=>'L',
+194994=>'L',
+194995=>'L',
+194996=>'L',
+194997=>'L',
+194998=>'L',
+194999=>'L',
+195000=>'L',
+195001=>'L',
+195002=>'L',
+195003=>'L',
+195004=>'L',
+195005=>'L',
+195006=>'L',
+195007=>'L',
+195008=>'L',
+195009=>'L',
+195010=>'L',
+195011=>'L',
+195012=>'L',
+195013=>'L',
+195014=>'L',
+195015=>'L',
+195016=>'L',
+195017=>'L',
+195018=>'L',
+195019=>'L',
+195020=>'L',
+195021=>'L',
+195022=>'L',
+195023=>'L',
+195024=>'L',
+195025=>'L',
+195026=>'L',
+195027=>'L',
+195028=>'L',
+195029=>'L',
+195030=>'L',
+195031=>'L',
+195032=>'L',
+195033=>'L',
+195034=>'L',
+195035=>'L',
+195036=>'L',
+195037=>'L',
+195038=>'L',
+195039=>'L',
+195040=>'L',
+195041=>'L',
+195042=>'L',
+195043=>'L',
+195044=>'L',
+195045=>'L',
+195046=>'L',
+195047=>'L',
+195048=>'L',
+195049=>'L',
+195050=>'L',
+195051=>'L',
+195052=>'L',
+195053=>'L',
+195054=>'L',
+195055=>'L',
+195056=>'L',
+195057=>'L',
+195058=>'L',
+195059=>'L',
+195060=>'L',
+195061=>'L',
+195062=>'L',
+195063=>'L',
+195064=>'L',
+195065=>'L',
+195066=>'L',
+195067=>'L',
+195068=>'L',
+195069=>'L',
+195070=>'L',
+195071=>'L',
+195072=>'L',
+195073=>'L',
+195074=>'L',
+195075=>'L',
+195076=>'L',
+195077=>'L',
+195078=>'L',
+195079=>'L',
+195080=>'L',
+195081=>'L',
+195082=>'L',
+195083=>'L',
+195084=>'L',
+195085=>'L',
+195086=>'L',
+195087=>'L',
+195088=>'L',
+195089=>'L',
+195090=>'L',
+195091=>'L',
+195092=>'L',
+195093=>'L',
+195094=>'L',
+195095=>'L',
+195096=>'L',
+195097=>'L',
+195098=>'L',
+195099=>'L',
+195100=>'L',
+195101=>'L',
+917505=>'BN',
+917536=>'BN',
+917537=>'BN',
+917538=>'BN',
+917539=>'BN',
+917540=>'BN',
+917541=>'BN',
+917542=>'BN',
+917543=>'BN',
+917544=>'BN',
+917545=>'BN',
+917546=>'BN',
+917547=>'BN',
+917548=>'BN',
+917549=>'BN',
+917550=>'BN',
+917551=>'BN',
+917552=>'BN',
+917553=>'BN',
+917554=>'BN',
+917555=>'BN',
+917556=>'BN',
+917557=>'BN',
+917558=>'BN',
+917559=>'BN',
+917560=>'BN',
+917561=>'BN',
+917562=>'BN',
+917563=>'BN',
+917564=>'BN',
+917565=>'BN',
+917566=>'BN',
+917567=>'BN',
+917568=>'BN',
+917569=>'BN',
+917570=>'BN',
+917571=>'BN',
+917572=>'BN',
+917573=>'BN',
+917574=>'BN',
+917575=>'BN',
+917576=>'BN',
+917577=>'BN',
+917578=>'BN',
+917579=>'BN',
+917580=>'BN',
+917581=>'BN',
+917582=>'BN',
+917583=>'BN',
+917584=>'BN',
+917585=>'BN',
+917586=>'BN',
+917587=>'BN',
+917588=>'BN',
+917589=>'BN',
+917590=>'BN',
+917591=>'BN',
+917592=>'BN',
+917593=>'BN',
+917594=>'BN',
+917595=>'BN',
+917596=>'BN',
+917597=>'BN',
+917598=>'BN',
+917599=>'BN',
+917600=>'BN',
+917601=>'BN',
+917602=>'BN',
+917603=>'BN',
+917604=>'BN',
+917605=>'BN',
+917606=>'BN',
+917607=>'BN',
+917608=>'BN',
+917609=>'BN',
+917610=>'BN',
+917611=>'BN',
+917612=>'BN',
+917613=>'BN',
+917614=>'BN',
+917615=>'BN',
+917616=>'BN',
+917617=>'BN',
+917618=>'BN',
+917619=>'BN',
+917620=>'BN',
+917621=>'BN',
+917622=>'BN',
+917623=>'BN',
+917624=>'BN',
+917625=>'BN',
+917626=>'BN',
+917627=>'BN',
+917628=>'BN',
+917629=>'BN',
+917630=>'BN',
+917631=>'BN',
+917760=>'NSM',
+917761=>'NSM',
+917762=>'NSM',
+917763=>'NSM',
+917764=>'NSM',
+917765=>'NSM',
+917766=>'NSM',
+917767=>'NSM',
+917768=>'NSM',
+917769=>'NSM',
+917770=>'NSM',
+917771=>'NSM',
+917772=>'NSM',
+917773=>'NSM',
+917774=>'NSM',
+917775=>'NSM',
+917776=>'NSM',
+917777=>'NSM',
+917778=>'NSM',
+917779=>'NSM',
+917780=>'NSM',
+917781=>'NSM',
+917782=>'NSM',
+917783=>'NSM',
+917784=>'NSM',
+917785=>'NSM',
+917786=>'NSM',
+917787=>'NSM',
+917788=>'NSM',
+917789=>'NSM',
+917790=>'NSM',
+917791=>'NSM',
+917792=>'NSM',
+917793=>'NSM',
+917794=>'NSM',
+917795=>'NSM',
+917796=>'NSM',
+917797=>'NSM',
+917798=>'NSM',
+917799=>'NSM',
+917800=>'NSM',
+917801=>'NSM',
+917802=>'NSM',
+917803=>'NSM',
+917804=>'NSM',
+917805=>'NSM',
+917806=>'NSM',
+917807=>'NSM',
+917808=>'NSM',
+917809=>'NSM',
+917810=>'NSM',
+917811=>'NSM',
+917812=>'NSM',
+917813=>'NSM',
+917814=>'NSM',
+917815=>'NSM',
+917816=>'NSM',
+917817=>'NSM',
+917818=>'NSM',
+917819=>'NSM',
+917820=>'NSM',
+917821=>'NSM',
+917822=>'NSM',
+917823=>'NSM',
+917824=>'NSM',
+917825=>'NSM',
+917826=>'NSM',
+917827=>'NSM',
+917828=>'NSM',
+917829=>'NSM',
+917830=>'NSM',
+917831=>'NSM',
+917832=>'NSM',
+917833=>'NSM',
+917834=>'NSM',
+917835=>'NSM',
+917836=>'NSM',
+917837=>'NSM',
+917838=>'NSM',
+917839=>'NSM',
+917840=>'NSM',
+917841=>'NSM',
+917842=>'NSM',
+917843=>'NSM',
+917844=>'NSM',
+917845=>'NSM',
+917846=>'NSM',
+917847=>'NSM',
+917848=>'NSM',
+917849=>'NSM',
+917850=>'NSM',
+917851=>'NSM',
+917852=>'NSM',
+917853=>'NSM',
+917854=>'NSM',
+917855=>'NSM',
+917856=>'NSM',
+917857=>'NSM',
+917858=>'NSM',
+917859=>'NSM',
+917860=>'NSM',
+917861=>'NSM',
+917862=>'NSM',
+917863=>'NSM',
+917864=>'NSM',
+917865=>'NSM',
+917866=>'NSM',
+917867=>'NSM',
+917868=>'NSM',
+917869=>'NSM',
+917870=>'NSM',
+917871=>'NSM',
+917872=>'NSM',
+917873=>'NSM',
+917874=>'NSM',
+917875=>'NSM',
+917876=>'NSM',
+917877=>'NSM',
+917878=>'NSM',
+917879=>'NSM',
+917880=>'NSM',
+917881=>'NSM',
+917882=>'NSM',
+917883=>'NSM',
+917884=>'NSM',
+917885=>'NSM',
+917886=>'NSM',
+917887=>'NSM',
+917888=>'NSM',
+917889=>'NSM',
+917890=>'NSM',
+917891=>'NSM',
+917892=>'NSM',
+917893=>'NSM',
+917894=>'NSM',
+917895=>'NSM',
+917896=>'NSM',
+917897=>'NSM',
+917898=>'NSM',
+917899=>'NSM',
+917900=>'NSM',
+917901=>'NSM',
+917902=>'NSM',
+917903=>'NSM',
+917904=>'NSM',
+917905=>'NSM',
+917906=>'NSM',
+917907=>'NSM',
+917908=>'NSM',
+917909=>'NSM',
+917910=>'NSM',
+917911=>'NSM',
+917912=>'NSM',
+917913=>'NSM',
+917914=>'NSM',
+917915=>'NSM',
+917916=>'NSM',
+917917=>'NSM',
+917918=>'NSM',
+917919=>'NSM',
+917920=>'NSM',
+917921=>'NSM',
+917922=>'NSM',
+917923=>'NSM',
+917924=>'NSM',
+917925=>'NSM',
+917926=>'NSM',
+917927=>'NSM',
+917928=>'NSM',
+917929=>'NSM',
+917930=>'NSM',
+917931=>'NSM',
+917932=>'NSM',
+917933=>'NSM',
+917934=>'NSM',
+917935=>'NSM',
+917936=>'NSM',
+917937=>'NSM',
+917938=>'NSM',
+917939=>'NSM',
+917940=>'NSM',
+917941=>'NSM',
+917942=>'NSM',
+917943=>'NSM',
+917944=>'NSM',
+917945=>'NSM',
+917946=>'NSM',
+917947=>'NSM',
+917948=>'NSM',
+917949=>'NSM',
+917950=>'NSM',
+917951=>'NSM',
+917952=>'NSM',
+917953=>'NSM',
+917954=>'NSM',
+917955=>'NSM',
+917956=>'NSM',
+917957=>'NSM',
+917958=>'NSM',
+917959=>'NSM',
+917960=>'NSM',
+917961=>'NSM',
+917962=>'NSM',
+917963=>'NSM',
+917964=>'NSM',
+917965=>'NSM',
+917966=>'NSM',
+917967=>'NSM',
+917968=>'NSM',
+917969=>'NSM',
+917970=>'NSM',
+917971=>'NSM',
+917972=>'NSM',
+917973=>'NSM',
+917974=>'NSM',
+917975=>'NSM',
+917976=>'NSM',
+917977=>'NSM',
+917978=>'NSM',
+917979=>'NSM',
+917980=>'NSM',
+917981=>'NSM',
+917982=>'NSM',
+917983=>'NSM',
+917984=>'NSM',
+917985=>'NSM',
+917986=>'NSM',
+917987=>'NSM',
+917988=>'NSM',
+917989=>'NSM',
+917990=>'NSM',
+917991=>'NSM',
+917992=>'NSM',
+917993=>'NSM',
+917994=>'NSM',
+917995=>'NSM',
+917996=>'NSM',
+917997=>'NSM',
+917998=>'NSM',
+917999=>'NSM',
+983040=>'L',
+1048573=>'L',
+1048576=>'L',
+1114109=>'L'
+);
+
+/**
+ * Mirror unicode characters.
+ * For information on bidi mirroring, see UAX #9: Bidirectional Algorithm,
+ * at http://www.unicode.org/unicode/reports/tr9/
+ */
+global $unicode_mirror;
+$unicode_mirror = array (
+0x0028=>0x0029,
+0x0029=>0x0028,
+0x003C=>0x003E,
+0x003E=>0x003C,
+0x005B=>0x005D,
+0x005D=>0x005B,
+0x007B=>0x007D,
+0x007D=>0x007B,
+0x00AB=>0x00BB,
+0x00BB=>0x00AB,
+0x0F3A=>0x0F3B,
+0x0F3B=>0x0F3A,
+0x0F3C=>0x0F3D,
+0x0F3D=>0x0F3C,
+0x169B=>0x169C,
+0x169C=>0x169B,
+0x2018=>0x2019,
+0x2019=>0x2018,
+0x201C=>0x201D,
+0x201D=>0x201C,
+0x2039=>0x203A,
+0x203A=>0x2039,
+0x2045=>0x2046,
+0x2046=>0x2045,
+0x207D=>0x207E,
+0x207E=>0x207D,
+0x208D=>0x208E,
+0x208E=>0x208D,
+0x2208=>0x220B,
+0x2209=>0x220C,
+0x220A=>0x220D,
+0x220B=>0x2208,
+0x220C=>0x2209,
+0x220D=>0x220A,
+0x2215=>0x29F5,
+0x223C=>0x223D,
+0x223D=>0x223C,
+0x2243=>0x22CD,
+0x2252=>0x2253,
+0x2253=>0x2252,
+0x2254=>0x2255,
+0x2255=>0x2254,
+0x2264=>0x2265,
+0x2265=>0x2264,
+0x2266=>0x2267,
+0x2267=>0x2266,
+0x2268=>0x2269,
+0x2269=>0x2268,
+0x226A=>0x226B,
+0x226B=>0x226A,
+0x226E=>0x226F,
+0x226F=>0x226E,
+0x2270=>0x2271,
+0x2271=>0x2270,
+0x2272=>0x2273,
+0x2273=>0x2272,
+0x2274=>0x2275,
+0x2275=>0x2274,
+0x2276=>0x2277,
+0x2277=>0x2276,
+0x2278=>0x2279,
+0x2279=>0x2278,
+0x227A=>0x227B,
+0x227B=>0x227A,
+0x227C=>0x227D,
+0x227D=>0x227C,
+0x227E=>0x227F,
+0x227F=>0x227E,
+0x2280=>0x2281,
+0x2281=>0x2280,
+0x2282=>0x2283,
+0x2283=>0x2282,
+0x2284=>0x2285,
+0x2285=>0x2284,
+0x2286=>0x2287,
+0x2287=>0x2286,
+0x2288=>0x2289,
+0x2289=>0x2288,
+0x228A=>0x228B,
+0x228B=>0x228A,
+0x228F=>0x2290,
+0x2290=>0x228F,
+0x2291=>0x2292,
+0x2292=>0x2291,
+0x2298=>0x29B8,
+0x22A2=>0x22A3,
+0x22A3=>0x22A2,
+0x22A6=>0x2ADE,
+0x22A8=>0x2AE4,
+0x22A9=>0x2AE3,
+0x22AB=>0x2AE5,
+0x22B0=>0x22B1,
+0x22B1=>0x22B0,
+0x22B2=>0x22B3,
+0x22B3=>0x22B2,
+0x22B4=>0x22B5,
+0x22B5=>0x22B4,
+0x22B6=>0x22B7,
+0x22B7=>0x22B6,
+0x22C9=>0x22CA,
+0x22CA=>0x22C9,
+0x22CB=>0x22CC,
+0x22CC=>0x22CB,
+0x22CD=>0x2243,
+0x22D0=>0x22D1,
+0x22D1=>0x22D0,
+0x22D6=>0x22D7,
+0x22D7=>0x22D6,
+0x22D8=>0x22D9,
+0x22D9=>0x22D8,
+0x22DA=>0x22DB,
+0x22DB=>0x22DA,
+0x22DC=>0x22DD,
+0x22DD=>0x22DC,
+0x22DE=>0x22DF,
+0x22DF=>0x22DE,
+0x22E0=>0x22E1,
+0x22E1=>0x22E0,
+0x22E2=>0x22E3,
+0x22E3=>0x22E2,
+0x22E4=>0x22E5,
+0x22E5=>0x22E4,
+0x22E6=>0x22E7,
+0x22E7=>0x22E6,
+0x22E8=>0x22E9,
+0x22E9=>0x22E8,
+0x22EA=>0x22EB,
+0x22EB=>0x22EA,
+0x22EC=>0x22ED,
+0x22ED=>0x22EC,
+0x22F0=>0x22F1,
+0x22F1=>0x22F0,
+0x22F2=>0x22FA,
+0x22F3=>0x22FB,
+0x22F4=>0x22FC,
+0x22F6=>0x22FD,
+0x22F7=>0x22FE,
+0x22FA=>0x22F2,
+0x22FB=>0x22F3,
+0x22FC=>0x22F4,
+0x22FD=>0x22F6,
+0x22FE=>0x22F7,
+0x2308=>0x2309,
+0x2309=>0x2308,
+0x230A=>0x230B,
+0x230B=>0x230A,
+0x2329=>0x232A,
+0x232A=>0x2329,
+0x2768=>0x2769,
+0x2769=>0x2768,
+0x276A=>0x276B,
+0x276B=>0x276A,
+0x276C=>0x276D,
+0x276D=>0x276C,
+0x276E=>0x276F,
+0x276F=>0x276E,
+0x2770=>0x2771,
+0x2771=>0x2770,
+0x2772=>0x2773,
+0x2773=>0x2772,
+0x2774=>0x2775,
+0x2775=>0x2774,
+0x27C3=>0x27C4,
+0x27C4=>0x27C3,
+0x27C5=>0x27C6,
+0x27C6=>0x27C5,
+0x27D5=>0x27D6,
+0x27D6=>0x27D5,
+0x27DD=>0x27DE,
+0x27DE=>0x27DD,
+0x27E2=>0x27E3,
+0x27E3=>0x27E2,
+0x27E4=>0x27E5,
+0x27E5=>0x27E4,
+0x27E6=>0x27E7,
+0x27E7=>0x27E6,
+0x27E8=>0x27E9,
+0x27E9=>0x27E8,
+0x27EA=>0x27EB,
+0x27EB=>0x27EA,
+0x2983=>0x2984,
+0x2984=>0x2983,
+0x2985=>0x2986,
+0x2986=>0x2985,
+0x2987=>0x2988,
+0x2988=>0x2987,
+0x2989=>0x298A,
+0x298A=>0x2989,
+0x298B=>0x298C,
+0x298C=>0x298B,
+0x298D=>0x2990,
+0x298E=>0x298F,
+0x298F=>0x298E,
+0x2990=>0x298D,
+0x2991=>0x2992,
+0x2992=>0x2991,
+0x2993=>0x2994,
+0x2994=>0x2993,
+0x2995=>0x2996,
+0x2996=>0x2995,
+0x2997=>0x2998,
+0x2998=>0x2997,
+0x29B8=>0x2298,
+0x29C0=>0x29C1,
+0x29C1=>0x29C0,
+0x29C4=>0x29C5,
+0x29C5=>0x29C4,
+0x29CF=>0x29D0,
+0x29D0=>0x29CF,
+0x29D1=>0x29D2,
+0x29D2=>0x29D1,
+0x29D4=>0x29D5,
+0x29D5=>0x29D4,
+0x29D8=>0x29D9,
+0x29D9=>0x29D8,
+0x29DA=>0x29DB,
+0x29DB=>0x29DA,
+0x29F5=>0x2215,
+0x29F8=>0x29F9,
+0x29F9=>0x29F8,
+0x29FC=>0x29FD,
+0x29FD=>0x29FC,
+0x2A2B=>0x2A2C,
+0x2A2C=>0x2A2B,
+0x2A2D=>0x2A2E,
+0x2A2E=>0x2A2D,
+0x2A34=>0x2A35,
+0x2A35=>0x2A34,
+0x2A3C=>0x2A3D,
+0x2A3D=>0x2A3C,
+0x2A64=>0x2A65,
+0x2A65=>0x2A64,
+0x2A79=>0x2A7A,
+0x2A7A=>0x2A79,
+0x2A7D=>0x2A7E,
+0x2A7E=>0x2A7D,
+0x2A7F=>0x2A80,
+0x2A80=>0x2A7F,
+0x2A81=>0x2A82,
+0x2A82=>0x2A81,
+0x2A83=>0x2A84,
+0x2A84=>0x2A83,
+0x2A8B=>0x2A8C,
+0x2A8C=>0x2A8B,
+0x2A91=>0x2A92,
+0x2A92=>0x2A91,
+0x2A93=>0x2A94,
+0x2A94=>0x2A93,
+0x2A95=>0x2A96,
+0x2A96=>0x2A95,
+0x2A97=>0x2A98,
+0x2A98=>0x2A97,
+0x2A99=>0x2A9A,
+0x2A9A=>0x2A99,
+0x2A9B=>0x2A9C,
+0x2A9C=>0x2A9B,
+0x2AA1=>0x2AA2,
+0x2AA2=>0x2AA1,
+0x2AA6=>0x2AA7,
+0x2AA7=>0x2AA6,
+0x2AA8=>0x2AA9,
+0x2AA9=>0x2AA8,
+0x2AAA=>0x2AAB,
+0x2AAB=>0x2AAA,
+0x2AAC=>0x2AAD,
+0x2AAD=>0x2AAC,
+0x2AAF=>0x2AB0,
+0x2AB0=>0x2AAF,
+0x2AB3=>0x2AB4,
+0x2AB4=>0x2AB3,
+0x2ABB=>0x2ABC,
+0x2ABC=>0x2ABB,
+0x2ABD=>0x2ABE,
+0x2ABE=>0x2ABD,
+0x2ABF=>0x2AC0,
+0x2AC0=>0x2ABF,
+0x2AC1=>0x2AC2,
+0x2AC2=>0x2AC1,
+0x2AC3=>0x2AC4,
+0x2AC4=>0x2AC3,
+0x2AC5=>0x2AC6,
+0x2AC6=>0x2AC5,
+0x2ACD=>0x2ACE,
+0x2ACE=>0x2ACD,
+0x2ACF=>0x2AD0,
+0x2AD0=>0x2ACF,
+0x2AD1=>0x2AD2,
+0x2AD2=>0x2AD1,
+0x2AD3=>0x2AD4,
+0x2AD4=>0x2AD3,
+0x2AD5=>0x2AD6,
+0x2AD6=>0x2AD5,
+0x2ADE=>0x22A6,
+0x2AE3=>0x22A9,
+0x2AE4=>0x22A8,
+0x2AE5=>0x22AB,
+0x2AEC=>0x2AED,
+0x2AED=>0x2AEC,
+0x2AF7=>0x2AF8,
+0x2AF8=>0x2AF7,
+0x2AF9=>0x2AFA,
+0x2AFA=>0x2AF9,
+0x2E02=>0x2E03,
+0x2E03=>0x2E02,
+0x2E04=>0x2E05,
+0x2E05=>0x2E04,
+0x2E09=>0x2E0A,
+0x2E0A=>0x2E09,
+0x2E0C=>0x2E0D,
+0x2E0D=>0x2E0C,
+0x2E1C=>0x2E1D,
+0x2E1D=>0x2E1C,
+0x3008=>0x3009,
+0x3009=>0x3008,
+0x300A=>0x300B,
+0x300B=>0x300A,
+0x300C=>0x300D,
+0x300D=>0x300C,
+0x300E=>0x300F,
+0x300F=>0x300E,
+0x3010=>0x3011,
+0x3011=>0x3010,
+0x3014=>0x3015,
+0x3015=>0x3014,
+0x3016=>0x3017,
+0x3017=>0x3016,
+0x3018=>0x3019,
+0x3019=>0x3018,
+0x301A=>0x301B,
+0x301B=>0x301A,
+0x301D=>0x301E,
+0x301E=>0x301D,
+0xFE59=>0xFE5A,
+0xFE5A=>0xFE59,
+0xFE5B=>0xFE5C,
+0xFE5C=>0xFE5B,
+0xFE5D=>0xFE5E,
+0xFE5E=>0xFE5D,
+0xFE64=>0xFE65,
+0xFE65=>0xFE64,
+0xFF08=>0xFF09,
+0xFF09=>0xFF08,
+0xFF1C=>0xFF1E,
+0xFF1E=>0xFF1C,
+0xFF3B=>0xFF3D,
+0xFF3D=>0xFF3B,
+0xFF5B=>0xFF5D,
+0xFF5D=>0xFF5B,
+0xFF5F=>0xFF60,
+0xFF60=>0xFF5F,
+0xFF62=>0xFF63,
+0xFF63=>0xFF62);
+
+/**
+ * Arabic shape subtitutions
+ * char code=>isolated, final, initial, medial
+ */
+global $unicode_arlet;
+$unicode_arlet = array(
+1569=>array(65152),
+1570=>array(65153, 65154, 65153, 65154),
+1571=>array(65155, 65156, 65155, 65156),
+1572=>array(65157, 65158),
+1573=>array(65159, 65160, 65159, 65160),
+1574=>array(65161, 65162, 65163, 65164),
+1575=>array(65165, 65166, 65165, 65166),
+1576=>array(65167, 65168, 65169, 65170),
+1577=>array(65171, 65172),
+1578=>array(65173, 65174, 65175, 65176),
+1579=>array(65177, 65178, 65179, 65180),
+1580=>array(65181, 65182, 65183, 65184),
+1581=>array(65185, 65186, 65187, 65188),
+1582=>array(65189, 65190, 65191, 65192),
+1583=>array(65193, 65194, 65193, 65194),
+1584=>array(65195, 65196, 65195, 65196),
+1585=>array(65197, 65198, 65197, 65198),
+1586=>array(65199, 65200, 65199, 65200),
+1587=>array(65201, 65202, 65203, 65204),
+1588=>array(65205, 65206, 65207, 65208),
+1589=>array(65209, 65210, 65211, 65212),
+1590=>array(65213, 65214, 65215, 65216),
+1591=>array(65217, 65218, 65219, 65220),
+1592=>array(65221, 65222, 65223, 65224),
+1593=>array(65225, 65226, 65227, 65228),
+1594=>array(65229, 65230, 65231, 65232),
+1601=>array(65233, 65234, 65235, 65236),
+1602=>array(65237, 65238, 65239, 65240),
+1603=>array(65241, 65242, 65243, 65244),
+1604=>array(65245, 65246, 65247, 65248),
+1605=>array(65249, 65250, 65251, 65252),
+1606=>array(65253, 65254, 65255, 65256),
+1607=>array(65257, 65258, 65259, 65260),
+1608=>array(65261, 65262, 65261, 65262),
+1609=>array(65263, 65264, 64488, 64489),
+1610=>array(65265, 65266, 65267, 65268),
+1649=>array(64336, 64337),
+1655=>array(64477),
+1657=>array(64358, 64359, 64360, 64361),
+1658=>array(64350, 64351, 64352, 64353),
+1659=>array(64338, 64339, 64340, 64341),
+1662=>array(64342, 64343, 64344, 64345),
+1663=>array(64354, 64355, 64356, 64357),
+1664=>array(64346, 64347, 64348, 64349),
+1667=>array(64374, 64375, 64376, 64377),
+1668=>array(64370, 64371, 64372, 64373),
+1670=>array(64378, 64379, 64380, 64381),
+1671=>array(64382, 64383, 64384, 64385),
+1672=>array(64392, 64393),
+1676=>array(64388, 64389),
+1677=>array(64386, 64387),
+1678=>array(64390, 64391),
+1681=>array(64396, 64397),
+1688=>array(64394, 64395, 64394, 64395),
+1700=>array(64362, 64363, 64364, 64365),
+1702=>array(64366, 64367, 64368, 64369),
+1705=>array(64398, 64399, 64400, 64401),
+1709=>array(64467, 64468, 64469, 64470),
+1711=>array(64402, 64403, 64404, 64405),
+1713=>array(64410, 64411, 64412, 64413),
+1715=>array(64406, 64407, 64408, 64409),
+1722=>array(64414, 64415),
+1723=>array(64416, 64417, 64418, 64419),
+1726=>array(64426, 64427, 64428, 64429),
+1728=>array(64420, 64421),
+1729=>array(64422, 64423, 64424, 64425),
+1733=>array(64480, 64481),
+1734=>array(64473, 64474),
+1735=>array(64471, 64472),
+1736=>array(64475, 64476),
+1737=>array(64482, 64483),
+1739=>array(64478, 64479),
+1740=>array(64508, 64509, 64510, 64511),
+1744=>array(64484, 64485, 64486, 64487),
+1746=>array(64430, 64431),
+1747=>array(64432, 64433)
+);
+
+/**
+ * Arabic laa letter
+ * char code=>isolated, final, initial, medial
+ */
+global $laa_array;
+$laa_array = array (
+1570 =>array(65269, 65270, 65269, 65270),
+1571 =>array(65271, 65272, 65271, 65272),
+1573 =>array(65273, 65274, 65273, 65274),
+1575 =>array(65275, 65276, 65275, 65276)
+);
+
+/**
+ * Array of character substitutions for sequences of two diacritics symbols starting with SHADDA (0651 HEX, 1617 DEC).
+ * Combining characters that can occur with Shadda (U0651) are placed in UE586-UE594.
+ * Putting the combining mark and shadda in the same glyph allows us to avoid the two marks overlapping each other in an illegible manner.
+ * second NSM char code=>substitution char
+ */
+global $diacritics;
+$diacritics = array (
+1612=>64606, # Shadda + Dammatan
+1613=>64607, # Shadda + Kasratan
+1614=>64608, # Shadda + Fatha
+1615=>64609, # Shadda + Damma
+1616=>64610 # Shadda + Kasra
+);
+
+/**
+ * Array of character substitutions from UTF-8 unicode to latin1
+ */
+global $utf8tolatin;
+$utf8tolatin = array (
+8364=>128, # Euro1
+338=>140, # OE
+352=>138, # Scaron
+376=>159, # Ydieresis
+381=>142, # Zcaron2
+8226=>149, # bullet3
+710=>136, # circumflex
+8224=>134, # dagger
+8225=>135, # daggerdbl
+8230=>133, # ellipsis
+8212=>151, # emdash
+8211=>150, # endash
+402=>131, # florin
+8249=>139, # guilsinglleft
+8250=>155, # guilsinglright
+339=>156, # oe
+8240=>137, # perthousand
+8222=>132, # quotedblbase
+8220=>147, # quotedblleft
+8221=>148, # quotedblright
+8216=>145, # quoteleft
+8217=>146, # quoteright
+8218=>130, # quotesinglbase
+353=>154, # scaron
+732=>152, # tilde
+8482=>153, # trademark
+382=>158 # zcaron2
+);
+
+//============================================================+
+// END OF FILE
+//============================================================+
+?>